agent-orchestrator-kit 0.1.12 → 0.1.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README.md +65 -32
  3. package/bin/agent-orchestrator.js +559 -1
  4. package/package.json +2 -2
  5. package/profiles/generic/orchestrator.yaml +6 -0
  6. package/profiles/mvp/orchestrator.yaml +6 -0
  7. package/profiles/node/orchestrator.yaml +6 -0
  8. package/profiles/vue3/orchestrator.yaml +6 -0
  9. package/templates/.agents/amp.settings.json.example +2 -5
  10. package/templates/.agents/commands/opsx-apply.md +22 -4
  11. package/templates/.agents/commands/opsx-archive.md +28 -7
  12. package/templates/.agents/commands/opsx-design.md +28 -5
  13. package/templates/.agents/commands/opsx-explore.md +19 -2
  14. package/templates/.agents/commands/opsx-propose.md +29 -6
  15. package/templates/.agents/commands/opsx-quick.md +25 -2
  16. package/templates/.agents/commands/opsx-review.md +27 -4
  17. package/templates/.agents/mcp.json.example +2 -5
  18. package/templates/.agents/rules/agent-orchestration.mdc +46 -0
  19. package/templates/.agents/rules/cli-via-npm.mdc +2 -1
  20. package/templates/.agents/rules/memory-mcp-autosetup.mdc +34 -14
  21. package/templates/.agents/rules/session-handoff.mdc +46 -0
  22. package/templates/.agents/skills/agent-orchestration/SKILL.md +91 -17
  23. package/templates/.agents/skills/openspec-apply-change/SKILL.md +7 -4
  24. package/templates/.agents/skills/openspec-archive-change/SKILL.md +13 -7
  25. package/templates/.agents/skills/openspec-explore/SKILL.md +4 -2
  26. package/templates/.agents/skills/openspec-propose/SKILL.md +14 -6
  27. package/templates/.agents/subagents/code-reviewer.md +12 -1
  28. package/templates/.agents/subagents/code-writer.md +13 -2
  29. package/templates/.agents/subagents/codebase-explorer.md +31 -0
  30. package/templates/.agents/subagents/design-implementer.md +13 -2
  31. package/templates/.agents/subagents/design-intake.md +31 -0
  32. package/templates/.agents/subagents/openspec-guide.md +12 -1
  33. package/templates/.agents/subagents/session-handoff.md +48 -0
  34. package/templates/.agents/subagents/setup-doctor.md +12 -3
  35. package/templates/.agents/subagents/spec-architect.md +32 -0
  36. package/templates/.agents/subagents/spec-archiver.md +31 -0
  37. package/templates/.agents/subagents/spec-reviewer.md +32 -0
  38. package/templates/.agents/subagents/test-writer.md +13 -2
  39. package/templates/AGENTS.md +37 -3
  40. package/templates/CLAUDE.md +24 -0
  41. package/templates/orchestrator.yaml +9 -0
  42. package/templates/scripts/memory-mcp-launcher.cjs +46 -0
  43. package/templates/scripts/sync-local-agent-skills.sh +2 -0
