Cross-platform Rust control plane core
Find a file
Sam & Claude b0a0ff4891
Some checks failed
CI / rust (pull_request) Has been cancelled
CI / markdown (pull_request) Has been cancelled
CI / port (pull_request) Has been cancelled
CI / agent-jail-pkgs (pull_request) Has been cancelled
fix(bootstrap): set jail npm PATH via /etc/profile.d, drop per-user .profile hack
Root cause of the recurring "pi/bw not found in jail" bug: the npm-global-on-PATH
fix was solved canonically in the clawdie-iso image (/etc/profile.d/clawdie.sh,
all login shells), but the agent jail is a separate environment that never reused
it — a fresh Bastille jail doesn't inherit the image's profile.d, and the
bootstrap set no PATH. PR #120 band-aided it with a hardcoded append to one
user's ~/.profile (sh-only, drifts from NPM_PREFIX).

Replace that band-aid with the same mechanism the image uses, scoped to the jail:
- write one managed /etc/profile.d/clawdie-npm.sh derived from NPM_PREFIX
- source it from /etc/profile (covers all sh/bash login shells, system-wide),
  idempotently
- delete the per-user ~/.profile append from #120

Now the PATH content lives in a single file tied to NPM_PREFIX, so it can't miss
shells or drift from the prefix. Follow-up (not here): hoist the snippet into one
shared file installed by both clawdie-iso and the jail bootstrap, so a future new
environment can't re-grow this.

Verified: sh -n clean; smoke test — snippet expands NPM_PREFIX (keeps $PATH
literal), /etc/profile sources it, append is idempotent, sourced shell resolves
the npm-global bin onto PATH.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 08:59:33 +02:00
.forgejo/workflows chore(jails): CI guard for agent-jail package drift vs clawdie-iso 2026-06-20 22:39:34 +02:00
crates fix(vault): canonicalize + allowed-root containment on provision target (#92) 2026-06-20 22:58:30 +02:00
docs chore(docs): prettier-fix pre-existing markdown drift 2026-06-20 17:48:35 +02:00
manifests Add USB live runtime inventory golden test 2026-06-04 12:46:34 +00:00
packaging/freebsd fix(bootstrap): set jail npm PATH via /etc/profile.d, drop per-user .profile hack 2026-06-21 08:59:33 +02:00
scripts feat(backup): domedog-side pull script for Forgejo+Vault (off-box independence) 2026-06-20 10:52:26 +02:00
src Auto-load .env for the DeepSeek probe; gitignore .env (Sam & Claude) 2026-05-26 14:27:41 +02:00
tests feat(rc): rename test agent and load provider env (Sam & Codex) 2026-06-15 07:35:44 +02:00
.env.example Auto-load .env for the DeepSeek probe; gitignore .env (Sam & Claude) 2026-05-26 14:27:41 +02:00
.gitignore Auto-load .env for the DeepSeek probe; gitignore .env (Sam & Claude) 2026-05-26 14:27:41 +02:00
.prettierignore chore: adopt markdown formatting gate + one-shot prettier sweep (Sam & Claude) 2026-06-04 20:13:47 +02:00
.prettierrc chore: adopt markdown formatting gate + one-shot prettier sweep (Sam & Claude) 2026-06-04 20:13:47 +02:00
AGENTS.md chore: cut proof-gate ceremony, keep the tests (#76) 2026-06-15 17:57:01 +02:00
Cargo.lock release: colibri 0.11.0 + relicense AGPL-3.0 -> MIT 2026-06-20 22:05:47 +02:00
Cargo.toml release: colibri 0.11.0 + relicense AGPL-3.0 -> MIT 2026-06-20 22:05:47 +02:00
LICENSE release: colibri 0.11.0 + relicense AGPL-3.0 -> MIT 2026-06-20 22:05:47 +02:00
README.md feat(rc): rename test agent and load provider env (Sam & Codex) 2026-06-15 07:35:44 +02:00
rust-toolchain.toml Scaffold Colibri Phase 1: colibri-probe DeepSeek cache smoke (Sam & Claude) 2026-05-26 10:08:23 +02:00

Colibri

The Clawdie control plane core — a small, cross-platform (FreeBSD + Linux) Rust daemon that unifies coordination (task board, agent registry, skills catalog) with cache-first cost discipline (byte-stable prompt prefixes, cache-hit metering).

Status: workspace gates are fmt/clippy/test/release green. Round 2 audit is closed. Current priorities: ISO boot/runtime validation, Pi spawn end-to-end, and cost-mode enforcement (see docs/PRIORITY-HANDOFF-ISO-SPAWN-COST.md). Avoid fixed crate/test counts here — see the crate table below and run the gate commands for the current state.

FreeBSD build lane handoff: docs/FREEBSD-BUILD-LANE-HANDOFF.md. ISO acceptance runbook: docs/ISO-ACCEPTANCE-RUNBOOK.md. Clawdie Studio/Zed proposal: docs/CLAWDIE-STUDIO-PROPOSAL.md. External MCP host prototype: docs/COLIBRI-EXTERNAL-MCP-PROTOTYPE.md. Optional Headroom compression sidecar: docs/HEADROOM-SIDECAR.md.

Workspace

Crate Role
colibri (root) Workspace root + probe binaries (colibri-probe, runtime-inventory)
colibri-mcp MCP bridge for editor integration (Zed, Claude Code) via stdio JSON-RPC
colibri-contracts JSON schema contracts (golden tests)
colibri-deepseek DeepSeek cache-hit probe, prefix metering
colibri-runtime Host status ingestion, runtime inventory
colibri-glasspane Agent 5-state machine (zot/pi JSONL events → state)
colibri-daemon Always-on Unix socket server, session lifecycle
colibri-client Typed Unix-socket client + operator CLI
colibri-glasspane-tui ratatui live dashboard (FreeBSD-native)
colibri-store Embedded SQLite coordination (task board, agents, skills)
colibri-skills Skills catalog crate
clawdie Host installer/deployer: ZFS layout + clawdie service (FreeBSD/Linux)

Build

cargo build --release

Test

cargo test --workspace
cargo clippy --workspace --all-targets -- -D warnings

Architecture

colibri-daemon (always-on Unix socket server)
  ├── glasspane      — agent state machine (zot/pi JSONL → idle/working/blocked/done)
  ├── store          — SQLite coordination (tasks, agents, skills)
  ├── socket         — newline-JSON socket API
  ├── session        — append-only JSONL sessions, 3-region prompt assembly
  └── spawner        — agent subprocess management (retry/backoff, FreeBSD jail confinement)

colibri-client       — CLI tools (colibri, colibri-test-agent)
colibri-glasspane-tui— ratatui dashboard

Probe binaries

# DeepSeek cache probe (needs DEEPSEEK_API_KEY)
cargo run --release --bin colibri-probe

# Runtime inventory manifest
cargo run --release --bin colibri-runtime-inventory

FreeBSD

Target x86_64-unknown-freebsd (Rust Tier-2). TLS is rustls to avoid openssl-sys linking. Default DB path: /var/db/colibri/colibri.sqlite.