Summary
RFC 0070 (agents.manifestRuntime) made pack-declared AgentManifests loadable and dispatchable, and RFC 0072 pinned their inventory (GET /v1/agents) and dispatch path (WorkflowNode.agent + POST /v1/runs) to the normative run surface — but the dispatch _floor_ both specify is deterministic (a fixed sample projection), so "the agent ran" does not yet mean "the agent ran a live model, with its real tools, validated its structured output, and escalated on low confidence." This RFC specifies the normative mapping from an AgentManifest to a live agent run — model/provider selection from modelClass, prompt resolution (RFC 0028/0029), tool-surface construction from toolAllowlist (RFC 0002 §A14 + RFC 0064), memory binding from memoryShape (RFC 0004/0057/0068), inbound/outbound schema validation from handoff.*SchemaRef, confidence escalation from confidence.defaultThreshold (RFC 0002 §F), and terminal result projection — gated behind an additive optional capabilities.agents.liveRuntime. It adds a content-free agent.invocation.started / agent.invocation.completed event bracket around the existing agent.reasoned / agent.toolCalled / agent.toolReturned / agent.decided family, and requires all three invocation entry points (workflow node, run API, chat mention) to emit that one identical observable event family so an agent is portable end-to-end, not just portable-on-paper. Everything is advertisement-gated and additive; hosts that advertise only manifestRuntime keep today's floor behavior unchanged.
Motivation
docs/OPENWOP-AI-AGENT-PLATFORM-RECOMMENDATIONS.md §"RFC 0077" frames the gap precisely: RFC 0070/0072 make manifest agents _discoverable and runnable in principle, but the sample dispatch floor is still deterministic and does not prove live model/tool execution quality._ Three concrete gaps remain after 0070/0072:
- No normative manifest→live-run mapping. An
AgentManifestdeclaresmodelClass,systemPrompt/systemPromptRef,toolAllowlist,memoryShape,confidence, andhandoff.*SchemaRef(RFC 0003 +agent-manifest.schema.json), but the spec never says how a host turns those declarations into a running invocation: which of the eight steps are MUST, in what order, and what each one composes. Two independently-built hosts can both "support manifest agents" and produce divergent live behavior — one validatesreturnSchemaRef, one ignores it; one enforcesconfidence.defaultThreshold, one drops it — with no portable contract a client can rely on. - No live-runtime capability signal.
agents.manifestRuntimeadvertises "I loadagents[]and dispatch them on the orchestrator loop" — it deliberately permits the deterministic floor (RFC 0070 §D graceful-degradation ladder). There is no flag by which a host advertises "I execute these against live models and tools," so a client cannot tell a real agent run from a sample projection, and cannot pre-flight whether structured-output validation or confidence escalation will actually happen. - Three entry points, no unified observable family. An agent can be invoked three ways — as a
WorkflowNode.agentstep (RFC 0072 §B), as the root of aPOST /v1/runs("Run agent" directly), or via a chat@agentmention — but the spec does not require these to converge on one event family. Without that, a timeline/debugger/analytics consumer must special-case each entry point, and "the same agent" looks different depending on how it was launched.
The spec is the right place because manifest→live-run is a cross-host interop + observability + safety contract: an operator running a third-party agent needs to know its tool allowlist was enforced, its output was schema-validated, its low-confidence turn escalated rather than silently shipped, and its run is observable with the same event vocabulary regardless of entry point. The _algorithm_ (which model backs reasoning, the prompt-assembly internals, the inference of confidence) stays a host choice; this RFC pins the mapping's MUST-steps, the capability gate, the two bracket events, and the safety carry-forward.
Proposal
§A — capabilities.schema.json: additive optional agents.liveRuntime
"agents": {
"type": "object",
"properties": {
"supported": { "...": "unchanged" },
"manifestRuntime": { "...": "unchanged — RFC 0070 floor" },
"memoryConsolidation": { "...": "unchanged — RFC 0068" },
"commitments": { "...": "unchanged — RFC 0068" },
+ "liveRuntime": {
+ "type": "object",
+ "description": "RFC 0077. The host executes manifest agents against LIVE models and tools (not the deterministic RFC 0070 sample floor) per the normative manifest→live-run mapping (§B), and emits the agent.invocation.started/completed bracket (§C). REQUIRES agents.manifestRuntime.supported: true — liveRuntime is a strict superset of the floor. Hosts that omit this block run the floor only; the conformance behavioral scenarios skip cleanly.",
+ "additionalProperties": false,
+ "required": ["supported"],
+ "properties": {
+ "supported": { "type": "boolean", "description": "REQUIRED when present. true ⇒ the host performs live manifest dispatch per §B and emits the §C events." },
+ "structuredOutput": { "type": "boolean", "description": "true ⇒ the host validates the terminal result against the agent's handoff.returnSchemaRef (§B step 6) and fails the run with a structured-output error on a non-conforming result rather than shipping it. Absent ⇒ false (the host runs live but does not enforce returnSchemaRef)." },
+ "confidenceEscalation": { "type": "boolean", "description": "true ⇒ the host honors confidence.defaultThreshold and triggers the RFC 0002 §F escalation contract when an agent.decided confidence falls below threshold (§B step 7). Absent ⇒ false." },
+ "sources": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": { "type": "string", "enum": ["workflow-node", "run-api", "chat-mention"] },
+ "description": "Which invocation entry points the host exposes for live manifest dispatch (§D). `workflow-node`: an agent step inside a workflow run; `run-api`: an agent as the root of POST /v1/runs; `chat-mention`: a chat @agent invocation mapped onto the run surface. Absent ⇒ ['workflow-node'] (the RFC 0072 §B normative path). All listed sources MUST emit the identical §C/§E event family."
+ }
+ }
+ }
},
"additionalProperties": true
}
§B — Normative AgentManifest → live-run mapping (when agents.liveRuntime.supported: true)
A live manifest invocation MUST perform the following steps. Each composes an existing surface; this RFC pins which are MUST and their ordering, not the internal algorithm.
- Model/provider selection. The host resolves the manifest's abstract
modelClass(reasoning/writing/coding/research/classification/general) to a concrete model + provider it routes to. The mapping is host-defined; the host MUST keep it stable within a run for replay (the resolved model participates in the RFC 0041 LLM cache-key recipe). A run-time override MAY be supplied viaRunOptions.configurable.ai.*(RFC 0002), which takes precedence over themodelClassdefault. - Prompt resolution. The host resolves the system prompt from
systemPrompt|systemPromptRef(intrinsic, wins) withpromptOverrides/promptLibraryReffallback per theprompts.mdresolution chain (RFC 0028/0029). The host MUST emitagent.promptResolved(existing event) recording the resolved PromptRef identifiers (content-free per RFC 0028). - Tool-surface construction. The host constructs the agent's callable tool surface by filtering against
toolAllowlist(RFC 0002 §A14ToolPermissionService.filterToolsderivation pattern). A tool NOT in the allowlist MUST NOT be callable. When the host advertisescapabilities.toolHooks(RFC 0064), per-tool authorization MUST fail closed (forbidden) and tool calls MUST emitagent.toolCalled/agent.toolReturned. Absence oftoolAllowlistis host-policy ([]or host-default) peragent-manifest.schema.json. - Memory binding. The host binds the memory backends declared in
memoryShape(RFC 0004MemoryAdapter). WhenmemoryShape.longTerm: true, the host MUST apply the SR-1 redaction harness on writes (RFC 0004 §SR-1) and MAY emitmemory.written(RFC 0057) / participate in consolidation (RFC 0068). Memory reads are tenant-scoped (CTI-1). - Reasoning + tool loop. The host runs the agent turn(s): live model inference, tool calls through the §B-3 surface, emitting the existing
agent.reasoned/agent.reasoning.delta/agent.toolCalled/agent.toolReturnedevents. When the host advertisesmultiAgent.executionModel.version >= 5the loop composes RFC 0061's stateful agent-loop (per-iteration snapshots +maxLoopIterationsbound, RFC 0058); aliveRuntimehost that does not advertiseversion >= 5MAY run a single-shot turn (see Unresolved #5). - Handoff + structured-output validation. When
handoff.taskSchemaRefis present, the host MUST validate the inbound task payload against it before step 5 and reject a non-conforming task. Whenhandoff.returnSchemaRefis present AND the host advertisesliveRuntime.structuredOutput: true, the host MUST validate the terminal result against it and fail the run with a structured-output error rather than shipping a non-conforming result. Cross-agent handoffs emitagent.handoff(existing). - Confidence escalation. When the host advertises
liveRuntime.confidenceEscalation: true, anagent.decidedwhoseconfidencefalls below the effective threshold (confidence.defaultThreshold, or the run-resolved threshold per RFC 0002 §F, default 0.7) MUST trigger the RFC 0002 §F escalation contract (e.g., an escalation interrupt) rather than silently accepting the decision. - Terminal result projection. On termination the host projects the agent's terminal result onto the run's normal result surface (RFC 0002 run lifecycle). When the agent ran as a sub-run with
capabilities.agents.subRunAttestation(RFC 0063), the output attestation composes unchanged. The host MUST emitagent.invocation.completed(§C) as the final agent-scoped event.
§C — agent.invocation.started / agent.invocation.completed (additive, content-free)
A liveRuntime host MUST emit agent.invocation.started as the first agent-scoped event of a live invocation and agent.invocation.completed as the last, bracketing the existing family. Both are content-free (identifiers + metadata only — no prompt text, no result body, no secret-bearing payload; those live in the run's normal projection / SR-1-redacted surfaces). Both are recorded-fact events per replay.md §"Recorded-fact events" (the memory.written/RFC 0057 precedent): on replay against a checkpoint a host MUST re-emit them from the event log and MUST NOT regenerate their identifiers — notably invocationId — or timestamps. Because the payloads are content-free they introduce no non-deterministic body to diverge on.
+ "agentInvocationStarted": {
+ "type": "object",
+ "description": "RFC 0077. Emitted by a host advertising capabilities.agents.liveRuntime.supported: true as the FIRST agent-scoped event of a live manifest invocation. Content-free: identifiers + selection metadata only — prompt/task content is served by the run's normal projection, never on this event. Brackets the existing agent.* family with agent.invocation.completed.",
+ "required": ["invocationId", "agentId", "source"],
+ "properties": {
+ "invocationId": { "type": "string", "minLength": 1, "description": "Host-issued, stable id correlating this agent invocation within its run. Distinct from runId — one run MAY dispatch several agent invocations (e.g., a workflow with multiple agent nodes, or a handoff chain)." },
+ "agentId": { "type": "string", "minLength": 1, "description": "The manifest agentId being invoked (matches AgentManifest.agentId)." },
+ "source": { "type": "string", "enum": ["workflow-node", "run-api", "chat-mention"], "description": "Which entry point launched the invocation (§D). All sources emit this identical family." },
+ "modelClass": { "type": "string", "description": "MAY — the manifest's abstract modelClass (§B step 1)." },
+ "resolvedModel": { "type": "string", "description": "MAY — the concrete model the host selected. A host MAY omit for deployment-privacy reasons (see Unresolved #1)." },
+ "resolvedProvider": { "type": "string", "description": "MAY — the concrete provider the host routed to (aligns with capabilities.aiProviders.supported / RFC 0067 authModes)." },
+ "toolSurfaceCount": { "type": "integer", "minimum": 0, "description": "MAY — number of tools in the constructed surface after toolAllowlist filtering (§B step 3). Content-free count, not the tool ids." },
+ "memoryBound": { "type": "boolean", "description": "MAY — whether a long-term memory backend was bound (§B step 4)." }
+ },
+ "additionalProperties": true
+ },
+ "agentInvocationCompleted": {
+ "type": "object",
+ "description": "RFC 0077. Emitted by a host advertising capabilities.agents.liveRuntime.supported: true as the LAST agent-scoped event of a live manifest invocation. Content-free: identifiers + outcome metadata only — the result body is served by the run's normal projection. On replay re-read from the log, never regenerated.",
+ "required": ["invocationId", "agentId", "outcome"],
+ "properties": {
+ "invocationId": { "type": "string", "minLength": 1, "description": "Correlates to the agent.invocation.started invocationId." },
+ "agentId": { "type": "string", "minLength": 1, "description": "The manifest agentId." },
+ "outcome": { "type": "string", "enum": ["completed", "handed-off", "escalated", "refused", "failed"], "description": "Terminal disposition. `completed`: produced a (schema-valid, if enforced) terminal result. `handed-off`: control passed to another agent (agent.handoff). `escalated`: confidence escalation fired (§B step 7). `refused`: the model refused (RFC 0032 refusal envelope). `failed`: an error terminated the invocation." },
+ "schemaValidated": { "type": "boolean", "description": "MAY — whether the terminal result was validated against handoff.returnSchemaRef (true only when liveRuntime.structuredOutput is advertised and a returnSchemaRef exists; §B step 6)." },
+ "confidence": { "type": "number", "minimum": 0, "maximum": 1, "description": "MAY — the terminal agent.decided confidence, mirrored for convenience. Content-free scalar." },
+ "enqueuedRunId": { "type": "string", "minLength": 1, "description": "MAY — id of a follow-on run the invocation enqueued (e.g., a sub-run), when applicable." }
+ },
+ "additionalProperties": true
+ },
_typeIndex: "agent.invocation.started": { "$ref": "#/$defs/agentInvocationStarted" }, "agent.invocation.completed": { "$ref": "#/$defs/agentInvocationCompleted" }. run-event.schema.json $defs.RunEventType enum gains agent.invocation.started + agent.invocation.completed additively.
§D — Composition: workflow node, run API, chat mention
A live manifest agent is invocable three ways; all three MUST resolve to the same §B mapping and emit the identical §C/§E observable family:
workflow-node— aWorkflowNode.agentstep (RFC 0072 §B). The agent invocation is a node execution; it inherits the run's replay/fork/observability envelope. This is the defaultsourcesvalue and the RFC 0072 normative path.run-api— an agent as the root ofPOST /v1/runs(the "Run agent" surface). The run's root node IS the agent invocation; the run lifecycle (RFC 0002) wraps it. A host advertisingliveRuntime.sourcesincludingrun-apiMUST accept a run whose root references a manifestagentId.chat-mention— a chat@agentinvocation. The chat surface is host UX (non-normative), but when a host advertiseschat-mentionit MUST map the mention onto the same run surface and emit the identical event family — a chat-launched agent is observably indistinguishable from a node- or API-launched one. (Whetherchat-mentionis normative at all is Unresolved #3.)
The contract: one agent, one observable event family, three entry points. A consumer subscribing to agent.invocation. + the existing agent. family sees a uniform invocation regardless of how it was launched.
§E — Observable event family + ordering (normative)
For a single live invocation the agent-scoped events MUST appear in this order on the run's event log (modulo interleaved non-agent run events):
agent.invocation.started
→ agent.promptResolved
→ (agent.reasoning.delta* → agent.reasoned) # one or more reasoning turns
→ (agent.toolCalled → agent.toolReturned)* # zero or more tool calls
→ agent.decided # one or more decisions
→ agent.handoff? # optional, if control passes
agent.invocation.completed
agent.invocation.started MUST precede every other agent-scoped event of the invocation; agent.invocation.completed MUST follow them. The interior events are the existing family (RFC 0070/0037/0061) and are unchanged. This ordering is the testable surface for the always-on shape scenario's gated behavioral counterpart.
§F — Safety carry-forward (normative)
Live execution MUST NOT relax any RFC 0072 §D mandatory floor guarantee:
- Tool allowlist enforcement (§B step 3) is mandatory, not a sub-flag — a tool outside
toolAllowlistMUST NOT be callable even underliveRuntime. - Handoff inbound validation (§B step 6,
taskSchemaRef) is mandatory when the ref is present. - Tenant scoping (CTI-1) on memory and any enqueued run is mandatory.
- Live model output is untrusted — the host MUST treat model output per the RFC 0031/0032 envelope contract (
contentTrust, refusal handling); a refusal terminates the invocation withoutcome: "refused", never a silent substitution. - Per-tool authorization (when
toolHooksadvertised) fails closed (RFC 0049/0064).
structuredOutput and confidenceEscalation are advertised _quality_ sub-flags (a host MAY run live without them), but the five guarantees above are unconditional under liveRuntime.
Examples
Positive. A host advertising agents.liveRuntime: { supported: true, structuredOutput: true, confidenceEscalation: true, sources: ["workflow-node", "run-api"] } runs the vendor.acme.review.code-reviewer manifest as a POST /v1/runs root. The event log carries: agent.invocation.started { invocationId: "inv-1", agentId: "vendor.acme.review.code-reviewer", source: "run-api", modelClass: "coding", toolSurfaceCount: 3 } → agent.promptResolved → agent.reasoned → agent.toolCalled/agent.toolReturned (a tool from the allowlist) → agent.decided { confidence: 0.91 } → agent.invocation.completed { invocationId: "inv-1", outcome: "completed", schemaValidated: true, confidence: 0.91 }.
Negative (non-conformant behavior). The same host ships a terminal result that does not validate against the agent's handoff.returnSchemaRef but emits agent.invocation.completed { outcome: "completed", schemaValidated: true }. This is non-conformant by §B step 6 + §F — with structuredOutput: true advertised, a non-conforming result MUST fail the run (outcome: "failed"), not be reported as a validated completion.
Negative (schema). agent.invocation.started without source → fails validation (source required). agent.invocation.completed { outcome: "done" } → fails validation (done not in the outcome enum — the canonical value is completed).
Compatibility
Additive (COMPATIBILITY.md §2.1). agents.liveRuntime is a new optional sub-block on the existing agents object (additionalProperties: true); agent.invocation.started / agent.invocation.completed are two new additive RunEventTypes that existing consumers fold best-effort per observability.md §"Forward-compat". No existing field, event, error code, or endpoint changes. A host advertising only agents.manifestRuntime is unaffected — it keeps the RFC 0070 floor and emits none of the §C events; the behavioral conformance scenarios gate on liveRuntime.supported and skip cleanly. No existing conformance pass is invalidated.
Forward-compatibility clauses:
liveRuntimeoptional with no default emission by old hosts; consumers gate on its presence.- The two new event types are additive; a consumer pinned to the old
RunEventTypeenum tolerates unknown types per the fold-best-effort rule. - Both events are content-free and re-read from the log on replay — no new replay-regeneration surface (the §B-1 model resolution participates in the existing RFC 0041 cache-key, not a new mechanism).
liveRuntimerequiresmanifestRuntime— it is a strict superset, never a replacement.
Conformance
- Existing coverage. RFC 0070's
agent-manifest-runtime.test.ts+ RFC 0072'sagent-inventory.test.tscover the floor (load, inventory, dispatch path). None assert live mapping, the capability shape, or the invocation bracket. - New scenarios:
- agent-live-runtime-shape.test.ts (always-on, server-free): the agents.liveRuntime block validates; agentInvocationStarted + agentInvocationCompleted validate against their $defs; an agent.invocation.started missing source and an agent.invocation.completed with an out-of-enum outcome are rejected (negative). Drives the schemas, no host behavior. - agent-live-invocation-bracket.test.ts (gated on agents.liveRuntime.supported): a live invocation emits agent.invocation.started before any other agent-scoped event and agent.invocation.completed after them (§E ordering), with matching invocationId; the events are content-free (no prompt/result body). Soft-skips on absent advertisement / 404 seam. - agent-live-structured-output.test.ts (gated on agents.liveRuntime.structuredOutput): a result violating handoff.returnSchemaRef fails the run (outcome: "failed"), not a validated completion (§B step 6). Soft-skips when the sub-flag is unadvertised. - agent-live-allowlist-enforced.test.ts (gated on agents.liveRuntime.supported): a tool outside toolAllowlist is not callable (§F-1) — the per-tool application of the floor's mandatory allowlist guarantee.
- Capability gating. Per
conformance/coverage.md: shape always-on; behavioral scenarios gated onagents.liveRuntime.supported(+structuredOutputsub-flag where applicable). The behavioral assertions drive a documented host seam (POST /v1/host/sample/agents/live-invoke), staged per the RFC 0027 §G precedent — soft-skip on404until a reference host wires it. - Reference host. Deferred to a follow-up milestone (this RFC lands at
Draft). The shape + always-on schema validation ship; behavioral assertions soft-skip until the reference workflow-engine (which already dispatches four live providers) wires the live-invoke seam + advertisesliveRuntime. - INTEROP-MATRIX. A new "RFC 0077 live manifest dispatch" row is added (status: no host advertises
liveRuntimeyet — Draft).
Alternatives considered
- A bespoke
POST /v1/agents/{agentId}:invokeendpoint instead of composing the run surface. Rejected — it would fork agent execution off the run lifecycle, losing replay/fork/observability and duplicatingPOST /v1/runs. RFC 0072 §B already pinned dispatch to the run surface deliberately; this RFC extends that, it does not re-litigate it. Therun-apisource ISPOST /v1/runswith an agent root, not a new endpoint. - Fold live behavior into
agents.manifestRuntime(no new flag). Rejected —manifestRuntimedeliberately permits the deterministic floor (RFC 0070 §D ladder); overloading it would make "supports manifestRuntime" ambiguous between "runs the sample floor" and "runs live models," exactly the signal gap this RFC closes. A distinct superset flag keeps the floor advertisement honest. - No invocation bracket events (reuse
agent.reasoned/agent.decidedonly). Rejected — without a start/complete bracket a consumer cannot delimit one invocation from the next within a multi-agent run (a handoff chain emits interleavedagent.*events from several agents), and cannot attribute a tool call or decision to a specific invocation. TheinvocationIdbracket is the minimal correlation surface; it mirrors how RFC 0061 added aniterationcounter rather than leaving turns unattributable. - Do nothing. Rejected — the gap analysis explicitly targets a real "Run agent" surface, agent detail pages, and chat
@agentparity, all of which require a portable live-run contract. Without it, every host's "live agent" diverges and the 37 inventory agents stay sample-floor demonstrations rather than runnable products.
Unresolved questions
All five were resolved 2026-05-29 via MyndHyve T4 co-design (architect-validated against the RFC 0002 id model + replay.md) and folded into the normative surface at Draft → Active:
- Resolved-model disclosure → ✅ OPTIONAL.
resolvedModel/resolvedProvideronagent.invocation.startedare OPTIONAL (MAY), not RECOMMENDED.modelClass→concrete resolution may happen downstream (at the prompt-call node, with capability-gated fallback substitution), so a dispatch-timestartedevent genuinely may not know the resolved model;modelClassis the always-present portable signal. A host MAY also omit for deployment-privacy. (Aligns with the 0067 UQ3 "no deployment-topology disclosure" posture.) invocationIdvsrunId→ ✅ host-defined, unique-within-run, MAY be runId-derived.invocationIdis a payload correlation field (NOT a new envelope id-space — theRunEventenvelope keepseventId/causationId); distinct fromrunId(one run MAY host several invocations) but a host MAY derive it from an existing per-node-execution receipt (runId:nodeId:seq) or a UUID, and a single-invocation run MAY reuserunId. Replay safety: the invocation pair is classified as recorded-fact events perreplay.md§"Recorded-fact events" (§C) — re-read from the log,invocationIdMUST NOT be regenerated. Mandating a new global id-space was the one adoption-cost MyndHyve flagged; this avoids it.chat-mentionnormativity → ✅ optionalsources[]member. The run surface it maps onto is normative; the@mentionparse is host UX.chat-mentionis never a mandatorysources[]enum member — a host with no chat surface advertises["workflow-node", "run-api"]and is fully compliant (§D).- Single-shot vs loop floor → ✅ single-shot IS the floor. A
liveRuntimehost MAY run a single-shot turn; the multi-turn loop composes ABOVE via the orchestrator + RFC 0061 (version >= 5) and MUST NOT be folded into the floor (loop infrastructure is not forced to advertiseliveRuntime) (§B step 5). - Terminal projection + attestation → ✅
completedis the agent-scoped terminal.agent.invocation.completedis the last agent-scoped event and PRECEDES the run-scoped RFC 0063output.harvestedattestation when the agent runs as a sub-run (§B step 8 / §E).
Implementation notes (non-normative)
- Sequencing. Composes RFC 0070 (
manifestRuntimefloor, Accepted) + RFC 0072 (inventory + dispatch path, the keystone —GET /v1/agents+WorkflowNode.agent) + RFC 0061 (stateful loop) + RFC 0002 (run lifecycle) + RFC 0028/0029 (prompt resolution) + RFC 0064 (tool hooks) + RFC 0057/0068 (memory). It is the live-execution layer on top of the inventory/dispatch keystone;agents.liveRuntime⇒agents.manifestRuntime. - Reference host. The reference workflow-engine already dispatches four live providers (anthropic, openai, google, minimax); wiring
liveRuntimeis primarily a matter of advertising the flag + emitting the two bracket events around the existing agent execution path + threadingreturnSchemaRefvalidation. The 31 manifest agents become real "Run agent" targets once it advertises. - Demo impact (out of scope, implementation-only): a real "Run agent" button creating a standard run; agent detail pages showing provider/model/tools/memory/schema/recent-runs; chat
@agentmentions on the same run surface. - Expected effort: M for the schema + prose + shape conformance (this lands the surface); L for a behavioral reference implementation (the live-invoke seam + structured-output validation + the four behavioral scenarios), deferred.
Acceptance criteria
Checklist the maintainers will use to flip Status from Active to Accepted. The wire surface + always-on conformance + all five UQ resolutions landed at Draft → Active (2026-05-29); the remaining unchecked items are the Active → Accepted adoption gate.
- [x]
multi-agent-execution.md§"Live manifest dispatch" documents the §B mapping + §C events + §D composition + §E ordering + §F safety carry-forward. - [x]
capabilities.schema.jsoncarriesagents.liveRuntime;run-event-payloads.schema.jsoncarriesagentInvocationStarted+agentInvocationCompleted+_typeIndex;run-event.schema.jsonRunEventType enum gains the two event names. - [x] Conformance:
agent-live-runtime-shape.test.ts(always-on, server-free) landed. The three gated behavioral scenarios (bracket ordering, structured-output enforcement, allowlist enforcement) are deferred per §Conformance — they gate oncapabilities.agents.liveRuntime.supported+ a live-invoke seam and soft-skip until a host wires it. - [x] CHANGELOG entry + INTEROP-MATRIX row.
- [x] All five Unresolved questions resolved (recorded in
Updated:+ §Unresolved questions). - [x] Reference-host implementation explicitly deferred per §Conformance (shape + always-on validation ship; behavioral assertions soft-skip until a host advertises
liveRuntime). - [ ] (Accepted gate) A non-steward host advertises
capabilities.agents.liveRuntime.supported: true+ emits theagent.invocation.started/completedbracket with the §E ordering; the gated behavioral scenarios pass against it (MyndHyve T4, queued behind §B).
Amendment record
Change history relocated from the Updated metadata cell (newest first).
- The three gated behavioral scenarios —
agent-live-invocation-bracket/agent-live-structured-output/agent-live-allowlist-enforced, authored steward-side in@openwop/openwop-conformance@1.11.0(the deferred §Conformance deliverable; PR #392/#394) — pass non-vacuously underOPENWOP_REQUIRE_BEHAVIOR=true: the §E bracket (started-first/completed-last, matchinginvocationId, content-free); the §B-step-6 structured-output failure (returnSchemaRef+invalid result ⇒outcome:"failed",schemaValidated≠true); the §F-1 allowlist floor (a tool outsidetoolAllowlistis not callable). - Per the §Conformance
Active → Acceptedgate (a non-steward host advertisingliveRuntime+ emitting the invocation pair), the criterion is met. - Coordinated via the
billycrosstalk bus. Strengthening follow-up (non-gating): the gated bracket emits through the production emitter via the conformance sample seam; full production-path wiring into therunExecutordispatch turn (so a live agent turn is a single bracketed unit rather than separately-emittedpromptResolved/toolCalled/decided) is a tracked MyndHyve follow-up — it. - does not affect the gated behavioral guarantee.).
- 2026-05-29 — promoted
Draft → Active. All five Unresolved questions resolved via MyndHyve T4 co-design (architect-validated against the RFC 0002 id model +replay.md); the wire surface landed atomically:capabilities.agents.liveRuntime(capabilities.schema.json), theagentInvocationStarted/agentInvocationCompletedpayloads +_typeIndex(run-event-payloads.schema.json), the RunEventType enum +2 (run-event.schema.json), the normative §"Live manifest dispatch" prose (multi-agent-execution.md), and the always-on server-freeagent-live-runtime-shape.test.tsconformance scenario. - Comment window waived per
GOVERNANCE.mdlazy consensus. No new SECURITY invariant (§F reuses the existing floor guarantees). - Behavioral conformance + reference-host advertisement deferred per §Conformance;
Active → Acceptedgated on a non-steward host (MyndHyve) advertisingliveRuntime+ emitting the invocation pair.
References
RFCS/0070-agent-manifest-runtime.md— theagents.manifestRuntimefloorliveRuntimeis a superset of.RFCS/0072-agent-inventory-and-dispatch.md—GET /v1/agentsinventory + theWorkflowNode.agent+POST /v1/runsdispatch path this composes (the Wave-1 keystone).RFCS/0061-agent-loop-lifecycle.md— the stateful agent loop (executionModel.version: 5) step 5 composes.RFCS/0041-multi-agent-replay-under-nondeterminism.md— the LLM cache-key recipe the §B-1 model resolution participates in.RFCS/0064-tool-invocation-hooks-and-authorization.md— per-tool authorization + tool-call events used in §B step 3.schemas/agent-manifest.schema.json— theAgentManifestshape (modelClass,toolAllowlist,memoryShape,confidence,handoff.*SchemaRef) §B maps.spec/v1/multi-agent-execution.md— the agent execution model this extends.docs/OPENWOP-AI-AGENT-PLATFORM-RECOMMENDATIONS.md§"RFC 0077" — the source recommendation.