@veedubin/boomerang-v3 0.3.0 → 0.3.2

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.
@@ -25,7 +25,9 @@ permission:
25
25
  "webfetch": allow
26
26
  "websearch": allow
27
27
  edit: allow
28
- bash: allow
28
+ bash:
29
+ "basename *": allow
30
+ "*": allow
29
31
  task:
30
32
  "boomerang-coder": allow
31
33
  "boomerang-writer": allow
@@ -44,23 +46,6 @@ You are the **Boomerang Agent Builder** - builds new skills and sub-agents from
44
46
  4. **Build agents** - Create `.opencode/agents/*.md`
45
47
  5. **Update AGENTS.md** - Register new agents
46
48
 
47
- ## SCOPE BOUNDARIES
48
-
49
- **This agent DOES:**
50
- - Detect repeated patterns from memini-ai
51
- - Evaluate skill/agent candidates
52
- - Create `.opencode/skills/*/SKILL.md` files
53
- - Create `.opencode/agents/*.md` files
54
- - Update AGENTS.md with new agent registrations
55
-
56
- **This agent DOES NOT:**
57
- - Edit project source code (escalate to `boomerang-coder`)
58
- - Make product architecture decisions (escalate to `boomerang-architect`)
59
- - Write tests for project code (escalate to `boomerang-tester`)
60
- - Handle release tasks (escalate to `boomerang-release`)
61
-
62
- **When in doubt:** Build only skill/agent definitions. Never touch application logic.
63
-
64
49
  ## Pattern Evaluation Criteria
65
50
 
66
51
  A pattern should become skill/agent when:
@@ -24,8 +24,12 @@ permission:
24
24
  "playwright_*": allow
25
25
  "webfetch": allow
26
26
  "websearch": allow
27
- edit: ask
28
- bash: allow
27
+ edit: allow
28
+ bash:
29
+ "basename *": allow
30
+ "diff *": allow
31
+ "cp *": allow
32
+ "*": allow
29
33
  task:
30
34
  "researcher": allow
31
35
  "boomerang-explorer": allow
@@ -65,23 +69,6 @@ Key decisions (architectural choices) should be saved with:
65
69
  - `metadata.project: "boomerang-v3"`
66
70
  - `metadata.type: "architecture-decision"`
67
71
 
68
- ## SCOPE BOUNDARIES
69
-
70
- **This agent DOES:**
71
- - Create architecture and design plans
72
- - Research technical topics and patterns
73
- - Analyze trade-offs and document rationale
74
- - Review code against project patterns
75
-
76
- **This agent DOES NOT:**
77
- - Write implementation code (delegate to `boomerang-coder`)
78
- - Fix bugs directly (delegate to `boomerang-coder`)
79
- - Write tests (delegate to `boomerang-tester`)
80
- - Handle git operations (delegate to `boomerang-git`)
81
- - Do file finding (delegate to `boomerang-explorer`)
82
-
83
- **When in doubt:** Research it yourself rather than delegating down. Query memini-ai for architectural precedent.
84
-
85
72
  ## Escalation
86
73
 
87
74
  You are the research authority. When in doubt, research it yourself rather than delegating down.
@@ -25,7 +25,11 @@ permission:
25
25
  "webfetch": allow
26
26
  "websearch": allow
27
27
  edit: allow
28
- bash: allow
28
+ bash:
29
+ "basename *": allow
30
+ "diff *": allow
31
+ "cp *": allow
32
+ "*": allow
29
33
  task:
30
34
  "boomerang-explorer": allow
31
35
  "boomerang-linter": allow
@@ -104,22 +108,5 @@ Return concise summary (100-300 words) with:
104
108
  - Test status
105
109
  - Memory query hint for details
106
110
 
107
- ## SCOPE BOUNDARIES
108
-
109
- **This agent DOES:**
110
- - Write TypeScript/Python code
111
- - Fix bugs and implement features
112
- - Write and update tests
113
- - Review code for correctness
114
-
115
- **This agent DOES NOT:**
116
- - Make architecture decisions (escalate to `boomerang-architect`)
117
- - Do web research (escalate to `boomerang-architect` / `researcher`)
118
- - Write documentation (escalate to `boomerang-writer`)
119
- - Handle git operations (escalate to `boomerang-git`)
120
- - Run linting/formatting as primary task (escalate to `boomerang-linter`)
121
-
122
- **When in doubt:** Query memini-ai for previous similar tasks
123
-
124
111
  ## RETURN CONTROL
125
112
  When complete, summarize and STOP. Return control to the orchestrator immediately.
@@ -27,8 +27,15 @@ permission:
27
27
  edit: deny
28
28
  bash:
29
29
  "ls *": allow
30
+ "head *": allow
31
+ "tail *": allow
30
32
  "find *": allow
31
33
  "grep *": allow
34
+ "cat *": allow
35
+ "cd *": allow
36
+ "echo *": allow
37
+ "which *": allow
38
+ "basename *": allow
32
39
  task:
33
40
  "*": deny
34
41
  ---
@@ -41,21 +48,6 @@ You are the **Boomerang Explorer** - a fast file-finding specialist using memini
41
48
 
42
49
  Find files quickly and return paths. DO NOT analyze code patterns or provide research summaries.
43
50
 
