@entelligentsia/forgecli 1.0.21 → 1.0.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +346 -0
- package/README.md +2 -0
- package/dist/CHANGELOG-forge-plugin.md +281 -0
- package/dist/bin/argv.d.ts +2 -2
- package/dist/bin/argv.js +25 -0
- package/dist/bin/argv.js.map +1 -1
- package/dist/bin/forge.js +12 -0
- package/dist/bin/forge.js.map +1 -1
- package/dist/bin/init.d.ts +23 -0
- package/dist/bin/init.js +123 -0
- package/dist/bin/init.js.map +1 -0
- package/dist/bin/uninstall.d.ts +20 -0
- package/dist/bin/uninstall.js +141 -0
- package/dist/bin/uninstall.js.map +1 -0
- package/dist/extensions/forgecli/claude-bootstrap/bootstrap.d.ts +40 -0
- package/dist/extensions/forgecli/claude-bootstrap/bootstrap.js +593 -0
- package/dist/extensions/forgecli/claude-bootstrap/bootstrap.js.map +1 -0
- package/dist/extensions/forgecli/claude-bootstrap/settings-merge.d.ts +46 -0
- package/dist/extensions/forgecli/claude-bootstrap/settings-merge.js +245 -0
- package/dist/extensions/forgecli/claude-bootstrap/settings-merge.js.map +1 -0
- package/dist/extensions/forgecli/claude-bootstrap/uninstall.d.ts +23 -0
- package/dist/extensions/forgecli/claude-bootstrap/uninstall.js +215 -0
- package/dist/extensions/forgecli/claude-bootstrap/uninstall.js.map +1 -0
- package/dist/extensions/forgecli/dashboard/component.js +10 -7
- package/dist/extensions/forgecli/dashboard/component.js.map +1 -1
- package/dist/extensions/forgecli/forge-tools.d.ts +1 -0
- package/dist/extensions/forgecli/forge-tools.js +73 -0
- package/dist/extensions/forgecli/forge-tools.js.map +1 -1
- package/dist/extensions/forgecli/lib/forge-root.d.ts +5 -0
- package/dist/extensions/forgecli/lib/forge-root.js +14 -1
- package/dist/extensions/forgecli/lib/forge-root.js.map +1 -1
- package/dist/extensions/forgecli/orchestrators/bug/bug-body.d.ts +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-body.js +65 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-body.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-id.d.ts +23 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-id.js +140 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-id.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-phase-dispatch.d.ts +54 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-phase-dispatch.js +349 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-phase-dispatch.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-phases.d.ts +8 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-phases.js +60 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-phases.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-state.d.ts +14 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-state.js +100 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-state.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-triage-routing.d.ts +72 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-triage-routing.js +204 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-triage-routing.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-verdict-loop.d.ts +38 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-verdict-loop.js +166 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-verdict-loop.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-verdict.d.ts +3 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-verdict.js +55 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-verdict.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/run-bug-command.d.ts +7 -0
- package/dist/extensions/forgecli/orchestrators/bug/run-bug-command.js +293 -0
- package/dist/extensions/forgecli/orchestrators/bug/run-bug-command.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/run-bug-pipeline.d.ts +2 -0
- package/dist/extensions/forgecli/orchestrators/bug/run-bug-pipeline.js +501 -0
- package/dist/extensions/forgecli/orchestrators/bug/run-bug-pipeline.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/run-bug-types.d.ts +41 -0
- package/dist/extensions/forgecli/orchestrators/bug/run-bug-types.js +5 -0
- package/dist/extensions/forgecli/orchestrators/bug/run-bug-types.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-entry.d.ts +43 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-entry.js +85 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-entry.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-misc.d.ts +8 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-misc.js +37 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-misc.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-notify.d.ts +28 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-notify.js +45 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-notify.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-transcript-session.d.ts +26 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-transcript-session.js +75 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-transcript-session.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/common/summary-recovery.d.ts +24 -0
- package/dist/extensions/forgecli/orchestrators/common/summary-recovery.js +37 -0
- package/dist/extensions/forgecli/orchestrators/common/summary-recovery.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/fix-bug.d.ts +9 -92
- package/dist/extensions/forgecli/orchestrators/fix-bug.js +23 -1695
- package/dist/extensions/forgecli/orchestrators/fix-bug.js.map +1 -1
- package/dist/extensions/forgecli/orchestrators/run-sprint.d.ts +3 -12
- package/dist/extensions/forgecli/orchestrators/run-sprint.js +97 -270
- package/dist/extensions/forgecli/orchestrators/run-sprint.js.map +1 -1
- package/dist/extensions/forgecli/orchestrators/run-task.d.ts +10 -214
- package/dist/extensions/forgecli/orchestrators/run-task.js +31 -1481
- package/dist/extensions/forgecli/orchestrators/run-task.js.map +1 -1
- package/dist/extensions/forgecli/orchestrators/sprint/sprint-ceremony.d.ts +33 -0
- package/dist/extensions/forgecli/orchestrators/sprint/sprint-ceremony.js +135 -0
- package/dist/extensions/forgecli/orchestrators/sprint/sprint-ceremony.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/sprint/sprint-state.d.ts +18 -0
- package/dist/extensions/forgecli/orchestrators/sprint/sprint-state.js +55 -0
- package/dist/extensions/forgecli/orchestrators/sprint/sprint-state.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/task/run-task-command.d.ts +9 -0
- package/dist/extensions/forgecli/orchestrators/task/run-task-command.js +174 -0
- package/dist/extensions/forgecli/orchestrators/task/run-task-command.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/task/run-task-pipeline.d.ts +2 -0
- package/dist/extensions/forgecli/orchestrators/task/run-task-pipeline.js +494 -0
- package/dist/extensions/forgecli/orchestrators/task/run-task-pipeline.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/task/run-task-types.d.ts +62 -0
- package/dist/extensions/forgecli/orchestrators/task/run-task-types.js +5 -0
- package/dist/extensions/forgecli/orchestrators/task/run-task-types.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/task/task-body.d.ts +4 -0
- package/dist/extensions/forgecli/orchestrators/task/task-body.js +48 -0
- package/dist/extensions/forgecli/orchestrators/task/task-body.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/task/task-events.d.ts +63 -0
- package/dist/extensions/forgecli/orchestrators/task/task-events.js +185 -0
- package/dist/extensions/forgecli/orchestrators/task/task-events.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/task/task-gates.d.ts +34 -0
- package/dist/extensions/forgecli/orchestrators/task/task-gates.js +78 -0
- package/dist/extensions/forgecli/orchestrators/task/task-gates.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/task/task-phase-dispatch.d.ts +42 -0
- package/dist/extensions/forgecli/orchestrators/task/task-phase-dispatch.js +370 -0
- package/dist/extensions/forgecli/orchestrators/task/task-phase-dispatch.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/task/task-phases.d.ts +14 -0
- package/dist/extensions/forgecli/orchestrators/task/task-phases.js +26 -0
- package/dist/extensions/forgecli/orchestrators/task/task-phases.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/task/task-record.d.ts +9 -0
- package/dist/extensions/forgecli/orchestrators/task/task-record.js +58 -0
- package/dist/extensions/forgecli/orchestrators/task/task-record.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/task/task-state.d.ts +14 -0
- package/dist/extensions/forgecli/orchestrators/task/task-state.js +35 -0
- package/dist/extensions/forgecli/orchestrators/task/task-state.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/task/task-verdict-loop.d.ts +36 -0
- package/dist/extensions/forgecli/orchestrators/task/task-verdict-loop.js +152 -0
- package/dist/extensions/forgecli/orchestrators/task/task-verdict-loop.js.map +1 -0
- package/dist/extensions/forgecli/update/forge-update-command.js +10 -7
- package/dist/extensions/forgecli/update/forge-update-command.js.map +1 -1
- package/dist/forge-payload/.base-pack/commands/approve.md +2 -2
- package/dist/forge-payload/.base-pack/commands/check-agent.md +2 -2
- package/dist/forge-payload/.base-pack/commands/collate.md +2 -2
- package/dist/forge-payload/.base-pack/commands/commit.md +2 -2
- package/dist/forge-payload/.base-pack/commands/enhance.md +2 -2
- package/dist/forge-payload/.base-pack/commands/fix-bug.md +2 -2
- package/dist/forge-payload/.base-pack/commands/implement.md +2 -2
- package/dist/forge-payload/.base-pack/commands/init.md +278 -0
- package/dist/forge-payload/.base-pack/commands/new-sprint.md +2 -2
- package/dist/forge-payload/.base-pack/commands/plan-sprint.md +2 -2
- package/dist/forge-payload/.base-pack/commands/plan.md +2 -2
- package/dist/forge-payload/.base-pack/commands/retro.md +2 -2
- package/dist/forge-payload/.base-pack/commands/review-code.md +2 -2
- package/dist/forge-payload/.base-pack/commands/review-plan.md +2 -2
- package/dist/forge-payload/.base-pack/commands/run-sprint.md +2 -2
- package/dist/forge-payload/.base-pack/commands/run-task.md +2 -2
- package/dist/forge-payload/.base-pack/commands/validate.md +2 -2
- package/dist/forge-payload/.base-pack/workflows/_fragments/event-emission-schema.md +4 -0
- package/dist/forge-payload/.base-pack/workflows/_fragments/event-vocabulary.md +88 -0
- package/dist/forge-payload/.base-pack/workflows/collator_agent.md +5 -6
- package/dist/forge-payload/.base-pack/workflows/commit_task.md +41 -38
- package/dist/forge-payload/.base-pack/workflows/implement_plan.md +3 -3
- package/dist/forge-payload/.base-pack/workflows/migrate_structural.md +1 -1
- package/dist/forge-payload/.base-pack/workflows-js/wfl-fix-bug.js +42 -6
- package/dist/forge-payload/.base-pack/workflows-js/wfl-init.js +449 -0
- package/dist/forge-payload/.base-pack/workflows-js/wfl-run-task.js +32 -1
- package/dist/forge-payload/.claude-plugin/plugin.json +1 -1
- package/dist/forge-payload/.schemas/enum-catalog.json +2 -2
- package/dist/forge-payload/.schemas/event.schema.json +8 -3
- package/dist/forge-payload/.schemas/migrations.json +141 -0
- package/dist/forge-payload/commands/add-pipeline.md +1 -1
- package/dist/forge-payload/commands/add-task.md +3 -3
- package/dist/forge-payload/commands/ask.md +1 -1
- package/dist/forge-payload/commands/check-agent.md +1 -1
- package/dist/forge-payload/commands/config.md +1 -1
- package/dist/forge-payload/commands/health.md +1 -1
- package/dist/forge-payload/commands/init.md +62 -7
- package/dist/forge-payload/commands/rebuild.md +3 -3
- package/dist/forge-payload/commands/remove.md +1 -1
- package/dist/forge-payload/commands/repair.md +1 -1
- package/dist/forge-payload/commands/report-bug.md +1 -1
- package/dist/forge-payload/commands/status.md +1 -1
- package/dist/forge-payload/commands/update.md +3 -3
- package/dist/forge-payload/hooks/lib/common.cjs +228 -0
- package/dist/forge-payload/hooks/lib/plugin-detection.cjs +106 -0
- package/dist/forge-payload/hooks/lib/update-msg.cjs +23 -0
- package/dist/forge-payload/hooks/lib/update-url.cjs +46 -0
- package/dist/forge-payload/hooks/lib/write-registry.js +53 -0
- package/dist/forge-payload/init/discovery/discover-database.md +32 -0
- package/dist/forge-payload/init/discovery/discover-processes.md +31 -0
- package/dist/forge-payload/init/discovery/discover-routing.md +31 -0
- package/dist/forge-payload/init/discovery/discover-stack.md +33 -0
- package/dist/forge-payload/init/discovery/discover-testing.md +34 -0
- package/dist/forge-payload/init/generation/generate-commands.md +171 -0
- package/dist/forge-payload/init/generation/generate-kb-doc.md +60 -0
- package/dist/forge-payload/init/generation/generate-knowledge-base.md +56 -0
- package/dist/forge-payload/init/generation/generate-persona.md +73 -0
- package/dist/forge-payload/init/generation/generate-personas.md +54 -0
- package/dist/forge-payload/init/generation/generate-skill.md +66 -0
- package/dist/forge-payload/init/generation/generate-skills.md +36 -0
- package/dist/forge-payload/init/generation/generate-template.md +60 -0
- package/dist/forge-payload/init/generation/generate-templates.md +39 -0
- package/dist/forge-payload/init/generation/generate-tools.md +133 -0
- package/dist/forge-payload/init/generation/generate-workflows.md +78 -0
- package/dist/forge-payload/init/phases/phase-1-collect.md +10 -2
- package/dist/forge-payload/init/phases/phase-3-materialize.md +1 -1
- package/dist/forge-payload/init/phases/phase-4-register.md +8 -0
- package/dist/forge-payload/init/workflow-gen-plan.json +17 -0
- package/dist/forge-payload/integrity.json +16 -16
- package/dist/forge-payload/meta/store-schema/event.schema.md +7 -0
- package/dist/forge-payload/meta/workflows/_fragments/event-emission-schema.md +4 -0
- package/dist/forge-payload/meta/workflows/_fragments/event-vocabulary.md +88 -0
- package/dist/forge-payload/meta/workflows/meta-collate.md +5 -6
- package/dist/forge-payload/meta/workflows/meta-commit.md +46 -43
- package/dist/forge-payload/meta/workflows/meta-fix-bug.md +7 -2
- package/dist/forge-payload/meta/workflows/meta-implement.md +3 -3
- package/dist/forge-payload/meta/workflows/meta-migrate.md +1 -1
- package/dist/forge-payload/meta/workflows/meta-orchestrate.md +4 -1
- package/dist/forge-payload/schemas/enum-catalog.json +2 -2
- package/dist/forge-payload/schemas/event.schema.json +8 -3
- package/dist/forge-payload/schemas/structure-manifest.json +5 -12
- package/dist/forge-payload/tools/commit-task.cjs +218 -0
- package/dist/forge-payload/tools/forge-preflight.cjs +268 -0
- package/dist/forge-payload/tools/lib/paths.cjs +12 -11
- package/dist/forge-payload/tools/lib/pricing.cjs +31 -11
- package/dist/forge-payload/tools/query-logger.cjs +34 -0
- package/dist/forge-payload/tools/store-cli.cjs +6 -1
- package/dist/forge-payload/tools/substitute-placeholders.cjs +5 -6
- package/package.json +2 -2
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Generation: Knowledge Base
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Generate the project's architecture documentation, business domain documentation,
|
|
6
|
+
and initial stack review checklist from the discovery context.
|
|
7
|
+
|
|
8
|
+
## Inputs
|
|
9
|
+
|
|
10
|
+
- Discovery context (from Phase 1)
|
|
11
|
+
- `$FORGE_ROOT/meta/personas/` (to understand what agents need to know)
|
|
12
|
+
|
|
13
|
+
## Setup
|
|
14
|
+
|
|
15
|
+
Read the configured KB path:
|
|
16
|
+
|
|
17
|
+
```sh
|
|
18
|
+
KB_PATH=$(node -e "try{console.log(require('./.forge/config.json').paths.engineering)}catch{console.log('engineering')}")
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Outputs
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
{KB_PATH}/
|
|
25
|
+
architecture/
|
|
26
|
+
INDEX.md
|
|
27
|
+
stack.md
|
|
28
|
+
processes.md
|
|
29
|
+
database.md
|
|
30
|
+
routing.md
|
|
31
|
+
deployment.md
|
|
32
|
+
business-domain/
|
|
33
|
+
INDEX.md
|
|
34
|
+
entity-model.md
|
|
35
|
+
stack-checklist.md
|
|
36
|
+
MASTER_INDEX.md (empty scaffold)
|
|
37
|
+
sprints/ (empty, with .gitkeep)
|
|
38
|
+
bugs/ (empty, with .gitkeep)
|
|
39
|
+
tools/ (empty, created for Phase 8)
|
|
40
|
+
|
|
41
|
+
.forge/
|
|
42
|
+
store/
|
|
43
|
+
sprints/ (empty, with .gitkeep)
|
|
44
|
+
tasks/ (empty, with .gitkeep)
|
|
45
|
+
bugs/ (empty, with .gitkeep)
|
|
46
|
+
events/ (empty, with .gitkeep)
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Instructions
|
|
50
|
+
|
|
51
|
+
1. For each architecture sub-doc, synthesise from the discovery context
|
|
52
|
+
2. Include confidence header: `<!-- AUTO-GENERATED by /forge:init — confidence: N% -->`
|
|
53
|
+
3. Mark uncertain lines with `[?]`
|
|
54
|
+
4. The stack-checklist should have 5-10 items based on auth/framework detection
|
|
55
|
+
5. entity-model.md should list all discovered entities with fields and relationships
|
|
56
|
+
6. INDEX.md files should link to all sub-docs with one-line descriptions
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Persona Generation — Per-Subagent Instructions
|
|
2
|
+
|
|
3
|
+
You are generating **ONE** persona file. You have been given two inputs:
|
|
4
|
+
|
|
5
|
+
1. A **project brief** (`.forge/init-context.md`) — authoritative for all names,
|
|
6
|
+
paths, command values, and installed-skill wiring
|
|
7
|
+
2. A **meta-persona source** — the role definition and Generation Instructions
|
|
8
|
+
|
|
9
|
+
Your job is to produce exactly one file and return a one-line status.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Inputs
|
|
14
|
+
|
|
15
|
+
Read these two sources before writing anything:
|
|
16
|
+
|
|
17
|
+
- `$FORGE_ROOT/meta/personas/{meta}` — the meta-persona for your assigned role
|
|
18
|
+
- `.forge/init-context.md` — the project brief (passed inline in your prompt)
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Rules
|
|
23
|
+
|
|
24
|
+
1. **Write EXACTLY ONE file:** `.forge/personas/{role}.md`
|
|
25
|
+
|
|
26
|
+
2. **Opening line** — the first non-blank line must be the persona's symbol
|
|
27
|
+
(emoji from the meta-persona's `## Symbol` section) followed by a brief
|
|
28
|
+
first-person announcement in this exact format:
|
|
29
|
+
```
|
|
30
|
+
{symbol} **{Project} {Role Name}** — {quiet first-person voice, present-tense}
|
|
31
|
+
```
|
|
32
|
+
Do not use `symbol:` YAML frontmatter. The symbol must appear as the first
|
|
33
|
+
non-blank line of the file.
|
|
34
|
+
|
|
35
|
+
3. **Project substitution** — replace every `{Project}` placeholder with the
|
|
36
|
+
project name from the brief's `## Commands` / `## Paths` header line.
|
|
37
|
+
All entity names, architecture doc names, persona names, and command values
|
|
38
|
+
MUST come from the brief. Do not invent values.
|
|
39
|
+
|
|
40
|
+
4. **Stack wiring** — substitute actual commands from the brief's `## Commands`
|
|
41
|
+
section wherever the meta-persona references test/build/lint/syntax-check.
|
|
42
|
+
|
|
43
|
+
5. **Skill invocation wiring** — read `## Installed Skill Wiring` from the
|
|
44
|
+
brief. For each skill that maps to this persona's role, add an explicit
|
|
45
|
+
YOU MUST directive. Follow the wiring pattern in the meta-persona's
|
|
46
|
+
Generation Instructions exactly.
|
|
47
|
+
|
|
48
|
+
6. **Follow Generation Instructions** — each meta-persona has a
|
|
49
|
+
`## Generation Instructions` section (or equivalent). Follow it fully.
|
|
50
|
+
Do not add sections, steps, or notes beyond what it prescribes.
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Self-check (mandatory last step)
|
|
55
|
+
|
|
56
|
+
After writing the file, verify before returning:
|
|
57
|
+
|
|
58
|
+
1. Read back `.forge/personas/{role}.md`
|
|
59
|
+
2. Confirm the **first non-blank line** starts with the persona's symbol emoji
|
|
60
|
+
3. Confirm **no unsubstituted `{Project}` placeholders** remain
|
|
61
|
+
4. Confirm **no literal `{TEST_COMMAND}`, `{BUILD_COMMAND}`, `{SYNTAX_CHECK}`,
|
|
62
|
+
or `{LINT_COMMAND}`** remain
|
|
63
|
+
5. Record in the manifest:
|
|
64
|
+
```sh
|
|
65
|
+
node "$FORGE_ROOT/tools/generation-manifest.cjs" record ".forge/personas/{role}.md"
|
|
66
|
+
```
|
|
67
|
+
(If generation-manifest.cjs is not yet installed, skip silently.)
|
|
68
|
+
|
|
69
|
+
6. Return **exactly one line**:
|
|
70
|
+
- `done: <first 80 chars of the written file>` — on success
|
|
71
|
+
- `FAILED: <reason>` — if any step above failed or the file could not be written
|
|
72
|
+
|
|
73
|
+
Do not output anything else after the status line.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Generation: Personas
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Generate project-specific agent persona context from meta-personas,
|
|
6
|
+
the discovery context, and the generated knowledge base.
|
|
7
|
+
|
|
8
|
+
## Inputs
|
|
9
|
+
|
|
10
|
+
- `$FORGE_ROOT/meta/personas/meta-*.md` (6 meta-personas)
|
|
11
|
+
- Discovery context (from Phase 1)
|
|
12
|
+
- Generated knowledge base (from Phase 2)
|
|
13
|
+
|
|
14
|
+
## Outputs
|
|
15
|
+
|
|
16
|
+
Personas are written as standalone files in `.forge/personas/`.
|
|
17
|
+
Each file is named after the persona's role (e.g., `.forge/personas/supervisor.md`).
|
|
18
|
+
|
|
19
|
+
These files are consumed by Phase 5 (Generate Atomic Workflows) to establish the agent's identity, knowledge, and constraints.
|
|
20
|
+
|
|
21
|
+
## Instructions
|
|
22
|
+
|
|
23
|
+
For each meta-persona, read its Generation Instructions section and
|
|
24
|
+
produce a project-specific version that incorporates:
|
|
25
|
+
- The project's actual stack, test commands, build commands
|
|
26
|
+
- The project's actual entity names and business rules
|
|
27
|
+
- The project's actual auth patterns and conventions
|
|
28
|
+
- The project's actual directory structure and paths
|
|
29
|
+
|
|
30
|
+
**Persona block format** — each persona file opens with a single line using the
|
|
31
|
+
persona's symbol (from its `## Symbol` section) and a quiet first-person announcement.
|
|
32
|
+
Follow the `Persona block format` template in each meta-persona's Generation Instructions,
|
|
33
|
+
substituting `{Project}` with the project's name. The line should be brief, present-tense,
|
|
34
|
+
and speak to what the persona is about to do — not a role description, but a voice.
|
|
35
|
+
|
|
36
|
+
## Skill Invocation Wiring
|
|
37
|
+
|
|
38
|
+
Read `.forge/config.json` for `installedSkills`. For each installed skill
|
|
39
|
+
that is relevant to a persona's domain, add an explicit invocation instruction
|
|
40
|
+
to that persona's context.
|
|
41
|
+
|
|
42
|
+
Read `$FORGE_ROOT/meta/skill-recommendations.md` for the persona integration
|
|
43
|
+
pattern. Apply it: the instruction must be a YOU MUST directive placed at
|
|
44
|
+
the relevant persona's context.
|
|
45
|
+
|
|
46
|
+
Example — if `vue-best-practices` is installed and the persona is Supervisor:
|
|
47
|
+
|
|
48
|
+
> "When reviewing Vue components, YOU MUST invoke the `vue-best-practices`
|
|
49
|
+
> skill before applying the stack checklist. That skill provides universal
|
|
50
|
+
> Vue technique depth; the checklist provides project conventions. Both are required."
|
|
51
|
+
|
|
52
|
+
This wiring is what distinguishes Forge-generated personas from plain skill
|
|
53
|
+
invocation: the persona carries project-specific knowledge *and* knows exactly
|
|
54
|
+
when to reach for a universal technique skill. Neither layer alone is sufficient.
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Skill Generation — Per-Subagent Instructions
|
|
2
|
+
|
|
3
|
+
You are generating **ONE** skill file. You have been given two inputs:
|
|
4
|
+
|
|
5
|
+
1. A **project brief** (`.forge/init-context.md`) — authoritative for all names,
|
|
6
|
+
paths, command values, and installed-skill wiring
|
|
7
|
+
2. A **meta-skill source** — the role's universal capability set and Generation Instructions
|
|
8
|
+
|
|
9
|
+
Your job is to produce exactly one file and return a one-line status.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Inputs
|
|
14
|
+
|
|
15
|
+
Read these two sources before writing anything:
|
|
16
|
+
|
|
17
|
+
- `$FORGE_ROOT/meta/skills/{meta}` — the meta-skill for your assigned role
|
|
18
|
+
- `.forge/init-context.md` — the project brief (passed inline in your prompt)
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Rules
|
|
23
|
+
|
|
24
|
+
1. **Write EXACTLY ONE file:** `.forge/skills/{role}-skills.md`
|
|
25
|
+
|
|
26
|
+
2. **Project interpolation** — replace every generic placeholder with the
|
|
27
|
+
project's actual tools, libraries, paths, and conventions from the brief.
|
|
28
|
+
All entity names, stack names, and command values MUST come from the brief.
|
|
29
|
+
Do not invent values.
|
|
30
|
+
|
|
31
|
+
3. **Stack specificity** — replace abstract references (e.g. "your test runner",
|
|
32
|
+
"your ORM") with the actual tools discovered for this project. Substitute
|
|
33
|
+
actual command values from the brief's `## Commands` section.
|
|
34
|
+
|
|
35
|
+
4. **Installed skill integration** — read `## Installed Skill Wiring` from the
|
|
36
|
+
brief. For each skill that maps to this role, add an explicit reference
|
|
37
|
+
explaining how the persona should combine the marketplace skill with this
|
|
38
|
+
project-specific skill set.
|
|
39
|
+
|
|
40
|
+
5. **Follow Generation Instructions** — each meta-skill has a
|
|
41
|
+
`## Generation Instructions` section. Follow it fully. Do not add sections,
|
|
42
|
+
steps, or notes beyond what it prescribes.
|
|
43
|
+
|
|
44
|
+
6. **No free-form additions** — produce only the sections the meta-skill defines.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Self-check (mandatory last step)
|
|
49
|
+
|
|
50
|
+
After writing the file, verify before returning:
|
|
51
|
+
|
|
52
|
+
1. Read back `.forge/skills/{role}-skills.md`
|
|
53
|
+
2. Confirm **no unsubstituted placeholders** remain
|
|
54
|
+
3. Confirm **no abstract project references** remain (e.g. "your framework",
|
|
55
|
+
"your ORM" — these must be replaced with the actual project values)
|
|
56
|
+
4. Record in the manifest:
|
|
57
|
+
```sh
|
|
58
|
+
node "$FORGE_ROOT/tools/generation-manifest.cjs" record ".forge/skills/{role}-skills.md"
|
|
59
|
+
```
|
|
60
|
+
(If generation-manifest.cjs is not yet installed, skip silently.)
|
|
61
|
+
|
|
62
|
+
5. Return **exactly one line**:
|
|
63
|
+
- `done: <first 80 chars of the written file>` — on success
|
|
64
|
+
- `FAILED: <reason>` — if any step above failed or the file could not be written
|
|
65
|
+
|
|
66
|
+
Do not output anything else after the status line.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Generation: Skills
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Generate project-specific skill sets for each persona, mapping universal
|
|
6
|
+
techniques to project-specific tools and contexts.
|
|
7
|
+
|
|
8
|
+
## Inputs
|
|
9
|
+
|
|
10
|
+
- `$FORGE_ROOT/meta/skills/meta-*.md` (Meta-skill templates)
|
|
11
|
+
- Discovery context (from Phase 1)
|
|
12
|
+
- Generated knowledge base (from Phase 2)
|
|
13
|
+
- `.forge/config.json` (specifically `installedSkills`)
|
|
14
|
+
|
|
15
|
+
## Outputs
|
|
16
|
+
|
|
17
|
+
Skill sets are written as standalone files in `.forge/skills/`.
|
|
18
|
+
Each file uses the `-skills.md` suffix matching the persona role (e.g., `.forge/skills/supervisor-skills.md`).
|
|
19
|
+
|
|
20
|
+
## Instructions
|
|
21
|
+
|
|
22
|
+
For each persona role defined in the project:
|
|
23
|
+
1. Identify the relevant meta-skills from `$FORGE_ROOT/meta/skills/`.
|
|
24
|
+
2. For each skill, produce a project-interpolated version that:
|
|
25
|
+
- Replaces generic placeholders with actual project tools, libraries, and paths.
|
|
26
|
+
- Incorporates specific constraints discovered during Phase 1.
|
|
27
|
+
- Maps universal techniques to the project's actual implementation patterns.
|
|
28
|
+
3. Integrate `installedSkills` from `.forge/config.json`:
|
|
29
|
+
- If a marketplace skill is installed that enhances a specific technique,
|
|
30
|
+
explicitly reference it in the skill set.
|
|
31
|
+
- Ensure the skill set explains *how* the persona should combine the
|
|
32
|
+
universal marketplace skill with the project-specific skill set.
|
|
33
|
+
|
|
34
|
+
**Skill set format**:
|
|
35
|
+
Each file should be structured as a cohesive set of capabilities,
|
|
36
|
+
techniques, and checklists tailored for that specific role within the project.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Template Generation — Per-Subagent Instructions
|
|
2
|
+
|
|
3
|
+
You are generating **ONE** template file. You have been given two inputs:
|
|
4
|
+
|
|
5
|
+
1. A **project brief** (`.forge/init-context.md`) — authoritative for all names,
|
|
6
|
+
paths, command values, and entity names
|
|
7
|
+
2. A **meta-template source** — the document structure and Generation Instructions
|
|
8
|
+
|
|
9
|
+
Your job is to produce exactly one file and return a one-line status.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Inputs
|
|
14
|
+
|
|
15
|
+
Read these two sources before writing anything:
|
|
16
|
+
|
|
17
|
+
- `$FORGE_ROOT/meta/templates/{meta}` — the meta-template for your assigned document
|
|
18
|
+
- `.forge/init-context.md` — the project brief (passed inline in your prompt)
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Rules
|
|
23
|
+
|
|
24
|
+
1. **Write EXACTLY ONE file:** `.forge/templates/{filename}.md`
|
|
25
|
+
|
|
26
|
+
2. **Stack-specific sections** — add framework-specific subsections based on the
|
|
27
|
+
stack information in the brief. Use the detected languages and frameworks to
|
|
28
|
+
decide which optional sections to include.
|
|
29
|
+
|
|
30
|
+
3. **Project substitution** — replace all `{Project}`, `{PREFIX}`, entity name
|
|
31
|
+
placeholders, and ID format examples with actual values from the brief.
|
|
32
|
+
All entity names and command values MUST come from the brief. Do not invent.
|
|
33
|
+
|
|
34
|
+
4. **Test output formats** — reference the project's actual test runner output
|
|
35
|
+
format in any template sections that involve test results.
|
|
36
|
+
|
|
37
|
+
5. **Follow Generation Instructions** — each meta-template has a
|
|
38
|
+
`## Generation Instructions` section. Follow it fully. Do not add sections
|
|
39
|
+
or notes beyond what it prescribes.
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Self-check (mandatory last step)
|
|
44
|
+
|
|
45
|
+
After writing the file, verify before returning:
|
|
46
|
+
|
|
47
|
+
1. Read back `.forge/templates/{filename}.md`
|
|
48
|
+
2. Confirm **no unsubstituted placeholders** remain (no literal `{Project}`,
|
|
49
|
+
`{PREFIX}`, `{TEST_COMMAND}`, etc.)
|
|
50
|
+
3. Record in the manifest:
|
|
51
|
+
```sh
|
|
52
|
+
node "$FORGE_ROOT/tools/generation-manifest.cjs" record ".forge/templates/{filename}.md"
|
|
53
|
+
```
|
|
54
|
+
(If generation-manifest.cjs is not yet installed, skip silently.)
|
|
55
|
+
|
|
56
|
+
4. Return **exactly one line**:
|
|
57
|
+
- `done: <first 80 chars of the written file>` — on success
|
|
58
|
+
- `FAILED: <reason>` — if any step above failed or the file could not be written
|
|
59
|
+
|
|
60
|
+
Do not output anything else after the status line.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Generation: Templates
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Generate project-specific document templates from meta-templates,
|
|
6
|
+
adding stack-specific sections.
|
|
7
|
+
|
|
8
|
+
## Inputs
|
|
9
|
+
|
|
10
|
+
- `$FORGE_ROOT/meta/templates/meta-*.md` (8 meta-templates)
|
|
11
|
+
- Discovery context (from Phase 1)
|
|
12
|
+
- Generated knowledge base (from Phase 2)
|
|
13
|
+
|
|
14
|
+
## Outputs
|
|
15
|
+
|
|
16
|
+
`.forge/templates/` with project-specific templates:
|
|
17
|
+
- `TASK_PROMPT_TEMPLATE.md`
|
|
18
|
+
- `PLAN_TEMPLATE.md`
|
|
19
|
+
- `PROGRESS_TEMPLATE.md`
|
|
20
|
+
- `CODE_REVIEW_TEMPLATE.md`
|
|
21
|
+
- `PLAN_REVIEW_TEMPLATE.md`
|
|
22
|
+
- `SPRINT_REQUIREMENTS_TEMPLATE.md`
|
|
23
|
+
- `SPRINT_MANIFEST_TEMPLATE.md`
|
|
24
|
+
- `RETROSPECTIVE_TEMPLATE.md`
|
|
25
|
+
|
|
26
|
+
## Instructions
|
|
27
|
+
|
|
28
|
+
For each meta-template:
|
|
29
|
+
1. Read its sections and Generation Instructions
|
|
30
|
+
2. Add framework-specific subsections based on the detected stack
|
|
31
|
+
3. Reference the project's actual entity names and test output formats
|
|
32
|
+
4. Use the project's ID format in template headers
|
|
33
|
+
|
|
34
|
+
After writing each template file, record it in the generation manifest:
|
|
35
|
+
```sh
|
|
36
|
+
node {paths.tools}/generation-manifest.cjs record {paths.templates}/{filename}.md
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
If `generation-manifest.cjs` is not yet installed, skip silently.
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# Generation: Tools
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Vendor the plugin tools closure and validation schemas into the project so
|
|
6
|
+
generated workflows can invoke tools via `node .forge/tools/<tool>.cjs` from
|
|
7
|
+
the project root without resolving `$FORGE_ROOT` at runtime.
|
|
8
|
+
|
|
9
|
+
Store validation schemas are loaded at runtime from `.forge/schemas/`
|
|
10
|
+
(project-installed), `forge/schemas/` (in-tree fallback), or
|
|
11
|
+
`$FORGE_ROOT/schemas/` (plugin-installed fallback). During init, schemas
|
|
12
|
+
are copied to `.forge/schemas/` so that validation works without relying
|
|
13
|
+
on fallback paths.
|
|
14
|
+
|
|
15
|
+
## Inputs
|
|
16
|
+
|
|
17
|
+
- `.forge/config.json` — target paths
|
|
18
|
+
|
|
19
|
+
## Outputs
|
|
20
|
+
|
|
21
|
+
- `.forge/tools/` — vendored plugin tools closure
|
|
22
|
+
- `.forge/tools/.forge-tools-version` — version marker for `/forge:health` staleness check
|
|
23
|
+
- `.forge/schemas/` — JSON Schema copies from the installed plugin
|
|
24
|
+
|
|
25
|
+
## Instructions
|
|
26
|
+
|
|
27
|
+
Read `.forge/config.json` for:
|
|
28
|
+
- `paths.store` (default: `.forge/store`)
|
|
29
|
+
|
|
30
|
+
### Step 1 — Copy validation schemas
|
|
31
|
+
|
|
32
|
+
Copy all JSON Schema files from the installed plugin to the project:
|
|
33
|
+
|
|
34
|
+
```sh
|
|
35
|
+
mkdir -p .forge/schemas
|
|
36
|
+
cp "$FORGE_ROOT/schemas/"*.schema.json .forge/schemas/
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
This ensures `store-cli.cjs` and `validate-store.cjs` can validate records
|
|
40
|
+
using the full schema (not the minimal fallback) even when the project is
|
|
41
|
+
not inside the Forge source tree.
|
|
42
|
+
|
|
43
|
+
### Step 2 — Vendor plugin tools
|
|
44
|
+
|
|
45
|
+
Copy the plugin tools closure into the project's `.forge/tools/` so that
|
|
46
|
+
generated artifacts can invoke `node .forge/tools/<tool>.cjs` from the
|
|
47
|
+
project root without resolving `$FORGE_ROOT`:
|
|
48
|
+
|
|
49
|
+
Copy BOTH `.cjs` and `.js` files. Some tools require `.js` helpers at load
|
|
50
|
+
time — e.g. `store-cli.cjs` does a top-level `require('./lib/validate.js')`
|
|
51
|
+
and `collate.cjs` requires `./lib/result.js` — so a `.cjs`-only copy leaves
|
|
52
|
+
`store-cli.cjs` dead-on-arrival and breaks KB collation. `-maxdepth 1`
|
|
53
|
+
excludes the `__tests__/` subtree without copying any `*.test.*` files.
|
|
54
|
+
|
|
55
|
+
```sh
|
|
56
|
+
mkdir -p .forge/tools/lib
|
|
57
|
+
|
|
58
|
+
# Copy top-level tool files (.cjs and .js — e.g. list-skills.js)
|
|
59
|
+
find "$FORGE_ROOT/tools" -maxdepth 1 -type f \( -name '*.cjs' -o -name '*.js' \) \
|
|
60
|
+
-exec cp {} .forge/tools/ \;
|
|
61
|
+
|
|
62
|
+
# Copy lib/ helper files (.cjs and .js — e.g. result.js, validate.js)
|
|
63
|
+
find "$FORGE_ROOT/tools/lib" -maxdepth 1 -type f \( -name '*.cjs' -o -name '*.js' \) \
|
|
64
|
+
-exec cp {} .forge/tools/lib/ \;
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
After copying, record each vendored file in the generation manifest so that
|
|
68
|
+
`/forge:health` can detect modifications or stale copies:
|
|
69
|
+
|
|
70
|
+
```sh
|
|
71
|
+
for f in $(find .forge/tools .forge/tools/lib -maxdepth 1 -type f \( -name '*.cjs' -o -name '*.js' \)); do
|
|
72
|
+
node "$FORGE_ROOT/tools/generation-manifest.cjs" record "$f"
|
|
73
|
+
done
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Step 2b — Write version marker
|
|
77
|
+
|
|
78
|
+
After the tool copy loop, write the version marker so `/forge:health` can
|
|
79
|
+
detect whether the vendored tools are stale relative to the active plugin:
|
|
80
|
+
|
|
81
|
+
```sh
|
|
82
|
+
ACTIVE_VERSION=$(node -e "console.log(require('$FORGE_ROOT/.claude-plugin/plugin.json').version)")
|
|
83
|
+
node -e "
|
|
84
|
+
const fs = require('fs');
|
|
85
|
+
fs.writeFileSync('.forge/tools/.forge-tools-version', JSON.stringify({ version: '${ACTIVE_VERSION}' }) + '\n');
|
|
86
|
+
"
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Step 3 — Verify
|
|
90
|
+
|
|
91
|
+
```sh
|
|
92
|
+
node "$FORGE_ROOT/tools/validate-store.cjs" --dry-run
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
If it exits non-zero, report the error. Do not proceed to Phase 9 until this passes.
|
|
96
|
+
|
|
97
|
+
### Step 4 — Register the Forge root
|
|
98
|
+
|
|
99
|
+
Write the project-relative Forge root into config. In the CLI-first vendored
|
|
100
|
+
world the `.forge/` directory IS the Forge root (tools, schemas, hooks, init,
|
|
101
|
+
meta are all vendored there) — NEVER write an absolute path (plugin cache,
|
|
102
|
+
npm global payload, …): absolute paths break on version upgrades, nvm/node
|
|
103
|
+
switches, and machine moves.
|
|
104
|
+
|
|
105
|
+
```sh
|
|
106
|
+
node .forge/tools/manage-config.cjs set paths.forgeRoot '".forge"'
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Step 5 — Record hashes
|
|
110
|
+
|
|
111
|
+
Record all generated artifacts in the generation manifest so health checks
|
|
112
|
+
can detect later modifications:
|
|
113
|
+
|
|
114
|
+
```sh
|
|
115
|
+
for f in .forge/schemas/*.schema.json; do
|
|
116
|
+
node "$FORGE_ROOT/tools/generation-manifest.cjs" record "$f"
|
|
117
|
+
done
|
|
118
|
+
node "$FORGE_ROOT/tools/generation-manifest.cjs" record .forge/config.json
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## Notes
|
|
122
|
+
|
|
123
|
+
- `/forge:update` automatically refreshes schemas and re-vendors tools as part
|
|
124
|
+
of its normal flow — run it after upgrades to pick up any changed tools or
|
|
125
|
+
schema updates from the new version.
|
|
126
|
+
- Generated workflow files invoke tools using the vendored project-relative path:
|
|
127
|
+
```
|
|
128
|
+
node .forge/tools/<tool>.cjs
|
|
129
|
+
```
|
|
130
|
+
This works from the project root without resolving `$FORGE_ROOT` at runtime.
|
|
131
|
+
- `paths.forgeRef` in config records the plugin version the project was generated
|
|
132
|
+
against. `forge-preflight.cjs` uses it to resolve the plugin root via cache
|
|
133
|
+
lookup when runtime telemetry requires the original plugin path.
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Workflow Generation — Per-Subagent Instructions
|
|
2
|
+
|
|
3
|
+
You are generating **ONE** workflow file. You have been given three inputs:
|
|
4
|
+
|
|
5
|
+
1. A **project brief** (`.forge/init-context.md`) — authoritative for all names,
|
|
6
|
+
paths, and placeholder values
|
|
7
|
+
2. A **meta-workflow source** — your generation algorithm and Generation Instructions
|
|
8
|
+
3. A **persona file** (already generated) — embed verbatim as the opening section
|
|
9
|
+
|
|
10
|
+
Your job is to produce exactly one file and return a one-line status.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Inputs
|
|
15
|
+
|
|
16
|
+
Read these three sources before writing anything:
|
|
17
|
+
|
|
18
|
+
- `.forge/init-context.md` — the project brief (passed inline in your prompt)
|
|
19
|
+
- `$FORGE_ROOT/meta/workflows/{meta}` — the meta-workflow for your assigned workflow
|
|
20
|
+
- `.forge/personas/{persona}.md` — the persona file for your assigned role
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Rules
|
|
25
|
+
|
|
26
|
+
1. **Write EXACTLY ONE file:** `.forge/workflows/{id}.md`
|
|
27
|
+
|
|
28
|
+
2. **Opening section** — the generated file must begin with:
|
|
29
|
+
a. The meta-workflow's YAML frontmatter block (`---` … `---`) verbatim,
|
|
30
|
+
if present. This carries `requirements:` fields used for runtime model
|
|
31
|
+
selection and must be preserved exactly.
|
|
32
|
+
b. Immediately after the closing `---`, embed the persona file content
|
|
33
|
+
verbatim as the first section. Do not paraphrase or summarise.
|
|
34
|
+
|
|
35
|
+
3. **Placeholder substitution** — all `{SYNTAX_CHECK}`, `{TEST_COMMAND}`,
|
|
36
|
+
`{BUILD_COMMAND}`, `{LINT_COMMAND}` values come from the brief's
|
|
37
|
+
`## Commands` section. Do not invent values.
|
|
38
|
+
|
|
39
|
+
4. **Name vocabulary** — all persona names, template names, architecture doc
|
|
40
|
+
names, and entity names MUST appear in the brief. Do not invent or rename
|
|
41
|
+
anything not listed there.
|
|
42
|
+
|
|
43
|
+
5. **Required steps** — follow the meta-workflow's Generation Instructions.
|
|
44
|
+
Include the Knowledge Writeback step and the Event Emission step as defined
|
|
45
|
+
in the meta-workflow (unless the meta explicitly omits them, e.g. quiz_agent).
|
|
46
|
+
|
|
47
|
+
6. **Enforcement quality** — for review workflows, include:
|
|
48
|
+
- A Rationalization Table of common agent excuses and factual rebuttals
|
|
49
|
+
- "YOU MUST" / "No exceptions" gate language at critical checks
|
|
50
|
+
- An announcement pattern: the agent declares intent at workflow start
|
|
51
|
+
|
|
52
|
+
7. **No free-form additions** — do not add sections, steps, or notes beyond
|
|
53
|
+
what the meta-workflow and project brief prescribe.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Self-check (mandatory last step)
|
|
58
|
+
|
|
59
|
+
After writing the file, verify before returning:
|
|
60
|
+
|
|
61
|
+
1. Read back `.forge/workflows/{id}.md`
|
|
62
|
+
2. Confirm the persona symbol appears as the **first non-blank line after the
|
|
63
|
+
closing `---`** of the frontmatter block (or as the absolute first non-blank
|
|
64
|
+
line if the meta-workflow had no frontmatter). The symbol is listed in the
|
|
65
|
+
brief's `## Personas` section for this workflow's role.
|
|
66
|
+
3. Confirm **no unsubstituted placeholders** remain (no literal `{TEST_COMMAND}`,
|
|
67
|
+
`{BUILD_COMMAND}`, `{SYNTAX_CHECK}`, or `{LINT_COMMAND}` in the file)
|
|
68
|
+
4. Record in the manifest:
|
|
69
|
+
```sh
|
|
70
|
+
node "$FORGE_ROOT/tools/generation-manifest.cjs" record ".forge/workflows/{id}.md"
|
|
71
|
+
```
|
|
72
|
+
(If generation-manifest.cjs is not yet installed, skip silently.)
|
|
73
|
+
|
|
74
|
+
5. Return **exactly one line**:
|
|
75
|
+
- `done: <first 80 chars of the written file>` — on success
|
|
76
|
+
- `FAILED: <reason>` — if any step above failed or the file could not be written
|
|
77
|
+
|
|
78
|
+
Do not output anything else after the status line.
|
|
@@ -9,6 +9,10 @@ parent directory — the folder containing `meta/` and `init/`).
|
|
|
9
9
|
|
|
10
10
|
## Pre-flight — Knowledge Base Folder
|
|
11
11
|
|
|
12
|
+
> **Orchestrator note:** If your orchestrator (e.g. the `wfl:init` driver or the CLI-first
|
|
13
|
+
> wrapper) has already supplied a `kbFolder` value, use it directly — skip this prompt.
|
|
14
|
+
> This interactive block applies only to unmediated orchestrator-free execution.
|
|
15
|
+
|
|
12
16
|
Before Phase 1 begins, ask the user where to create the knowledge base folder:
|
|
13
17
|
|
|
14
18
|
```
|
|
@@ -74,13 +78,13 @@ Using your discovery findings, write `.forge/config.json` with this structure:
|
|
|
74
78
|
"engineering": "engineering",
|
|
75
79
|
"store": ".forge/store",
|
|
76
80
|
"workflows": ".forge/workflows",
|
|
77
|
-
"commands": ".claude/commands
|
|
81
|
+
"commands": ".claude/commands/forge",
|
|
78
82
|
"templates": ".forge/templates"
|
|
79
83
|
}
|
|
80
84
|
}
|
|
81
85
|
```
|
|
82
86
|
|
|
83
|
-
|
|
87
|
+
`paths.commands` is ALWAYS `".claude/commands/forge"` — the command namespace is fixed (CLI-first redesign); it does NOT derive from the project prefix.
|
|
84
88
|
|
|
85
89
|
Write using:
|
|
86
90
|
```sh
|
|
@@ -103,6 +107,10 @@ If any key is missing or empty, fix it now before proceeding.
|
|
|
103
107
|
|
|
104
108
|
### Step 5 — Marketplace Skills
|
|
105
109
|
|
|
110
|
+
> **Orchestrator note:** If your orchestrator handles the skills install offer post-workflow
|
|
111
|
+
> (e.g. the `init.md` wrapper does this after `wfl:init` returns), skip this step. Return
|
|
112
|
+
> `{ matches, alreadyInstalled }` from the config-writer agent instead.
|
|
113
|
+
|
|
106
114
|
Read `$FORGE_ROOT/meta/skill-recommendations.md` for the full mapping.
|
|
107
115
|
|
|
108
116
|
Using the stack discovered above, look up matching skills from the recommendation
|
|
@@ -63,7 +63,7 @@ node "$FORGE_ROOT/tools/substitute-placeholders.cjs" \
|
|
|
63
63
|
```
|
|
64
64
|
|
|
65
65
|
Output directories (managed by the tool's `SUBDIR_OUTPUT_MAP`):
|
|
66
|
-
- `base-pack/commands/` → `.claude/commands
|
|
66
|
+
- `base-pack/commands/` → `.claude/commands/forge/` (fixed namespace — CLI-first redesign)
|
|
67
67
|
- `base-pack/personas/` → `.forge/personas/`
|
|
68
68
|
- `base-pack/skills/` → `.forge/skills/`
|
|
69
69
|
- `base-pack/workflows/` → `.forge/workflows/`
|
|
@@ -102,6 +102,10 @@ console.log('ノ update-check-cache.json written');
|
|
|
102
102
|
|
|
103
103
|
### Step 11 — Tomoshibi (refresh-kb-links)
|
|
104
104
|
|
|
105
|
+
> **Orchestrator note:** This step is orchestrator-owned. When running under `wfl:init`, the
|
|
106
|
+
> register agent returns `pendingActions: ["refresh-kb-links"]` and the command wrapper
|
|
107
|
+
> invokes the Skill. Do NOT execute this step if your orchestrator owns it.
|
|
108
|
+
|
|
105
109
|
Use the Skill tool:
|
|
106
110
|
```
|
|
107
111
|
skill: "forge:refresh-kb-links"
|
|
@@ -134,6 +138,10 @@ Fallback if unavailable:
|
|
|
134
138
|
|
|
135
139
|
### Step 13 — Agent instruction file linking
|
|
136
140
|
|
|
141
|
+
> **Orchestrator note:** If your orchestrator pre-answered the CLAUDE.md creation prompt
|
|
142
|
+
> (via `args.createClaudeMd`), use that value directly — skip the interactive prompt.
|
|
143
|
+
> Execute the file creation only if `createClaudeMd === true`.
|
|
144
|
+
|
|
137
145
|
Check whether any agent instruction file exists at the project root:
|
|
138
146
|
```sh
|
|
139
147
|
ls CLAUDE.md AGENTS.md CLAUDE.local.md .cursorrules 2>/dev/null
|