The operator CLI was already a subcommand dispatcher; drop the -ctl suffix so
it reads `colibri status` / `colibri snapshot` / `colibri spawn-local …` — one
`colibri` entrypoint (same single-binary-with-subcommands shape as just, but a
control plane). Renames the bin + its source file, updates usage strings, and
points the forward-looking docs at `colibri`. Dated session/handoff records
are left as historical. (Task-board subcommands intake/create/list are the
follow-up T1.3c slice.)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
packaging/freebsd/colibri_daemon.in: FreeBSD rc.d service file
for review only, not installed. Uses /var/db/colibri,
/var/run/colibri, COLIBRI_DB_PATH. /tmp smoke test comes first.
Flesh out Decision #1 (SQLite-first) with the operational surface and make
Lane 2 explicitly non-blocking for core correctness:
- Storage surface (proposed defaults): DB file path (FreeBSD /var/db/colibri,
Linux XDG, COLIBRI_DB_PATH override); WAL + synchronous=NORMAL, local FS only;
backup via VACUUM INTO + JSON contract export; authoritative (task/agent/
scheduling) vs mirrored (Pi events, watchdog host-status, inventory).
- Postgres-escalation criterion: one concrete rule — only if Lane 4 dual-run
parity proves SQLite insufficient for required cross-host shared state.
- Failure mode: DB corrupt/unavailable => fail safe, no takeover; watchdog/hostd
and local FreeBSD safety stay authoritative.
- Lane 2: gates IMG deployment only, never Colibri core correctness.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- COLIBRI-CUTOVER-PLAN.md: resolve Open Decision #1 — Colibri owns its own
store, embedded SQLite first, Postgres adapter only if parity/integration
proves the need (do not default to reusing clawdie-ai system_ops). Reaffirm
the Herdr boundary. Update Lane 1 T1.2 + Next actions accordingly.
- .agent-handoff.md: relay to Hermes — 0925939 is the shared verified plan,
the .hermes draft is superseded where it conflicts, storage decided. FYI,
not a debate.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Verified, shared version of the cutover orchestration plan in docs/,
correcting the .hermes/plans draft against the actual repos:
- Kill the fabricated clawdie-ai crates/colibri-daemon (no crates/ dir
exists there; the real daemon is Unix-socket in the colibri repo, not
axum/HTTP).
- Fix baseline to 160dd11 (65 tests pass/0 fail, clippy -D warnings clean);
eb37784 was not clippy-clean.
- Reaffirm the Herdr boundary: Linux/macOS display/remote plane, no Herdr
on FreeBSD; colibri-glasspane is the native answer (Lane 2 reframed).
- Correct ownership: Claude=domedog=Linux, Codex=osa=FreeBSD, Hermes=debby=Linux.
- Surface the Postgres coupling as an explicit open decision, not a given.
- Downgrade the overclaimed debby<->domedog herdr smoke test to "not yet done."
Leaves the .hermes draft untouched; marked DRAFT/PROPOSED pending ratification.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Operator runbook for standing up domedog as the Herdr testing hub, attaching
debby as a remote client over Tailscale SSH, then layering Colibri supervision.
Records verified state: hub running (Herdr 0.6.2), pi integration installed,
debby's key already authorized + ssh config present, remaining gap = herdr
client not yet installed on debby. Includes the key-safety note (public keys
safe; never transit private keys) and the IPv6/Codeberg retry tip.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Make the Herdr boundary explicit now that Herdr-Linux-remote and
Colibri-FreeBSD are validated as separate planes:
- Herdr FreeBSD port is parked, not a migration blocker. The exploratory
FreeBSD build findings are kept for the record but framed as a parked
experiment, not a pending task.
- Herdr stays a Linux/macOS display/remote plane behind the socket contract;
colibri-glasspane is the native FreeBSD supervision answer.
Tighten stale status so it stops rotting:
- Replace the fixed "31 passed, 0 failed" count with "all gates green as of
b325c38" plus the clippy clean note.
- Anchor the top-level status line to commit b325c38.
Doc-only; no code or test changes.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
agent_state_from_jsonl / pi_event_type / pane_from_jsonl fold a live Pi --mode json stream through the AgentState machine and capture session id+cwd from the flat header. Lenient: blank/malformed/type-less lines are skipped. 8 tests pass (5 state model + 3 JSONL ingestion, incl. a verbatim pi 0.75.5 session header). Phase 1 unchanged.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
FreeBSD-native agent supervision reimplementing Herdr's glasspane (sessions/panes/agent-state) behind Colibri's unified API; Herdr stays an optional Linux display client (AGPL + Linux-only). Key bet: agent state is derived deterministically from Pi --mode json events (colibri-pi-events taxonomy), not terminal screen-scraping.
docs/COLIBRI-GLASSPANE-DESIGN.md: capability graph, 5-state model + event→state map, unified API, clawdie.glasspane.snapshot.v1 contract, FreeBSD impl notes, 5 phases. crates/colibri-glasspane: Phase-1 pure state model (AgentState, apply_pi_event/fold_pi_events, Pane, GlasspaneSnapshot) + 5 tests. PTY/socket server + orchestrator are later phases.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Read-only who-imports-what of the clawdie-ai TS drop candidates. Corrects the earlier drop list: agent-runner.ts (the Pi host runner, 4 callers) and jail-exec-runner.ts (jailPi load-bearing) are KEEP, not drops. Real safe drop set is narrow + contained in controlplane-heartbeat-executor.ts: the non-Pi backend branches (aider/codex, gated behind CONTROLPLANE_RUNNER) + tmux-screenshot-command (→ Herdr). Precondition: production CONTROLPLANE_RUNNER=pi. Plan only — execution is a separate gated PR.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Adds debby's runtime inventory to colibri-contracts golden coverage (12 tests pass) and marks gate #3 done. Three-host parity: osa/domedog/debby all on Node 24; Pi at 0.75.5 on osa+domedog, absent on debby (non-blocking follow-up). All five proof gates (#1-#5) are now green.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Graph-only comparison of Herdr (socket/PTY agent supervision) vs Colibri (DeepSeek-first Rust) vs clawdie-ai TS, across supervision/coordination/execution/provider+cache. Hybrid boundary: Herdr stays an optional Linux client (AGPL + Linux/macOS-only); FreeBSD core is native. Unified function-names committed for the provider+cache layer (proven); other layers proposed/roadmap. Gated drop candidates concentrated in tmux/glass-pane supervision glue, non-Pi runners, and bespoke provider-smoke paths; coordination control-plane kept+extended. Flexibility matrix (agents/surfaces/providers) preserved.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Implement the Colibri runtime HostStatus reader, add mock and live osa watchdog evidence, and mark gate #5 complete without changing production TypeScript paths.
---
Build: pass
Tests: pass — 11 golden + 5 runtime tests
Graph-only artifact (no code): Mermaid + JSON nodes/edges + gap list + risk list for porting the watchdog host-status reader to Rust. Grounds the port in the real coupling: watchdog.ts owns the socket; doctor.ts + colibri-host-status.ts are the confirmed readers; pi-profile is keep-compatible (not a confirmed direct reader). The Rust reader is additive + read-only (cmd:status only) and replaces a contract, not production logic. Implementation/validation left to operator + Codex.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Record osa FreeBSD build/test and live DeepSeek cache evidence, add the manifests to golden contract coverage, and mark gate #4 complete in the migration inventory.
---
Build: pass
Tests: pass — 8 passed (golden contracts)
Gate #1 (contracts golden tests) and #2 (DeepSeek live cache manifest, 3584/3661 hit on domedog) marked done with evidence. Added a FreeBSD build-lane handoff for Codex on osa: cargo build/test --workspace, optional osa live-cache probe → osa cache manifest. Closes the FreeBSD half of gate #4.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Mark the migration inventory as approved for the first colibri-deepseek extraction while keeping TS production service paths gated.
---
Build: not run — documentation-only approval
Tests: not run — documentation-only approval
docs/MIGRATION-INVENTORY.md: TS surfaces to keep as contracts, files to retire later (gated), schemas to port, crate build order, and proof gates before replacing the TS service. Extract contracts, not logic.
crates/colibri-contracts: serde structs for clawdie.interagent.run-manifest.v1, clawdie.runtime-version-inventory.v1, clawdie.provider-smoke.result.v1. Root becomes a workspace; existing binaries unchanged. Golden tests round-trip the real committed osa+domedog manifests (5 passed) — a stable shared base before deeper refactor.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>