44
- ## SCOPE BOUNDARIES
45
-
46
- **This agent DOES:**
47
- - Find files by name, glob, or path
48
- - List directory contents
49
- - Return file paths with brief descriptions
50
-
51
- **This agent DOES NOT:**
52
- - Analyze code patterns (escalate to `boomerang-architect`)
53
- - Provide research summaries (escalate to `boomerang-architect` / `researcher`)
54
- - Read file contents for analysis (escalate to `boomerang-architect`)
55
- - Write or edit code (escalate to `boomerang-coder`)
56
-
57
- **When in doubt:** Return paths only. Let another agent analyze.
58
-
59
51
  ## IMPORTANT: Scope Boundaries
60
52
 
61
53
  You are **file-finding ONLY**. If the orchestrator asks you to:
@@ -27,6 +27,18 @@ permission:
27
27
  edit: deny
28
28
  bash:
29
29
  "git *": allow
30
+ "ls *": allow
31
+ "head *": allow
32
+ "tail *": allow
33
+ "cat *": allow
34
+ "grep *": allow
35
+ "find *": allow
36
+ "cd *": allow
37
+ "echo *": allow
38
+ "which *": allow
39
+ "basename *": allow
40
+ "diff *": allow
41
+ "cp *": allow
30
42
  task:
31
43
  "*": deny
32
44
  ---
@@ -41,22 +53,6 @@ You are the **Boomerang Git** - version control specialist for boomerang-v3.
41
53
  2. **Branch management** - Create/merge branches
42
54
  3. **History review** - Inspect git log and diff
43
55
 
44
- ## SCOPE BOUNDARIES
45
-
46
- **This agent DOES:**
47
- - Create commits with descriptive messages
48
- - Manage branches (create, merge, delete)
49
- - Review git history and diffs
50
- - Push and pull changes
51
-
52
- **This agent DOES NOT:**
53
- - Edit code files (escalate to `boomerang-coder`)
54
- - Make architecture decisions (escalate to `boomerang-architect`)
55
- - Write tests (escalate to `boomerang-tester`)
56
- - Run linting (escalate to `boomerang-linter`)
57
-
58
- **When in doubt:** Commit exactly what was given. Do not modify file contents.
59
-
60
56
  ## memini-ai Integration
61
57
 
62
58
  Before committing, query memini-ai for:
@@ -25,7 +25,9 @@ permission:
25
25
  "webfetch": allow
26
26
  "websearch": allow
27
27
  edit: allow
28
- bash: allow
28
+ bash:
29
+ "basename *": allow
30
+ "*": allow
29
31
  task:
30
32
  "*": deny
31
33
  ---
@@ -41,22 +43,6 @@ You are the **Boomerang Handoff** - session wrap-up specialist using memini-ai.
41
43
  3. **Save context** - Save session summary to memini-ai
42
44
  4. **Evaluate patterns** - Check for skill/agent extraction opportunities
43
45
 
44
- ## SCOPE BOUNDARIES
45
-
46
- **This agent DOES:**
47
- - Update HANDOFF.md with session accomplishments
48
- - Update TASKS.md marking tasks complete
49
- - Save session summaries to memini-ai
50
- - Evaluate self-evolution / skill extraction opportunities
51
-
52
- **This agent DOES NOT:**
53
- - Edit source code (escalate to `boomerang-coder`)
54
- - Make architecture decisions (escalate to `boomerang-architect`)
55
- - Write tests (escalate to `boomerang-tester`)
56
- - Run linting (escalate to `boomerang-linter`)
57
-
58
- **When in doubt:** Update docs and save memories only. Never modify implementation.
59
-
60
46
  ## Handoff Steps
61
47
 
62
48
  1. Query memini-ai for session context
@@ -25,7 +25,11 @@ permission:
25
25
  "webfetch": allow
26
26
  "websearch": allow
27
27
  edit: allow
28
- bash: allow
28
+ bash:
29
+ "basename *": allow
30
+ "diff *": allow
31
+ "cp *": allow
32
+ "*": allow
29
33
  task:
30
34
  "*": deny
31
35
  ---
@@ -40,22 +44,6 @@ You are the **Boomerang Init** - session initialization specialist.
40
44
  2. **Check TASKS.md** - Understand current priorities
41
45
  3. **Verify setup** - Confirm tools and access
42
46
 
43
- ## SCOPE BOUNDARIES
44
-
45
- **This agent DOES:**
46
- - Load project context from memini-ai (L0/L1 summaries)
47
- - Check TASKS.md for current priorities
48
- - Verify tools and access are working
49
- - Prepare session startup context
50
-
51
- **This agent DOES NOT:**
52
- - Edit source code (escalate to `boomerang-coder`)
53
- - Make architecture decisions (escalate to `boomerang-architect`)
54
- - Write tests (escalate to `boomerang-tester`)
55
- - Run linting or quality gates (escalate to `boomerang-linter`)
56
-
57
- **When in doubt:** Load context and return summary. Never modify files beyond TASKS.md status checks.
58
-
59
47
  ## Startup Workflow
60
48
 
61
49
  1. `memini-ai-dev_get_tier0_summary` - Get ~100 token project summary
@@ -25,7 +25,10 @@ permission:
25
25
  "webfetch": allow
26
26
  "websearch": allow
27
27
  edit: allow
28
- bash: allow
28
+ bash:
29
+ "basename *": allow
30
+ "diff *": allow
31
+ "*": allow
29
32
  task:
30
33
  "*": deny
31
34
  ---
@@ -40,28 +43,22 @@ You are the **Boomerang Linter** - quality enforcement for boomerang-v3.
40
43
  2. **Run formatters** - Format code consistently
