@syntesseraai/opencode-feature-factory 0.10.3 → 0.10.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/README.md +31 -110
  2. package/agents/building.md +10 -14
  3. package/agents/documenting.md +9 -14
  4. package/agents/feature-factory.md +0 -1
  5. package/agents/ff-research.md +5 -1
  6. package/agents/planning.md +4 -3
  7. package/agents/reviewing.md +3 -3
  8. package/bin/ff-deploy.js +8 -36
  9. package/dist/index.js +2 -2
  10. package/dist/mcp-config.d.ts +9 -1
  11. package/dist/mcp-config.js +7 -0
  12. package/dist/plugin-config.js +0 -1
  13. package/dist/tools/mini-loop.js +5 -5
  14. package/dist/tools/pipeline.js +5 -5
  15. package/package.json +1 -2
  16. package/command/mini-loop/documentation/document.md +0 -15
  17. package/command/mini-loop/documentation/gate.md +0 -16
  18. package/command/mini-loop/documentation/review.md +0 -17
  19. package/command/mini-loop/documentation/run.md +0 -16
  20. package/command/mini-loop/implementation/build.md +0 -15
  21. package/command/mini-loop/implementation/gate.md +0 -16
  22. package/command/mini-loop/implementation/review.md +0 -17
  23. package/command/mini-loop/implementation/run.md +0 -16
  24. package/command/mini-loop/start.md +0 -11
  25. package/command/pipeline/building/breakdown.md +0 -18
  26. package/command/pipeline/building/implement-batch.md +0 -26
  27. package/command/pipeline/building/run.md +0 -13
  28. package/command/pipeline/building/validate-batch.md +0 -17
  29. package/command/pipeline/complete.md +0 -13
  30. package/command/pipeline/documentation/document.md +0 -22
  31. package/command/pipeline/documentation/gate.md +0 -20
  32. package/command/pipeline/documentation/review.md +0 -22
  33. package/command/pipeline/documentation/run.md +0 -16
  34. package/command/pipeline/planning/confirm.md +0 -18
  35. package/command/pipeline/planning/gate.md +0 -24
  36. package/command/pipeline/planning/plan.md +0 -25
  37. package/command/pipeline/planning/run.md +0 -15
  38. package/command/pipeline/planning/synthesize.md +0 -22
  39. package/command/pipeline/reviewing/gate.md +0 -16
  40. package/command/pipeline/reviewing/review.md +0 -20
  41. package/command/pipeline/reviewing/run.md +0 -21
  42. package/command/pipeline/reviewing/synthesize.md +0 -18
  43. package/command/pipeline/reviewing/triage.md +0 -16
  44. 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 pipeline commands.
3
+ OpenCode plugin that provides Feature Factory agents, skills, and workflow MCP tools.
4
4
 
5
5
  ## Installation
6
6
 
@@ -19,144 +19,65 @@ OpenCode plugin that provides Feature Factory agents, skills, and pipeline comma
19
19
  npx @syntesseraai/opencode-feature-factory install
20
20
  ```
21
21
 
22
- This installer deploys to `~/.config/opencode/`:
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`, `skills`, and `command` files on every install.
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.
34
33
  - **Global scope**: assets are installed to `~/.config/opencode/` and shared across projects.
35
34
 
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
35
  ## Tools
61
36
 
62
37
  The plugin exposes three MCP tools via the `feature-factory` agent:
63
38
 
64
- | Tool | Description |
65
- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
66
- | `ff_pipeline` | Full multi-model pipeline: planning build CI review documentation. Uses hardcoded per-role model defaults (see Model Routing below). Supports optional `worktree_isolation` / `worktree_parent_dir` for run-level git worktree isolation. |
67
- | `ff_mini_loop` | Lightweight build CI review documentation loop. **Does not hardcode model defaults** — all roles inherit the current session model when omitted. CI validation runs `ff-ci.sh` if present (up to 3 attempts with auto-fix). Supports optional `worktree_isolation` / `worktree_parent_dir`. |
68
- | `ff_list_models` | Read-only discovery tool. Queries the OpenCode SDK to list all available providers, models, capability badges, connected status, and defaults. |
39
+ | Tool | Description |
40
+ | ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
41
+ | `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`. |
42
+ | `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`. |
43
+ | `ff_list_models` | Read-only discovery tool that lists available providers/models and defaults from the OpenCode SDK. |
69
44
 
70
45
  ### Mini-Loop Model Inheritance
71
46
 
72
- When `ff_mini_loop` model parameters are omitted, child sessions inherit the parent session's model (the SDK `model` field is omitted entirely from the prompt body). The `doc_model` has a cascade: if `build_model` is explicitly set but `doc_model` is not, the documentation step uses the same model as build. Users can call `ff_list_models` to discover available `provider/model` strings before overriding.
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` |
47
+ 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
48
 
99
- - Pipeline stages pass intermediate artifacts with `{as:name}` and `$RESULT[name]` (minimal file persistence)
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`
49
+ ## Global Config Defaults
106
50
 
