Automated code review daemon for local repositories, with a browser dashboard.
The architecture is now daemon-first:
- CLI commands control lifecycle and trigger reviews
- daemon runs detection, scheduling, agent execution, and persistence
- web UI is served by the daemon (
/) - API + SSE are exposed over both Unix socket and HTTP
packages/cli- daemon runtime, CLI commands, web dashboard, SQLite statepackages/shared- shared schemas, trigger key parsing, prompt helpers, types
Legacy plugin package has been removed.
- Install dependencies
bun install- Ensure config exists
cd packages/cli
bun run src/index.ts config- Add a repository to track
bun run src/index.ts add /absolute/path/to/repo- Start daemon
bun run src/index.ts start- Open dashboard
bun run src/index.ts dashboardadd <repo>- track a repositoryremove <repoOrId>- stop tracking a repositorystart/stop/status- daemon lifecycledashboard- open browser UI (--print-urlto print only)review [repoOrId]- enqueue manual review; defaults to current reporeview --agent <janitor|hunter|inspector|scribe>- target a single agentlog- read event history
janitorandhunter: get workspace context built from staged + unstaged changes- includes tracked diff (
git diff HEAD) plus untracked file patches - if workspace is clean (no local changes), falls back to repo-wide analysis
- includes tracked diff (
inspector: always repo-wide manual analysis (no diff context injected)scribe: always repo-wide documentation audit with markdown inventory- includes markdown file list + last git-modified date per file
- uses commit context from the detected SHA
- includes subject, parents, changed files, and commit patch
- uses PR-range context (
merge-base..head) - includes changed files and patch for PR delta (not just single commit)
See docs/ARCHITECTURE.md for a detailed breakdown.
High-level flow:
- Detector watches tracked repos for commit/PR activity
- Triggers are enqueued into SQLite as review jobs
- Scheduler claims jobs and selects eligible agents
- Agent pipeline executes via OpenCode SDK sessions
- Findings and session events are persisted
- Dashboard consumes snapshots + SSE stream from daemon APIs
Config is TOML and includes:
- daemon paths + web binding (
daemon.webHost,daemon.webPort) - scheduler concurrency and retry policy
- git polling behavior and PR detection toggles
- per-agent enable/trigger/maxFindings/model overrides
- global and per-agent OpenCode permission extensions (
ask|allow|deny) - OpenCode server + default model settings
Permission extension examples:
[opencode.permissionExtensions]
"context7_*" = "ask"
[opencode.permissionExtensions.bash]
"*" = "ask"
"git status*" = "allow"
[agents.inspector.permissionExtensions]
"context7_*" = "allow"
[agents.inspector.permissionExtensions.bash]
"git *" = "allow"
"git push *" = "deny"PR comment posting for PR-triggered runs is enabled by default. Disable it with:
{
"triggers": {
"pr": {
"enabled": true,
"intervalSec": 30,
"postComment": false
}
}
}Default web UI URL is http://127.0.0.1:7700.
From repo root:
bun run build
bun run typecheck
bun run test