@trygentic/agentloop 0.16.0-alpha.11 → 0.18.0-alpha.11

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 (36) hide show
  1. package/README.md +1 -12
  2. package/package.json +3 -3
  3. package/templates/agents/_base/proactive.bt.json +43 -0
  4. package/templates/agents/_base/reactive-delegation.bt.json +73 -0
  5. package/templates/agents/_base/reactive-message.bt.json +58 -0
  6. package/templates/agents/_base/reactive-task.bt.json +51 -0
  7. package/templates/agents/chat/chat.bt.json +70 -20
  8. package/templates/agents/chat/chat.md +36 -19
  9. package/templates/agents/engineer/engineer.bt.json +951 -346
  10. package/templates/agents/engineer/engineer.md +86 -33
  11. package/templates/agents/merge-resolver/merge-resolver.bt.json +217 -0
  12. package/templates/agents/merge-resolver/merge-resolver.md +297 -0
  13. package/templates/agents/orchestrator/orchestrator.bt.json +1 -0
  14. package/templates/agents/orchestrator/orchestrator.md +17 -92
  15. package/templates/agents/product-manager/product-manager.bt.json +215 -25
  16. package/templates/agents/product-manager/product-manager.md +86 -13
  17. package/templates/agents/qa-tester/qa-tester.bt.json +299 -88
  18. package/templates/agents/qa-tester/qa-tester.md +59 -12
  19. package/templates/agents/release/release.bt.json +219 -0
  20. package/templates/agents/release/release.md +164 -0
  21. package/templates/examples/engineer.md.example +4 -4
  22. package/templates/examples/example-custom-agent.md.example +4 -4
  23. package/templates/examples/example-plugin.js.example +1 -1
  24. package/templates/plugins/qa-e2e-maestro/qa-e2e-maestro.bt.json +1191 -0
  25. package/templates/plugins/qa-e2e-maestro/qa-e2e-maestro.md +923 -0
  26. package/templates/plugins/qa-e2e-scenario/qa-e2e-scenario.md +85 -0
  27. package/templates/non-core-templates/container.md +0 -173
  28. package/templates/non-core-templates/dag-planner.md +0 -96
  29. package/templates/non-core-templates/internal/cli-tester.md +0 -218
  30. package/templates/non-core-templates/internal/qa-tester.md +0 -300
  31. package/templates/non-core-templates/internal/tui-designer.md +0 -370
  32. package/templates/non-core-templates/internal/tui-tester.md +0 -125
  33. package/templates/non-core-templates/maestro-qa.md +0 -240
  34. package/templates/non-core-templates/merge-resolver.md +0 -150
  35. package/templates/non-core-templates/project-detection.md +0 -75
  36. package/templates/non-core-templates/questionnaire.md +0 -124
@@ -5,7 +5,7 @@ description: >-
5
5
  Performs all analysis, implementation, and file editing in a single session.
6
6
  Requests status changes through orchestrator - does not directly modify task state.
7
7
  Can communicate with other agents via messaging to coordinate parallel work.
8
- model: opus
8
+ instanceCount: 5
9
9
  mcpServers:
10
10
  agentloop-memory:
11
11
  # Internal MCP server - binary path resolved by the agent worker via findMemoryBinaryPath()
@@ -21,28 +21,26 @@ mcpServers:
21
21
  command: npx
22
22
  args: ["-y", "git-worktree-toolbox@latest"]
23
23
  tools:
24
- # Base Claude Code tools
25
- - Read
26
- - Edit
27
- - Write
28
- - Bash
29
- - Glob
30
- - Grep
31
- - WebFetch
32
- - WebSearch
33
- - NotebookEdit
34
- - KillShell
35
- - AskUserQuestion
36
- - Skill
37
- - EnterPlanMode
38
- - ExitPlanMode
24
+ # Base OpenCode tools
25
+ - read
26
+ - edit
27
+ - write
28
+ - bash
29
+ - glob
30
+ - grep
31
+ - webfetch
32
+ - websearch
33
+ - question
34
+ - skill
35
+ - plan_enter
36
+ - plan_exit
39
37
  # MCP tools