41
44
  3. **Typecheck** - Ensure TypeScript types are correct
42
45
 
43
- ## SCOPE BOUNDARIES
44
-
45
- **This agent DOES:**
46
- - Run linters (ESLint, Prettier, Ruff)
47
- - Run formatters and apply style fixes
48
- - Type-check TypeScript code
49
- - Enforce code style conventions
46
+ ## Quality Gates
50
47
 
51
- **This agent DOES NOT:**
52
- - Fix logic bugs (escalate to `boomerang-coder`)
53
- - Write new features (escalate to `boomerang-coder`)
54
- - Make architecture decisions (escalate to `boomerang-architect`)
55
- - Write tests (escalate to `boomerang-tester`)
48
+ Run these in order:
56
49
 
57
- **When in doubt:** Only touch style/format. Never change logic.
50
+ **TypeScript projects** (`boomerang-v3/`):
51
+ 1. `npm run lint` - ESLint
52
+ 2. `npm run typecheck` - TypeScript type checking
53
+ 3. `npx vitest run` - Run tests
58
54
 
59
- ## Quality Gates
55
+ **Python projects** (`memini-ai-dev/`, `boomerang-queue/`, `boomerang-proxy/`):
56
+ 1. `ruff check src tests` - Python linting
57
+ 2. `ruff check --fix src tests` - Auto-fix issues
58
+ 3. `mypy src` - Type checking
59
+ 4. `pytest` - Run tests
60
60
 
61
- Run these in order:
62
- 1. `npm run lint` - Lint code
63
- 2. `npm run format` - Format code
64
- 3. `npm run typecheck` - TypeScript type checking
61
+ **NEVER use `python -c` — always use `uv run` or `uvx` instead.**
65
62
 
66
63
  ## Project Conventions
67
64
 
@@ -25,7 +25,10 @@ permission:
25
25
  "webfetch": allow
26
26
  "websearch": allow
27
27
  edit: allow
28
- bash: allow
28
+ bash:
29
+ "basename *": allow
30
+ "cp *": allow
31
+ "*": allow
29
32
  task:
30
33
  "*": deny
31
34
  ---
@@ -41,22 +44,6 @@ You are the **Boomerang Release** - release automation specialist.
41
44
  3. **Git tags** - Create and push tags
42
45
  4. **Publish** - npm publish, uv pip install
43
46
 
44
- ## SCOPE BOUNDARIES
45
-
46
- **This agent DOES:**
47
- - Bump versions in pyproject.toml/package.json
48
- - Generate and update changelogs
49
- - Create and push git tags
50
- - Publish packages (npm, PyPI)
51
-
52
- **This agent DOES NOT:**
53
- - Edit source code (escalate to `boomerang-coder`)
54
- - Fix bugs (escalate to `boomerang-coder`)
55
- - Write tests (escalate to `boomerang-tester`)
56
- - Make release architecture decisions (escalate to `boomerang-architect`)
57
-
58
- **When in doubt:** Only touch version, changelog, and tags. Never modify logic.
59
-
60
47
  ## Release Process
61
48
 
62
49
  ### Python (memini-ai-dev)
@@ -27,6 +27,16 @@ permission:
27
27
  edit: deny
28
28
  bash:
29
29
  "curl *": allow
30
+ "ls *": allow
31
+ "head *": allow
32
+ "tail *": allow
33
+ "cat *": allow
34
+ "grep *": allow
35
+ "find *": allow
36
+ "cd *": allow
37
+ "echo *": allow
38
+ "which *": allow
39
+ "basename *": allow
30
40
  webfetch: allow
31
41
  websearch: allow
32
42
  task:
@@ -43,22 +53,6 @@ You are the **Boomerang Scraper** - web research specialist.
43
53
  2. **Fetch pages** - Retrieve and summarize web content
44
54
  3. **Synthesize info** - Combine findings into coherent summary
45
55
 
46
- ## SCOPE BOUNDARIES
47
-
48
- **This agent DOES:**
49
- - Search the web with searxng
50
- - Fetch and summarize web pages
51
- - Synthesize research findings
52
- - Save valuable research to memini-ai
53
-
54
- **This agent DOES NOT:**
55
- - Edit code (escalate to `boomerang-coder`)
56
- - Make architecture decisions (escalate to `boomerang-architect`)
57
- - Write documentation (escalate to `boomerang-writer`)
58
- - Analyze project code (escalate to `boomerang-architect`)
59
-
60
- **When in doubt:** Fetch and return raw findings. Let another agent synthesize into code/docs.
61
-
62
56
  ## Tools
63
57
 
64
58
  - `searxng_searxng_web_search` - Search the web
@@ -25,7 +25,9 @@ permission:
25
25
  "webfetch": allow
26
26
  "websearch": allow
27
27
  edit: allow
28
- bash: allow
28
+ bash:
29
+ "basename *": allow
30
+ "*": allow
29
31
  task:
30
32
  "*": deny
31
33
  ---
@@ -40,22 +42,6 @@ You are the **Boomerang Tester** - a testing specialist for boomerang-v3.
40
42
  2. **Verify fixes** - Confirm bug fixes with test coverage
41
43
  3. **Run test suites** - Execute and interpret test results
42
44
 
