@garygentry/feature-forge 0.1.5 → 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.
Files changed (175) hide show
  1. package/README.md +18 -0
  2. package/adapters/GENERATION-REPORT.md +12 -12
  3. package/adapters/claude/.feature-forge-bundle.json +6 -0
  4. package/adapters/claude/references/portable-root.md +8 -5
  5. package/adapters/claude/references/process-overview.md +1 -1
  6. package/adapters/claude/references/shared-conventions.md +24 -5
  7. package/adapters/claude/references/stack-resolution.md +4 -1
  8. package/adapters/claude/references/stacks/go.md +1 -1
  9. package/adapters/claude/references/stacks/python.md +1 -1
  10. package/adapters/claude/references/stacks/rust.md +1 -1
  11. package/adapters/claude/references/stacks/typescript.md +1 -1
  12. package/adapters/claude/scripts/epic-manifest.py +1379 -0
  13. package/adapters/claude/scripts/forge-bootstrap.py +991 -0
  14. package/adapters/claude/scripts/forge-init.sh +44 -0
  15. package/adapters/claude/scripts/forge-root.sh +30 -8
  16. package/adapters/claude/scripts/validate-traceability.py +150 -0
  17. package/adapters/claude/skills/forge/SKILL.md +5 -5
  18. package/adapters/claude/skills/forge-0-epic/SKILL.md +6 -10
  19. package/adapters/claude/skills/forge-0-epic/references/edit-mode.md +2 -2
  20. package/adapters/claude/skills/forge-0-epic/references/epic-manifest-subcommands.md +1 -1
  21. package/adapters/claude/skills/forge-1-prd/SKILL.md +2 -2
  22. package/adapters/claude/skills/forge-2-tech/SKILL.md +8 -7
  23. package/adapters/claude/skills/forge-2-tech/references/stack-discovery-checklist.md +4 -4
  24. package/adapters/claude/skills/forge-3-specs/SKILL.md +1 -1
  25. package/adapters/claude/skills/forge-4-backlog/SKILL.md +2 -2
  26. package/adapters/claude/skills/forge-5-loop/SKILL.md +2 -2
  27. package/adapters/claude/skills/forge-6-docs/SKILL.md +2 -2
  28. package/adapters/claude/skills/forge-bootstrap/SKILL.md +4 -4
  29. package/adapters/claude/skills/forge-fix/SKILL.md +1 -1
  30. package/adapters/claude/skills/forge-init/SKILL.md +1 -1
  31. package/adapters/claude/skills/forge-verify/SKILL.md +7 -2
  32. package/adapters/claude/skills/forge-verify/references/verification-checklists.md +1 -1
  33. package/adapters/codex/.feature-forge-bundle.json +6 -0
  34. package/adapters/codex/agents/{forge-researcher.md → forge-researcher.toml} +4 -4
  35. package/adapters/codex/agents/{forge-spec-writer.md → forge-spec-writer.toml} +4 -4
  36. package/adapters/codex/agents/{forge-verifier.md → forge-verifier.toml} +4 -4
  37. package/adapters/codex/references/portable-root.md +8 -5
  38. package/adapters/codex/references/process-overview.md +1 -1
  39. package/adapters/codex/references/shared-conventions.md +24 -5
  40. package/adapters/codex/references/stack-resolution.md +4 -1
  41. package/adapters/codex/references/stacks/go.md +1 -1
  42. package/adapters/codex/references/stacks/python.md +1 -1
  43. package/adapters/codex/references/stacks/rust.md +1 -1
  44. package/adapters/codex/references/stacks/typescript.md +1 -1
  45. package/adapters/codex/scripts/epic-manifest.py +1379 -0
  46. package/adapters/codex/scripts/forge-bootstrap.py +991 -0
  47. package/adapters/codex/scripts/forge-init.sh +44 -0
  48. package/adapters/codex/scripts/forge-root.sh +30 -8
  49. package/adapters/codex/scripts/validate-traceability.py +150 -0
  50. package/adapters/codex/skills/forge/{forge.md → SKILL.md} +16 -6
  51. package/adapters/codex/skills/forge-0-epic/{forge-0-epic.md → SKILL.md} +26 -20
  52. package/adapters/codex/skills/forge-0-epic/references/edit-mode.md +2 -2
  53. package/adapters/codex/skills/forge-0-epic/references/epic-manifest-subcommands.md +1 -1
  54. package/adapters/codex/skills/forge-1-prd/{forge-1-prd.md → SKILL.md} +18 -8
  55. package/adapters/codex/skills/forge-2-tech/{forge-2-tech.md → SKILL.md} +26 -15
  56. package/adapters/codex/skills/forge-2-tech/references/stack-discovery-checklist.md +4 -4
  57. package/adapters/codex/skills/forge-3-specs/{forge-3-specs.md → SKILL.md} +16 -6
  58. package/adapters/codex/skills/forge-4-backlog/{forge-4-backlog.md → SKILL.md} +15 -5
  59. package/adapters/codex/skills/forge-5-loop/{forge-5-loop.md → SKILL.md} +27 -17
  60. package/adapters/codex/skills/forge-6-docs/{forge-6-docs.md → SKILL.md} +17 -7
  61. package/adapters/codex/skills/forge-bootstrap/{forge-bootstrap.md → SKILL.md} +17 -7
  62. package/adapters/codex/skills/forge-fix/{forge-fix.md → SKILL.md} +12 -2
  63. package/adapters/codex/skills/forge-init/{forge-init.md → SKILL.md} +11 -1
  64. package/adapters/codex/skills/forge-verify/{forge-verify.md → SKILL.md} +24 -9
  65. package/adapters/codex/skills/forge-verify/references/verification-checklists.md +1 -1
  66. package/adapters/copilot/.feature-forge-bundle.json +6 -0
  67. package/adapters/copilot/references/portable-root.md +8 -5
  68. package/adapters/copilot/references/process-overview.md +1 -1
  69. package/adapters/copilot/references/shared-conventions.md +24 -5
  70. package/adapters/copilot/references/stack-resolution.md +4 -1
  71. package/adapters/copilot/references/stacks/go.md +1 -1
  72. package/adapters/copilot/references/stacks/python.md +1 -1
  73. package/adapters/copilot/references/stacks/rust.md +1 -1
  74. package/adapters/copilot/references/stacks/typescript.md +1 -1
  75. package/adapters/copilot/scripts/epic-manifest.py +1379 -0
  76. package/adapters/copilot/scripts/forge-bootstrap.py +991 -0
  77. package/adapters/copilot/scripts/forge-init.sh +44 -0
  78. package/adapters/copilot/scripts/forge-root.sh +30 -8
  79. package/adapters/copilot/scripts/validate-traceability.py +150 -0
  80. package/adapters/copilot/skills/forge/forge.md +16 -6
  81. package/adapters/copilot/skills/forge-0-epic/forge-0-epic.md +26 -20
  82. package/adapters/copilot/skills/forge-0-epic/references/edit-mode.md +2 -2
  83. package/adapters/copilot/skills/forge-0-epic/references/epic-manifest-subcommands.md +1 -1
  84. package/adapters/copilot/skills/forge-1-prd/forge-1-prd.md +18 -8
  85. package/adapters/copilot/skills/forge-2-tech/forge-2-tech.md +26 -15
  86. package/adapters/copilot/skills/forge-2-tech/references/stack-discovery-checklist.md +4 -4
  87. package/adapters/copilot/skills/forge-3-specs/forge-3-specs.md +16 -6
  88. package/adapters/copilot/skills/forge-4-backlog/forge-4-backlog.md +15 -5
  89. package/adapters/copilot/skills/forge-5-loop/forge-5-loop.md +27 -17
  90. package/adapters/copilot/skills/forge-6-docs/forge-6-docs.md +17 -7
  91. package/adapters/copilot/skills/forge-bootstrap/forge-bootstrap.md +17 -7
  92. package/adapters/copilot/skills/forge-fix/forge-fix.md +12 -2
  93. package/adapters/copilot/skills/forge-init/forge-init.md +11 -1
  94. package/adapters/copilot/skills/forge-verify/forge-verify.md +24 -9
  95. package/adapters/copilot/skills/forge-verify/references/verification-checklists.md +1 -1
  96. package/adapters/cursor/.feature-forge-bundle.json +6 -0
  97. package/adapters/cursor/references/portable-root.md +8 -5
  98. package/adapters/cursor/references/process-overview.md +1 -1
  99. package/adapters/cursor/references/shared-conventions.md +24 -5
  100. package/adapters/cursor/references/stack-resolution.md +4 -1
  101. package/adapters/cursor/references/stacks/go.md +1 -1
  102. package/adapters/cursor/references/stacks/python.md +1 -1
  103. package/adapters/cursor/references/stacks/rust.md +1 -1
  104. package/adapters/cursor/references/stacks/typescript.md +1 -1
  105. package/adapters/cursor/scripts/epic-manifest.py +1379 -0
  106. package/adapters/cursor/scripts/forge-bootstrap.py +991 -0
  107. package/adapters/cursor/scripts/forge-init.sh +44 -0
  108. package/adapters/cursor/scripts/forge-root.sh +30 -8
  109. package/adapters/cursor/scripts/validate-traceability.py +150 -0
  110. package/adapters/cursor/skills/forge/forge.mdc +16 -6
  111. package/adapters/cursor/skills/forge-0-epic/forge-0-epic.mdc +26 -20
  112. package/adapters/cursor/skills/forge-0-epic/references/edit-mode.md +2 -2
  113. package/adapters/cursor/skills/forge-0-epic/references/epic-manifest-subcommands.md +1 -1
  114. package/adapters/cursor/skills/forge-1-prd/forge-1-prd.mdc +18 -8
  115. package/adapters/cursor/skills/forge-2-tech/forge-2-tech.mdc +26 -15
  116. package/adapters/cursor/skills/forge-2-tech/references/stack-discovery-checklist.md +4 -4
  117. package/adapters/cursor/skills/forge-3-specs/forge-3-specs.mdc +16 -6
  118. package/adapters/cursor/skills/forge-4-backlog/forge-4-backlog.mdc +15 -5
  119. package/adapters/cursor/skills/forge-5-loop/forge-5-loop.mdc +27 -17
  120. package/adapters/cursor/skills/forge-6-docs/forge-6-docs.mdc +17 -7
  121. package/adapters/cursor/skills/forge-bootstrap/forge-bootstrap.mdc +17 -7
  122. package/adapters/cursor/skills/forge-fix/forge-fix.mdc +12 -2
  123. package/adapters/cursor/skills/forge-init/forge-init.mdc +11 -1
  124. package/adapters/cursor/skills/forge-verify/forge-verify.mdc +24 -9
  125. package/adapters/cursor/skills/forge-verify/references/verification-checklists.md +1 -1
  126. package/adapters/gemini/.feature-forge-bundle.json +6 -0
  127. package/adapters/gemini/gemini-extension.json +1 -1
  128. package/adapters/gemini/references/portable-root.md +8 -5
  129. package/adapters/gemini/references/process-overview.md +1 -1
  130. package/adapters/gemini/references/shared-conventions.md +24 -5
  131. package/adapters/gemini/references/stack-resolution.md +4 -1
  132. package/adapters/gemini/references/stacks/go.md +1 -1
  133. package/adapters/gemini/references/stacks/python.md +1 -1
  134. package/adapters/gemini/references/stacks/rust.md +1 -1
  135. package/adapters/gemini/references/stacks/typescript.md +1 -1
  136. package/adapters/gemini/scripts/epic-manifest.py +1379 -0
  137. package/adapters/gemini/scripts/forge-bootstrap.py +991 -0
  138. package/adapters/gemini/scripts/forge-init.sh +44 -0
  139. package/adapters/gemini/scripts/forge-root.sh +30 -8
  140. package/adapters/gemini/scripts/validate-traceability.py +150 -0
  141. package/adapters/gemini/skills/forge/forge.md +16 -6
  142. package/adapters/gemini/skills/forge-0-epic/forge-0-epic.md +26 -20
  143. package/adapters/gemini/skills/forge-0-epic/references/edit-mode.md +2 -2
  144. package/adapters/gemini/skills/forge-0-epic/references/epic-manifest-subcommands.md +1 -1
  145. package/adapters/gemini/skills/forge-1-prd/forge-1-prd.md +18 -8
  146. package/adapters/gemini/skills/forge-2-tech/forge-2-tech.md +26 -15
  147. package/adapters/gemini/skills/forge-2-tech/references/stack-discovery-checklist.md +4 -4
  148. package/adapters/gemini/skills/forge-3-specs/forge-3-specs.md +16 -6
  149. package/adapters/gemini/skills/forge-4-backlog/forge-4-backlog.md +15 -5
  150. package/adapters/gemini/skills/forge-5-loop/forge-5-loop.md +27 -17
  151. package/adapters/gemini/skills/forge-6-docs/forge-6-docs.md +17 -7
  152. package/adapters/gemini/skills/forge-bootstrap/forge-bootstrap.md +17 -7
  153. package/adapters/gemini/skills/forge-fix/forge-fix.md +12 -2
  154. package/adapters/gemini/skills/forge-init/forge-init.md +11 -1
  155. package/adapters/gemini/skills/forge-verify/forge-verify.md +24 -9
  156. package/adapters/gemini/skills/forge-verify/references/verification-checklists.md +1 -1
  157. package/dist/agent-targets.d.ts +20 -4
  158. package/dist/agent-targets.js +29 -4
  159. package/dist/apply.js +245 -18
  160. package/dist/cli.js +12 -6
  161. package/dist/hash.d.ts +5 -0
  162. package/dist/hash.js +7 -0
  163. package/dist/manifest.d.ts +3 -1
  164. package/dist/manifest.js +58 -2
  165. package/dist/placements.d.ts +69 -0
  166. package/dist/placements.js +116 -0
  167. package/dist/plan.d.ts +7 -0
  168. package/dist/plan.js +87 -1
  169. package/dist/report.js +21 -0
  170. package/dist/source.d.ts +4 -3
  171. package/dist/source.js +4 -3
  172. package/dist/types.d.ts +162 -18
  173. package/dist/types.js +42 -11
  174. package/package.json +1 -1
  175. package/adapters/codex/agents/openai.yaml +0 -10
