cedr.dev: developer tools for humans and agents. Every coding agent, one control panel. One open-source CLI. CI status Latest release License: Apache-2.0 Built with Rust Docs: cedr.dev **[Website](https://cedr.dev)** ยท **[Docs](https://cedr.dev/docs)** ยท **[Install](#-install)** ยท **[Report a bug](https://github.com/Sheernox/cedr/issues)**

`cedr` is the command line tool behind [cedr.dev](https://cedr.dev): every coding agent, one control panel. It picks the agent, model and effort for each kind of work, merges reviews from several vendors into one gate, pins the skills and MCP servers your agents load, compiles one setup into each agent's own files, and reports usage, spend and plan limits across them. Any agent that speaks MCP can call it directly. > [!NOTE] > cedr is in public beta. Commands and file formats may still change before 1.0. See [how versions work](docs/versioning.md). ## โœจ Products
Product What it does Start with

Route
Picks the agent, model and effort for each kind of work from your routes.toml. Equally suited work goes to the plan with the most room left, and plans near their limits are skipped. You set the limits per plan or route, and the models per route and work size. cedr route pick review.code

Council
Starts one reviewer per vendor, merges their reports, groups findings that point at the same place and decides the gate. Any P0 or P1 blocks; too few reports is never a silent pass. cedr council plan review.council

Guard
Lints your agent setup, pins every skill and MCP server in .cedr/guard.lock, and fails CI when a server's tools, descriptions or network hosts change after you pinned it. cedr guard lint

Sync
Write rules, skills, MCP servers, permissions and hooks once in .cedr/, and cedr writes each agent's own files. CI fails on drift, and hand edits are never overwritten unless you pass --force. cedr sync init

Monitor
Reads each agent's local logs and reports tokens, cache use, API-equivalent cost, sessions and how close each plan is to its limit. Counts leave your machine only when you push them. cedr monitor limits

Bench
Runs a suite of real tasks against a baseline and a candidate, with tests deciding each trial, inside a budget you set. Reports the pass rates, cost and how much the difference can be trusted, and records every version involved. cedr bench init
**Not sure where you stand?** `cedr doctor` checks your account, Route, MCP, Monitor, Sync and Guard setup and prints the fix for whatever is missing. It never changes anything. **Coming next:** **Index** (one code graph every agent shares). See the [product line](https://cedr.dev/#products). ## ๐Ÿ“ฆ Install Download the archive for your platform from the [latest release](https://github.com/Sheernox/cedr/releases/latest), unpack it and put `cedr` on your `PATH`. | Platform | Archive | | --- | --- | | Linux x86_64 | `cedr-linux-x86_64.tar.gz` | | Linux ARM64 | `cedr-linux-arm64.tar.gz` | | macOS, Apple silicon | `cedr-macos-arm64.tar.gz` | | macOS, Intel | `cedr-macos-x86_64.tar.gz` | | Windows x86_64 | `cedr-windows-x86_64.zip` | For example, on Linux x86_64: ```sh curl -fsSL https://github.com/Sheernox/cedr/releases/latest/download/cedr-linux-x86_64.tar.gz | tar -xz install -m 755 cedr-linux-x86_64/cedr ~/.local/bin/cedr cedr --version ``` Linux builds need glibc 2.34 or newer (Ubuntu 22.04, Debian 12, RHEL 9 or later). Every release lists SHA-256 checksums in `SHA256SUMS` and carries signed build provenance you can check with `gh attestation verify --repo Sheernox/cedr`. To build from source instead, use a current stable [Rust toolchain](https://rustup.rs): ```sh cargo install --locked --git https://github.com/Sheernox/cedr cedr ``` cedr keeps itself up to date: once a day it checks for a release in the background, verifies the archive against `SHA256SUMS` and replaces itself. `cedr update` updates right away, `cedr update --check` only reports, and `cedr update --auto off` (or `CEDR_NO_AUTO_UPDATE=1`) turns the daily update off. It never updates in CI, and a `cargo install` tells you to update with cargo instead. See [docs/update.md](docs/update.md). ## ๐Ÿš€ Quick start with Route **1. Describe your plans and routes** in `~/.config/cedr/routes.toml`. The [Route page](https://cedr.dev/docs/route/) in the cedr.dev app can generate this file for you. ```toml version = 1 [orchestrator] # the agent you work in; it keeps work no one else should take harness = "claude" model = "opus" [harnesses.claude] expect = ["five_hour", "seven_day"] effort_option = "effort" [harnesses.codex] expect = ["primary"] effort_option = "reasoningEffort" [[readings]] # where plan usage comes from kind = "claude-statusline" harness = "claude" [[readings]] kind = "codex" harness = "codex" [routes."review.code"] work = "Independent review" role = "review" candidates = [ { target = "codex/sol", effort = "high", tier = 1 }, { target = "claude/sonnet", effort = "high", tier = 1 }, { target = "self" }, ] ``` **2. Let cedr see your Claude Code plan usage** by making it your status line in `~/.claude/settings.json`. Add `-- ` to keep an existing status line. ```json { "statusLine": { "type": "command", "command": "cedr route statusline" } } ``` **3. Pick, then record how it went.** ```console $ cedr route pick review.code [route review.code -> codex/gpt-6.1-sol high | balanced:31% Route | Command | What it does | | --- | --- | | `cedr route pick ` | Choose the agent, model and effort for a kind of work | | `cedr route pools` | Show how much room each plan has left, and which ones cedr will use | | `cedr route list` | List your routes and the models each one tries | | `cedr route verdict ` | Record whether the work was accepted, reworked, redone or rejected | | `cedr route stats` | Picks and verdicts per route and model | | `cedr route sync` | Share history and routes with your cedr.dev organization |
Council | Command | What it does | | --- | --- | | `cedr council plan ` | Name the reviewers to start, one per vendor, and the quorum | | `cedr council merge ...` | Merge their reports and decide the gate |
Guard | Command | What it does | | --- | --- | | `cedr guard lint` | Find problems in a repo's agent setup | | `cedr guard lock` | Pin every skill and MCP server in `.cedr/guard.lock` | | `cedr guard verify` | Fail when the setup no longer matches the lock (offline) | | `cedr guard outdated` | Inspect newer npm versions and their surface changes without running them | | `cedr guard push` | Send pins and findings to your organization's Guard page; `--updates` includes npm updates |
Sync | Command | What it does | | --- | --- | | `cedr sync init` | Import a repo's existing agent files into `.cedr/` | | `cedr sync` | Write each agent's native files; `--dry-run` prints the diffs instead | | `cedr sync check` | Fail when generated files drifted or an organization rule is broken (offline) | | `cedr sync pull --org ` | Vendor your organization rules into the repo | | `cedr sync push --org ` | Report drift to the app, without file contents or environment values | Commit the sources, generated files and `.cedr/sync.lock`. Sync refuses unmanaged Markdown and hand edits unless `--force` is supplied.
Monitor | Command | What it does | | --- | --- | | `cedr monitor` | Report tokens, cache use and API-equivalent cost; for example `--since 7d --by model` | | `cedr monitor limits` | Each plan window's use, reset, projection and outlook | | `cedr monitor sessions` | The costliest sessions | | `cedr monitor sources` | What Monitor found for each agent, and why one has no data | | `cedr monitor push --org ` | Send hourly counts and plan readings to your organization | | `cedr monitor schedule` | Install or remove a per-user timer that pushes on a schedule | | `cedr monitor reset` | Delete the local store; the next report rebuilds it from the logs still available | Configure collection and optional automatic pushes in `~/.config/cedr/monitor.toml`. Missing usage stays unknown.
Bench | Command | What it does | | --- | --- | | `cedr bench init` | Write a starter suite to `.cedr/bench/` | | `cedr bench plan` | Validate a suite and show what a run would do, starting nothing | | `cedr bench run` | Run the agents and tests within the budget; `--fail-on lower` fails CI when the candidate does worse | | `cedr bench push [id]...` | Send unsent results from the current repo to an organization; `--all` explicitly selects every repo, ids with `--repo` supply a missing name, and `--dry-run` prints bodies without sending | | `cedr bench history` | Saved runs, newest first | | `cedr bench show ` | One saved run's report, with its exit code | | `cedr bench budget [USD]` | Show or set the cap (default $2.00); `--pull` stores the one set in the app | A suite is code: its `setup` and `test` commands run with your permissions, so run ones you trust. Bench runs the vendors' unmodified CLIs with your own sign-in or keys, in a fresh clone for each trial. With `[sync]` already configured, upgrading starts sending each saved run to that organization: the result, repo name, machine id and name, and GitHub PR number and run URL. Prompts, agent output and paths are never sent. Uploads reduce path-like model names to their final segment and cap bodies at 256 KiB; larger results stay saved locally. Use `--no-push` to skip automatic sending for that run; a later `cedr bench push` can still send it. Set `auto = false` to stop both Bench and Route automatic sending. `--no-record` keeps a run from being saved or sent. Bare pushes select only the current repo; `--all` explicitly selects every repo. See [Bench push](docs/bench.md#push).
Everything else | Command | What it does | | --- | --- | | `cedr doctor` | Diagnose account setup, Route, MCP, Monitor, Sync, Guard and Bench; `--format json` for agents. Failures exit 1; warnings alone exit 0 | | `cedr mcp` | Serve the Route, Council, Sync, Monitor, Bench and Doctor tools over MCP on stdio | | `cedr update` | Install the latest release now; `--check` only reports, `--auto off` stops the daily update | | `cedr telemetry status\|off\|on` | Show or change whether cedr sends anonymous usage data |
Run `cedr --help` for every option, and `cedr completions bash|zsh|fish|powershell|elvish` for a shell completion script. Every config field, output shape and exit code is specified in the design docs for [Route](docs/route.md), [Council](docs/council.md), [Guard](docs/design.md), [Sync](docs/sync.md), [Monitor](docs/monitor.md), [Bench](docs/bench.md) and [Doctor](docs/doctor.md). ## ๐Ÿ›ก๏ธ Check every pull request Guard discovers Claude, Codex, Cursor, Gemini, Copilot, opencode, Antigravity and Grok Build MCP configs, plus their standard skill folders. The cedr action installs a released `cedr` (checked against the release's `SHA256SUMS`), runs `cedr guard lint` and `cedr guard verify`, and shows each finding as an annotation on the pull request. When `.cedr/sync.toml` exists it also fails on Sync drift: ```yaml - uses: actions/checkout@v5 - uses: Sheernox/cedr@vX.Y.Z ``` Replace `vX.Y.Z` with the [latest release](https://github.com/Sheernox/cedr/releases/latest). A pinned tag means your CI changes only when you choose. Inputs: `version`, `path`, `strict`, `verify` (`auto`, `true` or `false`), `sync`, `sync-fix`, `outdated` (default `true`, annotations never fail the job) and `push-org`, which with a `CEDR_API_KEY` secret also sends each result and npm updates to the app. Repo-level settings, such as extra skill folders and checks to skip, go in `.cedr/guard.toml`. See the [Guard design](docs/design.md) for every field. ## ๐Ÿ”Œ Use it from your agent `cedr mcp` offers the Route, Council, Sync, Monitor and Doctor tools to any agent that speaks MCP: ```sh claude mcp add cedr -- cedr mcp codex mcp add cedr -- cedr mcp ``` ## ๐Ÿ” Your keys stay yours - cedr never reads your agents' credentials and never calls a vendor API for you. Plan usage comes from your agents' own status line and CLI, or from a feed you point it at. - Picks, verdicts and stats stay on your machine. `cedr route sync` sends them to cedr.dev only when you add a `[sync]` section and a cedr.dev API key. - `cedr guard lock` runs an MCP server only when you pass `--introspect`, and warns before it does. - `cedr guard push` sends names, versions, hashes and findings, never file contents, environment values or how a server is started. - `cedr monitor` stays local until you run `push` or enable automatic pushes, and then sends counts only: never prompts, responses, file paths or credentials. - `cedr sync push` reports drift without sending file contents or environment values. - cedr sends anonymous usage data (command names, exit codes, timing, version, OS and which agents are installed) with a random install ID, after telling you on its first run. Never arguments, paths, repo names or code. `cedr telemetry off`, `CEDR_TELEMETRY=0` or `DO_NOT_TRACK=1` turn it off. Every field: [docs/telemetry.md](docs/telemetry.md). ## ๐Ÿค Contributing Bug reports and ideas are welcome, and focused fixes can go straight to a pull request. Read [CONTRIBUTING.md](CONTRIBUTING.md) first, and report security issues privately as described in [SECURITY.md](SECURITY.md). ## ๐Ÿ“„ License Apache License 2.0. See [LICENSE](LICENSE) and [NOTICE](NOTICE) for included third-party work.
Free and open source. Paid plans in the cedr.dev app add features such as routes shared across your machines and team (plans).
Made by Sheernox.