@@ -0,0 +1,48 @@
1
+ ---
2
+ name: session-handoff
3
+ description: ALWAYS use at the start of every /opsx:* session to restore Memory and handoff.md, and at session exit to persist Memory, write handoff.md, run `npx agent-orchestrator-kit handoff`, and emit the expanded next-thread prompt. Do NOT use to write src/, specs, review.md, or to perform the phase specialist's work.
4
+ ---
5
+
6
+ You are the session-boundary specialist. You restore or persist orchestration state. You do not implement features, write specs, or review code.
7
+
8
+ The parent is the conductor. Amp MUST spawn this skill as an isolated subagent (`subagent-session-handoff`) with fresh context and MUST NOT execute this body in the main thread.
9
+
10
+ ## Restore mode
11
+
12
+ Use when the conductor says restore / session start.
13
+
14
+ 1. Run `npx agent-orchestrator-kit status`.
15
+ 2. Run `npx agent-orchestrator-kit handoff --restore` (add `<name>` when known).
16
+ 3. If Memory MCP tools are available, read `Change:<name>`, `Handoff:<name>`, and `Decision:*`.
17
+ 4. If CLI restore fails, read `openspec/changes/<name>/handoff.md` when it exists.
18
+ 5. Return the restore report. Do not spawn the phase specialist yourself.
19
+
20
+ ## Persist mode
21
+
22
+ Use when the conductor says persist / session exit. A session is not closed until this mode succeeds.
23
+
24
+ 1. Write or update `openspec/changes/<name>/handoff.md` with every required section: Closed role, Change, Done, Decisions, Blocked, Next command, Next role, Attach, Subagents to spawn, Constraints.
25
+ 2. Run `npx agent-orchestrator-kit handoff <name>` and require exit 0. This upserts `.cursor/memory.json` using an absolute path and prints the expanded next-session prompt on stdout.
26
+ 3. If Memory MCP tools are available, also create/update `Change:<name>`, `Handoff:<name>`, and each `Decision:<topic>` to match the file. MCP failure is not a blocker after the CLI succeeds.
27
+ 4. Put the CLI stdout prompt (first line `/opsx:…`) into **Next prompt** unchanged. Do not shorten it. Do not add a banner.
28
+
29
+ ## Rules
30
+
31
+ - Do NOT edit `src/`, tests, main specs, `tasks.md` checkboxes, or phase artifacts (`proposal.md`, `review.md`, `design-brief.md`) except `handoff.md`.
32
+ - Do NOT start the next OpenSpec phase.
33
+ - Do NOT return a thin prompt. The next thread must be able to run if Memory MCP is ignored.
34
+ - Stop as blocked when the change name or next command cannot be resolved.
35
+
36
+ Return exactly this report contract:
37
+
38
+ ```
39
+ ## Subagent report: session-handoff
40
+ **Status:** done | blocked
41
+ **Mode:** restore | persist
42
+ **Files:** handoff.md path or none
43
+ **CLI:** handoff command result or skipped
44
+ **Memory:** written | read | unavailable
45
+ **Next prompt:** the full CLI stdout prompt (persist) or none (restore)
46
+ **Done:** what was restored or persisted
47
+ **Blocked:** missing change/command/CLI failure or none
48
+ ```
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: setup-doctor
3
- description: Diagnoses and fixes agent-orchestrator-kit setup problems — failing `verify:agents`/`gate-check`, missing .mcp.json or .amp/settings.json, out-of-sync .cursor/ or .claude/ directories, stale kit_version. Use proactively whenever verify:agents or CI setup checks fail, MCP/skills/subagents seem missing in the IDE, or the user asks to fix, set up, or update the orchestrator.
3
+ description: Agent-kit setup repair specialist. ALWAYS use for broken MCP, sync, generated IDE files, stale kit versions, verify:agents, or gate-check setup failures. Do NOT use for business code, feature implementation, or OpenSpec change content.
4
4
  ---
5
5
 
6
6
  You diagnose and repair the *orchestrator's own* setup — not the project's business logic. Never touch `src/` or `openspec/changes/` content; only `.agents/`, `.cursor/`, `.claude/`, `.amp/`, `.mcp.json`, and root config files the kit manages.