107
- ## Quality Gates
51
+ The plugin merges the following MCP servers into global OpenCode config when missing:
108
52
 
109
- - Planning approval: `>=75%` consensus.
110
- - Review approval: `>=95%` confidence and zero unresolved issues.
111
- - Documentation approval: documentation reviewer verdict `APPROVED` with zero unresolved documentation issues.
112
- - Planning loop confirmation: after 5 unsuccessful planning iterations, pipeline asks user whether to continue.
53
+ - `jina-ai`
54
+ - `gh_grep`
55
+ - `context7`
56
+ - `morph-mcp`
113
57
 
114
- ## Async Progress Notifications
58
+ `morph-mcp` is configured as:
115
59
 
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:
128
-
129
- ```
130
- # Pipeline: Reviewing — Iteration 2/10
131
-
132
- Status: APPROVED
133
- Confidence: 97%
134
- Unresolved Issues: 0
135
- Duration: 45.3s
136
- Feedback: N/A
60
+ ```json
61
+ "morph-mcp": {
62
+ "type": "local",
63
+ "command": ["npx", "-y", "@morphllm/morphmcp"],
64
+ "environment": {
65
+ "MORPH_API_KEY": "{env:MORPH_API_KEY}"
66
+ }
67
+ }
137
68
  ```
138
69
 
139
- Mini-loop notifications follow the same pattern:
70
+ ### Merge Outcomes
140
71
 
141
- ```
142
- # Mini-Loop: Building — Iteration 1/10
143
-
144
- Status: REWORK
145
- Confidence: 82%
146
- Unresolved Issues: 2
147
- Duration: 23.1s
148
- Feedback: Fix type errors in handler.ts
149
- ```
72
+ `DEFAULT_MCP_SERVERS` currently includes 4 servers (`jina-ai`, `gh_grep`, `context7`, `morph-mcp`).
150
73
 
151
- Final reports use `# Pipeline: Complete` or `# Mini-Loop: Complete` headers containing the full markdown report. Errors use `# Pipeline: Error` or `# Mini-Loop: Error`.
74
+ The merge behavior is additive and non-destructive:
152
75
 
153
- ## Run Isolation
76
+ - Empty or missing existing MCP config -> 4 servers after merge.
77
+ - Existing config with 1 custom server and a customized `gh_grep` entry -> 5 servers after merge (custom + customized `gh_grep` + 3 missing defaults).
78
+ - Existing server definitions are preserved and never overwritten by defaults.
154
79
 
155
- - Every `ff_pipeline` / `ff_mini_loop` invocation now creates a dedicated run parent session under the caller session.
156
- - All workflow child prompts and progress notifications are routed through that run parent session to keep caller context slim.
157
- - When `worktree_isolation: true`, the workflow runs in a dedicated detached git worktree directory.
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).
80
+ The plugin list is also merged non-destructively to ensure required companion plugins are present.
160
81
 
161
82
  ## Related Docs
162
83
 
@@ -4,10 +4,10 @@ mode: primary
4
4
  color: '#22c55e'
5
5
  tools:
6
6
  read: true
7
- write: true
8
- edit: true
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
- ## Hashline Workflow (Required)
37
+ ## Editing Workflow (Required)
38
38
 
39
- File reads and edits use hashline-annotated tools. The `read` tool returns lines annotated with `#HL <line>:<hash>|<content>` and a `#HL REV:<hash>` header. Follow this workflow:
39
+ Use Morph MCP `edit_file` for all implementation edits.
40
40
 
41
- 1. **Always `read` before editing.** Note the `REV` value from the `#HL REV:<hash>` header — you need it for edits.
42
- 2. **Use `hashline_edit`** for targeted, hash-referenced edits. Operations: `replace`, `delete`, `insert_before`, `insert_after`. Example:
43
- ```json
44
- { "path": "src/app.ts", "operation": "replace", "startRef": "5:a3f", "replacement": "const value = 2", "fileRev": "72c4946c" }
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
@@ -4,10 +4,10 @@ mode: primary
4
4
  color: '#f97316'
5
5
  tools:
6
6
  read: true
7
- write: true
8
- edit: true
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
- ## Hashline Workflow (Required)
29
+ ## Editing Workflow (Required)
30
30
 
31
- File reads and edits use hashline-annotated tools. The `read` tool returns lines annotated with `#HL <line>:<hash>|<content>` and a `#HL REV:<hash>` header. Follow this workflow:
31
+ Use Morph MCP `edit_file` for documentation updates.
32
32
 
