pr-review daemon is your repository’s review policy. Change it through normal pull requests, and keep each edit focused on one behavior you want to observe.
Start from the installed files
The reference daemon installs three files:DAEMON.mddefines when reviews run and the policy shared by every review.correctness.mdlooks for evidence-backed correctness problems.repository-guidance.mdchecks applicable repository instructions and durable local conventions.
references/lanes/*.md are review lanes. Files in nested directories are not selected as lanes. Other Markdown under references/ can provide supporting guidance without becoming a separate review perspective.
Start from the pr-review example in charlie-labs/daemons.
Choose where to make the change
Edit the smallest surface that owns the behavior:
Charlie owns collecting context, running the applicable lanes, and delivering the review. If one of those is not working, use Troubleshooting instead of adding execution instructions to your policy.
Change when reviews run
The referencewatch policy starts a review when:
- A non-draft pull request is opened.
- A draft pull request is marked ready for review.
CharlieHelpsis requested as a reviewer.- A pull request comment requests a review from
CharlieHelps.
watch controls cadence, while each lane’s applicability guidance controls whether that perspective participates after a review starts.
Require an explicit request
To disable automatic reviews:- Remove the conditions for opening a non-draft pull request and marking a draft ready.
- Keep the conditions for requesting
CharlieHelpsas a reviewer and requesting a review in a pull request comment.
Review every new commit
Add this condition towatch:
Leave the daemon’s role intact
watch is the normal cadence control. The reference purpose and routines define the daemon’s role; changing them changes or forks that role.
Do not add lane orchestration, package commands, retry behavior, idempotency rules, or publication instructions. Charlie owns those mechanics.
Keep this standalone line in the body of DAEMON.md exactly once:
Configure review-wide policy
UseDAEMON.md for decisions that must govern the whole review. The reference policy organizes those decisions into nine sections:
The headings are Markdown policy, not a fixed schema. Keep them when they make the policy easy to inspect, and change the content only when you want the corresponding behavior to change.
Exclusions and evidence
UseNever leave feedback about for a small number of genuine cross-lane vetoes. The reference policy excludes personal preferences without a concrete risk, pre-existing problems the pull request did not worsen, expected generated-artifact changes without material risk, and problems already explained by deterministic checks or another review.
Keep global exclusions narrow. A broad rule can hide a valid finding from every perspective. Put a concern-specific false-positive boundary in the relevant lane instead.
Findings and verification defines what a candidate must establish before Charlie publishes it. The reference policy requires:
- A concrete issue.
- A plausible trigger or supporting evidence.
- A material consequence.
- A clear required action.
🟠 non-blocking for findings that do not need to be addressed before merge. Keep the exact lane name so readers can trace the finding to its policy. The reference policy does not use numeric severity or confidence scores.
Review depth and artifact treatment
Review depth controls how much surrounding context Charlie should inspect. The reference policy reviews the diff plus enough callers, dependencies, tests, contracts, and repository guidance to establish the effect of the change.
Large pull requests do not lower the evidence bar or impose a finding cap. If size or another constraint materially narrows coverage, use the incomplete-review policy instead of lowering the standard.
Artifact treatment lets you set different expectations for different kinds of files. The reference policy:
- Fully reviews runtime code, configuration, schemas, migrations, infrastructure, CI, and dependency manifests.
- Reviews tests and fixtures for concrete verification gaps or contract conflicts, not speculative production findings.
- Reviews documentation, examples, renames, moves, deletions, and binaries when an applicable rule or concrete material risk exists.
- Ignores expected generated, vendored, snapshot, lock, and build-artifact changes unless the artifact itself creates a concrete material risk.
Review outcomes and incomplete reviews
The reference policy permitsCOMMENT only. When useful findings qualify, Charlie publishes them in one COMMENT review. When every applicable lane completes with no useful finding and no coverage limitation, Charlie leaves exactly one +1 reaction on the pull request body. He does not publish an empty review, summary, praise, or LGTM.
To keep that behavior explicit:
APPROVE or REQUEST_CHANGES. Define an observable threshold for each outcome and decide whether a clean review should produce an approval or retain the reference +1 behavior.
Incomplete reviews controls what happens when Charlie cannot finish every applicable part of a review. The reference policy still publishes independently supported findings and adds at most one concise limitation note. It publishes a limitation-only comment only when silence could reasonably look like a completed clean review.
Final review presentation
UseFinal review to control:
- Which eligible findings appear and in what order.
- Inline placement for precise changed-line concerns versus review-body placement for cross-file concerns.
- Tone and verbosity.
- When a suggested fix is useful.
- How overlapping findings should be consolidated.
Focused review requests
Review requests defines how Charlie treats a comment that asks him to focus on something specific. The reference policy lets the request focus attention for that review, but it cannot suppress applicable lanes or override trusted repository policy.
Rereviews
Rereviews defines how follow-up reviews treat the current pull request and earlier feedback. The reference policy:
- Considers the full current pull request while focusing on changes since the previous review and behavior those changes affect.
- Does not repeat findings that were resolved, dismissed with supporting evidence, or explicitly accepted by an authorized maintainer unless new evidence materially changes the risk.
- Avoids duplicating human or automated feedback unless Charlie adds a distinct consequence, requirement, or useful diagnosis.
- Corrects or retracts prior Charlie feedback when later evidence shows it was wrong.
Configure review lanes
Each direct Markdown file inreferences/lanes/ defines one independently understandable review perspective. Charlie inventories those lanes, selects the applicable ones using their authored applicability guidance, and applies the root policy to the resulting candidates.
The installed correctness and repository-guidance lanes are starting choices. You can edit, add, remove, or replace them.
Write one perspective per lane
A lane should answer:- When does this perspective apply?
- Which concrete concerns should it investigate?
- When is each concern reportable?
- What evidence must support a finding?
Do not report only when a realistic false-positive boundary remains after the report condition and evidence requirement:
Prefer conditions and evidence
Use narrow suppressions for recurring false positives. A universal veto usually hides legitimate findings along with the noise.
Decide which repository sources are authoritative
The reference repository-guidance lane uses these defaults:- Policy from the default branch governs the review.
- A more specific path instruction can strengthen a root rule, but does not silently weaken it.
- Code, tests, schemas, and neighboring files are evidence. They are not automatically policy.
- The pull request description and conversation provide context. They are not durable repository policy.
Narrow, add, or remove a lane
When a lane is noisy, make the smallest effective edit:- Narrow its applicability when the whole perspective runs unnecessarily.
- Tighten
Report whenwhen a concern fires without the condition that makes it harmful. - Strengthen
Evidencewhen findings are plausible but unsupported. - Add a narrow
Do not reportexample for one recurring safe case. - Remove a concern or lane when it no longer earns its review cost.
references/lanes/. Remove it by deleting that file through a normal pull request. There is no root lane registry to update, and each remaining lane should stay understandable on its own.
Control cost and scope
PR review cost is mainly shaped by cadence, lane count, lane applicability, and review depth. Large pull requests require more investigation, and a review still consumes work when no visible finding qualifies. Start by reducing unnecessary reviews and making applicability more precise. Remove or narrow lanes whose accepted value no longer justifies their cost, latency, or overlap with other perspectives. Change one dimension at a time so you can tell what improved. See Control PR review costs for focused guidance.Apply policy changes safely
- Make one focused edit on a branch.
-
From the repository root, run structural validation:
- Inspect the diff and explain the intended behavior change in the pull request.
- Merge the change to the default branch.
- Allow a few minutes for Charlie to load the updated policy.
- Exercise the change on a separate representative pull request.
- Compare the GitHub result and Dashboard Activity with the policy.
DAEMON.md or reference Markdown for the pr-review daemon. Merge the policy change, wait for Charlie to load it, and test it on another pull request.
Do not broaden the policy merely to make Charlie publish something. A fully completed clean review produces the configured clean result rather than a finding.
What Charlie handles
Your policy defines review judgment. Charlie gathers the current pull request context, inventories the lanes, selects the applicable lanes from their authored guidance, applies the root policy to the resulting candidates, and delivers the review.Next steps
- Control PR review costs to reduce review frequency or scope.
- Troubleshooting when a review does not run or its result is unexpected.
- PR review overview for the product model and setup path.
DAEMON.mdreference for the generic daemon file contract.