with one click
new-project-playbook
// New project setup playbook — GitLab, CI/CD, Plane, test-rig, branching, agent tracking
// New project setup playbook — GitLab, CI/CD, Plane, test-rig, branching, agent tracking
[HINT] Download the complete skill directory including SKILL.md and all related files
| name | new-project-playbook |
| description | New project setup playbook — GitLab, CI/CD, Plane, test-rig, branching, agent tracking |
| user-invocable | true |
Run this BEFORE build-method [SPEC] phase. Every new project.
gitlab.com/flow-master/<project-name>developSSH_PRIVATE_KEY in GitLab CI/CD varsmain ← production (manual deploy gate)
└── staging ← auto-deploy on push
└── develop ← auto-deploy on push
└── feature/<plane-id>-<desc>
└── bugfix/<plane-id>-<desc>
develop, MR back to developfeat:, fix:, docs:, refactor:, test:, ci:Pipeline: test → build → deploy. No docker-compose in CI — GitLab CI handles everything.
stages: [test, build, deploy]
test:
stage: test
image: python:3.11 # or node:20
script:
- test-rig run --parallel
- test-rig coverage --threshold 80
build:
stage: build
image: docker:24
services: [docker:24-dind]
script:
- docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
- docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
deploy-dev:
stage: deploy
only: [develop]
environment: development
script:
- ssh root@$DEV_SERVER "cd /opt/$PROJECT-develop && docker pull $IMAGE && docker compose up -d"
deploy-staging:
stage: deploy
only: [staging]
environment: staging
script:
- ssh root@$STAGING_SERVER "cd /opt/$PROJECT-staging && docker pull $IMAGE && docker compose up -d"
deploy-prod:
stage: deploy
only: [main]
when: manual
environment: production
script:
- ssh root@$PRODUCTION_SERVER "cd /opt/$PROJECT && docker pull $IMAGE && docker compose up -d"
Servers: Query live IPs from commander-mcp: get_context_servers
GitLab Runner: On dev server (query commander-mcp for IP), tags: docker, demo-server
Server: Plane on dev-01 (query commander-mcp for IP), port 8083 | Workspace: flowmaster
MCP Server: dev-01 port 8012 (SSE transport) — query commander-mcp for IP
Credentials: ben@flow-master.ai — use /credentials skill for password
Setup:
RTA)Status flow: Backlog → Todo → In Progress → In Review → Done
Rules:
Blocked status + comment with reason| Category | Format | Examples |
|---|---|---|
| Owner | owner:<name> | owner:ben, owner:irtiza, owner:sadiq |
| Agent | agent:<name> | agent:coral-fox, agent:steel-hawk |
| Environment | env:<location> | env:mac-mini, env:ben-mbp, env:pod-api, env:server-dev |
| Priority | P0 to P3 | P0-critical, P1-high, P2-medium, P3-low |
Pick up:
In Progressagent:<my-name> + env:<where>Checked out by <agent> at <time>Complete:
Done. Evidence: <tests, logs, screenshots>agent: labelIn ReviewBlocked:
Blocked: <reason>Blocked (keep agent label)agent:* label → all active agent workenv:mac-mini → all Mac Mini workIn Progress + no agent label → orphaned (problem!)Every new service MUST register its ports.
/ports skill for current allocations~/.claude/skills/claude-config-loader/config/ports.yamlEvery new service MUST register its secrets.
.env.example with all env vars (no real values).env. Always .gitignore it.Per service:
cd <service-dir> && test-rig setup && test-rig doctor
<service>/
├── .gitlab-ci.yml
├── Dockerfile
├── test-rig.config.yaml
├── .env.example
├── README.md
├── src/
│ └── main.py
└── tests/
├── unit/
├── integration/
└── specs/
## Plane: [RTA-123](link)
## What: <1-2 sentences>
## Evidence
- [ ] test-rig passes, coverage >= 80%
- [ ] Screenshots (if UI)
- [ ] Logs clean
## Agent: <name> | Env: <where>
Review: CI passes + 1 approval = merge. Human required for: prod deploy, schema change, security.
For live server IPs and infrastructure, use commander-mcp: get_context_servers