One graph
Reads Cargo.toml, package.json, pyproject.toml, Anchor.toml, and go.mod. kdo graph prints the edges. kdo affected --base main lists projects a change touches.
Workspace runtime for coding agents.
A budgeted view of the repo, instead of a filesystem walk.
$ kdo init
4 projects rust, typescript, python, anchor
wrote kdo.toml and .kdo/context/
$ kdo context vault-program --budget 2048
vault-program.md under budget
$ kdo apply -f specs/hello.yaml
created spec hello
$ kdo factory tick
plan, implement, test, review
merge waits if the checkout is dirty commands
An agent that opens a monorepo by walking the tree reads files the task never needed. kdo already knows the projects and the dependency edges, and it will not return more context than the budget you set.
Reads Cargo.toml, package.json, pyproject.toml, Anchor.toml, and go.mod. kdo graph prints the edges. kdo affected --base main lists projects a change touches.
kdo context <project> --budget 2048 returns the summary and public signatures that fit. Tree-sitter extracts signatures. File bodies stay on disk until a tool asks for one symbol.
kdo serve --transport stdio. Tools: list, context, symbol, graph, affected, search, run. The same call 3 times (OpenClaw) or 5 times (other profiles) returns a loop error instead of another model turn.
kdo apply -f spec.yaml, then kdo factory daemon. Plan, implement, and review use your key. The tester runs the test task from kdo.toml. Writes stay in .kdo/worktrees/<run>/. A pass merges only if git status is clean outside .kdo/.
[workspace]
name = "my-monorepo"
projects = ["apps/*", "crates/*"]
[aliases]
b = "build"
t = "test"
[env]
RUST_BACKTRACE = "1"
[tasks.build]
command = "cargo build"
depends_on = ["^build"]
inputs = ["src/**", "Cargo.toml"]
outputs = ["target/debug/"]
[tasks.dev]
command = "cargo watch -x run"
persistent = true
[projects.api.tasks]
build = "cargo build --release" kdo.toml
test = "cargo test" is enough.
Add depends_on only when order matters.
^build runs build in upstream projects before this one.
//lint runs lint in every project first.
kdo run test --dry-run prints the commands. It does not run them.
[projects.api.tasks] replaces one task for one project. The rest of the file stays shared.
scope
Turbo, Nx, Bun, and pnpm install and build. kdo reads those manifests so an agent can ask what depends on a project without opening every file. Keep the package manager.
| Feature | kdo | turbo | nx | bun | pnpm |
|---|---|---|---|---|---|
| Polyglot graph | ● | ○ | ◐ | ○ | ○ |
| MCP server built-in | ● | ○ | ○ | ○ | ○ |
| Token-budgeted context | ● | ○ | ○ | ○ | ○ |
| Task pipelines (^task / //task) | ● | ◐ | ● | ○ | ○ |
| Per-project task overrides | ● | ● | ● | ○ | ○ |
| Single static binary | ● | ○ | ○ | ● | ○ |
| Package install / lockfile | ○ | ○ | ○ | ● | ● |
| Spec runs in a git worktree | ● | ○ | ○ | ○ | ○ |
Filled: yes. Half: partial. Empty: no. Checked against kdo 0.3.0-alpha.1.
install
Still pre-1.0. Cargo skips alphas unless you pass
--version.
The shell script downloads the GitHub release and does not need Rust.
curl -fsSL https://vivekpal1.github.io/kdo/install.sh | bash -s -- --from-release cargo install kdo --version "0.3.0-alpha.1"
Already installed?
kdo upgrade pulls the
latest binary in place.
mcp
kdo setup writes the client config.
--dry-run prints the files and writes nothing.
Cursor, Zed, Cline, and Continue use
kdo serve --transport stdio --agent generic.
Writes the Claude Code MCP entry and a CLAUDE.md block between sentinels. Running it again updates that block and leaves the rest of the file alone.
kdo setup claude --global kdo setup claude --global --dry-run Writes an AgentSkills SKILL.md and merges the MCP server into ~/.openclaw/openclaw.json. The openclaw profile uses a 3-call loop window.
kdo setup openclaw --global kdo setup openclaw --global --dry-run
Factory runs use your key. Set ANTHROPIC_API_KEY or
OPENAI_API_KEY, or put names under
[keys] in
~/.kdo/credentials.toml.
kdo keys status prints set or missing, never the secret.
With no key, the factory uses a mock provider.