@@ -28,7 +28,7 @@ Before interviewing, you need to understand the existing codebase. This involves
28
28
 
29
29
  ### Recommended: Delegate to forge-researcher Subagent
30
30
 
31
- Spawn the `forge-researcher` subagent via the Agent tool to scan the codebase. Pass a prompt like: "Research the codebase for planning the {feature} feature. Focus on integration points, established patterns, and relevant packages."
31
+ Spawn the `forge-researcher` subagent via the host's subagent mechanism to scan the codebase. Pass a prompt like: "Research the codebase for planning the {feature} feature. Focus on integration points, established patterns, and relevant packages."
32
32
 
33
33
  If this feature belongs to an epic, also add to the dispatch prompt: "If this feature belongs to an epic, also account for these epic contracts: {paste this feature's `consumes` and the `exposes` of its direct deps}, and the completed dependency tech-specs at {paths}. Do not re-research transitive deps." This threads epic context into the researcher without changing the agent's behavior.
34
34
 
@@ -37,7 +37,7 @@ The researcher runs in its own context window, reads the project structure, and
37
37
  **Single vs. parallel research.** For a small or well-understood codebase, **one**
38
38
  researcher is the right default. For a **large codebase or uncertain scope** (many
39
39
  packages, several integration surfaces, monorepo), dispatch **multiple `forge-researcher`
