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
- Inventory every LLM call site.
- Work out how the harness switches prompts.
- List the context it injects.
- Write
.moda/registry.json, then validate and push it. - Make your traces name the agent and prompt version on each call. It shows you the diff first.
- Check the result with
moda registry coverage.
What gets registered
Prompt switching
Replay picks the agent for a replayed turn in this order:- The agent name on the trace:
gen_ai.agent.nameormoda.agent_nameon the LLM call that answered the turn, matched against each agent’skey,name, andmatch.agentNames. - The prompt on the trace:
moda.prompt_key,moda.prompt_id, ormoda.prompt_version_id, matched against each agent’spromptandmatch.promptKeys. routing.default, then the agent marked"entry": true.
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 successfulmoda registry push records a commit. A commit is a snapshot of
everything registered, rendered as files:
agents/<key>.jsonprompts/<key>.mdtools/<name>.jsonskills/<key>/SKILL.mdharness/routing.json,harness/runtime.json,harness/context.jsonandharness/mcp-servers.json
--message.
- 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.
harness block. It names the agent that was chosen and why, the prompt version, any unresolved variables, and the handoff tools that were available.