40
- # NOTE: request_status_change and report_verification are intentionally EXCLUDED
38
+ # NOTE: report_trigger_result and report_verification are intentionally EXCLUDED
41
39
  # from the subagent tool list. These workflow transitions are handled by dedicated
42
- # BT action nodes (RequestStatusChange, ReportVerification) that execute AFTER
43
- # implementation is complete. Including them here causes the LLM subagent to call
44
- # them prematurely during ImplementIncrementally/ImplementDirectly, moving the task
45
- # to "review" before the BT's own post-implementation nodes can run.
40
+ # BT action nodes (ReportVerification, ReportTriggerPass/ReportTriggerFail) that
41
+ # execute AFTER implementation is complete. Including them here causes the LLM
42
+ # subagent to call them prematurely during ImplementIncrementally/ImplementDirectly,
43
+ # moving the task to "review" before the BT's own post-implementation nodes can run.
46
44
  - mcp__agentloop__get_task
47
45
  - mcp__agentloop__list_tasks
48
46
  - mcp__agentloop__add_task_comment
@@ -110,10 +108,11 @@ mcp:
110
108
  - Tasks with similar descriptions or bug reports
111
109
  - Tasks in same feature area
112
110
  required: true
113
- # NOTE: report_verification and request_status_change are NOT listed here.
111
+ # NOTE: report_verification and report_trigger_result are NOT listed here.
114
112
  # They are handled by dedicated BT action nodes (ReportVerification,
115
- # RequestStatusChange) that run after implementation completes. The LLM
116
- # subagent should focus on implementation, not workflow transitions.
113
+ # ReportTriggerPass/ReportTriggerFail) that run after implementation
114
+ # completes. The LLM subagent should focus on implementation, not
115
+ # workflow transitions.
117
116
  - name: add_task_comment
118
117
  instructions: |
119
118
  Document implementation details before requesting review.
@@ -235,6 +234,27 @@ Every implementation MUST include tests. This is non-negotiable.
235
234
  - Place tests near the code they test (e.g., `src/utils/__tests__/helper.test.ts`)
236
235
  - Match existing test file naming: if the project uses `.test.ts`, use that; if it uses `.spec.ts`, use that
237
236
 
237
+ ## Test Configuration Best Practices
238
+
239
+ Tests run in non-interactive CI-like environments where there is no terminal for interactive mode. Watch mode will hang until timeout.
240
+
241
+ **Vitest:**
242
+ - When creating `vitest.config.ts` or `vitest.config.js`, always disable watch mode:
243
+ ```ts
244
+ export default defineConfig({ test: { watch: false } })
245
+ ```
246
+ - When writing `package.json` test scripts, always use the `run` subcommand: `"test": "vitest run"` (NOT `"test": "vitest"`)
247
+ - Never use bare `vitest` in scripts -- it defaults to watch mode
248
+
249
+ **Jest:**
250
+ - When writing `package.json` test scripts, prefer `"test": "jest"` (Jest does not watch by default in CI)
251
+ - Never add `--watch` or `--watchAll` flags to test scripts
252
+
253
+ **General rules:**
254
+ - Never configure any test runner to use watch mode by default
255
+ - Always ensure test commands will exit after running (non-zero exit on failure, zero on success)
256
+ - If a project's existing test script uses watch mode, fix it by adding the appropriate flag (`--run` for vitest, `--watchAll=false` for jest)
257
+
238
258
  ## Expo / React Native Projects
239
259
 
240
260
  When working on Expo or React Native projects:
@@ -272,9 +292,17 @@ When fixing bugs or addressing QA feedback, understand the ROOT CAUSE before imp
272
292
  3. Analyze root cause (read code, understand patterns)
273
293
  4. Implement solution (write code directly)
274
294
  5. Verify (report_verification with autoRun)
275
- 6. Stage and commit changes (git add + git commit with meaningful message)
295
+ 6. **MANDATORY Commit and push ALL changes:**
296
+ a. `git status` — check for any unstaged/untracked files
297
+ b. `git add -A` — stage everything
298
+ c. `git commit -m "feat: descriptive message"` — commit with conventional message
299
+ d. `git push` — push to remote branch
300
+ e. `git status` — verify working tree is clean (nothing to commit)
301
+ **Do NOT proceed to step 7 until git status shows a clean working tree.**
276
302
  7. Document (add_task_comment)