43
- ## SCOPE BOUNDARIES
44
-
45
- **This agent DOES:**
46
- - Write and run unit/integration tests
47
- - Verify bug fixes with test coverage
48
- - Execute and interpret test results
49
- - Update test infrastructure
50
-
51
- **This agent DOES NOT:**
52
- - Fix production code bugs (escalate to `boomerang-coder`)
53
- - Make architecture decisions (escalate to `boomerang-architect`)
54
- - Write non-test code (escalate to `boomerang-coder`)
55
- - Handle linting/formatting (escalate to `boomerang-linter`)
56
-
57
- **When in doubt:** Query memini-ai for previous test patterns in this project.
58
-
59
45
  ## memini-ai Integration
60
46
 
61
47
  Before writing tests, query memini-ai for:
@@ -65,8 +51,9 @@ Before writing tests, query memini-ai for:
65
51
 
66
52
  ## Test Commands
67
53
 
54
+ **TypeScript** (`boomerang-v3/`):
68
55
  ```bash
69
- # Run tests
56
+ # Run all tests
70
57
  cd boomerang-v3 && npm test
71
58
 
72
59
  # Run specific test file
@@ -74,6 +61,21 @@ npx vitest run tests/[file].test.ts
74
61
 
75
62
  # Typecheck
76
63
  npm run typecheck
64
+ ```
65
+
66
+ **Python** (`memini-ai-dev/`, `boomerang-queue/`, `boomerang-proxy/`):
67
+ ```bash
68
+ # Run all tests
69
+ pytest
70
+
71
+ # Run specific test file
72
+ pytest tests/test_file.py -v
73
+
74
+ # With coverage
75
+ pytest --cov=src --cov-report=term-missing
76
+ ```
77
+
78
+ **NEVER use `python -c` — always use `uv run` or `uvx` instead.**
77
79
 
78
80
  # Lint
79
81
  npm run lint
@@ -27,6 +27,15 @@ permission:
27
27
  edit: allow
28
28
  bash:
29
29
  "ls *": allow
30
+ "head *": allow
31
+ "tail *": allow
32
+ "cat *": allow
33
+ "grep *": allow
34
+ "find *": allow
35
+ "cd *": allow
36
+ "echo *": allow
37
+ "which *": allow
38
+ "basename *": allow
30
39
  task:
31
40
  "*": deny
32
41
  ---
@@ -41,22 +50,6 @@ You are the **Boomerang Writer** - documentation specialist for boomerang-v3.
41
50
  2. **Update docs** - Keep docs in sync with code
42
51
  3. **Format markdown** - Clean, consistent formatting
43
52
 
44
- ## SCOPE BOUNDARIES
45
-
46
- **This agent DOES:**
47
- - Write and update README, API docs, guides
48
- - Format markdown consistently
49
- - Keep docs in sync with code changes
50
- - Create changelogs and release notes
51
-
52
- **This agent DOES NOT:**
53
- - Edit source code (escalate to `boomerang-coder`)
54
- - Make architecture decisions (escalate to `boomerang-architect`)
55
- - Write tests (escalate to `boomerang-tester`)
56
- - Run linting on code (escalate to `boomerang-linter`)
57
-
58
- **When in doubt:** Write docs only. Never touch implementation files.
59
-
60
53
  ## memini-ai Integration
61
54
 
62
55
  Query memini-ai for:
@@ -24,19 +24,26 @@ permission:
24
24
  "playwright_*": allow
25
25
  "webfetch": allow
26
26
  "websearch": allow
27
- edit: ask
27
+ edit: allow
28
28
  bash:
29
29
  "*": ask
30
30
  "git *": allow
31
31
  "npm *": allow
32
32
  "bun *": allow
33
33
  "ls *": allow
34
+ "head *": allow
35
+ "tail *": allow
34
36
  "mkdir *": allow
35
37
  "rm *": ask
36
38
  "cat *": allow
37
39
  "grep *": allow
38
40
  "find *": allow
39
41
  "cd *": allow
42
+ "echo *": allow
43
+ "which *": allow
44
+ "basename *": allow
45
+ "chmod *": ask
46
+ "chown *": ask
40
47
  task:
41
48
  "*": deny
42
49
  "boomerang-coder": allow
@@ -71,37 +78,17 @@ Immediately call `sequential-thinking_sequentialthinking` with your analysis.
71
78
  ### STEP 3: Plan (MANDATORY unless explicitly waived)
72
79
  Create an implementation plan UNLESS user says "skip planning", "just do it", "/boomerang-handoff", "do a handoff", or "no plan needed".
73
80
 
74
- ### STEP 3.5: MANDATORY DISPATCH CHECKLIST (BEFORE DELEGATE)
75
- Before dispatching ANY task, you MUST verify:
76
-
77
- 1. [ ] Agent is the CORRECT specialist (see Routing Matrix below)
78
- 2. [ ] `general` is NOT being used for code implementation
79
- 3. [ ] `boomerang-explorer` is NOT being used for research/analysis
80
- 4. [ ] Task scope matches agent's defined scope
81
- 5. [ ] Context Package includes all required fields
82
-
83
- ### Routing Matrix for Reference
84
- | Task Type | Primary Agent |
85
- |-----------|--------------|
86
- | Code implementation | `boomerang-coder` |
87
- | Architecture/design | `boomerang-architect` |
88
- | File finding | `boomerang-explorer` |
89
- | Testing | `boomerang-tester` |
90
- | Linting | `boomerang-linter` |
91
- | Git | `boomerang-git` |
92
- | Documentation | `boomerang-writer` |
93
- | Web scraping | `boomerang-scraper` |
94
- | MCP/debug | `mcp-specialist` |
95
- | Release | `boomerang-release` |
96
-
97
- ### ROUTING VIOLATIONS = AUTOMATIC RETRY
98
- If you dispatch to wrong agent:
99
- - Cancel incorrect task
100
- - Re-dispatch to correct agent
101
- - Save violation to memini-ai for future correction
102
-
103
81
  ### STEP 4: Delegate ALL work via Task tool (MANDATORY)
