Crew is an Oh My Pi (OMP) extension backed by a durable, repository-scoped local daemon. OMP stays the brain — task intake, scheduling, worker selection, approvals, merge decisions, synthesis. Crew is the hands: it supervises worker processes, speaks harness adapter protocols, persists a durable event journal, recovers after crashes, and feeds display backends.
Everything is delivered through the OMP marketplace (extension + skills, git-cloned from this repository) plus a crewd daemon binary downloaded on demand as a verified GitHub Release asset — no OMP fork, no private APIs, no npm publication.
Multiagent automation is hard. Most frameworks either:
- Put all the intelligence in the agent (risky, hard to debug, no recovery)
- Put all the intelligence in your code (complex, brittle, no replay)
Crew splits the difference: OMP decides what to do, Crew ensures it happens and can be replayed.
Key benefits:
- Durable event journal. Every action is persisted before it executes. Crash? Replay from the last known state.
- Redaction by construction. Secrets never reach the journal. Enforced at the type level.
- SQLite-backed. Query your automation history with SQL. No proprietary format.
- Adapter-agnostic. Claude, Codex, Copilot, OMP-RPC — plug in any worker.
- No model calls required for monitoring. Check runtime status, task state, or run history without spending a token.
If you're building multiagent systems that need to be auditable, recoverable, and debuggable, Crew is your foundation.
Crew consists of two components, installed in two steps:
- Plugin: the OMP extension + skills, pulled from this repository via the OMP marketplace
- Binary: the
crewdruntime daemon, downloaded as a verified GitHub Release asset
/marketplace add nikolasd/crew
/marketplace install crew@crew
Exit and start a new omp session. /reload-plugins does not reload extension modules,
so /crew-install (and every crew_* tool) only exists once a fresh session has
loaded the installed module. Then:
/crew-install
/crew health
This repository is private. The marketplace step git-clones it, so you need your own GitHub
read access to nikolasd/crew — an SSH key registered with GitHub, or a gh auth login session
backed by a git credential helper. /crew-install additionally needs a GITHUB_TOKEN or
GH_TOKEN environment variable set, or that same gh auth login session, to download and verify
the release asset. The binary is cached under your Crew state root.
Once installed, docs/plugin-usage.md is the user manual: every tool and
command the extension registers, and the recommended flow for running a task through it.
To uninstall:
/marketplace uninstall crew@crew
For contributors building or modifying Crew itself (not for end users — see Installation above). docs/getting-started.md is the developer manual — start there for the full setup/build/test/config walkthrough.
Prerequisites: Bun 1.3.14+, macOS or glibc Linux on arm64/x64, and Rust — via rustup (recommended: automatically respects the pinned 1.97.1 in rust-toolchain.toml) or your system package manager. For the full OMP integration you also need OMP ≥ 17.0.7.
git clone https://github.com/nikolasd/crew.git
cd crew
bun run setup # installs JS deps + builds the crewd runtime
bun run check # schema drift check + build + all testsTo exercise the extension against your local changes before opening a PR, load it from its source path directly:
OMP_CREW_BINARY="$PWD/target/debug/crewd" \
omp --extension ./packages/extension/src/index.tsAsk the model to use crew_task, crew_worker, and crew_run, then open /crew to watch runs live. See docs/plugin-usage.md for the full tool reference and docs/manual-testing.md for the full walkthrough. For running crewd directly instead of through OMP, see docs/cli-reference.md.
packages/extension/dist/index.js is committed to git and verified in CI (a bundle-check job rebuilds and diffs it), since it's the entry point the marketplace-installed plugin loads. Any change under packages/extension/src/ must be followed by bun run build and committing the rebuilt bundle.
Platform note: the bundle embeds Bun's platform-specific module shim, so a rebuild on a different platform (e.g. macOS/arm64) does not byte-match CI's
bundle-check— observed with Bun 1.3.14, where a darwin-arm64 rebuild diverges from CI's linux-x64 output. Always refresh the committed bundle via therefresh-bundleworkflow (builds on linux-x64 + pinned Bun and uploads the artifact to commit), or a linux-x64 build, or CI will reject the commit as a stale bundle.
Contributions are welcome. Before submitting a PR:
- Read
docs/getting-started.mdanddocs/architecture.md. - Run
bun run check— schema drift, build, and all tests must pass. - Follow the Non-Negotiable Invariants — changes that weaken them will be rejected.
- Use descriptive commit messages. Reference issue numbers when applicable.
- Describe what changed and why, link related issues, and request review. (There is no PR template to fill out — just write a clear description.)
For detailed guidelines, see CONTRIBUTING.md. For the release/publishing process, see CONTRIBUTING.md's Releasing section.
Crew was created by Nikolas Demiridis as part of the Oh My Pi ecosystem.
For questions, issues, or contributions, please open a GitHub Issue on this repository.
This project is licensed under the MIT License. See the LICENSE file for full terms.
This is a pre-1.0 project. The review backlog is empty — the one open item is an unreproduced test-flake watch, tracked in the maintainer's local, gitignored REVIEW.md (resolution history lives in docs/journal.md). What remains below are environment and protocol walls, verified against the current codebase. Every adapter is installed and authenticated here, and live TUI conformance runs against all four — claude, codex, and omp-rpc are fully green, while copilot alone is blocked on a confirmed vendor monthly-quota wall (raw reports under release/live-conformance/ with an erratum). None of the below is a "requires a vendor CLI" caveat.
- ACP v1 has no durable session handle, so Copilot cannot resume across processes. A session
that completed a real turn answers
session/loadwithResource not found, which failssession_resumeandruntime_restart. A protocol wall, not an adapter defect. - ACP v1 exposes no subagent-observation variant, so Copilot's vendor-side delegation cannot be
normalized to
NestedWorkerObserved. Pending a newer ACP version. - Copilot's turn-dependent scenarios are unprovable on this account's monthly quota. The
tailed session's own event log records a typed
session.error(errorCode: quota_exceeded,statusCode: 402) — independently confirmed, not inferred from a timeout. Refilling the workspace makes the two remaining scenarios provable with no code change.
Consciously deferred features, each with a decision trigger, live in
docs/future-features.md.
