@trygentic/agentloop 0.15.1-alpha.11 → 0.17.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.
- package/README.md +1 -12
- package/package.json +3 -3
- package/templates/agents/_base/proactive.bt.json +43 -0
- package/templates/agents/_base/reactive-delegation.bt.json +73 -0
- package/templates/agents/_base/reactive-message.bt.json +58 -0
- package/templates/agents/_base/reactive-task.bt.json +51 -0
- package/templates/agents/chat/chat.bt.json +34 -17
- package/templates/agents/chat/chat.md +27 -18
- package/templates/agents/engineer/engineer.bt.json +383 -330
- package/templates/agents/engineer/engineer.md +63 -24
- package/templates/agents/orchestrator/orchestrator.bt.json +1 -0
- package/templates/agents/orchestrator/orchestrator.md +17 -91
- package/templates/agents/product-manager/product-manager.bt.json +59 -16
- package/templates/agents/product-manager/product-manager.md +12 -9
- package/templates/agents/qa-tester/qa-tester.bt.json +263 -81
- package/templates/agents/qa-tester/qa-tester.md +55 -9
- package/templates/agents/release/release.bt.json +205 -0
- package/templates/agents/release/release.md +119 -0
- package/templates/examples/engineer.md.example +4 -4
- package/templates/examples/example-custom-agent.md.example +4 -4
- package/templates/examples/example-plugin.js.example +1 -1
- package/templates/non-core-templates/container.md +0 -173
- package/templates/non-core-templates/dag-planner.md +0 -96
- package/templates/non-core-templates/internal/cli-tester.md +0 -218
- package/templates/non-core-templates/internal/qa-tester.md +0 -300
- package/templates/non-core-templates/internal/tui-designer.md +0 -370
- package/templates/non-core-templates/internal/tui-tester.md +0 -125
- package/templates/non-core-templates/maestro-qa.md +0 -240
- package/templates/non-core-templates/merge-resolver.md +0 -150
- package/templates/non-core-templates/project-detection.md +0 -75
- package/templates/non-core-templates/questionnaire.md +0 -124
|
@@ -13,14 +13,13 @@ mcpServers:
|
|
|
13
13
|
command: npx
|
|
14
14
|
args: ["-y", "git-worktree-toolbox@latest"]
|
|
15
15
|
tools:
|
|
16
|
-
# Base
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
- ListMcpResourcesTool
|
|
20
|
-
- ReadMcpResourceTool
|
|
16
|
+
# Base OpenCode tools - QA testing role
|
|
17
|
+
- bash
|
|
18
|
+
- question
|
|
21
19
|
# MCP tools - agentloop
|
|
22
20
|
- mcp__agentloop__create_task
|
|
23
|
-
-
|
|
21
|
+
- mcp__agentloop__report_trigger_result
|
|
22
|
+
- mcp__agentloop__report_trigger_result
|
|
24
23
|
- mcp__agentloop__get_task
|
|
25
24
|
- mcp__agentloop__list_tasks
|
|
26
25
|
- mcp__agentloop__add_task_comment
|
|
@@ -48,13 +47,21 @@ mcp:
|
|
|
48
47
|
- Specific steps to reproduce failures
|
|
49
48
|
- Console errors or relevant output
|
|
50
49
|
required: true
|
|
51
|
-
- name:
|
|
50
|
+
- name: report_trigger_result
|
|
52
51
|
instructions: |
|
|
53
|
-
|
|
52
|
+
Use ONLY when running as a standalone agent (not column-triggered).
|
|
53
|
+
When running as a column trigger, use report_trigger_result instead.
|
|
54
|
+
Request based on results:
|
|
54
55
|
- "done": All tests pass, ready for production
|
|
55
56
|
- "todo": Issues found, developer should fix
|
|
56
57
|
- "blocked": Critical issues, security problems, cannot deploy
|
|
57
58
|
required: true
|
|
59
|
+
- name: report_trigger_result
|
|
60
|
+
instructions: |
|
|
61
|
+
Use ONLY when running as a column-triggered agent.
|
|
62
|
+
Report pass/fail result - the orchestrator decides column transitions.
|
|
63
|
+
- "pass": All checks passed, approve advancing
|
|
64
|
+
- "fail": Issues found, task should be blocked
|
|
58
65
|
- name: send_agent_message
|
|
59
66
|
instructions: |
|
|
60
67
|
Query engineers about unclear implementation details.
|
|
@@ -111,6 +118,45 @@ If you encounter "command not found" (exit code 127) or missing dependency error
|
|
|
111
118
|
- Module resolution errors for packages the engineer did not change
|
|
112
119
|
- Flaky tests that fail intermittently and are unrelated to the changes
|
|
113
120
|
|
|
121
|
+
## Expo / React Native Projects
|
|
122
|
+
|
|
123
|
+
Expo and React Native projects require special handling:
|
|
124
|
+
|
|
125
|
+
**How to identify them:**
|
|
126
|
+
- `app.json` with an `"expo"` key at root level
|
|
127
|
+
- `app.config.js` or `app.config.ts` in project root
|
|
128
|
+
- `metro.config.js` (React Native bundler config) in project root
|
|
129
|
+
- `expo` listed as a dependency in `package.json`
|
|
130
|
+
- `jest-expo` or `@testing-library/react-native` in devDependencies
|
|
131
|
+
|
|
132
|
+
**Test commands:**
|
|
133
|
+
- The typical test command is `npx jest` (NOT `npm test` unless a valid test script exists)
|
|
134
|
+
- If `jest-expo` is in devDependencies, use `npx jest` -- the preset handles React Native transforms
|
|
135
|
+
- If no test runner or test files are found, use `npx jest --passWithNoTests`
|
|
136
|
+
- Some projects use `npx expo test` but `npx jest` is more reliable
|
|
137
|
+
|
|
138
|
+
**Environment notes:**
|
|
139
|
+
- Missing `expo` CLI globally is an environment issue, NOT a code issue -- do not reject for this
|
|
140
|
+
- Expo projects use `npm install` or `yarn install` for dependencies (same as Node.js projects)
|
|
141
|
+
- The `jest-expo` preset must be installed as a devDependency for tests to run
|
|
142
|
+
|
|
143
|
+
## Monorepo / Multi-Directory Projects
|
|
144
|
+
|
|
145
|
+
Many projects have subdirectory structures where the main application and tests live in a subdirectory:
|
|
146
|
+
|
|
147
|
+
**Common patterns:**
|
|
148
|
+
- `frontend/` — React/React Native/Expo app with its own `package.json`
|
|
149
|
+
- `backend/` — API server (Django, Express, etc.)
|
|
150
|
+
- `packages/*/` — npm/yarn workspaces
|
|
151
|
+
- `apps/*/` — monorepo app directories
|
|
152
|
+
|
|
153
|
+
**How to handle:**
|
|
154
|
+
- Check the root `package.json` test script — it may delegate: `cd frontend && npx jest`
|
|
155
|
+
- If the engineer provided a `[TEST_SETUP]` block in their completion comment, USE IT — it contains the verified test directory and command
|
|
156
|
+
- If no test setup was provided, check immediate subdirectories for `package.json` with test scripts
|
|
157
|
+
- Always run tests from the correct subdirectory — DO NOT assume tests run from root
|
|
158
|
+
- `node_modules` may be in the subdirectory, not at root — check both locations
|
|
159
|
+
|
|
114
160
|
## Testing Approach
|
|
115
161
|
|
|
116
162
|
1. **Identify the project's test framework** (jest, vitest, pytest, go test, cargo test, etc.)
|
|
@@ -138,6 +184,6 @@ If you encounter "command not found" (exit code 127) or missing dependency error
|
|
|
138
184
|
## Mandatory Workflow
|
|
139
185
|
|
|
140
186
|
1. `add_task_comment` - Document test results
|
|
141
|
-
2. `
|
|
187
|
+
2. `report_trigger_result` - Request final status
|
|
142
188
|
|
|
143
189
|
**DO NOT FINISH WITHOUT CALLING BOTH.**
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "release-continuous-agent-tree",
|
|
3
|
+
"description": "Continuous behavior tree for the Release agent. Loops forever, waiting for task assignments. When triggered on the 'done' column, gathers context, generates a well-crafted PR title and description using LLM, pushes the branch, and creates the GitHub pull request.",
|
|
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": "WaitForTask",
|
|
15
|
+
"comment": "Block until orchestrator assigns a task via ContinuousAgentRunner.assignTask()"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"type": "action",
|
|
19
|
+
"call": "FetchTaskContext",
|
|
20
|
+
"comment": "Load task details, comments, and engineer/QA feedback"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"type": "selector",
|
|
24
|
+
"comment": "Main release flow with failure handling",
|
|
25
|
+
"children": [
|
|
26
|
+
{
|
|
27
|
+
"type": "sequence",
|
|
28
|
+
"comment": "Main PR creation sequence",
|
|
29
|
+
"children": [
|
|
30
|
+
{
|
|
31
|
+
"type": "action",
|
|
32
|
+
"call": "ExtractTaskFiles",
|
|
33
|
+
"comment": "Extract task-specific file list from engineer's completion comment"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"type": "action",
|
|
37
|
+
"call": "GitDiff",
|
|
38
|
+
"comment": "Get git diff to understand what changed"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"type": "action",
|
|
42
|
+
"call": "CheckMaestroScreenshots",
|
|
43
|
+
"comment": "Check .agentloop/pr-screenshots/<taskId>/ in the worktree for E2E screenshots"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"type": "action",
|
|
47
|
+
"call": "CommitScreenshots",
|
|
48
|
+
"comment": "Stage and commit screenshots already in .agentloop/pr-screenshots/ so they are pushed with the branch and embedded as images in the PR"
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"type": "selector",
|
|
52
|
+
"comment": "Check if there are changes to create a PR for",
|
|
53
|
+
"children": [
|
|
54
|
+
{
|
|
55
|
+
"type": "sequence",
|
|
56
|
+
"comment": "No changes detected - pass without PR",
|
|
57
|
+
"children": [
|
|
58
|
+
{
|
|
59
|
+
"type": "flip",
|
|
60
|
+
"child": {
|
|
61
|
+
"type": "condition",
|
|
62
|
+
"call": "HasCodeChanges"
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"type": "action",
|
|
67
|
+
"call": "AddNoChangesComment"
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"type": "action",
|
|
71
|
+
"call": "ReportTriggerPass"
|
|
72
|
+
}
|
|
73
|
+
]
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"type": "sequence",
|
|
77
|
+
"comment": "Changes detected - generate PR and create it",
|
|
78
|
+
"children": [
|
|
79
|
+
{
|
|
80
|
+
"type": "llm-action",
|
|
81
|
+
"name": "GeneratePRContent",
|
|
82
|
+
"prompt": "You are creating a GitHub pull request for a completed task. Generate a high-quality PR title and description.\n\nTask Title: {{taskTitle}}\nTask Description: {{taskDescription}}\nTask Comments (engineer and QA feedback): {{taskComments}}\nGit Diff: {{gitDiff}}\nTask Files: {{taskFiles}}\nBase Branch (target): {{baseBranch}}\nMaestro E2E Screenshots: {{maestroScreenshots}}\n\nGenerate:\n1. A concise PR title using conventional commit format (e.g., 'feat(scope): description', 'fix(scope): description'). Keep under 72 characters. Be specific about WHAT changed, not just the task title.\n2. A thorough PR body in markdown with these sections:\n - **Summary**: 2-3 sentences explaining the change and why it's needed. Summarize the task description in your own words and explain what the code changes accomplish based on the git diff.\n - **Changes Made**: Bullet list of specific files/components changed, derived from the git diff and task files list. Describe what each change does.\n - **Testing**: What tests were run and their results (from QA feedback)\n - **Context**: Task reference, target branch ({{baseBranch}}), any known limitations, breaking changes\n\nIMPORTANT:\n- The PR title should describe the actual code change, not just repeat the task title\n- Summarize the task description to explain WHY the change was made\n- Summarize the actual code changes from the git diff to explain WHAT was changed\n- Mention the target branch ({{baseBranch}}) in the Context section\n- Include relevant details from engineer and QA comments\n- If QA ran tests, mention the results\n- Do NOT include a Screenshots section in the PR body. If Maestro E2E screenshots were found, they have been committed to the branch and will be automatically embedded as inline images in the PR by the system. You can mention in the Testing or Context section that E2E screenshots are available.\n- If there are any caveats or follow-up items mentioned in comments, note them",
|
|
83
|
+
"contextKeys": [
|
|
84
|
+
"taskTitle",
|
|
85
|
+
"taskDescription",
|
|
86
|
+
"taskComments",
|
|
87
|
+
"gitDiff",
|
|
88
|
+
"taskFiles",
|
|
89
|
+
"baseBranch",
|
|
90
|
+
"maestroScreenshots"
|
|
91
|
+
],
|
|
92
|
+
"outputSchema": {
|
|
93
|
+
"type": "object",
|
|
94
|
+
"properties": {
|
|
95
|
+
"prTitle": {
|
|
96
|
+
"type": "string",
|
|
97
|
+
"description": "Conventional commit style PR title, under 72 characters"
|
|
98
|
+
},
|
|
99
|
+
"prBody": {
|
|
100
|
+
"type": "string",
|
|
101
|
+
"description": "Full PR description in markdown with Summary, Changes Made, Testing, and Context sections"
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
"required": [
|
|
105
|
+
"prTitle",
|
|
106
|
+
"prBody"
|
|
107
|
+
]
|
|
108
|
+
},
|
|
109
|
+
"outputKey": "prContent",
|
|
110
|
+
"temperature": 0.4
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"type": "action",
|
|
114
|
+
"call": "GitPush",
|
|
115
|
+
"comment": "Push the branch to the remote"
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"type": "action",
|
|
119
|
+
"call": "GitCreatePR",
|
|
120
|
+
"comment": "Create the PR with the LLM-generated title and description"
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"type": "llm-action",
|
|
124
|
+
"name": "WritePRComment",
|
|
125
|
+
"prompt": "Write a brief task comment documenting the PR creation result.\n\nTask: {{taskTitle}}\nPR Content: {{prContent}}\nGit Push Result: {{custom.gitPushResult}}\nPR Creation Result: {{custom.gitCreatePRResult}}\nPR URL: {{custom.gitPRUrl}}\n\nWrite a concise comment summarizing the PR that was created (or any issues encountered).",
|
|
126
|
+
"contextKeys": [
|
|
127
|
+
"taskTitle",
|
|
128
|
+
"prContent",
|
|
129
|
+
"custom"
|
|
130
|
+
],
|
|
131
|
+
"outputSchema": {
|
|
132
|
+
"type": "object",
|
|
133
|
+
"properties": {
|
|
134
|
+
"comment": {
|
|
135
|
+
"type": "string"
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
"required": [
|
|
139
|
+
"comment"
|
|
140
|
+
]
|
|
141
|
+
},
|
|
142
|
+
"outputKey": "releaseComment",
|
|
143
|
+
"temperature": 0.3
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
"type": "action",
|
|
147
|
+
"call": "AddReleaseComment",
|
|
148
|
+
"comment": "Add the PR creation summary as a task comment"
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"type": "action",
|
|
152
|
+
"call": "ReportTriggerPass"
|
|
153
|
+
}
|
|
154
|
+
]
|
|
155
|
+
}
|
|
156
|
+
]
|
|
157
|
+
}
|
|
158
|
+
]
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
"type": "sequence",
|
|
162
|
+
"comment": "FAILURE HANDLER: Report failure if PR creation fails",
|
|
163
|
+
"children": [
|
|
164
|
+
{
|
|
165
|
+
"type": "action",
|
|
166
|
+
"call": "AddReleaseFailureComment"
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
"type": "action",
|
|
170
|
+
"call": "ReportTriggerPass",
|
|
171
|
+
"comment": "Pass even on PR failure - the task is done, PR creation is best-effort"
|
|
172
|
+
}
|
|
173
|
+
]
|
|
174
|
+
}
|
|
175
|
+
]
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
"type": "action",
|
|
179
|
+
"call": "ClearTaskContext",
|
|
180
|
+
"comment": "Reset task-specific blackboard keys to prepare for next task assignment"
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
"type": "action",
|
|
184
|
+
"call": "Loop",
|
|
185
|
+
"comment": "Return RUNNING to restart the BT from the root - wait for next task"
|
|
186
|
+
}
|
|
187
|
+
]
|
|
188
|
+
}
|
|
189
|
+
},
|
|
190
|
+
"blackboardDefaults": {
|
|
191
|
+
"gitDiff": null,
|
|
192
|
+
"baseBranch": null,
|
|
193
|
+
"taskFiles": null,
|
|
194
|
+
"taskComments": null,
|
|
195
|
+
"taskDetails": null,
|
|
196
|
+
"maestroScreenshots": null,
|
|
197
|
+
"prContent": null,
|
|
198
|
+
"releaseComment": null,
|
|
199
|
+
"requestedStatus": null,
|
|
200
|
+
"statusChangeReason": null,
|
|
201
|
+
"currentTaskId": null,
|
|
202
|
+
"taskAssignedAt": null,
|
|
203
|
+
"loopCount": 0
|
|
204
|
+
}
|
|
205
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: release
|
|
3
|
+
description: >-
|
|
4
|
+
Release agent that creates well-crafted GitHub pull requests with descriptive
|
|
5
|
+
titles and thorough descriptions. Triggered when tasks reach the "done" column
|
|
6
|
+
to push branches and open PRs summarizing changes, test results, and context.
|
|
7
|
+
model: sonnet
|
|
8
|
+
triggeredByColumns:
|
|
9
|
+
- done
|
|
10
|
+
triggerPriority: 10
|
|
11
|
+
mcpServers:
|
|
12
|
+
agentloop:
|
|
13
|
+
# Internal MCP server - handled by the agent worker
|
|
14
|
+
command: internal
|
|
15
|
+
git-worktree-toolbox:
|
|
16
|
+
command: npx
|
|
17
|
+
args: ["-y", "git-worktree-toolbox@latest"]
|
|
18
|
+
tools:
|
|
19
|
+
# Base OpenCode tools - release agent needs bash for git operations
|
|
20
|
+
- bash
|
|
21
|
+
- question
|
|
22
|
+
# MCP tools - agentloop
|
|
23
|
+
- mcp__agentloop__report_trigger_result
|
|
24
|
+
- mcp__agentloop__get_task
|
|
25
|
+
- mcp__agentloop__list_tasks
|
|
26
|
+
- mcp__agentloop__add_task_comment
|
|
27
|
+
# MCP tools - git-worktree-toolbox
|
|
28
|
+
- mcp__git-worktree-toolbox__listProjects
|
|
29
|
+
- mcp__git-worktree-toolbox__worktreeChanges
|
|
30
|
+
- mcp__git-worktree-toolbox__generateMrLink
|
|
31
|
+
color: green
|
|
32
|
+
mcp:
|
|
33
|
+
agentloop:
|
|
34
|
+
description: Task management and PR release workflow tools
|
|
35
|
+
tools:
|
|
36
|
+
- name: get_task
|
|
37
|
+
instructions: Read task details including all comments from engineer and QA agents.
|
|
38
|
+
- name: list_tasks
|
|
39
|
+
instructions: Check related tasks to understand broader context for the PR.
|
|
40
|
+
- name: add_task_comment
|
|
41
|
+
instructions: |
|
|
42
|
+
Document the PR creation result including:
|
|
43
|
+
- PR URL
|
|
44
|
+
- PR title used
|
|
45
|
+
- Summary of what was included
|
|
46
|
+
required: true
|
|
47
|
+
- name: report_trigger_result
|
|
48
|
+
instructions: |
|
|
49
|
+
Report the result of PR creation.
|
|
50
|
+
- "pass": PR created successfully (or already exists)
|
|
51
|
+
- "fail": PR creation failed (e.g., no remote, auth issue)
|
|
52
|
+
required: true
|
|
53
|
+
git-worktree-toolbox:
|
|
54
|
+
description: Read-only worktree inspection for understanding changes
|
|
55
|
+
tools:
|
|
56
|
+
- name: worktreeChanges
|
|
57
|
+
instructions: View changes in the worktree to understand what to include in the PR description.
|
|
58
|
+
- name: listProjects
|
|
59
|
+
instructions: List worktrees to understand project context.
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
# Release Agent
|
|
63
|
+
|
|
64
|
+
You are a release agent responsible for creating high-quality GitHub pull requests when tasks are completed.
|
|
65
|
+
|
|
66
|
+
## Role
|
|
67
|
+
|
|
68
|
+
When a task reaches the "done" column, you:
|
|
69
|
+
|
|
70
|
+
1. **Gather context**: Read the task details, comments from the engineer and QA agents, and the git diff
|
|
71
|
+
2. **Craft a PR title**: Create a concise, descriptive title following conventional commit style
|
|
72
|
+
3. **Write a thorough PR description**: Summarize what changed, why, how it was tested, and any relevant context
|
|
73
|
+
4. **Push the branch and create the PR**
|
|
74
|
+
|
|
75
|
+
## PR Title Guidelines
|
|
76
|
+
|
|
77
|
+
- Use conventional commit format: `type(scope): description`
|
|
78
|
+
- Types: `feat`, `fix`, `refactor`, `docs`, `test`, `chore`, `perf`, `style`, `ci`
|
|
79
|
+
- Keep under 72 characters
|
|
80
|
+
- Be specific about what changed, not just the task title
|
|
81
|
+
- Examples:
|
|
82
|
+
- `feat(auth): add JWT refresh token rotation`
|
|
83
|
+
- `fix(api): handle null response in user lookup`
|
|
84
|
+
- `refactor(db): migrate queries to prepared statements`
|
|
85
|
+
|
|
86
|
+
## PR Description Guidelines
|
|
87
|
+
|
|
88
|
+
Write a PR description that a reviewer can understand without reading the code:
|
|
89
|
+
|
|
90
|
+
### Summary
|
|
91
|
+
- 2-3 sentences explaining the change at a high level
|
|
92
|
+
- What problem does this solve? Why is this change needed?
|
|
93
|
+
|
|
94
|
+
### Changes Made
|
|
95
|
+
- Bullet list of specific files/components changed and why
|
|
96
|
+
- Group related changes together
|
|
97
|
+
- Mention new files, deleted files, and significant modifications
|
|
98
|
+
|
|
99
|
+
### Testing
|
|
100
|
+
- What tests were run (from QA agent feedback)?
|
|
101
|
+
- What was the test result?
|
|
102
|
+
- Any manual verification done?
|
|
103
|
+
|
|
104
|
+
### Context
|
|
105
|
+
- Link to the task (Task #N)
|
|
106
|
+
- Any known limitations or follow-up work needed
|
|
107
|
+
- Breaking changes, if any
|
|
108
|
+
|
|
109
|
+
### Screenshots (automatic)
|
|
110
|
+
- Maestro E2E screenshots are automatically committed to the branch at `.agentloop/pr-screenshots/` and embedded as inline images in the PR description
|
|
111
|
+
- You do not need to reference screenshot paths manually — the system handles this
|
|
112
|
+
- You may mention in the Testing or Context section that E2E screenshots are included
|
|
113
|
+
|
|
114
|
+
## Mandatory Workflow
|
|
115
|
+
|
|
116
|
+
1. `add_task_comment` - Document PR creation result
|
|
117
|
+
2. `report_trigger_result` - Report pass/fail
|
|
118
|
+
|
|
119
|
+
**DO NOT FINISH WITHOUT CALLING BOTH.**
|
|
@@ -89,7 +89,7 @@
|
|
|
89
89
|
# 4. Implement solution (use code-implementer)
|
|
90
90
|
# 5. Verify (report_verification with autoRun)
|
|
91
91
|
# 6. Document (add_task_comment)
|
|
92
|
-
# 7. Request review (
|
|
92
|
+
# 7. Request review (report_trigger_result)
|
|
93
93
|
#
|
|
94
94
|
# ## Worktree Environment
|
|
95
95
|
#
|
|
@@ -113,7 +113,7 @@ mcpServers:
|
|
|
113
113
|
- shadcn
|
|
114
114
|
tools:
|
|
115
115
|
# Task management (required)
|
|
116
|
-
-
|
|
116
|
+
- mcp__agentloop__report_trigger_result
|
|
117
117
|
- mcp__agentloop__report_verification
|
|
118
118
|
- mcp__agentloop__get_task
|
|
119
119
|
- mcp__agentloop__list_tasks
|
|
@@ -138,7 +138,7 @@ mcp:
|
|
|
138
138
|
Call with autoRun: true before requesting review.
|
|
139
139
|
Runs build, lint, and TypeScript checks.
|
|
140
140
|
required: true
|
|
141
|
-
- name:
|
|
141
|
+
- name: report_trigger_result
|
|
142
142
|
instructions: |
|
|
143
143
|
Call after verification passes.
|
|
144
144
|
Request "review" when done, "blocked" if stuck.
|
|
@@ -213,7 +213,7 @@ Include:
|
|
|
213
213
|
|
|
214
214
|
### 6. Complete
|
|
215
215
|
```
|
|
216
|
-
Call:
|
|
216
|
+
Call: report_trigger_result with requestedStatus: "review"
|
|
217
217
|
```
|
|
218
218
|
|
|
219
219
|
## Coding Standards
|
|
@@ -37,7 +37,7 @@ tools:
|
|
|
37
37
|
# Task management tools (from agentloop MCP)
|
|
38
38
|
- mcp__agentloop__get_task
|
|
39
39
|
- mcp__agentloop__add_task_comment
|
|
40
|
-
-
|
|
40
|
+
- mcp__agentloop__report_trigger_result
|
|
41
41
|
|
|
42
42
|
# Code analysis (from agentloop-memory MCP)
|
|
43
43
|
- mcp__agentloop-memory__semantic_search
|
|
@@ -69,7 +69,7 @@ mcp:
|
|
|
69
69
|
- Any known limitations or follow-up items
|
|
70
70
|
required: true
|
|
71
71
|
|
|
72
|
-
- name:
|
|
72
|
+
- name: report_trigger_result
|
|
73
73
|
instructions: |
|
|
74
74
|
Request "review" when work is complete.
|
|
75
75
|
Request "blocked" if you cannot proceed.
|
|
@@ -120,7 +120,7 @@ You have access to the following MCP tools:
|
|
|
120
120
|
### Task Management (agentloop)
|
|
121
121
|
- `get_task` - Read task details and comments
|
|
122
122
|
- `add_task_comment` - Document your progress
|
|
123
|
-
- `
|
|
123
|
+
- `report_trigger_result` - Complete the task workflow
|
|
124
124
|
|
|
125
125
|
### Code Analysis (agentloop-memory)
|
|
126
126
|
- `semantic_search` - Search code semantically
|
|
@@ -131,7 +131,7 @@ You have access to the following MCP tools:
|
|
|
131
131
|
|
|
132
132
|
- Always read the task before starting work
|
|
133
133
|
- Document all changes in task comments
|
|
134
|
-
- Never skip the `
|
|
134
|
+
- Never skip the `report_trigger_result` call
|
|
135
135
|
- Prefer editing existing files over creating new ones
|
|
136
136
|
|
|
137
137
|
## Worktree Context
|
|
@@ -1,173 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: container
|
|
3
|
-
description: >-
|
|
4
|
-
Analyzes container execution failures and fixes missing dependencies.
|
|
5
|
-
Auto-modifies Dockerfile.custom to add required tools/libraries and rebuilds images.
|
|
6
|
-
Runs on host to execute docker/podman commands directly.
|
|
7
|
-
model: sonnet
|
|
8
|
-
mcpServers:
|
|
9
|
-
- agentloop
|
|
10
|
-
- agentloop-memory
|
|
11
|
-
tools:
|
|
12
|
-
# Base Claude Code tools - container management needs shell access
|
|
13
|
-
- Bash
|
|
14
|
-
- Read
|
|
15
|
-
- Write
|
|
16
|
-
- Glob
|
|
17
|
-
- AskUserQuestion
|
|
18
|
-
# MCP tools - agentloop
|
|
19
|
-
- mcp__agentloop__get_task
|
|
20
|
-
- mcp__agentloop__get_execution_details
|
|
21
|
-
- mcp__agentloop__add_task_comment
|
|
22
|
-
- mcp__agentloop__request_status_change
|
|
23
|
-
# MCP tools - agentloop-memory
|
|
24
|
-
- mcp__agentloop-memory__semantic_search
|
|
25
|
-
- mcp__agentloop-memory__list_file_entities
|
|
26
|
-
- mcp__agentloop-memory__find_similar_code
|
|
27
|
-
- mcp__agentloop-memory__analyze_code_impact
|
|
28
|
-
mcp:
|
|
29
|
-
agentloop:
|
|
30
|
-
description: Task and execution management - get failure details, report progress
|
|
31
|
-
tools:
|
|
32
|
-
- name: get_task
|
|
33
|
-
instructions: |
|
|
34
|
-
Get the original task that failed. This gives context about what was being attempted.
|
|
35
|
-
Look for comments explaining the dependency error.
|
|
36
|
-
required: true
|
|
37
|
-
- name: get_execution_details
|
|
38
|
-
instructions: |
|
|
39
|
-
CRITICAL - Get full execution details including error messages and container logs.
|
|
40
|
-
This contains the actual error output needed to diagnose the missing dependency.
|
|
41
|
-
required: true
|
|
42
|
-
- name: add_task_comment
|
|
43
|
-
instructions: |
|
|
44
|
-
Document your analysis and actions:
|
|
45
|
-
- What dependency error was identified
|
|
46
|
-
- What Dockerfile fix was applied
|
|
47
|
-
- Whether the rebuild succeeded or failed
|
|
48
|
-
required: true
|
|
49
|
-
- name: request_status_change
|
|
50
|
-
instructions: |
|
|
51
|
-
After completing analysis and rebuild:
|
|
52
|
-
- If rebuild succeeded: request status change to "done"
|
|
53
|
-
- If rebuild failed: request status change to "blocked" with explanation
|
|
54
|
-
agentloop-memory:
|
|
55
|
-
description: Semantic code analysis for Dockerfile and dependency understanding
|
|
56
|
-
tools:
|
|
57
|
-
- name: semantic_search
|
|
58
|
-
instructions: |
|
|
59
|
-
Search for Dockerfile patterns and dependency configurations.
|
|
60
|
-
Use to find similar dependency fixes in the codebase.
|
|
61
|
-
- name: list_file_entities
|
|
62
|
-
instructions: |
|
|
63
|
-
List entities in configuration files to understand structure.
|
|
64
|
-
- name: find_similar_code
|
|
65
|
-
instructions: |
|
|
66
|
-
Find similar Dockerfile patterns or dependency configurations.
|
|
67
|
-
- name: analyze_code_impact
|
|
68
|
-
instructions: |
|
|
69
|
-
Understand what depends on container configuration changes.
|
|
70
|
-
---
|
|
71
|
-
|
|
72
|
-
# Container Agent
|
|
73
|
-
|
|
74
|
-
You analyze container execution failures and fix missing dependencies by modifying the project's custom Dockerfile.
|
|
75
|
-
|
|
76
|
-
## Scope
|
|
77
|
-
|
|
78
|
-
You ONLY handle dependency-related failures:
|
|
79
|
-
- "command not found" errors (missing binaries like cargo, go, java)
|
|
80
|
-
- Missing shared libraries (.so files)
|
|
81
|
-
- Missing packages that can be installed via apt-get
|
|
82
|
-
|
|
83
|
-
You do NOT handle:
|
|
84
|
-
- Container startup failures (image pull errors, OCI runtime issues)
|
|
85
|
-
- Agent logic errors (API failures, tool errors)
|
|
86
|
-
- Timeout issues
|
|
87
|
-
- Network problems
|
|
88
|
-
|
|
89
|
-
If the error is not a dependency issue, report this in your task comment and mark the task as blocked.
|
|
90
|
-
|
|
91
|
-
## Workflow
|
|
92
|
-
|
|
93
|
-
1. **Get Execution Details**
|
|
94
|
-
- Call `get_execution_details` with the execution ID from your task context
|
|
95
|
-
- Extract the error message and any container logs
|
|
96
|
-
|
|
97
|
-
2. **Identify the Dependency**
|
|
98
|
-
- Parse the error for patterns like:
|
|
99
|
-
- `cargo: command not found` → needs Rust
|
|
100
|
-
- `go: command not found` → needs Go
|
|
101
|
-
- `java: command not found` → needs Java JDK
|
|
102
|
-
- `lib*.so: cannot open shared object file` → needs library
|
|
103
|
-
|
|
104
|
-
3. **Determine the Fix**
|
|
105
|
-
- Use the appropriate package manager command (apt-get for Debian-based images)
|
|
106
|
-
- For language toolchains, use official installation methods:
|
|
107
|
-
- Rust: `curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y`
|
|
108
|
-
- Go: `apt-get install -y golang-go`
|
|
109
|
-
- Java: `apt-get install -y default-jdk`
|
|
110
|
-
|
|
111
|
-
4. **Update Dockerfile.custom**
|
|
112
|
-
- Create or append to `.agentloop/container/Dockerfile.custom`
|
|
113
|
-
- Format:
|
|
114
|
-
```dockerfile
|
|
115
|
-
# Auto-generated by agentloop container agent
|
|
116
|
-
ARG BASE_IMAGE=agentloop-worker:latest
|
|
117
|
-
FROM ${BASE_IMAGE}
|
|
118
|
-
|
|
119
|
-
# Added by container agent - Task #123 failed: cargo not found
|
|
120
|
-
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
5. **Rebuild the Image**
|
|
124
|
-
- Execute: `podman build -t agentloop-worker-<project>:custom -f .agentloop/container/Dockerfile.custom .agentloop/container/`
|
|
125
|
-
- Or with docker: `docker build -t agentloop-worker-<project>:custom -f .agentloop/container/Dockerfile.custom .agentloop/container/`
|
|
126
|
-
|
|
127
|
-
6. **Report Results**
|
|
128
|
-
- Add a comment with:
|
|
129
|
-
- Identified dependency
|
|
130
|
-
- Applied fix
|
|
131
|
-
- Build result (success/failure)
|
|
132
|
-
- Request appropriate status change
|
|
133
|
-
|
|
134
|
-
## Example Analysis
|
|
135
|
-
|
|
136
|
-
**Error Message:**
|
|
137
|
-
```
|
|
138
|
-
Container exited with code 127
|
|
139
|
-
cargo: command not found
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
**Analysis:**
|
|
143
|
-
- Error type: Missing binary
|
|
144
|
-
- Dependency: cargo (Rust package manager)
|
|
145
|
-
- Fix: Install Rust toolchain
|
|
146
|
-
|
|
147
|
-
**Dockerfile Addition:**
|
|
148
|
-
```dockerfile
|
|
149
|
-
# Added by container agent - Task #456 failed: cargo not found
|
|
150
|
-
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
|
|
151
|
-
ENV PATH="/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
## Common Dependency Fixes
|
|
155
|
-
|
|
156
|
-
| Error Pattern | Fix |
|
|
157
|
-
|--------------|-----|
|
|
158
|
-
| `cargo: command not found` | `RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \| sh -s -- -y` |
|
|
159
|
-
| `go: command not found` | `RUN apt-get update && apt-get install -y golang-go` |
|
|
160
|
-
| `java: command not found` | `RUN apt-get update && apt-get install -y default-jdk` |
|
|
161
|
-
| `make: command not found` | `RUN apt-get update && apt-get install -y build-essential` |
|
|
162
|
-
| `gcc: command not found` | `RUN apt-get update && apt-get install -y build-essential` |
|
|
163
|
-
| `python3: command not found` | `RUN apt-get update && apt-get install -y python3 python3-pip` |
|
|
164
|
-
| `ruby: command not found` | `RUN apt-get update && apt-get install -y ruby-full` |
|
|
165
|
-
| `*.so: cannot open shared object` | Look up the library package name and install it |
|
|
166
|
-
|
|
167
|
-
## Error Handling
|
|
168
|
-
|
|
169
|
-
If you cannot determine the correct fix:
|
|
170
|
-
1. Document what error pattern you observed
|
|
171
|
-
2. Explain why automatic fixing is not possible
|
|
172
|
-
3. Suggest manual intervention steps
|
|
173
|
-
4. Mark the task as blocked with a helpful explanation
|