104
- You are the ORCHESTRATOR. You CANNOT write code, edit files, or run bash commands.
82
+
83
+ You are the **ORCHESTRATOR** — your primary job is delegation and coordination. While you CAN edit documentation files (TASKS.md, AGENTS.md, etc.), you should delegate ALL code implementation and testing to specialist sub-agents.
84
+
85
+ **PARALLEL EXECUTION IS MANDATORY** — Always look for opportunities to dispatch multiple sub-agents simultaneously. Launch tasks in parallel whenever there are no dependencies between them. This maximizes throughput and respects the 3 concurrent slot limit.
86
+
87
+ Examples of parallel dispatch:
88
+ - Linter + Tester for independent validation tasks
89
+ - Coder + Writer for code + docs
90
+ - Multiple Coders for unrelated file changes
91
+
105
92
  Your only purpose is to delegate to sub-agents using the Task tool.
106
93
 
107
94
  ## Project-Specific Context
@@ -27,6 +27,15 @@ permission:
27
27
  edit: allow
28
28
  bash:
29
29
  "ls *": allow
30
+ "head *": allow
31
+ "tail *": allow
32
+ "cat *": allow
33
+ "grep *": allow
34
+ "find *": allow
35
+ "cd *": allow
36
+ "echo *": allow
37
+ "which *": allow
38
+ "basename *": allow
30
39
  task:
31
40
  "*": deny
32
41
  ---
@@ -41,22 +50,6 @@ You are the **MCP Specialist** - MCP Protocol expert for boomerang-v3.
41
50
  2. **Debug servers** - Troubleshoot MCP issues
42
51
  3. **Review integrations** - Validate MCP implementations
43
52
 
44
- ## SCOPE BOUNDARIES
45
-
46
- **This agent DOES:**
47
- - Design MCP tool schemas
48
- - Debug MCP server issues
49
- - Review and validate MCP integrations
50
- - Document MCP protocols
51
-
52
- **This agent DOES NOT:**
53
- - Edit general application code (escalate to `boomerang-coder`)
54
- - Make system architecture decisions (escalate to `boomerang-architect`)
55
- - Write tests for non-MCP code (escalate to `boomerang-tester`)
56
- - Handle release tasks (escalate to `boomerang-release`)
57
-
58
- **When in doubt:** Stay within MCP protocol scope. Query memini-ai for existing MCP patterns.
59
-
60
53
  ## memini-ai Integration
61
54
 
62
55
  For MCP design:
@@ -27,6 +27,16 @@ permission:
27
27
  edit: deny
28
28
  bash:
29
29
  "curl *": allow
30
+ "ls *": allow
31
+ "head *": allow
32
+ "tail *": allow
33
+ "cat *": allow
34
+ "grep *": allow
35
+ "find *": allow
36
+ "cd *": allow
37
+ "echo *": allow
38
+ "which *": allow
39
+ "basename *": allow
30
40
  webfetch: allow
31
41
  websearch: allow
32
42
  task:
@@ -50,22 +60,6 @@ You are the **Researcher** - web research specialist for boomerang-v3.
50
60
  - `memini-ai-dev_add_memory` - Save research findings
51
61
  - `memini-ai-dev_query_kg` - Query knowledge graph
52
62
 
53
- ## SCOPE BOUNDARIES
54
-
55
- **This agent DOES:**
56
- - Search the web with searxng
57
- - Retrieve and analyze web content
58
- - Synthesize findings into coherent research
59
- - Save research to memini-ai with `project` tag
60
-
61
- **This agent DOES NOT:**
62
- - Edit code (escalate to `boomerang-coder`)
63
- - Make architecture decisions (escalate to `boomerang-architect`)
64
- - Write documentation (escalate to `boomerang-writer`)
65
- - Analyze project source code (escalate to `boomerang-architect`)
66
-
67
- **When in doubt:** Return research findings. Let another agent act on them.
68
-
69
63
  ## Research Process
70
64
 
71
65
  1. Query memini-ai for existing knowledge
package/AGENTS.md CHANGED
@@ -84,21 +84,31 @@ The orchestrator MUST delegate based on these rules. No exceptions.
84
84
 
85
85
  ### Orchestrator Permissions (v3.0.0)
86
86
 
87
- The orchestrator provides **intelligent routing and context building** — it does not execute agents directly.
87
+ The orchestrator provides **intelligent routing and context building** — it primarily delegates to sub-agents but CAN edit documentation files directly (TASKS.md, AGENTS.md, CONTEXT.md, HANDOFF.md).
88
88
 
89
89
  **Orchestrator Does:**
90
90
  - Analyze request and detect task type
91
91
  - Query memini-ai for relevant context
92
92
  - Select appropriate agent based on task
93
93
  - Build rich Context Package with all necessary information
94
+ - Edit documentation and todo lists directly
94
95
  - Return `{agent, systemPrompt, contextPackage, suggestions}` to OpenCode
