Quick Start
Product model
Section titled “Product model”Spec-To-Ship (s2s) is a CLI SDLC orchestrator.
You initialize a project once with s2s init, then work from your chat app (claude-cli or codex-cli). S2S classifies your intent, plans the minimum stage route, and keeps execution governed through operational state, worktree isolation, and runtime contracts.
First run
Section titled “First run”cd /path/to/apps2s initDaily workflow
Section titled “Daily workflow”-
Start/resume chat in a configured project:
s2s
-
Or launch explicit chat app + app path:
s2s claude-cli(current path)s2s codex-cli /path/to/app
-
Check installed CLI version when needed:
s2s helps2s versions2s --versions2s -v
-
Submit freeform intent to the orchestrator:
s2s request "build a release dashboard with approval gates"s2s request "fix the timeout issue in the auth flow"- The orchestrator classifies intent, plans the minimum route, and creates or reuses a Change and Spec.
-
Inspect workflow and entity state when needed:
s2s statuss2s show changes2s show slicess2s show runss2s configs2s doctor
-
Resolve approval gates:
s2s approves2s reject
-
Create/restore safety snapshots when needed:
s2s backups2s restore --latests2s restore --snapshot=<snapshot-id>
-
Run stages using the two-phase pattern (chat-native mode):
Phase 1 — get the task:
s2s stage pms2s stage researchs2s stage designs2s stage engineering
This outputs a structured task package: objective, context, artifact specification, and exact file paths to write. S2S updates
.s2s/live.mdwithstatus: context_deliveredand the next action.Phase 2 — generate and submit:
- Generate the artifact(s) described in the task package.
- Write each artifact to the path specified.
- Run
s2s stage <stage> --submitto record completion and advance the workflow.
After
--submit, follow the next-action instruction in the output:- Quality passes, no gate: proceed to the next stage.
- Quality fails: fix the listed issues and re-submit.
- Review gate created: wait for
s2s approve <gateId>ors2s reject <gateId>.
Other stage options:
s2s stage <stage> --refine "add dark mode to the existing feature"— refine with a specific intents2s stage <stage> --refine— refine the active change (generic fallback)s2s stage engineering_exec— runs the existing agent pipeline in an isolated worktree (standalone mode or explicit invocation)
Session observability
Section titled “Session observability”At chat launch, s2s prints a Session Banner with:
- S2S status
- project alias and path
- selected client
Runtime toggles live in .s2s/config/runtime.json under chatObservability:
sessionBannerEnabledwrapperPrefixEnabledwrapperPrefixTemplate
Use s2s config edit to update these values interactively.
Wrapper prefix is available only for CLI-launched sessions (codex-cli / claude-cli), not desktop app sessions.
Guardrail conflict policy also lives in .s2s/config/runtime.json:
guardrailPolicy=strict: discrepancy blockss2s stageand failss2s doctor.guardrailPolicy=warn: discrepancy is reported as warning.guardrailPolicy=prompt: init/config asks you to choose strict, warn, or abort.
Desktop workflow
Section titled “Desktop workflow”- In guided init (
s2s init), select launch client by number:codex-cliclaude-clicodex-desktopclaude-desktop
- If desktop client is selected, open the same app root in desktop workspace and start chat there.
- If you later run
s2sin terminal while desktop mode is active:- s2s shows desktop guidance
- s2s offers switching to equivalent CLI app
- if you keep desktop mode, no CLI launch happens
- Change preference anytime with:
s2s config edit
Project resolution rules
Section titled “Project resolution rules”Project commands accept optional final [project]:
s2s config my-projects2s config edit my-projects2s stage engineering my-projects2s status my-project
Resolution behavior:
- If
.s2sexists in current path or ancestors, local context is used. - If local context is not available,
[project]is required. - If
[project]is provided, explicit project takes precedence.
List projects:
s2s listSession orientation with live.md and protocol.md
Section titled “Session orientation with live.md and protocol.md”.s2s/live.md is written by s2s after every significant command. It always contains:
- The active project and feature
- Current stage and status
- The next action the AI should take
At the start of a session, read .s2s/live.md to orient without re-running any commands. If s2s output has scrolled off-screen, reading live.md is cheaper than re-running s2s status.
.s2s/protocol.md is generated by s2s init and s2s update. It contains the full command reference for the current CLI version — purpose, arguments, flags, and examples for every active command. If you are unsure of a command’s syntax, read protocol.md before guessing.
Project structure managed by s2s
Section titled “Project structure managed by s2s”<app-root>/.s2s/ project.json project.local.json config/ runtime.json backup.policy.json governance.exceptions.json guardrails/ artifacts/ <projectId>/ changes/ specs/ slices/ runs/ gates/ ledger.json logs/ orchestrator.log backups/Root compatibility shim files:
AGENTS.mdCODEX.mdCLAUDE.md
Global state location:
~/.s2s/ projects.json runtime/worktree-provider/ worktrees/<project>/ backups/projects/<project-hash>/<snapshot-id>/Troubleshooting
Section titled “Troubleshooting”-
No local .s2s context found- This happens for project commands outside local context.
- Run command inside a configured project or pass
[project].
-
Command not found in PATH: codex/claude- Install and authenticate that chat CLI first.
-
Version compatibility block
- Upgrade
s2sand retry.
- Upgrade
-
Engineering execution issues
- Validate app dependencies and verify commands in target repo.
-
Desktop/terminal mismatch warning
- This appears when
lastClientis desktop ands2sruns in terminal. - Open the desktop app on the same repo root, or run
s2s config editand switch tocodex-cli/claude-cli.
- This appears when
-
Wrapper prefix enabled but header cadence is inconsistent
- Wrapper header is designed for first response and agent-change moments.
- In fully interactive terminal mode, s2s may fallback to plain passthrough for compatibility.
- Keep Session Banner enabled for deterministic launch-level visibility.
-
stage '<x>' blocked by strict guardrail policy- Canonical guardrails or root shim overrides contain instructions that conflict with
.s2s/guardrails/*. - Run
s2s doctorto inspect discrepancies and resolve them. - If needed temporarily, switch to
warnusings2s config edit.
- Canonical guardrails or root shim overrides contain instructions that conflict with
-
Orchestrator errors or unexpected routing
- Non-fatal orchestrator errors are logged to
.s2s/logs/orchestrator.log. - Run with
--verboseto surface orchestrator warnings to stderr. - Use
s2s request "<prompt>"to resubmit intent and let the orchestrator re-plan the route.
- Non-fatal orchestrator errors are logged to