40
- subagents in parallel — a single message with multiple Agent calls** (the
40
+ subagents in parallel — a single message with multiple subagent calls** (the
41
41
  `superpowers:dispatching-parallel-agents` pattern), each scoped to a **disjoint focus**
42
42
  so they don't re-read the same ground:
43
43
  - one on **project structure & conventions** (layout, build, naming, error/test patterns),
@@ -55,7 +55,7 @@ If the `forge-researcher` subagent is not available, perform the research inline
55
55
  ### Manual Research (fallback)
56
56
 
57
57
  1. **Read the PRD thoroughly**: Understand all requirements and constraints
58
- 2. **Check for project-level stack decisions**: Look for `.claude/references/stack-decisions.md` in the project root. If present, read it — these are established technology choices that should be respected unless there's a strong reason to deviate.
58
+ 2. **Check for project-level stack decisions**: Look for a project stack-decisions file, first existing path wins: `.feature-forge/stack-decisions.md` (preferred), then `.agents/references/stack-decisions.md`, then `.claude/references/stack-decisions.md` (legacy alias). If present, read it — these are established technology choices that should be respected unless there's a strong reason to deviate.
59
59
  3. **Read the plugin's default stack reference**: Read `references/stack-discovery-checklist.md` for general stack context (only if no project-level override exists)
60
60
  4. **Examine the existing codebase**: Look at `package.json` files, existing packages, directory structure, and established patterns. Understand what conventions are already in place.
61
61
  5. **Review other features' tech specs**: Check `{specsDir}/*/tech-spec.md` and `{specsDir}/*/*/tech-spec.md` (depth-2, to find nested epic members) for consistency in approach and to identify shared infrastructure. Apply the **feature-shaped-dir bound**: only treat a directory as a feature if it directly contains a `.pipeline-state.json` (filter matches whose parent directory holds one, or enumerate members via the helper). A flat-only tree has no depth-2 feature dirs, so this gains no new matches there (REQ-COMPAT-01).
@@ -66,9 +66,9 @@ If the `forge-researcher` subagent is not available, perform the research inline
66
66
  After researching the codebase, identify the primary stack (language, build tool, package manager, framework). Read `references/stack-resolution.md` for the full resolution protocol.
67
67
 
68
68
  1. Check if `forge.config.json` already has a `stack` field — if so, use it
69
- 2. Otherwise, detect from project files and use `AskUserQuestion` to confirm: "I detected this as a {stack} project. Correct?"
69
+ 2. Otherwise, detect from project files and use the host's question mechanism to confirm: "I detected this as a {stack} project. Correct?"
70
70
  3. Update `forge.config.json` with `stack`, `typeCheckCommand`, and `testCommand`
71
- 4. Verify that a matching stack profile exists at `references/stacks/{stack}.md`. If it does, load it for stack-specific guidance during this and all subsequent stages. If no profile exists, inform the user: "No dedicated profile for {stack}. Using generic fallback — spec conventions, verification checks, and examples will be language-neutral. Consider creating a project-level override at `.claude/references/stack-decisions.md`." Then load `references/stacks/_generic.md`.
71
+ 4. Verify that a matching stack profile exists at `references/stacks/{stack}.md`. If it does, load it for stack-specific guidance during this and all subsequent stages. If no profile exists, inform the user: "No dedicated profile for {stack}. Using generic fallback — spec conventions, verification checks, and examples will be language-neutral. Consider creating a project-level override at `.feature-forge/stack-decisions.md`." Then load `references/stacks/_generic.md`.
72
72
 
73
73
  ## Step 3: Conduct the Interview
74
74
 
@@ -76,17 +76,18 @@ Interview the user about technology decisions. Unlike the PRD interview, here yo
76
76
 
77
77
  ### Interview Approach
78
78
 
79
- **Turn structure:** Output your research findings, analysis, or technical proposals as regular text. Then use `AskUserQuestion` for the actual questions. NEVER put questions in your text output — they MUST go through `AskUserQuestion`.
79
+ **Turn structure:** Output your research findings, analysis, or technical proposals as regular text. Then use the host's question mechanism for the actual questions. NEVER put questions in your text output — they MUST go through the host's question mechanism.
80
80
 
81
- **Pacing:** Present 1-2 decision areas per `AskUserQuestion` call and STOP to wait for the user's response before continuing. After receiving answers, probe deeper on anything incomplete before moving to the next topic. Signal progress in your text before the next question batch. Do NOT dump all decision areas in a single message — the interview is a conversation, not a document.
81
+ **Pacing:** Present 1-2 decision areas per the host's question mechanism call and STOP to wait for the user's response before continuing. After receiving answers, probe deeper on anything incomplete before moving to the next topic. Signal progress in your text before the next question batch. Do NOT dump all decision areas in a single message — the interview is a conversation, not a document.
82
82
 
83
- **First message pattern:** Output the research summary as text, then use `AskUserQuestion` to confirm the stack and ask about the first decision area (typically package/module structure). Wait for the user to respond before proceeding to subsequent areas.
83
+ **First message pattern:** Output the research summary as text, then use the host's question mechanism to confirm the stack and ask about the first decision area (typically package/module structure). Wait for the user to respond before proceeding to subsequent areas.
84
84
 
85
- **Question strategies** (use these as content for `AskUserQuestion`, not as inline prose):
86
- - For each PRD requirement, propose a technical approach and ask for confirmation or alternatives
87
- - Proactively suggest approaches consistent with the established stack
88
- - Challenge over-engineering: does the feature need this, or is a simpler approach sufficient?
89
- - Ask about every integration point and how the feature interacts with existing modules
85
+ **Question strategies** (use these as content for the host's question mechanism, not as inline prose). Follow the **Decision Support** protocol in `references/shared-conventions.md` — this interview is the richest decision surface in the pipeline, so don't just list options; lead with a recommended approach, put the trade-off in each option's description, and give a one-line rationale:
86
+ - For each PRD requirement, propose a technical approach **with its trade-off and your recommendation**, then ask for confirmation or alternatives — don't present competing approaches flatly. You've just researched the codebase; spend that research here.
87
+ - Recommend approaches consistent with the established stack, and say *why* the convention favors it (evidence-backed mode). Where the choice is genuine taste (e.g. folder layout, naming), give a default but flag it as preference.
88
+ - Challenge over-engineering: does the feature need this, or is a simpler approach sufficient? Frame the simpler option's trade-off (less flexibility now vs. less to maintain).
89
+ - Ask about every integration point and how the feature interacts with existing modules.
90
+ - For competing module structures or code-shape choices, use the the host's question mechanism `preview` field to show the candidates side-by-side.
90
91
 
91
92
  **Parking lot:** If the user raises a concern that belongs to a different pipeline stage (e.g., backlog granularity, documentation format), acknowledge it and note it in the pipeline state's `notes` field: "Good point — I've noted that for the [specs/backlog/docs stage]. Let's continue with the tech spec."
92
93
 
@@ -174,7 +175,7 @@ Present the complete tech spec. Ask:
174
175
  - "Any patterns from the existing codebase I missed?"
175
176
  - "Are the integration points complete?"
176
177
 
177
- Use `AskUserQuestion` to collect this feedback.
178
+ Use the host's question mechanism to collect this feedback.
178
179
 
179
180
  ## Step 7: Update Pipeline State and Commit
180
181
 
@@ -185,7 +186,7 @@ Write pipeline state conforming to `references/pipeline-state-schema.json`.
185
186
  - Record `artifacts`, `completedAt`, `version`
186
187
  - Set `stages.forge-2-tech.basedOnVersions` to `{"forge-1-prd": <current forge-1-prd version>}`
187
188
  - Check downstream stages (forge-3-specs, forge-4-backlog, forge-5-loop, forge-6-docs). If any have `basedOnVersions` referencing an older version of forge-2-tech, set their status to `stale`
188
- 2. Use `AskUserQuestion` to ask about notes to persist
189
+ 2. Use the host's question mechanism to ask about notes to persist
189
190
  3. If `gitCommitAfterStage` is true, follow the Git Commit Protocol in `references/shared-conventions.md`: stage files, attempt commit with message `"{commitPrefix}({feature}): complete tech-spec v{n}"`, then set `stages.forge-2-tech.status` to `complete` with commit hash only on success. If commit fails, leave status as `in-progress`.
190
191
  5. Tell the user: "Tech spec complete. Next steps:\n - `/feature-forge:forge-verify {feature}` to verify the tech spec\n - `/feature-forge:forge-3-specs {feature}` to create implementation specs\n - `/feature-forge:forge {feature}` to see full pipeline status"
191
192
 
@@ -195,3 +196,13 @@ Write pipeline state conforming to `references/pipeline-state-schema.json`.
195
196
  - When the user's stack decisions differ from what you'd recommend, document their choice AND note your concern as an "Alternatives Considered" item — don't silently override their preference.
196
197
  - Integration points are the #1 source of implementation surprises. Spend extra time here. Read the actual code of packages this feature touches, don't just guess at their APIs.
197
198
  - If the existing codebase has inconsistent patterns (it happens), call it out and ask which pattern should be followed for this feature.
199
+
200
+ ---
201
+
202
+ ## Host execution notes (Codex)
203
+
204
+ This skill was authored Claude-first; the body above refers to "the host's question mechanism", "the host's subagent mechanism", and "the host's background-execution mechanism". On Codex:
205
+
206
+ - **User input:** Codex has no structured question tool — ask the question directly and wait for the user's reply before proceeding. Never skip a required question or assume an answer.
207
+ - **Subagents:** spawn a Codex subagent using the named custom agent under `.codex/agents/<name>.toml`. Codex spawns a subagent only when explicitly asked; if the custom agent is unavailable, run that step inline yourself.
208
+ - **Background / monitoring:** run long-lived runner commands in your shell session and report progress as it arrives — there is no Claude-style background or monitoring tool to arm.
@@ -1,16 +1,16 @@
1
1
  # Stack Discovery Checklist (Plugin Default)
2
2
 
3
- This file contains a default stack discovery protocol for the feature-forge plugin. Projects can override this by placing a `stack-decisions.md` in `.claude/references/` at the project root.
3
+ This file contains a default stack discovery protocol for the feature-forge plugin. Projects can override this by placing a `stack-decisions.md` at `.feature-forge/stack-decisions.md` (preferred; legacy alias `.claude/references/stack-decisions.md`) in the project root.
4
4
 
5
5
  ## Note to Agent
6
6
 
7
- This is a DISCOVERY PROTOCOL — it helps you identify what stack the project uses. It is NOT a set of decisions. Always check `.claude/references/stack-decisions.md` first — if present, it takes precedence.
7
+ This is a DISCOVERY PROTOCOL — it helps you identify what stack the project uses. It is NOT a set of decisions. Always check for a project stack-decisions file first (`.feature-forge/stack-decisions.md`, then `.agents/references/stack-decisions.md`, then the legacy `.claude/references/stack-decisions.md`) — if present, it takes precedence.
8
8
 
9
9
  After discovering the stack, check if `references/stacks/{stack}.md` exists in the plugin for stack-specific guidance. See `references/stack-resolution.md` for the full resolution protocol.
10
10
 
11
11
  ## Purpose
12
12
 
13
- This is a default discovery guide for understanding a project's technology stack. Projects should create `.claude/references/stack-decisions.md` with their actual stack decisions, which takes precedence over this checklist.
13
+ This is a default discovery guide for understanding a project's technology stack. Projects should create `.feature-forge/stack-decisions.md` (legacy alias: `.claude/references/stack-decisions.md`) with their actual stack decisions, which takes precedence over this checklist.
14
14
 
15
15
  ## Stack Discovery Protocol
16
16
 
@@ -68,7 +68,7 @@ Examine the dependency manifest for:
68
68
 
69
69
  ## How to Create a Project-Level Override
70
70
 
71
- Create `.claude/references/stack-decisions.md` in your project root with your specific stack decisions. See `references/stacks/typescript.md` or `references/stacks/python.md` for stack-specific examples of what to include.
71
+ Create `.feature-forge/stack-decisions.md` (legacy alias: `.claude/references/stack-decisions.md`) in your project root with your specific stack decisions. See `references/stacks/typescript.md` or `references/stacks/python.md` for stack-specific examples of what to include.
72
72
 
73
73
  ```markdown
74
74
  # Stack Decisions
@@ -12,7 +12,7 @@ Generate a comprehensive suite of numbered implementation specification document
12
12
 
13
13
  Read and follow `references/shared-conventions.md` for feature name validation, configuration reading, and force mode handling before proceeding.
14
14
 
15
- **Turn structure reminder:** Output analysis/context as text, then route ALL questions through `AskUserQuestion`. Never embed questions in text output — the user will not be prompted and the session will stall.
15
+ **Turn structure reminder:** Output analysis/context as text, then route ALL questions through the host's question mechanism. Never embed questions in text output — the user will not be prompted and the session will stall.
16
16
 
17
17
  ## Step 1: Validate Prerequisites
18
18
 
@@ -36,7 +36,7 @@ After reading the PRD and tech spec, invoke the **Epic Context Injection** block
36
36
 
37
37
  Read `references/spec-archetypes.md` for the menu of document types.
38
38
 
39
- Based on the feature's complexity, propose a document plan to the user before writing. Output the document list as text, then use `AskUserQuestion` for the question — do NOT include the question in your text output.
39
+ Based on the feature's complexity, propose a document plan to the user before writing. Output the document list as text, then use the host's question mechanism for the question — do NOT include the question in your text output.
40
40
 
41
41
  **Example text output (no question here):**
42
42
  ```
@@ -53,7 +53,7 @@ Feature-specific:
53
53
  04-integration-points.md — Integration with existing project modules
54
54
  ```
55
55
 
56
- **Then call `AskUserQuestion`** with: "Does this look right? Should I add or remove any documents?"
56
+ **Then call the host's question mechanism** following the **Decision Support** protocol in `references/shared-conventions.md`: recommend this plan as the default (it's your evidence-backed read of the feature's complexity) and name the trade-off so the user can push back knowingly — more documents means finer separation of concerns but more to keep in sync; fewer means tighter docs but risks one document carrying multiple concerns. Lead with: "I recommend this plan. Add or remove any documents?" Note the guidance below — resist splitting a concern into a sub-50-line document.
57
57
 
58
58
  **Incremental artifact tracking:** After each spec document is written (by you or a writer subagent), immediately update the `artifacts` array in `.pipeline-state.json` with the new file path. This enables crash recovery if the session is interrupted mid-suite (see shared-conventions.md "Crash Recovery").
59
59
 
@@ -72,7 +72,7 @@ and the directory/exports map, so they must exist and be stable first.
72
72
  ### 4b. Domain fan-out (parallel `forge-spec-writer` subagents)
73
73
 
74
74
  Once the foundation is written, dispatch the remaining numbered docs in parallel — **one
75
- `forge-spec-writer` subagent per document, in a single message with multiple Agent
75
+ `forge-spec-writer` subagent per document, in a single message with multiple subagent
76
76
  calls** (the `superpowers:dispatching-parallel-agents` pattern). Each writer is given:
77
77
  - the PRD and tech-spec,
78
78
  - the just-written `00-core-definitions.md` and `01-architecture-layout.md` (so it builds
@@ -127,7 +127,7 @@ List any gaps or inconsistencies found and resolve them.
127
127
 
128
128
  ## Step 6: Review with User
129
129
 
130
- Present a summary of all documents created as text, with key decisions highlighted. Then use `AskUserQuestion` to collect feedback — do NOT include these questions in your text output:
130
+ Present a summary of all documents created as text, with key decisions highlighted. Then use the host's question mechanism to collect feedback — do NOT include these questions in your text output:
131
131
 
132
132
  "1. Does the level of detail match what you need? 2. Any areas that need more depth? 3. Any missing subsystems or concerns?"
133
133
 
@@ -140,7 +140,7 @@ Write pipeline state conforming to `references/pipeline-state-schema.json`.
140
140
  - Record all created files in `artifacts`, including `TRACEABILITY.md`
141
141
  - Set `stages.forge-3-specs.basedOnVersions` to `{"forge-1-prd": <current version>, "forge-2-tech": <current version>}`
142
142
  - Check downstream stages (forge-4-backlog, forge-5-loop, forge-6-docs). If any have `basedOnVersions` referencing older versions, set their status to `stale`
143
- 2. Use `AskUserQuestion` to ask about notes to persist
143
+ 2. Use the host's question mechanism to ask about notes to persist
144
144
  3. If `gitCommitAfterStage` is true, follow the Git Commit Protocol in `references/shared-conventions.md`: stage files, attempt commit with message `"{commitPrefix}({feature}): complete implementation specs v{n}"`, then set `stages.forge-3-specs.status` to `complete` with commit hash only on success. If commit fails, leave status as `in-progress`.
145
145
  5. Tell the user: "Implementation specs complete. Next steps:\n - `/feature-forge:forge-verify {feature}` to verify the specs (strongly recommended)\n - `/feature-forge:forge-4-backlog {feature}` to generate the backlog\n - `/feature-forge:forge {feature}` to see full pipeline status"
146
146
 
@@ -151,3 +151,13 @@ Write pipeline state conforming to `references/pipeline-state-schema.json`.
151
151
  - Resist the urge to create too many documents. Each document should represent a major concern. If a "document" would be under 50 lines, it probably belongs as a section in another document.
152
152
  - Watch for implicit dependencies between subsystems. If subsystem A's types are used by subsystem B, the spec should explicitly state this and ensure the types are defined in the shared types document.
153
153
  - If the feature is large, the spec suite might be 8-12 documents. If it's simple, 3-4 is fine. Match complexity to the feature, not a fixed template.
154
+
155
+ ---
156
+
157
+ ## Host execution notes (Codex)
158
+
159
+ This skill was authored Claude-first; the body above refers to "the host's question mechanism", "the host's subagent mechanism", and "the host's background-execution mechanism". On Codex:
160
+
161
+ - **User input:** Codex has no structured question tool — ask the question directly and wait for the user's reply before proceeding. Never skip a required question or assume an answer.
162
+ - **Subagents:** spawn a Codex subagent using the named custom agent under `.codex/agents/<name>.toml`. Codex spawns a subagent only when explicitly asked; if the custom agent is unavailable, run that step inline yourself.
163
+ - **Background / monitoring:** run long-lived runner commands in your shell session and report progress as it arrives — there is no Claude-style background or monitoring tool to arm.
@@ -30,7 +30,7 @@ This is the **single** place this rule is implemented. forge-5-loop's backlog-fi
30
30
 
31
31
  Resolve the **loop runner** from the `loopRunner` block in `forge.config.json`, filling missing fields from the defaults in `references/forge-config-schema.json` (defaults to rauf). You need its `bin`, `validateCommand`, `versionCommand`, `minRunnerVersion`, and `installHint`.
32
32
 
33
- **Turn structure reminder:** Output analysis/context as text, then route ALL questions through `AskUserQuestion`. Never embed questions in text output — the user will not be prompted and the session will stall.
33
+ **Turn structure reminder:** Output analysis/context as text, then route ALL questions through the host's question mechanism. Never embed questions in text output — the user will not be prompted and the session will stall.
34
34
 
35
35
  ## Step 1: Validate Prerequisites
36
36
 
@@ -38,7 +38,7 @@ Resolve the **loop runner** from the `loopRunner` block in `forge.config.json`,
38
38
 
39
39
  **Prerequisite check:** Read `{resolvedFeatureDir}/.pipeline-state.json`. If not in force mode, stages `forge-1-prd`, `forge-2-tech`, and `forge-3-specs` must all be `complete`. If not, STOP and tell the user which prerequisites are missing.
40
40
 
41
- **Strongly recommended:** Check if specs have been verified. If not, use `AskUserQuestion` to warn: "Specs haven't been verified yet. It's recommended to run `/feature-forge:forge-verify {feature}` first. Continue anyway?"
41
+ **Strongly recommended:** Check if specs have been verified. If not, use the host's question mechanism to warn with the cost of skipping: "Specs haven't been verified yet. Recommended: run `/feature-forge:forge-verify {feature}` first — unverified specs can carry gaps or contradictions that get baked into backlog items and only surface mid-loop, where they're far more expensive to fix. Continue anyway?" Offer **Verify first (recommended)** · **Continue without verifying**.
42
42
 
43
43
  ## Step 2: Load All Specs
44
44
 
@@ -67,7 +67,7 @@ Proposed backlog for {feature} ({N} items):
67
67
  ...
68
68
  ```
69
69
 
70
- After presenting the plan as text, use `AskUserQuestion` to ask: "Does this breakdown look right? Any items to split, merge, or reorder?" Do NOT include this question in your text output. Wait for the user's response before generating the JSON.
70
+ After presenting the plan as text, use the host's question mechanism following the **Decision Support** protocol in `references/shared-conventions.md`: recommend this breakdown as the default (it's your evidence-backed read of the specs and dependency order) and name the trade-off that governs item granularity — finer items are each easier to verify in one loop iteration but multiply coordination and dependency edges; coarser items mean fewer handoffs but risk an item too big to complete or verify in a single iteration. Lead with: "I recommend this breakdown. Any items to split, merge, or reorder?" Do NOT include this question in your text output. Wait for the user's response before generating the JSON.
71
71
 
72
72
  ## Step 4: Author backlog.json — delegate to `author-backlog`
73
73
 
@@ -122,7 +122,7 @@ Interpret the result:
122
122
 
123
123
  Present a summary: total items N, dependency-chain depth, estimated loop iterations (`ceil(pendingItems * loopIterationMultiplier)`). Note whether validation passed or was skipped (runner not yet available).
124
124
 
125
- Use `AskUserQuestion` to ask: "Ready to proceed, or any adjustments needed?"
125
+ Use the host's question mechanism to ask: "Ready to proceed, or any adjustments needed?"
126
126
 
127
127
  ## Step 7: Update Pipeline State and Commit
128
128
 
@@ -133,7 +133,7 @@ Write pipeline state conforming to `references/pipeline-state-schema.json`. Foll
133
133
  - Set `stages.forge-4-backlog.basedOnVersions` to `{"forge-1-prd": <current version>, "forge-2-tech": <current version>, "forge-3-specs": <current version>}`
134
134
  - Set `currentStage` to `forge-5-loop`
135
135
  - Check downstream stages (`forge-5-loop`, `forge-6-docs`). If any have `basedOnVersions` referencing an older version of `forge-4-backlog`, set their status to `stale`.
136
- 2. Use `AskUserQuestion` to ask about notes to persist
136
+ 2. Use the host's question mechanism to ask about notes to persist
137
137
  3. If `gitCommitAfterStage` is true, follow the Git Commit Protocol: stage files, attempt commit, then set status to `complete` with commit hash only on success. If commit fails, leave status as `in-progress`.
138
138
  4. If verification was available but the user chose to skip it, record `stages.forge-verify-backlog.status` as `"skipped"` in pipeline state.
139
139
  5. Tell user: "Backlog complete with {N} items. Next steps:\n - `/feature-forge:forge-verify {feature}` to verify the backlog\n - `/feature-forge:forge-5-loop {feature}` to run the loop\n - `/feature-forge:forge {feature}` to see full pipeline status"
@@ -143,3 +143,13 @@ Write pipeline state conforming to `references/pipeline-state-schema.json`. Foll
143
143
  - The loop runs each item in a FRESH context. Every item description must be self-contained — `author-backlog` enforces this, but double-check Step-3 plan items aren't "same as above."
144
144
  - Spec references must be project-root-relative paths that actually exist — the validate command enforces this when `--specs-dir` is passed (resolving them from the project root).
145
145
  - Don't present a backlog to the user before it validates (or before you've explicitly recorded that validation was skipped because the runner isn't installed yet).
146
+
147
+ ---
148
+
149
+ ## Host execution notes (Codex)
150
+
151
+ This skill was authored Claude-first; the body above refers to "the host's question mechanism", "the host's subagent mechanism", and "the host's background-execution mechanism". On Codex:
152
+
153
+ - **User input:** Codex has no structured question tool — ask the question directly and wait for the user's reply before proceeding. Never skip a required question or assume an answer.
154
+ - **Subagents:** spawn a Codex subagent using the named custom agent under `.codex/agents/<name>.toml`. Codex spawns a subagent only when explicitly asked; if the custom agent is unavailable, run that step inline yourself.
155
+ - **Background / monitoring:** run long-lived runner commands in your shell session and report progress as it arrives — there is no Claude-style background or monitoring tool to arm.
@@ -35,7 +35,7 @@ Token substitution applies to every `*Command` string. Substitute:
35
35
  Whenever this skill says "run the **run command**" / "**status command**" /
36
36
  etc., it means the corresponding substituted `loopRunner.*Command`.
37
37
 
38
- **Turn structure reminder:** Output analysis/context as text, then route ALL questions through `AskUserQuestion`. Never embed questions in text output — the user will not be prompted and the session will stall.
38
+ **Turn structure reminder:** Output analysis/context as text, then route ALL questions through the host's question mechanism. Never embed questions in text output — the user will not be prompted and the session will stall.
39
39
 
40
40
  ## Step 1: Validate Prerequisites
41
41
 
@@ -49,9 +49,9 @@ Read `{resolvedFeatureDir}/.pipeline-state.json`. If not in force mode, `stages.
49
49
 
50
50
  ### 1b. Verification Check
51
51
 
52
- Check if `stages.forge-verify-backlog` exists and has status `passed` or `findings-applied`. If not, use `AskUserQuestion` to warn:
52
+ Check if `stages.forge-verify-backlog` exists and has status `passed` or `findings-applied`. If not, use the host's question mechanism to warn:
53
53
 
54
- "Backlog hasn't been verified yet. It's recommended to run `/feature-forge:forge-verify {feature}` first to catch issues before implementation. Continue anyway?"
54
+ "Backlog hasn't been verified yet. Recommended: run `/feature-forge:forge-verify {feature}` first — the loop implements items autonomously and commits as it goes, so a bad item (wrong scope, missing dependency, untestable acceptance criteria) is far cheaper to catch now than after several commits build on it. Continue anyway?" Offer **Verify first (recommended)** · **Continue without verifying**.
55
55
 
56
56
  ### 1b-epic. Epic Dependency Gate
57
57
 
@@ -60,7 +60,7 @@ Read the resolved feature's `.pipeline-state.json`. **If it has no `epic` key, s
60
60
  1. Run `render-status "{epic}" --specs-dir "{specsDir}" --json` via the helper:
61
61
 
62
62
  ```bash
63
- R="$(for d in "$HOME"/.claude/skills/feature-forge "$HOME"/.claude/plugins/*/feature-forge; do [ -x "$d/scripts/forge-root.sh" ] && exec "$d/scripts/forge-root.sh"; done)"
63
+ R="$(for d in "$HOME"/.claude/skills/feature-forge "$HOME"/.claude/plugins/*/feature-forge "$HOME"/.agents/skills/feature-forge ./.agents/skills/feature-forge; do [ -x "$d/scripts/forge-root.sh" ] && exec "$d/scripts/forge-root.sh"; done)"
64
64
  [ -n "$R" ] || { echo "feature-forge: cannot locate plugin root" >&2; exit 1; }
65
65
  python3 "$R/scripts/epic-manifest.py" \
66
66
  render-status "{epic}" --specs-dir "{specsDir}" --json
@@ -68,7 +68,7 @@ python3 "$R/scripts/epic-manifest.py" \
68
68
 
69
69
  2. Find this feature's entry; read its `unmetDeps` (the direct `dependsOn` not yet complete-for-orchestration per `00-core-definitions.md §7`).
70
70
  3. **If `unmetDeps` is empty**, proceed to 1c with no prompt.
71
- 4. **If `unmetDeps` is non-empty**, use `AskUserQuestion` (do NOT inline the question as prose) to warn that the feature depends on the unmet dependencies, which are not yet complete, and that running the loop now means implementing against contracts that may still change:
71
+ 4. **If `unmetDeps` is non-empty**, use the host's question mechanism (do NOT inline the question as prose) to warn that the feature depends on the unmet dependencies, which are not yet complete, and that running the loop now means implementing against contracts that may still change:
72
72
 
73
73
  > "{feature} depends on {unmetDeps joined}, which are not yet complete. Running the loop now means implementing against contracts that may still change. Proceed anyway, or stop and finish the dependencies first?"
74
74
 
@@ -113,7 +113,7 @@ Verify the file exists on disk. If not, STOP and tell the user: "No backlog.json
113
113
 
114
114
  ### 1f. Branch Pre-flight (if using git)
115
115
 
116
- The runner commits each completed item straight onto the current branch, so guard against committing onto the default branch. Skip if not a git repo or `branchPerFeature` is false. Read the current branch (`git rev-parse --abbrev-ref HEAD`) and default branch (`git symbolic-ref --quiet refs/remotes/origin/HEAD`, else `main`/`master`). If `.pipeline-state.json` records a `branch` that differs from the current one, warn via `AskUserQuestion` (offer **switch back** or **proceed here**). Otherwise, if the current branch **is** the default, strongly recommend via `AskUserQuestion` creating/switching to `{branchPrefix}{feature}` (`git switch -c`, then record it to the state `branch` field) before the loop commits — still allowing **proceed on `{defaultBranch}`**. Never hard-stop.
116
+ The runner commits each completed item straight onto the current branch, so guard against committing onto the default branch. Skip if not a git repo or `branchPerFeature` is false. Read the current branch (`git rev-parse --abbrev-ref HEAD`) and default branch (`git symbolic-ref --quiet refs/remotes/origin/HEAD`, else `main`/`master`). If `.pipeline-state.json` records a `branch` that differs from the current one, warn via the host's question mechanism (offer **switch back** or **proceed here**). Otherwise, if the current branch **is** the default, strongly recommend via the host's question mechanism creating/switching to `{branchPrefix}{feature}` (`git switch -c`, then record it to the state `branch` field) before the loop commits — still allowing **proceed on `{defaultBranch}`**. Never hard-stop.
117
117
 
118
118
  ## Step 2: Construct the Loop Command
119
119
 
@@ -146,7 +146,7 @@ rauf loop run . --backlog specs/auth --iterations 15
146
146
 
147
147
  ### 2d. Confirm with User
148
148
 
149
- Use `AskUserQuestion` to present the rendered run command and options. The following block is the content for `AskUserQuestion` — do NOT output it as text:
149
+ Use the host's question mechanism to present the rendered run command and options. The following block is the content for the host's question mechanism — do NOT output it as text:
150
150
 
151
151
  ```
152
152
  Ready to run the loop for {feature}:
@@ -175,10 +175,10 @@ For the full loop-runner contract — event-stream vs. log-fallback launch, the
175
175
  **Capability gate.** Everything below applies **only when** the effective `loopRunner.agentArgument` is present and non-empty. **When it is absent or empty, Step 2d is exactly the confirmation above — no probe, no agent question, no availability listing, no `Agent:` line — byte-identical to today** (REQ-PLUG-02, REQ-COMPAT-01). The full algorithm, precedence, and verbatim message shapes are in `## Agent selection` of `references/runner-contract.md`; read it. When the gate is on, augment Step 2d in order:
176
176
 
177
177
  - **(a) Probe once.** Before confirming, run `loopRunner.agentsProbeCommand` (default `{bin} agents --json`) **exactly once** (no retries, no second probe); it exits 0 with `{ agents: [...] }`. Parse `agents[]`; build the advertised set `{ row.id }` — this one parsed array drives (b)–(d).
178
- - **(b) Agent question.** Add an **"agent"** question to the same `AskUserQuestion` surface: **one option per advertised row** labelled `"{displayName} ({id}) — available/not found"`, **plus an explicit `"default (claude-cli)"` choice mapping to `run_selection = None`**. Resolve the pick (run > project, empty/whitespace unset, an explicit runner-default pick collapses to the default path) into `{resolved.agent, resolved.source}`. Precedence: `item.provider > --agent > project defaultAgent > runner default` (forge never reads a backlog item's provider).
178
+ - **(b) Agent question.** Add an **"agent"** question to the same the host's question mechanism surface: **one option per advertised row** labelled `"{displayName} ({id}) — available/not found"`, **plus an explicit `"default (claude-cli)"` choice mapping to `run_selection = None`**. Resolve the pick (run > project, empty/whitespace unset, an explicit runner-default pick collapses to the default path) into `{resolved.agent, resolved.source}`. Precedence: `item.provider > --agent > project defaultAgent > runner default` (forge never reads a backlog item's provider).
179
179
  - **(c) Availability listing.** From the **same** parsed `agents[]` (no second probe), list `id` / `displayName` / available (`yes`/`no`, `detail` on unavailable rows).
180
- - **(d) Verdict** — only for a **non-default** resolved agent (default path `None`/`claude-cli` → no probe, byte-identical to today). Classify by **membership** then `available` (never by exit code): **UNKNOWN** (`∉` set) → **hard-reject BEFORE any loop side-effect**, error lists the **sorted** valid ids, **NO proceed-anyway**; **UNAVAILABLE** (member, `available False`) → warn with `detail`, `AskUserQuestion` offering **proceed-anyway OR choose-another** (re-presents the same `agents[]`), never silent; **AVAILABLE** → proceed, the validated id fills `{agent}`; **probe failure** (non-zero exit / unparseable / missing or empty `agents[]` / row lacking `id`) → surface it, offer **choose-another OR abort**, **never launch the non-default agent unvalidated** and never silently fall back to the default.
181
- - **(d-model) Claude-only model-alias guard.** Runs **only** when the resolved agent is **non-default** (not the default / `claude-cli` path). Read the backlog.json (Step 1e path); collect items whose `model` is a **Claude-specific alias** (tier `opus`/`sonnet`/`haiku` or a `claude-*` id). **If none, skip silently.** Otherwise warn before launch via `AskUserQuestion` (NOT prose): `item.model` outranks `--agent`, so the alias is forwarded verbatim to `{agent}`, which will likely reject it (e.g. codex 400 *"The 'sonnet' model is not supported…"*) — every spawn exits 1 and rauf circuit-breaks (*"3 consecutive infra failures — halting"*) with no hint of the cause. Offer: **(1) Strip `model` for this run (recommended)** — rewrite backlog.json removing the `model` key from each affected item (persistent edit; re-run forge-4-backlog to restore), then proceed; **(2) Proceed as-is** — only safe if `{agent}` understands the pinned ids. forge touches only `model`, never `provider`. Full rationale: `references/runner-contract.md`.
180
+ - **(d) Verdict** — only for a **non-default** resolved agent (default path `None`/`claude-cli` → no probe, byte-identical to today). Classify by **membership** then `available` (never by exit code): **UNKNOWN** (`∉` set) → **hard-reject BEFORE any loop side-effect**, error lists the **sorted** valid ids, **NO proceed-anyway**; **UNAVAILABLE** (member, `available False`) → warn with `detail`, the host's question mechanism offering **proceed-anyway OR choose-another** (re-presents the same `agents[]`), never silent; **AVAILABLE** → proceed, the validated id fills `{agent}`; **probe failure** (non-zero exit / unparseable / missing or empty `agents[]` / row lacking `id`) → surface it, offer **choose-another OR abort**, **never launch the non-default agent unvalidated** and never silently fall back to the default.
181
+ - **(d-model) Claude-only model-alias guard.** Runs **only** when the resolved agent is **non-default** (not the default / `claude-cli` path). Read the backlog.json (Step 1e path); collect items whose `model` is a **Claude-specific alias** (tier `opus`/`sonnet`/`haiku` or a `claude-*` id). **If none, skip silently.** Otherwise warn before launch via the host's question mechanism (NOT prose): `item.model` outranks `--agent`, so the alias is forwarded verbatim to `{agent}`, which will likely reject it (e.g. codex 400 *"The 'sonnet' model is not supported…"*) — every spawn exits 1 and rauf circuit-breaks (*"3 consecutive infra failures — halting"*) with no hint of the cause. Offer: **(1) Strip `model` for this run (recommended)** — rewrite backlog.json removing the `model` key from each affected item (persistent edit; re-run forge-4-backlog to restore), then proceed; **(2) Proceed as-is** — only safe if `{agent}` understands the pinned ids. forge touches only `model`, never `provider`. Full rationale: `references/runner-contract.md`.
182
182
  - **(e) Optional-flags line.** Replace the confirmation's optional-flags line with one that lists `--agent <id>` first plus the agent precedence pointer (`item.provider > --agent > project defaultAgent > runner default`) alongside the model precedence.
183
183
  - **(f) Resolved-agent line.** Add to the confirmation block: `Agent: {resolved.agent or claude-cli} (source: {sourceLabel})` — `sourceLabel`: `RUN` → `"per-run selection"`, `PROJECT` → `"project default (loopRunner.defaultAgent)"`, `DEFAULT` → `"runner default — claude-cli"`.
184
184
 
@@ -196,7 +196,7 @@ Then commit this state write before launching (mandatory). The runner refuses to
196
196
 
197
197
  ### 3b. Launch Background Process
198
198
 
199
- Launch the loop **backgrounded** (`run_in_background: true`) so it survives session end and does not block the session, and prefer the machine-readable event stream (`loopRunner.eventStreamCommand`, default for rauf) redirected to a stable `events.ndjson` so the session can supervise it live; fall back to the plain `runCommand` (tailing the human log) when no `eventStreamCommand` is configured. The background task's exit notification is the single authoritative terminal signal (Step 4). Loop runs can take significant time (minutes to hours depending on backlog size). For the exact launch commands (incl. the `mkdir -p` state-dir guard) and the event-stream vs. log-fallback detail, read `references/runner-contract.md`.
199
+ Launch the loop **backgrounded** (the host's background-execution mechanism) so it survives session end and does not block the session, and prefer the machine-readable event stream (`loopRunner.eventStreamCommand`, default for rauf) redirected to a stable `events.ndjson` so the session can supervise it live; fall back to the plain `runCommand` (tailing the human log) when no `eventStreamCommand` is configured. The background task's exit notification is the single authoritative terminal signal (Step 4). Loop runs can take significant time (minutes to hours depending on backlog size). For the exact launch commands (incl. the `mkdir -p` state-dir guard) and the event-stream vs. log-fallback detail, read `references/runner-contract.md`.
200
200
 
201
201
  ### 3c. Inform User
202
202
 
@@ -210,9 +210,9 @@ verbatim "Loop started…" inform-user output template is in
210
210
 
211
211
  ### 3d. Arm a Monitor on the event stream, and react to events
212
212
 
213
- Arm the **`Monitor` tool** on the structured event stream (the NDJSON file, or the
213
+ Arm the **the host's monitoring mechanism** on the structured event stream (the NDJSON file, or the
214
214
  human log as fallback) so events flow back into this session as they happen. Use
215
- **`persistent: true`** — runs can exceed `Monitor`'s maximum `timeout_ms` (1 hour),
215
+ **`persistent: true`** — runs can exceed the host's monitoring mechanism's maximum `timeout_ms` (1 hour),
216
216
  and a bounded timeout would silently stop watching a still-running loop. The filter
217
217
  MUST match every terminal and exception state, not just the happy path (silence is
218
218
  not success). Monitor the **structured** surface, never raw `RAUF_*` tokens.
@@ -270,13 +270,13 @@ Update `{resolvedFeatureDir}/.pipeline-state.json`:
270
270
 
271
271
  ## Step 5b: Offer Impl-Verify (standalone path)
272
272
 
273
- **Gate:** run only if (a) the feature's `.pipeline-state.json` has **no** `epic` key **and** (b) Step 5 set `stages.forge-5-loop.status` to `complete`. Otherwise **skip** — partial runs end as today, and epic members get the equivalent offer in Step 6.1 (do **not** prompt twice). This standalone counterpart to Step 6.1 nudges verification interactively rather than via the easily-missed "Next steps" text. Use `AskUserQuestion` (NOT inline prose) to offer: *"{feature}'s loop is complete. Recommended: run `/feature-forge:forge-verify {feature} impl` to audit the implementation before generating docs. Run it now, or skip to forge-6-docs?"* On **run**, hand off to `/feature-forge:forge-verify {feature} impl`. On **skip**, record `stages.forge-verify-impl.status` as `"skipped"` (mirrors `forge-4-backlog`'s skip handling) and point the user at `/feature-forge:forge-6-docs {feature}` — the forge-6-docs backstop re-surfaces the skip.
273
+ **Gate:** run only if (a) the feature's `.pipeline-state.json` has **no** `epic` key **and** (b) Step 5 set `stages.forge-5-loop.status` to `complete`. Otherwise **skip** — partial runs end as today, and epic members get the equivalent offer in Step 6.1 (do **not** prompt twice). This standalone counterpart to Step 6.1 nudges verification interactively rather than via the easily-missed "Next steps" text. Use the host's question mechanism (NOT inline prose) to offer: *"{feature}'s loop is complete. Recommended: run `/feature-forge:forge-verify {feature} impl` to audit the implementation before generating docs. Run it now, or skip to forge-6-docs?"* On **run**, hand off to `/feature-forge:forge-verify {feature} impl`. On **skip**, record `stages.forge-verify-impl.status` as `"skipped"` (mirrors `forge-4-backlog`'s skip handling) and point the user at `/feature-forge:forge-6-docs {feature}` — the forge-6-docs backstop re-surfaces the skip.
274
274
 
275
275
  ## Step 6: Epic Handoff
276
276
 
277
277
  **Gate:** only run this step if (a) the resolved feature's `.pipeline-state.json` has an `epic` key **and** (b) Step 5 set `stages.forge-5-loop.status` to `complete` (all backlog items done). If either is false, **skip** — standalone completed features are handled by Step 5b, and partial runs end as today (REQ-COMPAT-01).
278
278
 
279
- 1. **Offer impl-verify first (recommended, skippable).** Per the completion rule (`00-core-definitions.md §7`), a feature whose `forge-verify-impl.status == findings-reported` does **not** unblock dependents. Use `AskUserQuestion` (NOT inline prose) to offer:
279
+ 1. **Offer impl-verify first (recommended, skippable).** Per the completion rule (`00-core-definitions.md §7`), a feature whose `forge-verify-impl.status == findings-reported` does **not** unblock dependents. Use the host's question mechanism (NOT inline prose) to offer:
280
280
 
281
281
  > "{feature}'s loop is done. Recommended: run `/feature-forge:forge-verify {feature} impl` before unblocking dependents. Run it now, or skip and continue the handoff?"
282
282
 
@@ -286,7 +286,7 @@ Update `{resolvedFeatureDir}/.pipeline-state.json`:
286
286
  - **None actionable** (everything done, or remaining features still blocked): say so.
287
287
  - If `rollup.total > 0` **AND** `rollup.complete == rollup.total`, suggest `/feature-forge:forge-6-docs {feature}` and note the epic-level documentation offer (§10). The `rollup.total > 0` guard prevents an **empty epic** (`0 == 0`) from being reported complete.
288
288
  - Otherwise, list what is still blocked and on which dependencies. End — do not prompt to start a feature that cannot start.
289
- - **One or more actionable:** use `AskUserQuestion` presenting **each actionable feature** as an option (plus "stop here"). Execution is **serial** — the user picks exactly one (REQ-ORCH-03). Do **not** autonomously chain into the next pipeline.
289
+ - **One or more actionable:** use the host's question mechanism presenting **each actionable feature** as an option (plus "stop here"). Execution is **serial** — the user picks exactly one (REQ-ORCH-03). Do **not** autonomously chain into the next pipeline.
290
290
  4. **Begin the chosen feature.** For the picked feature:
291
291
  - **PRD absent** (no `PRD.md`, or `stages.forge-1-prd` not complete): offer to author it now — "Start `/feature-forge:forge-1-prd {chosen}`?" (REQ-ORCH-02). On yes, hand off to forge-1-prd (which injects epic context per §5.1).
292
292
  - **PRD present:** point the user at the chosen feature's `nextCommand` from render-status.
@@ -298,7 +298,17 @@ Update `{resolvedFeatureDir}/.pipeline-state.json`:
298
298
  - rauf resolves `RAUF.md` with fallback: checks `{backlogDir}/.rauf/RAUF.md` first, then the project's `.rauf/RAUF.md`. As long as the runner is installed in the project, the prompt template will be found.
299
299
  - State files (state.json, {loopRunner.logFile}, etc.) are created at `{backlogDir}/{loopRunner.stateDir}/` — this is within the feature's spec directory and is expected. State is isolated per backlog dir, so concurrent features don't collide.
300
300
  - If the session disconnects during a long-running loop, the runner process continues independently. The user can check results later with the status / list commands.
301
- - Never run the run command in the foreground (without `run_in_background`) — it blocks and will hit the Bash tool timeout for any non-trivial backlog. "Don't block the foreground" is NOT "stay silent": supervise via the `Monitor` tool (3d), never `sleep`/poll in the foreground. The `Monitor` must use `persistent: true` (not a bounded `timeout_ms`), watch the **structured** surface (`events.ndjson`), and never filter on raw `RAUF_*` tokens — they appear in agent prose and false-match. A `needs_human`/`blocked`/`review` signal does **not** pause the loop — the runner sets the item aside and keeps going; surface it live but don't tell the user the loop is waiting. See `references/runner-contract.md` for the full monitoring rules.
301
+ - Never run the run command in the foreground (without the host's background-execution mechanism) — it blocks and will hit the Bash tool timeout for any non-trivial backlog. "Don't block the foreground" is NOT "stay silent": supervise via the host's monitoring mechanism (3d), never `sleep`/poll in the foreground. The the host's monitoring mechanism must use `persistent: true` (not a bounded `timeout_ms`), watch the **structured** surface (`events.ndjson`), and never filter on raw `RAUF_*` tokens — they appear in agent prose and false-match. A `needs_human`/`blocked`/`review` signal does **not** pause the loop — the runner sets the item aside and keeps going; surface it live but don't tell the user the loop is waiting. See `references/runner-contract.md` for the full monitoring rules.
302
302
  - If a previous loop run left a stale lock, the user may need to pass `--force` to clear it. rauf will report this error clearly.
303
303
  - The version gate (1c) uses the `--json` form on purpose; never parse `rauf version`'s human output.
304
304
  - **Implementation artifacts must not cite specs.** The loop should **read** the specs and `backlog.json` freely — they are the source of truth for what to build, and the backlog rightly references specs for provenance. But the artifacts the loop **writes into the target repo** (source code, generated `SKILL.md`/agent files, configs, code comments) must be **self-contained**: they must NOT reference feature-forge spec files (no `See specs/{feature}/NN-*.md`, no "source spec" provenance notes in shipped output). Specs are pre-implementation inputs that may be archived or deleted once the feature ships; the implementation must stand on its own. This applies only to shipped implementation output — never to the backlog or spec documents, which should keep citing specs.
305
+
306
+ ---
307
+
308
+ ## Host execution notes (Codex)
309
+
310
+ This skill was authored Claude-first; the body above refers to "the host's question mechanism", "the host's subagent mechanism", and "the host's background-execution mechanism". On Codex:
311
+
312
+ - **User input:** Codex has no structured question tool — ask the question directly and wait for the user's reply before proceeding. Never skip a required question or assume an answer.
313
+ - **Subagents:** spawn a Codex subagent using the named custom agent under `.codex/agents/<name>.toml`. Codex spawns a subagent only when explicitly asked; if the custom agent is unavailable, run that step inline yourself.
314
+ - **Background / monitoring:** run long-lived runner commands in your shell session and report progress as it arrives — there is no Claude-style background or monitoring tool to arm.
@@ -12,7 +12,7 @@ Generate developer-focused architecture documentation for a feature, suitable fo
12
12
 
13
13
  Read and follow `references/shared-conventions.md` for feature name validation, configuration reading, and force mode handling before proceeding.
14
14
 
15
- **Turn structure reminder:** Output analysis/context as text, then route ALL questions through `AskUserQuestion`. Never embed questions in text output — the user will not be prompted and the session will stall.
15
+ **Turn structure reminder:** Output analysis/context as text, then route ALL questions through the host's question mechanism. Never embed questions in text output — the user will not be prompted and the session will stall.
16
16
 
17
17
  ## Step 1: Read Context
18
18
 
@@ -30,27 +30,27 @@ Load into context:
30
30
 
31
31
  ### Implementation Completeness Check
32
32
 
33
- Check `{resolvedFeatureDir}/backlog.json` (or `{backlogDir}/{feature}/backlog.json` if configured). Count items with status `complete` vs total. If implementation is less than 80% complete, use `AskUserQuestion` to warn: "Implementation is only N% complete. Documentation will be based primarily on specs and may need updates after implementation. Proceed?" If user proceeds, add a `PRE-IMPLEMENTATION` notice at the top of each generated doc.
33
+ Check `{resolvedFeatureDir}/backlog.json` (or `{backlogDir}/{feature}/backlog.json` if configured). Count items with status `complete` vs total. If implementation is less than 80% complete, use the host's question mechanism to warn: "Implementation is only N% complete. Documentation will be based primarily on specs and may need updates after implementation. Proceed?" If user proceeds, add a `PRE-IMPLEMENTATION` notice at the top of each generated doc.
34
34
 
35
35
  Also check `.pipeline-state.json` for `stages.forge-5-loop`. If it exists and has status `in-progress` (some items incomplete), include this in the warning: "The rauf loop has not fully completed — {done}/{total} items done. Documentation may need updates after remaining items are implemented."
36
36
 
37
37
  ### Impl-Verify Backstop
38
38
 
39
- Check `.pipeline-state.json` for `stages.forge-verify-impl`. If it is **absent** or has status `"skipped"`, use `AskUserQuestion` to warn: "Implementation hasn't been verified yet. It's recommended to run `/feature-forge:forge-verify {feature} impl` first to audit the loop's output. Generate docs anyway?" This mirrors `forge-4-backlog`'s pre-stage verification check and backstops a skipped impl-verify regardless of how the loop ended. If `stages.forge-verify-impl` shows it already ran (`findings-applied`, `findings-reported`, or `passed`), proceed with no warning.
39
+ Check `.pipeline-state.json` for `stages.forge-verify-impl`. If it is **absent** or has status `"skipped"`, use the host's question mechanism to warn with the cost of skipping: "Implementation hasn't been verified yet. Recommended: run `/feature-forge:forge-verify {feature} impl` first to audit the loop's output — docs generated over unverified code can document bugs or gaps as if they were intended behavior, and readers will trust them. Generate docs anyway?" Offer **Verify first (recommended)** · **Generate docs anyway**. This mirrors `forge-4-backlog`'s pre-stage verification check and backstops a skipped impl-verify regardless of how the loop ended. If `stages.forge-verify-impl` shows it already ran (`findings-applied`, `findings-reported`, or `passed`), proceed with no warning.
40
40
 
41
41
  ### Epic-Level Documentation (epic members only)
42
42
 
43
43
  If the resolved feature has an `epic` back-pointer in its `.pipeline-state.json`, run:
44
44
 
45
45
  ```bash
46
- R="$(for d in "$HOME"/.claude/skills/feature-forge "$HOME"/.claude/plugins/*/feature-forge; do [ -x "$d/scripts/forge-root.sh" ] && exec "$d/scripts/forge-root.sh"; done)"
46
+ R="$(for d in "$HOME"/.claude/skills/feature-forge "$HOME"/.claude/plugins/*/feature-forge "$HOME"/.agents/skills/feature-forge ./.agents/skills/feature-forge; do [ -x "$d/scripts/forge-root.sh" ] && exec "$d/scripts/forge-root.sh"; done)"
47
47
  [ -n "$R" ] || { echo "feature-forge: cannot locate plugin root" >&2; exit 1; }
48
48
  python3 "$R/scripts/epic-manifest.py" render-status "{epic}" --specs-dir "{specsDir}" --json
49
49
  ```
50
50
 
51
51
  If `render-status` fails, skip the epic-level offer and proceed with the per-feature docs only; surface the error per the exit-1/exit-2 split in the **Feature Directory Resolution** block of `references/shared-conventions.md` (exit 1 → parse `{findings[]}` from stdout; exit 2 → surface the plain `Error:` stderr line verbatim).
52
52
 
53
- **Only if `rollup.total > 0 AND rollup.complete == rollup.total`** (every member is complete-for-orchestration; the `total > 0` guard excludes an empty epic), use `AskUserQuestion` to offer:
53
+ **Only if `rollup.total > 0 AND rollup.complete == rollup.total`** (every member is complete-for-orchestration; the `total > 0` guard excludes an empty epic), use the host's question mechanism to offer:
54
54
 
55
55
  "All {total} features in the '{epic}' epic are complete. Generate an **epic-level architecture document** spanning the features, in addition to {feature}'s per-feature docs?"
56
56
 
@@ -96,7 +96,7 @@ Based on feature complexity and existing doc conventions, propose a doc plan:
96
96
  └── adr-001-*.md — Architecture decision records (if significant decisions were made)
97
97
  ```
98
98
 
99
- Present the plan and use `AskUserQuestion` to get the user's confirmation.
99
+ Present the plan and use the host's question mechanism to get the user's confirmation.
100
100
 
101
101
  ## Step 3: Write Documentation
102
102
 
@@ -163,7 +163,7 @@ Adapt export paths to match the project's module/package conventions.
163
163
 
164
164
  ## Step 4: Review with User
165
165
 
166
- Present the docs as text. Then use `AskUserQuestion` to collect feedback — do NOT include these questions in your text output:
166
+ Present the docs as text. Then use the host's question mechanism to collect feedback — do NOT include these questions in your text output:
167
167
 
168
168
  "1. Does this accurately reflect the implementation? 2. Is the level of detail appropriate for your team? 3. Any areas that need more explanation?"
169
169
 
@@ -186,3 +186,13 @@ Write pipeline state conforming to `references/pipeline-state-schema.json`.
186
186
  - API reference should include actual function signatures from the code, not from the spec (they may differ).
187
187
  - Don't generate docs that will immediately be stale. Focus on concepts, architecture, and patterns rather than line-by-line code walkthroughs.
188
188
  - Include "When to use" and "When NOT to use" sections — they save developers more time than any other documentation pattern.
189
+
190
+ ---
191
+
192
+ ## Host execution notes (Codex)
193
+
194
+ This skill was authored Claude-first; the body above refers to "the host's question mechanism", "the host's subagent mechanism", and "the host's background-execution mechanism". On Codex:
195
+
196
+ - **User input:** Codex has no structured question tool — ask the question directly and wait for the user's reply before proceeding. Never skip a required question or assume an answer.
197
+ - **Subagents:** spawn a Codex subagent using the named custom agent under `.codex/agents/<name>.toml`. Codex spawns a subagent only when explicitly asked; if the custom agent is unavailable, run that step inline yourself.
198
+ - **Background / monitoring:** run long-lived runner commands in your shell session and report progress as it arrives — there is no Claude-style background or monitoring tool to arm.
@@ -21,7 +21,7 @@ toolchain-missing.
21
21
 
22
22
  ## Host adaptation (conversational fallback)
23
23
 
24
- If the `AskUserQuestion` tool is available, ask the interview questions through it. If it is
24
+ If the host's question mechanism is available, ask the interview questions through it. If it is
25
25
  **not** available (a non-Claude host such as Codex), emit the same questions as a single
26
26
  **numbered text list** — each line one question with its options in brackets and the default
27
27
  marked — then **stop and wait for a single text reply**. Parse the reply positionally
@@ -30,7 +30,7 @@ options, defaults) and the conditional gating (Q4 skipped for go/rust/generic; Q
30
30
  monorepo; Q8 only after a verified-green baseline) are **identical** across both paths — only
31
31
  the rendering changes. Never assume answers; always wait for the reply.
32
32
 
33
- Emit any context as plain text, then route **all** questions through `AskUserQuestion` (or the
33
+ Emit any context as plain text, then route **all** questions through the host's question mechanism (or the
34
34
  fallback) — never as inline prose questions, which stall the session.
35
35
 
36
36
  ## Flow (Mode A — default)
@@ -58,7 +58,7 @@ Every bash invocation begins with the byte-identical portable-root prelude, then
58
58
  helper. Pass `--specs-dir ./specs` (the default) so the gate allow-lists the specs directory.
59
59
 
60
60
  ```bash
61
- R="$(for d in "$HOME"/.claude/skills/feature-forge "$HOME"/.claude/plugins/*/feature-forge; do [ -x "$d/scripts/forge-root.sh" ] && exec "$d/scripts/forge-root.sh"; done)"
61
+ R="$(for d in "$HOME"/.claude/skills/feature-forge "$HOME"/.claude/plugins/*/feature-forge "$HOME"/.agents/skills/feature-forge ./.agents/skills/feature-forge; do [ -x "$d/scripts/forge-root.sh" ] && exec "$d/scripts/forge-root.sh"; done)"
62
62
  [ -n "$R" ] || { echo "feature-forge: cannot locate plugin root" >&2; exit 1; }
63
63
  python3 "$R/scripts/forge-bootstrap.py" check "<target-dir>" --json --specs-dir ./specs
64
64
  ```
@@ -130,12 +130,12 @@ it null.
130
130
  `host` — and pass it verbatim to `scaffold --answers '<json>'`. Invent no fields beyond that
131
131
  schema. Two fields come from your runtime, not the interview: `author` from `git config
132
132
  user.name` (else the project name; it is the LICENSE copyright holder), and `host` — `"claude"`
133
- when running under a Claude host (e.g. `AskUserQuestion` is available), else `"codex"`/`"other"`.
133
+ when running under a Claude host (e.g. the host's question mechanism is available), else `"codex"`/`"other"`.
134
134
  `host` drives the host-conditional agent file: the helper always emits `AGENTS.md` and adds
135
135
  `CLAUDE.md` only when `host == "claude"`.
136
136
 
137
137
  ```bash
138
- R="$(for d in "$HOME"/.claude/skills/feature-forge "$HOME"/.claude/plugins/*/feature-forge; do [ -x "$d/scripts/forge-root.sh" ] && exec "$d/scripts/forge-root.sh"; done)"
138
+ R="$(for d in "$HOME"/.claude/skills/feature-forge "$HOME"/.claude/plugins/*/feature-forge "$HOME"/.agents/skills/feature-forge ./.agents/skills/feature-forge; do [ -x "$d/scripts/forge-root.sh" ] && exec "$d/scripts/forge-root.sh"; done)"
139
139
  [ -n "$R" ] || { echo "feature-forge: cannot locate plugin root" >&2; exit 1; }
140
140
  python3 "$R/scripts/forge-bootstrap.py" scaffold "<target-dir>" --json --answers '<Answers JSON>'
141
141
  ```
@@ -143,7 +143,7 @@ python3 "$R/scripts/forge-bootstrap.py" scaffold "<target-dir>" --json --answers
143
143
  ### Step 5 — verify
144
144
 
145
145
  ```bash
146
- R="$(for d in "$HOME"/.claude/skills/feature-forge "$HOME"/.claude/plugins/*/feature-forge; do [ -x "$d/scripts/forge-root.sh" ] && exec "$d/scripts/forge-root.sh"; done)"
146
+ R="$(for d in "$HOME"/.claude/skills/feature-forge "$HOME"/.claude/plugins/*/feature-forge "$HOME"/.agents/skills/feature-forge ./.agents/skills/feature-forge; do [ -x "$d/scripts/forge-root.sh" ] && exec "$d/scripts/forge-root.sh"; done)"
147
147
  [ -n "$R" ] || { echo "feature-forge: cannot locate plugin root" >&2; exit 1; }
148
148
  python3 "$R/scripts/forge-bootstrap.py" verify "<target-dir>" --json --answers '<Answers JSON>'
149
149
  ```
@@ -169,7 +169,7 @@ and removes the sentinel before staging so it never enters history. Read
169
169
  leave the sentinel in-progress (resumable) — do **not** declare success.
170
170
 
171
171
  ```bash
172
- R="$(for d in "$HOME"/.claude/skills/feature-forge "$HOME"/.claude/plugins/*/feature-forge; do [ -x "$d/scripts/forge-root.sh" ] && exec "$d/scripts/forge-root.sh"; done)"
172
+ R="$(for d in "$HOME"/.claude/skills/feature-forge "$HOME"/.claude/plugins/*/feature-forge "$HOME"/.agents/skills/feature-forge ./.agents/skills/feature-forge; do [ -x "$d/scripts/forge-root.sh" ] && exec "$d/scripts/forge-root.sh"; done)"
173
173
  [ -n "$R" ] || { echo "feature-forge: cannot locate plugin root" >&2; exit 1; }
174
174
  python3 "$R/scripts/forge-bootstrap.py" commit "<target-dir>" --json --answers '<Answers JSON>' [--stage-only]
175
175
  ```
@@ -237,3 +237,13 @@ no run ends silently:
237
237
  - **Missing toolchain** — `verify` `toolchainPresent:false` (exit 2) → scaffold-anyway-unverified
238
238
  vs abort; mark **unverified**.
239
239
  - **Partial-state detected** — `check` `resumeMarker != null` → resume / restart / cancel.
240
+
241
+ ---
242
+
243
+ ## Host execution notes (Codex)
244
+
245
+ This skill was authored Claude-first; the body above refers to "the host's question mechanism", "the host's subagent mechanism", and "the host's background-execution mechanism". On Codex:
246
+
247
+ - **User input:** Codex has no structured question tool — ask the question directly and wait for the user's reply before proceeding. Never skip a required question or assume an answer.
248
+ - **Subagents:** spawn a Codex subagent using the named custom agent under `.codex/agents/<name>.toml`. Codex spawns a subagent only when explicitly asked; if the custom agent is unavailable, run that step inline yourself.
249
+ - **Background / monitoring:** run long-lived runner commands in your shell session and report progress as it arrives — there is no Claude-style background or monitoring tool to arm.