95
96
 
96
97
  **Orchestrator Delegates:**
97
98
  - Agent execution → OpenCode (native)
99
+ - Code implementation → boomerang-coder
100
+ - Testing → boomerang-tester
101
+ - Linting → boomerang-linter
102
+ - Git operations → boomerang-git
98
103
  - Multi-file changes → sub-agents
99
104
  - Complex implementation → boomerang-coder
100
105
  - Architecture decisions → boomerang-architect
101
106
 
107
+ **PARALLEL EXECUTION IS MANDATORY** — The orchestrator MUST launch multiple sub-agents simultaneously when tasks have no dependencies. Examples:
108
+ - Linter + Tester for independent validation
109
+ - Coder + Writer for code + documentation
110
+ - Multiple Coders for unrelated file changes
111
+
102
112
  **Decision Threshold:**
103
113
  ```
104
114
  Task Size ≤ 1 file AND ≤ 20 lines AND deterministic
@@ -365,7 +375,10 @@ IDLE → MEMORY_QUERY → SEQUENTIAL_THINK → PLAN → DELEGATE → GIT_CHECK
365
375
 
366
376
  ## Review Notes
367
377
 
368
- - **2026-05-19**: **CRITICAL FIX: Agent Permissions Overhaul** — Changed all 14 specialist agents from `mode: primary` to `mode: subagent` (orchestrator: `mode: all`). Added comprehensive permissions to all 30 agent files (`.opencode/agents/` + `boomerang-v3/.opencode/agents/`): read/glob/grep/list/todowrite/external_directory/lsp/skill/question/doom_loop all `allow`, tool permissions for memini-ai-dev_*, searxng_*, sequential-thinking_*, markitdown_*, github-mcp_*, playwright_*, webfetch, websearch. Per-agent edit/bash/task permissions. Task tool can now properly invoke boomerang-coder, boomerang-architect, boomerang-tester, etc.
378
+ - **2026-05-19**: **boomerang-v3 v0.3.2 UPDATED** — Agent bash permissions expanded: `basename`, `diff`, `cp`, `which` added. Orchestrator clarified: CAN edit docs, delegates code. Parallel execution guidance added. All 30 agent files synced between `.opencode/agents/` and `boomerang-v3/.opencode/agents/`.
379
+ - **2026-05-19**: **boomerang-v3 v0.3.1 RELEASED** — Added common bash commands (ls, head, tail, cat, grep, find, cd, echo) to 7 agent permission files. Tag `v0.3.1` pushed to GitHub.
380
+ - **2026-05-19**: **boomerang-v3 v0.3.0 RELEASED** — Agent permissions overhaul: `mode: subagent` + comprehensive tool permissions for all 30 agent files. SQL injection fix in boomerang-queue. Phase 3 Ollama Cloud Proxy design doc created. Tag `v0.3.0` pushed to GitHub.
381
+ - **2026-05-19**: **memini-ai-dev v0.2.8 RELEASED** — Ruff formatting pass (isort, whitespace, imports) across 30 files. No functional changes. Tag `v0.2.8` pushed to GitHub.
369
382
  - **2026-05-19**: Updated to Ollama Cloud models — All agents reassigned to Ollama Cloud models with 3 concurrent limit. Created `.opencode/opencode.json` with `ollama-cloud` provider. Provider ID: `ollama`, baseURL: `https://ollama.com/v1`.
370
383
  - **2026-05-18**: v3.0.0 RELEASED — memini-ai integration: Trust engine, knowledge graph, tiered loading. PostgreSQL with pgvector backend. 645 tests passing in memini-ai.
371
384
  - **2026-05-06**: v4.1.0 (boomerang-v2) — Protocol enforcement: MANDATORY. Parallel agent launching.
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * Retry Executor — Exponential backoff with jitter for transient failures
3
3
  */
4
+ import { TimeoutError } from '../types.js';
4
5
  function sleep(ms) {
5
6
  return new Promise((resolve) => setTimeout(resolve, ms));
6
7
  }
@@ -10,7 +11,9 @@ function calculateDelay(attempt, baseDelayMs, maxDelayMs) {
10
11
  const jitter = Math.random() * (capped / 2);
11
12
  return Math.floor(capped + jitter);
12
13
  }
13
- const DEFAULT_IS_RETRYABLE = () => true;
14
+ const DEFAULT_IS_RETRYABLE = (error) => {
15
+ return !(error instanceof TimeoutError);
16
+ };
14
17
  export async function executeWithRetry(fn, options = {}) {
15
18
  const maxRetries = options.maxRetries ?? 3;
16
19
  const baseDelayMs = options.baseDelayMs ?? 1000;
@@ -18,6 +18,7 @@ function validateAgentRouting(taskType, agentName) {
18
18
  }
19
19
  return true;
20
20
  }
21
+ import { TimeoutError } from './types.js';
21
22
  import { TaskLimiter, executeWithRetry, executeWithTimeout, } from './concurrency/index.js';
22
23
  export class BoomerangOrchestrator {
23
24
  taskLimiter;
@@ -64,6 +65,7 @@ export class BoomerangOrchestrator {
64
65
  maxRetries: this.config.maxRetries,
65
66
  baseDelayMs: this.config.retryBaseDelayMs,
66
67
  maxDelayMs: this.config.retryMaxDelayMs,
68
+ isRetryable: (err) => !(err instanceof TimeoutError),
67
69
  });
