catherd
Health Warn
- License — License: MIT
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Low visibility — Only 5 GitHub stars
Code Pass
- Code scan — Scanned 12 files during light audit, no dangerous patterns found
Permissions Pass
- Permissions — No dangerous permissions requested
No AI report is available for this listing yet.
Herds coding agents: autopilot builds from your own Claude Code session — Claude plans and verifies, Codex and opencode write the code, Jev picks the model.
catherd
/\_/\ . catherd
(=^.^=)/ herds coding agents
(")(")
Autopilot builds from your own Claude Code session. Claude plans and verifies, Codex, opencode or
headless Claude Code workers write the code, and Jev picks the model and effort for each piece
of work, climbing a ladder only when a cheaper rung falls short.
- Your harness, as you set it up. Every role runs in its vendor's own CLI with your config,
hooks, skills andAGENTS.md. Isolation is an opt-in toggle per profile and harness, for when
you'd rather save the tokens your customizations cost. - Claude roles stay native.
claude:rungs run as ordinary Claude Code subagents; Codex,
opencode and headlessclaude-code:rungs run through catherd's MCP server. - Survives restarts. Workers are detached processes writing straight to disk, so a dropped
MCP server never loses a run. - Guard rails for autopilot. Quota failover to a rung on another quota, a preflight check before any
worker starts, per-repo knowledge carried between runs, and a run budget.
Requirements
- Bun ≥ 1.4
- Claude Code (desktop app or CLI)
- At least one worker backend, logged in:
- Optional: a TypeSafe API key for Jev, in
TYPESAFE_API_KEYor saved bycatherd init
catherd doctor checks each backend's version and login and prints the fix for anything missing. The default
profile runs its workers on Codex; without Codex, doctor's fix also names how to move those roles to a backend
you have (/catherd-setup in Claude Code, or catherd profile set roles.<role>.rungs <rung>).
Install
bunx catherd-cli init
The npm package is catherd-cli; the command it installs is catherd. init asks for the optional Jev key,
writes the default profile and links its Claude agents, lists your backends' models, and ends with a readiness
report (--no-input asks nothing and keeps what exists; --profile <name> sets up and activates that profile
instead of default; piped, it reads one answer per line once stdin closes: the Jev key, the profile, whether to replace it, each on its own line even when a question is skipped). Then add the plugin to Claude Code:
claude plugin marketplace add 47vigen/catherd
claude plugin install catherd@catherd
Start a new Claude Code session so the plugin, its MCP server and the agent files load, then check withbunx catherd-cli doctor.
Use
In Claude Code:
/catherd <task>runs a task on autopilot;/catherdalone resumes the latest run./catherd-setuptunes your profile in conversation: which models and efforts each role may
use, cost or speed, isolation, budget and failover.
In a terminal:
| Command | What it does |
|---|---|
catherd |
The dashboard: Status, Profiles and Runs (below) |
catherd init [--no-input] [--profile <p>] |
First-run setup |
catherd doctor [--json] |
Readiness report, one row per check with its fix; exits 3 when not ready |
catherd profile list|show|use [--repo]|new [--from <p>]|copy|rm|diff|validate |
Profiles; use --repo binds one to the repo you are in |
catherd profile use --repo --clear |
Unbinds the repo you are in; it runs on the active profile again |
catherd profile set <path> <value> [--profile <p>] |
One field, e.g. roles.verifier.access read-only, budget.usd 20 |
catherd status [run], catherd watch [--once] [--interval <s>] |
Where runs stand, grouped by the Claude Code session that drove them |
catherd runs list [--repo <path>]|show <id> [--debug [--name <n>]]|cancel <id> <name> |
Past runs, by session; --debug adds exit.json and the stderr and event tails, --name one role's |
catherd catalog refresh|list [--backend <b>] [--role <r>] [--text <t>] [--scored] |
The models catherd can place, filtered |
catherd catalog treat-like <rung> <like> |
Scores an unscored rung as a scored one |
catherd lock [--slots N] -- <cmd> |
Runs a heavy command behind the machine-wide semaphore, in its own session (no /dev/tty) |
catherd mcp |
The MCP server on stdio; the plugin starts it, you never need to |
catherd capture-fixtures [--backend <b>] [--out <dir>] |
Contributors: records sanitized test fixtures from real runs (see CONTRIBUTING.md) |
A profile command without a profile name (show, set, diff, validate), like the MCP profile tools, acts
on the profile the repo you are in runs on: the one bound to it, else the active one. Run them asbunx catherd-cli <command> when catherd is not installed globally. Every read command takes --json; a bare catherd runs is catherd runs list. Exit codes: 0 ok, 1 error, 2 usage, 3 not ready, 130 interrupted; an error printserror E_CODE: message and a fix: line. --verbose (or CATHERD_LOG=debug) logs more to~/.local/share/catherd/logs/, kept for 7 days with secrets redacted. The dashboard takes --plain (ASCII, no colour)
and --reduced-motion; doctor and init take --plain for ASCII glyphs too. NO_COLOR drops colour, never glyphs.
Run data lives in ~/.local/share/catherd/, config in ~/.config/catherd/ (both followXDG_*).
Environment variables
| Variable | What it does |
|---|---|
TYPESAFE_API_KEY |
The Jev key, instead of the one catherd init saves |
CATHERD_HOME |
Puts config and data under $CATHERD_HOME/config and $CATHERD_HOME/data instead of XDG |
CATHERD_LOG |
Log level: off, error, warn, info (default) or debug (what --verbose sets) |
CATHERD_LOCK_SLOTS |
catherd lock's slot count when --slots is not given (before the profile's lock.heavy) |
CATHERD_REDUCED_MOTION |
Any value: the dashboard's --reduced-motion |
CATHERD_NO_KITTY |
Any value: turns off the kitty keyboard protocol in the dashboard, for terminals it breaks |
CATHERD_CLAUDE_AGENTS_DIR |
Where catherd links its Claude agents (default: $CLAUDE_CONFIG_DIR/agents, else ~/.claude/agents) |
NO_COLOR |
Drops colour (the dashboard's and --help's; piped --help has none either) |
For development only: CATHERD_STORY=1 opens the dashboard's storybook, and CATHERD_LIVE=1 enables the live
tests (CONTRIBUTING.md has the rest).
The dashboard
catherd opens three tabs: 1 Status (every check with its fix; y copies the fix, r checks again),
2 Profiles (one tree per profile: roles with their access, default rung, models and efforts, then routing,
harness, budget, failover, timeouts and notify) and 3 Runs (the Claude Code sessions that drove your runs, newest
first; a session opens on its runs, their milestones and every role with its rung, status, time and last event, live
ones first; a role opens on its brief, reply and record; the open screen redraws as run files change; esc goes back,p pauses). catherd watch opens it on Runs.
ctrl+plists every command with its key and CLI twin;?lists the keys that work where you are.ctrl+xis the leader:ctrl+x 1–3tabs,ctrl+x nnew profile,ctrl+x lprofiles,ctrl+x uandctrl+x rundo and redo,ctrl+x qquit.- Lists: arrows or
j/k,pgup/pgdn,home/g,end/G,/to filter;spaceticks,enter
changes or opens,→/←expand and collapse. - Edits are staged: nothing is written until
ctrl+sshows the diff and you choose Save or Save & make active.enternever saves. - Inside a repo bound to a profile, the dashboard opens on that profile, and making a profile active binds the
repo to it (ascatherd profile use <name> --repo). escbacks out one level and never quits.qquits, asking first if something is unsaved;ctrl+cquits
when nothing is, and pressed twice within 1.5 s discards and exits 130.- Deleting a profile or cancelling a live role takes
ctrl+dtwice. --plaindraws ASCII without colour,NO_COLORdrops the colour,--reduced-motionstops the spinner.- Rebind a key in
~/.config/catherd/config.json:"keybinds": { "profile.save": "ctrl+w", "app.help": "none" }
(the palette shows each command by title; the ids are listed insrc/entry/tui/commands.ts).
Upgrading from 0.x
1.0 is a clean break: run bunx catherd-cli init once. It moves your 0.x config.json, projects.json and
profiles into a 0.x-backup-<time>/ folder next to them (it never reads or deletes them), writes the 1.0
default profile, replaces the 0.x Claude agent links with 1.0 ones and keeps your saved Jev key; 0.x run
folders stay where they are, unread. Then update the plugin
(claude plugin marketplace update catherd && claude plugin update catherd@catherd) and start a new Claude
Code session. The details are in MIGRATION.md.
Docs
| Where | What |
|---|---|
| MIGRATION.md | Upgrading from 0.x |
| CHANGELOG.md | Releases |
| CONTRIBUTING.md | Development setup, the checks, commits, changesets, live tests |
| SECURITY.md | Reporting a vulnerability; what catherd stores and how |
docs/specs/2026-09-25-catherd-1.0-design.md |
The 1.0 design (binding) |
docs/dev/ |
Maintainer docs: live verification, manual tests, dependencies, ideas |
docs/dev/live-verification.md |
What CI cannot run: live tests, fixture capture, the Codex sandbox |
docs/tui-frames.md |
Every dashboard screen as text (generated, checked in CI) |
docs/plans/, docs/handoff/, docs/research/ |
How 1.0 was designed and built: plans, reviews, research |
docs/archive/0.x/ |
The 0.x design and plans, for history |
Contributing
See CONTRIBUTING.md. CI runs the checks on Linux and macOS, on Bun 1.4.0 and the latest Bun;
what CI cannot run is in docs/dev/live-verification.md. Report security issues
privately, as SECURITY.md describes. Everyone taking part follows the
Code of Conduct.
License
MIT
Reviews (0)
Sign in to leave a review.
Leave a reviewNo results found