@syntesseraai/opencode-feature-factory 0.3.6 → 0.4.1
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 +0 -41
- package/agents/building.md +26 -30
- package/agents/ff-acceptance.md +6 -26
- package/agents/ff-research.md +6 -27
- package/agents/ff-review.md +6 -26
- package/agents/ff-security.md +6 -26
- package/agents/ff-validate.md +6 -26
- package/agents/ff-well-architected.md +6 -26
- package/agents/planning.md +6 -28
- package/agents/reviewing.md +6 -28
- package/bin/ff-deploy.js +0 -11
- package/dist/feature-factory-setup.d.ts +1 -1
- package/dist/feature-factory-setup.js +3 -3
- package/dist/index.js +3 -18
- package/dist/mcp-config.d.ts +0 -5
- package/dist/mcp-config.js +0 -5
- package/package.json +3 -6
- package/skills/ff-context-tracking/SKILL.md +3 -6
- package/skills/ff-learning/SKILL.md +39 -310
- package/bin/ff-local-recall-mcp.js +0 -9
package/README.md
CHANGED
|
@@ -29,47 +29,6 @@ This will:
|
|
|
29
29
|
- Copy skills to `~/.config/opencode/skills/`
|
|
30
30
|
- Configure MCP servers in `~/.config/opencode/opencode.json`
|
|
31
31
|
|
|
32
|
-
## Local Recall MCP Daemon
|
|
33
|
-
|
|
34
|
-
The plugin now includes a local MCP daemon binary: `ff-local-recall-mcp`.
|
|
35
|
-
|
|
36
|
-
- `ff-deploy` adds a local MCP server entry named `ff-local-recall`
|
|
37
|
-
- The server exposes memory tools:
|
|
38
|
-
- `local_recall.search`
|
|
39
|
-
- `local_recall.get`
|
|
40
|
-
- `local_recall.store`
|
|
41
|
-
- `local_recall.index.start`
|
|
42
|
-
- `local_recall.index.status`
|
|
43
|
-
- `local_recall.index.stop`
|
|
44
|
-
- `local_recall.index.rebuild`
|
|
45
|
-
- In headless and TUI sessions, relevant memories are automatically injected into model context per user prompt
|
|
46
|
-
|
|
47
|
-
### Environment Variables
|
|
48
|
-
|
|
49
|
-
- `FF_LOCAL_RECALL_DIRECTORY` - Directory that contains `ff-memories/` (default: current working directory)
|
|
50
|
-
- `FF_LOCAL_RECALL_DAEMON_AUTOSTART` - Start index daemon automatically (`true` by default)
|
|
51
|
-
- `FF_LOCAL_RECALL_INDEX_INTERVAL_MS` - Background daemon interval in milliseconds (default: `15000`)
|
|
52
|
-
- `FF_LOCAL_RECALL_EXTRACTION_ENABLED` - Run extraction during daemon cycles (`true` by default)
|
|
53
|
-
- `FF_LOCAL_RECALL_EMBEDDING_PROVIDER` - Embedding provider (`ollama` default, `openai` optional)
|
|
54
|
-
- `FF_LOCAL_RECALL_OLLAMA_URL` - Ollama base URL (default: `http://127.0.0.1:11434`)
|
|
55
|
-
- `FF_LOCAL_RECALL_OLLAMA_MODEL` - Ollama embedding model (default: `nomic-embed-text`)
|
|
56
|
-
- `FF_LOCAL_RECALL_OPENAI_URL` - OpenAI embeddings endpoint base (default: `https://api.openai.com/v1`)
|
|
57
|
-
- `FF_LOCAL_RECALL_OPENAI_MODEL` - OpenAI embedding model (default: `text-embedding-3-small`)
|
|
58
|
-
- `OPENAI_API_KEY` - Required when `FF_LOCAL_RECALL_EMBEDDING_PROVIDER=openai`
|
|
59
|
-
|
|
60
|
-
### Prompt Injection Controls
|
|
61
|
-
|
|
62
|
-
- `FF_LOCAL_RECALL_PROMPT_INJECTION_ENABLED` - Enable automatic per-prompt memory injection (`true` by default)
|
|
63
|
-
- `FF_LOCAL_RECALL_PROMPT_INJECTION_MIN_PROMPT_CHARS` - Minimum user prompt length before searching (default: `20`)
|
|
64
|
-
- `FF_LOCAL_RECALL_PROMPT_INJECTION_MAX_QUERY_CHARS` - Maximum characters from prompt used for retrieval (default: `2000`)
|
|
65
|
-
- `FF_LOCAL_RECALL_PROMPT_INJECTION_SEARCH_LIMIT` - Max memories fetched before ranking/filtering (default: `8`)
|
|
66
|
-
- `FF_LOCAL_RECALL_PROMPT_INJECTION_MAX_RESULTS` - Max memories injected into model context (default: `5`)
|
|
67
|
-
- `FF_LOCAL_RECALL_PROMPT_INJECTION_MIN_RELEVANCE` - Minimum relevance score for inclusion (default: `0.2`)
|
|
68
|
-
- `FF_LOCAL_RECALL_PROMPT_INJECTION_MIN_IMPORTANCE` - Minimum memory importance used in search (default: `0.2`)
|
|
69
|
-
- `FF_LOCAL_RECALL_PROMPT_INJECTION_MAX_TOKENS` - Approx token budget for injected memory block (default: `400`)
|
|
70
|
-
- `FF_LOCAL_RECALL_PROMPT_INJECTION_SESSION_ONLY` - Restrict retrieval to current session memories only (`false` by default)
|
|
71
|
-
- `FF_LOCAL_RECALL_PROMPT_INTERNAL_MARKERS` - Comma-separated markers that skip injection (default: `[LOCAL_RECALL_INTERNAL]`)
|
|
72
|
-
|
|
73
32
|
## Agents Provided
|
|
74
33
|
|
|
75
34
|
### Primary Agents
|
package/agents/building.md
CHANGED
|
@@ -68,10 +68,27 @@ At the start of EVERY building task:
|
|
|
68
68
|
5. **Load the ff-delegation skill** and assess parallelization opportunities
|
|
69
69
|
6. **Load the ff-mini-plan skill** and create an execution plan
|
|
70
70
|
7. **Load the ff-todo-management skill** and create a todo list for tracking progress
|
|
71
|
-
8. **Load the ff-
|
|
72
|
-
9. **
|
|
73
|
-
10. **
|
|
74
|
-
|
|
71
|
+
8. **Load the ff-severity-classification skill** to assess risks of changes
|
|
72
|
+
9. **Document your context** - Use `ff-agents-update` tool to create `.feature-factory/agents/building-{UUID}.md`
|
|
73
|
+
10. **Check for existing plans** - Use `ff-plans-list` and `ff-plans-get` to find implementation plans
|
|
74
|
+
|
|
75
|
+
## Git Worktrees (Mandatory)
|
|
76
|
+
|
|
77
|
+
To prevent conflicts and ensure a clean state, you MUST use git worktrees for your implementation:
|
|
78
|
+
|
|
79
|
+
1. **Create Worktree:** Before starting code modifications, create a dedicated worktree outside the main directory:
|
|
80
|
+
```bash
|
|
81
|
+
git worktree add ../ff-build-{UUID} -b feature/ff-build-{UUID}
|
|
82
|
+
```
|
|
83
|
+
2. **Use the Worktree:**
|
|
84
|
+
- When using the `bash` tool, always set the `workdir` parameter to the absolute path of your worktree.
|
|
85
|
+
- When using `edit`, `write`, or `read` tools, ensure the `filePath` points to the files inside your worktree (e.g., replace the base project path with the path to your worktree).
|
|
86
|
+
3. **Commit & Push:** Commit your changes and push the branch from within the worktree.
|
|
87
|
+
4. **Cleanup:** After your work is pushed, remove the worktree:
|
|
88
|
+
```bash
|
|
89
|
+
git worktree remove ../ff-build-{UUID} --force
|
|
90
|
+
git branch -D feature/ff-build-{UUID}
|
|
91
|
+
```
|
|
75
92
|
|
|
76
93
|
## File Management Tools
|
|
77
94
|
|
|
@@ -452,31 +469,10 @@ When @reviewing agent returns findings:
|
|
|
452
469
|
|
|
453
470
|
Create todos for each critical/high item, fix them, then re-invoke @reviewing if needed.
|
|
454
471
|
|
|
455
|
-
##
|
|
472
|
+
## Knowledge Management
|
|
456
473
|
|
|
457
|
-
|
|
474
|
+
**Always be learning:**
|
|
458
475
|
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
- Error resolutions and debugging insights
|
|
463
|
-
- Integration challenges and solutions
|
|
464
|
-
|
|
465
|
-
2. **Store important learnings** using the `ff-learning-store` MCP tool:
|
|
466
|
-
- Use category `pattern` for technical patterns and best practices
|
|
467
|
-
- Use category `context` for significant implementation experiences
|
|
468
|
-
- Use category `procedure` for reusable workflows discovered
|
|
469
|
-
- Tag with relevant technology names and categories
|
|
470
|
-
|
|
471
|
-
3. **Example learning capture:**
|
|
472
|
-
|
|
473
|
-
```
|
|
474
|
-
ff-learning-store(
|
|
475
|
-
title: "Implementation Pattern: [Pattern Name]",
|
|
476
|
-
description: "Best practice for [scenario] in [technology]",
|
|
477
|
-
category: "pattern",
|
|
478
|
-
tags: ["implementation", "pattern", "{technology}"],
|
|
479
|
-
importance: 0.8,
|
|
480
|
-
content: "Detailed explanation of the pattern..."
|
|
481
|
-
)
|
|
482
|
-
```
|
|
476
|
+
- Use `docs/learnings/` to store findings, decisions, and patterns.
|
|
477
|
+
- Search `docs/learnings/` before debugging complex issues.
|
|
478
|
+
- Load the `ff-learning` skill for details on how to write good learning docs.
|
package/agents/ff-acceptance.md
CHANGED
|
@@ -53,7 +53,6 @@ At the start of EVERY validation task:
|
|
|
53
53
|
3. **Read relevant contexts** - Use `ff-agents-show()` to read contexts from @building, @planning, etc.
|
|
54
54
|
4. **Load the ff-mini-plan skill** and create a quick 2-5 step plan for your validation approach
|
|
55
55
|
5. **Load the ff-todo-management skill** and create a todo list from your plan
|
|
56
|
-
6. **Load the ff-learning skill** to capture validation insights and patterns
|
|
57
56
|
7. **Load the ff-severity-classification skill** to ensure consistent issue classification
|
|
58
57
|
8. **Load the ff-report-templates skill** for standardized output formatting
|
|
59
58
|
9. **Document your context** - Use `ff-agents-update` tool to create `.feature-factory/agents/ff-acceptance-{UUID}.md`
|
|
@@ -278,28 +277,9 @@ Use ff-severity-classification skill standards:
|
|
|
278
277
|
|
|
279
278
|
Remember: Your role is to be the "gatekeeper" ensuring requirements are fully and correctly implemented before proceeding.
|
|
280
279
|
|
|
281
|
-
##
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
- Acceptance criteria patterns observed
|
|
288
|
-
- Ambiguity resolutions and scope clarifications
|
|
289
|
-
- Common gaps between requirements and implementation
|
|
290
|
-
|
|
291
|
-
2. **Store important learnings** using `ff-learning-store` MCP tool:
|
|
292
|
-
- Use category `pattern` for requirement patterns and validation techniques
|
|
293
|
-
- Use category `decision` for significant scope clarifications and findings
|
|
294
|
-
- Tag with requirement types, categories, and validation insights
|
|
295
|
-
|
|
296
|
-
3. **Example MCP tool call:**
|
|
297
|
-
```
|
|
298
|
-
ff-learning-store(
|
|
299
|
-
title: "Validation Pattern: [Pattern Name]",
|
|
300
|
-
description: "Common pattern of [issue] in [type] requirements",
|
|
301
|
-
category: "pattern",
|
|
302
|
-
tags: ["validation", "requirements", "pattern", "{category}"],
|
|
303
|
-
importance: 0.7
|
|
304
|
-
)
|
|
305
|
-
```
|
|
280
|
+
## Knowledge Management
|
|
281
|
+
|
|
282
|
+
**Always be learning:**
|
|
283
|
+
- Use `docs/learnings/` to store findings, decisions, and patterns.
|
|
284
|
+
- Search `docs/learnings/` before debugging complex issues.
|
|
285
|
+
- Load the `ff-learning` skill for details on how to write good learning docs.
|
package/agents/ff-research.md
CHANGED
|
@@ -55,7 +55,6 @@ At the start of EVERY research task:
|
|
|
55
55
|
5. **Load the ff-research-methods skill** for research methodology
|
|
56
56
|
6. **Load the ff-mini-plan skill** and create a research plan
|
|
57
57
|
7. **Load the ff-todo-management skill** and create a todo list
|
|
58
|
-
8. **Load the ff-learning skill** to capture research findings and knowledge
|
|
59
58
|
9. **Load the ff-report-templates skill** for output formatting
|
|
60
59
|
10. **Document your context** - Use `ff-agents-update` tool to create `.feature-factory/agents/ff-research-{UUID}.md`
|
|
61
60
|
|
|
@@ -423,29 +422,9 @@ Structure research findings using ff-report-templates:
|
|
|
423
422
|
|
|
424
423
|
Remember: Your research enables other agents to make informed implementation decisions. Be thorough, current, and precise.
|
|
425
424
|
|
|
426
|
-
##
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
- Technology comparisons and evaluations
|
|
433
|
-
- Best practices discovered
|
|
434
|
-
- Source quality assessments
|
|
435
|
-
|
|
436
|
-
2. **Store important learnings** using `ff-learning-store` MCP tool:
|
|
437
|
-
- Use category `pattern` for key findings and reusable knowledge
|
|
438
|
-
- Use category `context` for significant research discoveries and context
|
|
439
|
-
- Tag with research topics, technologies, and categories
|
|
440
|
-
- Set high importance (0.8-1.0) for critical findings
|
|
441
|
-
|
|
442
|
-
3. **Example MCP tool call:**
|
|
443
|
-
```
|
|
444
|
-
ff-learning-store(
|
|
445
|
-
title: "Research Finding: [Topic]",
|
|
446
|
-
description: "Key finding about [topic] from [source]",
|
|
447
|
-
category: "pattern",
|
|
448
|
-
tags: ["research", "{topic}", "{technology}", "best-practices"],
|
|
449
|
-
importance: 0.9
|
|
450
|
-
)
|
|
451
|
-
```
|
|
425
|
+
## Knowledge Management
|
|
426
|
+
|
|
427
|
+
**Always be learning:**
|
|
428
|
+
- Use `docs/learnings/` to store findings, decisions, and patterns.
|
|
429
|
+
- Search `docs/learnings/` before debugging complex issues.
|
|
430
|
+
- Load the `ff-learning` skill for details on how to write good learning docs.
|
package/agents/ff-review.md
CHANGED
|
@@ -53,7 +53,6 @@ At the start of EVERY review task:
|
|
|
53
53
|
3. **Read relevant contexts** - Use `ff-agents-show()` to read contexts from @building, @planning, etc.
|
|
54
54
|
4. **Load the ff-mini-plan skill** and create a quick 2-5 step plan for your review approach
|
|
55
55
|
5. **Load the ff-todo-management skill** and create a todo list from your plan
|
|
56
|
-
6. **Load the ff-learning skill** to capture code quality insights and patterns
|
|
57
56
|
7. **Load the ff-severity-classification skill** to ensure consistent issue classification
|
|
58
57
|
8. **Load the ff-report-templates skill** for standardized output formatting
|
|
59
58
|
9. **Document your context** - Use `ff-agents-update` tool to create `.feature-factory/agents/ff-review-{UUID}.md`
|
|
@@ -281,28 +280,9 @@ Use ff-severity-classification skill standards:
|
|
|
281
280
|
11. Mark all todos complete before finishing
|
|
282
281
|
12. Recommend delegating to other agents if specialized issues found
|
|
283
282
|
|
|
284
|
-
##
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
- Common issues and their solutions
|
|
291
|
-
- Best practices identified
|
|
292
|
-
- Review technique improvements
|
|
293
|
-
|
|
294
|
-
2. **Store important learnings** using `ff-learning-store` MCP tool:
|
|
295
|
-
- Use category `pattern` for code patterns and anti-patterns
|
|
296
|
-
- Use category `decision` for significant review findings and trade-offs
|
|
297
|
-
- Tag with code quality categories, technologies, and patterns
|
|
298
|
-
|
|
299
|
-
3. **Example MCP tool call:**
|
|
300
|
-
```
|
|
301
|
-
ff-learning-store(
|
|
302
|
-
title: "Code Pattern: [Pattern Name]",
|
|
303
|
-
description: "Effective pattern for [scenario] in [technology]",
|
|
304
|
-
category: "pattern",
|
|
305
|
-
tags: ["code-quality", "pattern", "{technology}", "{category}"],
|
|
306
|
-
importance: 0.7
|
|
307
|
-
)
|
|
308
|
-
```
|
|
283
|
+
## Knowledge Management
|
|
284
|
+
|
|
285
|
+
**Always be learning:**
|
|
286
|
+
- Use `docs/learnings/` to store findings, decisions, and patterns.
|
|
287
|
+
- Search `docs/learnings/` before debugging complex issues.
|
|
288
|
+
- Load the `ff-learning` skill for details on how to write good learning docs.
|
package/agents/ff-security.md
CHANGED
|
@@ -53,7 +53,6 @@ At the start of EVERY security audit:
|
|
|
53
53
|
3. **Read relevant contexts** - Use `ff-agents-show()` to read contexts from @building, @planning, etc.
|
|
54
54
|
4. **Load the ff-mini-plan skill** and create a quick 2-5 step plan for your audit approach
|
|
55
55
|
5. **Load the ff-todo-management skill** and create a todo list from your plan
|
|
56
|
-
6. **Load the ff-learning skill** to capture security insights and vulnerability patterns
|
|
57
56
|
7. **Load the ff-severity-classification skill** to ensure consistent vulnerability classification
|
|
58
57
|
8. **Load the ff-report-templates skill** for standardized output formatting
|
|
59
58
|
9. **Document your context** - Use `ff-agents-update` tool to create `.feature-factory/agents/ff-security-{UUID}.md`
|
|
@@ -315,28 +314,9 @@ Use ff-severity-classification skill standards with security-specific definition
|
|
|
315
314
|
11. Mark all todos complete before finishing
|
|
316
315
|
12. Recommend delegating to other agents if additional issues found
|
|
317
316
|
|
|
318
|
-
##
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
- Security best practices identified
|
|
325
|
-
- Threat model insights
|
|
326
|
-
- Common security mistakes observed
|
|
327
|
-
|
|
328
|
-
2. **Store important learnings** using `ff-learning-store` MCP tool:
|
|
329
|
-
- Use category `pattern` for vulnerability patterns and fixes
|
|
330
|
-
- Use category `debugging` for significant security findings and investigations
|
|
331
|
-
- Tag with security categories, vulnerability types, and technologies
|
|
332
|
-
|
|
333
|
-
3. **Example MCP tool call:**
|
|
334
|
-
```
|
|
335
|
-
ff-learning-store(
|
|
336
|
-
title: "Security Pattern: [Vulnerability Type]",
|
|
337
|
-
description: "Common [vulnerability] pattern in [context] and how to fix it",
|
|
338
|
-
category: "pattern",
|
|
339
|
-
tags: ["security", "vulnerability", "{type}", "{technology}"],
|
|
340
|
-
importance: 0.9
|
|
341
|
-
)
|
|
342
|
-
```
|
|
317
|
+
## Knowledge Management
|
|
318
|
+
|
|
319
|
+
**Always be learning:**
|
|
320
|
+
- Use `docs/learnings/` to store findings, decisions, and patterns.
|
|
321
|
+
- Search `docs/learnings/` before debugging complex issues.
|
|
322
|
+
- Load the `ff-learning` skill for details on how to write good learning docs.
|
package/agents/ff-validate.md
CHANGED
|
@@ -53,7 +53,6 @@ At the start of EVERY validation orchestration:
|
|
|
53
53
|
3. **Read relevant contexts** - Use `ff-agents-show()` to read contexts from @building, @planning, etc.
|
|
54
54
|
4. **Load the ff-mini-plan skill** and create a quick plan for your orchestration approach
|
|
55
55
|
5. **Load the ff-todo-management skill** and create a todo list for tracking
|
|
56
|
-
6. **Load the ff-learning skill** to capture validation insights and patterns
|
|
57
56
|
7. **Load the ff-severity-classification skill** for consistent issue classification
|
|
58
57
|
8. **Load the ff-report-templates skill** for standardized output formatting
|
|
59
58
|
9. **Document your context** - Use `ff-agents-update` tool to create `.feature-factory/agents/ff-validate-{UUID}.md`
|
|
@@ -309,28 +308,9 @@ When multiple agents report findings:
|
|
|
309
308
|
- **Include metrics** - Quantify the validation results where possible
|
|
310
309
|
- **Consider context** - Weight findings based on the scope of changes
|
|
311
310
|
|
|
312
|
-
##
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
- Common issues found across different dimensions
|
|
319
|
-
- Validation efficiency improvements
|
|
320
|
-
- Cross-dimensional finding patterns
|
|
321
|
-
|
|
322
|
-
2. **Store important learnings** using `ff-learning-store` MCP tool:
|
|
323
|
-
- Use category `pattern` for validation patterns and effective techniques
|
|
324
|
-
- Use category `decision` for significant validation findings
|
|
325
|
-
- Tag with validation types and categories
|
|
326
|
-
|
|
327
|
-
3. **Example MCP tool call:**
|
|
328
|
-
```
|
|
329
|
-
ff-learning-store(
|
|
330
|
-
title: "Validation Pattern: [Pattern Name]",
|
|
331
|
-
description: "Common pattern of [findings] when validating [type] changes",
|
|
332
|
-
category: "pattern",
|
|
333
|
-
tags: ["validation", "pattern", "{category}"],
|
|
334
|
-
importance: 0.7
|
|
335
|
-
)
|
|
336
|
-
```
|
|
311
|
+
## Knowledge Management
|
|
312
|
+
|
|
313
|
+
**Always be learning:**
|
|
314
|
+
- Use `docs/learnings/` to store findings, decisions, and patterns.
|
|
315
|
+
- Search `docs/learnings/` before debugging complex issues.
|
|
316
|
+
- Load the `ff-learning` skill for details on how to write good learning docs.
|
|
@@ -53,7 +53,6 @@ At the start of EVERY architecture review:
|
|
|
53
53
|
3. **Read relevant contexts** - Use `ff-agents-show()` to read contexts from @building, @planning, etc.
|
|
54
54
|
4. **Load the ff-mini-plan skill** and create a quick 2-5 step plan for your review approach
|
|
55
55
|
5. **Load the ff-todo-management skill** and create a todo list from your plan
|
|
56
|
-
6. **Load the ff-learning skill** to capture architectural insights and patterns
|
|
57
56
|
7. **Load the ff-severity-classification skill** to ensure consistent issue classification
|
|
58
57
|
8. **Load the ff-report-templates skill** for standardized output formatting
|
|
59
58
|
9. **Document your context** - Use `ff-agents-update` tool to create `.feature-factory/agents/ff-well-architected-{UUID}.md`
|
|
@@ -277,28 +276,9 @@ Use ff-severity-classification skill standards:
|
|
|
277
276
|
|
|
278
277
|
Focus on providing actionable, specific recommendations that improve the overall architecture quality across all six pillars.
|
|
279
278
|
|
|
280
|
-
##
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
- Pillar-specific insights (Operational Excellence, Security, Reliability, etc.)
|
|
287
|
-
- Scalability and efficiency considerations
|
|
288
|
-
- Cross-pillar interactions and trade-offs
|
|
289
|
-
|
|
290
|
-
2. **Store important learnings** using `ff-learning-store` MCP tool:
|
|
291
|
-
- Use category `pattern` for architectural patterns and best practices
|
|
292
|
-
- Use category `decision` for significant architectural trade-offs
|
|
293
|
-
- Tag with pillar names, architecture categories, and patterns
|
|
294
|
-
|
|
295
|
-
3. **Example MCP tool call:**
|
|
296
|
-
```
|
|
297
|
-
ff-learning-store(
|
|
298
|
-
title: "Architecture Pattern: [Pattern Name]",
|
|
299
|
-
description: "Pattern for achieving [pillar] excellence in [context]",
|
|
300
|
-
category: "pattern",
|
|
301
|
-
tags: ["architecture", "{pillar}", "pattern", "{category}"],
|
|
302
|
-
importance: 0.8
|
|
303
|
-
)
|
|
304
|
-
```
|
|
279
|
+
## Knowledge Management
|
|
280
|
+
|
|
281
|
+
**Always be learning:**
|
|
282
|
+
- Use `docs/learnings/` to store findings, decisions, and patterns.
|
|
283
|
+
- Search `docs/learnings/` before debugging complex issues.
|
|
284
|
+
- Load the `ff-learning` skill for details on how to write good learning docs.
|
package/agents/planning.md
CHANGED
|
@@ -73,7 +73,6 @@ At the start of EVERY planning task:
|
|
|
73
73
|
5. **Load the ff-delegation skill** and assess parallelization opportunities
|
|
74
74
|
6. **Load the ff-mini-plan skill** and assess task complexity
|
|
75
75
|
7. **Load the ff-todo-management skill** and create a todo list for the planning process
|
|
76
|
-
8. **Load the ff-learning skill** to capture planning insights and patterns
|
|
77
76
|
9. **Load the ff-report-templates skill** for standardized output formatting
|
|
78
77
|
10. **Document your context** - Use `ff-agents-update` tool to create `.feature-factory/agents/planning-{UUID}.md`
|
|
79
78
|
|
|
@@ -358,30 +357,9 @@ Recommend escalation to full architectural planning when:
|
|
|
358
357
|
- **Include validation** - Specify how to verify the implementation
|
|
359
358
|
- **Escalate appropriately** - Don't try to fit complex work into simple plans
|
|
360
359
|
|
|
361
|
-
##
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
- Risk factors identified and mitigation strategies
|
|
368
|
-
- Pattern discoveries from codebase exploration
|
|
369
|
-
- Estimation accuracy and lessons learned
|
|
370
|
-
|
|
371
|
-
2. **Store important learnings** using the `ff-learning-store` MCP tool:
|
|
372
|
-
- Use category `pattern` for architectural patterns discovered
|
|
373
|
-
- Use category `decision` for significant planning decisions
|
|
374
|
-
- Tag with relevant keywords (architecture, patterns, risks, decisions)
|
|
375
|
-
|
|
376
|
-
3. **Example learning capture:**
|
|
377
|
-
|
|
378
|
-
```
|
|
379
|
-
ff-learning-store(
|
|
380
|
-
title: "Architecture Decision: [Decision Name]",
|
|
381
|
-
description: "Rationale for choosing [approach] over [alternatives]",
|
|
382
|
-
category: "decision",
|
|
383
|
-
tags: ["architecture", "decision", "{technology}"],
|
|
384
|
-
importance: 0.8,
|
|
385
|
-
content: "Detailed explanation of the decision..."
|
|
386
|
-
)
|
|
387
|
-
```
|
|
360
|
+
## Knowledge Management
|
|
361
|
+
|
|
362
|
+
**Always be learning:**
|
|
363
|
+
- Use `docs/learnings/` to store findings, decisions, and patterns.
|
|
364
|
+
- Search `docs/learnings/` before debugging complex issues.
|
|
365
|
+
- Load the `ff-learning` skill for details on how to write good learning docs.
|
package/agents/reviewing.md
CHANGED
|
@@ -71,7 +71,6 @@ At the start of EVERY review task:
|
|
|
71
71
|
3. **Read relevant contexts** - Use `ff-agents-show()` to read contexts from @building, @ff-security, etc.
|
|
72
72
|
4. **Generate your UUID** - Create unique ID: `xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx`
|
|
73
73
|
5. **Load the ff-todo-management skill** and create a todo list for tracking review progress
|
|
74
|
-
6. **Load the ff-learning skill** to capture review patterns and insights
|
|
75
74
|
7. **Load the ff-report-templates skill** for standardized output formatting
|
|
76
75
|
8. **Load the ff-severity-classification skill** to classify findings consistently
|
|
77
76
|
9. **Document your context** - Use `ff-agents-update` tool to create `.feature-factory/agents/reviewing-{UUID}.md`
|
|
@@ -482,30 +481,9 @@ Typical workflow:
|
|
|
482
481
|
|
|
483
482
|
This creates a tight feedback loop for high-quality output.
|
|
484
483
|
|
|
485
|
-
##
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
- Quality patterns observed in good implementations
|
|
492
|
-
- Review effectiveness and process improvements
|
|
493
|
-
- Tool and technique discoveries
|
|
494
|
-
|
|
495
|
-
2. **Store important learnings** using the `ff-learning-store` MCP tool:
|
|
496
|
-
- Use category `pattern` for common issue patterns and solutions
|
|
497
|
-
- Use category `decision` for significant review findings
|
|
498
|
-
- Tag with review type, categories, and technologies reviewed
|
|
499
|
-
|
|
500
|
-
3. **Example learning capture:**
|
|
501
|
-
|
|
502
|
-
```
|
|
503
|
-
ff-learning-store(
|
|
504
|
-
title: "Review Pattern: [Common Issue Type]",
|
|
505
|
-
description: "Common pattern of [issue] found in [context]",
|
|
506
|
-
category: "pattern",
|
|
507
|
-
tags: ["review", "pattern", "{issue-type}", "{technology}"],
|
|
508
|
-
importance: 0.7,
|
|
509
|
-
content: "Detailed explanation of the pattern and solution..."
|
|
510
|
-
)
|
|
511
|
-
```
|
|
484
|
+
## Knowledge Management
|
|
485
|
+
|
|
486
|
+
**Always be learning:**
|
|
487
|
+
- Use `docs/learnings/` to store findings, decisions, and patterns.
|
|
488
|
+
- Search `docs/learnings/` before debugging complex issues.
|
|
489
|
+
- Load the `ff-learning` skill for details on how to write good learning docs.
|
package/bin/ff-deploy.js
CHANGED
|
@@ -29,17 +29,6 @@ const isInteractive = process.stdin.isTTY && process.stdout.isTTY;
|
|
|
29
29
|
|
|
30
30
|
// Default MCP configuration
|
|
31
31
|
const DEFAULT_MCP_SERVERS = {
|
|
32
|
-
'ff-local-recall': {
|
|
33
|
-
type: 'local',
|
|
34
|
-
command: [
|
|
35
|
-
'npx',
|
|
36
|
-
'-y',
|
|
37
|
-
'--package=@syntesseraai/opencode-feature-factory@latest',
|
|
38
|
-
'--',
|
|
39
|
-
'ff-local-recall-mcp',
|
|
40
|
-
],
|
|
41
|
-
enabled: true,
|
|
42
|
-
},
|
|
43
32
|
'jina-ai': {
|
|
44
33
|
type: 'remote',
|
|
45
34
|
url: 'https://mcp.jina.ai/v1',
|
|
@@ -3,7 +3,7 @@ type BunShell = any;
|
|
|
3
3
|
/**
|
|
4
4
|
* Initialize the Feature Factory directory structure.
|
|
5
5
|
* Creates .feature-factory/ and .feature-factory/agents/ directories.
|
|
6
|
-
* Migrates legacy CI scripts (
|
|
6
|
+
* Migrates legacy CI scripts (ff-ci.sh and .feature-factory/ci.sh) to ff-ci.sh if they exist.
|
|
7
7
|
*/
|
|
8
8
|
export declare function initializeFeatureFactory(input: PluginInput, $: BunShell): Promise<void>;
|
|
9
9
|
export {};
|
|
@@ -50,7 +50,7 @@ function isValidDirectory(directory) {
|
|
|
50
50
|
/**
|
|
51
51
|
* Initialize the Feature Factory directory structure.
|
|
52
52
|
* Creates .feature-factory/ and .feature-factory/agents/ directories.
|
|
53
|
-
* Migrates legacy CI scripts (
|
|
53
|
+
* Migrates legacy CI scripts (ff-ci.sh and .feature-factory/ci.sh) to ff-ci.sh if they exist.
|
|
54
54
|
*/
|
|
55
55
|
export async function initializeFeatureFactory(input, $) {
|
|
56
56
|
const { directory, client } = input;
|
|
@@ -84,8 +84,8 @@ export async function initializeFeatureFactory(input, $) {
|
|
|
84
84
|
// Continue even if directory creation fails - it might already exist
|
|
85
85
|
}
|
|
86
86
|
// Check for CI script migration (with timeout protection)
|
|
87
|
-
// Check both legacy locations:
|
|
88
|
-
const legacyCiPaths = [`${directory}/
|
|
87
|
+
// Check both legacy locations: ff-ci.sh and .feature-factory/ci.sh
|
|
88
|
+
const legacyCiPaths = [`${directory}/ff-ci.sh`, `${featureFactoryDir}/ci.sh`];
|
|
89
89
|
const newCiPath = `${directory}/ff-ci.sh`;
|
|
90
90
|
try {
|
|
91
91
|
// Check if new location already exists (with timeout)
|
package/dist/index.js
CHANGED
|
@@ -5,8 +5,6 @@ import { $ } from 'bun';
|
|
|
5
5
|
import { createFFAgentsCurrentTool } from './plugins/ff-agents-current-plugin.js';
|
|
6
6
|
import { createFFAgentsShowTool } from './plugins/ff-agents-show-plugin.js';
|
|
7
7
|
import { createFFAgentsClearTool } from './plugins/ff-agents-clear-plugin.js';
|
|
8
|
-
import { createLearningStoreTool, createLearningSearchTool, createLearningGetTool, createLearningIndexStartTool, createLearningIndexStatusTool, createLearningIndexStopTool, createLearningIndexRebuildTool, initLocalRecall, } from './local-recall/index.js';
|
|
9
|
-
import { createLocalRecallPromptHooks } from './local-recall/prompt-injection.js';
|
|
10
8
|
import { createFFPlanCreateTool } from './plugins/ff-plan-create-plugin.js';
|
|
11
9
|
import { createFFPlanUpdateTool } from './plugins/ff-plan-update-plugin.js';
|
|
12
10
|
import { createFFAgentContextCreateTool } from './plugins/ff-agent-context-create-plugin.js';
|
|
@@ -37,35 +35,23 @@ export const FeatureFactoryPlugin = async (input) => {
|
|
|
37
35
|
if (!directory || directory === '' || directory === '/') {
|
|
38
36
|
return {};
|
|
39
37
|
}
|
|
40
|
-
// Initialize local-recall memory system
|
|
41
|
-
initLocalRecall(directory);
|
|
42
38
|
// Update MCP server configuration in global OpenCode config
|
|
43
39
|
// This ensures Feature Factory MCP servers are available across projects
|
|
44
40
|
try {
|
|
45
41
|
await updateMCPConfig($);
|
|
46
42
|
}
|
|
47
|
-
catch
|
|
48
|
-
//
|
|
49
|
-
|
|
43
|
+
catch {
|
|
44
|
+
// Just log or ignore errors during config update to not break plugin load
|
|
45
|
+
console.error('Failed to update MCP config in OpenCode plugin');
|
|
50
46
|
}
|
|
51
47
|
// Load hooks from the quality gate plugin
|
|
52
48
|
const qualityGateHooks = await StopQualityGateHooksPlugin(input).catch(() => ({}));
|
|
53
|
-
// Load local-recall prompt injection hooks (headless-safe)
|
|
54
|
-
const localRecallPromptHooks = createLocalRecallPromptHooks(directory);
|
|
55
49
|
// Create all tools
|
|
56
50
|
const tools = {
|
|
57
51
|
// Agent management tools
|
|
58
52
|
'ff-agents-current': createFFAgentsCurrentTool(),
|
|
59
53
|
'ff-agents-show': createFFAgentsShowTool(),
|
|
60
54
|
'ff-agents-clear': createFFAgentsClearTool(),
|
|
61
|
-
// Learning/memory tools (local-recall)
|
|
62
|
-
'ff-learning-store': createLearningStoreTool(),
|
|
63
|
-
'ff-learning-search': createLearningSearchTool(),
|
|
64
|
-
'ff-learning-get': createLearningGetTool(),
|
|
65
|
-
'ff-learning-index-start': createLearningIndexStartTool(),
|
|
66
|
-
'ff-learning-index-status': createLearningIndexStatusTool(),
|
|
67
|
-
'ff-learning-index-stop': createLearningIndexStopTool(),
|
|
68
|
-
'ff-learning-index-rebuild': createLearningIndexRebuildTool(),
|
|
69
55
|
// Plan tools
|
|
70
56
|
'ff-plan-create': createFFPlanCreateTool(),
|
|
71
57
|
'ff-plan-update': createFFPlanUpdateTool(),
|
|
@@ -92,7 +78,6 @@ export const FeatureFactoryPlugin = async (input) => {
|
|
|
92
78
|
// Return combined hooks and tools
|
|
93
79
|
return {
|
|
94
80
|
...qualityGateHooks,
|
|
95
|
-
...localRecallPromptHooks,
|
|
96
81
|
tool: tools,
|
|
97
82
|
};
|
|
98
83
|
};
|
package/dist/mcp-config.d.ts
CHANGED
|
@@ -4,11 +4,6 @@ type BunShell = any;
|
|
|
4
4
|
* These servers will be merged into the global OpenCode config.
|
|
5
5
|
*/
|
|
6
6
|
export declare const DEFAULT_MCP_SERVERS: {
|
|
7
|
-
readonly 'ff-local-recall': {
|
|
8
|
-
readonly type: "local";
|
|
9
|
-
readonly command: "ff-local-recall-mcp";
|
|
10
|
-
readonly enabled: true;
|
|
11
|
-
};
|
|
12
7
|
readonly 'jina-ai': {
|
|
13
8
|
readonly type: "remote";
|
|
14
9
|
readonly url: "https://mcp.jina.ai/v1";
|
package/dist/mcp-config.js
CHANGED
|
@@ -8,11 +8,6 @@ const GLOBAL_OPENCODE_CONFIG_PATH = join(GLOBAL_OPENCODE_DIR, 'opencode.json');
|
|
|
8
8
|
* These servers will be merged into the global OpenCode config.
|
|
9
9
|
*/
|
|
10
10
|
export const DEFAULT_MCP_SERVERS = {
|
|
11
|
-
'ff-local-recall': {
|
|
12
|
-
type: 'local',
|
|
13
|
-
command: 'ff-local-recall-mcp',
|
|
14
|
-
enabled: true,
|
|
15
|
-
},
|
|
16
11
|
'jina-ai': {
|
|
17
12
|
type: 'remote',
|
|
18
13
|
url: 'https://mcp.jina.ai/v1',
|
package/package.json
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package.json",
|
|
3
3
|
"name": "@syntesseraai/opencode-feature-factory",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.4.1",
|
|
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",
|
|
8
8
|
"main": "./dist/index.js",
|
|
9
9
|
"types": "./dist/index.d.ts",
|
|
10
10
|
"bin": {
|
|
11
|
-
"ff-deploy": "./bin/ff-deploy.js"
|
|
12
|
-
"ff-local-recall-mcp": "./bin/ff-local-recall-mcp.js"
|
|
11
|
+
"ff-deploy": "./bin/ff-deploy.js"
|
|
13
12
|
},
|
|
14
13
|
"files": [
|
|
15
14
|
"dist",
|
|
@@ -35,9 +34,7 @@
|
|
|
35
34
|
"dependencies": {
|
|
36
35
|
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
37
36
|
"@opencode-ai/plugin": "^1.1.48",
|
|
38
|
-
"
|
|
39
|
-
"glob": "^10.0.0",
|
|
40
|
-
"uuid": "^9.0.0"
|
|
37
|
+
"glob": "^10.0.0"
|
|
41
38
|
},
|
|
42
39
|
"devDependencies": {
|
|
43
40
|
"@types/bun": "^1.2.6",
|
|
@@ -465,12 +465,6 @@ Clean up agent context files.
|
|
|
465
465
|
- Add "Clean up context" as final todo item
|
|
466
466
|
- Track progress in both todo list AND context file
|
|
467
467
|
|
|
468
|
-
### With ff-learning
|
|
469
|
-
|
|
470
|
-
- Store important findings from other agents' contexts
|
|
471
|
-
- Create memories about coordination patterns
|
|
472
|
-
- Learn from how other agents approached similar tasks
|
|
473
|
-
|
|
474
468
|
## Best Practices Summary
|
|
475
469
|
|
|
476
470
|
### DO:
|
|
@@ -513,7 +507,9 @@ ff-agents-show(id: "planning-uuid") → Read implementation plan
|
|
|
513
507
|
ff-agents-update:
|
|
514
508
|
fileName: "building-{my-uuid}.md"
|
|
515
509
|
content: |
|
|
510
|
+
|
|
516
511
|
---
|
|
512
|
+
|
|
517
513
|
id: "{my-uuid}"
|
|
518
514
|
agent: "building"
|
|
519
515
|
title: "Implement OAuth"
|
|
@@ -522,6 +518,7 @@ status: "in-progress"
|
|
|
522
518
|
started: "2026-02-02T14:30:00Z"
|
|
523
519
|
parent: null
|
|
524
520
|
delegated_to: []
|
|
521
|
+
|
|
525
522
|
---
|
|
526
523
|
|
|
527
524
|
## Context
|
|
@@ -1,339 +1,68 @@
|
|
|
1
|
-
|
|
2
|
-
name: ff-learning
|
|
3
|
-
description: Enables agents to capture, store, and retrieve learnings from their work. Uses Local-Recall MCP-backed memory system with automatic extraction from OpenCode sessions.
|
|
4
|
-
license: MIT
|
|
5
|
-
compatibility: opencode
|
|
6
|
-
metadata:
|
|
7
|
-
audience: agents
|
|
8
|
-
category: knowledge-management
|
|
9
|
-
---
|
|
1
|
+
# Feature Factory Learning Protocol
|
|
10
2
|
|
|
11
|
-
|
|
3
|
+
This skill enables agents to continuously document and retrieve knowledge across the lifecycle of a task. It replaces the legacy "local-recall" MCP daemon with a lightweight, transparent Markdown-based system that lives directly in the repository's `docs/learnings/` folder.
|
|
12
4
|
|
|
13
|
-
|
|
5
|
+
## Core Philosophy
|
|
14
6
|
|
|
15
|
-
|
|
7
|
+
1. **Continuous Documentation:** Write down important facts, solutions, architectural decisions, and troubleshooting steps as soon as you verify them.
|
|
8
|
+
2. **Transparent Storage:** Learnings are stored as plain Markdown files in `docs/learnings/` so they are reviewable, searchable, and committable.
|
|
9
|
+
3. **Proactive Retrieval:** Before starting complex tasks or debugging, search the `docs/` and `docs/learnings/` directories to leverage past experience.
|
|
16
10
|
|
|
17
|
-
|
|
11
|
+
## How to Use This Skill
|
|
18
12
|
|
|
19
|
-
1.
|
|
20
|
-
2. **Explicit storage** – Agents can store learnings directly using the `ff-learning-store` tool.
|
|
13
|
+
### 1. Documenting New Knowledge (Writing)
|
|
21
14
|
|
|
22
|
-
|
|
15
|
+
Whenever you discover a non-obvious solution, establish a new convention, or resolve a complex bug, create a learning document.
|
|
23
16
|
|
|
24
|
-
|
|
17
|
+
**Tool to use:** `write` tool to `docs/learnings/{topic-slug}.md`
|
|
25
18
|
|
|
26
|
-
|
|
19
|
+
**Naming Convention:**
|
|
20
|
+
Use descriptive, kebab-case filenames: `docs/learnings/auth-token-refresh-flow.md`, `docs/learnings/docker-build-caching.md`.
|
|
27
21
|
|
|
28
|
-
|
|
29
|
-
- **Resolving errors or issues** – Document the solution for future reference
|
|
30
|
-
- **Discovering new patterns** – Capture reusable approaches
|
|
31
|
-
- **Making architectural decisions** – Record rationale and context
|
|
32
|
-
- **Researching technologies** – Save key findings and sources
|
|
33
|
-
|
|
34
|
-
### Optional (use when helpful):
|
|
35
|
-
|
|
36
|
-
- **Quick fixes** – Simple one-line changes may not need learning capture
|
|
37
|
-
- **Routine tasks** – Well-understood repetitive work
|
|
38
|
-
- **Draft work** – Temporary explorations that won't be retained
|
|
39
|
-
|
|
40
|
-
## Memory Categories
|
|
41
|
-
|
|
42
|
-
Memories are organized by category:
|
|
43
|
-
|
|
44
|
-
### 1. Pattern
|
|
45
|
-
|
|
46
|
-
**What:** Reusable code patterns, architectural patterns, and best practices
|
|
47
|
-
**When to use:** When a repeatable technique or approach is discovered
|
|
48
|
-
**Example:** "React Server Components require 'use client' directive for client-side interactivity"
|
|
49
|
-
|
|
50
|
-
### 2. Decision
|
|
51
|
-
|
|
52
|
-
**What:** Architectural decisions, technology choices, and their rationale
|
|
53
|
-
**When to use:** When a significant decision is made during planning or implementation
|
|
54
|
-
**Example:** "Chose NextAuth.js over Auth0 for OAuth - simpler integration, lower cost for our scale"
|
|
55
|
-
|
|
56
|
-
### 3. Debugging
|
|
57
|
-
|
|
58
|
-
**What:** Error resolutions, debugging steps, and troubleshooting knowledge
|
|
59
|
-
**When to use:** After resolving a non-trivial bug or error
|
|
60
|
-
**Example:** "CSRF token mismatch in OAuth - resolved by adding explicit state parameter"
|
|
61
|
-
|
|
62
|
-
### 4. Preference
|
|
63
|
-
|
|
64
|
-
**What:** Team conventions, style preferences, and configuration choices
|
|
65
|
-
**When to use:** When establishing or discovering project conventions
|
|
66
|
-
**Example:** "Team prefers barrel exports for module directories"
|
|
67
|
-
|
|
68
|
-
### 5. Context
|
|
69
|
-
|
|
70
|
-
**What:** Domain knowledge, project context, and environmental information
|
|
71
|
-
**When to use:** When important contextual information is gathered during research
|
|
72
|
-
**Example:** "Production DB uses read replicas - write queries must target primary"
|
|
73
|
-
|
|
74
|
-
### 6. Procedure
|
|
75
|
-
|
|
76
|
-
**What:** Step-by-step procedures, workflows, and how-to guides
|
|
77
|
-
**When to use:** When documenting a process that should be repeatable
|
|
78
|
-
**Example:** "How to set up authentication with NextAuth.js in a Next.js application"
|
|
79
|
-
|
|
80
|
-
## Tools
|
|
81
|
-
|
|
82
|
-
The ff-learning skill provides three tools for interacting with the memory system.
|
|
83
|
-
|
|
84
|
-
### Tool 1: Store Learning (ff-learning-store)
|
|
85
|
-
|
|
86
|
-
**Purpose:** Create a new memory explicitly
|
|
87
|
-
|
|
88
|
-
**When to use:**
|
|
89
|
-
|
|
90
|
-
- At end of task completion
|
|
91
|
-
- When insight or pattern is discovered
|
|
92
|
-
- After error resolution
|
|
93
|
-
- When research findings are significant
|
|
94
|
-
|
|
95
|
-
**Input parameters:**
|
|
96
|
-
|
|
97
|
-
- `title` (string, required): Brief title for the learning
|
|
98
|
-
- `description` (string, required): Detailed description of the learning
|
|
99
|
-
- `category` (enum, required): One of `pattern`, `decision`, `debugging`, `preference`, `context`, or `procedure`
|
|
100
|
-
- `tags` (array of strings, required): Relevant keywords for search
|
|
101
|
-
- `importance` (float, required): 0.0 to 1.0 (0.8+ for critical learnings)
|
|
102
|
-
- `content` (string, optional): Additional body content
|
|
103
|
-
- `source` (enum, optional): Origin – conversation, research, implementation, review
|
|
104
|
-
- `relatedMemories` (array, optional): IDs of related memories
|
|
105
|
-
|
|
106
|
-
**Example:**
|
|
107
|
-
|
|
108
|
-
```markdown
|
|
109
|
-
Store a learning using ff-learning-store:
|
|
110
|
-
|
|
111
|
-
- title: "OAuth Implementation Pattern"
|
|
112
|
-
- description: "Successfully implemented OAuth with NextAuth.js, resolved CSRF issues"
|
|
113
|
-
- category: "pattern"
|
|
114
|
-
- tags: ["oauth", "nextauth", "authentication"]
|
|
115
|
-
- importance: 0.8
|
|
116
|
-
- content: "Used state parameter to prevent CSRF. JWT strategy for session persistence."
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
### Tool 2: Search Learnings (ff-learning-search)
|
|
120
|
-
|
|
121
|
-
**Purpose:** Find relevant memories by keywords and filters
|
|
122
|
-
|
|
123
|
-
**When to use:**
|
|
124
|
-
|
|
125
|
-
- At start of new task (find related past work)
|
|
126
|
-
- When facing similar problem to previous one
|
|
127
|
-
- For context gathering before planning
|
|
128
|
-
- To avoid repeating mistakes
|
|
129
|
-
|
|
130
|
-
**Input parameters:**
|
|
131
|
-
|
|
132
|
-
- `query` (string, required): Search terms to match against title, body, and tags
|
|
133
|
-
- `tags` (array, optional): Filter to memories containing ALL specified tags
|
|
134
|
-
- `category` (enum, optional): Filter by category (`pattern`, `decision`, `debugging`, `preference`, `context`, `procedure`)
|
|
135
|
-
- `limit` (number, optional): Max results, 1-50 (default: 10)
|
|
136
|
-
- `minImportance` (float, optional): Minimum importance threshold
|
|
137
|
-
|
|
138
|
-
**Example:**
|
|
22
|
+
**Template:**
|
|
139
23
|
|
|
140
24
|
```markdown
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
- query: "OAuth authentication"
|
|
144
|
-
- tags: ["security"]
|
|
145
|
-
- limit: 5
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
**Returns:** Array of matching memories sorted by relevance × importance, with id, title, category, tags, importance, and relevance score.
|
|
149
|
-
|
|
150
|
-
### Tool 3: Get Learning (ff-learning-get)
|
|
151
|
-
|
|
152
|
-
**Purpose:** Retrieve the full content of a specific memory
|
|
153
|
-
|
|
154
|
-
**When to use:**
|
|
155
|
-
|
|
156
|
-
- After search to read full details
|
|
157
|
-
- When referenced by ID in another memory
|
|
158
|
-
- For deep dive into specific learning
|
|
159
|
-
|
|
160
|
-
**Input parameters:**
|
|
25
|
+
# [Topic Title]
|
|
161
26
|
|
|
162
|
-
|
|
27
|
+
**Date:** [Current Date]
|
|
28
|
+
**Tags:** [comma, separated, tags]
|
|
163
29
|
|
|
164
|
-
|
|
30
|
+
## Context / Problem
|
|
165
31
|
|
|
166
|
-
|
|
32
|
+
[Briefly describe what you were trying to do or the problem you encountered.]
|
|
167
33
|
|
|
168
|
-
|
|
34
|
+
## Solution / Discovery
|
|
169
35
|
|
|
170
|
-
|
|
171
|
-
ff-memories/
|
|
172
|
-
├── memories/ # All memory JSON files
|
|
173
|
-
│ ├── {uuid}.json # Individual memory files
|
|
174
|
-
│ └── ...
|
|
175
|
-
└── processed.json # Tracks which messages have been processed
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
### Memory JSON Schema
|
|
36
|
+
[Detail the exact solution, configuration, or architectural decision made.]
|
|
179
37
|
|
|
180
|
-
|
|
38
|
+
## Why this matters
|
|
181
39
|
|
|
182
|
-
|
|
183
|
-
{
|
|
184
|
-
"id": "uuid-v4",
|
|
185
|
-
"sessionID": "ses_xxx",
|
|
186
|
-
"messageID": "msg_xxx",
|
|
187
|
-
"category": "pattern|decision|debugging|preference|context|procedure",
|
|
188
|
-
"title": "Brief descriptive title",
|
|
189
|
-
"body": "Detailed learning content",
|
|
190
|
-
"tags": ["keyword1", "keyword2"],
|
|
191
|
-
"importance": 0.8,
|
|
192
|
-
"createdAt": 1707900000000,
|
|
193
|
-
"extractedBy": "session|thinking|explicit"
|
|
194
|
-
}
|
|
40
|
+
[Explain why this approach was chosen or why the bug occurred.]
|
|
195
41
|
```
|
|
196
42
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
### Planning Agent
|
|
200
|
-
|
|
201
|
-
**When to capture:** After planning sessions, architectural decisions, risk identification
|
|
202
|
-
**What to capture:** Architecture decisions (decision), risk factors (context), pattern discoveries (pattern)
|
|
203
|
-
|
|
204
|
-
### Building Agent
|
|
205
|
-
|
|
206
|
-
**When to capture:** After implementing features, overcoming challenges, resolving errors
|
|
207
|
-
**What to capture:** Code patterns (pattern), error resolutions (debugging), integration insights (context)
|
|
208
|
-
|
|
209
|
-
### Reviewing Agent
|
|
210
|
-
|
|
211
|
-
**When to capture:** After completing reviews, identifying common issues
|
|
212
|
-
**What to capture:** Common issue patterns (pattern), quality insights (context)
|
|
213
|
-
|
|
214
|
-
### Research Agent
|
|
215
|
-
|
|
216
|
-
**When to capture:** After research, significant findings, technology evaluations
|
|
217
|
-
**What to capture:** Key findings (pattern), technology comparisons (decision), best practices (procedure)
|
|
218
|
-
|
|
219
|
-
### Security Agent
|
|
220
|
-
|
|
221
|
-
**When to capture:** After audits, vulnerability findings
|
|
222
|
-
**What to capture:** Vulnerability patterns (debugging), security best practices (procedure)
|
|
223
|
-
|
|
224
|
-
## Integration with Other Skills
|
|
225
|
-
|
|
226
|
-
### With ff-delegation
|
|
227
|
-
|
|
228
|
-
- Store learnings from delegated agents
|
|
229
|
-
- Capture insights from parallel work
|
|
230
|
-
- Link related memories across agent boundaries
|
|
231
|
-
|
|
232
|
-
### With ff-todo-management
|
|
233
|
-
|
|
234
|
-
- Add "Capture learnings" as final todo item
|
|
235
|
-
- Track learning capture in todo list
|
|
236
|
-
|
|
237
|
-
### With ff-mini-plan
|
|
238
|
-
|
|
239
|
-
- Search past learnings during planning
|
|
240
|
-
- Use previous patterns to inform new plans
|
|
241
|
-
|
|
242
|
-
## Best Practices
|
|
243
|
-
|
|
244
|
-
### Do:
|
|
43
|
+
### 2. Retrieving Past Knowledge (Reading)
|
|
245
44
|
|
|
246
|
-
|
|
247
|
-
- **Use consistent tags** – Establish tag conventions for your project
|
|
248
|
-
- **Set appropriate importance** – Reserve 0.8-1.0 for truly critical learnings
|
|
249
|
-
- **Write searchable titles** – Use keywords that future you will search for
|
|
250
|
-
- **Capture failures too** – What didn't work is as valuable as what did
|
|
251
|
-
- **Search before storing** – Avoid duplicate memories
|
|
252
|
-
- **Review periodically** – Search old learnings before starting new tasks
|
|
45
|
+
Before diving into debugging or implementing features, scan the `docs/` and `docs/learnings/` directories for relevant context.
|
|
253
46
|
|
|
254
|
-
|
|
47
|
+
**Tools to use:**
|
|
255
48
|
|
|
256
|
-
-
|
|
257
|
-
-
|
|
258
|
-
-
|
|
259
|
-
- **Be too brief** – One-line descriptions lack context
|
|
260
|
-
- **Forget tags** – Untagged memories are hard to find
|
|
49
|
+
- `glob` tool with pattern `docs/learnings/*.md` to see all stored learnings.
|
|
50
|
+
- `grep` tool to search inside `docs/` and `docs/learnings/` for specific keywords (e.g., error messages, library names).
|
|
51
|
+
- `read` tool to pull the full context of relevant markdown files.
|
|
261
52
|
|
|
262
|
-
|
|
53
|
+
### 3. Updating Existing Knowledge (Refining)
|
|
263
54
|
|
|
264
|
-
|
|
55
|
+
If you find an existing learning document that is outdated or incomplete based on new work, use the `edit` tool to update it. Knowledge should evolve with the codebase.
|
|
265
56
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
**Purpose:** Create a new implementation plan file in `.feature-factory/plans/`
|
|
269
|
-
|
|
270
|
-
**Input parameters:**
|
|
271
|
-
|
|
272
|
-
- `title` (string, required): Title of the plan
|
|
273
|
-
- `description` (string, required): What the plan covers
|
|
274
|
-
- `content` (string, required): Full markdown content
|
|
275
|
-
- `planType` (enum, required): implementation, architecture, migration, or research
|
|
276
|
-
- `relatedIssues` (array, optional): Related issue IDs
|
|
277
|
-
- `estimatedEffort` (string, optional): Time estimate
|
|
278
|
-
|
|
279
|
-
### Tool 5: Create Agent Context (ff-agent-context-create)
|
|
280
|
-
|
|
281
|
-
**Purpose:** Create a new agent context file in `.feature-factory/agents/`
|
|
282
|
-
|
|
283
|
-
**Input parameters:**
|
|
284
|
-
|
|
285
|
-
- `id` (string, required): UUID for this agent instance
|
|
286
|
-
- `agent` (string, required): Agent type (planning, building, etc.)
|
|
287
|
-
- `title` (string, required): Task title
|
|
288
|
-
- `description` (string, required): Task description
|
|
289
|
-
- `status` (enum, optional): in-progress, completed, delegated, failed
|
|
290
|
-
- `parent` (string, optional): Parent agent UUID
|
|
291
|
-
- `delegatedTo` (array, optional): Child agent UUIDs
|
|
292
|
-
- `notes` (string, optional): Additional notes
|
|
293
|
-
|
|
294
|
-
### Tool 6: Update Agent Context (ff-agent-context-update)
|
|
295
|
-
|
|
296
|
-
**Purpose:** Update an existing agent context file
|
|
297
|
-
|
|
298
|
-
**Input parameters:**
|
|
299
|
-
|
|
300
|
-
- `agentId` (string, required): Agent UUID to update
|
|
301
|
-
- `agent` (string, required): Agent type
|
|
302
|
-
- `status` (enum, optional): New status
|
|
303
|
-
- `addDelegatedTo` (string, optional): Add child agent UUID
|
|
304
|
-
- `notes` (string, optional): Notes to append
|
|
305
|
-
- `progressUpdate` (string, optional): Progress line to add
|
|
306
|
-
|
|
307
|
-
## Quick Reference
|
|
308
|
-
|
|
309
|
-
### Creating a Memory
|
|
310
|
-
|
|
311
|
-
```markdown
|
|
312
|
-
Store a learning:
|
|
313
|
-
|
|
314
|
-
- title: "Descriptive searchable title"
|
|
315
|
-
- description: "Detailed explanation of what was learned"
|
|
316
|
-
- category: "pattern"
|
|
317
|
-
- tags: ["relevant", "keywords"]
|
|
318
|
-
- importance: 0.8
|
|
319
|
-
```
|
|
320
|
-
|
|
321
|
-
### Searching Memories
|
|
322
|
-
|
|
323
|
-
```markdown
|
|
324
|
-
Search learnings:
|
|
325
|
-
|
|
326
|
-
- query: "authentication"
|
|
327
|
-
- tags: ["oauth", "security"]
|
|
328
|
-
- limit: 5
|
|
329
|
-
```
|
|
57
|
+
## When to Document a Learning
|
|
330
58
|
|
|
331
|
-
|
|
59
|
+
- **Architectural Decisions:** Why a specific library, pattern, or approach was chosen over alternatives.
|
|
60
|
+
- **Environment Quirks:** Specific workarounds needed for local dev, testing, or deployment.
|
|
61
|
+
- **Complex Debugging:** A root cause analysis of a tricky bug and how it was fixed.
|
|
62
|
+
- **Undocumented Behaviors:** Workarounds for third-party API quirks or internal system edge cases.
|
|
332
63
|
|
|
333
|
-
|
|
64
|
+
## Checklist for Agents
|
|
334
65
|
|
|
335
|
-
- [ ]
|
|
336
|
-
- [ ]
|
|
337
|
-
- [ ]
|
|
338
|
-
- [ ] Importance is appropriate (0.0-1.0)
|
|
339
|
-
- [ ] No sensitive data included
|
|
66
|
+
- [ ] Have I encountered a novel problem or established a new pattern? -> **Document it.**
|
|
67
|
+
- [ ] Am I stuck on an error or unclear on a convention? -> **Search `docs/learnings/`.**
|
|
68
|
+
- [ ] Is an existing learning document inaccurate? -> **Update it.**
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
import { runLocalRecallMCPServer } from '../dist/local-recall/mcp-stdio-server.js';
|
|
4
|
-
|
|
5
|
-
runLocalRecallMCPServer().catch((error) => {
|
|
6
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
7
|
-
console.error(`Failed to start ff-local-recall MCP server: ${message}`);
|
|
8
|
-
process.exit(1);
|
|
9
|
-
});
|