@syntesseraai/opencode-feature-factory 0.10.3 → 0.10.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +41 -108
- package/agents/building.md +10 -14
- package/agents/documenting.md +9 -14
- package/agents/feature-factory.md +0 -1
- package/agents/ff-research.md +5 -1
- package/agents/planning.md +4 -3
- package/agents/reviewing.md +3 -3
- package/bin/ff-deploy.js +8 -37
- package/dist/index.js +2 -2
- package/dist/mcp-config.d.ts +9 -1
- package/dist/mcp-config.js +7 -0
- package/dist/plugin-config.js +0 -2
- package/dist/tools/mini-loop.js +5 -5
- package/dist/tools/pipeline.js +5 -5
- package/package.json +1 -2
- package/command/mini-loop/documentation/document.md +0 -15
- package/command/mini-loop/documentation/gate.md +0 -16
- package/command/mini-loop/documentation/review.md +0 -17
- package/command/mini-loop/documentation/run.md +0 -16
- package/command/mini-loop/implementation/build.md +0 -15
- package/command/mini-loop/implementation/gate.md +0 -16
- package/command/mini-loop/implementation/review.md +0 -17
- package/command/mini-loop/implementation/run.md +0 -16
- package/command/mini-loop/start.md +0 -11
- package/command/pipeline/building/breakdown.md +0 -18
- package/command/pipeline/building/implement-batch.md +0 -26
- package/command/pipeline/building/run.md +0 -13
- package/command/pipeline/building/validate-batch.md +0 -17
- package/command/pipeline/complete.md +0 -13
- package/command/pipeline/documentation/document.md +0 -22
- package/command/pipeline/documentation/gate.md +0 -20
- package/command/pipeline/documentation/review.md +0 -22
- package/command/pipeline/documentation/run.md +0 -16
- package/command/pipeline/planning/confirm.md +0 -18
- package/command/pipeline/planning/gate.md +0 -24
- package/command/pipeline/planning/plan.md +0 -25
- package/command/pipeline/planning/run.md +0 -15
- package/command/pipeline/planning/synthesize.md +0 -22
- package/command/pipeline/reviewing/gate.md +0 -16
- package/command/pipeline/reviewing/review.md +0 -20
- package/command/pipeline/reviewing/run.md +0 -21
- package/command/pipeline/reviewing/synthesize.md +0 -18
- package/command/pipeline/reviewing/triage.md +0 -16
- package/command/pipeline/start.md +0 -14
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @syntesseraai/opencode-feature-factory
|
|
2
2
|
|
|
3
|
-
OpenCode plugin that provides Feature Factory agents, skills, and
|
|
3
|
+
OpenCode plugin that provides Feature Factory agents, skills, and workflow MCP tools.
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
@@ -19,144 +19,77 @@ OpenCode plugin that provides Feature Factory agents, skills, and pipeline comma
|
|
|
19
19
|
npx @syntesseraai/opencode-feature-factory install
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
The installer deploys to `~/.config/opencode/`:
|
|
23
23
|
|
|
24
24
|
- `agents/`
|
|
25
25
|
- `skills/`
|
|
26
|
-
- `command/`
|
|
27
26
|
|
|
28
27
|
It also updates `~/.config/opencode/opencode.json` non-destructively by merging missing Feature Factory MCP entries and plugins without deleting existing user configuration.
|
|
29
28
|
|
|
30
29
|
## Install Behavior
|
|
31
30
|
|
|
32
|
-
- **Always overwrites packaged assets**: installer unconditionally overwrites Feature Factory `agents
|
|
31
|
+
- **Always overwrites packaged assets**: installer unconditionally overwrites Feature Factory `agents` and `skills` files on every install.
|
|
33
32
|
- **`opencode.json` is non-destructive**: existing keys/values are preserved; only missing required plugin/MCP entries are added.
|
|
33
|
+
- **No automatic plugin removals**: existing plugin entries are preserved as-is, including entries no longer in current defaults.
|
|
34
34
|
- **Global scope**: assets are installed to `~/.config/opencode/` and shared across projects.
|
|
35
35
|
|
|
36
|
-
## Agent Frontmatter Metadata
|
|
37
|
-
|
|
38
|
-
All shipped Feature Factory agent manifests under `agents/*.md` include a `color` frontmatter field using a valid hex value.
|
|
39
|
-
|
|
40
|
-
| Agent | Color |
|
|
41
|
-
| ----------------- | --------- |
|
|
42
|
-
| `feature-factory` | `#10b981` |
|
|
43
|
-
| `planning` | `#3b82f6` |
|
|
44
|
-
| `building` | `#22c55e` |
|
|
45
|
-
| `reviewing` | `#8b5cf6` |
|
|
46
|
-
| `documenting` | `#f97316` |
|
|
47
|
-
| `ff-research` | `#6366f1` |
|
|
48
|
-
|
|
49
|
-
These colors are intentionally unique to avoid collisions in OpenCode agent UIs and logs.
|
|
50
|
-
|
|
51
|
-
## Pipeline Entrypoint
|
|
52
|
-
|
|
53
|
-
- Invoke `/pipeline/start <requirements-brief>` directly from any agent (e.g. `@building`).
|
|
54
|
-
- There is no dedicated `@pipeline` intake agent; the command tree handles orchestration autonomously.
|
|
55
|
-
- Orchestration is implemented by the command tree under `command/pipeline/` using subtask2 primitives (`return`, `parallel`, `loop`).
|
|
56
|
-
- Orchestration wrapper commands (`/pipeline/start`, `/pipeline/*/run`, `/pipeline/complete`) pin `agent: general` to avoid recursive self-invocation before phase-specific delegation begins.
|
|
57
|
-
- Coordinator and synthesis model defaults to ChatGPT 5.4 via frontmatter `model:` declarations in orchestrator commands.
|
|
58
|
-
- All orchestrator commands include an explicit **orchestrator constraint**: they must NOT directly read, edit, modify, write, or create any code/config/repository files — they only dispatch sub-commands, pass structured data via `{as:name}` / `$RESULT[name]`, and evaluate gate/loop conditions.
|
|
59
|
-
|
|
60
36
|
## Tools
|
|
61
37
|
|
|
62
38
|
The plugin exposes three MCP tools via the `feature-factory` agent:
|
|
63
39
|
|
|
64
|
-
| Tool | Description
|
|
65
|
-
| ---------------- |
|
|
66
|
-
| `ff_pipeline` | Full multi-model
|
|
67
|
-
| `ff_mini_loop` | Lightweight build
|
|
68
|
-
| `ff_list_models` | Read-only discovery tool
|
|
40
|
+
| Tool | Description |
|
|
41
|
+
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
42
|
+
| `ff_pipeline` | Full multi-model workflow: planning -> build -> CI -> review -> documentation. Uses hardcoded per-role model defaults and supports optional `worktree_isolation` / `worktree_parent_dir`. |
|
|
43
|
+
| `ff_mini_loop` | Lightweight build -> CI -> review -> documentation loop. Model parameters inherit the current session model when omitted. Supports optional `worktree_isolation` / `worktree_parent_dir`. |
|
|
44
|
+
| `ff_list_models` | Read-only discovery tool that lists available providers/models and defaults from the OpenCode SDK. |
|
|
69
45
|
|
|
70
46
|
### Mini-Loop Model Inheritance
|
|
71
47
|
|
|
72
|
-
When `ff_mini_loop` model parameters are omitted, child sessions inherit the parent session
|
|
73
|
-
|
|
74
|
-
## Command Tree
|
|
75
|
-
|
|
76
|
-
- `/pipeline/start`
|
|
77
|
-
- `/pipeline/planning/run`, `/pipeline/planning/plan`, `/pipeline/planning/synthesize`, `/pipeline/planning/gate`, `/pipeline/planning/confirm`
|
|
78
|
-
- `/pipeline/building/run`, `/pipeline/building/breakdown`, `/pipeline/building/validate-batch`, `/pipeline/building/implement-batch`
|
|
79
|
-
- `/pipeline/reviewing/run`, `/pipeline/reviewing/triage`, `/pipeline/reviewing/review`, `/pipeline/reviewing/synthesize`, `/pipeline/reviewing/gate`
|
|
80
|
-
- `/pipeline/documentation/run`, `/pipeline/documentation/document`, `/pipeline/documentation/review`, `/pipeline/documentation/gate`
|
|
81
|
-
- `/pipeline/complete`
|
|
82
|
-
- `/mini-loop/start`
|
|
83
|
-
- `/mini-loop/implementation/run`, `/mini-loop/implementation/build`, `/mini-loop/implementation/review`, `/mini-loop/implementation/gate`
|
|
84
|
-
- `/mini-loop/documentation/run`, `/mini-loop/documentation/document`, `/mini-loop/documentation/review`, `/mini-loop/documentation/gate`
|
|
85
|
-
- Mini-loop wrapper commands (`/mini-loop/start`, `/mini-loop/*/run`) also pin `agent: general` so they can be safely launched from any caller agent.
|
|
86
|
-
|
|
87
|
-
## Model Routing
|
|
88
|
-
|
|
89
|
-
Models are declared in each command's frontmatter (`model:` field). Multi-model fan-out targets (`plan.md`, `review.md`) use per-invocation `{model:...}` overrides since they are invoked multiple times with different models.
|
|
90
|
-
|
|
91
|
-
| Role | Model | Commands |
|
|
92
|
-
| ----------------------- | --------------------------- | --------------------------------------------------------------------------- |
|
|
93
|
-
| Orchestration/reasoning | `openai/gpt-5.4` | All `run.md`, `start.md`, `complete.md`, gates, triage, synthesize, confirm |
|
|
94
|
-
| Implementation | `openai/gpt-5.3-codex` | `implement-batch`, `build`, `document` |
|
|
95
|
-
| Architecture analysis | `anthropic/claude-opus-4-6` | `breakdown`, review fan-out (opus slot) |
|
|
96
|
-
| Validation | `opencode/gemini-3.1-pro` | `validate-batch`, documentation review, review fan-out (gemini slot) |
|
|
97
|
-
| Multi-model fan-out | per-invocation | `plan.md`, `review.md` |
|
|
48
|
+
When `ff_mini_loop` model parameters are omitted, child sessions inherit the parent session model (the SDK `model` field is omitted). The `doc_model` has a cascade: if `build_model` is set and `doc_model` is omitted, documentation uses `build_model`.
|
|
98
49
|
|
|
99
|
-
|
|
100
|
-
- Planning fan-out (with architecture validation): opus, gemini, and codex models in parallel
|
|
101
|
-
- Implementation: codex via frontmatter model declaration in `implement-batch.md`, with parallel `building` sub-agents per independent task within each batch
|
|
102
|
-
- Review fan-out (with architecture validation): opus, gemini, and codex models in parallel
|
|
103
|
-
- Rework path: `/pipeline/reviewing/run` re-enters implementation via `/pipeline/building/implement-batch` when gate status is `REWORK`
|
|
104
|
-
- Documentation stage: codex updates documentation, gemini reviews docs, and orchestrator (`gpt-5.4`) supervises a bounded loop until approved
|
|
105
|
-
- Documentation stage skill usage: codex pass loads `ff-todo-management`, `ff-mini-plan`; gemini review pass loads `ff-report-templates` and `ff-severity-classification`
|
|
50
|
+
## Global Config Defaults
|
|
106
51
|
|
|
107
|
-
|
|
52
|
+
The plugin merges the following MCP servers into global OpenCode config when missing:
|
|
108
53
|
|
|
109
|
-
-
|
|
110
|
-
-
|
|
111
|
-
-
|
|
112
|
-
-
|
|
54
|
+
- `jina-ai`
|
|
55
|
+
- `gh_grep`
|
|
56
|
+
- `context7`
|
|
57
|
+
- `morph-mcp`
|
|
113
58
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
Both `ff_pipeline` and `ff_mini_loop` tools run asynchronously with real-time progress notifications:
|
|
117
|
-
|
|
118
|
-
- **Immediate return**: Tools return instantly with a brief acknowledgment (e.g. `Pipeline started for: <summary>`), so the LLM can continue the conversation.
|
|
119
|
-
- **Background orchestration**: The full pipeline or mini-loop runs in a detached `Promise`. All child session orchestration (fan-out, gates, loops) remains identical — it just executes after the tool returns.
|
|
120
|
-
- **Progress updates via `promptAsync(noReply: true)`**: After each major phase completes, a structured notification is injected into the parent session as a visible chat message. These appear in the OpenCode TUI without triggering an LLM turn.
|
|
121
|
-
- **Phase-by-phase visibility**: Users see updates for planning, building, CI validation (when `ff-ci.sh` present), each review iteration gate decision, each documentation iteration, and the final completion report.
|
|
122
|
-
- **Error notifications**: If the background orchestration throws, a `# Pipeline: Error` or `# Mini-Loop: Error` notification is sent with the last phase and error message.
|
|
123
|
-
- **`context.metadata()` retained**: All existing metadata calls remain in place for future-proofing (when OpenCode's TUI renders tool metadata natively).
|
|
124
|
-
|
|
125
|
-
### Notification Format
|
|
126
|
-
|
|
127
|
-
Pipeline notifications use plain-text markdown headers with phase START/END bracketing and per-iteration gate details:
|
|
59
|
+
`morph-mcp` is configured as:
|
|
128
60
|
|
|
61
|
+
```json
|
|
62
|
+
"morph-mcp": {
|
|
63
|
+
"type": "local",
|
|
64
|
+
"command": ["npx", "-y", "@morphllm/morphmcp"],
|
|
65
|
+
"environment": {
|
|
66
|
+
"MORPH_API_KEY": "{env:MORPH_API_KEY}"
|
|
67
|
+
}
|
|
68
|
+
}
|
|
129
69
|
```
|
|
130
|
-
# Pipeline: Reviewing — Iteration 2/10
|
|
131
70
|
|
|
132
|
-
|
|
133
|
-
Confidence: 97%
|
|
134
|
-
Unresolved Issues: 0
|
|
135
|
-
Duration: 45.3s
|
|
136
|
-
Feedback: N/A
|
|
137
|
-
```
|
|
71
|
+
The plugin also merges the following default plugins when they are missing:
|
|
138
72
|
|
|
139
|
-
|
|
73
|
+
- `@syntesseraai/opencode-feature-factory@latest`
|
|
74
|
+
- `@nick-vi/opencode-type-inject@latest`
|
|
75
|
+
- `@franlol/opencode-md-table-formatter@latest`
|
|
76
|
+
- `opencode-pty@latest`
|
|
140
77
|
|
|
141
|
-
|
|
142
|
-
# Mini-Loop: Building — Iteration 1/10
|
|
78
|
+
### Merge Outcomes
|
|
143
79
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
Duration: 23.1s
|
|
148
|
-
Feedback: Fix type errors in handler.ts
|
|
149
|
-
```
|
|
80
|
+
`DEFAULT_MCP_SERVERS` currently includes 4 servers (`jina-ai`, `gh_grep`, `context7`, `morph-mcp`).
|
|
81
|
+
|
|
82
|
+
The merge behavior is additive and non-destructive:
|
|
150
83
|
|
|
151
|
-
|
|
84
|
+
- Empty or missing existing MCP config -> 4 servers after merge.
|
|
85
|
+
- Existing config with 1 custom server and a customized `gh_grep` entry -> 5 servers after merge (custom + customized `gh_grep` + 3 missing defaults).
|
|
86
|
+
- Existing server definitions are preserved and never overwritten by defaults.
|
|
152
87
|
|
|
153
|
-
|
|
88
|
+
Plugin merge behavior is also additive and non-destructive:
|
|
154
89
|
|
|
155
|
-
-
|
|
156
|
-
-
|
|
157
|
-
-
|
|
158
|
-
- Detached worktrees are cleaned up automatically after the background run finishes, exits early, or fails.
|
|
159
|
-
- CI checks (`ff-ci.sh`) run against the resolved run directory (worktree when enabled, current directory otherwise).
|
|
90
|
+
- Existing plugin entries are preserved and never removed.
|
|
91
|
+
- Matching is by package base name, so pinned versions (for example `opencode-pty@1.2.3`) prevent adding the `@latest` variant.
|
|
92
|
+
- Legacy `@spoons-and-mirrors/subtask2` entries in user config remain untouched if already present, but are no longer added to new installs/default merges.
|
|
160
93
|
|
|
161
94
|
## Related Docs
|
|
162
95
|
|
package/agents/building.md
CHANGED
|
@@ -4,10 +4,10 @@ mode: primary
|
|
|
4
4
|
color: '#22c55e'
|
|
5
5
|
tools:
|
|
6
6
|
read: true
|
|
7
|
-
write:
|
|
8
|
-
edit:
|
|
7
|
+
write: false
|
|
8
|
+
edit: false
|
|
9
|
+
edit_file: true
|
|
9
10
|
bash: true
|
|
10
|
-
hashline_edit: true
|
|
11
11
|
skill: true
|
|
12
12
|
task: true
|
|
13
13
|
permission:
|
|
@@ -34,23 +34,19 @@ You are the building specialist.
|
|
|
34
34
|
- Do not rely on intermediate artifact files for pipeline progression.
|
|
35
35
|
- Persist only when explicitly requested by the user.
|
|
36
36
|
|
|
37
|
-
##
|
|
37
|
+
## Editing Workflow (Required)
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
Use Morph MCP `edit_file` for all implementation edits.
|
|
40
40
|
|
|
41
|
-
1. **
|
|
42
|
-
2. **
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
```
|
|
46
|
-
3. **Use built-in `edit`/`write`** for standard edits — hashline prefixes are automatically stripped before the tool executes.
|
|
47
|
-
4. **After any edit/write**, re-read the file to get fresh refs before further edits.
|
|
48
|
-
|
|
49
|
-
Never fabricate refs — always use exactly the refs returned by `read`.
|
|
41
|
+
1. **Read before editing** to confirm current behavior and scope.
|
|
42
|
+
2. **Apply changes with `edit_file`** for targeted replacements/insertions.
|
|
43
|
+
3. **Re-read after edits** to verify the applied diff and avoid stale assumptions.
|
|
44
|
+
4. **Avoid fallback editors** unless `edit_file` cannot express the required change.
|
|
50
45
|
|
|
51
46
|
## Semantic Code Search
|
|
52
47
|
|
|
53
48
|
Use `cocoindex-code_search` for semantic code search when you need to:
|
|
49
|
+
|
|
54
50
|
- Find implementations by meaning, not just text matching (e.g., "authentication logic", "database connection handling")
|
|
55
51
|
- Locate related code without knowing exact names or keywords
|
|
56
52
|
- Understand how features work across the codebase
|
package/agents/documenting.md
CHANGED
|
@@ -4,10 +4,10 @@ mode: primary
|
|
|
4
4
|
color: '#f97316'
|
|
5
5
|
tools:
|
|
6
6
|
read: true
|
|
7
|
-
write:
|
|
8
|
-
edit:
|
|
7
|
+
write: false
|
|
8
|
+
edit: false
|
|
9
|
+
edit_file: true
|
|
9
10
|
bash: false
|
|
10
|
-
hashline_edit: true
|
|
11
11
|
skill: true
|
|
12
12
|
task: true
|
|
13
13
|
permission:
|
|
@@ -26,19 +26,14 @@ You are the documenting specialist.
|
|
|
26
26
|
- Keep docs concise, consistent, and free of stale references.
|
|
27
27
|
- Return a structured summary for documentation review.
|
|
28
28
|
|
|
29
|
-
##
|
|
29
|
+
## Editing Workflow (Required)
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
Use Morph MCP `edit_file` for documentation updates.
|
|
32
32
|
|
|
33
|
-
1. **
|
|
34
|
-
2. **
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
```
|
|
38
|
-
3. **Use built-in `edit`/`write`** for standard edits — hashline prefixes are automatically stripped.
|
|
39
|
-
4. **After any edit/write**, re-read the file to get fresh refs before further edits.
|
|
40
|
-
|
|
41
|
-
Never fabricate refs — always use exactly the refs returned by `read`.
|
|
33
|
+
1. **Read before editing** to confirm the current content and linked references.
|
|
34
|
+
2. **Apply changes with `edit_file`** for precise doc updates.
|
|
35
|
+
3. **Re-read after edits** to validate wording and cross-doc consistency.
|
|
36
|
+
4. **Avoid fallback editors** unless `edit_file` cannot express the required change.
|
|
42
37
|
|
|
43
38
|
## Semantic Code Search
|
|
44
39
|
|
package/agents/ff-research.md
CHANGED
|
@@ -7,7 +7,6 @@ tools:
|
|
|
7
7
|
write: false
|
|
8
8
|
edit: false
|
|
9
9
|
bash: false
|
|
10
|
-
hashline_edit: false
|
|
11
10
|
skill: true
|
|
12
11
|
task: false
|
|
13
12
|
permission:
|
|
@@ -28,6 +27,7 @@ You are the research specialist.
|
|
|
28
27
|
You have access to powerful external research tools. **Use them proactively:**
|
|
29
28
|
|
|
30
29
|
### Web Search & Reading
|
|
30
|
+
|
|
31
31
|
- **`jina-ai_search_web`** — Search the web for current information, docs, articles. Use for up-to-date library info, best practices, changelogs.
|
|
32
32
|
- **`jina-ai_read_url`** — Read and extract content from any URL. Use to read official documentation, blog posts, READMEs.
|
|
33
33
|
- **`jina-ai_expand_query`** — Expand search queries for broader coverage.
|
|
@@ -35,17 +35,21 @@ You have access to powerful external research tools. **Use them proactively:**
|
|
|
35
35
|
- **`jina-ai_parallel_read_url`** — Read multiple URLs in parallel.
|
|
36
36
|
|
|
37
37
|
### Library Documentation
|
|
38
|
+
|
|
38
39
|
- **`context7_resolve-library-id`** — Resolve a library name to a Context7 ID. Call this first before querying docs.
|
|
39
40
|
- **`context7_query-docs`** — Query up-to-date library documentation with code examples. Excellent for API usage, configuration, and best practices.
|
|
40
41
|
|
|
41
42
|
### Code Examples
|
|
43
|
+
|
|
42
44
|
- **`gh_grep_searchGitHub`** — Find real-world code examples from public GitHub repos. Search for literal code patterns (e.g., `useState(`, `import React from`), NOT keywords. Use to see how real projects implement specific patterns.
|
|
43
45
|
|
|
44
46
|
### Academic Papers
|
|
47
|
+
|
|
45
48
|
- **`jina-ai_search_arxiv`** — Search arXiv for research papers (AI, CS, physics, math).
|
|
46
49
|
- **`jina-ai_search_ssrn`** — Search SSRN for social science research.
|
|
47
50
|
|
|
48
51
|
### Semantic Code Search
|
|
52
|
+
|
|
49
53
|
- **`cocoindex-code_search`** — Search the local codebase by meaning. Use to understand the project's existing patterns before recommending changes.
|
|
50
54
|
|
|
51
55
|
## Method
|
package/agents/planning.md
CHANGED
|
@@ -7,7 +7,6 @@ tools:
|
|
|
7
7
|
write: false
|
|
8
8
|
edit: false
|
|
9
9
|
bash: false
|
|
10
|
-
hashline_edit: false
|
|
11
10
|
skill: true
|
|
12
11
|
task: true
|
|
13
12
|
permission:
|
|
@@ -26,15 +25,16 @@ You are the planning specialist.
|
|
|
26
25
|
- Identify risks, assumptions, and validation strategy.
|
|
27
26
|
- Apply planning gate criteria and emit explicit status lines.
|
|
28
27
|
|
|
29
|
-
##
|
|
28
|
+
## Editing Guidance
|
|
30
29
|
|
|
31
|
-
|
|
30
|
+
Implementation should prefer Morph MCP `edit_file` for code changes. In planning outputs, reference concrete files and intended edits, not line-hash references.
|
|
32
31
|
|
|
33
32
|
You are a read-only agent — you do not write or edit files.
|
|
34
33
|
|
|
35
34
|
## Semantic Code Search
|
|
36
35
|
|
|
37
36
|
Use `cocoindex-code_search` for semantic code search when planning:
|
|
37
|
+
|
|
38
38
|
- Understand existing architecture by meaning (e.g., "authentication logic", "API routing")
|
|
39
39
|
- Find related implementations before proposing changes
|
|
40
40
|
- Verify assumptions about how code works
|
|
@@ -44,6 +44,7 @@ Prefer this over `grep` when searching by concept rather than exact text.
|
|
|
44
44
|
## External Research
|
|
45
45
|
|
|
46
46
|
Use `@ff-research` for external/library uncertainty. The research agent has access to:
|
|
47
|
+
|
|
47
48
|
- `jina-ai_search_web` / `jina-ai_read_url` for web search and documentation
|
|
48
49
|
- `context7_query-docs` for library-specific documentation
|
|
49
50
|
- `gh_grep_searchGitHub` for real-world code examples
|
package/agents/reviewing.md
CHANGED
|
@@ -7,7 +7,6 @@ tools:
|
|
|
7
7
|
write: false
|
|
8
8
|
edit: false
|
|
9
9
|
bash: false
|
|
10
|
-
hashline_edit: false
|
|
11
10
|
skill: true
|
|
12
11
|
task: true
|
|
13
12
|
permission:
|
|
@@ -26,15 +25,16 @@ You are the unified reviewing specialist.
|
|
|
26
25
|
- Apply scope based on context: acceptance, code quality, security, architecture, documentation.
|
|
27
26
|
- Return actionable findings with severity and confidence.
|
|
28
27
|
|
|
29
|
-
##
|
|
28
|
+
## File Review Guidance
|
|
30
29
|
|
|
31
|
-
Use the `read` tool to inspect files
|
|
30
|
+
Use the `read` tool to inspect files and cite standard line references in findings. Do not require hash-based line references.
|
|
32
31
|
|
|
33
32
|
You are a read-only agent — you do not write or edit files.
|
|
34
33
|
|
|
35
34
|
## Semantic Code Search
|
|
36
35
|
|
|
37
36
|
Use `cocoindex-code_search` for semantic code search when reviewing:
|
|
37
|
+
|
|
38
38
|
- Search by meaning to find related code (e.g., "input validation", "access control checks")
|
|
39
39
|
- Verify that implementations match architectural patterns across the codebase
|
|
40
40
|
- Find similar code to check for consistency
|
package/bin/ff-deploy.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* Feature Factory Deployment Script
|
|
5
5
|
*
|
|
6
|
-
* Deploys skills
|
|
6
|
+
* Deploys skills and agents to the global OpenCode configuration directory.
|
|
7
7
|
* Run manually with: npx @syntesseraai/opencode-feature-factory
|
|
8
8
|
*/
|
|
9
9
|
|
|
@@ -18,13 +18,11 @@ const __dirname = dirname(__filename);
|
|
|
18
18
|
const GLOBAL_CONFIG_DIR = join(homedir(), '.config', 'opencode');
|
|
19
19
|
const SKILLS_DIR = join(GLOBAL_CONFIG_DIR, 'skills');
|
|
20
20
|
const AGENTS_DIR = join(GLOBAL_CONFIG_DIR, 'agents');
|
|
21
|
-
const COMMAND_DIR = join(GLOBAL_CONFIG_DIR, 'command');
|
|
22
21
|
const GLOBAL_CONFIG_FILE = join(GLOBAL_CONFIG_DIR, 'opencode.json');
|
|
23
22
|
|
|
24
23
|
const PACKAGE_ROOT = join(__dirname, '..');
|
|
25
24
|
const SOURCE_SKILLS_DIR = join(PACKAGE_ROOT, 'skills');
|
|
26
25
|
const SOURCE_AGENTS_DIR = join(PACKAGE_ROOT, 'agents');
|
|
27
|
-
const SOURCE_COMMAND_DIR = join(PACKAGE_ROOT, 'command');
|
|
28
26
|
|
|
29
27
|
// Check if running in interactive mode (has TTY)
|
|
30
28
|
const isInteractive = process.stdin.isTTY && process.stdout.isTTY;
|
|
@@ -49,15 +47,20 @@ const DEFAULT_MCP_SERVERS = {
|
|
|
49
47
|
CONTEXT7_API_KEY: '{env:CONTEXT7_API_KEY}',
|
|
50
48
|
},
|
|
51
49
|
},
|
|
50
|
+
'morph-mcp': {
|
|
51
|
+
type: 'local',
|
|
52
|
+
command: ['npx', '-y', '@morphllm/morphmcp'],
|
|
53
|
+
environment: {
|
|
54
|
+
MORPH_API_KEY: '{env:MORPH_API_KEY}',
|
|
55
|
+
},
|
|
56
|
+
},
|
|
52
57
|
};
|
|
53
58
|
|
|
54
59
|
const DEFAULT_PLUGINS = [
|
|
55
60
|
'@syntesseraai/opencode-feature-factory@latest',
|
|
56
61
|
'@nick-vi/opencode-type-inject@latest',
|
|
57
62
|
'@franlol/opencode-md-table-formatter@latest',
|
|
58
|
-
'@spoons-and-mirrors/subtask2@latest',
|
|
59
63
|
'opencode-pty@latest',
|
|
60
|
-
'opencode-hashline@latest',
|
|
61
64
|
];
|
|
62
65
|
|
|
63
66
|
function getPackageBaseName(plugin) {
|
|
@@ -132,26 +135,6 @@ async function getFileNames(dir) {
|
|
|
132
135
|
}
|
|
133
136
|
}
|
|
134
137
|
|
|
135
|
-
async function getMarkdownFileCount(dir) {
|
|
136
|
-
try {
|
|
137
|
-
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
138
|
-
let count = 0;
|
|
139
|
-
|
|
140
|
-
for (const entry of entries) {
|
|
141
|
-
const entryPath = join(dir, entry.name);
|
|
142
|
-
if (entry.isDirectory()) {
|
|
143
|
-
count += await getMarkdownFileCount(entryPath);
|
|
144
|
-
} else if (entry.isFile() && entry.name.endsWith('.md')) {
|
|
145
|
-
count += 1;
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
return count;
|
|
150
|
-
} catch {
|
|
151
|
-
return 0;
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
|
|
155
138
|
async function updateMCPConfig() {
|
|
156
139
|
if (isInteractive) {
|
|
157
140
|
console.log('\n🔧 MCP Configuration Update');
|
|
@@ -292,7 +275,6 @@ async function deploy() {
|
|
|
292
275
|
await ensureDir(GLOBAL_CONFIG_DIR);
|
|
293
276
|
await ensureDir(SKILLS_DIR);
|
|
294
277
|
await ensureDir(AGENTS_DIR);
|
|
295
|
-
await ensureDir(COMMAND_DIR);
|
|
296
278
|
|
|
297
279
|
// Get existing skills/agents for reporting
|
|
298
280
|
const existingSkills = await getDirectoryNames(SKILLS_DIR);
|
|
@@ -333,22 +315,11 @@ async function deploy() {
|
|
|
333
315
|
}
|
|
334
316
|
}
|
|
335
317
|
|
|
336
|
-
// Deploy command files
|
|
337
|
-
if (isInteractive) {
|
|
338
|
-
console.log('\n⌨️ Deploying Commands...');
|
|
339
|
-
}
|
|
340
|
-
await copyDir(SOURCE_COMMAND_DIR, COMMAND_DIR);
|
|
341
|
-
const commandsCount = await getMarkdownFileCount(SOURCE_COMMAND_DIR);
|
|
342
|
-
if (isInteractive) {
|
|
343
|
-
console.log(` ✅ pipeline commands (${commandsCount} files) (overwritten)`);
|
|
344
|
-
}
|
|
345
|
-
|
|
346
318
|
// Summary
|
|
347
319
|
if (isInteractive) {
|
|
348
320
|
console.log('\n✨ Deployment Complete!');
|
|
349
321
|
console.log(` Skills: ${skills.length} deployed`);
|
|
350
322
|
console.log(` Agents: ${agents.length} deployed`);
|
|
351
|
-
console.log(` Commands: ${commandsCount} deployed`);
|
|
352
323
|
console.log(` Location: ${GLOBAL_CONFIG_DIR}`);
|
|
353
324
|
console.log('\n📝 Next Steps:');
|
|
354
325
|
console.log(' - Restart OpenCode or run /reload to load new agents');
|
package/dist/index.js
CHANGED
|
@@ -45,8 +45,8 @@ export const FeatureFactoryPlugin = async (input) => {
|
|
|
45
45
|
const qualityGateHooks = await StopQualityGateHooksPlugin(input).catch(() => ({}));
|
|
46
46
|
// Tool registry: workflow tools (ff_pipeline, ff_mini_loop) powered by
|
|
47
47
|
// the SDK client for programmatic session orchestration.
|
|
48
|
-
// The old ff-* artifact tools were removed;
|
|
49
|
-
//
|
|
48
|
+
// The old ff-* artifact tools were removed; orchestration is fully
|
|
49
|
+
// TypeScript-driven via these workflow tools.
|
|
50
50
|
const workflowTools = createWorkflowTools(input.client);
|
|
51
51
|
// Merge workflow tools with any existing tools from quality gate hooks
|
|
52
52
|
const existingTools = qualityGateHooks.tool ?? {};
|
package/dist/mcp-config.d.ts
CHANGED
|
@@ -22,12 +22,20 @@ export declare const DEFAULT_MCP_SERVERS: {
|
|
|
22
22
|
readonly CONTEXT7_API_KEY: "{env:CONTEXT7_API_KEY}";
|
|
23
23
|
};
|
|
24
24
|
};
|
|
25
|
+
readonly 'morph-mcp': {
|
|
26
|
+
readonly type: "local";
|
|
27
|
+
readonly command: readonly ["npx", "-y", "@morphllm/morphmcp"];
|
|
28
|
+
readonly environment: {
|
|
29
|
+
readonly MORPH_API_KEY: "{env:MORPH_API_KEY}";
|
|
30
|
+
};
|
|
31
|
+
};
|
|
25
32
|
};
|
|
26
33
|
export interface MCPServerConfig {
|
|
27
34
|
type: 'local' | 'remote';
|
|
28
|
-
command?: string;
|
|
35
|
+
command?: string[];
|
|
29
36
|
url?: string;
|
|
30
37
|
headers?: Record<string, string>;
|
|
38
|
+
environment?: Record<string, string>;
|
|
31
39
|
enabled?: boolean;
|
|
32
40
|
}
|
|
33
41
|
export interface MCPServers {
|
package/dist/mcp-config.js
CHANGED
|
@@ -22,6 +22,13 @@ export const DEFAULT_MCP_SERVERS = {
|
|
|
22
22
|
CONTEXT7_API_KEY: '{env:CONTEXT7_API_KEY}',
|
|
23
23
|
},
|
|
24
24
|
},
|
|
25
|
+
'morph-mcp': {
|
|
26
|
+
type: 'local',
|
|
27
|
+
command: ['npx', '-y', '@morphllm/morphmcp'],
|
|
28
|
+
environment: {
|
|
29
|
+
MORPH_API_KEY: '{env:MORPH_API_KEY}',
|
|
30
|
+
},
|
|
31
|
+
},
|
|
25
32
|
};
|
|
26
33
|
/**
|
|
27
34
|
* Merge MCP servers, preserving existing servers and adding new ones.
|
package/dist/plugin-config.js
CHANGED
|
@@ -8,9 +8,7 @@ export const DEFAULT_PLUGINS = [
|
|
|
8
8
|
'@syntesseraai/opencode-feature-factory@latest',
|
|
9
9
|
'@nick-vi/opencode-type-inject@latest',
|
|
10
10
|
'@franlol/opencode-md-table-formatter@latest',
|
|
11
|
-
'@spoons-and-mirrors/subtask2@latest',
|
|
12
11
|
'opencode-pty@latest',
|
|
13
|
-
'opencode-hashline@latest',
|
|
14
12
|
];
|
|
15
13
|
/**
|
|
16
14
|
* Extract the base package name from a plugin specifier, stripping the
|
package/dist/tools/mini-loop.js
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* to the parent session via `promptAsync(noReply: true)`.
|
|
10
10
|
*/
|
|
11
11
|
import { tool } from '@opencode-ai/plugin/tool';
|
|
12
|
-
import { promptSession, notifyParent,
|
|
12
|
+
import { promptSession, notifyParent, evaluateMiniLoopImplGate, evaluateMiniLoopDocGate, parseModelString, } from '../workflow/orchestrator.js';
|
|
13
13
|
import { miniBuildPrompt, miniReviewPrompt, documentPrompt, docReviewPrompt, ciFixPrompt, } from './prompts.js';
|
|
14
14
|
import { parseMiniReview, parseDocReview } from './parsers.js';
|
|
15
15
|
import { ciScriptExists, runCI } from '../workflow/ci-runner.js';
|
|
@@ -75,10 +75,10 @@ export function createMiniLoopTool(client) {
|
|
|
75
75
|
enabled: args.worktree_isolation,
|
|
76
76
|
parentDirectory: args.worktree_parent_dir,
|
|
77
77
|
});
|
|
78
|
-
const runContext =
|
|
79
|
-
|
|
78
|
+
const runContext = {
|
|
79
|
+
sessionId: callerSessionId,
|
|
80
80
|
directory: runDirectoryContext.runDirectory,
|
|
81
|
-
}
|
|
81
|
+
};
|
|
82
82
|
// Fire-and-forget: run orchestration in background
|
|
83
83
|
let lastPhase = 'init';
|
|
84
84
|
const asyncOrchestration = async () => {
|
|
@@ -429,7 +429,7 @@ export function createMiniLoopTool(client) {
|
|
|
429
429
|
});
|
|
430
430
|
// Return immediately with acknowledgment
|
|
431
431
|
const summary = requirements.length > 120 ? requirements.slice(0, 120) + '...' : requirements;
|
|
432
|
-
return `Mini-loop started for: ${summary}\n\nRun
|
|
432
|
+
return `Mini-loop started for: ${summary}\n\nRun directory: ${runDirectoryContext.runDirectory}\nWorktree isolation: ${runDirectoryContext.worktreeEnabled ? 'enabled' : 'disabled'}\nYou will receive progress updates as each phase completes.`;
|
|
433
433
|
},
|
|
434
434
|
});
|
|
435
435
|
}
|
package/dist/tools/pipeline.js
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* to the parent session via `promptAsync(noReply: true)`.
|
|
12
12
|
*/
|
|
13
13
|
import { tool } from '@opencode-ai/plugin/tool';
|
|
14
|
-
import { fanOut, promptSession, notifyParent,
|
|
14
|
+
import { fanOut, promptSession, notifyParent, evaluatePlanningGate, evaluateReviewGate, evaluateDocGate, PLANNING_MODELS, REVIEW_MODELS, ORCHESTRATOR_MODEL, BUILD_MODEL, DOC_MODEL, VALIDATE_MODEL, DOC_REVIEW_MODEL, parseModelString, parseNamedModels, } from '../workflow/orchestrator.js';
|
|
15
15
|
import { planningPrompt, synthesisPrompt, breakdownPrompt, validateBatchPrompt, implementBatchPrompt, triagePrompt, reviewPrompt, reviewSynthesisPrompt, documentPrompt, docReviewPrompt, ciFixPrompt, } from './prompts.js';
|
|
16
16
|
import { ciScriptExists, runCI } from '../workflow/ci-runner.js';
|
|
17
17
|
import { cleanupWorktree, resolveRunDirectory } from '../workflow/run-isolation.js';
|
|
@@ -104,10 +104,10 @@ export function createPipelineTool(client) {
|
|
|
104
104
|
enabled: args.worktree_isolation,
|
|
105
105
|
parentDirectory: args.worktree_parent_dir,
|
|
106
106
|
});
|
|
107
|
-
const runContext =
|
|
108
|
-
|
|
107
|
+
const runContext = {
|
|
108
|
+
sessionId: callerSessionId,
|
|
109
109
|
directory: runDirectoryContext.runDirectory,
|
|
110
|
-
}
|
|
110
|
+
};
|
|
111
111
|
// Fire-and-forget: run full orchestration in background
|
|
112
112
|
let lastPhase = 'init';
|
|
113
113
|
const asyncOrchestration = async () => {
|
|
@@ -710,7 +710,7 @@ export function createPipelineTool(client) {
|
|
|
710
710
|
});
|
|
711
711
|
// Return immediately with acknowledgment
|
|
712
712
|
const summary = requirements.length > 120 ? requirements.slice(0, 120) + '...' : requirements;
|
|
713
|
-
return `Pipeline started for: ${summary}\n\nRun
|
|
713
|
+
return `Pipeline started for: ${summary}\n\nRun directory: ${runDirectoryContext.runDirectory}\nWorktree isolation: ${runDirectoryContext.worktreeEnabled ? 'enabled' : 'disabled'}\nYou will receive progress updates as each phase completes.`;
|
|
714
714
|
},
|
|
715
715
|
});
|
|
716
716
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package.json",
|
|
3
3
|
"name": "@syntesseraai/opencode-feature-factory",
|
|
4
|
-
"version": "0.10.
|
|
4
|
+
"version": "0.10.5",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "OpenCode plugin for Feature Factory agents - provides sub-agents and skills for validation, review, security, and architecture assessment",
|
|
7
7
|
"license": "MIT",
|
|
@@ -15,7 +15,6 @@
|
|
|
15
15
|
"assets",
|
|
16
16
|
"skills",
|
|
17
17
|
"agents",
|
|
18
|
-
"command",
|
|
19
18
|
"bin"
|
|
20
19
|
],
|
|
21
20
|
"keywords": [
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Write documentation pass for mini-loop
|
|
3
|
-
subtask: true
|
|
4
|
-
agent: documenting
|
|
5
|
-
model: openai/gpt-5.3-codex
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
Update repository documentation for the approved mini-loop implementation from `$ARGUMENTS`.
|
|
9
|
-
|
|
10
|
-
Requirements:
|
|
11
|
-
|
|
12
|
-
1. Reflect shipped behavior and operational steps exactly.
|
|
13
|
-
2. Apply prior documentation rework feedback when present.
|
|
14
|
-
3. Keep updates concise and cross-link impacted docs when needed.
|
|
15
|
-
4. Return a concise documentation update report with changed docs and rationale.
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Apply documentation mini-loop gate
|
|
3
|
-
subtask: true
|
|
4
|
-
agent: reviewing
|
|
5
|
-
model: openai/gpt-5.4
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
Read the latest documentation review input from `$ARGUMENTS` and apply this gate exactly:
|
|
9
|
-
|
|
10
|
-
- APPROVED only when `CONFIDENCE` is strictly `>95`, `CHANGE_REQUESTED=NO`, and `UNRESOLVED_DOCUMENTATION_ISSUES=0`
|
|
11
|
-
- REWORK when not approved and iteration < 5
|
|
12
|
-
- ESCALATE when iteration == 5 and still not approved
|
|
13
|
-
|
|
14
|
-
Output exactly one line:
|
|
15
|
-
|
|
16
|
-
`MINI_LOOP_DOCUMENTATION_GATE=APPROVED|REWORK|ESCALATE`
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Review documentation pass for mini-loop
|
|
3
|
-
subtask: true
|
|
4
|
-
agent: reviewing
|
|
5
|
-
model: openai/gpt-5.4
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
Review the latest mini-loop documentation pass from `$ARGUMENTS`.
|
|
9
|
-
|
|
10
|
-
Required output fields:
|
|
11
|
-
|
|
12
|
-
1. `CHANGE_REQUESTED=YES|NO`
|
|
13
|
-
2. `UNRESOLVED_DOCUMENTATION_ISSUES=<integer>`
|
|
14
|
-
3. `CONFIDENCE=<0-100>`
|
|
15
|
-
4. concise documentation rework instructions when change is requested
|
|
16
|
-
|
|
17
|
-
Return a deterministic structured documentation review result with no file persistence.
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Run documentation mini-loop until gate passes
|
|
3
|
-
subtask: false
|
|
4
|
-
agent: general
|
|
5
|
-
model: openai/gpt-5.4
|
|
6
|
-
loop:
|
|
7
|
-
max: 5
|
|
8
|
-
until: documentation gate is APPROVED
|
|
9
|
-
return:
|
|
10
|
-
- /mini-loop/documentation/document {as:mini-doc-pass} $ARGUMENTS
|
|
11
|
-
- /mini-loop/documentation/review {as:mini-doc-review} $RESULT[mini-doc-pass]
|
|
12
|
-
- /mini-loop/documentation/gate $RESULT[mini-doc-review]
|
|
13
|
-
- If `MINI_LOOP_DOCUMENTATION_GATE=REWORK`, continue loop with prior documentation review feedback included in the next documentation pass.
|
|
14
|
-
---
|
|
15
|
-
|
|
16
|
-
Reply with only: "Documentation phase started"
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Build implementation pass for mini-loop
|
|
3
|
-
subtask: true
|
|
4
|
-
agent: building
|
|
5
|
-
model: openai/gpt-5.3-codex
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
Implement the current mini-loop requirements from `$ARGUMENTS`.
|
|
9
|
-
|
|
10
|
-
Requirements:
|
|
11
|
-
|
|
12
|
-
1. Apply requested code rework when present.
|
|
13
|
-
2. Add or update tests for behavioral changes.
|
|
14
|
-
3. Run lint/typecheck/tests only for impacted scope.
|
|
15
|
-
4. Return a concise implementation report with changed files, tests run, and known open issues.
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Apply implementation mini-loop gate
|
|
3
|
-
subtask: true
|
|
4
|
-
agent: reviewing
|
|
5
|
-
model: openai/gpt-5.4
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
Read the latest implementation review input from `$ARGUMENTS` and apply this gate exactly:
|
|
9
|
-
|
|
10
|
-
- APPROVED only when `CONFIDENCE` is strictly `>95`, `CHANGE_REQUESTED=NO`, and `UNRESOLVED_BLOCKING_ISSUES=0`
|
|
11
|
-
- REWORK when not approved and iteration < 10
|
|
12
|
-
- ESCALATE when iteration == 10 and still not approved
|
|
13
|
-
|
|
14
|
-
Output exactly one line:
|
|
15
|
-
|
|
16
|
-
`MINI_LOOP_IMPLEMENTATION_GATE=APPROVED|REWORK|ESCALATE`
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Review implementation pass for mini-loop
|
|
3
|
-
subtask: true
|
|
4
|
-
agent: reviewing
|
|
5
|
-
model: openai/gpt-5.4
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
Review the latest mini-loop implementation output from `$ARGUMENTS`.
|
|
9
|
-
|
|
10
|
-
Required output fields:
|
|
11
|
-
|
|
12
|
-
1. `CHANGE_REQUESTED=YES|NO`
|
|
13
|
-
2. `UNRESOLVED_BLOCKING_ISSUES=<integer>`
|
|
14
|
-
3. `CONFIDENCE=<0-100>`
|
|
15
|
-
4. concise rework instructions when change is requested
|
|
16
|
-
|
|
17
|
-
Return a deterministic structured review result with no file persistence.
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Run implementation mini-loop until gate passes
|
|
3
|
-
subtask: false
|
|
4
|
-
agent: general
|
|
5
|
-
model: openai/gpt-5.4
|
|
6
|
-
loop:
|
|
7
|
-
max: 10
|
|
8
|
-
until: implementation gate is APPROVED
|
|
9
|
-
return:
|
|
10
|
-
- /mini-loop/implementation/build {as:mini-impl-build} $ARGUMENTS
|
|
11
|
-
- /mini-loop/implementation/review {as:mini-impl-review} $RESULT[mini-impl-build]
|
|
12
|
-
- /mini-loop/implementation/gate $RESULT[mini-impl-review]
|
|
13
|
-
- If `MINI_LOOP_IMPLEMENTATION_GATE=REWORK`, continue loop with prior review feedback included in the next build input.
|
|
14
|
-
---
|
|
15
|
-
|
|
16
|
-
Reply with only: "Implementation phase started"
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Mini-loop two-stage workflow entrypoint
|
|
3
|
-
subtask: false
|
|
4
|
-
agent: general
|
|
5
|
-
model: openai/gpt-5.4
|
|
6
|
-
return:
|
|
7
|
-
- /mini-loop/implementation/run {as:implementation-phase} $ARGUMENTS
|
|
8
|
-
- /mini-loop/documentation/run $RESULT[implementation-phase]
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
Reply with only: "Mini-loop started"
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Break final plan into atomic tasks
|
|
3
|
-
subtask: true
|
|
4
|
-
agent: building
|
|
5
|
-
model: anthropic/claude-opus-4-6
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
Read the approved final plan from `$ARGUMENTS` and produce atomic tasks.
|
|
9
|
-
|
|
10
|
-
Each task must include:
|
|
11
|
-
|
|
12
|
-
- task id
|
|
13
|
-
- title and description
|
|
14
|
-
- target files
|
|
15
|
-
- dependencies
|
|
16
|
-
- acceptance criteria
|
|
17
|
-
|
|
18
|
-
Return structured `TASKS` output (no file persistence).
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Implement validated batches with Codex
|
|
3
|
-
subtask: true
|
|
4
|
-
agent: building
|
|
5
|
-
model: openai/gpt-5.3-codex
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
Read `BATCHES` input from `$ARGUMENTS` and implement each batch.
|
|
9
|
-
|
|
10
|
-
Execution strategy:
|
|
11
|
-
|
|
12
|
-
1. Process batches in dependency order — a batch may only start after all batches it depends on have completed.
|
|
13
|
-
2. Within each batch, launch **parallel sub-agents** (type: `building`) — one per task — for tasks that have no mutual dependency edges. Use concurrent tool calls to maximize throughput.
|
|
14
|
-
3. Tasks within the same batch that share file targets or have explicit dependency edges must run sequentially.
|
|
15
|
-
4. Wait for all tasks in a batch to complete before starting the next batch.
|
|
16
|
-
|
|
17
|
-
For each task (inside its sub-agent):
|
|
18
|
-
|
|
19
|
-
1. implement code changes
|
|
20
|
-
2. add/update tests
|
|
21
|
-
3. run lint/typecheck/tests for impacted scope
|
|
22
|
-
4. return a structured completion report (no file persistence)
|
|
23
|
-
|
|
24
|
-
After all batches complete, merge the per-task completion reports into a single `IMPLEMENTATION_REPORT` output.
|
|
25
|
-
|
|
26
|
-
This command performs implementation only; reviewing is triggered by `/pipeline/building/run` and by rework flow.
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Run build phase from approved plan
|
|
3
|
-
subtask: false
|
|
4
|
-
agent: general
|
|
5
|
-
model: openai/gpt-5.4
|
|
6
|
-
return:
|
|
7
|
-
- /pipeline/building/breakdown {as:build-tasks} $ARGUMENTS
|
|
8
|
-
- /pipeline/building/validate-batch {as:build-batches} $RESULT[build-tasks]
|
|
9
|
-
- /pipeline/building/implement-batch {as:build-implementation} $RESULT[build-batches]
|
|
10
|
-
- /pipeline/reviewing/run {as:review-phase} $RESULT[build-implementation]
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
Reply with only: "Building phase started"
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Validate task batches for architecture and dependencies
|
|
3
|
-
subtask: true
|
|
4
|
-
agent: building
|
|
5
|
-
model: opencode/gemini-3.1-pro
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
Read `TASKS` input from `$ARGUMENTS` and create dependency-safe batches.
|
|
9
|
-
|
|
10
|
-
For each batch:
|
|
11
|
-
|
|
12
|
-
1. validate architecture and codebase fit
|
|
13
|
-
2. confirm or adjust file targets
|
|
14
|
-
3. flag architectural risks
|
|
15
|
-
4. mark whether tasks can run in parallel
|
|
16
|
-
|
|
17
|
-
Return structured `BATCHES` output (no file persistence).
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Finalize pipeline run and summarize outcomes
|
|
3
|
-
subtask: true
|
|
4
|
-
agent: general
|
|
5
|
-
model: openai/gpt-5.4
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
Finalize the pipeline run.
|
|
9
|
-
|
|
10
|
-
1. Summarize accepted plan, implemented tasks, review outcomes, and assumptions.
|
|
11
|
-
2. Prefer result-based handoff; persist only final user-requested artifacts.
|
|
12
|
-
3. Clear transient pipeline agent context files.
|
|
13
|
-
4. Return concise completion report to user.
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Documentation write/update pass
|
|
3
|
-
subtask: true
|
|
4
|
-
agent: documenting
|
|
5
|
-
model: openai/gpt-5.3-codex
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
Document the approved code changes and update repository documentation.
|
|
9
|
-
|
|
10
|
-
Before writing docs, load these skills:
|
|
11
|
-
|
|
12
|
-
- `ff-todo-management`
|
|
13
|
-
- `ff-mini-plan`
|
|
14
|
-
|
|
15
|
-
Requirements:
|
|
16
|
-
|
|
17
|
-
1. Use the latest approved review outputs and implementation artifacts as source of truth.
|
|
18
|
-
2. Update all affected docs so behavior and operational steps match shipped code.
|
|
19
|
-
3. If this is a rework iteration, incorporate documentation reviewer feedback from the previous documentation review.
|
|
20
|
-
4. Summarize what docs were changed and why.
|
|
21
|
-
|
|
22
|
-
Return a structured documentation update summary (no file persistence).
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Apply documentation approval gate
|
|
3
|
-
subtask: true
|
|
4
|
-
agent: reviewing
|
|
5
|
-
model: openai/gpt-5.4
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
Read the latest documentation review input from `$ARGUMENTS` and apply gate exactly:
|
|
9
|
-
|
|
10
|
-
Skill requirements:
|
|
11
|
-
|
|
12
|
-
- ChatGPT gate supervisor should keep gate decisions explicit and iteration-aware.
|
|
13
|
-
|
|
14
|
-
- APPROVED when verdict is `APPROVED` and unresolved documentation issues count is `0`
|
|
15
|
-
- REWORK when verdict is `REWORK_REQUIRED` and iteration < 5
|
|
16
|
-
- ESCALATE when iteration == 5 and still not approved
|
|
17
|
-
|
|
18
|
-
Output one status line:
|
|
19
|
-
|
|
20
|
-
`DOCUMENTATION_GATE=APPROVED|REWORK|ESCALATE`
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Documentation review pass
|
|
3
|
-
subtask: true
|
|
4
|
-
agent: reviewing
|
|
5
|
-
model: opencode/gemini-3.1-pro
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
Review the latest Codex documentation pass for completeness, correctness, and repository doc consistency.
|
|
9
|
-
|
|
10
|
-
Before reviewing docs, load these skills:
|
|
11
|
-
|
|
12
|
-
- `ff-report-templates`
|
|
13
|
-
- `ff-severity-classification`
|
|
14
|
-
|
|
15
|
-
Required output:
|
|
16
|
-
|
|
17
|
-
1. verdict `APPROVED` or `REWORK_REQUIRED`
|
|
18
|
-
2. unresolved documentation issues (if any)
|
|
19
|
-
3. explicit rework instructions
|
|
20
|
-
4. confidence score (0-100)
|
|
21
|
-
|
|
22
|
-
Return a structured documentation review result (no file persistence).
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Run documentation loop after review approval
|
|
3
|
-
subtask: false
|
|
4
|
-
agent: general
|
|
5
|
-
model: openai/gpt-5.4
|
|
6
|
-
loop:
|
|
7
|
-
max: 5
|
|
8
|
-
until: documentation updates are approved by documentation reviewer with zero unresolved documentation issues
|
|
9
|
-
return:
|
|
10
|
-
- /pipeline/documentation/document {as:doc-pass} $ARGUMENTS
|
|
11
|
-
- /pipeline/documentation/review {as:doc-review} $RESULT[doc-pass]
|
|
12
|
-
- /pipeline/documentation/gate $RESULT[doc-review]
|
|
13
|
-
- If `DOCUMENTATION_GATE=REWORK`, continue loop with review feedback for the next document pass.
|
|
14
|
-
---
|
|
15
|
-
|
|
16
|
-
Reply with only: "Documentation phase started"
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Confirm whether pipeline can proceed after planning
|
|
3
|
-
subtask: true
|
|
4
|
-
agent: planning
|
|
5
|
-
model: openai/gpt-5.4
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
Read the planning output in `$ARGUMENTS` and decide whether the pipeline may proceed.
|
|
9
|
-
|
|
10
|
-
Rules:
|
|
11
|
-
|
|
12
|
-
1. If `PLANNING_GATE=APPROVED`, return:
|
|
13
|
-
- `PLANNING_PROCEED=YES`
|
|
14
|
-
- The approved `FINAL_PLAN` content for build input.
|
|
15
|
-
2. If `PLANNING_GATE=REWORK` or `PLANNING_GATE=BLOCKED`, return:
|
|
16
|
-
- `PLANNING_PROCEED=NO`
|
|
17
|
-
- A short `USER_CONFIRMATION_REQUIRED` section explaining why continuation needs explicit user confirmation.
|
|
18
|
-
3. Do not invent missing gate values.
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Apply planning consensus gate
|
|
3
|
-
subtask: true
|
|
4
|
-
agent: planning
|
|
5
|
-
model: openai/gpt-5.4
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
Apply the planning gate to the synthesized consensus input passed in `$ARGUMENTS`:
|
|
9
|
-
|
|
10
|
-
- `>=75`: APPROVED
|
|
11
|
-
- `50-74`: REWORK
|
|
12
|
-
- `<50`: BLOCKED
|
|
13
|
-
|
|
14
|
-
Actions:
|
|
15
|
-
|
|
16
|
-
1. If APPROVED, return the accepted final plan in a `FINAL_PLAN` section.
|
|
17
|
-
2. If REWORK, return explicit divergence feedback so the next planning loop iteration re-plans with clear deltas.
|
|
18
|
-
3. If BLOCKED, return explicit user-decision-needed rationale.
|
|
19
|
-
|
|
20
|
-
Always include one status line in your final output:
|
|
21
|
-
|
|
22
|
-
`PLANNING_GATE=APPROVED|REWORK|BLOCKED`
|
|
23
|
-
|
|
24
|
-
If APPROVED, include a `FINAL_PLAN` section that becomes input to the build phase.
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Generate one model-specific planning proposal
|
|
3
|
-
subtask: true
|
|
4
|
-
agent: planning
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
Create a comprehensive implementation plan from the current pipeline requirements.
|
|
8
|
-
|
|
9
|
-
Input format:
|
|
10
|
-
|
|
11
|
-
- Prefix includes model tag as `[MODEL_TAG:<tag>]`
|
|
12
|
-
- Remaining content is the requirements brief
|
|
13
|
-
|
|
14
|
-
Requirements brief:
|
|
15
|
-
|
|
16
|
-
$ARGUMENTS
|
|
17
|
-
|
|
18
|
-
Return a structured proposal (no file persistence) with these sections:
|
|
19
|
-
|
|
20
|
-
1. `MODEL_TAG`
|
|
21
|
-
2. `REQUIREMENTS_SUMMARY`
|
|
22
|
-
3. `ARCHITECTURE_VALIDATION`
|
|
23
|
-
4. `IMPLEMENTATION_STEPS`
|
|
24
|
-
5. `RISKS_AND_MITIGATIONS`
|
|
25
|
-
6. `TESTING_AND_VALIDATION_STRATEGY`
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Execute one planning iteration
|
|
3
|
-
subtask: false
|
|
4
|
-
agent: general
|
|
5
|
-
model: openai/gpt-5.4
|
|
6
|
-
parallel:
|
|
7
|
-
- /pipeline/planning/plan {model:anthropic/claude-opus-4-6 && as:plan-opus} [MODEL_TAG:opus] $ARGUMENTS
|
|
8
|
-
- /pipeline/planning/plan {model:opencode/gemini-3.1-pro && as:plan-gemini} [MODEL_TAG:gemini] $ARGUMENTS
|
|
9
|
-
- /pipeline/planning/plan {model:openai/gpt-5.3-codex && as:plan-codex} [MODEL_TAG:codex] $ARGUMENTS
|
|
10
|
-
return:
|
|
11
|
-
- /pipeline/planning/synthesize {as:plan-consensus} $RESULT[plan-opus] $RESULT[plan-gemini] $RESULT[plan-codex]
|
|
12
|
-
- /pipeline/planning/gate $RESULT[plan-consensus]
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
Reply with only: "Planning phase started"
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Synthesize planning consensus
|
|
3
|
-
subtask: true
|
|
4
|
-
agent: planning
|
|
5
|
-
model: openai/gpt-5.4
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
Synthesize the three model outputs from planning fan-out:
|
|
9
|
-
|
|
10
|
-
- `$RESULT[plan-opus]`
|
|
11
|
-
- `$RESULT[plan-gemini]`
|
|
12
|
-
- `$RESULT[plan-codex]`
|
|
13
|
-
|
|
14
|
-
Produce a consensus report (no file persistence).
|
|
15
|
-
|
|
16
|
-
Required output sections:
|
|
17
|
-
|
|
18
|
-
1. `CONSENSUS_SCORE` (0-100)
|
|
19
|
-
2. `AGREED_ELEMENTS`
|
|
20
|
-
3. `DIVERGENT_ELEMENTS`
|
|
21
|
-
4. `SYNTHESIZED_PLAN`
|
|
22
|
-
5. `OPEN_QUESTIONS`
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Apply review approval gate
|
|
3
|
-
subtask: true
|
|
4
|
-
agent: reviewing
|
|
5
|
-
model: openai/gpt-5.4
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
Read the synthesized review input from `$ARGUMENTS` and apply gate exactly:
|
|
9
|
-
|
|
10
|
-
- APPROVED when confidence `>=95` and unresolved issues count is `0`
|
|
11
|
-
- REWORK when below threshold and iteration < 10
|
|
12
|
-
- ESCALATE when iteration == 10 and still not approved
|
|
13
|
-
|
|
14
|
-
Output one status line:
|
|
15
|
-
|
|
16
|
-
`REVIEW_GATE=APPROVED|REWORK|ESCALATE`
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Generate one model-specific review report
|
|
3
|
-
subtask: true
|
|
4
|
-
agent: reviewing
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
Review the current task from triage brief for correctness, quality, architecture validity, testing, security, and edge cases.
|
|
8
|
-
|
|
9
|
-
Input format:
|
|
10
|
-
|
|
11
|
-
- Prefix includes model tag as `[MODEL_TAG:<tag>]`
|
|
12
|
-
- Remaining content is optional additional brief context
|
|
13
|
-
|
|
14
|
-
Context brief:
|
|
15
|
-
|
|
16
|
-
$ARGUMENTS
|
|
17
|
-
|
|
18
|
-
Classify findings as critical/high/medium/low and include confidence score.
|
|
19
|
-
|
|
20
|
-
Return a structured review report (no file persistence).
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Run review loop for completed tasks
|
|
3
|
-
subtask: false
|
|
4
|
-
agent: general
|
|
5
|
-
model: openai/gpt-5.4
|
|
6
|
-
loop:
|
|
7
|
-
max: 10
|
|
8
|
-
until: all tasks in the active batch are approved with confidence >=95 and zero unresolved issues
|
|
9
|
-
return:
|
|
10
|
-
- /pipeline/reviewing/triage {as:review-brief} $ARGUMENTS
|
|
11
|
-
parallel:
|
|
12
|
-
- /pipeline/reviewing/review {model:anthropic/claude-opus-4-6 && as:review-opus} [MODEL_TAG:opus] $RESULT[review-brief]
|
|
13
|
-
- /pipeline/reviewing/review {model:opencode/gemini-3.1-pro && as:review-gemini} [MODEL_TAG:gemini] $RESULT[review-brief]
|
|
14
|
-
- /pipeline/reviewing/review {model:openai/gpt-5.3-codex && as:review-codex} [MODEL_TAG:codex] $RESULT[review-brief]
|
|
15
|
-
return:
|
|
16
|
-
- /pipeline/reviewing/synthesize {as:review-synthesis} $RESULT[review-opus] $RESULT[review-gemini] $RESULT[review-codex]
|
|
17
|
-
- /pipeline/reviewing/gate $RESULT[review-synthesis]
|
|
18
|
-
- If `REVIEW_GATE=REWORK`, invoke `/pipeline/building/implement-batch` to apply fixes before the next loop iteration.
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
Reply with only: "Reviewing phase started"
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Synthesize independent reviews into one report
|
|
3
|
-
subtask: true
|
|
4
|
-
agent: reviewing
|
|
5
|
-
model: openai/gpt-5.4
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
Read the three review inputs passed in `$ARGUMENTS` (reviewer, architect, developer) and synthesize a single authoritative output.
|
|
9
|
-
|
|
10
|
-
Required output:
|
|
11
|
-
|
|
12
|
-
1. overall confidence (0-100)
|
|
13
|
-
2. consolidated deduplicated findings
|
|
14
|
-
3. unresolved issues list
|
|
15
|
-
4. verdict `APPROVED` or `REWORK_REQUIRED`
|
|
16
|
-
5. explicit rework instructions when needed
|
|
17
|
-
|
|
18
|
-
Return a structured synthesis report (no file persistence).
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Build review brief from implementation outputs
|
|
3
|
-
subtask: true
|
|
4
|
-
agent: reviewing
|
|
5
|
-
model: openai/gpt-5.4
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
Prepare a review brief for the current completed task or rework output.
|
|
9
|
-
|
|
10
|
-
Include:
|
|
11
|
-
|
|
12
|
-
- summary of implemented changes
|
|
13
|
-
- files changed
|
|
14
|
-
- focus areas and risk points
|
|
15
|
-
|
|
16
|
-
Return a structured `REVIEW_BRIEF` output (no file persistence).
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Pipeline workflow entrypoint
|
|
3
|
-
subtask: false
|
|
4
|
-
agent: general
|
|
5
|
-
model: openai/gpt-5.4
|
|
6
|
-
return:
|
|
7
|
-
- /pipeline/planning/run {as:planning-phase && loop:5 && until:planning gate is APPROVED or planning gate is BLOCKED and waiting for user confirmation} $ARGUMENTS
|
|
8
|
-
- /pipeline/planning/confirm {as:planning-decision} $RESULT[planning-phase]
|
|
9
|
-
- /pipeline/building/run {as:build-phase} $RESULT[planning-decision]
|
|
10
|
-
- /pipeline/documentation/run $RESULT[build-phase]
|
|
11
|
-
- /pipeline/complete
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
Reply with only: "Workflow started"
|