adr: define stable agent platform interface contract (execute / getEvents / emitEvent / wake / provision) #36
Open
opened 2026-06-05 18:39:35 +00:00 by mathias
·
1 comment
No Branch/Tag Specified
main
fix/pipeline-writes-158
fix/edit-path-io-192
fix/create-regular-188
fix/guard-special-179
fix/linkcheck-keeps-write-178
fix/write-dir-redirect-173
fix/tunnel-detect-174
fix/pipeline-root-157
w3/154-mcp-auth-wiring
fix/tunnel-traversal
test/in-brain-targets-171
fix/brain-scan-root-157
fix/graph-wiki-root-157
fix/vectorstore-root-157
fix/notes-root-157
fix/search-root-157
fix/brainwide-root-157
fix/raw-symlinks-153
feat/symlink-tripwire-157
fix/rest-auth-149
fix/123-brain-edit-envelope-check
feat/106-page-aware-extraction
fix/105-source-drift-on-main
fix/104-surface-merge-conflicts-on-main
agent/b1-compile-on-ingest
agent/104-surface-merge-conflicts
agent/105-source-drift
agent/107-loud-unconfigured-alerting
feat/brain-read-edit
fix/capture-i1-refusal-names-target
renovate/configure
feat/consolidate-single-harness
icebox/cmd-routing
feat/brain-pending-promote
fix/close-session-classification-refresh
fix/capture-summarywriter
v0.24.0
v0.23.1
v0.23.0
v0.22.0
v0.21.1
v0.21.0
v0.20.1
v0.20.0
v0.19.1
v0.19.0
v0.18.4
v0.18.3
v0.18.2
v0.18.1
v0.18.0
v0.17.0
v0.16.1
v0.16.0
v0.15.0
v0.14.0
v0.13.2
v0.13.1
v0.13.0
v0.12.1
v0.12.0
v0.11.2
icebox/cmd-routing-2026-07-01
v0.11.1
v0.11.0
v0.10.0
v0.9.0
v0.8.0
v0.7.0
v0.6.0
v0.5.0
v0.4.1
v0.4.0
v0.3.0
v0.2.0
v0.1.0
Labels
Clear labels
agent/ready
blocked/client
blocked/supplier
blocked/upstream
risk/high
risk/low
risk/medium
size/l
size/m
size/s
size/xs
status:dispatch
status:dispatched
status:review
status:reviewing
type/chore
type/decision
type/docs
type/feat
type/fix
type/ops
type/research
type/test
Meets the agent-ready contract; authorizes unattended execution
Waiting on the client
Waiting on a supplier
Waiting on an upstream project or vendor
Irreversible, security-relevant, or control plane
Reversible, local, test-covered
Touches shared state, deploys or data
Too big - split it
Under two days
Under half a day
Under an hour
Maintenance, no behaviour change
Human decision required; never agent/ready
Documentation only
New capability
Corrects broken behaviour
Infrastructure, deploy, runtime
Investigate; output is a finding, not code
Test coverage only
Milestone
No items
No Milestone
Projects
Clear projects
No projects
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: mathias/hyperguild#36
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Context
Anthropic's Managed Agents engineering blog (2026-04-08) documents a design decision directly applicable to the homelab platform: stable interfaces over stable implementations. The five canonical calls they settled on are:
execute(name, input) → string— invoke a hand (sandbox or tool)getEvents(sessionId, slice)— read positional slices of the session logemitEvent(sessionId, event)— write a durable event during the agent loopwake(sessionId)— reboot a crashed harness and resume from last eventprovision({resources})— spin up a new sandbox on demandThe principle: these names stay constant; implementations underneath change freely. This is the OS-abstraction pattern —
read()is agnostic whether it's a 1970s disk pack or an SSD. Same idea here.The homelab currently has:
None of these have an explicit, written interface contract that defines what names are stable across harness evolution. Without it, any harness change risks requiring data migration or breaking agentsquad ↔ hyperguild coordination.
Why now
This is a prerequisite to the skills platform overhaul (#25) and any future multi-agent work — those assume a stable calling convention. Defining the contract costs little now; retrofitting it after three harness generations costs a lot.
The brain note
knowledge/claude-managed-agents-architecture-notes-relevant-to-homelab-agent-platform.mdhas the full Managed Agents → homelab mapping table as a starting point.Deliverable
An ADR written to
docs/adr/NNNN-agent-platform-interface-contract.mdin this repo (ormathias/infra, whichever is the canonical ADR home) covering:wakeequivalent)Relationship to open issues
References
knowledge/claude-managed-agents-architecture-notes-relevant-to-homelab-agent-platform.mdmathias/agentsquad— homelab many-hands implementationmathias/mcp-chassis— credential proxy (Managed Agents vault pattern equivalent)DECISION NEEDED
Question: Does a stable multi-harness interface contract (execute/getEvents/emitEvent/wake/provision) still make sense now that #75 consolidated to a single harness, or should this close/re-scope?
Context: This issue's whole premise is that hyperguild + agentsquad + mcp-chassis are separate harness/orchestration layers that need a stable calling convention between them so future harness evolution doesn't break their coordination. Per #75 (closed 2026-08-19): agentsquad's peer-to-peer/multi-agent capability was explicitly dropped, not carried forward into hyperguild ("icebox, no resurrection commitment"). The live harness is now
cmd/hyperguildalone + brain-mcp + gitea-mcp. There may no longer be a second harness for this interface to mediate between.Options:
cmd/hyperguild↔mcp-chassis's own credential-proxy contract instead (still two real components, still worth stabilizing).Recommendation: A — #75's decision already answered the "how many harnesses" question this issue assumed was still open; a contract for a coordination problem that no longer exists is speculative work, and the general-purpose principle (stable names, swappable implementations) can be revisited cheaply if a second harness is ever actually built.
Blocks: nothing else currently — this issue isn't in another issue's dependency chain per my check. Not closing myself; this is your call, not an autonomous one. Cascade re-triage per hyperguild#75, 2026-08-19.