start-phase
Skill0 starsChanged 6 months agoMITView on GitHub
Open a phase — the opener counterpart to close-phase. Use when the user asks to start a phase, open a phase, begin a phase, kick off a phase / batch / chat, or cut the phase branch before an execute-batch run. Resolves an explicit phase target, gates the entry state (clean working tree + currently on main + every phase story DoR-ready), then cuts the phase branch off main and records the open on the board.
In this repository32 other files it gives its agents.
- _00-Project-Management/CLAUDE.mdCLAUDE.md
- autopilotSkill
- close-out-storySkill
- close-phaseSkill
- coreSkill
- critiqueSkill
- curate-toolkitSkill
- documentSkill
- draft-epicSkill
- draft-okrsSkill
- draft-prdSkill
- execute-batch-parallelSkill
- execute-batchSkill
- execute-storySkill
- execution-strategistSkill
- fill-claude-mdSkill
- installSkill
- modeSkill
- monthly-retroSkill
- path-scope-exampleSkill
- peer-reviewSkill
- plan-driftSkill
- refine-backlogSkill
- reflectSkill
- run-testplanSkill
- session-startSkill
- split-into-featuresSkill
- split-into-storiesSkill
- triage-backlogSkill
- updateSkill
- weekly-monitorSkill
- write-outcomesSkill
The file
We split this skill into the rules it gives an agent
2 rules. About 0 are common, 1 is distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 48
Before creating anything, verify all three entry conditions.
- Very specific: line 59
If all three pass → proceed (Step 3, branch creation).
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Tandem: start-phase (PM hat)
Operate as PM hat. start-phase is the opener counterpart to close-phase: where
close-phase is the per-phase Definition-of-Done gate that wraps a finished phase up and merges it
to main, start-phase is its mirror at the front — it opens a phase safely before an
execution-strategist chat / execute-batch run begins. The two skills share one phase-branch
convention (40-Decisions/, ADR-0045): start-phase cuts phase/<phase-id> off main,
close-phase later merges that same branch back to main.
It runs in a fixed order, each step gated on the one before it:
- Phase-scope detection — resolve the set of stories in an explicit target, and echo them.
- Entry gate — clean working tree + currently on
main+ every phase story DoR-ready, or abort and list the specific gap. - Branch creation — cut
phase/<phase-id>offmainper the convention; surface the checkout command (never force, noghassumed). - Board update — record the open on
MONITOR.md+ACTIVE.mdand regenerate the dashboard.
Gate-then-act. Step 1 only reads; Step 2 is a hard gate; once it passes, Steps 3–4 act. If the entry gate fails,
start-phasestops and reports the failing item — it never branches from a dirty tree, off the wrong base, or for a phase whose stories aren't ready. This mirrorsclose-phase's done-gate discipline, inverted for entry: the abort-and-list path is the load-bearing behaviour.
Step 1 — Phase-scope detection (EXPLICIT target — never guess)
Take an explicit phase / chat / epic target from the user — never infer which phase to
open from ambient state (mirrors close-phase Step 1). Accepted targets:
- a strategist phase or chat id (e.g.
CHAT-01) from anEXECUTION-STRATEGY-*.jsonsidecar — resolve to thestories[]listed under that chat / phase; - an
EPIC-NN(or a singleFEAT-NN.M) — resolve the set of stories belonging to that epic / feature by globbing32-Stories/EPIC-NN/....
Resolve the set of stories in the target, then echo the resolved list (each id +
status) back to the user so the scope is explicit and reviewable before anything is created. If
the target is ambiguous, missing, or zero-story, stop and ask for a concrete
phase / chat / epic — do not guess which stories are in scope. A target that resolves to no
stories is treated as a missing target: abort rather than open an empty phase.
Step 2 — Entry gate (abort-and-list — never open from a bad state)
Before creating anything, verify all three entry conditions. This is a hard gate:
- Clean working tree —
git status --porcelainis empty (no uncommitted changes); a phase must not be opened on top of unrelated dirty edits. - Currently on
main— the phase branch is cut frommain(ADR-0045), so the entry branch must bemain(git branch --show-current→main). Opening from another branch would give the phase branch the wrong base. - Every phase story DoR-ready — each resolved story carries
status: readyin its frontmatter (the kit's Definition-of-Ready gate). Anot-started/ un-refined story must go through/tandem:refine-backlogfirst.
If all three pass → proceed (Step 3, branch creation). If any fails → abort and list the
specific gap — name exactly which item failed (the dirty paths, the current branch if not
main, or each not-ready story id + its status) so the operator knows precisely what to fix.
start-phase never opens a phase from a dirty tree, off a non-main base, or with stories that
aren't ready; a half-opened phase is worse than an un-opened one.
Step 3 — Create the phase branch off main (surface the command — never force)
Once the entry gate passes, create the phase branch per the shared convention (40-Decisions/,
ADR-0045): name phase/<phase-id>, cut from main.
- Branch off
main. The phase branch is created frommain(the entry gate already confirmed you're onmain), giving it the clean baseclose-phasewill later merge back.<phase-id>is the explicit target's id (e.g.phase/chat-01,phase/epic-10), lowercased, exactly per the convention ADR-0045. Surface a copy-pasteable command — never force, no
ghassumed.start-phasesurfaces the branch-create command for the operator rather than force-creating it:git switch -c phase/<phase-id> main # equivalently: git checkout -b phase/<phase-id> mainThe command is never a force operation —
start-phasenever force-creates or clobbers a branch (no--force, no-Breset), and it assumes noghCLI (a plaingitcommand / link is surfaced, not a host API call). This mirrorsclose-phaseStep 7 — surface the command, never force — inverted for branch creation. If aphase/<phase-id>branch already exists, stop and surface that rather than overwrite it.
Step 4 — Record the open on the board (MONITOR + ACTIVE) + regenerate the dashboard
With the phase branch created, record that the phase is now open so the live board reflects it
the moment it opens — the front-end mirror of close-phase Step 5 (which records the close):
- MONITOR — update
42-Monitor/MONITOR.md: note the phase's stories are now in-flight, plus a one-line revision-history entry dated today recording that the phase opened. - ACTIVE — add the now-in-progress story pointers to
12-Active/ACTIVE.md(the live WIP index ofin-progressitems), per the kit's "when you change a status" rule — the moment the phase opens, its stories appear on the board. - Dashboard — regenerate it with
npm run pm:dashso42-Monitor/DASHBOARD.htmlreflects the opened phase. The MONITOR/ACTIVE edits and the dashboard regen happen in the same step (the kit's atomic status-change rule).
After opening: fresh session or autonomous subagent-per-chat
Once a phase is open, each chat can run in a manually-opened fresh session, or the operator
may authorise an autonomous subagent-per-chat run — a PM-hat orchestrator dispatching each
execute-batch as its own fresh-context subagent, one chat at a time. Equivalence: a
subagent's fresh context == a manually-opened fresh session, satisfying one-hat-per-session.
See SOP §18 ("Subagent-per-batch — autonomous phase runs") for the full contract.
Non-negotiable rules (from CLAUDE.md)
- Operates as PM hat; the phase-level opener analogue of
close-phase. - Scope detection takes an explicit target (never guesses); the entry gate (Step 2) is a hard gate — abort and list the failing item, never open from a bad entry state.
- Branch creation (Step 3) surfaces the
git switch -c … maincommand and never forces, assuming nogh— per the shared phase-branch convention (ADR-0045) and the project rootCLAUDE.mdgit rules (branch first; no force without authorisation). - Board update (Step 4) follows the kit's "when you change a status" rule — the
MONITOR.md+ACTIVE.mdedits and thenpm run pm:dashregen happen together when the phase opens.
Next command
Next: /tandem:execute-batch
With the phase open and the branch cut, pull the phase's first chat:
/tandem:execute-batch <chat-id> (the batched fork of the canonical chain —
see the chain record in core).
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

