| { |
| "name": "PR babysitter", |
| "objective": "Keep one pull request moving toward merge readiness without repeatedly requiring a human to poll comments, CI, conflicts, and stale review threads.", |
| "trigger": { |
| "type": "scheduled", |
| "cadence_or_event": "Every 2 hours during working hours, and after requested changes or failed required checks." |
| }, |
| "intake": { |
| "sources": ["GitHub pull request", "review comments", "required checks", "mergeability state"], |
| "selection_rule": "Act only on explicit blockers: unresolved review comments, failed checks, merge conflicts, or stale reviewer state." |
| }, |
| "workspace": { |
| "isolation": "Dedicated branch or worktree based on the PR branch.", |
| "allowed_actions": ["Read PR metadata", "apply narrow fixes", "run relevant checks", "write a progress comment"], |
| "disallowed_actions": ["force push", "large refactor", "dependency upgrade", "secrets access", "production change"] |
| }, |
| "context": { |
| "required_files": ["AGENTS.md", "CONTRIBUTING.md"], |
| "runtime_sources": ["latest PR head SHA", "review threads", "CI logs"] |
| }, |
| "agents": [ |
| { |
| "role": "Explorer", |
| "responsibility": "Summarize blockers and identify the smallest actionable work item." |
| }, |
| { |
| "role": "Implementer", |
| "responsibility": "Patch only the explicit blocker in the isolated workspace." |
| }, |
| { |
| "role": "Reviewer", |
| "responsibility": "Check that the diff is narrow and review comments were addressed." |
| } |
| ], |
| "verification": { |
| "gates": ["required GitHub checks pass", "unresolved comments are answered or resolved", "diff is scoped to the blocker"], |
| "receipts": ["commands run", "check URLs", "changed files", "remaining blockers"] |
| }, |
| "state": { |
| "artifacts": ["PR progress comment", "local PROGRESS.md"], |
| "update_rule": "Record last checked SHA, blockers, attempted fixes, verification evidence, and next action after every run." |
| }, |
| "budget": { |
| "max_retries": 3, |
| "max_runtime_minutes": 60 |
| }, |
| "escalation": { |
| "conditions": ["architectural decision needed", "same failure repeats twice", "reviewer disagreement", "force push required"], |
| "destination": "PR comment tagging the human owner" |
| }, |
| "exit": { |
| "success": "PR is merge-ready or waiting only on human review.", |
| "stop_without_success": "Loop is blocked, budget is exhausted, or the next action requires human judgment." |
| } |
| } |
|
|