| name | crisp-orchestrator |
| description | CRISP session manager — detects project state and routes to the right entry point. Use /crisp to start or resume any CRISP engagement. Handles new projects (discovery), existing codebases (archaeology), active sprints (execute), and validation (prove). Reads docs/crisp-state.json to know where you are. |
CRISP — Session Orchestrator
Before doing anything else, output this exact text verbatim:
C — Clarify · R — Results · I — Investigate
S — Spec · P — Prove · E — Execute
Outcome first. Always.
Step 1: Detect project state
Check if docs/crisp-state.json exists.
If docs/crisp-state.json does NOT exist → Ask what we're starting
Do not assume. Ask:
"Starting fresh — two quick questions:
- Do you have an existing codebase, or are we starting from scratch?
- What's the project?"
If starting from scratch (no existing code):
- Copy
templates/crisp-state.json to docs/crisp-state.json, set mode: "discovery"
- Read
.claude/skills/phase1-clarify/SKILL.md
- Begin Phase C with: "Tell me about the project — what are you trying to solve, or what did the client brief say?"
- Do not explain the methodology. Just ask.
If existing codebase (has code, no docs):
- Copy
templates/crisp-state.json to docs/crisp-state.json, set mode: "archaeology"
- Inform the user: "Got it — I'll run CRISP Archaeology to reverse-engineer your codebase into docs. This requires the crisp-archaeology skill. Open your codebase project in Claude Code and say: 'run archaeology on [path]'."
- Do not attempt to run archaeology here — it runs in the target project, not in this repo.
If docs/crisp-state.json EXISTS → Read it and route
Read docs/crisp-state.json. Check mode first, then route.
Mode: "discovery" (standard CRISP phases)
1. Report current status
Project: [project.name] · Client: [project.client]
Mode: Discovery
─────────────────────────────────────────
Phases complete: [phases.complete joined with " · " — or "None"]
Current phase: [phases.current]
─────────────────────────────────────────
Summarise the current phase state in 2–3 lines:
- Phase C: "Problem defined as [oneSentence]. Go/No-Go: [goNoGo]. Type: [type]."
- Phase R: "Baseline: [baseline]. Target: [successTarget]. [N] HITL zones defined."
- Phase I: "Process track: [processTrack]. User types: [userTypes]. Data mapping: [dataMappingRequired]."
- Phase S: "[sprintCount] sprints planned. Stack: [stack.layers summary]."
- Phase P: "Outcome: [outcome]."
If open questions exist in the current phase, list them before asking what to do next.
2. Check if ready for Execute
If phases.S.complete: true and handoffs.ready_for_execute: false:
"Phase S is complete. Ready to start building? Say 'Start Sprint 1' to hand off to CRISP Execute."
If the user confirms → update handoffs.ready_for_execute: true in crisp-state.json.
3. Route
| User says | Action |
|---|
| Continue / yes / Phase [X] | Load phase SKILL.md and proceed |
| Start Sprint 1 / execute / build | Set handoffs.ready_for_execute: true. Route to Execute (see Execute routing below). |
| New project | Ask: overwrite state or new docs/ folder? |
| Show full state | Print crisp-state.json in readable format |
| What's left | List incomplete phases and open questions |
Mode: "archaeology"
1. Report status
Project: [project.name]
Mode: Archaeology
─────────────────────────────────────────
Recon: [phases.recon.status]
Strawman: [phases.strawman.status]
Elicitation: [phases.elicitation.status] ([artifacts.confidence_summary.confirmed] confirmed · [artifacts.confidence_summary.open] open)
Output: [phases.output.status]
─────────────────────────────────────────
2. Route
If handoffs.archaeology_complete: false:
"Archaeology is in progress. Open the target codebase in Claude Code and continue with the crisp-archaeology skill."
If handoffs.archaeology_complete: true and handoffs.entry_point_after: "phase-s":
"Archaeology is complete. [N] open questions remain (see docs/open-questions.md). Ready to run Phase S to spec the next phase?"
Route to Phase S on confirmation.
If handoffs.archaeology_complete: true and handoffs.entry_point_after: "crisp-execute":
"Archaeology is complete. Sprint plan exists. Ready to start building?"
Route to Execute on confirmation.
Mode: "execute"
1. Report status
Project: [project.name]
Mode: Execute
─────────────────────────────────────────
Current sprint: [execute.current_sprint]
Sprints complete: [execute.sprints_complete]
Change requests: [execute.change_requests.length] queued
─────────────────────────────────────────
Show gate status for the current sprint if available:
- Product gate: [execute.gates.sprint_N.product]
- Security gate: [execute.gates.sprint_N.security]
2. Route
| User says | Action |
|---|
| Continue / start sprint / build | Load .claude/skills/crisp-execute/SKILL.md and proceed |
| New requirement: [X] | Route to Execute change request intake |
| Close sprint [N] | Route to Execute sprint close sequence |
| Show change requests | List execute.change_requests |
| Go to Phase P / prove | Check all sprints complete, then route to Phase P |
Mode: "prove"
Route to .claude/skills/phase5-prove/SKILL.md.
Phase routing table
| Phase / Mode | Skill to load |
|---|
| C — Clarify | .claude/skills/phase1-clarify/SKILL.md |
| R — Results | .claude/skills/phase2-results/SKILL.md |
| I — Investigate | .claude/skills/phase3-investigate/SKILL.md |
| S — Spec | .claude/skills/phase4-spec/SKILL.md |
| E — Execute | .claude/skills/crisp-execute/SKILL.md |
| P — Prove | .claude/skills/phase5-prove/SKILL.md |
| Archaeology | Runs in target project via crisp-archaeology skill (separate repo) |
crisp-state.json handoff signals
The orchestrator reads and writes these fields to coordinate between modes:
| Field | Set by | Meaning |
|---|
mode | Orchestrator on create | Which system is active |
handoffs.discovery_complete | Phase S exit | All phases done, ready for execute |
handoffs.archaeology_complete | Archaeology skill | Archaeology finished, ready to proceed |
handoffs.ready_for_execute | Orchestrator | Spec is locked, execute can start |
handoffs.execute_complete | Execute skill | All sprints done, ready for prove |
execute.current_sprint | Execute skill | Which sprint is active |
execute.gates.sprint_N | Execute skill | Gate results per sprint |
execute.change_requests | Execute skill | Queued change requests |
Rules
- Never skip a phase without explicit user instruction.
- If a phase is marked complete but the user wants to re-run it — allow it, flag: "Phase [X] is marked complete. Running again won't reset state automatically."
- If
crisp-state.json has open questions — surface them before starting the next phase.
- If phases are out of order — flag it: "Phase R isn't marked complete. Running Phase S without it means some pre-fills will be missing. Continue anyway?"
- If
execute.change_requests has queued items when a sprint opens — surface them: "[N] change requests are queued. Review before sprint starts?"
- Keep responses tight. Status reporting is a tool, not a presentation.