Operator cockpit · Hermes optional · Cursor-ready JSDP
| I want to… | Start here |
|---|---|
| Understand the strategy in one page | Execution paths |
| Use Cursor with branch + merge discipline | External-agent JSDP |
| Use Hermes dispatch in JoyZoning | What's next |
| Run an 8-role delivery chain | JSDP · jz delivery-chain next --external |
JoyZoning is a local operator cockpit for agent-assisted software work:
- Plan in chat (optional)
- Track work as kanban cards
- Run changes in your real repo — one branch per card
- Verify with tests and builds
- Merge only when you approve
Chat plans. The repo is truth. You merge.
Most coding agents stop at chat. JoyZoning adds task tracking, branch discipline, verification evidence, audit trails, and a merge gate — so work stays reviewable before it becomes “done.”
| JoyZoning owns | Your editor / agent owns |
|---|---|
| Task status, JSDP chain order | Editing source files |
Branch joyzoning/card-<id> |
Implementation details |
| Verification evidence | Running tools in the repo |
| Review and merge gates | When to stop coding |
Hermes is optional. You can run the same workflow from Cursor, Claude Code, Copilot, or manual edits — JoyZoning still supervises. See Execution paths · External-agent JSDP.
JoyZoning is not:
- a second IDE
- an autonomous auto-merge bot
- “the agent said it’s done”
→ New here? What's next (~20 min after install)
→ Full onboarding: onboarding/README.md
→ Cursor / IDE-first delivery: External-agent JSDP
Same merge gate. Different engine.
| Managed (Hermes) | External (Cursor, Claude Code, manual) | |
|---|---|---|
| Start | jz task run <id> or Dispatch in desktop |
jz task start-external <id> --agent cursor |
| Hermes lease | Yes | No |
| Where you edit | Hermes tools in JoyZoning / TUI | Your usual IDE or terminal |
| Stop condition | Agent → ready_for_review |
You → jz task mark-ready |
| Finish | jz task complete <id> --yes |
Same |
# Managed (default onboarding path)
jz task run <task-id>
jz task verify <task-id> --cmd "npm test"
jz task complete <task-id> --yes
# External (Cursor-first)
jz task start-external <task-id> --agent cursor
jz task prompt <task-id> # copy JSDP prompt into Cursor
jz task mark-ready <task-id>
jz task verify <task-id> --cmd "npm test"
jz task complete <task-id> --yesMulti-role programs (product lock → architecture → ship): JSDP · External-agent JSDP
flowchart LR
subgraph managed [Managed — Hermes]
M1[Dispatch / task run] --> M2[Agent works in lease]
M2 --> M3[ready_for_review]
end
subgraph external [External — Cursor / manual]
E1[start-external] --> E2[Edit on card branch]
E2 --> E3[mark-ready]
end
M3 --> V[verify]
E3 --> V
V --> C[complete --yes]
C --> N[Next JSDP role eligible]
| Step | Goal | Time | Guide |
|---|---|---|---|
| 0 — Decide | Is this the workflow you want? | ~5 min | Before you begin |
| 1 — Install | App running, repo opened | ~15 min | Quickstart |
| 2 — First merge | Start work → verify → merge → Complete | ~20 min | What's next (managed) · External JSDP (Cursor) |
| 3 — Daily use | Desktop, CLI, or both | ongoing | Setup checklist |
| You want… | Good fit? |
|---|---|
| Supervised agent work on a real repo with an audit trail | Yes |
| Review diffs and tests before anything ships | Yes |
| JSDP sequential roles with a merge between each | Yes |
| Work in Cursor but still want task/branch/merge discipline | Yes — external-agent JSDP |
| A replacement IDE or chat-only workflow | No — keep your editor; use JoyZoning to supervise |
| Fully autonomous merge with no human gate | No |
What is JoyZoning? (plain English) · Philosophy
Need: .NET 8, Node 18+, pnpm, Python 3.11 (for Hermes managed path), one diet-hermes install if using managed dispatch (guide), LLM API key for Manager Chat (keys).
Cursor-only workflow: You still need the control plane (
pnpm dev) andjz. Hermes gateway is only required for managedjz task run/ Manager Chat — not forjz task start-external.
git clone https://github.com/CardSorting/JoyZoning.git
cd JoyZoning
pnpm install && pnpm setup && pnpm devOr: ./scripts/run-dev.sh — quickstart.
Ready for Step 2 when: app open, health not Blocked, your repo selected (Project → Open Workspace).
Full walkthrough: What's next (managed) · External-agent JSDP (Cursor-first).
| Step | Where | What you do | Done when… |
|---|---|---|---|
| Plan | Manager Chat (optional) | Describe the work | You have a goal |
| Track | Kanban | Create or pick a card | Card is on the board |
| Start work | Kanban Dispatch or jz task start-external |
Agent or you begins on card branch | Branch joyzoning/card-<id> exists |
| Review files | Workspace | Check changed files | You see the real diff |
| Verify | Workspace or jz |
Run tests/build | Evidence attached |
| Merge | Workspace → Kanban | Approve with --yes |
Card is Complete |
Trust Workspace, not chat, for sign-off.
# Managed
jz task run <task-id> --poll 10
jz task verify <task-id> --cmd "dotnet test"
jz task complete <task-id> --yes
# External (no Hermes lease)
jz task start-external <task-id> --agent cursor
jz task mark-ready <task-id>
jz task verify <task-id> --cmd "dotnet test"
jz task complete <task-id> --yesMenus: desktop menu guide · Glossary: plain-language
| How you work | Start here |
|---|---|
| Desktop (board + diffs) | quickstart |
Terminal (jz) |
first-run-cli |
| Cursor + JSDP chains | external-agent-jsdp.md |
| Both | choose-your-path |
Browser UI (http://127.0.0.1:9470) |
After pnpm dev |
Habits: one active role at a time on JSDP chains · verify before merge · trust Workspace for review · never mark Complete without merge.
| Problem | Fix |
|---|---|
| App won't open | Setup troubleshooting |
| Red API / Dashboard | Status indicators |
| Chat won't reply | API keys |
| Empty Workspace | Start work on the card first (dispatch or start-external), then re-select |
jz errors |
first-run-cli |
mark-ready blocked (branch / no changes) |
External-agent JSDP — troubleshooting |
| Next JSDP role blocked | Prior role must be Complete after jz task complete --yes |
Run eight bounded roles on one repo (product lock → architecture → core flow → … → release) with a merge gate between each role. Same physical workspace; one role at a time.
jz delivery-chain create --program "My App" --workspace /path/to/repo
jz delivery-chain queue <chain-id>
jz task dispatch <role-1-task-id> # when queue shows eligible
jz task complete <role-1-task-id> --yes
# repeat for roles 2–8jz delivery-chain create --program "My App" --workspace /path/to/repo
jz delivery-chain next <chain-id> --external --agent cursor
# → role name, task id, branch, copyable prompt, Role 2 blocked in queue
jz task prompt <task-id> # paste into Cursor
# … edit in your IDE …
jz task mark-ready <task-id>
jz task verify <task-id> --cmd "npm test"
jz task complete <task-id> --yes # Role 2 becomes eligible
jz delivery-chain next <chain-id> --external --agent cursor| Doc | Contents |
|---|---|
| jsdp.md | Protocol, 8 roles, gates, handoff sections |
| external-agent-jsdp.md | Cursor/Claude/manual path, API, troubleshooting |
| philosophy.md | Why canonical workspace + merge authority |
Legacy shell: ./scripts/role-chain-dispatch.sh --create --workspace … --program …
| Learn… | Doc |
|---|---|
| Framework paper (v1.6) | whitepaper.md · summary · theory audit · research companion |
| Strategy (cockpit vs engine, pick a path) | execution-paths.md |
| Cursor / IDE workflow | external-agent-jsdp.md |
| 8-role programs | jsdp.md |
| Why we built it this way | philosophy.md |
| REST API (external + leases + chains) | control-plane-api.md |
| CLI | cli.md |
| Onboarding hub | onboarding/README.md |
| Setup checklist (full vs Cursor-first) | setup-checklist.md |
| Full doc index | docs/README.md |
| Coding agents | AGENTS.md |
| Contribute | development.md · CONTRIBUTING.md |
dotnet build JoyZoning.sln
dotnet test tests/JoyZoning.Tests/JoyZoning.Tests.csproj --filter "FullyQualifiedName~ExternalAgentJsdp|JsdpChainIntegration"
./scripts/run-tests.sh mediumarchitecture · development · External JSDP tests: ExternalAgentJsdpTests, JsdpChainIntegrationTests
MIT © 2026 CardSorting