Skip to main content
A replay re-runs the assistant side of a recorded production conversation. It’s only as faithful as what Moda knows about how your agent runs: which agent answered the replayed turn, with which prompt version, model, sampling settings, tools, and skills, how control moves between agents, and what context your code injects into the prompt. moda registry lets your own coding agent (Claude Code, Codex, Cursor) describe all of that from your codebase. You don’t need the GitHub App or a repo upload.

Hand it to your coding agent

The brief walks your agent through these steps:
  1. Inventory every LLM call site.
  2. Work out how the harness switches prompts.
  3. List the context it injects.
  4. Write .moda/registry.json, then validate and push it.
  5. Make your traces name the agent and prompt version on each call. It shows you the diff first.
  6. Check the result with moda registry coverage.

What gets registered

Prompt switching

Replay picks the agent for a replayed turn in this order:
  1. The agent name on the trace: gen_ai.agent.name or moda.agent_name on the LLM call that answered the turn, matched against each agent’s key, name, and match.agentNames.
  2. The prompt on the trace: moda.prompt_key, moda.prompt_id, or moda.prompt_version_id, matched against each agent’s prompt and match.promptKeys.
  3. routing.default, then the agent marked "entry": true.
When the replayed model calls a handoff tool (for example transfer_to_billing), replay switches to the target agent’s prompt, tools, model, and sampling settings for the rest of the conversation. That’s how the OpenAI Agents SDK, supervisor patterns, and similar harnesses move control between agents. Attribution comes from your traces. Auto-instrumented OpenAI and Anthropic calls don’t carry it, so add it where you build each agent or make each call: See Prompt attribution for full examples.

History: every push is a commit

Each successful moda registry push records a commit. A commit is a snapshot of everything registered, rendered as files:
  • agents/<key>.json
  • prompts/<key>.md
  • tools/<name>.json
  • skills/<key>/SKILL.md
  • harness/routing.json, harness/runtime.json, harness/context.json and harness/mcp-servers.json
Each commit also records your repo’s git SHA, branch, and whether the checkout had uncommitted changes. Label a push with --message.
The dashboard Registry page shows the same history, git-style:
  • the commit log;
  • per-file diffs for any commit, or for a range (shift-click a second commit);
  • a file browser for any commit;
  • uncommitted changes: edits made outside a push, such as dashboard tool edits, MCP discovery, or moda prompts sync. Admins can commit them from the page.

Check what replay will see

coverage reports:
  • the share of recent LLM calls that resolve to a registered agent;
  • agent names and prompt keys seen in traces that no agent claims;
  • tools used in production but not registered;
  • registered agents never seen.
Every replay’s fidelity report also includes a harness block. It names the agent that was chosen and why, the prompt version, any unresolved variables, and the handoff tools that were available.