agent-orchestrator-kit 0.1.13 → 0.2.0
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.
- package/CHANGELOG.md +16 -0
- package/README.md +18 -11
- package/bin/agent-orchestrator.js +558 -2
- package/package.json +2 -2
- package/profiles/generic/orchestrator.yaml +3 -0
- package/profiles/mvp/orchestrator.yaml +3 -0
- package/profiles/node/orchestrator.yaml +3 -0
- package/profiles/vue3/orchestrator.yaml +3 -0
- package/templates/.agents/amp.settings.json.example +2 -5
- package/templates/.agents/commands/opsx-apply.md +10 -3
- package/templates/.agents/commands/opsx-archive.md +10 -3
- package/templates/.agents/commands/opsx-design.md +10 -3
- package/templates/.agents/commands/opsx-explore.md +10 -3
- package/templates/.agents/commands/opsx-propose.md +10 -3
- package/templates/.agents/commands/opsx-quick.md +10 -3
- package/templates/.agents/commands/opsx-review.md +10 -3
- package/templates/.agents/mcp.json.example +2 -5
- package/templates/.agents/rules/agent-orchestration.mdc +28 -68
- package/templates/.agents/rules/cli-via-npm.mdc +2 -1
- package/templates/.agents/rules/figma-token-setup.mdc +1 -1
- package/templates/.agents/rules/memory-mcp-autosetup.mdc +4 -54
- package/templates/.agents/rules/session-handoff.mdc +28 -0
- package/templates/.agents/skills/agent-orchestration/SKILL.md +36 -19
- package/templates/.agents/subagents/session-handoff.md +48 -0
- package/templates/.agents/subagents/setup-doctor.md +1 -1
- package/templates/AGENTS.md +22 -119
- package/templates/CLAUDE.md +6 -65
- package/templates/orchestrator.yaml +6 -0
- package/templates/scripts/memory-mcp-launcher.cjs +46 -0
- package/templates/scripts/sync-local-agent-skills.sh +1 -1
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"amp.mcpServers": {
|
|
3
3
|
"memory": {
|
|
4
|
-
"command": "
|
|
5
|
-
"args": ["
|
|
6
|
-
"env": {
|
|
7
|
-
"MEMORY_FILE_PATH": ".cursor/memory.json"
|
|
8
|
-
}
|
|
4
|
+
"command": "node",
|
|
5
|
+
"args": ["scripts/memory-mcp-launcher.cjs"]
|
|
9
6
|
},
|
|
10
7
|
"figma": {
|
|
11
8
|
"command": "node",
|
|
@@ -7,7 +7,7 @@ description: Implement tasks from an OpenSpec change (Experimental)
|
|
|
7
7
|
|
|
8
8
|
## Session Start (Before Any Work)
|
|
9
9
|
|
|
10
|
-
Honor the pasted command and announce the Implementer role. Run `npx agent-orchestrator-kit status` or `npx openspec list --json`, then
|
|
10
|
+
Honor the pasted command and announce the Implementer role. Run `npx agent-orchestrator-kit status` or `npx openspec list --json`, then `npx agent-orchestrator-kit handoff --restore` (or `handoff <name> --restore`). Read Memory `Change:<name>`, `Handoff:<name>`, and `Decision:*` when MCP works. If restore CLI fails and Memory is empty, read `openspec/changes/<name>/handoff.md`; this fallback is not a blocker. Spawn `session-handoff` in restore mode when context is incomplete (Amp: isolated `subagent-session-handoff`). For free-form “continue” / “next” with one active change, execute its `Handoff.next_command` instead of asking for the phase. Only then spawn the routed phase specialist (Amp: isolated `subagent-<name>`, never the main thread). Follow `.agents/rules/session-handoff.mdc`.
|
|
11
11
|
|
|
12
12
|
Implement tasks from an OpenSpec change.
|
|
13
13
|
|
|
@@ -157,9 +157,16 @@ All tasks complete! You can archive this change with `/opsx:archive`.
|
|
|
157
157
|
What would you like to do?
|
|
158
158
|
```
|
|
159
159
|
|
|
160
|
-
## Session Exit (
|
|
160
|
+
## Session Exit (HARD STOP)
|
|
161
161
|
|
|
162
|
-
|
|
162
|
+
You have NOT finished until every step succeeds. Do not say done/готово, do not start archive, and do not omit the fenced next-thread prompt.
|
|
163
|
+
|
|
164
|
+
1. Spawn `session-handoff` in persist mode (Amp: isolated `subagent-session-handoff`). If spawn fails, persist in the parent — never skip.
|
|
165
|
+
2. Write `openspec/changes/<name>/handoff.md` with: Closed role, Change, Done, Decisions, Blocked, Next command, Next role, Attach, Subagents to spawn, Constraints. Include task and build/lint status in Done.
|
|
166
|
+
3. Run `npx agent-orchestrator-kit handoff <name>` and require exit 0. The CLI upserts Memory JSON (absolute path) and prints the expanded self-contained prompt on stdout.
|
|
167
|
+
4. If Memory MCP tools work, also update `Change:<name>`, `Handoff:<name>`, and new `Decision:*`.
|
|
168
|
+
5. Paste CLI stdout into chat as one fenced block beginning with the next `/opsx:*` role command. Keep it complete. No banner.
|
|
169
|
+
6. Stop. Never start archive in this apply chat.
|
|
163
170
|
|
|
164
171
|
**Guardrails**
|
|
165
172
|
- Keep going through tasks until done or blocked
|
|
@@ -7,7 +7,7 @@ description: Archive a completed change in the experimental workflow
|
|
|
7
7
|
|
|
8
8
|
## Session Start (Before Any Work)
|
|
9
9
|
|
|
10
|
-
Honor the pasted command and announce the Archiver role. Run `npx agent-orchestrator-kit status` or `npx openspec list --json`, then
|
|
10
|
+
Honor the pasted command and announce the Archiver role. Run `npx agent-orchestrator-kit status` or `npx openspec list --json`, then `npx agent-orchestrator-kit handoff --restore` (or `handoff <name> --restore`). Read Memory `Change:<name>`, `Handoff:<name>`, and `Decision:*` when MCP works. If restore CLI fails and Memory is empty, read `openspec/changes/<name>/handoff.md`; this fallback is not a blocker. Spawn `session-handoff` in restore mode when context is incomplete (Amp: isolated `subagent-session-handoff`). For free-form “continue” / “next” with one active change, execute its `Handoff.next_command` instead of asking for the phase. Only then spawn the routed phase specialist (Amp: isolated `subagent-<name>`, never the main thread). Follow `.agents/rules/session-handoff.mdc`.
|
|
11
11
|
|
|
12
12
|
Archive a completed change in the experimental workflow.
|
|
13
13
|
|
|
@@ -160,9 +160,16 @@ Target archive directory already exists.
|
|
|
160
160
|
3. Wait until a different date to archive
|
|
161
161
|
```
|
|
162
162
|
|
|
163
|
-
## Session Exit (
|
|
163
|
+
## Session Exit (HARD STOP)
|
|
164
164
|
|
|
165
|
-
|
|
165
|
+
You have NOT finished until every step succeeds. Do not say done/готово and do not omit the fenced next-thread prompt when another role is required.
|
|
166
|
+
|
|
167
|
+
1. Spawn `session-handoff` in persist mode (Amp: isolated `subagent-session-handoff`). If spawn fails, persist in the parent — never skip.
|
|
168
|
+
2. Write the final handoff state at the archived change path with: Closed role, Change, Done, Decisions, Blocked, Next command, Next role, Attach, Subagents to spawn, Constraints.
|
|
169
|
+
3. Run `npx agent-orchestrator-kit handoff <name>` from the archived path context when possible, or write Memory JSON via the same CLI against the active name before the move. Require exit 0 when the change dir still exists.
|
|
170
|
+
4. If Memory MCP tools work, also update `Change:<name>`, `Handoff:<name>`, and new `Decision:*`.
|
|
171
|
+
5. When another role is required, paste CLI stdout as one fenced `/opsx:*` prompt. Keep it complete. No banner.
|
|
172
|
+
6. Stop. Do not start another phase in this chat.
|
|
166
173
|
|
|
167
174
|
**Guardrails**
|
|
168
175
|
- Always prompt for change selection if not provided
|
|
@@ -7,7 +7,7 @@ description: Capture design from any source into a durable design brief for an O
|
|
|
7
7
|
|
|
8
8
|
## Session Start (Before Any Work)
|
|
9
9
|
|
|
10
|
-
Honor the pasted command and announce the Design Intake role. Run `npx agent-orchestrator-kit status` or `npx openspec list --json`, then
|
|
10
|
+
Honor the pasted command and announce the Design Intake role. Run `npx agent-orchestrator-kit status` or `npx openspec list --json`, then `npx agent-orchestrator-kit handoff --restore` (or `handoff <name> --restore`). Read Memory `Change:<name>`, `Handoff:<name>`, and `Decision:*` when MCP works. If restore CLI fails and Memory is empty, read `openspec/changes/<name>/handoff.md`; this fallback is not a blocker. Spawn `session-handoff` in restore mode when context is incomplete (Amp: isolated `subagent-session-handoff`). For free-form “continue” / “next” with one active change, execute its `Handoff.next_command` instead of asking for the phase. Only then spawn the routed phase specialist (Amp: isolated `subagent-<name>`, never the main thread). Follow `.agents/rules/session-handoff.mdc`.
|
|
11
11
|
|
|
12
12
|
Capture design into a durable brief for an OpenSpec change. One-shot intake from Figma, exports, screenshots, or photos — then apply never needs live design tools.
|
|
13
13
|
|
|
@@ -128,9 +128,16 @@ For non-UI changes: do not invent a brief. Tell the Architect to add a line `Des
|
|
|
128
128
|
|
|
129
129
|
---
|
|
130
130
|
|
|
131
|
-
## Session Exit (
|
|
131
|
+
## Session Exit (HARD STOP)
|
|
132
132
|
|
|
133
|
-
|
|
133
|
+
You have NOT finished until every step succeeds. Do not say done/готово, do not start propose, and do not omit the fenced next-thread prompt.
|
|
134
|
+
|
|
135
|
+
1. Spawn `session-handoff` in persist mode (Amp: isolated `subagent-session-handoff`). If spawn fails, persist in the parent — never skip.
|
|
136
|
+
2. Write `openspec/changes/<name>/handoff.md` with: Closed role, Change, Done, Decisions, Blocked, Next command, Next role, Attach, Subagents to spawn, Constraints.
|
|
137
|
+
3. Run `npx agent-orchestrator-kit handoff <name>` and require exit 0. The CLI upserts Memory JSON (absolute path) and prints the expanded self-contained prompt on stdout.
|
|
138
|
+
4. If Memory MCP tools work, also update `Change:<name>`, `Handoff:<name>`, and new `Decision:*`.
|
|
139
|
+
5. Paste CLI stdout into chat as one fenced block beginning `/opsx:propose <name>`. Keep it complete. No banner.
|
|
140
|
+
6. Stop. Do not start propose in this chat.
|
|
134
141
|
|
|
135
142
|
## Guardrails
|
|
136
143
|
|
|
@@ -7,7 +7,7 @@ description: "Enter explore mode - think through ideas, investigate problems, cl
|
|
|
7
7
|
|
|
8
8
|
## Session Start (Before Any Work)
|
|
9
9
|
|
|
10
|
-
Honor the pasted command and announce the Explorer role. Run `npx agent-orchestrator-kit status` or `npx openspec list --json`, then
|
|
10
|
+
Honor the pasted command and announce the Explorer role. Run `npx agent-orchestrator-kit status` or `npx openspec list --json`, then `npx agent-orchestrator-kit handoff --restore` (or `handoff <name> --restore`). Read Memory `Change:<name>`, `Handoff:<name>`, and `Decision:*` when MCP works. If restore CLI fails and Memory is empty, read `openspec/changes/<name>/handoff.md`; this fallback is not a blocker. Spawn `session-handoff` in restore mode when context is incomplete (Amp: isolated `subagent-session-handoff`). For free-form “continue” / “next” with one active change, execute its `Handoff.next_command` instead of asking for the phase. Only then spawn the routed phase specialist (Amp: isolated `subagent-<name>`, never the main thread). Follow `.agents/rules/session-handoff.mdc`.
|
|
11
11
|
|
|
12
12
|
Enter explore mode. Think deeply. Visualize freely. Follow the conversation wherever it goes.
|
|
13
13
|
|
|
@@ -166,9 +166,16 @@ When things crystallize, you might offer a summary - but it's optional. Sometime
|
|
|
166
166
|
|
|
167
167
|
---
|
|
168
168
|
|
|
169
|
-
## Session Exit (
|
|
169
|
+
## Session Exit (HARD STOP)
|
|
170
170
|
|
|
171
|
-
|
|
171
|
+
You have NOT finished until every step succeeds. Do not say done/готово, do not start the next phase, and do not omit the fenced next-thread prompt.
|
|
172
|
+
|
|
173
|
+
1. Spawn `session-handoff` in persist mode (Amp: isolated `subagent-session-handoff`). If spawn fails, persist in the parent — never skip.
|
|
174
|
+
2. Write `openspec/changes/<name>/handoff.md` with: Closed role, Change, Done, Decisions, Blocked, Next command, Next role, Attach, Subagents to spawn, Constraints.
|
|
175
|
+
3. Run `npx agent-orchestrator-kit handoff <name>` and require exit 0. The CLI upserts Memory JSON (absolute path) and prints the expanded self-contained prompt on stdout.
|
|
176
|
+
4. If Memory MCP tools work, also update `Change:<name>`, `Handoff:<name>`, and new `Decision:*`.
|
|
177
|
+
5. Paste CLI stdout into chat as one fenced block. Keep it complete. No banner. First line is `/opsx:design <name>` or `/opsx:propose <name>`.
|
|
178
|
+
6. Stop. Do not start that phase in this chat.
|
|
172
179
|
|
|
173
180
|
## Guardrails
|
|
174
181
|
|
|
@@ -7,7 +7,7 @@ description: Propose a new change - create it and generate all artifacts in one
|
|
|
7
7
|
|
|
8
8
|
## Session Start (Before Any Work)
|
|
9
9
|
|
|
10
|
-
Honor the pasted command and announce the Architect role. Run `npx agent-orchestrator-kit status` or `npx openspec list --json`, then
|
|
10
|
+
Honor the pasted command and announce the Architect role. Run `npx agent-orchestrator-kit status` or `npx openspec list --json`, then `npx agent-orchestrator-kit handoff --restore` (or `handoff <name> --restore`). Read Memory `Change:<name>`, `Handoff:<name>`, and `Decision:*` when MCP works. If restore CLI fails and Memory is empty, read `openspec/changes/<name>/handoff.md`; this fallback is not a blocker. Spawn `session-handoff` in restore mode when context is incomplete (Amp: isolated `subagent-session-handoff`). For free-form “continue” / “next” with one active change, execute its `Handoff.next_command` instead of asking for the phase. Only then spawn the routed phase specialist (Amp: isolated `subagent-<name>`, never the main thread). Follow `.agents/rules/session-handoff.mdc`.
|
|
11
11
|
|
|
12
12
|
Propose a new change - create the change and generate all artifacts in one step.
|
|
13
13
|
|
|
@@ -101,9 +101,16 @@ After completing all artifacts, summarize:
|
|
|
101
101
|
- What's ready: "All artifacts created and validated! Ready for spec review."
|
|
102
102
|
- Prompt: "Run `/opsx:review <name>` in a fresh session."
|
|
103
103
|
|
|
104
|
-
## Session Exit (
|
|
104
|
+
## Session Exit (HARD STOP)
|
|
105
105
|
|
|
106
|
-
|
|
106
|
+
You have NOT finished until every step succeeds. Do not say done/готово, do not start review, and do not omit the fenced next-thread prompt.
|
|
107
|
+
|
|
108
|
+
1. Spawn `session-handoff` in persist mode (Amp: isolated `subagent-session-handoff`). If spawn fails, persist in the parent — never skip.
|
|
109
|
+
2. Write `openspec/changes/<name>/handoff.md` with: Closed role, Change, Done, Decisions, Blocked, Next command, Next role, Attach, Subagents to spawn, Constraints.
|
|
110
|
+
3. Run `npx agent-orchestrator-kit handoff <name>` and require exit 0. The CLI upserts Memory JSON (absolute path) and prints the expanded self-contained prompt on stdout.
|
|
111
|
+
4. If Memory MCP tools work, also update `Change:<name>`, `Handoff:<name>`, and new `Decision:*`.
|
|
112
|
+
5. Paste CLI stdout into chat as one fenced block beginning `/opsx:review <name>`. Keep it complete. No banner.
|
|
113
|
+
6. Stop. Do not start review in this chat.
|
|
107
114
|
|
|
108
115
|
**Artifact Creation Guidelines**
|
|
109
116
|
|
|
@@ -7,7 +7,7 @@ description: Fast path for MVP/demo — propose artifacts and apply in one sessi
|
|
|
7
7
|
|
|
8
8
|
## Session Start (Before Any Work)
|
|
9
9
|
|
|
10
|
-
Honor the pasted command and announce the Quick conductor role. Run `npx agent-orchestrator-kit status` or `npx openspec list --json`, then
|
|
10
|
+
Honor the pasted command and announce the Quick conductor role. Run `npx agent-orchestrator-kit status` or `npx openspec list --json`, then `npx agent-orchestrator-kit handoff --restore` (or `handoff <name> --restore`). Read Memory `Change:<name>`, `Handoff:<name>`, and `Decision:*` when MCP works. If restore CLI fails and Memory is empty, read `openspec/changes/<name>/handoff.md`; this fallback is not a blocker. Spawn `session-handoff` in restore mode when context is incomplete (Amp: isolated `subagent-session-handoff`). For free-form “continue” / “next” with one active change, execute its `Handoff.next_command` instead of asking for the phase. Only then spawn the routed phase specialist (Amp: isolated `subagent-<name>`, never the main thread). Follow `.agents/rules/session-handoff.mdc`.
|
|
11
11
|
|
|
12
12
|
Quick mode for **small changes, demos, and hypothesis testing**. Combines propose + apply in one session.
|
|
13
13
|
|
|
@@ -73,9 +73,16 @@ Quick mode for **small changes, demos, and hypothesis testing**. Combines propos
|
|
|
73
73
|
|
|
74
74
|
---
|
|
75
75
|
|
|
76
|
-
## Session Exit (
|
|
76
|
+
## Session Exit (HARD STOP)
|
|
77
77
|
|
|
78
|
-
At the end of the whole quick session
|
|
78
|
+
At the end of the whole quick session you have NOT finished until every step succeeds. Do not emit a mid-session next-thread prompt between propose and apply. Do not start archive in this chat.
|
|
79
|
+
|
|
80
|
+
1. Spawn `session-handoff` in persist mode (Amp: isolated `subagent-session-handoff`). If spawn fails, persist in the parent — never skip.
|
|
81
|
+
2. Write `openspec/changes/<name>/handoff.md` with: Closed role, Change, Done, Decisions, Blocked, Next command, Next role, Attach, Subagents to spawn, Constraints. Include task and build/lint status.
|
|
82
|
+
3. Run `npx agent-orchestrator-kit handoff <name>` and require exit 0. The CLI upserts Memory JSON (absolute path) and prints the expanded self-contained prompt on stdout.
|
|
83
|
+
4. If Memory MCP tools work, also update `Change:<name>`, `Handoff:<name>`, and new `Decision:*`.
|
|
84
|
+
5. Paste exactly one fenced prompt for verify/archive. Keep it complete. No banner.
|
|
85
|
+
6. Stop. This is the session's only next-session prompt.
|
|
79
86
|
|
|
80
87
|
**Guardrails**
|
|
81
88
|
- Max ~3 hours of work — if bigger, switch to full pipeline
|
|
@@ -7,7 +7,7 @@ description: Read-only spec review of an OpenSpec change — approve or request
|
|
|
7
7
|
|
|
8
8
|
## Session Start (Before Any Work)
|
|
9
9
|
|
|
10
|
-
Honor the pasted command and announce the Spec Reviewer role. Run `npx agent-orchestrator-kit status` or `npx openspec list --json`, then
|
|
10
|
+
Honor the pasted command and announce the Spec Reviewer role. Run `npx agent-orchestrator-kit status` or `npx openspec list --json`, then `npx agent-orchestrator-kit handoff --restore` (or `handoff <name> --restore`). Read Memory `Change:<name>`, `Handoff:<name>`, and `Decision:*` when MCP works. If restore CLI fails and Memory is empty, read `openspec/changes/<name>/handoff.md`; this fallback is not a blocker. Spawn `session-handoff` in restore mode when context is incomplete (Amp: isolated `subagent-session-handoff`). For free-form “continue” / “next” with one active change, execute its `Handoff.next_command` instead of asking for the phase. Only then spawn the routed phase specialist (Amp: isolated `subagent-<name>`, never the main thread). Follow `.agents/rules/session-handoff.mdc`.
|
|
11
11
|
|
|
12
12
|
Review an OpenSpec change. Read artifacts, validate structure, output Approve or Request Changes.
|
|
13
13
|
|
|
@@ -160,9 +160,16 @@ Fix the above, then re-run `/opsx:review <name>`.
|
|
|
160
160
|
|
|
161
161
|
---
|
|
162
162
|
|
|
163
|
-
## Session Exit (
|
|
163
|
+
## Session Exit (HARD STOP)
|
|
164
164
|
|
|
165
|
-
|
|
165
|
+
You have NOT finished until every step succeeds. Do not say done/готово, do not start apply, and do not omit the fenced next-thread prompt.
|
|
166
|
+
|
|
167
|
+
1. Spawn `session-handoff` in persist mode (Amp: isolated `subagent-session-handoff`). If spawn fails, persist in the parent — never skip.
|
|
168
|
+
2. Write `openspec/changes/<name>/handoff.md` with: Closed role, Change, Done, Decisions, Blocked, Next command, Next role, Attach, Subagents to spawn, Constraints.
|
|
169
|
+
3. Run `npx agent-orchestrator-kit handoff <name>` and require exit 0. The CLI upserts Memory JSON (absolute path) and prints the expanded self-contained prompt on stdout.
|
|
170
|
+
4. If Memory MCP tools work, also update `Change:<name>`, `Handoff:<name>`, and new `Decision:*`.
|
|
171
|
+
5. Paste CLI stdout into chat as one fenced block beginning with the next `/opsx:*` command (`/opsx:apply <name>` only after APPROVE). Keep it complete. No banner.
|
|
172
|
+
6. Stop. Do not start the next phase in this chat.
|
|
166
173
|
|
|
167
174
|
## Guardrails
|
|
168
175
|
|
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"mcpServers": {
|
|
3
3
|
"memory": {
|
|
4
|
-
"command": "
|
|
5
|
-
"args": ["
|
|
6
|
-
"env": {
|
|
7
|
-
"MEMORY_FILE_PATH": ".cursor/memory.json"
|
|
8
|
-
}
|
|
4
|
+
"command": "node",
|
|
5
|
+
"args": ["scripts/memory-mcp-launcher.cjs"]
|
|
9
6
|
},
|
|
10
7
|
"figma": {
|
|
11
8
|
"command": "node",
|
|
@@ -5,71 +5,31 @@ alwaysApply: true
|
|
|
5
5
|
|
|
6
6
|
# Agent Orchestration Rules
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
##
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
|
24
|
-
|
|
25
|
-
|
|
|
26
|
-
|
|
|
27
|
-
|
|
|
28
|
-
| `/opsx:
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
`spec-reviewer` is never interchangeable with `code-reviewer`. During apply, only the conductor may mark a `tasks.md` checkbox, and only after a subagent reports `Status: done` and the conductor verifies the reported files.
|
|
38
|
-
|
|
39
|
-
## Session Start Protocol (Before Any Specialist Work)
|
|
40
|
-
|
|
41
|
-
1. Honor the pasted `/opsx:<phase> <name>` command and announce that role.
|
|
42
|
-
2. Run `npx agent-orchestrator-kit status` or `npx openspec list --json`; resolve the active change without exceeding `max_active_changes`.
|
|
43
|
-
3. Read Memory entities `Change:<name>`, `Handoff:<name>`, and `Decision:*`.
|
|
44
|
-
4. If Memory MCP is unavailable or those entities are empty, read `openspec/changes/<name>/handoff.md`. Memory failure alone MUST NOT block the session.
|
|
45
|
-
5. Only after context is restored, spawn the routed specialist.
|
|
46
|
-
|
|
47
|
-
If the user says “continue” / “next” without a command and exactly one active change has `Handoff.next_command` (from Memory or `handoff.md`), execute that command instead of asking which phase to run.
|
|
48
|
-
|
|
49
|
-
## Session Exit Protocol (Mandatory Order)
|
|
50
|
-
|
|
51
|
-
A phase is not closed until the conductor performs these steps in order:
|
|
52
|
-
|
|
53
|
-
1. Attempt to update Memory: `Change:<name>` (`status`, `tasks n/m`, `last_role`, `review`), `Handoff:<name>` (`next_role`, `next_command`, `session_count`, `summary`, `blocked`), and each new `Decision:<topic>` (`chosen`, `reason`).
|
|
54
|
-
2. Write the same state to `openspec/changes/<name>/handoff.md` with sections **Closed role**, **Done**, **Decisions**, **Blocked**, **Next command**, **Attach**, **Subagents to spawn**, and **Prompt**. Do this even if Memory is unavailable.
|
|
55
|
-
3. Print one fenced copy/paste prompt. Its first line MUST be `/opsx:<next> <name>`; its body MUST use `.agents/orchestrator.yaml` → `project.agent_language`, instruct the next session to read `Change:<name>`, `Handoff:<name>`, and `Decision:*`, and mention the `handoff.md` fallback. Do not add a service/banner label or duplicate the session summary.
|
|
56
|
-
4. Do NOT start the next phase in this chat.
|
|
57
|
-
|
|
58
|
-
## Session Rules
|
|
59
|
-
- One active change at a time (unless mvp profile: up to 3)
|
|
60
|
-
- Each role = new chat session (except `/opsx:quick` combines propose+apply)
|
|
61
|
-
- No code in explore, design, or review sessions
|
|
62
|
-
- Design Intake may write only `openspec/changes/<name>/design-brief.md` and `assets/`
|
|
63
|
-
- No apply without review when `pipeline.require_spec_review: true` — check `review.md` or Approve in context
|
|
64
|
-
- When `require_design_brief: true` and the change touches UI — need `design-brief.md`, or `Design: none` in `proposal.md` for non-UI
|
|
65
|
-
- Apply uses the design brief, not live Figma MCP
|
|
66
|
-
- After apply: build + lint before PR
|
|
67
|
-
- After merge: run `/opsx:archive` (when `archive_after_merge: true`)
|
|
68
|
-
- CLI: `npx agent-orchestrator-kit status`, `npx openspec …` — never bare globals (see `cli-via-npm.mdc`)
|
|
69
|
-
|
|
70
|
-
## Never
|
|
71
|
-
- Mix propose and apply in one session
|
|
72
|
-
- Edit `src/` during explore, design, or review
|
|
73
|
-
- Skip spec review before apply
|
|
74
|
-
- Call live Figma MCP during apply when a design brief exists
|
|
75
|
-
- Leave changes un-archived after merge
|
|
8
|
+
Spec-driven pipeline. Read `.agents/orchestrator.yaml`. Details: skill `agent-orchestration`. Handoff: `.agents/rules/session-handoff.mdc`. CLI: `npx` only (`.agents/rules/cli-via-npm.mdc`).
|
|
9
|
+
|
|
10
|
+
## Commands
|
|
11
|
+
`/opsx:explore` read-only · `/opsx:design <name>` brief+assets only · `/opsx:propose <name>` change artifacts · `/opsx:review <name>` review.md · `/opsx:apply <name>` code (blocked without Approve when `require_spec_review`) · `/opsx:quick <name>` MVP propose+apply · `/opsx:archive`
|
|
12
|
+
|
|
13
|
+
The parent `/opsx:*` session is the **conductor**. It MUST spawn the one routed specialist, verify the structured report, and MUST NOT do that specialist's work. Only the conductor marks `tasks.md`, after `Status: done` and file check. `spec-reviewer` ≠ `code-reviewer`.
|
|
14
|
+
|
|
15
|
+
| Signal | MUST spawn |
|
|
16
|
+
|--------|------------|
|
|
17
|
+
| Status / gate / next command | `openspec-guide` |
|
|
18
|
+
| Restore if CLI briefing missing; persist on exit | `session-handoff` |
|
|
19
|
+
| Broken kit / MCP / sync | `setup-doctor` |
|
|
20
|
+
| `/opsx:explore` | `codebase-explorer` |
|
|
21
|
+
| `/opsx:design` | `design-intake` |
|
|
22
|
+
| `/opsx:propose` | `spec-architect` |
|
|
23
|
+
| `/opsx:review` | `spec-reviewer` |
|
|
24
|
+
| Apply + design brief/Figma/image | `design-implementer` |
|
|
25
|
+
| Apply ordinary task | `code-writer` |
|
|
26
|
+
| Apply tests | `test-writer` |
|
|
27
|
+
| Apply pre-PR | `code-reviewer` |
|
|
28
|
+
| `/opsx:archive` | `spec-archiver` |
|
|
29
|
+
|
|
30
|
+
## Session
|
|
31
|
+
Start: honor pasted `/opsx:*` → `npx agent-orchestrator-kit status` → `handoff --restore`. Spawn `session-handoff` restore **only if** restore CLI failed or printed no briefing (Amp: isolated `subagent-session-handoff`). Then spawn the phase specialist isolated. Free-form continue → `Handoff.next_command`.
|
|
32
|
+
|
|
33
|
+
Exit HARD STOP: persist via `session-handoff` → `handoff.md` → `npx agent-orchestrator-kit handoff <name>` (exit 0) → paste CLI stdout as one fenced `/opsx:*` prompt. Do not start the next phase here.
|
|
34
|
+
|
|
35
|
+
Never mix propose+apply (except `/opsx:quick`). No `src/` in explore/design/review. Skip live Figma during apply when a brief exists.
|
|
@@ -13,7 +13,8 @@ Amp Code і багато агентських shell **не мають** глоб
|
|
|
13
13
|
| Замість (ламає Amp) | Використовуй |
|
|
14
14
|
|---------------------|--------------|
|
|
15
15
|
| `agent-orchestrator-kit status` | `npx agent-orchestrator-kit status` (або `npm run agent:status`, якщо script є) |
|
|
16
|
-
| `agent-orchestrator-kit
|
|
16
|
+
| `agent-orchestrator-kit handoff` | `npx agent-orchestrator-kit handoff <name>` |
|
|
17
|
+
| `agent-orchestrator-kit memory-setup` | `npx agent-orchestrator-kit memory-setup` |
|
|
17
18
|
| `openspec list` | `npx openspec list` (або `npm run openspec:list`) |
|
|
18
19
|
| `openspec validate --strict` | **ніколи без цілі** → `npx openspec validate <name> --strict --type change` |
|
|
19
20
|
| `openspec validate --all --strict` | `npx openspec validate --all --strict` (або `npm run openspec:validate` / `verify:openspec`) |
|
|
@@ -3,60 +3,10 @@ description: Memory MCP auto-setup for Cursor and Amp
|
|
|
3
3
|
alwaysApply: true
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Memory MCP
|
|
6
|
+
# Memory MCP
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
If `memory` MCP is absent — add it silently.
|
|
8
|
+
If `.mcp.json` / `.amp/settings.json` lacks `memory`, or `MEMORY_FILE_PATH` is relative: run `npx agent-orchestrator-kit memory-setup`. Relative paths resolve inside npx `dist/` and look like “memory ignored”.
|
|
10
9
|
|
|
11
|
-
|
|
10
|
+
Use `node scripts/memory-mcp-launcher.cjs` (no relative `MEMORY_FILE_PATH`). Shared file: `.cursor/memory.json` (gitignored). Do not delete other MCP servers.
|
|
12
11
|
|
|
13
|
-
|
|
14
|
-
"memory": {
|
|
15
|
-
"command": "npx",
|
|
16
|
-
"args": ["-y", "@modelcontextprotocol/server-memory"],
|
|
17
|
-
"env": { "MEMORY_FILE_PATH": ".cursor/memory.json" }
|
|
18
|
-
}
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
## Amp (.amp/settings.json)
|
|
22
|
-
|
|
23
|
-
```json
|
|
24
|
-
"amp.mcpServers": {
|
|
25
|
-
"memory": {
|
|
26
|
-
"command": "npx",
|
|
27
|
-
"args": ["-y", "@modelcontextprotocol/server-memory"],
|
|
28
|
-
"env": { "MEMORY_FILE_PATH": ".cursor/memory.json" }
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
## .gitignore
|
|
34
|
-
|
|
35
|
-
Ensure present (do not duplicate):
|
|
36
|
-
```
|
|
37
|
-
.cursor/memory.json
|
|
38
|
-
.amp/settings.json
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
## Memory Entity Format
|
|
42
|
-
|
|
43
|
-
Use these keys and fields for orchestration state:
|
|
44
|
-
|
|
45
|
-
| Key | Required fields |
|
|
46
|
-
|-----|-----------------|
|
|
47
|
-
| `Change:<name>` | `status`, `tasks n/m`, `last_role`, `review` |
|
|
48
|
-
| `Handoff:<name>` | `next_role`, `next_command`, `session_count`, `summary`, `blocked` |
|
|
49
|
-
| `Decision:<topic>` | `chosen`, `reason` |
|
|
50
|
-
| `Convention:<area>` | project-specific rules |
|
|
51
|
-
|
|
52
|
-
## Session Lifecycle
|
|
53
|
-
|
|
54
|
-
At the start of every `/opsx:*` role session, after resolving the change and before specialist work, read `Change:<name>`, `Handoff:<name>`, and `Decision:*`. If Memory MCP is unavailable or those entities are empty, read `openspec/changes/<name>/handoff.md` and continue; Memory failure is not a blocker.
|
|
55
|
-
|
|
56
|
-
At session exit, first attempt to update `Change:<name>`, `Handoff:<name>`, and every new `Decision:<topic>`. Then always mirror the state to `openspec/changes/<name>/handoff.md`, even when the Memory write fails. Only after that attempt may the conductor emit the next-session prompt.
|
|
57
|
-
|
|
58
|
-
## Rules
|
|
59
|
-
- Do not overwrite existing correct config
|
|
60
|
-
- Do not delete other MCP servers
|
|
61
|
-
- Notify once: "Memory MCP connected."
|
|
62
|
-
- Never treat unavailable Memory MCP as a reason to stop when `handoff.md` can restore or persist state
|
|
12
|
+
Entities: `Change:<name>` (status, tasks n/m, last_role, review) · `Handoff:<name>` (next_role, next_command, session_count, summary, blocked) · `Decision:<topic>` (chosen, reason). Writer: `npx agent-orchestrator-kit handoff <name>`. Notify once: “Memory MCP connected.”
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Mandatory session restore, Memory persist, subagent spawn, and next-thread prompt
|
|
3
|
+
alwaysApply: true
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Session Handoff — HARD STOP
|
|
7
|
+
|
|
8
|
+
A `/opsx:*` session is incomplete without persist + the fenced next-thread prompt. FORBIDDEN until persist succeeds: done/готово, next phase, or omitting the prompt.
|
|
9
|
+
|
|
10
|
+
## Start (before specialist work)
|
|
11
|
+
1. Honor pasted `/opsx:<phase> <name>`.
|
|
12
|
+
2. `npx agent-orchestrator-kit status`
|
|
13
|
+
3. `npx agent-orchestrator-kit handoff --restore` (or `handoff <name> --restore`)
|
|
14
|
+
4. Read Memory `Change:<name>`, `Handoff:<name>`, `Decision:*` when MCP works
|
|
15
|
+
5. If restore CLI failed and Memory is empty → `openspec/changes/<name>/handoff.md`. Memory failure is not a blocker when the file exists.
|
|
16
|
+
6. Spawn `session-handoff` restore **only if** step 3 failed or printed no briefing (Amp: isolated `subagent-session-handoff`). Skip this spawn when CLI restore exit 0.
|
|
17
|
+
7. Spawn the routed phase specialist. Amp: isolated `subagent-<name>`. Do not do specialist work in the parent.
|
|
18
|
+
8. Free-form continue/next/«далі» with one active change → execute `Handoff.next_command`.
|
|
19
|
+
|
|
20
|
+
## Exit (order)
|
|
21
|
+
1. Spawn `session-handoff` persist (Amp isolated). If spawn fails, persist in the parent — never skip.
|
|
22
|
+
2. Write `handoff.md`: Closed role, Change, Done, Decisions, Blocked, Next command, Next role, Attach, Subagents to spawn, Constraints.
|
|
23
|
+
3. `npx agent-orchestrator-kit handoff <name>` — require exit 0 (upserts absolute-path Memory JSON, prints the prompt).
|
|
24
|
+
4. Update Memory entities when tools work.
|
|
25
|
+
5. Paste CLI stdout as one fenced block. First line `/opsx:…`. Body uses `project.agent_language`. Self-contained (Done/Decisions/Blocked/spawn/HARD STOP). No banner.
|
|
26
|
+
6. Stop. Next role = new chat.
|
|
27
|
+
|
|
28
|
+
Memory MCP: launcher `node scripts/memory-mcp-launcher.cjs`, never a relative `MEMORY_FILE_PATH`.
|
|
@@ -49,6 +49,7 @@ The parent `/opsx:*` session is the conductor. It MUST spawn the selected specia
|
|
|
49
49
|
| Phase / signal | MUST spawn | Specialist scope |
|
|
50
50
|
|----------------|------------|------------------|
|
|
51
51
|
| Status, gate failure, next command | `openspec-guide` | Read-only pipeline diagnosis |
|
|
52
|
+
| Session start restore / session exit persist | `session-handoff` | Memory, `handoff.md`, next-thread prompt |
|
|
52
53
|
| Broken kit, MCP, or generated-file sync | `setup-doctor` | Kit setup repair only |
|
|
53
54
|
| `/opsx:explore` repository investigation | `codebase-explorer` | Read-only repository research |
|
|
54
55
|
| `/opsx:design` | `design-intake` | `design-brief.md` and `assets/` only |
|
|
@@ -132,20 +133,24 @@ After PR merged + CI green:
|
|
|
132
133
|
**Start of each session:**
|
|
133
134
|
1. Honor the pasted `/opsx:<phase> <name>` command and announce that role.
|
|
134
135
|
2. Run `npx agent-orchestrator-kit status` (or `npx openspec list --json`) and read `orchestrator.yaml`; resolve the active change and gates.
|
|
135
|
-
3.
|
|
136
|
-
4.
|
|
137
|
-
5.
|
|
136
|
+
3. Run `npx agent-orchestrator-kit handoff --restore` (or `handoff <name> --restore`).
|
|
137
|
+
4. Read Memory entities `Change:<name>`, `Handoff:<name>`, and `Decision:*` when MCP works.
|
|
138
|
+
5. If restore CLI fails and Memory is empty, read `openspec/changes/<name>/handoff.md`; Memory failure alone is not a blocker.
|
|
139
|
+
6. Spawn `session-handoff` in restore mode **only if** `handoff --restore` failed or printed no briefing (Amp: isolated `subagent-session-handoff`). Skip this spawn when CLI restore exits 0.
|
|
140
|
+
7. Only after restoration, spawn the routed phase specialist. If the user said “continue” / “next” and exactly one active change has `Handoff.next_command`, execute it instead of asking for a phase.
|
|
138
141
|
|
|
139
142
|
**During session:**
|
|
140
143
|
- Stay in role — do not drift into next phase
|
|
141
144
|
- Pause and ask if requirements are unclear
|
|
142
145
|
- Never edit files outside your role's allowed output
|
|
143
146
|
|
|
144
|
-
**End of each session:**
|
|
145
|
-
1.
|
|
146
|
-
2.
|
|
147
|
-
3.
|
|
148
|
-
4.
|
|
147
|
+
**End of each session (HARD STOP — you are NOT done):**
|
|
148
|
+
1. Spawn `session-handoff` in persist mode (Amp: isolated `subagent-session-handoff`). If spawn fails, persist in the parent — never skip.
|
|
149
|
+
2. Write `openspec/changes/<name>/handoff.md` using the template below even if Memory MCP fails.
|
|
150
|
+
3. Run `npx agent-orchestrator-kit handoff <name>` and require exit 0. The CLI upserts Memory JSON with an absolute path and prints the expanded self-contained prompt on stdout.
|
|
151
|
+
4. If Memory MCP tools work, also update `Change:<name>`, `Handoff:<name>`, and new `Decision:<topic>` entities.
|
|
152
|
+
5. Paste the CLI stdout as one fenced next-session prompt. First line is `/opsx:<next> <name>`; body uses `project.agent_language`; keep Done/Decisions/Blocked/spawn/HARD STOP complete. No banner. Do not emit a thin “read Memory” stub.
|
|
153
|
+
6. Do not start the next phase in this chat. If apply, include build/lint status in the persisted Done section.
|
|
149
154
|
|
|
150
155
|
`handoff.md` template:
|
|
151
156
|
|
|
@@ -155,11 +160,18 @@ After PR merged + CI green:
|
|
|
155
160
|
## Closed role
|
|
156
161
|
<role and completion status>
|
|
157
162
|
|
|
163
|
+
## Change
|
|
164
|
+
- name: <name>
|
|
165
|
+
- status: <proposed | spec-approved | applying | blocked>
|
|
166
|
+
- tasks: <n/m>
|
|
167
|
+
- review: <pending | APPROVE | REQUEST_CHANGES | none>
|
|
168
|
+
- last_role: <role>
|
|
169
|
+
|
|
158
170
|
## Done
|
|
159
|
-
<
|
|
171
|
+
<full persisted summary the next thread needs>
|
|
160
172
|
|
|
161
173
|
## Decisions
|
|
162
|
-
- <
|
|
174
|
+
- <topic>: <chosen> — <reason>
|
|
163
175
|
|
|
164
176
|
## Blocked
|
|
165
177
|
<blocker or none>
|
|
@@ -167,19 +179,24 @@ After PR merged + CI green:
|
|
|
167
179
|
## Next command
|
|
168
180
|
`/opsx:<next> <name>`
|
|
169
181
|
|
|
182
|
+
## Next role
|
|
183
|
+
<role or subagent name>
|
|
184
|
+
|
|
170
185
|
## Attach
|
|
171
186
|
- `openspec/changes/<name>/<artifact>`
|
|
172
187
|
|
|
173
188
|
## Subagents to spawn
|
|
174
|
-
- `<
|
|
189
|
+
- `<phase-specialist>` — <signal> (Amp: isolated `subagent-<name>`)
|
|
190
|
+
- `session-handoff` — restore at start, persist at exit (Amp: isolated `subagent-session-handoff`)
|
|
175
191
|
|
|
176
|
-
##
|
|
192
|
+
## Constraints
|
|
193
|
+
- language: <project.agent_language>
|
|
194
|
+
- do not mix phases
|
|
195
|
+
- conductor must spawn specialists
|
|
177
196
|
|
|
178
|
-
|
|
179
|
-
/opsx:<next> <name>
|
|
197
|
+
## Prompt
|
|
180
198
|
|
|
181
|
-
|
|
182
|
-
```
|
|
199
|
+
The Prompt section is overwritten by `npx agent-orchestrator-kit handoff <name>`. Do not hand-write a thin stub.
|
|
183
200
|
````
|
|
184
201
|
|
|
185
202
|
## Model Selection Guide
|
|
@@ -196,9 +213,9 @@ After PR merged + CI green:
|
|
|
196
213
|
|
|
197
214
|
## Mandatory Memory and Handoff Protocol
|
|
198
215
|
|
|
199
|
-
Before specialist work, the conductor MUST restore context in order: honor the pasted `/opsx:*` command; read Memory entities `Change:<name>`, `Handoff:<name>`, and `Decision:*`; if
|
|
216
|
+
Before specialist work, the conductor MUST restore context in order: honor the pasted `/opsx:*` command; run `npx agent-orchestrator-kit handoff --restore`; read Memory entities `Change:<name>`, `Handoff:<name>`, and `Decision:*`; if restore CLI and Memory fail, read `openspec/changes/<name>/handoff.md`. Memory failure is not a blocker when the file exists. With one active change, free-form “continue” uses `Handoff.next_command` instead of asking for the phase. Amp MUST spawn `session-handoff` and the phase specialist as isolated `subagent-*` skills.
|
|
200
217
|
|
|
201
|
-
Before declaring a session closed, the conductor MUST, in order: (1)
|
|
218
|
+
Before declaring a session closed, the conductor MUST, in order: (1) spawn `session-handoff` persist, (2) write `openspec/changes/<name>/handoff.md`, (3) run `npx agent-orchestrator-kit handoff <name>` (exit 0), (4) paste the CLI stdout prompt whose first line is `/opsx:<next> <name>`. The prompt has no `NEXT_SESSION_PROMPT` label, uses `project.agent_language`, and MUST be self-contained (Done, Decisions, Blocked, attach, spawn, HARD STOP) so the next thread can run if Memory MCP is ignored. Never start the next phase in the current chat.
|
|
202
219
|
|
|
203
220
|
| Entity | Required fields |
|
|
204
221
|
|--------|-----------------|
|
|
@@ -226,7 +243,7 @@ Before declaring a session closed, the conductor MUST, in order: (1) update Memo
|
|
|
226
243
|
| All tasks in one apply session | Context overload; model drifts |
|
|
227
244
|
| No archive after merge | Next propose has stale domain specs |
|
|
228
245
|
| Strong model on lint fixes | 5–10x cost with no quality gain |
|
|
229
|
-
| Skip Memory MCP |
|
|
246
|
+
| Skip Memory MCP / skip `handoff` CLI | Next thread has no context; Amp looks like it “ignored the rules” |
|
|
230
247
|
|
|
231
248
|
## Metrics (health check per change)
|
|
232
249
|
|