Commit graph

50 commits

Author SHA1 Message Date
040f56316d docs: record d360dde post-merge baseline
Linux + FreeBSD validation green. All 4 PRs merged.
Known caveats: OSA kernel p8 running / p9 pending reboot,
colibri-skills and zot harness are scaffold-only.
2026-05-31 16:18:59 +02:00
65e304a1e0 Merge pull request 'feat: scaffold colibri-skills crate — split-brain read consumer' (#2) from feat/colibri-skills-scaffold into main 2026-05-31 16:03:12 +02:00
7c1a9d886a feat: add PromptAssembly + CacheMetrics structs (T1.4 PR 1)
Structural only — no behavior change. Introduces:

- PromptAssembly: named 3-region wrapper around build_prompt_messages()
  with to_messages(), immutable_prefix, appendable_log, volatile_scratch,
  total_bytes, estimated_tokens.

- CacheMetrics: per-session cache-hit tracking with hit_rate() and
  record().

- Session::build_prompt_assembly() wraps existing build_prompt_messages()
  with no logic change.

- 5 golden tests: assembly structure, empty volatile, hit rate
  calculations, record accumulation.

- Linked T1.4-PROMPT-DISCIPLINE-PLAN.md from COLIBRI-CUTOVER-PLAN.md.

No trimming, no escalation, no scheduler changes — PR 2 and 3 follow.

Parked branches (colibri-skills, zot harness) untouched.

Build: pass | Tests: 41/41 green (+5 new) | Clippy: clean | Fmt: clean
2026-05-31 15:30:38 +02:00
39db0b661b docs: T1.4 cache-first prompt discipline plan
Inventory of current prompt/cache/session code across Colibri:
- cost.rs: CostMode (fast/smart/max), thresholds, escalation (present)
- session.rs: 3-region prompt assembly, compaction (present)
- colibri-deepseek: STABLE_SYSTEM_PREFIX, cache probe (present)
- config.rs: DaemonConfig with cost fields (present)

Plan adds 6 integration items across 3 PRs:
1. PromptAssembly + CacheMetrics structs
2. Cost-aware trimming + auto-escalation
3. Scheduler injection + cache warming

No changes to parked branches (colibri-skills, zot harness).

Build: N/A (docs-only) | Tests: N/A
2026-05-31 15:30:38 +02:00
8b419f79ed docs: align skills plan with scaffold (Sam & Codex)
Validation: cargo fmt --check; cargo clippy -p colibri-skills --all-targets -- -D warnings; cargo test -p colibri-skills; git diff --check.
2026-05-31 14:39:49 +02:00
56ffa8e596 docs: cut over Colibri remotes to Forgejo (Sam & Claude)
Validation: docs-only; git diff --check.
2026-05-29 09:03:59 +02:00
a69d0059b0 docs: consolidate ISO planning docs 2026-05-27 23:17:35 +02:00
4880502d18 docs: tighten Clawdie Studio Zed integration guardrails 2026-05-27 23:13:27 +02:00
aa15654ae2 docs: propose Clawdie Studio — integrated editor + control plane
Proposal for a unified Colibri + Zed experience where the operator
can edit docs/code while simultaneously running and observing agents,
tasks, and scheduler from one visual surface.

Three integration levels:

1. Near-term: Zed as visual shell over colibri-daemon socket
   (sidebar extension, one-app experience, not one binary)

2. Mid-term: colibri-mcp MCP bridge (highest leverage)
   - Zed already supports MCP natively
   - Reuses colibri-client crate directly
   - Editor-agnostic (works with any MCP-capable editor)
   - 7 Phase-1 tools defined (status, snapshot, tasks, intake, etc.)

3. Long-term: true single binary (not recommended now)
   - Colibri must run headless at boot even when editor is closed

Product shape:
  colibri-daemon (service) + colibri-mcp (bridge) + colibri-studio
  (launcher) + Zed extension. Two new thin binaries, no existing
  crates change.

Estimated: ~1 week of focused agent time for MCP Phase 1 + launcher.
2026-05-27 23:11:23 +02:00
f3a221330b docs: add ISO acceptance tracker and staging helper 2026-05-27 22:52:59 +02:00
2b01d8dad8 docs: add ISO integration plan 2026-05-27 22:43:51 +02:00
4c92a387ba docs: record colibri task CLI smoke 2026-05-27 22:24:41 +02:00
123kupola
12596d1a71 docs: mark T1.3b FreeBSD smoke done, next: Herdr attach or T1.4 (Sam & Hermes) 2026-05-27 22:20:11 +02:00
8d4bb3a916 refactor: rename colibri-ctl binary to colibri (Sam & Claude)
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>
2026-05-27 21:50:36 +02:00
8199e23890 docs: record OSA intake scheduler re-smoke 2026-05-27 21:09:26 +02:00
61b008ac6a docs: record OSA FreeBSD daemon smoke finding 2026-05-27 20:13:46 +02:00
123kupola
db5737bcdb feat: add prototype rc.d service + fix plan wording (Sam & Hermes)
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.
2026-05-27 19:30:51 +02:00
123kupola
7687976583 docs: simplify T1.3b — prototype smoke test, not cautious deployment (Sam & Hermes) 2026-05-27 19:27:28 +02:00
123kupola
d6a3c81237 docs: next slice — FreeBSD daemon bring-up, defer Herdr attach (Sam & Hermes) 2026-05-27 19:24:14 +02:00
99de050514 docs: record scheduler FreeBSD store isolation finding 2026-05-27 19:15:05 +02:00
a48afa1c0a fix: harden scheduler tests and FreeBSD store isolation 2026-05-27 19:13:20 +02:00
123kupola
ceaeaee658 feat: add scheduler — cron/interval/one-shot execution (Sam & Hermes)
T1.3 Phase 4: execution & scheduling. New scheduler module with:
- Schedule types: Once (ISO timestamp), Interval (every N secs), Cron (5-field)
- 12 scheduler unit tests (cron matching, interval firing, leader/delegate)
- Leader/delegate: capability-match agent selection (pick_agent)
- Intake-task socket command for Telegram/remote task submission
- 4th daemon loop tick (scheduler_tick, every 30s)
- Plan baseline updated: ebc1b99, 72 tests, 8 crates
2026-05-27 19:05:20 +02:00
743aac19dc docs: storage ownership surface + escalation/failure-mode + Lane 2 non-blocking (Sam & Claude)
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>
2026-05-27 16:19:28 +02:00
0924b76a38 docs: clarify colibri-skills phase zero 2026-05-27 16:17:25 +02:00
4cefb25738 docs: record SQLite-first storage decision + relay to Hermes (Sam & Claude)
- 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>
2026-05-27 16:15:01 +02:00
09259394b9 docs: add corrected shared cutover plan (Sam & Claude)
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>
2026-05-27 16:06:40 +02:00
7a2224456c Docs: add Herdr hub runbook (domedog hub → debby → Colibri) (Sam & Claude)
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>
2026-05-27 15:16:53 +02:00
c2655d1d41 Document planned colibri-skills split-brain lane (Sam & Codex) 2026-05-27 14:00:44 +02:00
862204c205 Docs: park Herdr-FreeBSD, anchor status to commit (Sam & Claude)
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>
2026-05-27 12:54:26 +02:00
07d04efa8a Add Colibri operator smoke CLI helpers 2026-05-27 12:19:24 +02:00
504608bab1 feat: add multiagent workflow improvements
Add three improvements to streamline multiagent development:

1. Agent Handoff Protocol (.agent-handoff.md)
   - Standardized handoff template and checklist
   - Handoff history with timestamps
   - Proof gate status tracking
   - Platform matrix documentation

2. Proof Gate Tracker (tools/proof-gate-tracker.rs)
   - Automated validation of all 6 proof gates
   - Instant visibility into gate status
   - Exit codes for CI/CD integration
   - Prevents gate regressions

3. Platform Matrix Tests (tests/platform-matrix.rs)
   - Cross-platform smoke test suite
   - Validates FreeBSD and Linux parity
   - Cache economics consistency checks
   - Platform-specific test cases

Documentation: docs/MULTIAGENT-WORKFLOW-IMPROVEMENTS.md
Tools: tools/README.md

These improvements standardize handoffs, automate validation,
and ensure cross-platform consistency for the TypeScript → Rust
migration workflow.
2026-05-27 12:09:40 +02:00
047a90427d Record Colibri live daemon client smoke report 2026-05-27 09:14:44 +02:00
fbcb7e6ca4 Add live daemon client smoke with local fake agent 2026-05-27 09:12:02 +02:00
Sam & Hermes
f65fdc7ad1 Update migration inventory to reflect Phase 1-4 complete (Sam & Hermes)
7 crates, daemon scaffolded, Herdr validated (builds, 1450/1453 tests),
TS files retired (budget, aider, codex, tmux-screenshot), gate #6 closed.
2026-05-27 03:41:01 +02:00
20809cda1d Start Phase 4 typed daemon client 2026-05-27 03:02:42 +02:00
123kupola
0e35c1bc27 Add daemon-glasspane integration contract (Sam & Hermes)
532-line technical spec covering:
- Socket API wire protocol (7 HerdrCommand variants, JSON dialogs)
- Pane-to-session mapping (4 ID namespaces, creation sequence)
- State flow (daemon lifecycle → 5 AgentState transitions)
- Unified API vocabulary (supervise.*, daemon.*, provider.*)
- clawdie.glasspane.snapshot.v1 contract (producer/consumer)
- Boot sequence (daemon starts first, glasspane embedded)
2026-05-27 02:57:22 +02:00
9ffdde0579 Add glasspane pane reader loop 2026-05-27 02:30:33 +02:00
97439234a6 Start glasspane Phase 3 pane supervision 2026-05-27 02:20:54 +02:00
7ab7b6d343 Sync glasspane Pi events and clippy hygiene 2026-05-27 02:15:09 +02:00
2f282f593d colibri-glasspane Phase 2: ingest real Pi --mode json JSONL (Sam & Claude)
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>
2026-05-27 02:03:09 +02:00
dbf82c0753 Add colibri-glasspane: design doc + Phase-1 state model scaffold (Sam & Claude)
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>
2026-05-27 01:22:52 +02:00
dc8371e6d5 Add caller inventory + retirement plan (gate #6 prerequisite) (Sam & Claude)
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>
2026-05-26 18:49:45 +02:00
961f8397f9 Close gate #3: debby inventory parity + golden test (Sam & Claude)
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>
2026-05-26 18:26:20 +02:00
d830db982e Add Herdr-vs-Colibri capability graph + drop map (Sam & Claude)
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>
2026-05-26 17:48:50 +02:00
30b87e0d38 Add read-only watchdog host-status reader (Codex)
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
2026-05-26 16:01:03 +02:00
f197eaddbf Add gate #5 migration graph (watchdog reader) (Sam & Claude)
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>
2026-05-26 15:19:28 +02:00
f216b90842 Close FreeBSD DeepSeek cache gate (Codex)
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)
2026-05-26 15:09:11 +02:00
0dc3e94209 Mark gate #2 done; hand FreeBSD build to Codex (Sam & Claude)
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>
2026-05-26 15:01:23 +02:00
cd21bde024 Record operator approval for DeepSeek slice
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
2026-05-26 13:29:28 +02:00
1fd4ad680b Add migration inventory + colibri-contracts crate (Sam & Claude)
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>
2026-05-26 13:23:45 +02:00