Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
a046c2f
wip(m0a): baseline snapshot before front-door rewrite (conflict marke…
Jul 6, 2026
7bd751e
docs(m0a): front door — resolve README conflict, kill jargon, fix dea…
Jul 6, 2026
87ddfbd
Merge pull request #118 from PatrickSys/pivot/m0a-front-door
PatrickSys Jul 7, 2026
320dac1
refactor(m0b): rescue proof refs and rename config module
Jul 7, 2026
5bb5ef4
refactor(m0b): delete retired ceremony modules
Jul 7, 2026
9b80e80
fix(m0b): surface next control-map blockers
Jul 7, 2026
9385604
test(m0b): reconcile suite after command retirement
Jul 7, 2026
e820418
refactor(m0b): finish control-map reduction
Jul 7, 2026
5ba95df
Merge pull request #119 from PatrickSys/pivot/m0b-decouple-delete
PatrickSys Jul 7, 2026
b4eae8c
feat: add state directory resolver
Jul 7, 2026
cb4e850
feat: write init state to work folder
Jul 7, 2026
c50def7
docs: update state folder references
Jul 7, 2026
c0209be
test(m0c): naming invariant follows .work retained contract
Jul 7, 2026
67a5b80
test(m0c): reconcile suite with .work init + legacy config fixtures
Jul 7, 2026
430e470
Merge pull request #120 from PatrickSys/pivot/m0c-one-folder
PatrickSys Jul 7, 2026
0d50190
feat: add boxed next card snapshot
Jul 7, 2026
3bb5f71
ci: add CLI smoke workflow
Jul 7, 2026
a6162c3
fix: release stdin after init prompts
Jul 7, 2026
06af80d
test: report all suite failures honestly
Jul 7, 2026
862919e
docs: sync public workspace truth
Jul 7, 2026
000134d
test: align runner checks with workspace docs
Jul 7, 2026
c85c100
test: parse known failures across node reporters
Jul 7, 2026
c689f14
Merge pull request #121 from PatrickSys/pivot/m0d-truth-card
PatrickSys Jul 7, 2026
f5ab619
fix(m0e): align CLI and public surface language
PatrickSys Jul 8, 2026
11a4ddd
feat: fold gap planning into plan workflow
Jul 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions .github/workflows/smoke.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
name: smoke

on:
pull_request:
push:
branches: [main]

jobs:
smoke:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- name: CLI help surface exits clean
run: node bin/gsdd.mjs help
- name: init, next, and preflight run clean in a throwaway fixture
shell: bash
run: |
set -euo pipefail
CLI="$GITHUB_WORKSPACE/bin/gsdd.mjs"
FIXTURE="$(mktemp -d)"
cd "$FIXTURE"
node "$CLI" init --auto --tools claude
node "$CLI" next --init
node "$CLI" next
node "$CLI" lifecycle-preflight progress
- name: Publish-path smoke — npm pack + install tarball (D-74; catches bin-name mapping bugs npx-on-checkout cannot)
shell: bash
run: |
set -euo pipefail
TARBALL="$GITHUB_WORKSPACE/$(npm pack --silent)"
INSTALL_DIR="$(mktemp -d)"
cd "$INSTALL_DIR"
npm init -y >/dev/null
npm install --no-save "$TARBALL" >/dev/null
./node_modules/.bin/gsdd help
- name: Full test suite (includes the next-card snapshot)
run: npm test
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ MILESTONES.md
.codebase-context/
_bmad/
.cursor/
# Local Workspine dogfood continuity. If .work/ exists here, start at .work/README.md; keep .work/ untracked and out of generated consumer surfaces.
.work/

# Local temp files (slides, previews, scratch)
Expand Down
75 changes: 53 additions & 22 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@

# Workspine

Workspine is a repo-native delivery spine for AI-assisted software work: planning, checking, execution, verification, and handoff live in the repo so any agent or runtime can pick up where the last one stopped.
Workspine is a Spec Driven Development framework for AI-assisted software work: planning, checking, execution, verification, and handoff live in the repo, so any agent or runtime can pick up where the last one stopped. Decisions keep their why.

Directly validated today: Claude Code, Codex CLI, OpenCode. Qualified support: Cursor, Copilot, Gemini.
Proof status: one real consumer lifecycle with Codex checker support. Qualified support: Cursor, Copilot, Gemini.

The public product name is Workspine. The retained technical contracts remain `gsdd-cli`, `gsdd`, `gsdd-*`, and `.planning/`.
The public product name is Workspine. The retained technical contracts remain `gsdd-cli`, `gsdd`, `gsdd-*`, and `.work/`.

[![npm version](https://img.shields.io/npm/v/gsdd-cli?style=for-the-badge&logo=npm&logoColor=white&color=CB3837)](https://www.npmjs.com/package/gsdd-cli)
[![License](https://img.shields.io/badge/license-MIT-blue?style=for-the-badge)](LICENSE)
Expand All @@ -29,26 +29,26 @@ Tracked consumer proof pack: [docs/proof/consumer-node-cli/README.md](docs/proof

| Workflow | Writes | What for |
|----------|--------|----------|
| `gsdd-new-project` | `.planning/SPEC.md`, `ROADMAP.md` | Define the project and phases |
| `gsdd-plan` | `.planning/phases/N/PLAN.md` | Research and review before any code gets written |
| `gsdd-execute` | `.planning/phases/N/SUMMARY.md` | Implement the approved plan, nothing more |
| `gsdd-verify` | `.planning/phases/N/VERIFICATION.md` | Confirm the plan's claims are actually true |
| `gsdd-new-project` | `.work/SPEC.md`, `ROADMAP.md` | Define the project and phases |
| `gsdd-plan` | `.work/phases/N/PLAN.md` | Research and review before any code gets written |
| `gsdd-execute` | `.work/phases/N/SUMMARY.md` | Implement the approved plan, nothing more |
| `gsdd-verify` | `.work/phases/N/VERIFICATION.md` | Confirm the plan's claims are actually true |

The discipline: plan first, execute only what's approved, verify before closing. Each phase summary carries forward what was decided, so the next session starts with context instead of from scratch.

For agent continuity across long sessions, `gsdd next` reads `.work/` plus repo truth and emits the next coherent action as a structured packet. Use `gsdd next --init` to bootstrap `.work`; plain `gsdd next` is read-only. Captured stdout defaults to JSON; use `gsdd next --format human` for the compact supervisor card.

`gsdd next` keeps the human surface tight and the agent surface structured. JSON packets include typed `next_action` values for CLI commands, workflow skills, manual review, and user-question gates. Blocking questions, decisions, graph rebuilds, and dogfood findings use explicit subcommands; duplicate question, decision, and dogfood IDs replay as unchanged when the content matches and fail unless `--replace` is passed when the content differs. The continuity graph records answer and supersession edges so future agents can reconstruct decision history without rereading raw transcripts.

Workspine ships 14 workflows. The package and CLI are `gsdd-cli` / `gsdd-*` — retained as the technical contract under the Workspine product name.
Workspine ships 13 workflows. The package and CLI are `gsdd-cli` / `gsdd-*` — retained as the technical contract under the Workspine product name.

---

## What This Is

Workspine gives coding agents a durable workflow spine for work that spans sessions, agents, or runtimes. It does not host a control plane; it writes portable planning and proof artifacts into the repo.
Workspine gives coding agents a durable workflow for work that spans sessions, agents, or runtimes. There is no hosted service; it writes portable planning and proof artifacts into the repo.

Workspine began as a fork of Get Shit Done and keeps the verification-first delivery spine while stripping runtime lock-in.
Workspine began as a fork of Get Shit Done and keeps the verification-first workflow while stripping runtime lock-in.

---

Expand All @@ -60,7 +60,42 @@ Workspine began as a fork of Get Shit Done and keeps the verification-first deli
npx -y gsdd-cli init
```

`init` is the guided install wizard for repo-local setup. It creates `.agents/skills/gsdd-*` workflow entrypoints and the `.planning/bin/gsdd*` helper runtime in the current repo; optional runtime adapters improve native discovery.
This creates:

1. `.work/` — durable workspace with templates, role contracts, and config
2. `.agents/skills/gsdd-*` — compact open-standard workflow entrypoints for agents
3. `.work/bin/gsdd.mjs` — repo-local helper runtime for deterministic workflow commands inside generated skills (run helper commands from the repo root)
4. Optional tool-specific adapters you choose in the install wizard (Claude skills/commands/agents, OpenCode commands/agents, Codex CLI agents, optional governance)

Then pick the first workflow lane that matches your situation:

- `gsdd-new-project` for greenfield work, fuzzy brownfield work, or milestone-shaped work
- `gsdd-quick` for a concrete bounded brownfield change
- `gsdd-map-codebase` first when the repo is unfamiliar, risky, or needs a deeper baseline before choosing a lane

In a terminal, `npx -y gsdd-cli init` opens a guided install wizard. If you installed the package globally, `gsdd init` is the equivalent shorthand:

- Step 1: select the runtimes/vendors you want to support
- Step 2: decide separately whether repo-wide `AGENTS.md` governance is worth installing
- Step 3: configure planning defaults in the same guided flow

Portable `.agents/skills/gsdd-*` skills and the repo-local `.work/bin/gsdd.mjs` helper runtime are always generated. The wizard controls extra native adapters and optional governance, not the portable baseline. Workflow helper commands assume the repo root as the current working directory.
When those generated surfaces exist locally, `npx -y gsdd-cli health` checks them against current render output instead of asking you to trust manual review. If installed globally, `gsdd health` is equivalent.

### Launch Proof Status

- **Recorded proof:** the proof pack below records a full plan -> execute -> verify lifecycle on a real consumer project, including Codex checker support. Claude Code and OpenCode run the same generated workflow surface.
- **Qualified support:** Cursor, Copilot, and Gemini CLI can use the shared `.agents/skills/` surface when their skill or slash discovery sees it; this release does not claim the same runtime proof or ergonomics.
- **Runtime-surface freshness:** Installed generated skills and native adapters are renderer-checked locally; repair stays deterministic through `npx -y gsdd-cli update` or, when globally installed, `gsdd update`.

Start with the public proof pack:

- [Brownfield proof](docs/BROWNFIELD-PROOF.md)
- [Exported consumer proof pack](docs/proof/consumer-node-cli/README.md)
- [Runtime support matrix](docs/RUNTIME-SUPPORT.md)
- [Verification discipline](docs/VERIFICATION-DISCIPLINE.md)

### Quickstart (after init)

Invoke after init:

Expand All @@ -85,7 +120,7 @@ npx -y gsdd-cli install --global --auto
npx -y gsdd-cli install --global --tools claude,opencode,codex,copilot
```

Use `--auto` for non-interactive install into detected local agent homes. Use `--tools <targets>` when you want to override detection explicitly. When run in a TTY without `--tools` or `--auto`, `install --global` lets you select which agents to install. It does not create `.planning/` in the current repo. It writes Workspine-managed skills, native agent surfaces, and per-runtime manifests under the selected agent homes:
Use `--auto` for non-interactive install into detected local agent homes. Use `--tools <targets>` when you want to override detection explicitly. When run in a TTY without `--tools` or `--auto`, `install --global` lets you select which agents to install. It does not create `.work/` in the current repo. It writes Workspine-managed skills, native agent surfaces, and per-runtime manifests under the selected agent homes:

| Target | Global surfaces |
|--------|-----------------|
Expand All @@ -94,7 +129,7 @@ Use `--auto` for non-interactive install into detected local agent homes. Use `-
| Codex CLI | `~/.agents/skills`, `~/.codex/agents` |
| GitHub Copilot CLI | `~/.agents/skills`, `~/.copilot/agents` |

Install availability is not a parity claim. Claude Code, OpenCode, and Codex CLI remain the directly validated runtimes; GitHub Copilot CLI is available as a qualified global target.
Install availability is not a parity claim. Repo proof currently covers Claude Code, OpenCode, and Codex CLI paths; GitHub Copilot CLI is available as a qualified global target.

OpenCode honors `OPENCODE_CONFIG_DIR` for commands and agents; Workspine installs portable skills once in the shared agent-compatible global root.

Expand All @@ -108,11 +143,11 @@ OpenCode honors `OPENCODE_CONFIG_DIR` for commands and agents; Workspine install

### Team Use

Commit `.planning/` so the team shares specs, roadmaps, phase plans, and verification reports. Use `commitDocs` in `.planning/config.json` to control whether documentation changes are expected as part of workflow execution. Each developer runs `init --tools <their-tool>` for their own repo-local runtime adapters without changing the shared delivery artifacts.
Commit `.work/` so the team shares specs, roadmaps, phase plans, and verification reports. Use `commitDocs` in `.work/config.json` to control whether documentation changes are expected as part of workflow execution. Each developer runs `init --tools <their-tool>` for their own repo-local runtime adapters without changing the shared delivery artifacts.

### What to Track in Git

Track `.planning/`, `.agents/skills/`, and any selected runtime adapters that are part of the team workflow. Track durable `.work/` contract and research files when they define shared milestone truth. Do not track `.planning/.local/` or mutable `.work` runtime files such as `state.json`, graph logs, open questions, evidence manifests, handoff notes, or raw dogfood drafts unless you deliberately export or sanitize them.
Track `.work/`, `.agents/skills/`, and any selected runtime adapters that are part of the team workflow. Track durable `.work/` contract and research files when they define shared milestone truth. Do not track `.work/.local/` or mutable `.work` runtime files such as `state.json`, graph logs, open questions, evidence manifests, handoff notes, or raw dogfood drafts unless you deliberately export or sanitize them.

---

Expand All @@ -128,7 +163,7 @@ npx -y gsdd-cli models profile budget # minimize cost

## Troubleshooting

Inside a repo-local `.planning/` workspace, start with `npx -y gsdd-cli health`. It checks local generated runtime surfaces against current render output and reports whether `npx -y gsdd-cli update` can repair drift. To repair or refresh a personal global install, rerun `npx -y gsdd-cli install --global --auto` or explicitly scope it with `npx -y gsdd-cli install --global --tools <targets>`. For details, see the [User Guide](docs/USER-GUIDE.md).
Inside a repo-local `.work/` workspace, start with `npx -y gsdd-cli health`. It checks local generated runtime surfaces against current render output and reports whether `npx -y gsdd-cli update` can repair drift. To repair or refresh a personal global install, rerun `npx -y gsdd-cli install --global --auto` or explicitly scope it with `npx -y gsdd-cli install --global --tools <targets>`. For details, see the [User Guide](docs/USER-GUIDE.md).

---

Expand All @@ -139,12 +174,12 @@ Use Workspine when a feature takes more than one session, or when you need to sw
| Tool | Good for | vs Workspine |
|------|----------|--------------|
| **Workspine** | Work that spans sessions, agents, or runtimes where plans and proof need to stay in the repo | — |
| [GSD](https://github.com/gsd-build/get-shit-done) | Broad AI prompting suite — 81 commands, 78 workflows, 33 agents | Workspine is narrower: 14 workflows, fewer moving parts for the human in the loop |
| [GSD](https://github.com/gsd-build/get-shit-done) | Broad AI prompting suite — 81 commands, 78 workflows, 33 agents | Workspine is narrower: 13 workflows, fewer moving parts for the human in the loop |
| [OpenSpec](https://openspec.dev/) | Living spec + change proposals in a lightweight format | Workspine adds the execution, verification, and handoff layer on top of planning |
| [LeanSpec](https://www.lean-spec.dev/docs/guide/first-principles) | Minimal specs that fit LLM context | Workspine adds workflow gates and runtime entrypoints for when you need the full structure |
| [GitHub Spec Kit](https://github.com/github/spec-kit) | Spec-first planning workflows in `.specify/` | Similar space; Workspine is one CLI with one delivery loop instead of a broader ecosystem |
| [Kiro](https://kiro.dev/docs/) | IDE-native agent dev with specs, steering, hooks, and MCP | Kiro is IDE-only; Workspine works across terminal and IDE agents that can read repo files |
| [Tessl](https://tessl.io/enterprise/) | Hosted platform for distributing agent skills across teams | Tessl needs a control plane; Workspine is local-first with no hosted infrastructure |
| [Tessl](https://tessl.io/enterprise/) | Hosted platform for distributing agent skills across teams | Tessl needs a hosted service; Workspine is local-first with no hosted infrastructure |

<sub>Based on each tool's public docs as of May 2026. Open an issue if anything reads inaccurately.</sub>

Expand All @@ -163,10 +198,6 @@ npx -y gsdd-cli rigor # run planning/document guardrails
npx -y gsdd-cli file-op # deterministic repo-local copy/delete helper
npx -y gsdd-cli models profile quality # maximize review rigor
npx -y gsdd-cli models profile budget # minimize cost
npx -y gsdd-cli session-fingerprint # capture session continuity metadata
npx -y gsdd-cli ui-proof # collect UI proof artifacts
npx -y gsdd-cli control-map # repo and planning state at a glance
npx -y gsdd-cli closeout-report # summarize closeout evidence
npx -y gsdd-cli find-phase # locate a roadmap phase
npx -y gsdd-cli phase-status # inspect or update phase status
npx -y gsdd-cli verify # run verification discipline checks
Expand Down
4 changes: 2 additions & 2 deletions agents/DISTILLATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -135,12 +135,12 @@ Evidence map from each of the 10 canonical GSDD roles to their GSD sources, with
- Checklist-driven completion

**Stripped from GSD:**
- Template-path references (output lives in `.planning/ROADMAP.md`)
- Template-path references (output lives in `.work/ROADMAP.md`)
- Commit steps (GSDD handles git separately)
- Vendor-specific file conventions

**Gained in GSDD (PR #15 hardening):**
- Explicit `.planning/ROADMAP.md` ownership contract
- Explicit `.work/ROADMAP.md` ownership contract
- Explicit `[ ]` / `[-]` / `[x]` status grammar
- Concrete `ROADMAP CREATED` artifact example
- Hard boundary: "this role does not settle the separate ROADMAP/STATE lifecycle seam"
Expand Down
8 changes: 4 additions & 4 deletions agents/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ Workspine uses subagents when isolation earns its cost: research, review, mappin

Subagents must not become hidden implementation orchestration. Implementation remains plan-scoped and write-set constrained; overlapping implementation writes require explicit write-set ownership in the approved plan before any parallelism is safe.

Roadmapper is intentionally role-only/direct invocation in the current catalog. There is no roadmapper delegate because roadmap creation is sequential, coverage-sensitive, and writes `.planning/ROADMAP.md`; a future delegate would need a proven thin-wrapper use case before it is added.
Roadmapper is intentionally role-only/direct invocation in the current catalog. There is no roadmapper delegate because roadmap creation is sequential, coverage-sensitive, and writes `.work/ROADMAP.md` in default workspaces; a future delegate would need a proven thin-wrapper use case before it is added.

Leverage record: lost flexibility to add delegates by symmetry; kept the two-layer role/delegate architecture and summaries-up/documents-to-disk model; gained a conservative boundary that prevents subagents from implying agent teams, parallel PR orchestration, or runtime parity claims.

Expand Down Expand Up @@ -50,11 +50,11 @@ The catalog contains 10 canonical roles across lifecycle, audit, and utility res

## Runtime Distribution

`gsdd init` copies all role contracts (excluding this README) from `agents/` into `.planning/templates/roles/` in the consumer project. This gives consumer projects a portable, self-contained copy of the role library with no hard dependency on the GSDD framework repo at runtime.
`gsdd init` copies all role contracts (excluding this README) from `agents/` into `.work/templates/roles/` in the consumer project. Legacy `.planning/` workspaces receive localized `.planning/templates/roles/` paths. This gives consumer projects a portable, self-contained copy of the role library with no hard dependency on the GSDD framework repo at runtime.

- **Single source of truth:** `agents/*.md` in this repo. Consumer copies are generated, not edited.
- **Delegates reference the local copy:** `distilled/templates/delegates/*.md` point to `.planning/templates/roles/<role>.md`, not back to this repo.
- **Idempotent:** `gsdd init` skips the copy if `.planning/templates/roles/` already exists.
- **Delegates reference the local copy:** `distilled/templates/delegates/*.md` point to `.work/templates/roles/<role>.md`, not back to this repo; legacy installs localize those paths to `.planning/templates/roles/<role>.md`.
- **Idempotent:** `gsdd init` skips the copy if `.work/templates/roles/` already exists.
- **Updates:** `gsdd update --templates` re-copies from latest framework sources with hash-based modification detection.

Verifier note:
Expand Down
Loading
Loading