e90137b17c
Every hint costs the receiving session a full model turn. The daemon sent one per forge event with no quiet period, so a busy PR produced 20+ in a day and sometimes repeated a payload verbatim. Reasons are now banked per PR and role until a hint actually goes out, so a busy pane or a cooldown delays one but never loses it. After a hint, the next waits hintCooldownSeconds (default 300) and carries everything that accumulated. A payload identical to the last is dropped, as is a ci hint to a land session whose worktree already holds that head commit. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
175 lines
3.1 KiB
JSON
175 lines
3.1 KiB
JSON
{
|
|
"pollSeconds": 60,
|
|
"reconcileSeconds": 120,
|
|
"maxSessionsPerTick": 2,
|
|
"hintCooldownSeconds": 300,
|
|
"reviewProfile": "review",
|
|
"group": "pr",
|
|
"webhookPort": 7474,
|
|
"notifyWaiting": true,
|
|
"ledger": "/home/you/.local/state/reviewer/reviewers.jsonl",
|
|
"pathRoots": [
|
|
"/home/you/code",
|
|
"/home/you/work"
|
|
],
|
|
"forges": {
|
|
"gitea": {
|
|
"api": "https://git.example.com/api/v1",
|
|
"tokenEnv": "REVIEWER_GITEA_TOKEN",
|
|
"reviewTokenEnv": "REVIEWER_GITEA_REVIEW_TOKEN",
|
|
"webhookSecretEnv": "REVIEWER_GITEA_SECRET",
|
|
"self": [
|
|
"you",
|
|
"you-bot"
|
|
]
|
|
},
|
|
"github": {
|
|
"api": "https://api.github.com",
|
|
"tokenEnv": "REVIEWER_GITHUB_TOKEN",
|
|
"webhookSecretEnv": "REVIEWER_GITHUB_SECRET",
|
|
"self": "you"
|
|
}
|
|
},
|
|
"repos": [
|
|
{
|
|
"forge": "gitea",
|
|
"repo": "*",
|
|
"mode": "drive",
|
|
"tool": "claude",
|
|
"selfReview": true
|
|
},
|
|
{
|
|
"forge": "github",
|
|
"repo": "acme/webapp",
|
|
"mode": "review"
|
|
}
|
|
],
|
|
"agents": [
|
|
{
|
|
"id": "claude/sonnet@med",
|
|
"tool": "claude",
|
|
"args": [
|
|
"--model",
|
|
"sonnet"
|
|
],
|
|
"roles": [
|
|
"blitz"
|
|
],
|
|
"tiers": [
|
|
"execution"
|
|
]
|
|
},
|
|
{
|
|
"id": "claude/opus@med",
|
|
"tool": "claude",
|
|
"args": [
|
|
"--model",
|
|
"opus",
|
|
"--effort",
|
|
"medium"
|
|
],
|
|
"tiers": [
|
|
"design"
|
|
]
|
|
},
|
|
{
|
|
"id": "claude/opus@high",
|
|
"tool": "claude",
|
|
"args": [
|
|
"--model",
|
|
"opus",
|
|
"--effort",
|
|
"high"
|
|
],
|
|
"tiers": [
|
|
"design",
|
|
"subtle"
|
|
]
|
|
},
|
|
{
|
|
"id": "pi/gpt5.6@high",
|
|
"tool": "pi",
|
|
"args": [
|
|
"--model",
|
|
"openai-codex/gpt-5.6-sol:high"
|
|
],
|
|
"tiers": [
|
|
"design",
|
|
"subtle"
|
|
]
|
|
},
|
|
{
|
|
"id": "pi/gpt5.6@med",
|
|
"tool": "pi",
|
|
"args": [
|
|
"--model",
|
|
"openai-codex/gpt-5.6-sol:medium"
|
|
],
|
|
"tiers": [
|
|
"execution",
|
|
"design"
|
|
]
|
|
},
|
|
{
|
|
"id": "claude/fable@high",
|
|
"tool": "claude",
|
|
"args": [
|
|
"--model",
|
|
"fable",
|
|
"--effort",
|
|
"high"
|
|
],
|
|
"tiers": [
|
|
"subtle"
|
|
]
|
|
},
|
|
{
|
|
"id": "oc/gpt5.6",
|
|
"tool": "opencode",
|
|
"args": [
|
|
"--model",
|
|
"openai/gpt-5.6-sol"
|
|
],
|
|
"roles": [
|
|
"review"
|
|
]
|
|
},
|
|
{
|
|
"id": "codex/gpt5.6@med",
|
|
"tool": "codex",
|
|
"args": [
|
|
"-c",
|
|
"model_reasoning_effort=medium"
|
|
],
|
|
"roles": [
|
|
"review",
|
|
"blitz"
|
|
],
|
|
"tiers": [
|
|
"execution",
|
|
"design"
|
|
]
|
|
},
|
|
{
|
|
"id": "codex/gpt5.6@high",
|
|
"tool": "codex",
|
|
"args": [
|
|
"-c",
|
|
"model_reasoning_effort=high"
|
|
],
|
|
"roles": [
|
|
"review",
|
|
"blitz"
|
|
],
|
|
"tiers": [
|
|
"design",
|
|
"subtle"
|
|
]
|
|
}
|
|
],
|
|
"blitz": {
|
|
"maxSessions": 2,
|
|
"notifyService": "mobile_app_pixel_7_naps"
|
|
}
|
|
}
|