PM and engineering loop
An engineer agent handed a vague request builds the literal words and calls it
done. A PM agent handed a backlog writes wishes no one can build. The value is
in the friction between them: the PM states the problem and the acceptance bar,
the engineers push back on cost, and scope gets negotiated in the open before a
line is written. Without the loop, the mismatch surfaces in review three weeks
late.
Team
- PM agent (
product-manager-role): owns the problem, the metric, the
acceptance criteria.
- Engineer agents (
backend-engineer-role, frontend-engineer-role):
build, and push back on cost.
- Acceptance agent (
qa-engineer-role): checks the build against criteria,
no self-grading.
Shape: a negotiation loop, then build, then an acceptance gate.
Method
- PM writes the spec first.
spec.md states the problem, one success
metric and its guardrail, non-goals, and acceptance criteria as checkable
statements ("a signed-out user hitting /app lands on login in under 300ms").
A criterion you cannot check is a wish.
- Engineers return a pushback memo. Before building, they flag the
expensive 20 percent, name feasibility risks, and propose a cheaper path. An
agent that silently complies hides the tradeoff instead of surfacing it.
- Negotiate scope in the open. The PM cuts to a real v1 and records
deferred items with reasons in a "later" list. Deferral is a decision on
the record, not a dropped ball.
- Freeze the criteria. Lock the acceptance list before code; later changes
go to a dated change log in
spec.md, so "done" does not move while the work
is in flight.
- Engineers build and demo against the list. The handoff is a working
increment plus a demo note mapping each criterion to how it is met.
- Acceptance agent runs the gate. Pass or fail per criterion in
acceptance.md, executed by an agent that did not write the code. Failures
loop back to the engineers, not the PM.
- PM signs off on outcome, not effort. Accept only when criteria pass and
the increment plausibly moves the named metric; record the call.
Run it
In Claude Code, run the PM and each engineer as subagents sharing spec.md; the
orchestrator sequences write, pushback, negotiate, build, then spawns a fresh
acceptance subagent so the grader is not the builder, looping on failures. Port
it to CrewAI as a sequential process with a re-run on failed acceptance, to
AutoGen as a two-agent chat plus a critic, or to LangGraph as a graph with a
conditional edge from acceptance back to the build node.
Signals it works
- The pushback memo changes the spec at least sometimes; pure compliance means
the PM is unchallenged.
- Acceptance is run by a different agent than the one that built the feature.
- Deferred scope lives in a written "later" list, not in someone's memory.
Boundaries
This owns the loop from request to accepted increment, not architecture, which
staff-engineer weighs in on, nor the roadmap above it. The success metric and
guardrail come from real product context you supply; agents cannot invent them.
A human approves anything that ships to users or spends real budget.
1---2name: agent-pm-eng-loop3description: Pair a product-manager agent with engineer agents through spec, pushback, scope negotiation, and acceptance so the build matches intent. Use when an agent team must turn a fuzzy request into a shipped, accepted increment.4---56# PM and engineering loop78An engineer agent handed a vague request builds the literal words and calls it9done. A PM agent handed a backlog writes wishes no one can build. The value is10in the friction between them: the PM states the problem and the acceptance bar,11the engineers push back on cost, and scope gets negotiated in the open before a12line is written. Without the loop, the mismatch surfaces in review three weeks13late.1415## Team1617- **PM agent** (`product-manager-role`): owns the problem, the metric, the18 acceptance criteria.19- **Engineer agents** (`backend-engineer-role`, `frontend-engineer-role`):20 build, and push back on cost.21- **Acceptance agent** (`qa-engineer-role`): checks the build against criteria,22 no self-grading.2324Shape: a negotiation loop, then build, then an acceptance gate.2526## Method27281. **PM writes the spec first.** `spec.md` states the problem, one success29 metric and its guardrail, non-goals, and acceptance criteria as checkable30 statements ("a signed-out user hitting /app lands on login in under 300ms").31 A criterion you cannot check is a wish.322. **Engineers return a pushback memo.** Before building, they flag the33 expensive 20 percent, name feasibility risks, and propose a cheaper path. An34 agent that silently complies hides the tradeoff instead of surfacing it.353. **Negotiate scope in the open.** The PM cuts to a real v1 and records36 deferred items with reasons in a "later" list. Deferral is a decision on37 the record, not a dropped ball.384. **Freeze the criteria.** Lock the acceptance list before code; later changes39 go to a dated change log in `spec.md`, so "done" does not move while the work40 is in flight.415. **Engineers build and demo against the list.** The handoff is a working42 increment plus a demo note mapping each criterion to how it is met.436. **Acceptance agent runs the gate.** Pass or fail per criterion in44 `acceptance.md`, executed by an agent that did not write the code. Failures45 loop back to the engineers, not the PM.467. **PM signs off on outcome, not effort.** Accept only when criteria pass and47 the increment plausibly moves the named metric; record the call.4849## Run it5051In Claude Code, run the PM and each engineer as subagents sharing `spec.md`; the52orchestrator sequences write, pushback, negotiate, build, then spawns a fresh53acceptance subagent so the grader is not the builder, looping on failures. Port54it to CrewAI as a sequential process with a re-run on failed acceptance, to55AutoGen as a two-agent chat plus a critic, or to LangGraph as a graph with a56conditional edge from acceptance back to the build node.5758## Signals it works5960- The pushback memo changes the spec at least sometimes; pure compliance means61 the PM is unchallenged.62- Acceptance is run by a different agent than the one that built the feature.63- Deferred scope lives in a written "later" list, not in someone's memory.6465## Boundaries6667This owns the loop from request to accepted increment, not architecture, which68`staff-engineer` weighs in on, nor the roadmap above it. The success metric and69guardrail come from real product context you supply; agents cannot invent them.70A human approves anything that ships to users or spends real budget.