33
- 1. **Always `read` before editing.** Note the `REV` value you need it for edits.
34
- 2. **Use `hashline_edit`** for targeted, hash-referenced edits. Operations: `replace`, `delete`, `insert_before`, `insert_after`. Example:
35
- ```json
36
- { "path": "docs/FILE.md", "operation": "replace", "startRef": "5:a3f", "replacement": "Updated text", "fileRev": "72c4946c" }
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
 
@@ -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
  ff_pipeline: true
@@ -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
@@ -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
- ## Hashline Workflow (Required)
28
+ ## Editing Guidance
30
29
 
31
- Use the `read` tool to inspect files. Lines are annotated with `#HL <line>:<hash>|<content>` and a `#HL REV:<hash>` header. Use these refs when planning edit operations include the `startRef` values in your implementation steps so the builder can apply them directly.
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
@@ -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
- ## Hashline Workflow (Required)
28
+ ## File Review Guidance
30
29
 
31
- Use the `read` tool to inspect files. Lines are annotated with `#HL <line>:<hash>|<content>` and a `#HL REV:<hash>` header. Use these refs to cite specific lines in your review findings.
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, agents, and command files to the global OpenCode configuration directory.
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,6 +47,13 @@ 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 = [
@@ -57,7 +62,6 @@ const DEFAULT_PLUGINS = [
57
62
  '@franlol/opencode-md-table-formatter@latest',
58
63
  '@spoons-and-mirrors/subtask2@latest',
59
64
  'opencode-pty@latest',
60
- 'opencode-hashline@latest',
61
65
  ];
62
66
 
63
67
  function getPackageBaseName(plugin) {
@@ -132,26 +136,6 @@ async function getFileNames(dir) {
132
136
  }
133
137
  }
134
138
 
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
139
  async function updateMCPConfig() {
156
140
  if (isInteractive) {
157
141
  console.log('\n🔧 MCP Configuration Update');
@@ -292,7 +276,6 @@ async function deploy() {
292
276
  await ensureDir(GLOBAL_CONFIG_DIR);
293
277
  await ensureDir(SKILLS_DIR);
294
278
  await ensureDir(AGENTS_DIR);
295
- await ensureDir(COMMAND_DIR);
296
279
 
297
280
  // Get existing skills/agents for reporting
298
281
  const existingSkills = await getDirectoryNames(SKILLS_DIR);
@@ -333,22 +316,11 @@ async function deploy() {
333
316
  }
334
317
  }
335
318
 
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
319
  // Summary
347
320
  if (isInteractive) {
348
321
  console.log('\n✨ Deployment Complete!');
349
322
  console.log(` Skills: ${skills.length} deployed`);
350
323
  console.log(` Agents: ${agents.length} deployed`);
351
- console.log(` Commands: ${commandsCount} deployed`);
352
324
  console.log(` Location: ${GLOBAL_CONFIG_DIR}`);
353
325
  console.log('\n📝 Next Steps:');
354
326
  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; these replace the subtask2
49
- // command-based workflow with TypeScript-driven orchestration.
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 ?? {};
@@ -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 {
@@ -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.
@@ -10,7 +10,6 @@ export const DEFAULT_PLUGINS = [
10
10
  '@franlol/opencode-md-table-formatter@latest',
11
11
  '@spoons-and-mirrors/subtask2@latest',
12
12
  'opencode-pty@latest',
13
- 'opencode-hashline@latest',
14
13
  ];
15
14
  /**
16
15
  * Extract the base package name from a plugin specifier, stripping the
@@ -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, createRunParentSession, evaluateMiniLoopImplGate, evaluateMiniLoopDocGate, parseModelString, } from '../workflow/orchestrator.js';
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 = await createRunParentSession(client, callerSessionId, {
79
- title: `ff-mini-loop-run-${runDirectoryContext.runId}`,
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 session: ${runContext.sessionId}\nRun directory: ${runDirectoryContext.runDirectory}\nWorktree isolation: ${runDirectoryContext.worktreeEnabled ? 'enabled' : 'disabled'}\nYou will receive progress updates as each phase completes.`;
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
  }
@@ -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, createRunParentSession, evaluatePlanningGate, evaluateReviewGate, evaluateDocGate, PLANNING_MODELS, REVIEW_MODELS, ORCHESTRATOR_MODEL, BUILD_MODEL, DOC_MODEL, VALIDATE_MODEL, DOC_REVIEW_MODEL, parseModelString, parseNamedModels, } from '../workflow/orchestrator.js';
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 = await createRunParentSession(client, callerSessionId, {
108
- title: `ff-pipeline-run-${runDirectoryContext.runId}`,
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 session: ${runContext.sessionId}\nRun directory: ${runDirectoryContext.runDirectory}\nWorktree isolation: ${runDirectoryContext.worktreeEnabled ? 'enabled' : 'disabled'}\nYou will receive progress updates as each phase completes.`;
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.3",
4
+ "version": "0.10.4",
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"