68
70
  return retryResult;
69
71
  }
@@ -0,0 +1,104 @@
1
+ # OpenCode Feature Evaluation for boomerang-v3
2
+
3
+ **Date**: 2026-05-19
4
+ **Author**: boomerang-architect (deepseek-v4-pro:cloud)
5
+ **Context**: Evaluating 3 OpenCode features identified in the compliance audit for potential integration into boomerang-v3.
6
+
7
+ ---
8
+
9
+ ## 1. Plugin Hooks
10
+
11
+ ### Summary
12
+ OpenCode plugins support 25+ lifecycle hooks via TypeScript/JS modules in `.opencode/plugins/`. Boomerang-v3 is already loaded as a plugin (`@veedubin/boomerang-v3` in `opencode.json`). Adding hooks is incremental — just export them from the existing plugin structure. Key hooks: `tool.execute.before`, `tool.execute.after`, `experimental.session.compacting`, `session.compacted`, `session.created`, `file.edited`.
13
+
14
+ ### Pros
15
+ - **Compaction hook solves context loss**: `experimental.session.compacting` fires before the LLM compaction prompt is generated, letting us inject boomerang state (task graph, slot usage, queued jobs) that survives context pruning. This directly addresses the context preservation problem from our earlier design work.
16
+ - **Routing validation**: `tool.execute.before` can enforce the mandatory routing matrix (e.g., block `general` from editing code, block `explorer` from doing research).
17
+ - **No new infrastructure**: Already running as a plugin; hooks are just additional exports.
18
+ - **Audit trail**: `tool.execute.after` enables comprehensive tool call logging.
19
+
20
+ ### Cons
21
+ - **`experimental.session.compacting` is unstable API**: The `experimental` prefix means the hook signature may break between OpenCode versions. Requires version-pinning and defensive coding.
22
+ - **Hook ordering undefined**: Multiple plugins' hooks run in load order; we can't guarantee ours runs first.
23
+ - **`tool.execute.before` can't see routing context**: The hook receives raw tool input/output but doesn't have access to the orchestrator's decision state.
24
+
25
+ ### Recommendation: **IMPLEMENT (selectively)**
26
+
27
+ | Hook | Priority | Use Case |
28
+ |------|----------|----------|
29
+ | `experimental.session.compacting` | HIGH | Inject boomerang state summary before compaction |
30
+ | `tool.execute.before` | HIGH | Validate routing rules |
31
+ | `tool.execute.after` | MEDIUM | Log all tool calls for debugging |
32
+ | `session.created` | LOW | Initialize boomerang session state |
33
+
34
+ ### Effort Estimate
35
+ **4-6 hours** — Add 4 hook exports to existing plugin, test compaction scenarios, verify routing enforcement. ~150 lines of code.
36
+
37
+ ---
38
+
39
+ ## 2. Structured Output (JSON Schema)
40
+
41
+ ### Summary
42
+ The `@opencode-ai/sdk` supports `format: { type: "json_schema", schema, retryCount? }` for enforcing structured JSON output from the model. The model uses a `StructuredOutput` tool that retries on validation failure (default 2 retries). Results are accessible via `result.data.info.structured_output`.
43
+
44
+ ### Pros
45
+ - **Guaranteed structure**: Validated JSON matching a schema, eliminating parsing errors.
46
+ - **SDK-native**: No additional dependencies.
47
+ - **Retry mechanism**: `retryCount` handles transient format failures.
48
+
49
+ ### Cons
50
+ - **Model adherence varies**: We use 10 Ollama Cloud models with different JSON adherence rates. Retry overhead compounds at our scale (15 sub-agents).
51
+ - **Architecture mismatch**: Agent contracts are thin summaries; the rich data (decisions, trade-offs, research) is stored in memini-ai's PostgreSQL backend — already structured.
52
+ - **Schema maintenance burden**: 15 agents × 1 output schema each = 15 schemas to define, version, and update as agents evolve.
53
+ - **Added latency**: Each retry is an additional round-trip to the model. At 2 retries × 60s avg, worst-case adds 2 minutes per agent call.
54
+ - **Markdown convention works**: Our current "## Architectural Plan:" header-based parsing is human-readable and sufficient for orchestrator dispatch.
55
+
56
+ ### Recommendation: **SKIP (revisit Q3 2026)**
57
+
58
+ The cost-benefit doesn't justify structured output given our architecture. Agent outputs are thin signals; structured data lives in memini-ai. Revisit when Ollama Cloud models have more consistent JSON adherence or when OpenCode adds provider-level structured output enforcement.
59
+
60
+ ### Effort Estimate
61
+ **0 hours now**. If revisited: ~8-10 hours for 15 schemas + validation + retry tuning.
62
+
63
+ ---
64
+
65
+ ## 3. Dynamic MCP Registration (POST /mcp)
66
+
67
+ ### Summary
68
+ OpenCode server exposes `POST /mcp` to dynamically register MCP servers at runtime, accepting `{ name, config }` with the same schema as static `opencode.json` MCP entries. `GET /mcp` returns status for all registered servers.
69
+
70
+ ### Pros
71
+ - **Runtime flexibility**: Could register/unregister MCP servers based on task type.
72
+ - **Health-check integration**: Could auto-restart failed MCP servers.
73
+ - **Auto-detection**: Could probe for `uvx` path and auto-configure `memini-ai-dev`.
74
+
75
+ ### Cons
76
+ - **No current need**: memini-ai-dev is statically configured and working. All 7 MCP servers are stable.
77
+ - **uvx path is stable**: The `uvx --from memini-ai-dev memini-ai --stdio` command hasn't changed. Auto-detection solves a non-problem.
78
+ - **Adds complexity**: Dynamic registration means managing server lifecycle, reconnection logic, and state synchronization — all for servers that never change.
79
+ - **Static config is simpler**: The `opencode.json` approach is declarative, auditable, and version-controlled.
80
+ - **If boomerang-queue goes MCP**: Static config is still the right approach — add it to opencode.json, not register at runtime.
81
+
82
+ ### Recommendation: **SKIP**
83
+
84
+ No current use case justifies dynamic registration. Static config provides audit trail, version control, and simplicity. The one defensible use case (health-check-driven restart) is a separate concern from registration and would require a health-check plugin, not the `POST /mcp` endpoint.
85
+
86
+ ### Effort Estimate
87
+ **0 hours**. If a use case emerges: ~3-4 hours for registration logic + tests.
88
+
89
+ ---
90
+
91
+ ## Decision Summary
92
+
93
+ | Feature | Recommendation | Effort | Rationale |
94
+ |---------|---------------|--------|-----------|
95
+ | Plugin Hooks | IMPLEMENT (selectively) | 4-6h | Direct value: compaction context preservation + routing enforcement |
96
+ | Structured Output | SKIP | 0h | Architecture mismatch; rich data already in memini-ai |
97
+ | Dynamic MCP | SKIP | 0h | No use case; static config is simpler and auditable |
98
+
99
+ ### Priority Order
100
+ 1. Implement `experimental.session.compacting` hook (context preservation)
101
+ 2. Implement `tool.execute.before` hook (routing validation)
102
+ 3. Implement `tool.execute.after` hook (audit logging)
103
+ 4. Revisit structured output when Ollama Cloud JSON adherence improves
104
+ 5. Keep dynamic MCP on watchlist for health-check integration
@@ -0,0 +1,27 @@
1
+ import js from '@eslint/js';
2
+ import tseslint from 'typescript-eslint';
3
+
4
+ export default tseslint.config(
5
+ js.configs.recommended,
6
+ ...tseslint.configs.recommended,
7
+ {
8
+ files: ['src/**/*.ts'],
9
+ languageOptions: {
10
+ parser: tseslint.parser,
11
+ parserOptions: {
12
+ projectService: true,
13
+ },
14
+ },
15
+ rules: {
16
+ 'no-console': 'warn',
17
+ 'no-unused-vars': 'off',
18
+ '@typescript-eslint/no-unused-vars': [
19
+ 'error',
20
+ { argsIgnorePattern: '^_', varsIgnorePattern: '^_' },
21
+ ],
22
+ },
23
+ },
24
+ {
25
+ ignores: ['dist/', 'node_modules/', 'coverage/'],
26
+ }
27
+ );
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@veedubin/boomerang-v3",
3
- "version": "0.3.0",
3
+ "version": "0.3.2",
4
4
  "description": "Multi-agent orchestration plugin for OpenCode with memini-ai memory",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -25,7 +25,7 @@
