@opengsd/gsd-core 1.7.0-rc.3 → 1.7.0-rc.5
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/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/.opencode/plugins/gsd-core.js +20 -0
- package/README.ja-JP.md +4 -3
- package/README.ko-KR.md +4 -3
- package/README.md +4 -3
- package/README.pt-BR.md +4 -3
- package/README.zh-CN.md +4 -3
- package/agents/gsd-doc-classifier.md +105 -0
- package/agents/gsd-doc-synthesizer.md +61 -0
- package/agents/gsd-ui-checker.md +28 -0
- package/bin/install.js +652 -466
- package/commands/gsd/map-codebase.md +4 -4
- package/commands/gsd/ns-project.md +2 -1
- package/commands/gsd/onboard.md +46 -0
- package/gsd-core/bin/gsd-tools.cjs +87 -3
- package/gsd-core/bin/lib/api-coverage.cjs +466 -0
- package/gsd-core/bin/lib/audit.cjs +6 -3
- package/gsd-core/bin/lib/capability-loader.cjs +11 -9
- package/gsd-core/bin/lib/capability-registry.cjs +741 -62
- package/gsd-core/bin/lib/capability-state.cjs +117 -18
- package/gsd-core/bin/lib/capability-validator.cjs +1 -1
- package/gsd-core/bin/lib/capability-writer.cjs +21 -2
- package/gsd-core/bin/lib/check-command-router.cjs +242 -3
- package/gsd-core/bin/lib/claude-orchestration-command-router.cjs +136 -0
- package/gsd-core/bin/lib/claude-orchestration.cjs +404 -0
- package/gsd-core/bin/lib/clusters.cjs +1 -0
- package/gsd-core/bin/lib/command-aliases.cjs +8 -0
- package/gsd-core/bin/lib/commands.cjs +7 -5
- package/gsd-core/bin/lib/config-loader.cjs +1 -0
- package/gsd-core/bin/lib/config.cjs +96 -0
- package/gsd-core/bin/lib/core-utils.cjs +4 -1
- package/gsd-core/bin/lib/host-integration-adapters/cline-sdk-binding.cjs +234 -0
- package/gsd-core/bin/lib/host-integration-adapters/imperative-hook-bus.cjs +145 -0
- package/gsd-core/bin/lib/host-integration.cjs +16 -0
- package/gsd-core/bin/lib/init-command-router.cjs +4 -0
- package/gsd-core/bin/lib/init.cjs +99 -99
- package/gsd-core/bin/lib/install-effort-resolver.cjs +213 -0
- package/gsd-core/bin/lib/install-engine.cjs +159 -16
- package/gsd-core/bin/lib/install-profiles.cjs +2 -0
- package/gsd-core/bin/lib/installer-migration-report.cjs +4 -0
- package/gsd-core/bin/lib/loop-resolver.cjs +75 -18
- package/gsd-core/bin/lib/markdown-sectionizer.cjs +50 -11
- package/gsd-core/bin/lib/milestone.cjs +3 -3
- package/gsd-core/bin/lib/model-resolver.cjs +69 -4
- package/gsd-core/bin/lib/normalize-test-command.cjs +187 -0
- package/gsd-core/bin/lib/onboard-projection.cjs +309 -0
- package/gsd-core/bin/lib/phase-id.cjs +132 -3
- package/gsd-core/bin/lib/phase.cjs +78 -16
- package/gsd-core/bin/lib/planning-workspace.cjs +17 -0
- package/gsd-core/bin/lib/roadmap-command-router.cjs +5 -4
- package/gsd-core/bin/lib/roadmap-parser.cjs +21 -30
- package/gsd-core/bin/lib/roadmap-upgrade.cjs +9 -9
- package/gsd-core/bin/lib/roadmap.cjs +42 -56
- package/gsd-core/bin/lib/runtime-artifact-conversion.cjs +13 -6
- package/gsd-core/bin/lib/runtime-artifact-install-plan.cjs +2 -2
- package/gsd-core/bin/lib/runtime-artifact-layout.cjs +17 -10
- package/gsd-core/bin/lib/runtime-homes.cjs +8 -0
- package/gsd-core/bin/lib/runtime-hooks-surface.cjs +33 -25
- package/gsd-core/bin/lib/runtime-name-policy.cjs +3 -1
- package/gsd-core/bin/lib/spec-section.cjs +111 -0
- package/gsd-core/bin/lib/state-transition.cjs +1 -1
- package/gsd-core/bin/lib/state.cjs +24 -24
- package/gsd-core/bin/lib/surface.cjs +81 -30
- package/gsd-core/bin/lib/uat.cjs +4 -1
- package/gsd-core/bin/lib/validate.cjs +15 -6
- package/gsd-core/bin/lib/verify.cjs +33 -37
- package/gsd-core/bin/shared/config-schema.manifest.json +2 -0
- package/gsd-core/bin/shared/model-catalog.json +11 -6
- package/gsd-core/references/api-coverage.md +104 -0
- package/gsd-core/references/gsd-run-resolver.md +8 -0
- package/gsd-core/references/model-profiles.md +2 -2
- package/gsd-core/references/planning-config.md +2 -0
- package/gsd-core/references/specless-probe-fallback.md +172 -0
- package/gsd-core/templates/config.json +2 -1
- package/gsd-core/templates/project.md +1 -1
- package/gsd-core/workflows/audit-fix.md +9 -1
- package/gsd-core/workflows/code-review-fix.md +7 -3
- package/gsd-core/workflows/code-review.md +4 -1
- package/gsd-core/workflows/discuss-phase-assumptions.md +4 -1
- package/gsd-core/workflows/do.md +4 -3
- package/gsd-core/workflows/execute-phase/steps/post-merge-gate.md +8 -4
- package/gsd-core/workflows/execute-phase/steps/regression-gate.md +42 -0
- package/gsd-core/workflows/execute-phase.md +1 -25
- package/gsd-core/workflows/help/modes/brief.md +2 -1
- package/gsd-core/workflows/help/modes/default.md +2 -1
- package/gsd-core/workflows/help/modes/full.md +11 -1
- package/gsd-core/workflows/help/modes/topic.md +1 -1
- package/gsd-core/workflows/onboard.md +277 -0
- package/gsd-core/workflows/plan-phase.md +31 -2
- package/gsd-core/workflows/quick.md +22 -2
- package/gsd-core/workflows/review.md +59 -13
- package/gsd-core/workflows/settings-advanced.md +5 -5
- package/gsd-core/workflows/settings.md +2 -2
- package/gsd-core/workflows/verify-phase.md +3 -2
- package/gsd-core/workflows/verify-work.md +38 -0
- package/hooks/dist/gsd-cursor-pre-tool.js +76 -0
- package/hooks/dist/gsd-cursor-stop.js +48 -0
- package/hooks/dist/gsd-cursor-subagent-start.js +50 -0
- package/hooks/dist/gsd-cursor-subagent-stop.js +40 -0
- package/hooks/dist/managed-hooks-registry.cjs +4 -0
- package/hooks/gsd-cursor-pre-tool.js +76 -0
- package/hooks/gsd-cursor-stop.js +48 -0
- package/hooks/gsd-cursor-subagent-start.js +50 -0
- package/hooks/gsd-cursor-subagent-stop.js +40 -0
- package/hooks/managed-hooks-registry.cjs +4 -0
- package/package.json +2 -1
- package/scripts/build-hooks.js +5 -1
- package/scripts/gen-golden-install-parity-zcode.cjs +77 -0
- package/scripts/lint-phase-id-drift.cjs +150 -0
- package/scripts/run-tests.cjs +26 -4
- package/scripts/sync-runtime-launcher.cjs +20 -2
- package/skills/gsd-map-codebase/SKILL.md +3 -3
- package/skills/gsd-ns-project/SKILL.md +1 -0
- package/skills/gsd-onboard/SKILL.md +46 -0
|
@@ -10,7 +10,7 @@ const capabilities = {
|
|
|
10
10
|
"ai-integration": {
|
|
11
11
|
"id": "ai-integration",
|
|
12
12
|
"role": "feature",
|
|
13
|
-
"version": "1.7.0-rc.
|
|
13
|
+
"version": "1.7.0-rc.5",
|
|
14
14
|
"title": "AI design contract",
|
|
15
15
|
"description": "AI-SPEC design contract workflow for phases that build AI systems; owns the AI integration command, agents, and workflow.ai_integration_phase activation key.",
|
|
16
16
|
"tier": "full",
|
|
@@ -39,6 +39,11 @@ const capabilities = {
|
|
|
39
39
|
"type": "boolean",
|
|
40
40
|
"default": true,
|
|
41
41
|
"description": "Prompt for an AI-SPEC design contract before planning phases that involve AI systems."
|
|
42
|
+
},
|
|
43
|
+
"workflow.api_coverage_gate": {
|
|
44
|
+
"type": "boolean",
|
|
45
|
+
"default": true,
|
|
46
|
+
"description": "Require an explicit API-coverage decision (full-by-default, opt-out-not-opt-in) before a phase that integrates an external API/SDK/service can seal. At plan:pre the planner is prompted to enumerate the API surface into COVERAGE.md; at verify:pre a blocking gate fails the seal unless the matrix exists with every non-integrated capability an explicit, reasoned opt-out. Independent of ai_integration_phase (applies to any external-API integration, not only AI)."
|
|
42
47
|
}
|
|
43
48
|
},
|
|
44
49
|
"steps": [
|
|
@@ -57,13 +62,40 @@ const capabilities = {
|
|
|
57
62
|
"onError": "skip"
|
|
58
63
|
}
|
|
59
64
|
],
|
|
60
|
-
"contributions": [
|
|
61
|
-
|
|
65
|
+
"contributions": [
|
|
66
|
+
{
|
|
67
|
+
"point": "plan:pre",
|
|
68
|
+
"into": "planner",
|
|
69
|
+
"fragment": {
|
|
70
|
+
"path": "fragments/api-coverage-plan-pre.md",
|
|
71
|
+
"inline": "# API Coverage Decision Checkpoint\n\n> Full API Coverage by Default — Opt Out, Never Opt In. Fires when a phase\n> integrates an external API / SDK / service. Most non-API phases will not fire\n> it — that is the point.\n\n## Why this exists\n\n\"We integrated the API\" too often silently means \"we integrated whatever the\nfirst use case exercised.\" Every un-built capability is then an invisible hole,\ndiscovered later by a user who reasonably expected it to work. The phase sealed\ngreen because its tasks completed; nobody decided the gaps were acceptable,\nbecause nobody enumerated them. This checkpoint makes the surface **visible and\ndecided** before the phase can seal.\n\n## Detect whether this phase integrates an external API\n\nThe detector is a deterministic scan over the phase scope. It strips fenced\ncode blocks first, so a trigger term inside a code snippet does not fire. It\nreturns a typed result: `{ detected, signals[], terms }`. Run it on the phase\nscope (the concatenation of this phase's ROADMAP section + the PLAN body):\n\n```bash\nSCOPE=\"$(cat \"${PHASE_DIR}\"/*-PLAN.md 2>/dev/null) $(gsd_run query roadmap.get-phase \"${PHASE}\" 2>/dev/null || true)\"\nAPI_COVERAGE_JSON=$(printf '%s' \"$SCOPE\" | node gsd-core/bin/lib/api-coverage.cjs --json 2>/dev/null || echo '{\"detected\":false,\"signals\":[]}')\n```\n\nRead `API_COVERAGE_JSON.detected`. Act on it only — do **not** pattern-match the\nprose yourself.\n\n**If `detected` is `false`:** this phase does not integrate an external API. Skip\nthe checkpoint entirely and continue planning. Do not raise it with the user.\n\n**If `detected` is `true`:** an external-API integration is in scope. You MUST\nproduce a **coverage matrix** before the plan is finalized.\n\n## Produce the coverage matrix\n\nEnumerate the external API's full **capability surface** — the verb/endpoint/method\nlist (e.g. for a music service: `search`, `play`, `pause`, `skip`, `set_volume`,\n`get_playlist`, `create_playlist`, `add_to_playlist`, …). For each capability\nrecord a decision, starting from **full coverage** as the default:\n\n| capability | decision | reason |\n|---|---|---|\n| `<capability-id>` | `INTEGRATE` \\| `OPT-OUT` | `<one-line reason if OPT-OUT>` |\n\nRules:\n\n- **`INTEGRATE` is the default.** Every capability starts as INTEGRATE; the\n matrix is the *subtraction record*.\n- **Every `OPT-OUT` MUST carry a one-line reason** (`not needed`, `not needed\n yet`, `explicitly out of scope`, …). An opt-out without a reason is an\n un-decided hole — the exact failure mode this gate exists to close.\n- **A second integration against the same need** (e.g. a second platform for the\n same capability) starts from the **same full-coverage baseline** as the first.\n Do not carry over the first integration's opt-outs silently — re-decide each\n capability for the new surface, so a first-class/fallback asymmetry cannot\n accumulate.\n\nWrite the matrix to `${PHASE_DIR}/COVERAGE.md` (canonical markdown-table form):\n\n```markdown\n# API Coverage — <service>\n\n> Full coverage by default. Opt-outs are explicit, reasoned decisions.\n\n| capability | decision | reason |\n|---|---|---|\n| search | INTEGRATE | |\n| playlists | INTEGRATE | |\n| skip | OPT-OUT | not needed yet — tracked for follow-up phase |\n```\n\nA fenced ` ```coverage ` JSON block is also accepted for machine-generated\nmatrices; the markdown table is preferred (human-editable, diff-friendly).\n\n## The seal-time gate\n\nThis checkpoint is enforced. At `verify:pre` the `api-coverage.verify-pre` gate\nruns `check api-coverage.verify-pre <phase-dir>`:\n\n- If `COVERAGE.md` exists, it is validated — every row needs a valid decision and\n every `OPT-OUT` a reason. A malformed/partial matrix **blocks the seal**.\n- If `COVERAGE.md` is absent, the detector runs again over the phase scope. If a\n strong external-API-integration signal is found, the seal is **blocked** until a\n matrix is produced. If no signal is found, the phase is treated as a non-API\n phase and the seal proceeds.\n\nSo: an API-integrating phase cannot seal without a decided matrix. Produce it at\nplan time; do not leave it for seal time.\n\n## Tuning the vocabulary (optional)\n\nThe trigger vocabulary is a curated, additive-only set in\n`gsd-core/bin/lib/api-coverage.cjs` (`DEFAULT_API_COVERAGE_TERMS`). To widen it\nfor a project, override at the call site:\n\n```bash\nprintf '%s' \"$SCOPE\" | node gsd-core/bin/lib/api-coverage.cjs --json \\\n --verbs integrate,wrap,connect,embed --nouns api,sdk,rest,grpc,webhook,plugin\n```\n\nThe whole checkpoint is toggleable via `workflow.api_coverage_gate` in\n`.planning/config.json`.\n"
|
|
72
|
+
},
|
|
73
|
+
"produces": [
|
|
74
|
+
"COVERAGE.md"
|
|
75
|
+
],
|
|
76
|
+
"consumes": [
|
|
77
|
+
"CONTEXT.md"
|
|
78
|
+
],
|
|
79
|
+
"when": "workflow.api_coverage_gate",
|
|
80
|
+
"onError": "skip"
|
|
81
|
+
}
|
|
82
|
+
],
|
|
83
|
+
"gates": [
|
|
84
|
+
{
|
|
85
|
+
"point": "verify:pre",
|
|
86
|
+
"check": {
|
|
87
|
+
"query": "api-coverage.verify-pre"
|
|
88
|
+
},
|
|
89
|
+
"when": "workflow.api_coverage_gate",
|
|
90
|
+
"blocking": true,
|
|
91
|
+
"onError": "halt"
|
|
92
|
+
}
|
|
93
|
+
]
|
|
62
94
|
},
|
|
63
95
|
"antigravity": {
|
|
64
96
|
"id": "antigravity",
|
|
65
97
|
"role": "runtime",
|
|
66
|
-
"version": "1.7.0-rc.
|
|
98
|
+
"version": "1.7.0-rc.5",
|
|
67
99
|
"title": "Antigravity",
|
|
68
100
|
"description": "Google Antigravity IDE — nested under ~/.gemini/antigravity; probed across 1.x and 2.x layouts; Gemini hook event dialect; flat skill layout; tier-1 support.",
|
|
69
101
|
"tier": "core",
|
|
@@ -97,6 +129,14 @@ const capabilities = {
|
|
|
97
129
|
"nesting": "flat",
|
|
98
130
|
"recursive": false,
|
|
99
131
|
"converter": "convertClaudeCommandToAntigravitySkill"
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"kind": "agents",
|
|
135
|
+
"destSubpath": "agents",
|
|
136
|
+
"prefix": "gsd-",
|
|
137
|
+
"nesting": "flat",
|
|
138
|
+
"recursive": false,
|
|
139
|
+
"converter": "convertClaudeAgentToAntigravityAgent"
|
|
100
140
|
}
|
|
101
141
|
],
|
|
102
142
|
"local": [
|
|
@@ -107,6 +147,14 @@ const capabilities = {
|
|
|
107
147
|
"nesting": "flat",
|
|
108
148
|
"recursive": false,
|
|
109
149
|
"converter": "convertClaudeCommandToAntigravitySkill"
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
"kind": "agents",
|
|
153
|
+
"destSubpath": "agents",
|
|
154
|
+
"prefix": "gsd-",
|
|
155
|
+
"nesting": "flat",
|
|
156
|
+
"recursive": false,
|
|
157
|
+
"converter": "convertClaudeAgentToAntigravityAgent"
|
|
110
158
|
}
|
|
111
159
|
]
|
|
112
160
|
},
|
|
@@ -141,7 +189,7 @@ const capabilities = {
|
|
|
141
189
|
"assumption-delta": {
|
|
142
190
|
"id": "assumption-delta",
|
|
143
191
|
"role": "feature",
|
|
144
|
-
"version": "1.7.0-rc.
|
|
192
|
+
"version": "1.7.0-rc.5",
|
|
145
193
|
"title": "Assumption-delta architecture checkpoint",
|
|
146
194
|
"description": "Rarely-firing advisory checkpoint that triggers when a phase makes something plural, optional, or chosen that used to be singular, required, or derived. Surfaces one identity-model question (promote the new general representation to primary, or add it alongside?) so a silent primary-key drift does not accumulate into a later user-facing bug. Non-blocking; fires only on a detected signal.",
|
|
147
195
|
"tier": "full",
|
|
@@ -187,7 +235,7 @@ const capabilities = {
|
|
|
187
235
|
"audit": {
|
|
188
236
|
"id": "audit",
|
|
189
237
|
"role": "feature",
|
|
190
|
-
"version": "1.7.0-rc.
|
|
238
|
+
"version": "1.7.0-rc.5",
|
|
191
239
|
"title": "Audit",
|
|
192
240
|
"description": "Open-artifact audit and UAT-gap audit for milestone close gates; exposes `gsd-tools audit-uat` (cross-phase UAT outstanding items) and `gsd-tools audit-open` (structured open-artifact scan across debug, tasks, threads, todos, seeds, UAT, verification, context-questions).",
|
|
193
241
|
"tier": "full",
|
|
@@ -224,7 +272,7 @@ const capabilities = {
|
|
|
224
272
|
"augment": {
|
|
225
273
|
"id": "augment",
|
|
226
274
|
"role": "runtime",
|
|
227
|
-
"version": "1.7.0-rc.
|
|
275
|
+
"version": "1.7.0-rc.5",
|
|
228
276
|
"title": "Augment Code",
|
|
229
277
|
"description": "Augment Code CLI — commands + nested-skill artifact layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
|
|
230
278
|
"tier": "core",
|
|
@@ -327,7 +375,7 @@ const capabilities = {
|
|
|
327
375
|
"claude": {
|
|
328
376
|
"id": "claude",
|
|
329
377
|
"role": "runtime",
|
|
330
|
-
"version": "1.7.0-rc.
|
|
378
|
+
"version": "1.7.0-rc.5",
|
|
331
379
|
"title": "Claude Code",
|
|
332
380
|
"description": "Anthropic Claude Code — primary development runtime; tier-1 support with full hook surface and skills-based global install.",
|
|
333
381
|
"tier": "core",
|
|
@@ -405,13 +453,117 @@ const capabilities = {
|
|
|
405
453
|
"stateIO": "filesystem",
|
|
406
454
|
"transport": "mcp",
|
|
407
455
|
"runtime": "node"
|
|
456
|
+
},
|
|
457
|
+
"hostBehaviors": {
|
|
458
|
+
"attributionSource": "settings-json-commit",
|
|
459
|
+
"authorsCanonicalWorkflow": true,
|
|
460
|
+
"localInstallStyle": "legacy-flat",
|
|
461
|
+
"permissionsSchema": "claude",
|
|
462
|
+
"settingsFileByScope": {
|
|
463
|
+
"local": "settings.local.json",
|
|
464
|
+
"global": "settings.json"
|
|
465
|
+
},
|
|
466
|
+
"sourceMarkerFile": ".gsd-source",
|
|
467
|
+
"agentFrontmatterExtensions": [
|
|
468
|
+
"effort"
|
|
469
|
+
],
|
|
470
|
+
"ownsClaudePaths": true,
|
|
471
|
+
"nativeModelAliases": true,
|
|
472
|
+
"skillsGlobalOnboarding": true
|
|
408
473
|
}
|
|
409
474
|
}
|
|
410
475
|
},
|
|
476
|
+
"claude-orchestration": {
|
|
477
|
+
"id": "claude-orchestration",
|
|
478
|
+
"role": "feature",
|
|
479
|
+
"version": "1.7.0-rc.5",
|
|
480
|
+
"title": "Claude orchestration (Workflow backend)",
|
|
481
|
+
"description": "Default-off, BETA, claude-only capability that adopts Claude Code's Workflow tool (the engine behind /effort ultracode) as an optional parallel-execution backend for the GSD loop. When the runtime exposes the Workflow tool and claude_orchestration.execution_backend resolves to 'workflow', execute-phase emits a generated Workflow script (waves -> parallel() barriers, plans -> agent({ agentType: 'gsd-executor', isolation: 'worktree' }), files_modified overlap -> separate sequential stages, resumeFromRunId wired to the phase run id, shared token budget) that composes the SAME gsd-executor agent and worktree isolation the inline path uses, restoring the wave parallelism the #853 backgrounded-agent nesting limitation forces inline on Claude Code. (The plan-checker and verifier remain inline until separately wired — this capability delivers the parallel-execution backend, not those gates.) Also folds the ultraplan plan-offload under one runtime gate (plan:* surface). On any runtime lacking the Workflow tool, or when the capability is disabled, behaviour is byte-identical to today (inline/manual dispatch). Detection + emission live in gsd-core/bin/lib/claude-orchestration.cjs (pure, fail-closed). Mirrors the existing gsd-ultraplan-phase BETA-isolation posture.",
|
|
482
|
+
"tier": "full",
|
|
483
|
+
"requires": [],
|
|
484
|
+
"engines": {
|
|
485
|
+
"gsd": ">=1.7.0"
|
|
486
|
+
},
|
|
487
|
+
"runtimeCompat": {
|
|
488
|
+
"supported": [
|
|
489
|
+
"claude"
|
|
490
|
+
],
|
|
491
|
+
"unsupported": []
|
|
492
|
+
},
|
|
493
|
+
"skills": [],
|
|
494
|
+
"agents": [],
|
|
495
|
+
"hooks": [],
|
|
496
|
+
"commands": [
|
|
497
|
+
{
|
|
498
|
+
"family": "claude-orchestration",
|
|
499
|
+
"module": "claude-orchestration-command-router.cjs",
|
|
500
|
+
"router": "routeClaudeOrchestrationCommand",
|
|
501
|
+
"subcommands": [
|
|
502
|
+
"detect-backend",
|
|
503
|
+
"emit-workflow"
|
|
504
|
+
]
|
|
505
|
+
}
|
|
506
|
+
],
|
|
507
|
+
"activationKey": "claude_orchestration.enabled",
|
|
508
|
+
"config": {
|
|
509
|
+
"claude_orchestration.enabled": {
|
|
510
|
+
"type": "boolean",
|
|
511
|
+
"default": false,
|
|
512
|
+
"description": "Master toggle for the Claude orchestration capability. Default-off + BETA: the Workflow-tool execution backend and the ultraplan plan-offload surface are inert unless this is true. When false, loop behaviour is byte-identical to a non-Claude runtime (inline/manual dispatch)."
|
|
513
|
+
},
|
|
514
|
+
"claude_orchestration.execution_backend": {
|
|
515
|
+
"type": "enum",
|
|
516
|
+
"values": [
|
|
517
|
+
"auto",
|
|
518
|
+
"workflow",
|
|
519
|
+
"inline"
|
|
520
|
+
],
|
|
521
|
+
"default": "auto",
|
|
522
|
+
"description": "Which execute-phase dispatch backend to use when the capability is enabled. 'auto' (default) activates the Workflow backend only when the runtime is Claude AND the Workflow tool is detected AND the Agent SDK meets claude_orchestration.min_agent_sdk_version; otherwise it falls back to inline. 'workflow' forces the Workflow backend when the tool is present AND the Agent SDK meets the floor (still fails closed to inline if the tool is absent or the SDK is too old — the floor applies in both modes). 'inline' forces today's manual one-agent-per-message dispatch regardless of tool availability."
|
|
523
|
+
},
|
|
524
|
+
"claude_orchestration.min_agent_sdk_version": {
|
|
525
|
+
"type": "string",
|
|
526
|
+
"default": "0.3.149",
|
|
527
|
+
"description": "Minimum Agent SDK version required to activate the Workflow backend under execution_backend='auto'. Defaults to 0.3.149 (the release that introduced the Workflow tool). Raise to pin a higher floor; the detection seam fails closed to inline for any runtime reporting an older or unknown version."
|
|
528
|
+
}
|
|
529
|
+
},
|
|
530
|
+
"steps": [],
|
|
531
|
+
"contributions": [
|
|
532
|
+
{
|
|
533
|
+
"point": "execute:wave:post",
|
|
534
|
+
"into": "executor",
|
|
535
|
+
"fragment": {
|
|
536
|
+
"path": "fragments/execute-wave-post.md",
|
|
537
|
+
"inline": "# Claude orchestration — Workflow execution backend (BETA)\n\n> Injected at `execute:wave:post` `into: executor` only when\n> `claude_orchestration.enabled` is true. Default-off; `onError: skip`.\n\n## When this contribution is active\n\nThe Claude orchestration capability is **default-off and BETA**. It activates only\nwhen ALL of the following hold:\n\n1. `claude_orchestration.enabled` is `true` in `.planning/config.json`, AND\n2. the active runtime is **Claude Code** (the Workflow tool is Claude / Agent\n SDK-specific), AND\n3. `claude_orchestration.execution_backend` resolves to `workflow` — either\n explicitly, or via `auto` — **and** the Agent SDK version is\n `>= claude_orchestration.min_agent_sdk_version` (default `0.3.149`). The SDK\n floor applies in both `auto` and `workflow` modes (fail-closed: a pre-release\n or older SDK never activates the preview backend).\n\nDetection is fail-closed: any miss degrades to **inline, manual, one-agent-per-\nmessage dispatch** — exactly today's behaviour. On a non-Claude runtime this\ncontribution is a no-op.\n\n## What the executor does when the Workflow backend is active\n\nInstead of the orchestrator fanning out one `Agent(subagent_type=gsd-executor,\nisolation=worktree, run_in_background=true)` per message (which on Claude Code\ncannot nest further subagents — #853 — and so degrades to sequential inline\nexecution), execute-phase **emits a generated Workflow script** and lets the main\nloop orchestrate it:\n\n- **waves → one or more sequential `parallel()` barriers** — each wave is a\n barrier group; when plans within a wave share `files_modified`, they are split\n into separate sequential stages within that wave's barrier (the next wave\n still waits for the previous wave to complete).\n- **plans → `agent(brief, { agentType: 'gsd-executor', isolation: 'worktree' })`**\n — the SAME executor agent and worktree isolation the inline path uses, so the\n produced `SUMMARY.md` and commits are identical.\n- **`files_modified` overlap → separate sequential stages** — two plans that\n touch the same file are placed in different stages within the wave (the same\n overlap rule execute-phase already applies inline).\n- **`resumeFromRunId`** — wired to the phase run id, so an interrupted phase\n resumes without re-running completed plans.\n- **`budget(tokens)`** — a shared token pool across the whole phase when the\n orchestrator passes a `budgetTokens` value to `emitWorkflowScript` (it is a\n function parameter, not a config key; the orchestrator decides the budget).\n\nThe emitter is a pure function exposed through the capability command surface:\n`gsd-tools claude-orchestration emit-workflow --waves <manifest.json> --run-id <id>\n[--phase-dir <dir>] [--budget <n>]` (or `require('gsd-core/bin/lib/claude-orchestration.cjs').emitWorkflowScript`\ndirectly). It maps the phase's wave/plan manifest to the Workflow script string\nand never invokes the Workflow tool itself; the orchestrator runs the emitted\nscript. Detection is resolved by the orchestrator calling the pure\n`detectWorkflowBackend` with the LIVE host descriptor (the CLI\n`gsd-tools claude-orchestration detect-backend` is a simulation harness that\nassumes a capable host unless `--no-nested-dispatch` is passed — it does not probe\nthe real runtime; the orchestrator supplies the real descriptor).\n\n## Fallback contract\n\nIf detection resolves to `inline` (tool absent, SDK too old, runtime not Claude,\nor the capability disabled), execute-phase MUST proceed with the standard inline\nwave dispatch. The executor MUST NOT assume parallelism, a shared budget, or\nresume-from-run-id semantics in that mode.\n"
|
|
538
|
+
},
|
|
539
|
+
"produces": [],
|
|
540
|
+
"consumes": [
|
|
541
|
+
"PLAN.md"
|
|
542
|
+
],
|
|
543
|
+
"when": "claude_orchestration.enabled",
|
|
544
|
+
"onError": "skip"
|
|
545
|
+
},
|
|
546
|
+
{
|
|
547
|
+
"point": "plan:post",
|
|
548
|
+
"into": "planner",
|
|
549
|
+
"fragment": {
|
|
550
|
+
"path": "fragments/plan-post.md",
|
|
551
|
+
"inline": "# Claude orchestration — ultraplan plan-offload ownership (BETA)\n\n> Injected at `plan:post` `into: planner` only when\n> `claude_orchestration.enabled` is true. Default-off; `onError: skip`.\n\n## Ownership declaration\n\nThe `gsd-ultraplan-phase` plan-offload surface (offloading GSD's plan phase to\nClaude Code's ultraplan cloud) is **owned by this capability**, not by a\nstandalone BETA skill. Both surfaces share one runtime gate\n(`claude_orchestration.enabled`), one BETA boundary, and one Claude-Code-only\ndetection seam.\n\n## When the planner should consider ultraplan offload\n\nWhen this contribution is active (capability enabled, Claude Code runtime), the\nplanner MAY offer the `/gsd-ultraplan-phase` path as an alternative to local\n`/gsd-plan-phase` for phases where cloud-assisted planning adds value. This is\nadvisory, not mandatory — the stable local planner remains the default.\n\n## Fallback contract\n\nIf the capability is disabled, or the runtime is not Claude Code, ultraplan\noffload is **not surfaced** and the planner proceeds with the standard local\n`/gsd-plan-phase`. The `gsd-ultraplan-phase` command itself remains installed\n(its own runtime gate already no-ops on non-Claude runtimes); this contribution\nonly governs whether the capability manifest advertises it as part of the\norchestration surface.\n"
|
|
552
|
+
},
|
|
553
|
+
"produces": [],
|
|
554
|
+
"consumes": [
|
|
555
|
+
"CONTEXT.md"
|
|
556
|
+
],
|
|
557
|
+
"when": "claude_orchestration.enabled",
|
|
558
|
+
"onError": "skip"
|
|
559
|
+
}
|
|
560
|
+
],
|
|
561
|
+
"gates": []
|
|
562
|
+
},
|
|
411
563
|
"cline": {
|
|
412
564
|
"id": "cline",
|
|
413
565
|
"role": "runtime",
|
|
414
|
-
"version": "1.7.0-rc.
|
|
566
|
+
"version": "1.7.0-rc.5",
|
|
415
567
|
"title": "Cline",
|
|
416
568
|
"description": "Cline (VS Code extension) — global-only nested-skill layout; cline-rules hook surface (.clinerules); no hook events emitted; tier-2 support.",
|
|
417
569
|
"tier": "core",
|
|
@@ -466,13 +618,21 @@ const capabilities = {
|
|
|
466
618
|
"stateIO": "filesystem",
|
|
467
619
|
"transport": "mcp",
|
|
468
620
|
"runtime": "node"
|
|
621
|
+
},
|
|
622
|
+
"hostBehaviors": {
|
|
623
|
+
"reapplyCommand": "/gsd-update --reapply",
|
|
624
|
+
"frontmatterDialect": "cline",
|
|
625
|
+
"skipSharedHooksInstall": true,
|
|
626
|
+
"localTargetIsProjectRoot": true,
|
|
627
|
+
"clineRulesSurface": true,
|
|
628
|
+
"localCommandsViaRules": true
|
|
469
629
|
}
|
|
470
630
|
}
|
|
471
631
|
},
|
|
472
632
|
"code-review": {
|
|
473
633
|
"id": "code-review",
|
|
474
634
|
"role": "feature",
|
|
475
|
-
"version": "1.7.0-rc.
|
|
635
|
+
"version": "1.7.0-rc.5",
|
|
476
636
|
"title": "Code review",
|
|
477
637
|
"description": "Source-file code review and review-fix workflow support for completed execution work.",
|
|
478
638
|
"tier": "full",
|
|
@@ -533,7 +693,7 @@ const capabilities = {
|
|
|
533
693
|
"codebuddy": {
|
|
534
694
|
"id": "codebuddy",
|
|
535
695
|
"role": "runtime",
|
|
536
|
-
"version": "1.7.0-rc.
|
|
696
|
+
"version": "1.7.0-rc.5",
|
|
537
697
|
"title": "CodeBuddy",
|
|
538
698
|
"description": "CodeBuddy (Tencent) — converted commands + skills artifact layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
|
|
539
699
|
"tier": "core",
|
|
@@ -636,7 +796,7 @@ const capabilities = {
|
|
|
636
796
|
"codex": {
|
|
637
797
|
"id": "codex",
|
|
638
798
|
"role": "runtime",
|
|
639
|
-
"version": "1.7.0-rc.
|
|
799
|
+
"version": "1.7.0-rc.5",
|
|
640
800
|
"title": "OpenAI Codex CLI",
|
|
641
801
|
"description": "OpenAI Codex CLI — shell-var command style; per-agent sandbox tiers; config.toml + hooks.json hook surface; tier-1 support.",
|
|
642
802
|
"tier": "core",
|
|
@@ -662,7 +822,8 @@ const capabilities = {
|
|
|
662
822
|
"prefix": "gsd-",
|
|
663
823
|
"nesting": "flat",
|
|
664
824
|
"recursive": false,
|
|
665
|
-
"converter": "convertClaudeCommandToCodexSkill"
|
|
825
|
+
"converter": "convertClaudeCommandToCodexSkill",
|
|
826
|
+
"home": ".agents"
|
|
666
827
|
}
|
|
667
828
|
],
|
|
668
829
|
"local": [
|
|
@@ -672,7 +833,8 @@ const capabilities = {
|
|
|
672
833
|
"prefix": "gsd-",
|
|
673
834
|
"nesting": "flat",
|
|
674
835
|
"recursive": false,
|
|
675
|
-
"converter": "convertClaudeCommandToCodexSkill"
|
|
836
|
+
"converter": "convertClaudeCommandToCodexSkill",
|
|
837
|
+
"home": ".agents"
|
|
676
838
|
}
|
|
677
839
|
]
|
|
678
840
|
},
|
|
@@ -684,7 +846,11 @@ const capabilities = {
|
|
|
684
846
|
"installSurface": "codex-toml",
|
|
685
847
|
"writesSharedSettings": false,
|
|
686
848
|
"permissionWriter": null,
|
|
687
|
-
"extendedHookEvents": [
|
|
849
|
+
"extendedHookEvents": [
|
|
850
|
+
"SubagentStop",
|
|
851
|
+
"Stop",
|
|
852
|
+
"PreCompact"
|
|
853
|
+
],
|
|
688
854
|
"hostIntegration": {
|
|
689
855
|
"embeddingMode": "declarative",
|
|
690
856
|
"commandSurface": "slash-file",
|
|
@@ -701,13 +867,20 @@ const capabilities = {
|
|
|
701
867
|
"stateIO": "filesystem",
|
|
702
868
|
"transport": "mcp",
|
|
703
869
|
"runtime": "node"
|
|
870
|
+
},
|
|
871
|
+
"hostBehaviors": {
|
|
872
|
+
"reapplyCommand": "$gsd-update --reapply",
|
|
873
|
+
"tomlConfigInstall": true,
|
|
874
|
+
"cleanupSkillSidecars": true,
|
|
875
|
+
"agentTomlFiles": true,
|
|
876
|
+
"frontmatterDialect": "codex"
|
|
704
877
|
}
|
|
705
878
|
}
|
|
706
879
|
},
|
|
707
880
|
"copilot": {
|
|
708
881
|
"id": "copilot",
|
|
709
882
|
"role": "runtime",
|
|
710
|
-
"version": "1.7.0-rc.
|
|
883
|
+
"version": "1.7.0-rc.5",
|
|
711
884
|
"title": "GitHub Copilot",
|
|
712
885
|
"description": "GitHub Copilot (VS Code) — markdown config format; copilot-inline hook surface; no hook events emitted; flat skill nesting (unconfirmed recursive loader); tier-2 support.",
|
|
713
886
|
"tier": "core",
|
|
@@ -735,6 +908,14 @@ const capabilities = {
|
|
|
735
908
|
"nesting": "flat",
|
|
736
909
|
"recursive": false,
|
|
737
910
|
"converter": "convertClaudeCommandToCopilotSkill"
|
|
911
|
+
},
|
|
912
|
+
{
|
|
913
|
+
"kind": "agents",
|
|
914
|
+
"destSubpath": "agents",
|
|
915
|
+
"prefix": "gsd-",
|
|
916
|
+
"nesting": "flat",
|
|
917
|
+
"recursive": false,
|
|
918
|
+
"converter": "convertClaudeAgentToCopilotAgent"
|
|
738
919
|
}
|
|
739
920
|
],
|
|
740
921
|
"local": [
|
|
@@ -745,6 +926,14 @@ const capabilities = {
|
|
|
745
926
|
"nesting": "flat",
|
|
746
927
|
"recursive": false,
|
|
747
928
|
"converter": "convertClaudeCommandToCopilotSkill"
|
|
929
|
+
},
|
|
930
|
+
{
|
|
931
|
+
"kind": "agents",
|
|
932
|
+
"destSubpath": "agents",
|
|
933
|
+
"prefix": "gsd-",
|
|
934
|
+
"nesting": "flat",
|
|
935
|
+
"recursive": false,
|
|
936
|
+
"converter": "convertClaudeAgentToCopilotAgent"
|
|
748
937
|
}
|
|
749
938
|
]
|
|
750
939
|
},
|
|
@@ -772,13 +961,16 @@ const capabilities = {
|
|
|
772
961
|
"stateIO": "filesystem",
|
|
773
962
|
"transport": "mcp",
|
|
774
963
|
"runtime": "undocumented"
|
|
964
|
+
},
|
|
965
|
+
"hostBehaviors": {
|
|
966
|
+
"reapplyCommand": "/gsd-update --reapply"
|
|
775
967
|
}
|
|
776
968
|
}
|
|
777
969
|
},
|
|
778
970
|
"cursor": {
|
|
779
971
|
"id": "cursor",
|
|
780
972
|
"role": "runtime",
|
|
781
|
-
"version": "1.7.0-rc.
|
|
973
|
+
"version": "1.7.0-rc.5",
|
|
782
974
|
"title": "Cursor",
|
|
783
975
|
"description": "Cursor IDE — skills + converted commands artifact layout; hooks.json surface; Claude hook event dialect; recursive skill loader (flat nesting); tier-2 support.",
|
|
784
976
|
"tier": "core",
|
|
@@ -875,13 +1067,30 @@ const capabilities = {
|
|
|
875
1067
|
"stateIO": "filesystem",
|
|
876
1068
|
"transport": "mcp",
|
|
877
1069
|
"runtime": "node"
|
|
1070
|
+
},
|
|
1071
|
+
"hostBehaviors": {
|
|
1072
|
+
"reapplyCommand": "gsd-update --reapply (mention the skill name)",
|
|
1073
|
+
"frontmatterDialect": "cursor",
|
|
1074
|
+
"hooksJsonSurface": true,
|
|
1075
|
+
"skipSharedHooksInstall": true,
|
|
1076
|
+
"reportCommandsDir": true,
|
|
1077
|
+
"skipUpdateBannerCommand": true,
|
|
1078
|
+
"skipSettingsUi": true,
|
|
1079
|
+
"managedHookEvents": [
|
|
1080
|
+
"sessionStart",
|
|
1081
|
+
"postToolUse",
|
|
1082
|
+
"preToolUse",
|
|
1083
|
+
"stop",
|
|
1084
|
+
"subagentStart",
|
|
1085
|
+
"subagentStop"
|
|
1086
|
+
]
|
|
878
1087
|
}
|
|
879
1088
|
}
|
|
880
1089
|
},
|
|
881
1090
|
"drift": {
|
|
882
1091
|
"id": "drift",
|
|
883
1092
|
"role": "feature",
|
|
884
|
-
"version": "1.7.0-rc.
|
|
1093
|
+
"version": "1.7.0-rc.5",
|
|
885
1094
|
"title": "Drift detection gates",
|
|
886
1095
|
"description": "Drift detection gates for the planning loop. At execute:wave:post: a blocking schema drift gate (detects schema files changed without a database push) and a non-blocking codebase drift gate (detects structural additions not reflected in STRUCTURE.md). At plan:pre: a non-blocking, warn-only codebase drift gate (gated on workflow.plan_drift_precheck) that flags a stale codebase map before planning, so plans are authored against a fresh STRUCTURE.md instead of discovering drift mid-execution.",
|
|
887
1096
|
"tier": "full",
|
|
@@ -959,7 +1168,7 @@ const capabilities = {
|
|
|
959
1168
|
"external-job": {
|
|
960
1169
|
"id": "external-job",
|
|
961
1170
|
"role": "feature",
|
|
962
|
-
"version": "1.7.0-rc.
|
|
1171
|
+
"version": "1.7.0-rc.5",
|
|
963
1172
|
"title": "Async external-job scheduler adapter",
|
|
964
1173
|
"description": "Default-off producer of the async external-job manifest (#1164). At execute:wave:post an executor can externalize long-running compute (SLURM first, scheduler-pluggable), commit a .planning/async-jobs/<job>.json manifest, defer SUMMARY.md, and return external_job_waiting. The core loop (#1165) consumes the manifest; this capability is the only thing that writes it. NOTE on contribution point: #1164 specifies execute:wave:pre, but execute-phase.md only dispatches execute:wave:post today (wave:pre is declared in the loop host contract but not rendered); wiring wave:pre dispatch is a core-loop change #1164 explicitly puts out of scope, so this capability registers at wave:post and the executor honors the runtime_budget classification guidance before running any tagged task. The adapter (scripts/slurm-adapter.cjs) reads external_job.submit_timeout_ms / poll_timeout_ms / artifact_dir through the canonical capability-config seam (env override > config > registry default).",
|
|
965
1174
|
"tier": "full",
|
|
@@ -1042,7 +1251,7 @@ const capabilities = {
|
|
|
1042
1251
|
"gap-analysis": {
|
|
1043
1252
|
"id": "gap-analysis",
|
|
1044
1253
|
"role": "feature",
|
|
1045
|
-
"version": "1.7.0-rc.
|
|
1254
|
+
"version": "1.7.0-rc.5",
|
|
1046
1255
|
"title": "Post-planning gap analysis",
|
|
1047
1256
|
"description": "Proactive, non-blocking post-planning coverage report. After all PLAN.md files are generated, cross-references every REQ-ID and D-ID from REQUIREMENTS.md and CONTEXT.md against plan bodies. Emits a Source | Item | Status table. Does not block phase advancement.",
|
|
1048
1257
|
"tier": "standard",
|
|
@@ -1083,7 +1292,7 @@ const capabilities = {
|
|
|
1083
1292
|
"graphify": {
|
|
1084
1293
|
"id": "graphify",
|
|
1085
1294
|
"role": "feature",
|
|
1086
|
-
"version": "1.7.0-rc.
|
|
1295
|
+
"version": "1.7.0-rc.5",
|
|
1087
1296
|
"title": "Knowledge graph",
|
|
1088
1297
|
"description": "Build, query, and inspect the project knowledge graph in `.planning/graphs/`; exposes graphify CLI subcommands (build, query, status, diff) and the /gsd-graphify skill.",
|
|
1089
1298
|
"tier": "full",
|
|
@@ -1124,7 +1333,7 @@ const capabilities = {
|
|
|
1124
1333
|
"hermes": {
|
|
1125
1334
|
"id": "hermes",
|
|
1126
1335
|
"role": "runtime",
|
|
1127
|
-
"version": "1.7.0-rc.
|
|
1336
|
+
"version": "1.7.0-rc.5",
|
|
1128
1337
|
"title": "Hermes Agent",
|
|
1129
1338
|
"description": "Hermes Agent (NousResearch) — skills nest under skills/gsd/ category bucket; nested skill layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
|
|
1130
1339
|
"tier": "core",
|
|
@@ -1173,6 +1382,21 @@ const capabilities = {
|
|
|
1173
1382
|
"writesSharedSettings": true,
|
|
1174
1383
|
"permissionWriter": null,
|
|
1175
1384
|
"extendedHookEvents": [],
|
|
1385
|
+
"extensionEvents": "hermes",
|
|
1386
|
+
"hostBehaviors": {
|
|
1387
|
+
"skillFrontmatterVersion": true,
|
|
1388
|
+
"skillsManifestPrefix": "skills/gsd/",
|
|
1389
|
+
"trackCategoryDescription": true,
|
|
1390
|
+
"writeCategoryDescription": true,
|
|
1391
|
+
"reportSkillsCount": true,
|
|
1392
|
+
"legacyCommandsGsdCleanup": true,
|
|
1393
|
+
"brandingRewrites": {
|
|
1394
|
+
"CLAUDE.md": "HERMES.md",
|
|
1395
|
+
"Claude Code": "Hermes Agent",
|
|
1396
|
+
".claude/": ".hermes/"
|
|
1397
|
+
},
|
|
1398
|
+
"reapplyCommand": "gsd-update --reapply (mention the skill name)"
|
|
1399
|
+
},
|
|
1176
1400
|
"hostIntegration": {
|
|
1177
1401
|
"embeddingMode": "imperative",
|
|
1178
1402
|
"commandSurface": "slash-programmatic",
|
|
@@ -1195,7 +1419,7 @@ const capabilities = {
|
|
|
1195
1419
|
"intel": {
|
|
1196
1420
|
"id": "intel",
|
|
1197
1421
|
"role": "feature",
|
|
1198
|
-
"version": "1.7.0-rc.
|
|
1422
|
+
"version": "1.7.0-rc.5",
|
|
1199
1423
|
"title": "Codebase intelligence",
|
|
1200
1424
|
"description": "Code-intelligence store for codebase querying, diff, snapshot, and API-surface extraction; exposes `gsd-tools intel` subcommands (query, status, update, diff, snapshot, patch-meta, validate, extract-exports, api-surface) and backs `/gsd-map-codebase` and `gsd-intel-updater`.",
|
|
1201
1425
|
"tier": "full",
|
|
@@ -1247,7 +1471,7 @@ const capabilities = {
|
|
|
1247
1471
|
"kilo": {
|
|
1248
1472
|
"id": "kilo",
|
|
1249
1473
|
"role": "runtime",
|
|
1250
|
-
"version": "1.7.0-rc.
|
|
1474
|
+
"version": "1.7.0-rc.5",
|
|
1251
1475
|
"title": "Kilo Code",
|
|
1252
1476
|
"description": "Kilo Code — XDG-based config dir; global skills at ~/.kilo/skills (separate from XDG config); flat command/ + skills artifact layout; no lifecycle hook registration; tier-2 support.",
|
|
1253
1477
|
"tier": "core",
|
|
@@ -1334,13 +1558,21 @@ const capabilities = {
|
|
|
1334
1558
|
"stateIO": "filesystem",
|
|
1335
1559
|
"transport": "mcp",
|
|
1336
1560
|
"runtime": "bun"
|
|
1561
|
+
},
|
|
1562
|
+
"hostBehaviors": {
|
|
1563
|
+
"reapplyCommand": "/gsd-update --reapply",
|
|
1564
|
+
"attributionConfigResolver": "kilo",
|
|
1565
|
+
"flatCommandDir": "command",
|
|
1566
|
+
"combinedFamilyInstall": true,
|
|
1567
|
+
"frontmatterDialect": "kilo",
|
|
1568
|
+
"skipUpdateBannerCommand": true
|
|
1337
1569
|
}
|
|
1338
1570
|
}
|
|
1339
1571
|
},
|
|
1340
1572
|
"kimi": {
|
|
1341
1573
|
"id": "kimi",
|
|
1342
1574
|
"role": "runtime",
|
|
1343
|
-
"version": "1.7.0-rc.
|
|
1575
|
+
"version": "1.7.0-rc.5",
|
|
1344
1576
|
"title": "Kimi CLI",
|
|
1345
1577
|
"description": "Kimi CLI (Moonshot AI) — generic agents root at ~/.config/agents; skills + kimi-agents artifact layout; no hook surface; no hook events; tier-2 support.",
|
|
1346
1578
|
"tier": "core",
|
|
@@ -1414,7 +1646,7 @@ const capabilities = {
|
|
|
1414
1646
|
"mempalace": {
|
|
1415
1647
|
"id": "mempalace",
|
|
1416
1648
|
"role": "feature",
|
|
1417
|
-
"version": "1.7.0-rc.
|
|
1649
|
+
"version": "1.7.0-rc.5",
|
|
1418
1650
|
"title": "MemPalace memory",
|
|
1419
1651
|
"description": "Cross-session, cross-project memory: deliberate recall before discuss/plan and verbatim capture + temporal-KG sync at phase boundaries, via the MemPalace MCP server and CLI.",
|
|
1420
1652
|
"tier": "full",
|
|
@@ -1588,7 +1820,7 @@ const capabilities = {
|
|
|
1588
1820
|
"nyquist": {
|
|
1589
1821
|
"id": "nyquist",
|
|
1590
1822
|
"role": "feature",
|
|
1591
|
-
"version": "1.7.0-rc.
|
|
1823
|
+
"version": "1.7.0-rc.5",
|
|
1592
1824
|
"title": "Nyquist validation",
|
|
1593
1825
|
"description": "Validation coverage audit that maps executed work back to tests and manual-only evidence.",
|
|
1594
1826
|
"tier": "full",
|
|
@@ -1638,7 +1870,7 @@ const capabilities = {
|
|
|
1638
1870
|
"opencode": {
|
|
1639
1871
|
"id": "opencode",
|
|
1640
1872
|
"role": "runtime",
|
|
1641
|
-
"version": "1.7.0-rc.
|
|
1873
|
+
"version": "1.7.0-rc.5",
|
|
1642
1874
|
"title": "OpenCode",
|
|
1643
1875
|
"description": "OpenCode — XDG-based config dir; flat command/ + skills artifact layout; settings-json config format; no lifecycle hook registration; tier-2 support.",
|
|
1644
1876
|
"tier": "core",
|
|
@@ -1712,22 +1944,38 @@ const capabilities = {
|
|
|
1712
1944
|
"namedDispatch": true,
|
|
1713
1945
|
"nested": "undocumented",
|
|
1714
1946
|
"maxDepth": "undocumented",
|
|
1715
|
-
"background":
|
|
1947
|
+
"background": true,
|
|
1716
1948
|
"subagentToolkit": "full",
|
|
1717
|
-
"backgroundDispatch":
|
|
1949
|
+
"backgroundDispatch": true
|
|
1718
1950
|
},
|
|
1719
1951
|
"modelMode": "active",
|
|
1720
1952
|
"hookBus": "host",
|
|
1721
1953
|
"stateIO": "filesystem",
|
|
1722
1954
|
"transport": "mcp",
|
|
1723
1955
|
"runtime": "bun"
|
|
1956
|
+
},
|
|
1957
|
+
"hostBehaviors": {
|
|
1958
|
+
"reapplyCommand": "/gsd-update --reapply",
|
|
1959
|
+
"attributionConfigResolver": "opencode",
|
|
1960
|
+
"flatCommandDir": "command",
|
|
1961
|
+
"combinedFamilyInstall": true,
|
|
1962
|
+
"frontmatterDialect": "opencode",
|
|
1963
|
+
"nativePlugin": {
|
|
1964
|
+
"dir": "plugins",
|
|
1965
|
+
"file": "gsd-core.js",
|
|
1966
|
+
"source": ".opencode/plugins/gsd-core.js"
|
|
1967
|
+
},
|
|
1968
|
+
"skipHomePrefixSubstitution": true,
|
|
1969
|
+
"skipSettingsUi": true,
|
|
1970
|
+
"skipUpdateBannerCommand": true,
|
|
1971
|
+
"skipCodexSkillsManifest": true
|
|
1724
1972
|
}
|
|
1725
1973
|
}
|
|
1726
1974
|
},
|
|
1727
1975
|
"pattern-mapper": {
|
|
1728
1976
|
"id": "pattern-mapper",
|
|
1729
1977
|
"role": "feature",
|
|
1730
|
-
"version": "1.7.0-rc.
|
|
1978
|
+
"version": "1.7.0-rc.5",
|
|
1731
1979
|
"title": "Pattern mapping",
|
|
1732
1980
|
"description": "Optional codebase-pattern mapping before planning; owns the pattern mapper agent and workflow.pattern_mapper activation key.",
|
|
1733
1981
|
"tier": "full",
|
|
@@ -1781,7 +2029,7 @@ const capabilities = {
|
|
|
1781
2029
|
"profile-pipeline": {
|
|
1782
2030
|
"id": "profile-pipeline",
|
|
1783
2031
|
"role": "feature",
|
|
1784
|
-
"version": "1.7.0-rc.
|
|
2032
|
+
"version": "1.7.0-rc.5",
|
|
1785
2033
|
"title": "Developer profiling pipeline",
|
|
1786
2034
|
"description": "Developer behavioral profiling from Claude Code session history; scans session JSONL files, extracts and samples user messages, and generates profile artifacts (USER-PROFILE.md, dev-preferences.md, CLAUDE.md sections). Exposes eight `gsd-tools` commands: scan-sessions, extract-messages, profile-sample (pipeline phase) and write-profile, profile-questionnaire, generate-dev-preferences, generate-claude-profile, generate-claude-md (output phase). Backs the /gsd-profile-user skill and gsd-user-profiler agent.",
|
|
1787
2035
|
"tier": "full",
|
|
@@ -1858,7 +2106,7 @@ const capabilities = {
|
|
|
1858
2106
|
"qwen": {
|
|
1859
2107
|
"id": "qwen",
|
|
1860
2108
|
"role": "runtime",
|
|
1861
|
-
"version": "1.7.0-rc.
|
|
2109
|
+
"version": "1.7.0-rc.5",
|
|
1862
2110
|
"title": "Qwen Code",
|
|
1863
2111
|
"description": "Qwen Code (Alibaba) — nested-skill artifact layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
|
|
1864
2112
|
"tier": "core",
|
|
@@ -1933,7 +2181,7 @@ const capabilities = {
|
|
|
1933
2181
|
"research": {
|
|
1934
2182
|
"id": "research",
|
|
1935
2183
|
"role": "feature",
|
|
1936
|
-
"version": "1.7.0-rc.
|
|
2184
|
+
"version": "1.7.0-rc.5",
|
|
1937
2185
|
"title": "Phase research",
|
|
1938
2186
|
"description": "Optional phase research before planning; owns the phase researcher agent and workflow.research activation key.",
|
|
1939
2187
|
"tier": "standard",
|
|
@@ -1985,7 +2233,7 @@ const capabilities = {
|
|
|
1985
2233
|
"schema-gate": {
|
|
1986
2234
|
"id": "schema-gate",
|
|
1987
2235
|
"role": "feature",
|
|
1988
|
-
"version": "1.7.0-rc.
|
|
2236
|
+
"version": "1.7.0-rc.5",
|
|
1989
2237
|
"title": "Schema push detection gate",
|
|
1990
2238
|
"description": "Detects ORM schema-relevant files in the phase scope during planning and injects a mandatory [BLOCKING] schema push task into the plan. Prevents false-positive verification where build/types pass because TypeScript types come from config, not the live database.",
|
|
1991
2239
|
"tier": "full",
|
|
@@ -2031,7 +2279,7 @@ const capabilities = {
|
|
|
2031
2279
|
"security": {
|
|
2032
2280
|
"id": "security",
|
|
2033
2281
|
"role": "feature",
|
|
2034
|
-
"version": "1.7.0-rc.
|
|
2282
|
+
"version": "1.7.0-rc.5",
|
|
2035
2283
|
"title": "Security enforcement",
|
|
2036
2284
|
"description": "Threat mitigation verification and ship-time security blocking for phases with security enforcement enabled.",
|
|
2037
2285
|
"tier": "full",
|
|
@@ -2130,7 +2378,7 @@ const capabilities = {
|
|
|
2130
2378
|
"tdd": {
|
|
2131
2379
|
"id": "tdd",
|
|
2132
2380
|
"role": "feature",
|
|
2133
|
-
"version": "1.7.0-rc.
|
|
2381
|
+
"version": "1.7.0-rc.5",
|
|
2134
2382
|
"title": "Test-driven development",
|
|
2135
2383
|
"description": "Injects TDD heuristics into the planner and enforces RED/GREEN gate compliance on type:tdd plans after execution. Owns workflow.tdd_mode; the --tdd CLI flag is the ephemeral override.",
|
|
2136
2384
|
"tier": "full",
|
|
@@ -2183,7 +2431,7 @@ const capabilities = {
|
|
|
2183
2431
|
"trae": {
|
|
2184
2432
|
"id": "trae",
|
|
2185
2433
|
"role": "runtime",
|
|
2186
|
-
"version": "1.7.0-rc.
|
|
2434
|
+
"version": "1.7.0-rc.5",
|
|
2187
2435
|
"title": "Trae IDE",
|
|
2188
2436
|
"description": "Trae IDE — nested-skill artifact layout; no hook surface (profile-marker-only config); tier-2 support.",
|
|
2189
2437
|
"tier": "core",
|
|
@@ -2269,7 +2517,7 @@ const capabilities = {
|
|
|
2269
2517
|
"ui": {
|
|
2270
2518
|
"id": "ui",
|
|
2271
2519
|
"role": "feature",
|
|
2272
|
-
"version": "1.7.0-rc.
|
|
2520
|
+
"version": "1.7.0-rc.5",
|
|
2273
2521
|
"title": "UI design contracts",
|
|
2274
2522
|
"description": "UI-SPEC design contract + retrospective UI audit for frontend phases.",
|
|
2275
2523
|
"tier": "full",
|
|
@@ -2364,7 +2612,7 @@ const capabilities = {
|
|
|
2364
2612
|
"windsurf": {
|
|
2365
2613
|
"id": "windsurf",
|
|
2366
2614
|
"role": "runtime",
|
|
2367
|
-
"version": "1.7.0-rc.
|
|
2615
|
+
"version": "1.7.0-rc.5",
|
|
2368
2616
|
"title": "Windsurf",
|
|
2369
2617
|
"description": "Windsurf (Codeium) — workspace workflow artifact layout for slash commands; no hook surface; no hook events; tier-2 support.",
|
|
2370
2618
|
"tier": "core",
|
|
@@ -2439,6 +2687,108 @@ const capabilities = {
|
|
|
2439
2687
|
"runtime": "undocumented"
|
|
2440
2688
|
}
|
|
2441
2689
|
}
|
|
2690
|
+
},
|
|
2691
|
+
"zcode": {
|
|
2692
|
+
"id": "zcode",
|
|
2693
|
+
"role": "runtime",
|
|
2694
|
+
"version": "1.7.0-rc.5",
|
|
2695
|
+
"title": "ZCode",
|
|
2696
|
+
"description": "ZCode (Z.ai) — desktop Agentic Development Environment for GLM-5.2; Claude-shaped nested skills at ~/.zcode/skills/<name>/SKILL.md, slash commands, named subagents, native MCP; declarative plugin surface; profile-marker install; tier-2 community support.",
|
|
2697
|
+
"tier": "core",
|
|
2698
|
+
"requires": [],
|
|
2699
|
+
"engines": {
|
|
2700
|
+
"gsd": ">=1.6.0"
|
|
2701
|
+
},
|
|
2702
|
+
"runtime": {
|
|
2703
|
+
"configHome": {
|
|
2704
|
+
"kind": "dot-home",
|
|
2705
|
+
"name": ".zcode",
|
|
2706
|
+
"env": [
|
|
2707
|
+
"ZCODE_CONFIG_DIR"
|
|
2708
|
+
]
|
|
2709
|
+
},
|
|
2710
|
+
"localConfigDir": ".zcode",
|
|
2711
|
+
"configFormat": "none",
|
|
2712
|
+
"artifactLayout": {
|
|
2713
|
+
"global": [
|
|
2714
|
+
{
|
|
2715
|
+
"kind": "skills",
|
|
2716
|
+
"destSubpath": "skills",
|
|
2717
|
+
"prefix": "gsd-",
|
|
2718
|
+
"nesting": "nested",
|
|
2719
|
+
"recursive": false,
|
|
2720
|
+
"converter": "convertClaudeCommandToClaudeSkill"
|
|
2721
|
+
},
|
|
2722
|
+
{
|
|
2723
|
+
"kind": "commands",
|
|
2724
|
+
"destSubpath": "commands",
|
|
2725
|
+
"prefix": "gsd-",
|
|
2726
|
+
"nesting": "flat",
|
|
2727
|
+
"recursive": false,
|
|
2728
|
+
"converter": null
|
|
2729
|
+
},
|
|
2730
|
+
{
|
|
2731
|
+
"kind": "agents",
|
|
2732
|
+
"destSubpath": "agents",
|
|
2733
|
+
"prefix": "gsd-",
|
|
2734
|
+
"nesting": "flat",
|
|
2735
|
+
"recursive": false,
|
|
2736
|
+
"converter": null
|
|
2737
|
+
}
|
|
2738
|
+
],
|
|
2739
|
+
"local": [
|
|
2740
|
+
{
|
|
2741
|
+
"kind": "skills",
|
|
2742
|
+
"destSubpath": "skills",
|
|
2743
|
+
"prefix": "gsd-",
|
|
2744
|
+
"nesting": "nested",
|
|
2745
|
+
"recursive": false,
|
|
2746
|
+
"converter": "convertClaudeCommandToClaudeSkill"
|
|
2747
|
+
},
|
|
2748
|
+
{
|
|
2749
|
+
"kind": "commands",
|
|
2750
|
+
"destSubpath": "commands",
|
|
2751
|
+
"prefix": "gsd-",
|
|
2752
|
+
"nesting": "flat",
|
|
2753
|
+
"recursive": false,
|
|
2754
|
+
"converter": null
|
|
2755
|
+
},
|
|
2756
|
+
{
|
|
2757
|
+
"kind": "agents",
|
|
2758
|
+
"destSubpath": "agents",
|
|
2759
|
+
"prefix": "gsd-",
|
|
2760
|
+
"nesting": "flat",
|
|
2761
|
+
"recursive": false,
|
|
2762
|
+
"converter": null
|
|
2763
|
+
}
|
|
2764
|
+
]
|
|
2765
|
+
},
|
|
2766
|
+
"commandStyle": "slash-hyphen",
|
|
2767
|
+
"hooksSurface": "none",
|
|
2768
|
+
"sandboxTier": "none",
|
|
2769
|
+
"supportTier": 2,
|
|
2770
|
+
"installSurface": "profile-marker-only",
|
|
2771
|
+
"writesSharedSettings": false,
|
|
2772
|
+
"permissionWriter": null,
|
|
2773
|
+
"extendedHookEvents": [],
|
|
2774
|
+
"hostIntegration": {
|
|
2775
|
+
"embeddingMode": "declarative",
|
|
2776
|
+
"commandSurface": "slash-file",
|
|
2777
|
+
"dispatch": {
|
|
2778
|
+
"namedDispatch": true,
|
|
2779
|
+
"nested": "undocumented",
|
|
2780
|
+
"maxDepth": "undocumented",
|
|
2781
|
+
"background": false,
|
|
2782
|
+
"subagentToolkit": "full",
|
|
2783
|
+
"backgroundDispatch": false
|
|
2784
|
+
},
|
|
2785
|
+
"modelMode": "passive",
|
|
2786
|
+
"hookBus": "host",
|
|
2787
|
+
"stateIO": "filesystem",
|
|
2788
|
+
"transport": "mcp",
|
|
2789
|
+
"runtime": "electron"
|
|
2790
|
+
}
|
|
2791
|
+
}
|
|
2442
2792
|
}
|
|
2443
2793
|
};
|
|
2444
2794
|
|
|
@@ -2611,6 +2961,23 @@ const byLoopPoint = {
|
|
|
2611
2961
|
}
|
|
2612
2962
|
],
|
|
2613
2963
|
"contributions": [
|
|
2964
|
+
{
|
|
2965
|
+
"capId": "ai-integration",
|
|
2966
|
+
"point": "plan:pre",
|
|
2967
|
+
"into": "planner",
|
|
2968
|
+
"fragment": {
|
|
2969
|
+
"path": "fragments/api-coverage-plan-pre.md",
|
|
2970
|
+
"inline": "# API Coverage Decision Checkpoint\n\n> Full API Coverage by Default — Opt Out, Never Opt In. Fires when a phase\n> integrates an external API / SDK / service. Most non-API phases will not fire\n> it — that is the point.\n\n## Why this exists\n\n\"We integrated the API\" too often silently means \"we integrated whatever the\nfirst use case exercised.\" Every un-built capability is then an invisible hole,\ndiscovered later by a user who reasonably expected it to work. The phase sealed\ngreen because its tasks completed; nobody decided the gaps were acceptable,\nbecause nobody enumerated them. This checkpoint makes the surface **visible and\ndecided** before the phase can seal.\n\n## Detect whether this phase integrates an external API\n\nThe detector is a deterministic scan over the phase scope. It strips fenced\ncode blocks first, so a trigger term inside a code snippet does not fire. It\nreturns a typed result: `{ detected, signals[], terms }`. Run it on the phase\nscope (the concatenation of this phase's ROADMAP section + the PLAN body):\n\n```bash\nSCOPE=\"$(cat \"${PHASE_DIR}\"/*-PLAN.md 2>/dev/null) $(gsd_run query roadmap.get-phase \"${PHASE}\" 2>/dev/null || true)\"\nAPI_COVERAGE_JSON=$(printf '%s' \"$SCOPE\" | node gsd-core/bin/lib/api-coverage.cjs --json 2>/dev/null || echo '{\"detected\":false,\"signals\":[]}')\n```\n\nRead `API_COVERAGE_JSON.detected`. Act on it only — do **not** pattern-match the\nprose yourself.\n\n**If `detected` is `false`:** this phase does not integrate an external API. Skip\nthe checkpoint entirely and continue planning. Do not raise it with the user.\n\n**If `detected` is `true`:** an external-API integration is in scope. You MUST\nproduce a **coverage matrix** before the plan is finalized.\n\n## Produce the coverage matrix\n\nEnumerate the external API's full **capability surface** — the verb/endpoint/method\nlist (e.g. for a music service: `search`, `play`, `pause`, `skip`, `set_volume`,\n`get_playlist`, `create_playlist`, `add_to_playlist`, …). For each capability\nrecord a decision, starting from **full coverage** as the default:\n\n| capability | decision | reason |\n|---|---|---|\n| `<capability-id>` | `INTEGRATE` \\| `OPT-OUT` | `<one-line reason if OPT-OUT>` |\n\nRules:\n\n- **`INTEGRATE` is the default.** Every capability starts as INTEGRATE; the\n matrix is the *subtraction record*.\n- **Every `OPT-OUT` MUST carry a one-line reason** (`not needed`, `not needed\n yet`, `explicitly out of scope`, …). An opt-out without a reason is an\n un-decided hole — the exact failure mode this gate exists to close.\n- **A second integration against the same need** (e.g. a second platform for the\n same capability) starts from the **same full-coverage baseline** as the first.\n Do not carry over the first integration's opt-outs silently — re-decide each\n capability for the new surface, so a first-class/fallback asymmetry cannot\n accumulate.\n\nWrite the matrix to `${PHASE_DIR}/COVERAGE.md` (canonical markdown-table form):\n\n```markdown\n# API Coverage — <service>\n\n> Full coverage by default. Opt-outs are explicit, reasoned decisions.\n\n| capability | decision | reason |\n|---|---|---|\n| search | INTEGRATE | |\n| playlists | INTEGRATE | |\n| skip | OPT-OUT | not needed yet — tracked for follow-up phase |\n```\n\nA fenced ` ```coverage ` JSON block is also accepted for machine-generated\nmatrices; the markdown table is preferred (human-editable, diff-friendly).\n\n## The seal-time gate\n\nThis checkpoint is enforced. At `verify:pre` the `api-coverage.verify-pre` gate\nruns `check api-coverage.verify-pre <phase-dir>`:\n\n- If `COVERAGE.md` exists, it is validated — every row needs a valid decision and\n every `OPT-OUT` a reason. A malformed/partial matrix **blocks the seal**.\n- If `COVERAGE.md` is absent, the detector runs again over the phase scope. If a\n strong external-API-integration signal is found, the seal is **blocked** until a\n matrix is produced. If no signal is found, the phase is treated as a non-API\n phase and the seal proceeds.\n\nSo: an API-integrating phase cannot seal without a decided matrix. Produce it at\nplan time; do not leave it for seal time.\n\n## Tuning the vocabulary (optional)\n\nThe trigger vocabulary is a curated, additive-only set in\n`gsd-core/bin/lib/api-coverage.cjs` (`DEFAULT_API_COVERAGE_TERMS`). To widen it\nfor a project, override at the call site:\n\n```bash\nprintf '%s' \"$SCOPE\" | node gsd-core/bin/lib/api-coverage.cjs --json \\\n --verbs integrate,wrap,connect,embed --nouns api,sdk,rest,grpc,webhook,plugin\n```\n\nThe whole checkpoint is toggleable via `workflow.api_coverage_gate` in\n`.planning/config.json`.\n"
|
|
2971
|
+
},
|
|
2972
|
+
"produces": [
|
|
2973
|
+
"COVERAGE.md"
|
|
2974
|
+
],
|
|
2975
|
+
"consumes": [
|
|
2976
|
+
"CONTEXT.md"
|
|
2977
|
+
],
|
|
2978
|
+
"when": "workflow.api_coverage_gate",
|
|
2979
|
+
"onError": "skip"
|
|
2980
|
+
},
|
|
2614
2981
|
{
|
|
2615
2982
|
"capId": "assumption-delta",
|
|
2616
2983
|
"point": "plan:pre",
|
|
@@ -2711,6 +3078,21 @@ const byLoopPoint = {
|
|
|
2711
3078
|
}
|
|
2712
3079
|
],
|
|
2713
3080
|
"contributions": [
|
|
3081
|
+
{
|
|
3082
|
+
"capId": "claude-orchestration",
|
|
3083
|
+
"point": "plan:post",
|
|
3084
|
+
"into": "planner",
|
|
3085
|
+
"fragment": {
|
|
3086
|
+
"path": "fragments/plan-post.md",
|
|
3087
|
+
"inline": "# Claude orchestration — ultraplan plan-offload ownership (BETA)\n\n> Injected at `plan:post` `into: planner` only when\n> `claude_orchestration.enabled` is true. Default-off; `onError: skip`.\n\n## Ownership declaration\n\nThe `gsd-ultraplan-phase` plan-offload surface (offloading GSD's plan phase to\nClaude Code's ultraplan cloud) is **owned by this capability**, not by a\nstandalone BETA skill. Both surfaces share one runtime gate\n(`claude_orchestration.enabled`), one BETA boundary, and one Claude-Code-only\ndetection seam.\n\n## When the planner should consider ultraplan offload\n\nWhen this contribution is active (capability enabled, Claude Code runtime), the\nplanner MAY offer the `/gsd-ultraplan-phase` path as an alternative to local\n`/gsd-plan-phase` for phases where cloud-assisted planning adds value. This is\nadvisory, not mandatory — the stable local planner remains the default.\n\n## Fallback contract\n\nIf the capability is disabled, or the runtime is not Claude Code, ultraplan\noffload is **not surfaced** and the planner proceeds with the standard local\n`/gsd-plan-phase`. The `gsd-ultraplan-phase` command itself remains installed\n(its own runtime gate already no-ops on non-Claude runtimes); this contribution\nonly governs whether the capability manifest advertises it as part of the\norchestration surface.\n"
|
|
3088
|
+
},
|
|
3089
|
+
"produces": [],
|
|
3090
|
+
"consumes": [
|
|
3091
|
+
"CONTEXT.md"
|
|
3092
|
+
],
|
|
3093
|
+
"when": "claude_orchestration.enabled",
|
|
3094
|
+
"onError": "skip"
|
|
3095
|
+
},
|
|
2714
3096
|
{
|
|
2715
3097
|
"capId": "external-job",
|
|
2716
3098
|
"point": "plan:post",
|
|
@@ -2751,6 +3133,21 @@ const byLoopPoint = {
|
|
|
2751
3133
|
"execute:wave:post": {
|
|
2752
3134
|
"steps": [],
|
|
2753
3135
|
"contributions": [
|
|
3136
|
+
{
|
|
3137
|
+
"capId": "claude-orchestration",
|
|
3138
|
+
"point": "execute:wave:post",
|
|
3139
|
+
"into": "executor",
|
|
3140
|
+
"fragment": {
|
|
3141
|
+
"path": "fragments/execute-wave-post.md",
|
|
3142
|
+
"inline": "# Claude orchestration — Workflow execution backend (BETA)\n\n> Injected at `execute:wave:post` `into: executor` only when\n> `claude_orchestration.enabled` is true. Default-off; `onError: skip`.\n\n## When this contribution is active\n\nThe Claude orchestration capability is **default-off and BETA**. It activates only\nwhen ALL of the following hold:\n\n1. `claude_orchestration.enabled` is `true` in `.planning/config.json`, AND\n2. the active runtime is **Claude Code** (the Workflow tool is Claude / Agent\n SDK-specific), AND\n3. `claude_orchestration.execution_backend` resolves to `workflow` — either\n explicitly, or via `auto` — **and** the Agent SDK version is\n `>= claude_orchestration.min_agent_sdk_version` (default `0.3.149`). The SDK\n floor applies in both `auto` and `workflow` modes (fail-closed: a pre-release\n or older SDK never activates the preview backend).\n\nDetection is fail-closed: any miss degrades to **inline, manual, one-agent-per-\nmessage dispatch** — exactly today's behaviour. On a non-Claude runtime this\ncontribution is a no-op.\n\n## What the executor does when the Workflow backend is active\n\nInstead of the orchestrator fanning out one `Agent(subagent_type=gsd-executor,\nisolation=worktree, run_in_background=true)` per message (which on Claude Code\ncannot nest further subagents — #853 — and so degrades to sequential inline\nexecution), execute-phase **emits a generated Workflow script** and lets the main\nloop orchestrate it:\n\n- **waves → one or more sequential `parallel()` barriers** — each wave is a\n barrier group; when plans within a wave share `files_modified`, they are split\n into separate sequential stages within that wave's barrier (the next wave\n still waits for the previous wave to complete).\n- **plans → `agent(brief, { agentType: 'gsd-executor', isolation: 'worktree' })`**\n — the SAME executor agent and worktree isolation the inline path uses, so the\n produced `SUMMARY.md` and commits are identical.\n- **`files_modified` overlap → separate sequential stages** — two plans that\n touch the same file are placed in different stages within the wave (the same\n overlap rule execute-phase already applies inline).\n- **`resumeFromRunId`** — wired to the phase run id, so an interrupted phase\n resumes without re-running completed plans.\n- **`budget(tokens)`** — a shared token pool across the whole phase when the\n orchestrator passes a `budgetTokens` value to `emitWorkflowScript` (it is a\n function parameter, not a config key; the orchestrator decides the budget).\n\nThe emitter is a pure function exposed through the capability command surface:\n`gsd-tools claude-orchestration emit-workflow --waves <manifest.json> --run-id <id>\n[--phase-dir <dir>] [--budget <n>]` (or `require('gsd-core/bin/lib/claude-orchestration.cjs').emitWorkflowScript`\ndirectly). It maps the phase's wave/plan manifest to the Workflow script string\nand never invokes the Workflow tool itself; the orchestrator runs the emitted\nscript. Detection is resolved by the orchestrator calling the pure\n`detectWorkflowBackend` with the LIVE host descriptor (the CLI\n`gsd-tools claude-orchestration detect-backend` is a simulation harness that\nassumes a capable host unless `--no-nested-dispatch` is passed — it does not probe\nthe real runtime; the orchestrator supplies the real descriptor).\n\n## Fallback contract\n\nIf detection resolves to `inline` (tool absent, SDK too old, runtime not Claude,\nor the capability disabled), execute-phase MUST proceed with the standard inline\nwave dispatch. The executor MUST NOT assume parallelism, a shared budget, or\nresume-from-run-id semantics in that mode.\n"
|
|
3143
|
+
},
|
|
3144
|
+
"produces": [],
|
|
3145
|
+
"consumes": [
|
|
3146
|
+
"PLAN.md"
|
|
3147
|
+
],
|
|
3148
|
+
"when": "claude_orchestration.enabled",
|
|
3149
|
+
"onError": "skip"
|
|
3150
|
+
},
|
|
2754
3151
|
{
|
|
2755
3152
|
"capId": "external-job",
|
|
2756
3153
|
"point": "execute:wave:post",
|
|
@@ -2850,7 +3247,18 @@ const byLoopPoint = {
|
|
|
2850
3247
|
"verify:pre": {
|
|
2851
3248
|
"steps": [],
|
|
2852
3249
|
"contributions": [],
|
|
2853
|
-
"gates": [
|
|
3250
|
+
"gates": [
|
|
3251
|
+
{
|
|
3252
|
+
"capId": "ai-integration",
|
|
3253
|
+
"point": "verify:pre",
|
|
3254
|
+
"check": {
|
|
3255
|
+
"query": "api-coverage.verify-pre"
|
|
3256
|
+
},
|
|
3257
|
+
"when": "workflow.api_coverage_gate",
|
|
3258
|
+
"blocking": true,
|
|
3259
|
+
"onError": "halt"
|
|
3260
|
+
}
|
|
3261
|
+
]
|
|
2854
3262
|
},
|
|
2855
3263
|
"verify:post": {
|
|
2856
3264
|
"steps": [
|
|
@@ -2960,7 +3368,11 @@ const byLoopPoint = {
|
|
|
2960
3368
|
|
|
2961
3369
|
const configKeys = {
|
|
2962
3370
|
"workflow.ai_integration_phase": "ai-integration",
|
|
3371
|
+
"workflow.api_coverage_gate": "ai-integration",
|
|
2963
3372
|
"workflow.assumption_delta": "assumption-delta",
|
|
3373
|
+
"claude_orchestration.enabled": "claude-orchestration",
|
|
3374
|
+
"claude_orchestration.execution_backend": "claude-orchestration",
|
|
3375
|
+
"claude_orchestration.min_agent_sdk_version": "claude-orchestration",
|
|
2964
3376
|
"workflow.code_review": "code-review",
|
|
2965
3377
|
"workflow.code_review_depth": "code-review",
|
|
2966
3378
|
"workflow.drift_threshold": "drift",
|
|
@@ -3006,12 +3418,41 @@ const configSchema = {
|
|
|
3006
3418
|
"default": true,
|
|
3007
3419
|
"description": "Prompt for an AI-SPEC design contract before planning phases that involve AI systems."
|
|
3008
3420
|
},
|
|
3421
|
+
"workflow.api_coverage_gate": {
|
|
3422
|
+
"owner": "ai-integration",
|
|
3423
|
+
"type": "boolean",
|
|
3424
|
+
"default": true,
|
|
3425
|
+
"description": "Require an explicit API-coverage decision (full-by-default, opt-out-not-opt-in) before a phase that integrates an external API/SDK/service can seal. At plan:pre the planner is prompted to enumerate the API surface into COVERAGE.md; at verify:pre a blocking gate fails the seal unless the matrix exists with every non-integrated capability an explicit, reasoned opt-out. Independent of ai_integration_phase (applies to any external-API integration, not only AI)."
|
|
3426
|
+
},
|
|
3009
3427
|
"workflow.assumption_delta": {
|
|
3010
3428
|
"owner": "assumption-delta",
|
|
3011
3429
|
"type": "boolean",
|
|
3012
3430
|
"default": true,
|
|
3013
3431
|
"description": "Enable the assumption-delta architecture checkpoint during planning. When a pluralization/optional/chosen signal is detected in the phase scope, the planner is prompted to re-ask whether the primary key / identity model still names the right thing. Advisory (non-blocking)."
|
|
3014
3432
|
},
|
|
3433
|
+
"claude_orchestration.enabled": {
|
|
3434
|
+
"owner": "claude-orchestration",
|
|
3435
|
+
"type": "boolean",
|
|
3436
|
+
"default": false,
|
|
3437
|
+
"description": "Master toggle for the Claude orchestration capability. Default-off + BETA: the Workflow-tool execution backend and the ultraplan plan-offload surface are inert unless this is true. When false, loop behaviour is byte-identical to a non-Claude runtime (inline/manual dispatch)."
|
|
3438
|
+
},
|
|
3439
|
+
"claude_orchestration.execution_backend": {
|
|
3440
|
+
"owner": "claude-orchestration",
|
|
3441
|
+
"type": "enum",
|
|
3442
|
+
"default": "auto",
|
|
3443
|
+
"description": "Which execute-phase dispatch backend to use when the capability is enabled. 'auto' (default) activates the Workflow backend only when the runtime is Claude AND the Workflow tool is detected AND the Agent SDK meets claude_orchestration.min_agent_sdk_version; otherwise it falls back to inline. 'workflow' forces the Workflow backend when the tool is present AND the Agent SDK meets the floor (still fails closed to inline if the tool is absent or the SDK is too old — the floor applies in both modes). 'inline' forces today's manual one-agent-per-message dispatch regardless of tool availability.",
|
|
3444
|
+
"values": [
|
|
3445
|
+
"auto",
|
|
3446
|
+
"workflow",
|
|
3447
|
+
"inline"
|
|
3448
|
+
]
|
|
3449
|
+
},
|
|
3450
|
+
"claude_orchestration.min_agent_sdk_version": {
|
|
3451
|
+
"owner": "claude-orchestration",
|
|
3452
|
+
"type": "string",
|
|
3453
|
+
"default": "0.3.149",
|
|
3454
|
+
"description": "Minimum Agent SDK version required to activate the Workflow backend under execution_backend='auto'. Defaults to 0.3.149 (the release that introduced the Workflow tool). Raise to pin a higher floor; the detection seam fails closed to inline for any runtime reporting an older or unknown version."
|
|
3455
|
+
},
|
|
3015
3456
|
"workflow.code_review": {
|
|
3016
3457
|
"owner": "code-review",
|
|
3017
3458
|
"type": "boolean",
|
|
@@ -3258,7 +3699,7 @@ const runtimes = {
|
|
|
3258
3699
|
"antigravity": {
|
|
3259
3700
|
"id": "antigravity",
|
|
3260
3701
|
"role": "runtime",
|
|
3261
|
-
"version": "1.7.0-rc.
|
|
3702
|
+
"version": "1.7.0-rc.5",
|
|
3262
3703
|
"title": "Antigravity",
|
|
3263
3704
|
"description": "Google Antigravity IDE — nested under ~/.gemini/antigravity; probed across 1.x and 2.x layouts; Gemini hook event dialect; flat skill layout; tier-1 support.",
|
|
3264
3705
|
"tier": "core",
|
|
@@ -3292,6 +3733,14 @@ const runtimes = {
|
|
|
3292
3733
|
"nesting": "flat",
|
|
3293
3734
|
"recursive": false,
|
|
3294
3735
|
"converter": "convertClaudeCommandToAntigravitySkill"
|
|
3736
|
+
},
|
|
3737
|
+
{
|
|
3738
|
+
"kind": "agents",
|
|
3739
|
+
"destSubpath": "agents",
|
|
3740
|
+
"prefix": "gsd-",
|
|
3741
|
+
"nesting": "flat",
|
|
3742
|
+
"recursive": false,
|
|
3743
|
+
"converter": "convertClaudeAgentToAntigravityAgent"
|
|
3295
3744
|
}
|
|
3296
3745
|
],
|
|
3297
3746
|
"local": [
|
|
@@ -3302,6 +3751,14 @@ const runtimes = {
|
|
|
3302
3751
|
"nesting": "flat",
|
|
3303
3752
|
"recursive": false,
|
|
3304
3753
|
"converter": "convertClaudeCommandToAntigravitySkill"
|
|
3754
|
+
},
|
|
3755
|
+
{
|
|
3756
|
+
"kind": "agents",
|
|
3757
|
+
"destSubpath": "agents",
|
|
3758
|
+
"prefix": "gsd-",
|
|
3759
|
+
"nesting": "flat",
|
|
3760
|
+
"recursive": false,
|
|
3761
|
+
"converter": "convertClaudeAgentToAntigravityAgent"
|
|
3305
3762
|
}
|
|
3306
3763
|
]
|
|
3307
3764
|
},
|
|
@@ -3336,7 +3793,7 @@ const runtimes = {
|
|
|
3336
3793
|
"augment": {
|
|
3337
3794
|
"id": "augment",
|
|
3338
3795
|
"role": "runtime",
|
|
3339
|
-
"version": "1.7.0-rc.
|
|
3796
|
+
"version": "1.7.0-rc.5",
|
|
3340
3797
|
"title": "Augment Code",
|
|
3341
3798
|
"description": "Augment Code CLI — commands + nested-skill artifact layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
|
|
3342
3799
|
"tier": "core",
|
|
@@ -3439,7 +3896,7 @@ const runtimes = {
|
|
|
3439
3896
|
"claude": {
|
|
3440
3897
|
"id": "claude",
|
|
3441
3898
|
"role": "runtime",
|
|
3442
|
-
"version": "1.7.0-rc.
|
|
3899
|
+
"version": "1.7.0-rc.5",
|
|
3443
3900
|
"title": "Claude Code",
|
|
3444
3901
|
"description": "Anthropic Claude Code — primary development runtime; tier-1 support with full hook surface and skills-based global install.",
|
|
3445
3902
|
"tier": "core",
|
|
@@ -3517,13 +3974,30 @@ const runtimes = {
|
|
|
3517
3974
|
"stateIO": "filesystem",
|
|
3518
3975
|
"transport": "mcp",
|
|
3519
3976
|
"runtime": "node"
|
|
3977
|
+
},
|
|
3978
|
+
"hostBehaviors": {
|
|
3979
|
+
"attributionSource": "settings-json-commit",
|
|
3980
|
+
"authorsCanonicalWorkflow": true,
|
|
3981
|
+
"localInstallStyle": "legacy-flat",
|
|
3982
|
+
"permissionsSchema": "claude",
|
|
3983
|
+
"settingsFileByScope": {
|
|
3984
|
+
"local": "settings.local.json",
|
|
3985
|
+
"global": "settings.json"
|
|
3986
|
+
},
|
|
3987
|
+
"sourceMarkerFile": ".gsd-source",
|
|
3988
|
+
"agentFrontmatterExtensions": [
|
|
3989
|
+
"effort"
|
|
3990
|
+
],
|
|
3991
|
+
"ownsClaudePaths": true,
|
|
3992
|
+
"nativeModelAliases": true,
|
|
3993
|
+
"skillsGlobalOnboarding": true
|
|
3520
3994
|
}
|
|
3521
3995
|
}
|
|
3522
3996
|
},
|
|
3523
3997
|
"cline": {
|
|
3524
3998
|
"id": "cline",
|
|
3525
3999
|
"role": "runtime",
|
|
3526
|
-
"version": "1.7.0-rc.
|
|
4000
|
+
"version": "1.7.0-rc.5",
|
|
3527
4001
|
"title": "Cline",
|
|
3528
4002
|
"description": "Cline (VS Code extension) — global-only nested-skill layout; cline-rules hook surface (.clinerules); no hook events emitted; tier-2 support.",
|
|
3529
4003
|
"tier": "core",
|
|
@@ -3578,13 +4052,21 @@ const runtimes = {
|
|
|
3578
4052
|
"stateIO": "filesystem",
|
|
3579
4053
|
"transport": "mcp",
|
|
3580
4054
|
"runtime": "node"
|
|
4055
|
+
},
|
|
4056
|
+
"hostBehaviors": {
|
|
4057
|
+
"reapplyCommand": "/gsd-update --reapply",
|
|
4058
|
+
"frontmatterDialect": "cline",
|
|
4059
|
+
"skipSharedHooksInstall": true,
|
|
4060
|
+
"localTargetIsProjectRoot": true,
|
|
4061
|
+
"clineRulesSurface": true,
|
|
4062
|
+
"localCommandsViaRules": true
|
|
3581
4063
|
}
|
|
3582
4064
|
}
|
|
3583
4065
|
},
|
|
3584
4066
|
"codebuddy": {
|
|
3585
4067
|
"id": "codebuddy",
|
|
3586
4068
|
"role": "runtime",
|
|
3587
|
-
"version": "1.7.0-rc.
|
|
4069
|
+
"version": "1.7.0-rc.5",
|
|
3588
4070
|
"title": "CodeBuddy",
|
|
3589
4071
|
"description": "CodeBuddy (Tencent) — converted commands + skills artifact layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
|
|
3590
4072
|
"tier": "core",
|
|
@@ -3687,7 +4169,7 @@ const runtimes = {
|
|
|
3687
4169
|
"codex": {
|
|
3688
4170
|
"id": "codex",
|
|
3689
4171
|
"role": "runtime",
|
|
3690
|
-
"version": "1.7.0-rc.
|
|
4172
|
+
"version": "1.7.0-rc.5",
|
|
3691
4173
|
"title": "OpenAI Codex CLI",
|
|
3692
4174
|
"description": "OpenAI Codex CLI — shell-var command style; per-agent sandbox tiers; config.toml + hooks.json hook surface; tier-1 support.",
|
|
3693
4175
|
"tier": "core",
|
|
@@ -3713,7 +4195,8 @@ const runtimes = {
|
|
|
3713
4195
|
"prefix": "gsd-",
|
|
3714
4196
|
"nesting": "flat",
|
|
3715
4197
|
"recursive": false,
|
|
3716
|
-
"converter": "convertClaudeCommandToCodexSkill"
|
|
4198
|
+
"converter": "convertClaudeCommandToCodexSkill",
|
|
4199
|
+
"home": ".agents"
|
|
3717
4200
|
}
|
|
3718
4201
|
],
|
|
3719
4202
|
"local": [
|
|
@@ -3723,7 +4206,8 @@ const runtimes = {
|
|
|
3723
4206
|
"prefix": "gsd-",
|
|
3724
4207
|
"nesting": "flat",
|
|
3725
4208
|
"recursive": false,
|
|
3726
|
-
"converter": "convertClaudeCommandToCodexSkill"
|
|
4209
|
+
"converter": "convertClaudeCommandToCodexSkill",
|
|
4210
|
+
"home": ".agents"
|
|
3727
4211
|
}
|
|
3728
4212
|
]
|
|
3729
4213
|
},
|
|
@@ -3735,7 +4219,11 @@ const runtimes = {
|
|
|
3735
4219
|
"installSurface": "codex-toml",
|
|
3736
4220
|
"writesSharedSettings": false,
|
|
3737
4221
|
"permissionWriter": null,
|
|
3738
|
-
"extendedHookEvents": [
|
|
4222
|
+
"extendedHookEvents": [
|
|
4223
|
+
"SubagentStop",
|
|
4224
|
+
"Stop",
|
|
4225
|
+
"PreCompact"
|
|
4226
|
+
],
|
|
3739
4227
|
"hostIntegration": {
|
|
3740
4228
|
"embeddingMode": "declarative",
|
|
3741
4229
|
"commandSurface": "slash-file",
|
|
@@ -3752,13 +4240,20 @@ const runtimes = {
|
|
|
3752
4240
|
"stateIO": "filesystem",
|
|
3753
4241
|
"transport": "mcp",
|
|
3754
4242
|
"runtime": "node"
|
|
4243
|
+
},
|
|
4244
|
+
"hostBehaviors": {
|
|
4245
|
+
"reapplyCommand": "$gsd-update --reapply",
|
|
4246
|
+
"tomlConfigInstall": true,
|
|
4247
|
+
"cleanupSkillSidecars": true,
|
|
4248
|
+
"agentTomlFiles": true,
|
|
4249
|
+
"frontmatterDialect": "codex"
|
|
3755
4250
|
}
|
|
3756
4251
|
}
|
|
3757
4252
|
},
|
|
3758
4253
|
"copilot": {
|
|
3759
4254
|
"id": "copilot",
|
|
3760
4255
|
"role": "runtime",
|
|
3761
|
-
"version": "1.7.0-rc.
|
|
4256
|
+
"version": "1.7.0-rc.5",
|
|
3762
4257
|
"title": "GitHub Copilot",
|
|
3763
4258
|
"description": "GitHub Copilot (VS Code) — markdown config format; copilot-inline hook surface; no hook events emitted; flat skill nesting (unconfirmed recursive loader); tier-2 support.",
|
|
3764
4259
|
"tier": "core",
|
|
@@ -3786,6 +4281,14 @@ const runtimes = {
|
|
|
3786
4281
|
"nesting": "flat",
|
|
3787
4282
|
"recursive": false,
|
|
3788
4283
|
"converter": "convertClaudeCommandToCopilotSkill"
|
|
4284
|
+
},
|
|
4285
|
+
{
|
|
4286
|
+
"kind": "agents",
|
|
4287
|
+
"destSubpath": "agents",
|
|
4288
|
+
"prefix": "gsd-",
|
|
4289
|
+
"nesting": "flat",
|
|
4290
|
+
"recursive": false,
|
|
4291
|
+
"converter": "convertClaudeAgentToCopilotAgent"
|
|
3789
4292
|
}
|
|
3790
4293
|
],
|
|
3791
4294
|
"local": [
|
|
@@ -3796,6 +4299,14 @@ const runtimes = {
|
|
|
3796
4299
|
"nesting": "flat",
|
|
3797
4300
|
"recursive": false,
|
|
3798
4301
|
"converter": "convertClaudeCommandToCopilotSkill"
|
|
4302
|
+
},
|
|
4303
|
+
{
|
|
4304
|
+
"kind": "agents",
|
|
4305
|
+
"destSubpath": "agents",
|
|
4306
|
+
"prefix": "gsd-",
|
|
4307
|
+
"nesting": "flat",
|
|
4308
|
+
"recursive": false,
|
|
4309
|
+
"converter": "convertClaudeAgentToCopilotAgent"
|
|
3799
4310
|
}
|
|
3800
4311
|
]
|
|
3801
4312
|
},
|
|
@@ -3823,13 +4334,16 @@ const runtimes = {
|
|
|
3823
4334
|
"stateIO": "filesystem",
|
|
3824
4335
|
"transport": "mcp",
|
|
3825
4336
|
"runtime": "undocumented"
|
|
4337
|
+
},
|
|
4338
|
+
"hostBehaviors": {
|
|
4339
|
+
"reapplyCommand": "/gsd-update --reapply"
|
|
3826
4340
|
}
|
|
3827
4341
|
}
|
|
3828
4342
|
},
|
|
3829
4343
|
"cursor": {
|
|
3830
4344
|
"id": "cursor",
|
|
3831
4345
|
"role": "runtime",
|
|
3832
|
-
"version": "1.7.0-rc.
|
|
4346
|
+
"version": "1.7.0-rc.5",
|
|
3833
4347
|
"title": "Cursor",
|
|
3834
4348
|
"description": "Cursor IDE — skills + converted commands artifact layout; hooks.json surface; Claude hook event dialect; recursive skill loader (flat nesting); tier-2 support.",
|
|
3835
4349
|
"tier": "core",
|
|
@@ -3926,13 +4440,30 @@ const runtimes = {
|
|
|
3926
4440
|
"stateIO": "filesystem",
|
|
3927
4441
|
"transport": "mcp",
|
|
3928
4442
|
"runtime": "node"
|
|
4443
|
+
},
|
|
4444
|
+
"hostBehaviors": {
|
|
4445
|
+
"reapplyCommand": "gsd-update --reapply (mention the skill name)",
|
|
4446
|
+
"frontmatterDialect": "cursor",
|
|
4447
|
+
"hooksJsonSurface": true,
|
|
4448
|
+
"skipSharedHooksInstall": true,
|
|
4449
|
+
"reportCommandsDir": true,
|
|
4450
|
+
"skipUpdateBannerCommand": true,
|
|
4451
|
+
"skipSettingsUi": true,
|
|
4452
|
+
"managedHookEvents": [
|
|
4453
|
+
"sessionStart",
|
|
4454
|
+
"postToolUse",
|
|
4455
|
+
"preToolUse",
|
|
4456
|
+
"stop",
|
|
4457
|
+
"subagentStart",
|
|
4458
|
+
"subagentStop"
|
|
4459
|
+
]
|
|
3929
4460
|
}
|
|
3930
4461
|
}
|
|
3931
4462
|
},
|
|
3932
4463
|
"hermes": {
|
|
3933
4464
|
"id": "hermes",
|
|
3934
4465
|
"role": "runtime",
|
|
3935
|
-
"version": "1.7.0-rc.
|
|
4466
|
+
"version": "1.7.0-rc.5",
|
|
3936
4467
|
"title": "Hermes Agent",
|
|
3937
4468
|
"description": "Hermes Agent (NousResearch) — skills nest under skills/gsd/ category bucket; nested skill layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
|
|
3938
4469
|
"tier": "core",
|
|
@@ -3981,6 +4512,21 @@ const runtimes = {
|
|
|
3981
4512
|
"writesSharedSettings": true,
|
|
3982
4513
|
"permissionWriter": null,
|
|
3983
4514
|
"extendedHookEvents": [],
|
|
4515
|
+
"extensionEvents": "hermes",
|
|
4516
|
+
"hostBehaviors": {
|
|
4517
|
+
"skillFrontmatterVersion": true,
|
|
4518
|
+
"skillsManifestPrefix": "skills/gsd/",
|
|
4519
|
+
"trackCategoryDescription": true,
|
|
4520
|
+
"writeCategoryDescription": true,
|
|
4521
|
+
"reportSkillsCount": true,
|
|
4522
|
+
"legacyCommandsGsdCleanup": true,
|
|
4523
|
+
"brandingRewrites": {
|
|
4524
|
+
"CLAUDE.md": "HERMES.md",
|
|
4525
|
+
"Claude Code": "Hermes Agent",
|
|
4526
|
+
".claude/": ".hermes/"
|
|
4527
|
+
},
|
|
4528
|
+
"reapplyCommand": "gsd-update --reapply (mention the skill name)"
|
|
4529
|
+
},
|
|
3984
4530
|
"hostIntegration": {
|
|
3985
4531
|
"embeddingMode": "imperative",
|
|
3986
4532
|
"commandSurface": "slash-programmatic",
|
|
@@ -4003,7 +4549,7 @@ const runtimes = {
|
|
|
4003
4549
|
"kilo": {
|
|
4004
4550
|
"id": "kilo",
|
|
4005
4551
|
"role": "runtime",
|
|
4006
|
-
"version": "1.7.0-rc.
|
|
4552
|
+
"version": "1.7.0-rc.5",
|
|
4007
4553
|
"title": "Kilo Code",
|
|
4008
4554
|
"description": "Kilo Code — XDG-based config dir; global skills at ~/.kilo/skills (separate from XDG config); flat command/ + skills artifact layout; no lifecycle hook registration; tier-2 support.",
|
|
4009
4555
|
"tier": "core",
|
|
@@ -4090,13 +4636,21 @@ const runtimes = {
|
|
|
4090
4636
|
"stateIO": "filesystem",
|
|
4091
4637
|
"transport": "mcp",
|
|
4092
4638
|
"runtime": "bun"
|
|
4639
|
+
},
|
|
4640
|
+
"hostBehaviors": {
|
|
4641
|
+
"reapplyCommand": "/gsd-update --reapply",
|
|
4642
|
+
"attributionConfigResolver": "kilo",
|
|
4643
|
+
"flatCommandDir": "command",
|
|
4644
|
+
"combinedFamilyInstall": true,
|
|
4645
|
+
"frontmatterDialect": "kilo",
|
|
4646
|
+
"skipUpdateBannerCommand": true
|
|
4093
4647
|
}
|
|
4094
4648
|
}
|
|
4095
4649
|
},
|
|
4096
4650
|
"kimi": {
|
|
4097
4651
|
"id": "kimi",
|
|
4098
4652
|
"role": "runtime",
|
|
4099
|
-
"version": "1.7.0-rc.
|
|
4653
|
+
"version": "1.7.0-rc.5",
|
|
4100
4654
|
"title": "Kimi CLI",
|
|
4101
4655
|
"description": "Kimi CLI (Moonshot AI) — generic agents root at ~/.config/agents; skills + kimi-agents artifact layout; no hook surface; no hook events; tier-2 support.",
|
|
4102
4656
|
"tier": "core",
|
|
@@ -4170,7 +4724,7 @@ const runtimes = {
|
|
|
4170
4724
|
"opencode": {
|
|
4171
4725
|
"id": "opencode",
|
|
4172
4726
|
"role": "runtime",
|
|
4173
|
-
"version": "1.7.0-rc.
|
|
4727
|
+
"version": "1.7.0-rc.5",
|
|
4174
4728
|
"title": "OpenCode",
|
|
4175
4729
|
"description": "OpenCode — XDG-based config dir; flat command/ + skills artifact layout; settings-json config format; no lifecycle hook registration; tier-2 support.",
|
|
4176
4730
|
"tier": "core",
|
|
@@ -4244,22 +4798,38 @@ const runtimes = {
|
|
|
4244
4798
|
"namedDispatch": true,
|
|
4245
4799
|
"nested": "undocumented",
|
|
4246
4800
|
"maxDepth": "undocumented",
|
|
4247
|
-
"background":
|
|
4801
|
+
"background": true,
|
|
4248
4802
|
"subagentToolkit": "full",
|
|
4249
|
-
"backgroundDispatch":
|
|
4803
|
+
"backgroundDispatch": true
|
|
4250
4804
|
},
|
|
4251
4805
|
"modelMode": "active",
|
|
4252
4806
|
"hookBus": "host",
|
|
4253
4807
|
"stateIO": "filesystem",
|
|
4254
4808
|
"transport": "mcp",
|
|
4255
4809
|
"runtime": "bun"
|
|
4810
|
+
},
|
|
4811
|
+
"hostBehaviors": {
|
|
4812
|
+
"reapplyCommand": "/gsd-update --reapply",
|
|
4813
|
+
"attributionConfigResolver": "opencode",
|
|
4814
|
+
"flatCommandDir": "command",
|
|
4815
|
+
"combinedFamilyInstall": true,
|
|
4816
|
+
"frontmatterDialect": "opencode",
|
|
4817
|
+
"nativePlugin": {
|
|
4818
|
+
"dir": "plugins",
|
|
4819
|
+
"file": "gsd-core.js",
|
|
4820
|
+
"source": ".opencode/plugins/gsd-core.js"
|
|
4821
|
+
},
|
|
4822
|
+
"skipHomePrefixSubstitution": true,
|
|
4823
|
+
"skipSettingsUi": true,
|
|
4824
|
+
"skipUpdateBannerCommand": true,
|
|
4825
|
+
"skipCodexSkillsManifest": true
|
|
4256
4826
|
}
|
|
4257
4827
|
}
|
|
4258
4828
|
},
|
|
4259
4829
|
"qwen": {
|
|
4260
4830
|
"id": "qwen",
|
|
4261
4831
|
"role": "runtime",
|
|
4262
|
-
"version": "1.7.0-rc.
|
|
4832
|
+
"version": "1.7.0-rc.5",
|
|
4263
4833
|
"title": "Qwen Code",
|
|
4264
4834
|
"description": "Qwen Code (Alibaba) — nested-skill artifact layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
|
|
4265
4835
|
"tier": "core",
|
|
@@ -4334,7 +4904,7 @@ const runtimes = {
|
|
|
4334
4904
|
"trae": {
|
|
4335
4905
|
"id": "trae",
|
|
4336
4906
|
"role": "runtime",
|
|
4337
|
-
"version": "1.7.0-rc.
|
|
4907
|
+
"version": "1.7.0-rc.5",
|
|
4338
4908
|
"title": "Trae IDE",
|
|
4339
4909
|
"description": "Trae IDE — nested-skill artifact layout; no hook surface (profile-marker-only config); tier-2 support.",
|
|
4340
4910
|
"tier": "core",
|
|
@@ -4420,7 +4990,7 @@ const runtimes = {
|
|
|
4420
4990
|
"windsurf": {
|
|
4421
4991
|
"id": "windsurf",
|
|
4422
4992
|
"role": "runtime",
|
|
4423
|
-
"version": "1.7.0-rc.
|
|
4993
|
+
"version": "1.7.0-rc.5",
|
|
4424
4994
|
"title": "Windsurf",
|
|
4425
4995
|
"description": "Windsurf (Codeium) — workspace workflow artifact layout for slash commands; no hook surface; no hook events; tier-2 support.",
|
|
4426
4996
|
"tier": "core",
|
|
@@ -4495,6 +5065,108 @@ const runtimes = {
|
|
|
4495
5065
|
"runtime": "undocumented"
|
|
4496
5066
|
}
|
|
4497
5067
|
}
|
|
5068
|
+
},
|
|
5069
|
+
"zcode": {
|
|
5070
|
+
"id": "zcode",
|
|
5071
|
+
"role": "runtime",
|
|
5072
|
+
"version": "1.7.0-rc.5",
|
|
5073
|
+
"title": "ZCode",
|
|
5074
|
+
"description": "ZCode (Z.ai) — desktop Agentic Development Environment for GLM-5.2; Claude-shaped nested skills at ~/.zcode/skills/<name>/SKILL.md, slash commands, named subagents, native MCP; declarative plugin surface; profile-marker install; tier-2 community support.",
|
|
5075
|
+
"tier": "core",
|
|
5076
|
+
"requires": [],
|
|
5077
|
+
"engines": {
|
|
5078
|
+
"gsd": ">=1.6.0"
|
|
5079
|
+
},
|
|
5080
|
+
"runtime": {
|
|
5081
|
+
"configHome": {
|
|
5082
|
+
"kind": "dot-home",
|
|
5083
|
+
"name": ".zcode",
|
|
5084
|
+
"env": [
|
|
5085
|
+
"ZCODE_CONFIG_DIR"
|
|
5086
|
+
]
|
|
5087
|
+
},
|
|
5088
|
+
"localConfigDir": ".zcode",
|
|
5089
|
+
"configFormat": "none",
|
|
5090
|
+
"artifactLayout": {
|
|
5091
|
+
"global": [
|
|
5092
|
+
{
|
|
5093
|
+
"kind": "skills",
|
|
5094
|
+
"destSubpath": "skills",
|
|
5095
|
+
"prefix": "gsd-",
|
|
5096
|
+
"nesting": "nested",
|
|
5097
|
+
"recursive": false,
|
|
5098
|
+
"converter": "convertClaudeCommandToClaudeSkill"
|
|
5099
|
+
},
|
|
5100
|
+
{
|
|
5101
|
+
"kind": "commands",
|
|
5102
|
+
"destSubpath": "commands",
|
|
5103
|
+
"prefix": "gsd-",
|
|
5104
|
+
"nesting": "flat",
|
|
5105
|
+
"recursive": false,
|
|
5106
|
+
"converter": null
|
|
5107
|
+
},
|
|
5108
|
+
{
|
|
5109
|
+
"kind": "agents",
|
|
5110
|
+
"destSubpath": "agents",
|
|
5111
|
+
"prefix": "gsd-",
|
|
5112
|
+
"nesting": "flat",
|
|
5113
|
+
"recursive": false,
|
|
5114
|
+
"converter": null
|
|
5115
|
+
}
|
|
5116
|
+
],
|
|
5117
|
+
"local": [
|
|
5118
|
+
{
|
|
5119
|
+
"kind": "skills",
|
|
5120
|
+
"destSubpath": "skills",
|
|
5121
|
+
"prefix": "gsd-",
|
|
5122
|
+
"nesting": "nested",
|
|
5123
|
+
"recursive": false,
|
|
5124
|
+
"converter": "convertClaudeCommandToClaudeSkill"
|
|
5125
|
+
},
|
|
5126
|
+
{
|
|
5127
|
+
"kind": "commands",
|
|
5128
|
+
"destSubpath": "commands",
|
|
5129
|
+
"prefix": "gsd-",
|
|
5130
|
+
"nesting": "flat",
|
|
5131
|
+
"recursive": false,
|
|
5132
|
+
"converter": null
|
|
5133
|
+
},
|
|
5134
|
+
{
|
|
5135
|
+
"kind": "agents",
|
|
5136
|
+
"destSubpath": "agents",
|
|
5137
|
+
"prefix": "gsd-",
|
|
5138
|
+
"nesting": "flat",
|
|
5139
|
+
"recursive": false,
|
|
5140
|
+
"converter": null
|
|
5141
|
+
}
|
|
5142
|
+
]
|
|
5143
|
+
},
|
|
5144
|
+
"commandStyle": "slash-hyphen",
|
|
5145
|
+
"hooksSurface": "none",
|
|
5146
|
+
"sandboxTier": "none",
|
|
5147
|
+
"supportTier": 2,
|
|
5148
|
+
"installSurface": "profile-marker-only",
|
|
5149
|
+
"writesSharedSettings": false,
|
|
5150
|
+
"permissionWriter": null,
|
|
5151
|
+
"extendedHookEvents": [],
|
|
5152
|
+
"hostIntegration": {
|
|
5153
|
+
"embeddingMode": "declarative",
|
|
5154
|
+
"commandSurface": "slash-file",
|
|
5155
|
+
"dispatch": {
|
|
5156
|
+
"namedDispatch": true,
|
|
5157
|
+
"nested": "undocumented",
|
|
5158
|
+
"maxDepth": "undocumented",
|
|
5159
|
+
"background": false,
|
|
5160
|
+
"subagentToolkit": "full",
|
|
5161
|
+
"backgroundDispatch": false
|
|
5162
|
+
},
|
|
5163
|
+
"modelMode": "passive",
|
|
5164
|
+
"hookBus": "host",
|
|
5165
|
+
"stateIO": "filesystem",
|
|
5166
|
+
"transport": "mcp",
|
|
5167
|
+
"runtime": "electron"
|
|
5168
|
+
}
|
|
5169
|
+
}
|
|
4498
5170
|
}
|
|
4499
5171
|
};
|
|
4500
5172
|
|
|
@@ -4509,6 +5181,11 @@ const commandFamilies = {
|
|
|
4509
5181
|
"module": "audit-command-router.cjs",
|
|
4510
5182
|
"router": "routeAuditUat"
|
|
4511
5183
|
},
|
|
5184
|
+
"claude-orchestration": {
|
|
5185
|
+
"capId": "claude-orchestration",
|
|
5186
|
+
"module": "claude-orchestration-command-router.cjs",
|
|
5187
|
+
"router": "routeClaudeOrchestrationCommand"
|
|
5188
|
+
},
|
|
4512
5189
|
"extract-messages": {
|
|
4513
5190
|
"capId": "profile-pipeline",
|
|
4514
5191
|
"module": "profile-pipeline-command-router.cjs",
|
|
@@ -4648,6 +5325,7 @@ const _requiresGraph = {
|
|
|
4648
5325
|
"audit": [],
|
|
4649
5326
|
"augment": [],
|
|
4650
5327
|
"claude": [],
|
|
5328
|
+
"claude-orchestration": [],
|
|
4651
5329
|
"cline": [],
|
|
4652
5330
|
"code-review": [],
|
|
4653
5331
|
"codebuddy": [],
|
|
@@ -4676,7 +5354,8 @@ const _requiresGraph = {
|
|
|
4676
5354
|
"tdd": [],
|
|
4677
5355
|
"trae": [],
|
|
4678
5356
|
"ui": [],
|
|
4679
|
-
"windsurf": []
|
|
5357
|
+
"windsurf": [],
|
|
5358
|
+
"zcode": []
|
|
4680
5359
|
};
|
|
4681
5360
|
|
|
4682
5361
|
function requiresClosure(id) {
|