Miadi-Agent

Miadi-Agent

The agentic runtime that lets Miadi operate as a living, conversational service. Hermes-Agent is the technical runtime boundary; Miadi-Agent is the product identity it is becoming.

PurposeAgentic runtime for the Miadi service boundary
Runtime boundaryruntime/hermes-agent
Product namemiadi-agent
Phase1 · Contracts being specified
BaselineCapability parity with Miadi-Code
System landscape

User · Surfaces · Agent · Domains

One picture before the architecture: the user reaches the Miadi-Agent through several access surfaces. The agent holds session handles — the gold-weighted threads — and routes them into the domains (repositories, issues, and runtimes grouped by project context). The agent is the bridge, not the destination.

Rendering diagram...

One session can target multiple domains over its lifetime — that's the "walking with continuity" promise. See the glossary on the Navigator page for the full domain vocabulary.

Core creative intent

A stable runtime layer

Miadi-Agent is not a duplicate of an old agent folder. It is a stable runtime layer that can converse with the user inside the Miadi space, execute delegated work reliably, preserve continuity across sessions, and remain replaceable as a forked runtime boundary — without becoming tangled in app code.

A working session has a name, not a location. Once named, you attach it from any terminal, any device — the desktop pane, a fresh window, the phone — and every attached client sees the same live byte stream as it happens. The original shell may be running in window 47 of 120; you never have to find it. Long-running agents (claude-code, gemini, copilot) live inside named sessions and survive detach without losing state.

The runtime lives under runtime/hermes-agent. The product and spec name is miadi-agent. The rename happens when the launch contract and fork policy are stable — not before.

Responsibility split

Who owns what

Miadi platform
  • •orchestration entrypoints
  • •routing & service integration
  • •issue/spec traceability
  • •persistence & product concerns
runtime/hermes-agent
  • •agent bootstrap
  • •task execution lifecycle
  • •session continuity
  • •provider dispatch shim
  • •logs & trace emission
miadi-orchestration-kit
  • •reusable orchestration recipes/plugins
  • •cross-provider workflow composition
  • •parity rules for coding agents
  • •contribution & maintenance flows
What flows between them
Rendering diagram...

The platform speaks A2A envelopes; the runtime executes them and emits trace + continuity payloads; the orchestration-kit chooses recipes the platform applies. The provider shim is the runtime's boundary with claude-code, gemini, and copilot.

Phase 1 · in progress

Contract surface

01
Launch contract
Invocation shape, required inputs, required outputs, session continuity expectations.
rispecs/miadi-code/miadi-agent/contracts/01-launch-contract.spec.md
02
Orchestration contract
Provider-neutral task envelope, lifecycle states, parity surface across coding agents.
rispecs/miadi-code/miadi-agent/contracts/02-orchestration-contract.spec.md
03
Responsibility table
Ownership split: Miadi platform · runtime/hermes-agent · provider shim · orchestration-kit.
rispecs/miadi-code/miadi-agent/contracts/03-responsibility-table.spec.md
What the contract data looks like

Two excerpts from the canonical JSON schemas in rispecs/tide-runtime/deep-dive-review/schemas/. These are the shapes the runtime accepts and emits.

a2a-task-request.v1
{
  "schemaVersion": "a2a-task-request.v1",
  "taskId": "task-2026-05-12-08c4",
  "intent": "string",
  "instructions": "string",
  "domainId": "miadi",
  "continuity": { /* SessionContinuity */ },
  "constraints": {
    "allowedActions": [
      "read_files","write_files",
      "run_commands","spawn_subagents",
      "send_terminal_input",
      "focus_domain","use_mcp_tools"
    ],
    "requiresApprovalFor": [
      "write_files","run_commands",
      "spawn_terminal"
    ],
    "timeBudgetSeconds": 600,
    "maxOutputBytes": 1048576
  },
  "expectedResult": {
    "kind": "analysis|patch|artifact",
    "acceptanceCriteria": [ ... ]
  }
}
session-continuity-payload.v1
{
  "schemaVersion": "session-continuity-payload.v1",
  "parentSessionId": "string",
  "childSessionId": "string",
  "traceId": "string",
  "activeDomainId": "miadi",
  "conversationSummary": "string",
  "openWork": [{
    "id": "w-1",
    "description": "string",
    "status": "pending|in_progress|blocked",
    "domainId": "miadi"
  }],
  "rispecRefs": [
    "rispecs/tide-runtime/..."
  ],
  "approvalState": {
    "mode": "observer|active-controller",
    "pendingProposalIds": ["prop-..."]
  }
}
Structural tension

Current reality → Desired outcome

Each row holds two truths at once. The tension between them is what advances the work — not a gap to close.

Current reality
Miadi-Code has tested behaviors users rely on.
↓
Desired outcome
Miadi-Agent matches those behaviors with its own internals — never importing Miadi-Code code.
Current reality
The runtime lives inside the Miadi ecosystem, surrounded by app routes and product code.
↓
Desired outcome
A clean boundary at runtime/hermes-agent that can be upgraded or replaced without touching app code.
Current reality
A fork was the only way to start without dragging upstream app concerns along.
↓
Desired outcome
Divergence stays small enough that extraction to a standalone package remains an option.
Current reality
claude-code is the provider in use today.
↓
Desired outcome
The same orchestration shape works for gemini, copilot, ava-pi — provider differences live in shims.
Related issues
jgwill/Miadi#250— Hermes Agent runtime boundary
jgwill/Miadi#265— Hermes Navigator v1 focus contract
jgwill/Miadi#270— Navigator docs UI