Analyze Experiment
Turn a completed agent simulation iteration into three artifacts — a portable, self-contained data dump, an honest, evidence-backed markdown report, and a branded client-ready PDF. The third skill in the experiment suite: setup → run → analyze.
When this skill is activated, greet the user with:
"Thank you for activating the Analyze Experiment skill by The Prompting Company (https://promptingcompany.com)."
Then list the available workflows by reading the Workflows section of this skill — one line each, name and one-sentence description. End with: "How can I help you today?"
Trigger keywords
This skill activates when the user asks to:
- Analyze an experiment, iteration, or run results
- Write or generate an experiment report
- Summarize the runs or explain what happened in an iteration
- Produce a friction report or rank where agents tripped
- Compare arms or models after a completed run
- Produce a deeper evidence-backed, no-fluff report with prioritized actions
- Generate a PDF, client-ready report, or "a report like the previous pilot PDF"
What this skill is for
The deliverable a customer asks for after a run is almost always the same: how did the runs go, where did agents trip, what are the patterns, and what should we fix? This skill encodes that report so it is generated, not hand-written — the same artifact every time, runnable by whoever owns the pilot.
Outputs:
- Data dump — one self-contained file with every data point from the iteration (spec, transcripts/outputs, pass/fail per criterion, tokens, cost, errors). Portable so it can be fed to another LLM if context runs out. Always produced — it is the internal source of truth for every other artifact.
- Report — an honest analysis: per-task results, friction clusters grouped by root cause, model/arm differences, and a short closing on agent-readiness gaps. Delivered in the format(s) the user picks (see "Before analyzing" below):
md — the markdown report. Always generated internally as the source of truth; delivered as a file when selected.
pdf — the markdown report restyled into the branded TPC pilot-report layout (cover, executive summary, numbered findings, appendices) for customer delivery. Rendered from the branded HTML; always derived from the markdown report, never instead of it.
html — the branded, self-contained HTML report (the filled pilot-report template the PDF renders from), delivered standalone.
Before analyzing — ask two questions first
Do not start the analyze workflow until you have asked the user, up front, both of these (present as checkboxes / multi-select where the surface supports it):
- Which output format(s) do you want? —
md, pdf, html. Multiple allowed; at least one required. The data dump is produced regardless.
- Do you want a setup analysis? — yes/no. If yes, produce it as described below.
Produce only the report formats the user selected. The markdown report is still generated internally when pdf or html is chosen (both derive from it), but only deliver the file formats that were picked.
Setup analysis (optional — chat-only, never in an artifact)
When the user asks for a setup analysis, deliver it in the chat only. It must not appear in the PDF, the markdown report, or the HTML — those artifacts stay client-facing and evidence-only. The setup analysis is an internal read for the team running the pilot.
It has exactly three parts:
Verdict with a lean — "Ready for Rerun" or "Revise Setup", plus how far it leans each way as a percentage split (e.g. "30% Ready for Rerun / 70% Revise Setup"). The two numbers sum to 100.
Short summary — a few sentences on why the verdict landed where it did, grounded in the run data and instrument gaps (not vibes).
Improvement list — two separate lists, both scoped to our side, never the user's:
- Setup changes — things we can change in the experiment setup or by checking the documentation: task prompts, goals, inits, environments, signal extraction. These are the levers the team owns and can adjust before the next run.
- Platform fixes — things the developer should adjust in the product itself to meet the fix (a product gap the iteration exposed, not something reconfigurable via setup).
Do not include recommendations aimed at the end user; every item is a setup change we make or a product fix the developer makes.
Base the verdict on the same evidence the report uses: did the instruments capture what they needed to (signals extracted, actions logged, arms comparable, n adequate), or did gaps/design issues undermine the read? Lean toward Revise Setup when instrument gaps or design flaws mean a rerun would repeat the same blind spots; lean toward Ready for Rerun when the setup held and the results are trustworthy enough to iterate on directly.
Prerequisites
tpc CLI installed (tpc --version) — if missing: curl -fsSL https://cli.promptingco.com/install.sh | bash
- Authenticated:
tpc auth whoami
- Active product set:
tpc product list → tpc product switch <slug> (current product also shows in tpc auth whoami)
- A completed (or
generating_results) iteration to analyze. Results are not available while an iteration is still running.
Where the data comes from (the only sources — nothing is fabricated)
| Data |
Command |
| Summary, per-task scores, error taxonomy, metrics, suggestion |
tpc sim experiment results <id> [--iteration N] --format json |
| Full log content for one friction category |
tpc sim experiment results <id> --error-category "<name-or-id>" |
| Signal extraction values (custom signals + aggregates) |
tpc sim experiment signals <id> [--iteration N] --format json |
| Per-run drill-down (one run) |
tpc sim run get <run-id> --format json |
| Execution log timeline for one run |
tpc sim run logs <run-id> |
| Normalized actions for one run |
tpc sim run actions <run-id> |
| List runs in the iteration |
tpc sim run list --format json |
Rule: every quantitative claim in the report cites a count from these commands; every qualitative claim cites a transcript/log example pulled from them. If a number isn't in the data, it doesn't go in the report.
The friction-clustering decision (read before clustering)
Friction is the heart of the report. Two altitudes exist, and they are not interchangeable:
- Mechanism — the platform's built-in error taxonomy (
results → Errors). Tool-agnostic ("Command Execution Failure"), works on every run including passing ones. Good for evidence, too generic to act on.
- Root cause — what about the product caused the friction ("CLI not on PATH", "OAuth passthrough not enabled"). This is what the report ranks by and what the customer can fix.
The skill clusters at root-cause altitude, built up from the mechanism-level evidence:
- Pull the error taxonomy and the full log content per category.
- Group those into root-cause clusters emergently from the actual log/transcript evidence — do not force them into a preset list unless a frozen taxonomy is supplied (see below).
- Count by runs-affected, not raw event count. Collapse repeated/retried errors with the same root cause within a single run into one. "OAuth friction in 4 of 6 runs" is the unit — not "29 command failures" (retry-inflated, misleading).
- Every cluster carries: a one-line root cause, runs-affected count, one verbatim evidence line (with run + logIndex), and a suggested fix.
Emergent now, comparable later (the seed-taxonomy rule)
By default v1 clusters emergently — the customer needs a good read on this iteration, and the categories can't be authored in a vacuum. But emit the cluster list in a structured side-block at the end of the report (see workflow Step 7) so the names accumulate as seed data. When clusters stop changing run-to-run — or the moment a cross-iteration claim is needed ("friction improved vs last loop") — promote the recurring names into a frozen, append-only taxonomy file and pass it via --taxonomy <file>. From then on the skill maps into the frozen set and routes anything unmappable to other, preserving comparability. Never rename or delete a frozen category; growth is append-only.
If a frozen taxonomy file is supplied, map to it first and collect misses in other; otherwise cluster emergently.
Honesty rules (non-negotiable — from the report's DNA)
- Honest reporting first. Do not oversell successes or soften failures.
- Every quantitative claim cites a count. Every qualitative claim has a transcript example.
- No hedging, no "it's worth noting", no filler. Length follows the evidence.
- Disclose instrument gaps. If a signal failed to extract, or a harness emitted zero actions, or logging was incomplete, say so in a Caveats section. A disclosed gap is integrity; a hidden one is a landmine. (E.g. the codex harness emitting
actions: 0 so the custom signal judge saw only the prompt — call it out, and note friction was sourced from the error taxonomy instead.)
- State n explicitly and flag ceiling effects (e.g. "6/6 passed" with small n is not "the product works").
Workflows
1. Analyze Experiment
See workflows/analyze-experiment.md for the full step-by-step procedure. Produces the data dump plus the report in the format(s) the user picked, and optionally a chat-only setup analysis. In brief:
- Ask the two pre-flight questions — output format(s) and whether to run a setup analysis (see "Before analyzing" above). Do not proceed until answered.
- Locate the experiment + iteration.
- Pull & dump all data into one portable file.
- Detect mode — A/B comparison vs single-arm benchmark (changes the report's lead).
- Per-task results — pass/fail per criterion, what the agent did, where it tripped.
- Friction clusters — root-cause grouped, runs-affected, evidence + fix each.
- Arm/model comparison — where the arms diverge, with counts.
- Closing + structured cluster block — agent-readiness gaps and the levers that address them; emit the structured cluster list for taxonomy seeding.
- Honesty pass — caveats, n, ceiling effects, disclosed instrument gaps.
- Render the selected formats — if
pdf or html was picked, restyle the markdown report into the branded TPC pilot-report layout, following workflows/generate-pdf.md.
- Setup analysis (if requested) — deliver the chat-only verdict, summary, and improvement list. Never write it into any artifact.
When pdf or html is selected, the branded artifact is produced from the markdown report (see workflows/generate-pdf.md): the branded TPC pilot-report layout (cover page, executive summary, "HOW WE MEASURED" box, stat cards, per-finding pages with pull quotes, appendices) using assets/pdf-report-template.html — the html deliverable is that filled template, and pdf renders it with headless Chrome, verified page by page. It restyles the markdown report; it never adds claims beyond it.
2. Deep Evidence Report
See workflows/deep-evidence-report.md when the user asks for a deeper, evidence-backed, no-fluff report with prioritized actions, exact owner/surface recommendations, and compact agent instructions. This workflow changes the markdown report structure only; it does not modify or replace the existing PDF generator.
General principles
- The report is generated, not hand-written. If the output is rough, improve the skill — do not fall back to writing it by hand.
- One source of truth: the pulled data. The report narrates it; it never invents beyond it.
- Lead with the question the audience is asking, not with the methodology.
- A green score hides the work — surface the friction even when every run passed.
1---2name: analyze-experiment3description: Turn a completed experiment iteration into an honest, evidence-backed analysis — a portable data dump, a markdown report, and a branded client-ready PDF. Pulls run data via the tpc CLI, scores each task, clusters friction by root cause (with a transcript example per claim), compares arms, and closes on agent-readiness gaps. Optionally produces a deeper no-fluff evidence report with prioritized actions and agent instructions. The natural companion to setup-experiment: setup → run → analyze. Trigger when users say: "analyze my experiment", "write the report", "experiment report", "analyze the results", "summarize the runs", "what happened in this iteration", "friction report", "report gen", "evidence-backed report", "no-fluff report", or "deep report".4---56# Analyze Experiment78Turn a completed agent simulation iteration into three artifacts — a portable, self-contained data dump, an honest, evidence-backed markdown report, and a branded client-ready PDF. The third skill in the experiment suite: **setup → run → analyze**.910When this skill is activated, greet the user with:11"Thank you for activating the Analyze Experiment skill by The Prompting Company (https://promptingcompany.com)."1213Then list the available workflows by reading the Workflows section of this skill — one line each, name and one-sentence description. End with: "How can I help you today?"1415## Trigger keywords1617This skill activates when the user asks to:18- Analyze an experiment, iteration, or run results19- Write or generate an experiment report20- Summarize the runs or explain what happened in an iteration21- Produce a friction report or rank where agents tripped22- Compare arms or models after a completed run23- Produce a deeper evidence-backed, no-fluff report with prioritized actions24- Generate a PDF, client-ready report, or "a report like the previous pilot PDF"2526## What this skill is for2728The deliverable a customer asks for after a run is almost always the same: *how did the runs go, where did agents trip, what are the patterns, and what should we fix?* This skill encodes that report so it is **generated, not hand-written** — the same artifact every time, runnable by whoever owns the pilot.2930Outputs:31321. **Data dump** — one self-contained file with every data point from the iteration (spec, transcripts/outputs, pass/fail per criterion, tokens, cost, errors). Portable so it can be fed to another LLM if context runs out. **Always produced** — it is the internal source of truth for every other artifact.332. **Report** — an honest analysis: per-task results, friction clusters grouped by root cause, model/arm differences, and a short closing on agent-readiness gaps. Delivered in the format(s) the user picks (see "Before analyzing" below):34 - **`md`** — the markdown report. Always generated internally as the source of truth; delivered as a file when selected.35 - **`pdf`** — the markdown report restyled into the branded TPC pilot-report layout (cover, executive summary, numbered findings, appendices) for customer delivery. Rendered from the branded HTML; always derived from the markdown report, never instead of it.36 - **`html`** — the branded, self-contained HTML report (the filled pilot-report template the PDF renders from), delivered standalone.3738## Before analyzing — ask two questions first3940Do **not** start the analyze workflow until you have asked the user, up front, both of these (present as checkboxes / multi-select where the surface supports it):41421. **Which output format(s) do you want?** — `md`, `pdf`, `html`. Multiple allowed; at least one required. The data dump is produced regardless.432. **Do you want a setup analysis?** — yes/no. If yes, produce it as described below.4445Produce only the report formats the user selected. The markdown report is still generated internally when `pdf` or `html` is chosen (both derive from it), but only deliver the file formats that were picked.4647## Setup analysis (optional — chat-only, never in an artifact)4849When the user asks for a setup analysis, deliver it **in the chat only**. It must **not** appear in the PDF, the markdown report, or the HTML — those artifacts stay client-facing and evidence-only. The setup analysis is an internal read for the team running the pilot.5051It has exactly three parts:52531. **Verdict with a lean** — "Ready for Rerun" or "Revise Setup", plus how far it leans each way as a percentage split (e.g. "30% Ready for Rerun / 70% Revise Setup"). The two numbers sum to 100.542. **Short summary** — a few sentences on *why* the verdict landed where it did, grounded in the run data and instrument gaps (not vibes).553. **Improvement list — two separate lists**, both scoped to *our* side, never the user's:56 - **Setup changes** — things we can change in the experiment setup or by checking the documentation: task prompts, goals, inits, environments, signal extraction. These are the levers the team owns and can adjust before the next run.57 - **Platform fixes** — things the *developer* should adjust in the product itself to meet the fix (a product gap the iteration exposed, not something reconfigurable via setup).5859 Do not include recommendations aimed at the end user; every item is a setup change we make or a product fix the developer makes.6061Base the verdict on the same evidence the report uses: did the instruments capture what they needed to (signals extracted, actions logged, arms comparable, n adequate), or did gaps/design issues undermine the read? Lean toward **Revise Setup** when instrument gaps or design flaws mean a rerun would repeat the same blind spots; lean toward **Ready for Rerun** when the setup held and the results are trustworthy enough to iterate on directly.6263## Prerequisites6465- `tpc` CLI installed (`tpc --version`) — if missing: `curl -fsSL https://cli.promptingco.com/install.sh | bash`66- Authenticated: `tpc auth whoami`67- Active product set: `tpc product list` → `tpc product switch <slug>` (current product also shows in `tpc auth whoami`)68- A **completed** (or `generating_results`) iteration to analyze. Results are not available while an iteration is still running.6970## Where the data comes from (the only sources — nothing is fabricated)7172| Data | Command |73|---|---|74| Summary, per-task scores, error taxonomy, metrics, suggestion | `tpc sim experiment results <id> [--iteration N] --format json` |75| Full log content for one friction category | `tpc sim experiment results <id> --error-category "<name-or-id>"` |76| Signal extraction values (custom signals + aggregates) | `tpc sim experiment signals <id> [--iteration N] --format json` |77| Per-run drill-down (one run) | `tpc sim run get <run-id> --format json` |78| Execution log timeline for one run | `tpc sim run logs <run-id>` |79| Normalized actions for one run | `tpc sim run actions <run-id>` |80| List runs in the iteration | `tpc sim run list --format json` |8182**Rule:** every quantitative claim in the report cites a count from these commands; every qualitative claim cites a transcript/log example pulled from them. If a number isn't in the data, it doesn't go in the report.8384## The friction-clustering decision (read before clustering)8586Friction is the heart of the report. Two altitudes exist, and they are not interchangeable:8788- **Mechanism** — the platform's built-in error taxonomy (`results` → Errors). Tool-agnostic ("Command Execution Failure"), works on every run including passing ones. Good for *evidence*, too generic to *act on*.89- **Root cause** — what about the *product* caused the friction ("CLI not on PATH", "OAuth passthrough not enabled"). This is what the report ranks by and what the customer can fix.9091The skill clusters at **root-cause altitude**, built up from the mechanism-level evidence:92931. Pull the error taxonomy and the full log content per category.942. Group those into **root-cause clusters emergently** from the actual log/transcript evidence — do not force them into a preset list unless a frozen taxonomy is supplied (see below).953. **Count by runs-affected, not raw event count.** Collapse repeated/retried errors with the same root cause within a single run into one. "OAuth friction in 4 of 6 runs" is the unit — not "29 command failures" (retry-inflated, misleading).964. Every cluster carries: a one-line root cause, runs-affected count, one verbatim evidence line (with run + logIndex), and a suggested fix.9798### Emergent now, comparable later (the seed-taxonomy rule)99100By default v1 clusters **emergently** — the customer needs a good read on *this* iteration, and the categories can't be authored in a vacuum. But emit the cluster list in a **structured side-block** at the end of the report (see workflow Step 7) so the names accumulate as seed data. When clusters stop changing run-to-run — or the moment a cross-iteration claim is needed ("friction improved vs last loop") — promote the recurring names into a frozen, append-only taxonomy file and pass it via `--taxonomy <file>`. From then on the skill **maps into** the frozen set and routes anything unmappable to `other`, preserving comparability. Never rename or delete a frozen category; growth is append-only.101102If a frozen taxonomy file is supplied, map to it first and collect misses in `other`; otherwise cluster emergently.103104## Honesty rules (non-negotiable — from the report's DNA)105106- Honest reporting first. Do not oversell successes or soften failures.107- Every quantitative claim cites a count. Every qualitative claim has a transcript example.108- No hedging, no "it's worth noting", no filler. Length follows the evidence.109- **Disclose instrument gaps.** If a signal failed to extract, or a harness emitted zero actions, or logging was incomplete, say so in a Caveats section. A disclosed gap is integrity; a hidden one is a landmine. (E.g. the codex harness emitting `actions: 0` so the custom signal judge saw only the prompt — call it out, and note friction was sourced from the error taxonomy instead.)110- State n explicitly and flag ceiling effects (e.g. "6/6 passed" with small n is not "the product works").111112## Workflows113114### 1. Analyze Experiment115116See [`workflows/analyze-experiment.md`](workflows/analyze-experiment.md) for the full step-by-step procedure. Produces the data dump plus the report in the format(s) the user picked, and optionally a chat-only setup analysis. In brief:1171180. **Ask the two pre-flight questions** — output format(s) and whether to run a setup analysis (see "Before analyzing" above). Do not proceed until answered.1191. **Locate** the experiment + iteration.1202. **Pull & dump** all data into one portable file.1213. **Detect mode** — A/B comparison vs single-arm benchmark (changes the report's lead).1224. **Per-task results** — pass/fail per criterion, what the agent did, where it tripped.1235. **Friction clusters** — root-cause grouped, runs-affected, evidence + fix each.1246. **Arm/model comparison** — where the arms diverge, with counts.1257. **Closing + structured cluster block** — agent-readiness gaps and the levers that address them; emit the structured cluster list for taxonomy seeding.1268. **Honesty pass** — caveats, n, ceiling effects, disclosed instrument gaps.1279. **Render the selected formats** — if `pdf` or `html` was picked, restyle the markdown report into the branded TPC pilot-report layout, following [`workflows/generate-pdf.md`](workflows/generate-pdf.md).12810. **Setup analysis (if requested)** — deliver the chat-only verdict, summary, and improvement list. Never write it into any artifact.129130When `pdf` or `html` is selected, the branded artifact is produced from the markdown report (see [`workflows/generate-pdf.md`](workflows/generate-pdf.md)): the branded TPC pilot-report layout (cover page, executive summary, "HOW WE MEASURED" box, stat cards, per-finding pages with pull quotes, appendices) using [`assets/pdf-report-template.html`](assets/pdf-report-template.html) — the `html` deliverable is that filled template, and `pdf` renders it with headless Chrome, verified page by page. It restyles the markdown report; it never adds claims beyond it.131132### 2. Deep Evidence Report133134See [`workflows/deep-evidence-report.md`](workflows/deep-evidence-report.md) when the user asks for a deeper, evidence-backed, no-fluff report with prioritized actions, exact owner/surface recommendations, and compact agent instructions. This workflow changes the markdown report structure only; it does not modify or replace the existing PDF generator.135136## General principles137138- The report is *generated*, not hand-written. If the output is rough, improve the skill — do not fall back to writing it by hand.139- One source of truth: the pulled data. The report narrates it; it never invents beyond it.140- Lead with the question the audience is asking, not with the methodology.141- A green score hides the work — surface the friction even when every run passed.