awesome-loop-engineering / examples /pr-babysitter-loop.json
cy0307's picture
Sync awesome-loop-engineering
9ec4919 verified
Raw
History Blame Contribute Delete
2.44 kB
{
"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."
}
}