What to build
The Reviewer Agent — every PR, human-authored or Agent-authored, gets an automated review by default.
This is HITL because review tone, format, and what counts as "worth flagging" are product-defining. A Reviewer Agent that's noisy or annoying actively damages the wedge.
agent-orchestrator consumes pr.opened events. For each event, the Reviewer Agent runs against the PR diff and posts comments back to platform-api.
ReviewerAgent is implemented as a deep module: (diff, context) → []ReviewComment. Pure over its inputs once a ModelClient is injected.
- Comments support inline anchoring (
{file, line, side}) when the model can identify a precise location, otherwise a top-level comment.
- All Reviewer Agent comments are clearly attributed (author =
forge-reviewer, special UI badge).
- Review focus at MVP: correctness regressions, obvious security issues (e.g., shell injection, leaking secrets), and ambiguity that suggests the change is incomplete. Not style nitpicks.
Decisions to nail in this slice
- Review prompt strategy and what the Reviewer is told not to comment on.
- Comment volume cap (e.g., max N comments per PR) to avoid spam.
- Behavior when the diff is too large to fit in context.
Acceptance criteria
Blocked by
What to build
The Reviewer Agent — every PR, human-authored or Agent-authored, gets an automated review by default.
This is HITL because review tone, format, and what counts as "worth flagging" are product-defining. A Reviewer Agent that's noisy or annoying actively damages the wedge.
agent-orchestratorconsumespr.openedevents. For each event, the Reviewer Agent runs against the PR diff and posts comments back toplatform-api.ReviewerAgentis implemented as a deep module:(diff, context) → []ReviewComment. Pure over its inputs once aModelClientis injected.{file, line, side}) when the model can identify a precise location, otherwise a top-level comment.forge-reviewer, special UI badge).Decisions to nail in this slice
Acceptance criteria
ReviewerAgenthas tests against fixed diffs with a recorded-responseModelClient, asserting comment shape (not exact wording).Blocked by