25
25
  "typecheck": "tsc --noEmit",
26
26
  "test": "vitest run",
27
27
  "test:watch": "vitest",
28
- "lint": "eslint src --ext .ts"
28
+ "lint": "eslint src"
29
29
  },
30
30
  "dependencies": {
31
31
  "@modelcontextprotocol/sdk": "^1.0.0"
@@ -35,6 +35,7 @@
35
35
  "@types/node": "^22.0.0",
36
36
  "eslint": "^10.4.0",
37
37
  "typescript": "^5.7.0",
38
+ "typescript-eslint": "^8.30.0",
38
39
  "vitest": "^3.0.0"
39
40
  },
40
41
  "engines": {
@@ -3,6 +3,7 @@
3
3
  */
4
4
 
5
5
  import type { RetryOptions, RetryResult } from '../types.js';
6
+ import { TimeoutError } from '../types.js';
6
7
 
7
8
  function sleep(ms: number): Promise<void> {
8
9
  return new Promise((resolve) => setTimeout(resolve, ms));
@@ -15,7 +16,9 @@ function calculateDelay(attempt: number, baseDelayMs: number, maxDelayMs: number
15
16
  return Math.floor(capped + jitter);
16
17
  }
17
18
 
18
- const DEFAULT_IS_RETRYABLE = (): boolean => true;
19
+ const DEFAULT_IS_RETRYABLE = (error: Error): boolean => {
20
+ return !(error instanceof TimeoutError);
21
+ };
19
22
 
20
23
  export async function executeWithRetry<T>(
21
24
  fn: () => Promise<T>,
@@ -34,6 +34,7 @@ import type {
34
34
  ConcurrencyConfig,
35
35
  SlotUsage,
36
36
  } from './types.js';
37
+ import { TimeoutError } from './types.js';
37
38
  import {
38
39
  TaskLimiter,
39
40
  executeWithRetry,
@@ -126,6 +127,7 @@ export class BoomerangOrchestrator {
126
127
  maxRetries: this.config.maxRetries,
127
128
  baseDelayMs: this.config.retryBaseDelayMs,
128
129
  maxDelayMs: this.config.retryMaxDelayMs,
130
+ isRetryable: (err) => !(err instanceof TimeoutError),
129
131
  }
130
132
  );
131
133
  return retryResult;