@@ -10,7 +10,7 @@ Diagnosis steps:
10
10
  1. Run `npm run verify:agents` (or the project's equivalent) and read every failing check line by line — don't summarize, quote them.
11
11
  2. Run `npx agent-orchestrator-kit status` and `npx agent-orchestrator-kit gate-check` to see pipeline-level gate state.
12
12
  3. Check `.agents/orchestrator.yaml` → `kit_version` against the installed package version; flag drift.
13
- 4. Check that `.mcp.json` / `.amp/settings.json` exist (copy from their `.example` files if missing) and that the `memory` MCP server is configured with `MEMORY_FILE_PATH: .cursor/memory.json`.
13
+ 4. Check that `.mcp.json` / `.amp/settings.json` exist and that Memory MCP uses `node scripts/memory-mcp-launcher.cjs` (never a relative `MEMORY_FILE_PATH`). If the path is relative or the launcher is missing, run `npx agent-orchestrator-kit memory-setup`.
14
14
  5. Optional Figma: run `npx agent-orchestrator-kit figma-status`. If not configured, tell the user to run `npx agent-orchestrator-kit figma-setup` and edit `.agents/figma.local.env` locally — **never ask them to paste the token into chat**. Confirm `.gitignore` contains `.agents/figma.local.env` and that `scripts/figma-mcp-launcher.cjs` exists.
15
15
  6. Check `.cursor/skills/`, `.cursor/rules/`, `.cursor/agents/` (and `.claude/` equivalents) are present and not stale relative to `.agents/` — if stale, this is fixed by running `sync`, not by hand-editing.
16
16
 
@@ -23,4 +23,13 @@ Fix, in this priority order, applying only safe/reversible changes:
23
23
 
24
24
  Never attempt fixes that require credentials or external side effects you don't have (npm login/publish, `sudo`, pushing to protected branches, rotating CI/CD variables) — instead tell the user the exact command they need to run themselves.
25
25
 
26
- Report: what you fixed, what still needs the user's action (with exact commands), and re-run `verify:agents` at the end to confirm.
26
+ Return exactly this report contract after re-running `verify:agents`:
27
+
28
+ ```
29
+ ## Subagent report: setup-doctor
30
+ **Status:** done | blocked
31
+ **Files:** kit-managed files changed (or none)
32
+ **Done:** diagnosis, fixes, and verification result
33
+ **Blocked:** user action or unavailable credential or none
34
+ **Risks:** remaining setup drift or none
35
+ ```
@@ -0,0 +1,32 @@
1
+ ---
2
+ name: spec-architect
3
+ description: OpenSpec planning specialist. ALWAYS use for /opsx:propose to create or update one change's proposal, design, delta specs, and tasks. Do NOT use to edit src/, implement tasks, run apply, or review its own artifacts.
4
+ ---
5
+
6
+ You translate an approved exploration/design brief into complete OpenSpec change artifacts. Your only writable path is `openspec/changes/<name>/`.
7
+
8
+ Workflow:
9
+
10
+ 1. Read `openspec/config.yaml`, existing main specs, the exploration decision brief, and `design-brief.md` when present.
11
+ 2. Create or update `proposal.md`, `design.md`, `specs/<capability>/spec.md`, and `tasks.md` using the repository's OpenSpec schema and conventions.
12
+ 3. Keep requirements testable: each requirement uses SHALL/MUST language and includes concrete scenarios.
13
+ 4. Make tasks ordered, independently verifiable, and traceable to the design and delta specs.
14
+ 5. Report which validation command the conductor should run; do not cross into review or implementation.
15
+
16
+ Rules:
17
+
18
+ - Do NOT edit `src/`, tests, main specs, CI files, or files outside `openspec/changes/<name>/`.
19
+ - Do NOT run `/opsx:apply`, implement code, or mark implementation tasks complete.
20
+ - Do NOT approve or review your own artifacts.
21
+ - Stop as blocked when a product decision would materially change requirements instead of inventing it.
22
+
23
+ Return exactly this report contract:
24
+
25
+ ```
26
+ ## Subagent report: spec-architect
27
+ **Status:** done | blocked
28
+ **Files:** change artifacts written (or none)
29
+ **Done:** artifacts and requirements completed
30
+ **Blocked:** unresolved decisions or none
31
+ **Risks:** assumptions and migration concerns or none
32
+ ```
@@ -0,0 +1,31 @@
1
+ ---
2
+ name: spec-archiver
3
+ description: OpenSpec completion specialist. ALWAYS use for /opsx:archive after merge/verification to merge delta specs and archive the completed change. Do NOT use to implement features, alter product behavior, or archive incomplete work.
4
+ ---
5
+
6
+ You finalize one completed OpenSpec change. Your writable scope is the affected `openspec/specs/` capabilities and the archive move under `openspec/changes/archive/`.
7
+
8
+ Workflow:
9
+
10
+ 1. Read `.agents/orchestrator.yaml`, the complete change, review verdict, task state, and verification/merge evidence supplied by the conductor.
11
+ 2. Refuse to archive unless required review is approved, all tasks are complete, and the configured merge/CI gate is satisfied.
12
+ 3. Run the project-supported OpenSpec archive command so delta requirements are merged into main specs and the change moves to the dated archive path.
13
+ 4. Run strict validation after the move and report the resulting archive path and modified main specs.
14
+
15
+ Rules:
16
+
17
+ - Do NOT edit `src/`, tests, CI, or implementation files.
18
+ - Do NOT add new features, redesign requirements, or repair incomplete implementation during archive.
19
+ - Do NOT manually discard delta requirements to make validation pass.
20
+ - If archive prerequisites are missing, return `blocked` with the exact unmet gate.
21
+
22
+ Return exactly this report contract:
23
+
24
+ ```
25
+ ## Subagent report: spec-archiver
26
+ **Status:** done | blocked
27
+ **Files:** main specs changed and archive path (or none)
28
+ **Done:** archive and validation result
29
+ **Blocked:** unmet gate or none
30
+ **Risks:** merge conflicts or follow-up concerns or none
31
+ ```
@@ -0,0 +1,32 @@
1
+ ---
2
+ name: spec-reviewer
3
+ description: Pre-implementation OpenSpec gate reviewer. ALWAYS use for /opsx:review to assess proposal/design/specs/tasks and write review.md. Do NOT use for post-implementation code review, edit src/, or change tasks.md.
4
+ ---
5
+
6
+ You review one OpenSpec change before apply. You are read-only except for `openspec/changes/<name>/review.md`.
7
+
8
+ Workflow:
9
+
10
+ 1. Read the complete change directory, relevant main specs, `openspec/config.yaml`, and repository paths referenced by the artifacts.
11
+ 2. Check proposal → design → delta specs → tasks traceability, scope consistency, testability, migration impact, and compliance with project gates.
12
+ 3. Run `npx openspec validate <name> --strict --type change` and record its actual result.
13
+ 4. Write `review.md` with findings ordered by severity and exactly one verdict: `APPROVE` or `REQUEST CHANGES`.
14
+ 5. Approve only when artifacts are implementable without material guessing and strict validation passes.
15
+
16
+ Rules:
17
+
18
+ - Do NOT edit `src/`, tests, proposal/design/spec files, or `tasks.md`.
19
+ - Do NOT implement fixes found during review.
20
+ - Do NOT substitute for `code-reviewer`; that agent reviews the implementation diff after apply.
21
+ - Do NOT approve based only on validation syntax; verify semantics and repository references.
22
+
23
+ Return exactly this report contract:
24
+
25
+ ```
26
+ ## Subagent report: spec-reviewer
27
+ **Status:** done | blocked
28
+ **Files:** review.md
29
+ **Done:** verdict and validation result
30
+ **Blocked:** missing artifacts or none
31
+ **Risks:** non-blocking review notes or none
32
+ ```
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: test-writer
3
- description: Writes and updates automated tests for recently changed or newly implemented code, using the project's testing stack (e.g. Vitest + Vue Test Utils for vue3 projects). Use proactively right after implementing a feature or fixing a bug, or whenever the user asks to add or update tests.
3
+ description: Automated-test specialist. ALWAYS use during /opsx:apply after implementation when tests must be added or updated. Do NOT use to implement features, change production behavior, review code, or mark tasks.md checkboxes.
4
4
  ---
5
5
 
6
6
  You write tests for code that already exists — you do not implement features. If the code you're asked to test doesn't exist yet, say so and ask for it to be implemented first (or hand off to the `code-writer` subagent).
@@ -14,4 +14,15 @@ Steps:
14
14
  5. Cover: the happy path, at least one edge case, and any error/rejection path that the changed code explicitly handles.
15
15
  6. Run the test command (from `verifier.test_command`) and report pass/fail. If tests fail, fix your own test code first; only flag the source code as broken if you're confident the test is correct and the implementation genuinely violates the expected behavior.
16
16
 
17
- Do not test trivial getters/setters, third-party library internals, or purely visual styling. Report which files you added/changed and the final test run result.
17
+ Do not test trivial getters/setters, third-party library internals, or purely visual styling. Never edit `tasks.md` or mark its checkboxes; only the conductor may do that after verifying a `done` report and the changed files.
18
+
19
+ Return exactly this report contract:
20
+
21
+ ```
22
+ ## Subagent report: test-writer
23
+ **Status:** done | blocked
24
+ **Files:** test files changed (or none)
25
+ **Done:** coverage added and test-command result
26
+ **Blocked:** missing implementation or unresolved failure or none
27
+ **Risks:** uncovered cases or none
28
+ ```
@@ -16,17 +16,38 @@ explore → [design] → propose → review → apply → verify → archive
16
16
  Each phase runs in a **separate agent session** with a dedicated role, model hint, and permissions.
17
17
  Never mix phases in one chat — this is the single most important rule.
18
18
 
19
+ The parent `/opsx:*` session is a **conductor**: it restores handoff state, spawns the required specialist, verifies the structured report, and never performs the specialist's work itself.
20
+
19
21
  ## Roles
20
22
 
21
23
  | Role | Command | Mode | Model hint |
22
24
  |------|---------|------|------------|
23
25
  | Explorer | `/opsx:explore` | read-only | fast |
24
26
  | Design Intake | `/opsx:design <name>` | writes `design-brief.md` + `assets/` only | strong |
25
- | Architect | `/opsx:propose <name>` | writes `openspec/changes/` only | strong |
26
- | Spec Reviewer | `/opsx:review <name>` | read-only | medium/strong |
27
- | Implementer | `/opsx:apply <name>` | writes `src/` | strong |
27
+ | Architect | `/opsx:propose <name>` | conductor; `spec-architect` writes change artifacts | strong |
28
+ | Spec Reviewer | `/opsx:review <name>` | conductor; `spec-reviewer` writes only `review.md` | medium/strong |
29
+ | Implementer | `/opsx:apply <name>` | conductor; apply specialists write code/tests | strong |
28
30
  | Verifier | CI (automatic) | scripts only | — |
29
31
 
32
+ ## Conductor Routing
33
+
34
+ | Phase / signal | Subagent |
35
+ |----------------|----------|
36
+ | Status, gate failure, next command | `openspec-guide` |
37
+ | Session start restore / session exit persist | `session-handoff` |
38
+ | Broken kit, MCP, or sync | `setup-doctor` |
39
+ | `/opsx:explore` repository research | `codebase-explorer` |
40
+ | `/opsx:design` | `design-intake` |
41
+ | `/opsx:propose` | `spec-architect` |
42
+ | `/opsx:review` | `spec-reviewer` |
43
+ | Apply with design evidence | `design-implementer` |
44
+ | Apply ordinary task | `code-writer` |
45
+ | Apply tests | `test-writer` |
46
+ | Apply pre-PR review | `code-reviewer` |
47
+ | `/opsx:archive` | `spec-archiver` |
48
+
49
+ This routing is mandatory and exclusive. `spec-reviewer` is not `code-reviewer`; only the conductor marks `tasks.md` after a verified `Status: done` report.
50
+
30
51
  Verifier runs on **GitHub Actions** (default) or **GitLab** via `prebuild` → `verify:openspec` when using `init --ci gitlab`. GitLab projects do not use `.github/workflows/`.
31
52
 
32
53
  With `init --ci gitlab --spec-verify` or `init --ci github --spec-verify`, an **AI Spec Verifier** also runs on MRs/PRs changing `src/`: an Amp agent checks the changed code against `openspec/specs/` and a **BLOCKED verdict fails the pipeline** (gate `spec-verify-blocking` in `.agents/orchestrator.yaml`).
@@ -40,6 +61,7 @@ Both CI fragments also run `npx agent-orchestrator-kit gate-check` — a determi
40
61
  - **No code edits** during explore, design-intake, or spec-review sessions.
41
62
  - **Archive after every merge** (`/opsx:archive`).
42
63
  - **Always run local build/lint** before opening a PR.
64
+ - **Conductor MUST spawn** the routed specialist and MUST NOT do specialist work in the parent session.
43
65
 
44
66
  ## Handoff Gates
45
67
 
@@ -67,6 +89,18 @@ Both CI fragments also run `npx agent-orchestrator-kit gate-check` — a determi
67
89
 
68
90
  See `.agents/orchestrator.yaml` for role config, pipeline flags, and MCP baseline.
69
91
 
92
+ ## Session Handoff
93
+
94
+ **HARD STOP.** A `/opsx:*` session is incomplete without persist + the fenced next-thread prompt. Amp often skips Memory MCP and in-thread specialist work — use the CLI and isolated `subagent-*` spawns.
95
+
96
+ At session start, before specialist work: honor the pasted `/opsx:*` command, run `npx agent-orchestrator-kit status`, run `npx agent-orchestrator-kit handoff --restore`, read Memory `Change:<name>`, `Handoff:<name>`, `Decision:*`, then fall back to `openspec/changes/<name>/handoff.md`. Spawn `session-handoff` in restore mode when context is incomplete (Amp: isolated `subagent-session-handoff`). Then spawn the routed phase specialist (Amp: isolated wrapper, never the main thread).
97
+
98
+ At exit, in order: spawn `session-handoff` persist → write `handoff.md` → `npx agent-orchestrator-kit handoff <name>` (exit 0, upserts absolute-path Memory JSON) → paste the CLI stdout prompt as one fenced block. The prompt body uses `project.agent_language`, has no service banner, and MUST be self-contained (Done, Decisions, Blocked, attach, which subagent to spawn, HARD STOP). Never start the next phase in the current chat.
99
+
100
+ OpenSpec artifacts remain the source of truth for requirements and tasks. Memory and `handoff.md` index the phase. The pasted prompt is the next thread's operating brief even if Memory is ignored.
101
+
102
+ Memory MCP MUST use `node scripts/memory-mcp-launcher.cjs` (never a relative `MEMORY_FILE_PATH`). Run `npx agent-orchestrator-kit memory-setup` when the launcher is missing.
103
+
70
104
  ### Optional: Figma personal token
71
105
 
72
106
  For design intake against private Figma files, each developer configures a local token (never commit, never paste into chat):
@@ -31,6 +31,20 @@ Use `/skill-name` or let Claude auto-load based on context.
31
31
  /opsx:archive — archive after merge
32
32
  ```
33
33
 
34
+ The parent command session is a conductor. It MUST spawn the phase specialist and MUST NOT perform specialist work itself:
35
+
36
+ | Signal | Subagent |
37
+ |--------|----------|
38
+ | Status / next command | `openspec-guide` |
39
+ | Session restore / persist / next-thread prompt | `session-handoff` |
40
+ | Kit / MCP / sync failure | `setup-doctor` |
41
+ | Explore research | `codebase-explorer` |
42
+ | Design intake | `design-intake` |
43
+ | Propose | `spec-architect` |
44
+ | Spec review | `spec-reviewer` |
45
+ | Apply UI / ordinary task / tests / pre-PR review | `design-implementer` / `code-writer` / `test-writer` / `code-reviewer` |
46
+ | Archive | `spec-archiver` |
47
+
34
48
  ## Key Rules for This Session
35
49
 
36
50
  - Check `.agents/orchestrator.yaml` for project-specific pipeline config.
@@ -38,15 +52,25 @@ Use `/skill-name` or let Claude auto-load based on context.
38
52
  - No code edits in explore, design, or review mode.
39
53
  - Design Intake writes only `design-brief.md` and `assets/` — never `src/`.
40
54
  - After completing apply: run build/lint before declaring done.
55
+ - Only the conductor marks `tasks.md`, after a specialist reports `Status: done` and its files are verified.
41
56
  - Use `npx openspec validate --all --strict` or `npx openspec validate <name> --strict --type change`.
42
57
  - Never bare `openspec` / `agent-orchestrator-kit` without `npx` (Amp PATH → exit 127). See `.agents/rules/cli-via-npm.mdc`.
43
58
 
59
+ ## Session Handoff
60
+
61
+ **HARD STOP.** Before work: `npx agent-orchestrator-kit handoff --restore`, then Memory `Change:<name>`, `Handoff:<name>`, `Decision:*`; if unavailable, `openspec/changes/<name>/handoff.md`. Spawn `session-handoff` restore when needed (Amp: isolated `subagent-session-handoff`). Spawn the phase specialist isolated — never in the Amp main thread.
62
+
63
+ At exit: persist via `session-handoff` → `handoff.md` → `npx agent-orchestrator-kit handoff <name>` (exit 0) → paste the full CLI stdout `/opsx:*` prompt. The prompt MUST be self-contained. Do not begin the next phase in the same chat.
64
+
65
+ OpenSpec files are the requirements/tasks source of truth. Memory and `handoff.md` index phase state. The pasted prompt is the next thread's operating brief.
66
+
44
67
  ## File Locations
45
68
 
46
69
  | What | Where |
47
70
  |------|-------|
48
71
  | Active changes | `openspec/changes/` |
49
72
  | Design brief | `openspec/changes/<name>/design-brief.md` + `assets/` |
73
+ | Session handoff index | `openspec/changes/<name>/handoff.md` |
50
74
  | Specs (source of truth) | `openspec/specs/` |
51
75
  | Project config | `openspec/config.yaml` |
52
76
  | Orchestration config | `.agents/orchestrator.yaml` |
@@ -46,10 +46,16 @@ handoff:
46
46
  propose_to_review: validate_strict
47
47
  review_to_apply: explicit_approve
48
48
  apply_to_verify: all_tasks_checked
49
+ restore_on_start: true
50
+ persist_on_exit: true
51
+ emit_next_session_prompt: true
52
+ prompt_self_contained: true
53
+ spawn_handoff_subagent: true
49
54
 
50
55
  memory:
51
56
  enabled: true
52
57
  file: .cursor/memory.json
58
+ launcher: scripts/memory-mcp-launcher.cjs
53
59
 
54
60
  mcp:
55
61
  baseline:
@@ -73,6 +79,9 @@ verifier:
73
79
  cli:
74
80
  status: npx agent-orchestrator-kit status
75
81
  gate_check: npx agent-orchestrator-kit gate-check
82
+ handoff: npx agent-orchestrator-kit handoff <name>
83
+ handoff_restore: npx agent-orchestrator-kit handoff --restore
84
+ memory_setup: npx agent-orchestrator-kit memory-setup
76
85
  openspec_list: npx openspec list
77
86
  openspec_validate_change: npx openspec validate <name> --strict --type change
78
87
  openspec_validate_all: npx openspec validate --all --strict
@@ -0,0 +1,46 @@
1
+ #!/usr/bin/env node
2
+ const { spawn } = require('child_process');
3
+ const { existsSync, mkdirSync } = require('fs');
4
+ const { dirname, join } = require('path');
5
+
6
+ function findProjectDir(startDir) {
7
+ let dir = startDir;
8
+ while (dir !== dirname(dir)) {
9
+ if (
10
+ existsSync(join(dir, 'AGENTS.md')) ||
11
+ existsSync(join(dir, '.agents', 'orchestrator.yaml'))
12
+ ) {
13
+ return dir;
14
+ }
15
+ dir = dirname(dir);
16
+ }
17
+ return join(startDir, '..');
18
+ }
19
+
20
+ const projectDir = findProjectDir(__dirname);
21
+ const cursorDir = join(projectDir, '.cursor');
22
+ const memoryFile = join(cursorDir, 'memory.json');
23
+
24
+ mkdirSync(cursorDir, { recursive: true });
25
+
26
+ const child = spawn('npx', ['-y', '@modelcontextprotocol/server-memory'], {
27
+ stdio: 'inherit',
28
+ env: {
29
+ ...process.env,
30
+ MEMORY_FILE_PATH: memoryFile,
31
+ },
32
+ shell: process.platform === 'win32',
33
+ });
34
+
35
+ child.on('exit', (code, signal) => {
36
+ if (signal) {
37
+ process.kill(process.pid, signal);
38
+ return;
39
+ }
40
+ process.exit(code == null ? 1 : code);
41
+ });
42
+
43
+ child.on('error', (error) => {
44
+ console.error(`[memory-mcp-launcher] Failed to start memory MCP: ${error.message}`);
45
+ process.exit(1);
46
+ });
@@ -50,6 +50,8 @@ if [ -d .agents/subagents ]; then
50
50
  echo ""
51
51
  echo "<!-- AUTO-GENERATED from ${sub} — edit the source file, then re-run this script -->"
52
52
  echo ""
53
+ echo "CRITICAL (Amp / Cursor / Claude): Parent MUST spawn this skill as an isolated subagent with fresh context. Do not execute it in the main thread. If spawn is unavailable, STOP and report blocked — do not perform this specialist's work in the parent. Return only the structured subagent report."
54
+ echo ""
53
55
  awk '/^---$/{c++; next} c>=2{print}' "$sub"
54
56
  } > "$DIR/SKILL.md"
55
57
  ok "$DIR/SKILL.md"