277
- 8. Request review (request_status_change)
303
+ 8. Report result:
304
+ - **If column-triggered**: BT uses `report_trigger_result` with "pass" or "fail"
305
+ - **If standalone**: BT uses `report_trigger_result` to move to review
278
306
 
279
307
  ## Code Search (MANDATORY)
280
308
 
@@ -289,12 +317,37 @@ Only fall back to Grep/Glob if semantic search fails after 2-3 attempts.
289
317
  **STEP 2: Analyze Impact**
290
318
  Before modifying any existing code, use `mcp__agentloop-memory__analyze_code_impact` to understand dependencies.
291
319
 
292
- ## Git Workflow
320
+ ## Git Workflow — MANDATORY Commit and Push Before Finishing
321
+
322
+ **THIS IS NON-NEGOTIABLE.** Before you report completion, add a task comment, or signal that
323
+ your work is done, you MUST ensure every change is committed and pushed. Unstaged or uncommitted
324
+ changes in a worktree are invisible to QA and will be lost when the worktree is cleaned up.
325
+
326
+ ### Pre-Completion Git Checklist (MUST DO — every single time)
327
+
328
+ 1. **Run `git status`** to check for ANY unstaged, staged-but-uncommitted, or untracked files.
329
+ 2. **Stage ALL changes**: `git add -A` (this catches new files, modifications, AND deletions).
330
+ 3. **Commit with a descriptive message**: `git commit -m "feat: <what you did>"` using conventional commit style.
331
+ 4. **Push to the remote branch**: `git push` (the worktree branch is already tracking a remote branch).
332
+ 5. **Verify**: Run `git status` one more time and confirm it says `nothing to commit, working tree clean`.
333
+
334
+ If `git status` after your push shows ANY modified or untracked files, you are NOT done. Repeat
335
+ steps 2-5 until the working tree is completely clean.
336
+
337
+ ### Why This Matters
338
+
339
+ - QA relies on `git diff main...HEAD` and pushed commits to review your changes
340
+ - Unpushed commits are invisible to QA agents running in separate worktrees
341
+ - Uncommitted changes are lost when worktrees are pruned
342
+ - The orchestrator checks pushed state to determine task completion
343
+ - **If you skip this step, your entire implementation is effectively lost**
344
+
345
+ ### Common Mistakes to Avoid
293
346
 
294
- After completing implementation, always commit your changes so QA can see them:
295
- - The behavior tree automatically ensures a git repo exists (runs `git init` if needed)
296
- - Changes are staged with `git add` and committed with a conventional commit message
297
- - QA relies on `git diff HEAD~1` to see what you changed, so committed changes are essential
347
+ - Do NOT assume the behavior tree will commit for you always commit explicitly yourself
348
+ - Do NOT forget new files `git add -A` catches them, but `git add .` in a subdirectory may miss files outside that directory. Always use `git add -A` from the repo root
349
+ - Do NOT skip the push a local commit without a push is invisible to other agents and QA
350
+ - Do NOT finish your work and then add the task comment before committing commit and push FIRST, comment SECOND
298
351
 
299
352
  ## Worktree Environment
300
353
 
