Skip to content

Commit 2ef0aeb

Browse files
Ubuntuclaude
andcommitted
docs: revise multi-agent-harness-landscape with user feedback
User-direction changes from review of v1 of the doc: - §5.0 (new grounding section) captures two cross-host facts I had to verify in the codebase before answering questions about the fleet model: * agents.project_id and agents.host_id are independent — two agents in one project on two hosts is a supported config. * Cross-host file sharing works today for ≤25 MiB via the hub blob store. >25 MiB has a design slot (host-served URIs per blueprint §4) but no host-runner serve-bytes endpoint yet. Both make A1 (mailbox three-state lifecycle) more urgent than the abstract pitch suggested. - OAuth-enabled MCP moves from Tier A to Tier C (deferred post-MVP) — multi-week spec work for tier-3 ergonomics that bring-your-own- bearer already covers. - Auto-compaction preserving task state (former B4) moves to Tier C — claude-code and codex both ship native /compact surfaces; layering a hub carry-forward is not urgent until a real user-visible incident lands. - Tier A renumbered: A1 mailbox, A2 fallback chains (was A3), A3 doctor (was A4). - §6 frontier-signal #3 softened correspondingly — long-session survival is a shared frontier, not the strongest near-term wedge. - TL;DR rewritten to match. No version bump (doc-only). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
1 parent bdae459 commit 2ef0aeb

1 file changed

Lines changed: 57 additions & 29 deletions

File tree

docs/discussions/multi-agent-harness-landscape.md

Lines changed: 57 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,17 @@ orchestrating Claude Code / Codex / ACP). The pattern that is winning
1515
is **"harness on top of a stochastic-executor engine"** — exactly
1616
TermiPod's architecture. We are not behind the frontier; we are in
1717
the 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

2630
Companion to [integrating-open-source-agents.md](integrating-open-source-agents.md),
2731
which 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

245249
Ranked 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
257287
load-bearing piece — we would otherwise reinvent it after a stuck-
258288
message 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
267291
config. `agent_families.yaml` drives engine selection but lacks
268292
graceful 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
271295
allowlist-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`
275299
but no deep introspection that lists *(runtime-injected MCPs / loaded
276300
YAML profiles / spawned agents / tmux pane status / migration
277301
version)*. Lands as `hub/cmd/hub-server/doctor.go` or as a
@@ -312,15 +336,18 @@ mobile session-details sheet.
312336
composition primitives in the template loader would let users
313337
override 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

Comments
 (0)