██████╗██╗ ██╗ █████╗ ██████╗ ██████╗ ███╗ ██╗ ██╔════╝██║ ██║██╔══██╗██╔══██╗██╔═══██╗████╗ ██║ ██║ ███████║███████║██████╔╝██║ ██║██╔██╗ ██║ ██║ ██╔══██║██╔══██║██╔══██╗██║ ██║██║╚██╗██║ ╚██████╗██║ ██║██║ ██║██║ ██║╚██████╔╝██║ ╚████║ ╚═════╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝
AI made code cheap. It didn't make merging cheap. Charon gives you a desktop control room for the PR mess. Agents do the legwork; you make the calls.
The PR queue got bigger and weirder. Review capacity (people with context and accountability) did not. The popular fix is to point another unsupervised bot at the thread, which mostly gives those people one more thing to read.
Charon uses agents for the work that does not need your judgment: failing CI, merge conflicts, bug-bot triage, first-pass review. When something needs your call, it becomes a proposal you can edit and approve before anything touches GitHub.
Every GitHub-facing write starts as a proposal card. Edit it, regenerate it, or dismiss it. Nothing ships until you click Approve & send. Your teammates get you, not a bot wearing your name.
Review agents cannot write to teammates' code. Fix agents get an isolated git worktree for the one PR they are fixing: no forks, no borrowed branches.
Every event handler has a toggle and a prompt template you can rewrite. Per-repo filters choose what deserves an agent. Hate a behavior? Edit the prompt.
One window per repo. A poller watches checks, mergeability, comments, and reviews, diffs each snapshot into events, then runs your prompt.
ci_failed, merge_conflict_detected, bug_bot_finding are the boring alerts. By default, Charon fixes CI, resolves conflicts, and triages bot findings before you've finished your coffee. Self-review findings land on the diff, tagged by severity and confidence, one Apply away from a fix agent.

When a teammate requests your review, an agent reads the full diff and drafts inline comments on a native diff view with a file tree, unified/split mode, and resolvable threads. Toggle comments off, rewrite them, change the verdict, then submit the whole review in one shot.

On your draft PRs, you can select lines the way you do on GitHub. Click Edit and an agent implements the change in a worktree, then pushes. Ask a question and it answers read-only. Your draft. Your branch. Keep moving.

Every run shows its prompt, model, working directory, and live streamed output in one feed. Stop a runaway agent with one click.

The event catalog: each handler is a toggle and an editable prompt template with interpolated variables and /skill references. New event types are catalog entries; the engine stays the same.

This is what a run looks like: an event fires, an agent streams logs, and you get a decision to approve, not another post in the thread.
Tauri 2 with a Rust backend for HTTP, git, and process spawning; React + TypeScript front end. One window per repo, config stored locally.
Every handler is event → { enabled, prompt }. Prompts interpolate {pr-number}, {check-name}, {comment-body}, and /skill references.
Runs stream through cursor-agent --print --output-format stream-json. Fixes run in dedicated worktrees; reviews run read-only in --mode ask.
Works against github.com and GitHub Enterprise (/api/v3). REST plus a dash of GraphQL. Fine-grained PAT recommended.
Imported from ~/.cursor/commands and ~/.cursor/skills, selectable per stage. humanize ships built in.
Every push to main versions, tags, builds a universal DMG, and publishes it. Installed apps self-update with a one-click restart.
cursor-agent). The harness is pluggable:
adapters for Claude Code, Codex, or any streaming CLI can slot in behind the same interface.
Contributions welcome.