@@ -304,9 +357,9 @@ worktree automatically on a dedicated feature branch (e.g., `task/{taskId}-{titl
304
357
  **Key points about your worktree:**
305
358
  - Your working directory is isolated from the main repo and other parallel agents
306
359
  - Each agent works in its own worktree on a separate branch, preventing conflicts
307
- - The behavior tree handles git operations: staging changes, committing, and pushing
360
+ - YOU are responsible for committing and pushing do not rely on the behavior tree to do it for you
308
361
  - You can use `git status` and `git diff` to inspect your changes
309
- - Do NOT checkout other branches or create new ones - stay on your assigned branch
362
+ - Do NOT checkout other branches or create new ones stay on your assigned branch
310
363
 
311
364
  ## Dev Server Port
312
365
 
@@ -0,0 +1,217 @@
1
+ {
2
+ "name": "merge-resolver-continuous-agent-tree",
3
+ "description": "Continuous behavior tree for the merge-resolver agent. Handles subproject merge completion and pre-existing bug coordination. Waits for agent messages or task assignments, routes to the appropriate handler, and loops.",
4
+ "version": "1.0.0",
5
+ "mode": "reactive",
6
+ "tree": {
7
+ "type": "root",
8
+ "child": {
9
+ "type": "sequence",
10
+ "comment": "Main continuous loop - never exits unless agent is stopped",
11
+ "children": [
12
+ {
13
+ "type": "action",
14
+ "call": "WaitForAgentMessage",
15
+ "comment": "Block until a merge request or coordination message arrives via agent-to-agent messaging (primary) or orchestrator task assignment (fallback). Sets taskTitle, taskDescription, and isAgentMessage on blackboard."
16
+ },
17
+ {
18
+ "type": "action",
19
+ "call": "FetchTaskContext",
20
+ "comment": "Load task details if a real DB task was assigned, or use the request data already on the blackboard"
21
+ },
22
+ {
23
+ "type": "selector",
24
+ "comment": "Route to appropriate handler based on message type: pre-existing bug coordination or subproject merge",
25
+ "children": [
26
+ {
27
+ "type": "sequence",
28
+ "comment": "Handle pre-existing bug coordination - create fix task, add dependency, reorganize DAG",
29
+ "children": [
30
+ {
31
+ "type": "condition",
32
+ "call": "IsPreExistingBugMessage",
33
+ "comment": "Check if this is a pre-existing bug escalation from an engineer or QA agent"
34
+ },
35
+ {
36
+ "type": "llm-action",
37
+ "name": "HandlePreExistingBug",
38
+ "prompt": "You are a merge-resolver agent handling a pre-existing bug escalation. An agent has reported that a pre-existing bug is blocking their task. You need to coordinate the fix.\n\n## Context\nTask Title: {{taskTitle}}\nTask Description: {{taskDescription}}\nTask Comments: {{taskComments}}\nAgent Message: {{custom.agentMessageContent}}\nSender: {{custom.agentMessageSender}}\n\n## Your Workflow\n\n### Turn 1 - Pause Subproject & Gather Context\nCall ALL of these tools in a SINGLE response:\n1. `mcp__agentloop__pause_subproject` with reason: \"Reorganizing DAG for pre-existing bug fix\" and timeoutSeconds: 120\n2. `mcp__agentloop__get_task` - Get the blocked task details (extract the task ID from the message content)\n3. `mcp__agentloop__list_tasks` with `limit: 100` - Check if a fix task already exists for this bug\n\nLook through existing tasks for any that mention the same file, error, or bug. If a fix task already exists, skip to adding the dependency.\n\n### Turn 2 - Create Fix Task (if needed)\nIf no existing fix task was found, call `mcp__agentloop__create_task` with:\n- title: \"fix: <concise bug description from the message>\"\n- description: Include the affected file path, error message, reproduction steps, and which task(s) are blocked. Mention this is a pre-existing bug unrelated to the blocked task's work.\n- priority: \"high\"\n- tags: [\"bug-fix\", \"pre-existing\"]\n- If the blocked task belongs to a subproject, use the same subprojectId\n\nSave the returned task ID.\n\n### Turn 3 - Add Dependencies & Reorganize DAG\nCall ALL of these tools in a SINGLE response:\n1. `mcp__agentloop__add_task_dependency` - Make the blocked task depend on the fix task (dependentTaskId = blocked task, prerequisiteTaskId = fix task)\n2. `mcp__agentloop__update_task_status` - Move the blocked task back to \"todo\" so it will be re-queued after the fix\n3. `mcp__agentloop__add_task_comment` - Add a comment to the blocked task explaining the pre-existing bug and the fix task\n\n### Turn 4 - Resume Subproject, Validate & Notify\nCall ALL of these tools in a SINGLE response:\n1. `mcp__agentloop__resume_subproject` - ALWAYS resume the subproject, even if previous steps failed\n2. `mcp__agentloop__validate_dag` - Ensure no cycles after dependency changes\n3. `mcp__agentloop__respond_to_message` - Reply to the originating agent acknowledging the bug report and explaining what was done\n4. `mcp__agentloop__broadcast_message` - Notify all agents about the pre-existing bug fix being queued\n\n**CRITICAL: You MUST call `mcp__agentloop__resume_subproject` even if earlier steps failed. Failing to resume will leave the subproject permanently paused and block all future task scheduling.**\n\n## Important Rules\n- If a fix task already exists, just add the dependency - do NOT create a duplicate\n- Always validate the DAG after adding dependencies\n- Always respond to the sender so they know their report was handled\n- Use precise error details from the message in the fix task description\n- Set priority to \"high\" so the fix runs soon\n- ALWAYS batch independent tool calls into the SAME response to minimize turns\n- ALWAYS resume the subproject when done, regardless of success or failure",
39
+ "contextKeys": ["taskTitle", "taskDescription", "taskComments", "custom"],
40
+ "subagent": "merge-resolver",
41
+ "allowedTools": [
42
+ "mcp__agentloop__pause_subproject",
43
+ "mcp__agentloop__resume_subproject",
44
+ "mcp__agentloop__get_task",
45
+ "mcp__agentloop__list_tasks",
46
+ "mcp__agentloop__create_task",
47
+ "mcp__agentloop__add_task_dependency",
48
+ "mcp__agentloop__update_task_status",
49
+ "mcp__agentloop__add_task_comment",
50
+ "mcp__agentloop__validate_dag",
51
+ "mcp__agentloop__respond_to_message",
52
+ "mcp__agentloop__broadcast_message"
53
+ ],
54
+ "outputSchema": {
55
+ "type": "object",
56
+ "properties": {
57
+ "bugDescription": {
58
+ "type": "string",
59
+ "description": "Brief description of the pre-existing bug"
60
+ },
61
+ "affectedFile": {
62
+ "type": "string",
63
+ "description": "Primary file affected by the bug"
64
+ },
65
+ "blockedTaskId": {
66
+ "type": "number",
67
+ "description": "ID of the task blocked by the bug"
68
+ },
69
+ "fixTaskId": {
70
+ "type": "number",
71
+ "description": "ID of the created or existing fix task"
72
+ },
73
+ "fixTaskCreated": {
74
+ "type": "boolean",
75
+ "description": "Whether a new fix task was created (false if reusing existing)"
76
+ },
77
+ "dagValidated": {
78
+ "type": "boolean",
79
+ "description": "Whether DAG validation passed after changes"
80
+ },
81
+ "summary": {
82
+ "type": "string",
83
+ "description": "Summary of actions taken"
84
+ }
85
+ },
86
+ "required": ["bugDescription", "blockedTaskId", "fixTaskId", "summary"]
87
+ },
88
+ "outputKey": "bugFixResult",
89
+ "temperature": 0.3
90
+ }
91
+ ]
92
+ },
93
+ {
94
+ "type": "sequence",
95
+ "comment": "Handle subproject merge completion - merge all worktree branches, resolve conflicts, run tests, create PR",
96
+ "children": [
97
+ {
98
+ "type": "llm-action",
99
+ "name": "MergeSubprojectBranches",
100
+ "prompt": "You are a merge-resolver agent. Your job is to merge all completed task branches from a subproject into a single merge branch, resolve any conflicts, validate the result, and create a pull request.\n\n## Context\nTask Title: {{taskTitle}}\nTask Description: {{taskDescription}}\nTask Comments: {{taskComments}}\n\n## Your Workflow\n\n### Turn 1 - Pause Subproject & Gather Branch Information\nCall ALL of these tools in a SINGLE response:\n1. `mcp__agentloop__pause_subproject` with reason: \"Merging worktree branches\" and timeoutSeconds: 300\n2. `mcp__agentloop__list_tasks` with `limit: 100` - Find all tasks related to this subproject/merge request\n3. `mcp__git-worktree-toolbox__listProjects` - List all worktrees and their branches\n4. `mcp__git-worktree-toolbox__doctorWorktrees` - Check worktree health before merging\n\nFrom the results, identify:\n- Which tasks are completed (status: done)\n- Which branches correspond to those tasks\n- The order to merge them (by DAG level if available, otherwise by task ID)\n\n### Turn 2 - Inspect Changes in Each Branch\nCall `mcp__git-worktree-toolbox__worktreeChanges` for EACH branch in a SINGLE response (parallel calls).\nThis shows you what files each branch modified so you can anticipate conflicts.\n\n### Turn 3 - Use The Prepared Merge-Resolver Worktree\nYou are already running inside a dedicated merge-resolver git worktree on a fresh merge-resolver branch.\nDo NOT create or reuse branches from the project root. Stay inside the provided worktree and only operate there.\n\nUse `bash` to confirm the worktree state before merging:\n\n```bash\ngit fetch origin\ngit rev-parse --abbrev-ref HEAD\ngit status --short --branch\n```\n\nThen for each branch (in DAG-level order, lowest first):\n1. Try: `git merge <branch-name> --no-edit`\n2. If merge succeeds, continue to the next branch\n3. If merge conflicts:\n a. Use `bash` to run `git diff --name-only --diff-filter=U` to list conflicting files\n b. Use `read` to examine each conflicting file\n c. Use `edit` to resolve the conflict by choosing the correct content:\n - For imports: merge both import lists, remove duplicates\n - For adjacent additions: keep both in logical order\n - For same-function changes: carefully merge preserving both modifications\n - For config files: merge entries, use higher versions for version conflicts\n d. After resolving all files: `git add . && git merge --continue --no-edit`\n\n### Turn 4 - Validate Merged Code\nUse `bash` to run validation:\n```bash\n# Run tests if available\nif [ -f \"package.json\" ]; then\n npm test 2>&1 | tail -50 || true\nfi\n\n# Run linting if available \nif [ -f \"Makefile\" ] && grep -q \"^lint:\" Makefile; then\n make lint 2>&1 | tail -50 || true\nfi\n\n# Run type checking if TypeScript\nif [ -f \"tsconfig.json\" ]; then\n npx tsc --noEmit 2>&1 | tail -50 || true\nfi\n```\n\nIf tests/lint fail due to merge issues, fix them using `edit` and commit the fixes.\n\n### Turn 5 - Push Branch & Create PR\nUse `bash` to push:\n```bash\ngit push -u origin HEAD\n```\n\nThen call `mcp__git-worktree-toolbox__generateMrLink` to create the merge request/PR.\n\nAdd a task comment with:\n- PR URL\n- List of branches merged\n- Conflicts resolved (if any)\n- Test results\n\n### Turn 6 - Resume Subproject, Cleanup & Notify\nCall these tools in a SINGLE response:\n1. `mcp__agentloop__resume_subproject` - ALWAYS resume the subproject, even if merge failed\n2. `mcp__agentloop__add_task_comment` - Document the merge result\n3. `mcp__agentloop__broadcast_message` - Notify all agents that the subproject merge is complete\n\nOptionally call `mcp__git-worktree-toolbox__archiveWorktree` for each merged worktree.\n\n**CRITICAL: You MUST call `mcp__agentloop__resume_subproject` even if merge operations failed. Failing to resume will leave the subproject permanently paused and block all future task scheduling.**\n\n## Conflict Resolution Rules\n1. NEVER silently drop changes from any branch - every branch is QA-tested work\n2. When in doubt, keep both changes and add a comment explaining the merge decision\n3. For truly incompatible changes (same line, different intent), review task descriptions to understand which approach is correct\n4. Always test after resolving conflicts\n5. If you cannot resolve a conflict after careful analysis, document the conflict in detail and set the task to \"blocked\" for human review\n\n## Important\n- Batch independent tool calls into the SAME response to minimize turns\n- Document every conflict resolution decision\n- Always run tests after the merge to catch integration issues\n- Push the branch and create a PR even if there were conflicts that you resolved\n- ALWAYS resume the subproject when done, regardless of success or failure",
101
+ "contextKeys": ["taskTitle", "taskDescription", "taskComments"],
102
+ "subagent": "merge-resolver",
103
+ "maxTurns": 500,
104
+ "allowedTools": [
105
+ "Bash",
106
+ "Read",
107
+ "Edit",
108
+ "Write",
109
+ "Glob",
110
+ "Grep",
111
+ "mcp__agentloop__pause_subproject",
112
+ "mcp__agentloop__resume_subproject",
113
+ "mcp__agentloop__list_tasks",
114
+ "mcp__agentloop__add_task_comment",
115
+ "mcp__agentloop__broadcast_message",
116
+ "mcp__git-worktree-toolbox__listProjects",
117
+ "mcp__git-worktree-toolbox__doctorWorktrees",
118
+ "mcp__git-worktree-toolbox__worktreeChanges",
119
+ "mcp__git-worktree-toolbox__mergeRemoteWorktreeChangesIntoLocal",
120
+ "mcp__git-worktree-toolbox__generateMrLink",
121
+ "mcp__git-worktree-toolbox__archiveWorktree",
122
+ "mcp__git-worktree-toolbox__cleanWorktrees"
123
+ ],
124
+ "outputSchema": {
125
+ "type": "object",
126
+ "properties": {
127
+ "mergeBranch": {
128
+ "type": "string",
129
+ "description": "Name of the merge branch created"
130
+ },
131
+ "branchesMerged": {
132
+ "type": "array",
133
+ "items": { "type": "string" },
134
+ "description": "List of branches that were merged"
135
+ },
136
+ "conflictsFound": {
137
+ "type": "number",
138
+ "minimum": 0,
139
+ "description": "Integer count of merge conflicts encountered (never return an array or object here)"
140
+ },
141
+ "conflictsResolved": {
142
+ "type": "number",
143
+ "minimum": 0,
144
+ "description": "Integer count of conflicts successfully resolved"
145
+ },
146
+ "conflictFiles": {
147
+ "type": "array",
148
+ "items": { "type": "string" },
149
+ "description": "Files that had merge conflicts"
150
+ },
151
+ "testsPass": {
152
+ "type": "boolean",
153
+ "description": "Whether tests passed after merge"
154
+ },
155
+ "prUrl": {
156
+ "type": "string",
157
+ "description": "URL of the created pull request"
158
+ },
159
+ "summary": {
160
+ "type": "string",
161
+ "description": "Summary of the merge operation"
162
+ }
163
+ },
164
+ "required": ["branchesMerged", "conflictsFound", "summary"]
165
+ },
166
+ "outputKey": "mergeResult",
167
+ "temperature": 0.3
168
+ }
169
+ ]
170
+ }
171
+ ]
172
+ },
173
+ {
174
+ "type": "action",
175
+ "call": "AddCompletionComment",
176
+ "comment": "Add a completion comment summarizing the merge-resolver's work"
177
+ },
178
+ {
179
+ "type": "action",
180
+ "call": "ReportTriggerPass"
181
+ },
182
+ {
183
+ "type": "action",
184
+ "call": "ClearTaskContext",
185
+ "comment": "Reset task-specific blackboard keys to prepare for next merge request"
186
+ },
187
+ {
188
+ "type": "action",
189
+ "call": "Loop",
190
+ "comment": "Return to start - wait for next merge request or bug coordination message"
191
+ }
192
+ ]
193
+ }
194
+ },
195
+ "blackboardDefaults": {
196
+ "mergeResult": null,
197
+ "bugFixResult": null,
198
+ "taskComments": null,
199
+ "taskDetails": null,
200
+ "requestedStatus": "done",
201
+ "statusChangeReason": "Merge resolution complete",
202
+ "custom": {
203
+ "loopCount": 0,
204
+ "shouldLoop": false,
205
+ "continuousTaskId": null,
206
+ "currentTaskId": null,
207
+ "taskAssignedAt": null,
208
+ "agentMessageId": null,
209
+ "agentMessageContent": null,
210
+ "agentMessageSender": null,
211
+ "agentMessageType": null,
212
+ "isDirectRequest": false,
213
+ "isAgentMessage": false,
214
+ "isColumnTriggered": false
215
+ }
216
+ }
217
+ }