# Share a promptfoo Eval Report — Publish the Grid, Not a Screenshot

Canonical: https://commareports.com/share-promptfoo-report
Published: 2026-08-30

> promptfoo eval -o results.html gives you a comparison grid nobody else can open. Publish it to Comma so the team can argue about the failing rows at a URL, run after run.

# Share a promptfoo eval report

Everyone on the team has an opinion about the system prompt. Exactly one
person has the eval grid open, on localhost, behind `promptfoo view`.

That asymmetry is why prompt decisions get made from vibes and one cherry-
picked screenshot of a good row.

## Export the grid, publish the file

```bash
promptfoo eval -o results.html
```

Drag `results.html` into [the app](https://commareports.com/), or from CI:

```bash
promptfoo eval -o results.html --no-progress-bar

curl -fsS -X PATCH "https://commareports.com/api/v1/reports/$REPORT_ID" \
  -H "Authorization: Bearer $COMMA_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d "$(jq -n --rawfile html results.html \
        --arg title "Prompt eval — $GITHUB_SHA" '{title: $title, html: $html}')"
```

Run the publish step with `if: always()`. An eval that dropped below threshold
is the exact artifact the team needs in front of them, and it is the one a
`continue-on-error: false` job throws away.

## Why the review layer matters here more than usual

Eval output is not a pass/fail number, it is a set of judgment calls about
what a model _should_ have said. Those judgments belong next to the row:

- **Anchored threads** — "this assertion is wrong, the model's answer is
  better than the reference" sits on that cell. See
  [commenting on HTML](/comment-on-html).
- **Revisions** — one report id per suite, one revision per run. The prompt
  change either moved the grid or it didn't, and both are visible.
- **Access per report** — evals often carry customer-shaped inputs. Keep them
  private, team-only, or domain-gated. See the [sharing model](/docs/sharing).

## Close the loop with the agent

If a coding agent is the one editing the prompts, it can read the review
comments back through [the MCP server](/docs/mcp) and act on them — the
same loop described in
[let an agent respond to comments](/agents/let-an-agent-respond-to-comments).
And a [routine](/features/routines/daily-claude-eval-refresh) can re-run the
suite nightly so the URL never shows last week's model.

## Limits

- **Entry HTML: 5 MB.** A large grid with full outputs per cell can approach
  it; narrow the eval or split by suite. Assets: 25 MB per file, 250 MB and
  500 files total.
- **60 requests/minute per token.**

## Try it

Comma is free — unlimited reports, unlimited commenters, unlimited revision
history.

**[Publish an eval report →](https://commareports.com/)**

### Related

- [Share an LLM eval report](/agents/share-llm-eval-report) · [Share an Inspect AI log](/share-inspect-ai-log)
- [Daily eval refresh routine](/features/routines/daily-claude-eval-refresh) · [Publish from CI](/docs/ci)
- [Where should my agent post?](/agents/where-should-my-agent-post) · [Give an agent feedback](/agents/give-an-agent-feedback)
