cohors

See every git repo you own in one place and act on them together. Your coding agent gets each repo's live status, CI and PRs, with git actions off until you allow them.

Documentation

cohors

Every git repo you own, on one screen.

What's unpushed, what's behind, and what to do next, across every repository on your machine.

CI Release Homebrew PyPI npm crates.io License: MIT Built with Rust

 Install    Terminal    Claude Code    Scripts    VS Code & browser    Launchpad 

The cohors dashboard. Pressing P on Do next pushes every commit that exists only on this machine.

Install

Homebrew

brew install rushirb2001/tap/cohors

pip

pip install cohors

npm

npm install -g @cohors/cli

Cargo

cargo install cohors

Shell installer

curl -LsSf https://github.com/rushirb2001/cohors/releases/latest/download/cohors-installer.sh | sh

Run once, without installing

uvx cohors@latest
npx @cohors/cli@latest

Then run cohors. To try it on sample repositories first, run cohors demo.

Prebuilt for macOS and Linux; Cargo builds it anywhere Rust runs. All it needs is git. The examples below are real output from the cohors demo sample fleet, trimmed where marked ….

What it answers


What cohors answers: what to do first (Do next), what is about to be lost (Work at risk), what is waiting in each repo (Open tasks), what you shipped this week (Commits), and what exists only on this laptop (Repositories).

Where it looks. With no config, the folders where code usually lives. Point it at yours with cohors --root ~/code (repeat for more), or save them with cohors init, which writes ~/.config/cohors/config.toml for roots, aliases, groups and ignore rules.

Use it in the terminal

cohors
The cohors terminal dashboard

Do next lists what to do, most urgent first. Press a step's letter to act on every repo in it, or mark repos with Space and press the letter yourself.


Dashboard keys: P p f push, pull, fetch; c S commit, stash (asks first); F fetch everything; 1 to 5 jump to a card; colon for the command line; Enter opens a repo; slash filters; s and Y show and copy the standup; t shows tasks; question mark lists every key.

From the : line: :commit wip: cart drawer commits the marked repos, :!npm test runs a command in them, :jump payments goes to one. cohors --watch keeps it all live.

Use it with Claude Code

/plugin marketplace add rushirb2001/cohors
/plugin install cohors@cohors

Ask "what needs my attention across my repos?" and Claude gets the whole fleet in one call:


Claude asks cohors what needs attention; overview returns: 13 repositories, 6 have work at risk, 2 are clean, then the actions: push 4 commits from 3 repositories (risk), reconcile 1 diverged branch, publish 1 branch with no upstream (warn).

More to ask:


More to ask Claude: what have I changed (changes), where do we handle retries (search), write my standup (standup), back up everything only on this laptop (push, as a dry run first), which PRs are failing CI (ci_status and list_prs), plan my day (plan-focus).

It starts read-only. Turn on what Claude may do with claude plugin configure cohors@cohors, then start a new session:


What Claude may do, each off by default: Git actions (fetch, pull, push, commit, stash; no force push, fast-forward-only pull, confirm to commit), Run commands (confirm and a per-call cap), Launchpad writes (validated, never touches git).

Or let cohors brief Claude for you: cohors agent run plan-day, or cohors agent run task --repo payments --task idempotency-keys to start on one task (run it again to resume the same conversation).

Other MCP clients
{ "command": "uvx", "args": ["cohors@latest", "mcp"] }
{ "command": "npx", "args": ["-y", "@cohors/cli@latest", "mcp"] }

Or with cohors installed: claude mcp add cohors -- "$(which cohors)" mcp, adding --allow-writes, --allow-run or --allow-launchpad. Listed in the MCP Registry as io.github.rushirb2001/cohors.

Use it from scripts

Every view is a command. At a terminal it prints a report; piped, it prints JSON.


cohors overview prints the fleet headline and Do next: RISK push 4 commits from 3 repositories, with the command cohors push --select ahead,!diverged; WARN reconcile 1 diverged branch. Then cohors push --select ahead --dry-run would push 4 repos, nothing will change: mobile-app, payments, design-system, analytics.

--select picks the repos. Join terms with a comma (all must match) and put ! in front to exclude:


--select terms: dirty, ahead, behind, diverged; unpublished, stale-fetch, attention; name:pay* and ci:failing; all. A comma means all must match, ! excludes, as in behind,!diverged.
cohors fetch --select all                      # refresh every remote
cohors run --select 'name:web-*' 'npm test'    # one command, many repos
cohors standup                                 # this week's commits, as Markdown
cohors overview --json | jq -r '.actions[].title'

Use it in VS Code and the browser


cohors in VS Codecohors in the browser

The cohors icon in the activity bar shows the fleet as native panes. Push, pull and fetch from any step, run a repo's commands in a terminal, or start Claude on a task.

VS Code Marketplace Open VSX

Search cohors in the Extensions view. Cursor, Windsurf and VSCodium install it from Open VSX.

cohors web --root ~/code --watch serves the dashboard on localhost, with pull requests and CI. Read-only unless you add --allow-writes. cohors web --demo shows the sample fleet.


The launchpad

A repo can commit one small file saying what to run there and what's in progress, so it travels with every clone:


A repo .cohors folder: repo.json holds commands to run and tasks in progress; agents/release.md is a prompt the repo ships for agents. It travels with every clone.

Ask Claude to set up this repo for the launchpad and it writes the file. Commands from npm, Cargo, uv, Makefiles and Gradle are found without one.


cohors launchpad: 13 repositories, 3 set up, 5 open tasks. Your focus board, then open tasks per repo: data-pipeline, payments (idempotency keys on charge retries, doing), web-app (keyboard order in the checkout form, blocked).

Check a file with cohors launchpad validate .. The format is an open spec: spec/v1/SPEC.md.

Safe by default

  • pull is fast-forward only, and nothing force-pushes.
  • No action runs without --select, and every one takes --dry-run.
  • No single key can destroy work. Commit and stash ask first.
  • The MCP server and the browser dashboard start read-only.
  • One unreadable repo is reported, never fatal.
  • No account, no telemetry. It talks only to GitHub. See the privacy policy.

Staying up to date

Once a day cohors checks for a release. Installed with Homebrew, pip or the shell installer, it updates itself in the background and shows Restart to update; press R. cohors update does it now. Set updates = "notify" or "off" in the config to change that.

Updating by hand
Updating by hand: brew update && brew upgrade cohors; pip install -U cohors; npm install -g @cohors/cli@latest; cargo install cohors; rerun the shell installer; uvx and npx with @latest need nothing.

How it compares


How cohors compares with git-scope, mani or gita, and lazygit or gitui: only cohors covers every repo at once, bulk fetch, pull, push and run, pull requests and CI, cross-repo search and standup, and an MCP server for coding agents.

Contributing  ·  Changelog  ·  Privacy  ·  MIT License

cohors is Latin for "cohort": every repository, marshalled under one command.