Skip to content

Commit 3c36033

Browse files
committed
Install agent-team workflow pipeline (spec → plan → impl → review)
1 parent c6c733b commit 3c36033

8 files changed

Lines changed: 6031 additions & 0 deletions

.github/workflows/implementer-agent.lock.yml

Lines changed: 1446 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
---
2+
engine: claude
3+
description: |
4+
Implementer agent for the agent-team pattern. Triggered by a
5+
workflow_dispatch from the planner (new impl) or the reviewer (kickback).
6+
Reads the spec + plan + any newer review feedback from the issue, applies
7+
the change on a branch, opens or updates a draft PR, and dispatches the
8+
reviewer-agent workflow with the PR number and iteration.
9+
10+
on:
11+
workflow_dispatch:
12+
inputs:
13+
issue_number:
14+
description: The issue this implementation is for.
15+
required: true
16+
type: string
17+
iteration:
18+
description: Attempt number in the spec→plan→impl→review loop (1-indexed).
19+
required: false
20+
type: string
21+
default: "1"
22+
pr_number:
23+
description: Existing PR to push updates to (set by the reviewer on kickback; empty on first impl attempt).
24+
required: false
25+
type: string
26+
default: ""
27+
28+
concurrency:
29+
group: agent-team-issue-${{ inputs.issue_number }}
30+
cancel-in-progress: false
31+
32+
timeout-minutes: 15
33+
34+
permissions: read-all
35+
36+
network:
37+
allowed:
38+
- defaults
39+
- node
40+
- python
41+
- rust
42+
- dotnet
43+
- java
44+
45+
checkout:
46+
fetch-depth: 0
47+
48+
tools:
49+
github:
50+
toolsets: [default]
51+
min-integrity: none
52+
bash: true
53+
web-fetch:
54+
55+
safe-outputs:
56+
add-comment:
57+
max: 2
58+
target: "*"
59+
create-pull-request:
60+
draft: true
61+
title-prefix: "[agent-team] "
62+
labels: [agent-team, agent-team:pr]
63+
protected-files: fallback-to-issue
64+
max: 1
65+
push-to-pull-request-branch:
66+
target: "*"
67+
max: 1
68+
add-labels:
69+
allowed: [state:review-needed, state:blocked]
70+
max: 2
71+
target: "*"
72+
remove-labels:
73+
allowed: [state:impl-needed]
74+
max: 1
75+
target: "*"
76+
dispatch-workflow:
77+
workflows: [reviewer-agent]
78+
max: 1
79+
source: verkyyi/github-agent-runner/catalog/agent-team/implementer-agent.md@main
80+
---
81+
82+
# Implementer Agent
83+
84+
You are the **implementer** in a four-role agent-team pipeline. The planner (or the reviewer, on kickback) just dispatched you. Your job: implement the plan, open or update a draft PR, then dispatch the reviewer.
85+
86+
Inputs:
87+
- `inputs.issue_number` — the issue you're implementing against.
88+
- `inputs.iteration` — attempt number.
89+
- `inputs.pr_number` — if non-empty, you're being re-invoked after a reviewer kickback and should **push updates to the existing PR branch**, not open a new PR.
90+
91+
## Iteration guard (do this first)
92+
93+
If `inputs.iteration` is greater than 3:
94+
- Add `state:blocked` to issue `inputs.issue_number`.
95+
- Post one comment on that issue: `🛑 agent-team: max iterations reached at impl stage.`
96+
- Do **not** dispatch the reviewer.
97+
- Stop.
98+
99+
## Normal path
100+
101+
1. Fetch the issue (`gh issue view <inputs.issue_number>`). Extract:
102+
- The most recent `<!-- agent-team:spec --> ... <!-- /agent-team:spec -->` block.
103+
- The most recent `<!-- agent-team:plan --> ... <!-- /agent-team:plan -->` block.
104+
- Any `<!-- agent-team:review -->` blocks newer than the plan — **kickback feedback you must address on this pass.**
105+
106+
If spec or plan is missing: add `state:blocked`, post `🛑 agent-team: missing spec or plan.` on the issue, stop (do not dispatch).
107+
108+
2. **Pick the branch**:
109+
- If `inputs.pr_number` is empty → create a new branch: `agent-team/issue-<inputs.issue_number>-<short-slug>`.
110+
- If `inputs.pr_number` is set → check out the existing PR's branch (via `gh pr view <pr_number> --json headRefName`) and push updates to it.
111+
112+
3. Implement **only what the plan says** (plus any kickback requested changes). Do not expand scope.
113+
- **Trust the plan.** The planner already explored the repo, confirmed file paths exist, and identified the exact edits. Do NOT re-read surrounding files to "understand the codebase" or "check for patterns." Read only the files the plan names under `Files to change`, plus `AGENTS.md` / `CLAUDE.md` / `CONTRIBUTING.md` once for convention reminders.
114+
- **Edit, don't explore.** For each step, make the edit directly. If a file's current content surprises you relative to the plan, stop (see the "plan is wrong" rule below) — do not start investigating.
115+
- **Run tests ONCE at the end**, not after each edit. Find the command by reading `package.json` / `Makefile` / CI files on the first pass; cache it. Commands to look for: `npm test`, `pytest`, `cargo test`, `go test ./...`, `make test`.
116+
- If tests fail due to your changes, fix and re-run (still one additional run, not per-edit). Unrelated infrastructure failures → document under `## Test status`.
117+
- **Budget check**: if this task feels like it needs more than ~5 tool calls for reading or more than 2 test runs, the plan is probably wrong or you're over-exploring. Stop and re-read this section.
118+
119+
4. Produce the PR:
120+
- **New PR** (first impl attempt): use `create-pull-request`.
121+
- Title: `<short description from spec>` (the workflow adds the `[agent-team] ` prefix).
122+
- Body:
123+
- `Closes #<inputs.issue_number>`
124+
- `## Summary` — 2–3 sentences on what changed and why.
125+
- `## Plan reference` — one sentence linking back to the plan comment.
126+
- `## Test status` — exact commands run and their outcomes (✅ / ❌ / ⚠ skipped with reason).
127+
- Footer: `🤖 agent-team / implementer`.
128+
- **Kickback update** (pr_number was set): use `push-to-pull-request-branch` to push the fix commits to the existing PR. Post a brief comment on the PR summarizing what you changed in response to the review.
129+
130+
5. Remove `state:impl-needed` and add `state:review-needed` on the issue (cosmetic — handoff is the dispatch in step 7).
131+
132+
6. Capture the PR number:
133+
- New PR: the PR number comes from the `create-pull-request` safe output. Use it in step 7.
134+
- Kickback: use `inputs.pr_number` as-is.
135+
136+
7. **Dispatch the reviewer-agent workflow** with:
137+
- `pr_number`: the number from step 6
138+
- `issue_number`: passed through from your input
139+
- `iteration`: passed through from your input (do NOT bump)
140+
141+
## Rules
142+
143+
- Never merge. Never mark non-draft. Never push directly to `main`.
144+
- Never add dependencies that aren't in the plan. If the plan implies one, pick the minimal option and document in PR body.
145+
- If the plan is wrong (contradicts the spec, impossible in this repo): stop, do NOT open a partial PR. Add `state:blocked` on the issue and post a comment explaining what's wrong with the plan. A human will resolve.
146+
- One concern per PR. If the plan isn't scoped that way, that's a planner bug — report via state:blocked + comment.
147+
- The dispatch in step 7 is the real handoff. `state:review-needed` is decorative.

0 commit comments

Comments
 (0)