Skip to main content
Transcripts are saved as JSON to ~/.mutual-dissent/transcripts/YYYY-MM-DD_shortid.json.

Top-Level Fields

FieldTypeDescription
transcript_idstring (UUID4)Unique debate identifier
querystringOriginal user query
panelstring[]Model aliases that participated
synthesizer_idstringModel alias used for synthesis
max_roundsintegerConfigured reflection round count
roundsDebateRound[]All debate rounds in order
synthesisModelResponse | nullFinal synthesized response
created_atstring (ISO 8601)Debate start time (UTC)
metadataobjectStats, routing config, experiment data

DebateRound

FieldTypeDescription
round_numberinteger0 = initial, 1+ = reflection
round_typestring"initial", "reflection", or "synthesis"
responsesModelResponse[]All model responses for this round

ModelResponse

FieldTypeDescription
model_idstringFull OpenRouter or vendor model ID
model_aliasstringShort alias (e.g. "claude")
round_numberintegerRound this response belongs to
rolestring"initial", "reflection", or "synthesis"
contentstringFull response text
timestampstring (ISO 8601)When the response was received (UTC)
token_countinteger | nullTotal tokens used
input_tokensinteger | nullInput/prompt tokens
output_tokensinteger | nullOutput/completion tokens
latency_msinteger | nullResponse time in milliseconds
errorstring | nullError message if call failed; null on success
routingobject | nullRouting decision (see below)
analysisobjectScoring metadata (populated when --ground-truth is used)

routing object

FieldTypeDescription
vendorstringProvider vendor (e.g. "anthropic")
modestringRouting mode in effect: "auto", "direct", "openrouter"
via_openrouterbooleanWhether OpenRouter handled this request

metadata object

KeyDescription
versionMutual Dissent version that produced the transcript
resolved_configPanel, synthesizer, rounds, routing, and provider keys active for this debate
statsToken totals, per-model breakdown with input/output split and cost, total_cost_usd
scoresGround-truth scoring results (present only if --ground-truth was used)
experimentExperimentMetadata (present only if set via Python API)
panelist_contextPer-panelist context strings (present only if set via Python API)
source_transcript_idID of the source transcript (replay transcripts only)
replay_configSynthesizer override and additional rounds (replay transcripts only)

Example

{
  "transcript_id": "a1b2c3d4-...",
  "query": "What are the risks of agentic AI?",
  "panel": ["claude", "gpt", "gemini", "grok"],
  "synthesizer_id": "claude",
  "max_rounds": 1,
  "rounds": [
    {
      "round_number": 0,
      "round_type": "initial",
      "responses": [
        {
          "model_id": "anthropic/claude-sonnet-4-6",
          "model_alias": "claude",
          "round_number": 0,
          "role": "initial",
          "content": "...",
          "timestamp": "2026-03-04T14:00:00+00:00",
          "token_count": 412,
          "input_tokens": 28,
          "output_tokens": 384,
          "latency_ms": 1243,
          "error": null,
          "routing": { "vendor": "anthropic", "mode": "auto", "via_openrouter": false },
          "analysis": {}
        }
      ]
    }
  ],
  "synthesis": { "role": "synthesis", "round_number": -1, "..." : "..." },
  "created_at": "2026-03-04T14:00:00+00:00",
  "metadata": {
    "version": "0.1.1",
    "stats": {
      "total_tokens": 8432,
      "total_cost_usd": 0.0124,
      "per_model": { "claude": { "tokens": 2100, "cost_usd": 0.0031, "calls": 2 } }
    }
  }
}