@@ -15,13 +15,17 @@ orchestrating Claude Code / Codex / ACP). The pattern that is winning
1515is ** "harness on top of a stochastic-executor engine"** — exactly
1616TermiPod's architecture. We are not behind the frontier; we are in
1717the same lane. The most directly borrowable pieces are omo's
18- filesystem-mailbox three-state lifecycle, OAuth-enabled MCP loader,
19- per-agent fallback model chains, and a deep-introspection ` doctor `
20- command. The hook-taxonomy framing surfaces a recovery-layer gap
21- that v1.0.711 (` a2aPosterTap ` mask) and v1.0.722 (recursive
22- disconnect) both pointed at. This doc inventories the landscape and
23- ranks what to borrow; concrete picks belong in follow-up plans or
24- ADRs.
18+ filesystem-mailbox three-state lifecycle (urgent because cross-host
19+ A2A — including blob-attachment payloads — already moves real bytes
20+ through the hub), per-agent fallback model chains, and a deep-
21+ introspection ` doctor ` command. The hook-taxonomy framing surfaces a
22+ recovery-layer gap that v1.0.711 (` a2aPosterTap ` mask) and v1.0.722
23+ (recursive disconnect) both pointed at. OAuth-enabled MCP and auto-
24+ compaction are deferred — the former adds weeks of spec work for
25+ post-MVP ergonomics; the latter overlaps with engine-native
26+ ` /compact ` surfaces in claude-code and codex. This doc inventories
27+ the landscape and ranks what to borrow; concrete picks belong in
28+ follow-up plans or ADRs.
2529
2630Companion to [ integrating-open-source-agents.md] ( integrating-open-source-agents.md ) ,
2731which asks "can these engines drop into our [ driving modes] ( ../reference/glossary.md#driving-mode )
@@ -244,6 +248,32 @@ would surface convergent or divergent decisions cleanly.
244248
245249Ranked by * fit × leverage × cost* .
246250
251+ ### 5.0 Grounding — what already works cross-host
252+
253+ Before reading the borrow list it helps to know what cross-host
254+ coordination TermiPod already supports today. Two facts that change
255+ which pieces are urgent:
256+
257+ - ** Cross-host project membership works.** ` agents.project_id `
258+ (` hub/migrations/0040_agents_project_id.up.sql:18 ` ) and
259+ ` agents.host_id ` (` hub/migrations/0001_initial.up.sql:44 ` ) are
260+ independent columns; no constraint binds a project to a single
261+ host. Two stewards under the same project on different hosts is a
262+ supported configuration — A2A through the hub's reverse-tunnel
263+ relay carries their messages.
264+ - ** Cross-host file sharing works for ≤25 MiB via the hub blob
265+ store.** ` hub/internal/server/handlers_blobs.go:22-65 ` puts bytes
266+ at ` <DataRoot>/blobs/<aa>/<bb>/<sha> ` on POST and serves them on
267+ GET. Agent A uploads → references the sha in an A2A envelope or
268+ artifact row → Agent B downloads. Above 25 MiB the design slot
269+ exists (blueprint §4: hub holds references, hosts hold bytes) but
270+ the host-runner serve-bytes endpoint is not implemented yet.
271+
272+ Both facts make ** A1 (mailbox three-state lifecycle) more urgent
273+ than the abstract pitch suggests** — every cross-host A2A envelope
274+ that references attached bytes is a real file transfer that should
275+ survive host-runner crash with a defined in-flight state.
276+
247277### 5.1 Tier A — borrow soon, well-shaped pieces
248278
249279** A1. Mailbox three-state lifecycle for A2A.** Adopt
@@ -257,21 +287,15 @@ crash. Lands in `hub/internal/server/handlers_a2a.go` or a new
257287load-bearing piece — we would otherwise reinvent it after a stuck-
258288message incident.
259289
260- ** A2. OAuth-enabled MCP servers** (RFC 9728 + 8414 + 7591 + PKCE
261- + auto-refresh + 0600 token store). We assume MCP servers are
262- bring-your-own-bearer. Sites: ` hub/internal/hubmcpserver/ ` . Multi-day
263- implementation, not a wedge, but the spec work is already done by
264- the RFCs.
265-
266- ** A3. Per-agent fallback model chains** with variant + thinking
290+ ** A2. Per-agent fallback model chains** with variant + thinking
267291config. ` agent_families.yaml ` drives engine selection but lacks
268292graceful degradation. Lands as a new ` fallback_models: ` key in
269293` hub/internal/agentfamilies/agent_families.yaml ` , consumed by
270294` hub/internal/hostrunner/launch_*.go ` . Pairs naturally with the
271295allowlist-over-denylist discipline already documented in
272296[ consumer-side-dispatch-contracts.md] ( consumer-side-dispatch-contracts.md ) .
273297
274- ** A4 . Doctor command (` hub doctor --verbose ` ).** We have ` /health `
298+ ** A3 . Doctor command (` hub doctor --verbose ` ).** We have ` /health `
275299but no deep introspection that lists * (runtime-injected MCPs / loaded
276300YAML profiles / spawned agents / tmux pane status / migration
277301version)* . Lands as ` hub/cmd/hub-server/doctor.go ` or as a
@@ -312,15 +336,18 @@ mobile session-details sheet.
312336composition primitives in the template loader would let users
313337override one section without forking a whole prompt. Cheap.
314338
315- ** B4. Auto-compaction preserving task state** (OpenHarness's
316- headline). Mobile-first means our users * will* hit context limits.
317- The pattern: serialize the live task list + recent attention items +
318- last N ` agent_events ` to a "carry-forward" blob that gets injected
319- after ` /clear ` . Pairs with ADR-029. Significant; roadmap-scale, not
320- a wedge.
321-
322339### 5.3 Tier C — watch, don't copy
323340
341+ - ** Auto-compaction preserving task state** (OpenHarness's
342+ headline). claude-code and codex both ship their own
343+ context-compaction surfaces (` /compact ` , automatic on context
344+ pressure) which already preserve the engine record; layering a
345+ hub-side carry-forward on top is not urgent. Re-open if a real
346+ user-visible "tasks vanished after compaction" incident lands.
347+ - ** OAuth-enabled MCP servers** (RFC 9728 + 8414 + 7591 + PKCE +
348+ auto-refresh + 0600 token store). Deferred to post-MVP — adds
349+ weeks of spec implementation to support a tier-3 MCP ergonomics
350+ that bring-your-own-bearer already covers for our user shape.
324351- ** Hash-anchored edit (Hashline)** — engine-side; Claude Code's
325352 Edit tool already does this. Not our layer.
326353- ** Ralph loop completion marker** — we have ` /loop ` with cron +
@@ -369,13 +396,14 @@ specifics:
369396 should match the crash-recovery properties of the filesystem
370397 pattern (the ` .delivering- ` TTL is the load-bearing piece).
371398
372- 3 . ** The next 6 months will reward whoever solves long-session
373- survival.** OpenHarness leads with auto-compaction; omo has
374- session-recovery + intelligent compaction. Mobile-first makes
375- this acute for us. ADR-029 + ADR-030 + ADR-032 are the right
376- primitives; the missing piece is the carry-forward serialization
377- that survives ` /clear ` . This is the strongest candidate for the
378- next strategic wedge.
399+ 3 . ** Long-session survival is a shared frontier.** OpenHarness
400+ leads with auto-compaction; omo has session-recovery +
401+ intelligent compaction. Mobile-first makes this acute for us in
402+ theory — but claude-code and codex both ship their own
403+ ` /compact ` surfaces today, so the user-visible gap is smaller
404+ than the marketing suggests. Re-evaluate if/when a real
405+ "context-pressure lost my tasks" incident lands; until then the
406+ engine-native compaction does the work.
379407
380408---
381409
0 commit comments