---
id: cli.external-outputs
title: Submit External Outputs with the CLI
summary: Prepare a frozen manifest, submit real application responses, inspect judging and compare explicit Trials.
kind: quickstart
product_area: developer_tools
status: stable
updated: 2026-10-31
canonical: /docs/cli/external-outputs
---

# Submit External Outputs with the CLI

## Prerequisites

[Authenticate](/docs/cli/authentication) with write access and select the exact organization, Project, Benchmark and immutable Version. Your application produces the responses in its own runtime. A managed Harness is optional.

## Prepare Cases and criteria

```sh
teammately eval version-context --kind summary
teammately eval version-context --kind policies --limit 20
teammately eval version-context --kind rubrics --limit 20
teammately eval prepare --out ./evaluation-package
```

Read the generated manifest and result contract. Execute its frozen Cases with your application. Preserve Case, membership and record-version identities; access to a manifest does not grant access to protected materials.

## Record actual responses

### Example: results.json shape

```json
[
  {
    "case_id": "<issued Case ID from the manifest>",
    "output": {"reply": "<actual application response>"}
  }
]
```

Replace both placeholders with an actual manifest ID and its actual response. Each row has exactly one native JSON `output` or `failure` with `code` and `message`. Optional trajectory and measured latency/usage/cost remain absent when unknown. JSON null and text whitespace can be meaningful outputs.

## Validate, submit and inspect

```sh
teammately eval validate-results \
  --manifest ./evaluation-package/manifest.json --results ./results.json
teammately eval submit-results \
  --manifest ./evaluation-package/manifest.json --results ./results.json \
  --name 'Application candidate' --receipt ./import-receipt.json
```

Missing Cases require explicit `--allow-partial` for both validation and submission. The CLI accepts result files up to 32 MiB and uses batches up to 10 MiB. Keep the manifest, results and receipt secure until recovery is no longer needed.

Use the returned child Run ID, not the group ID:

```sh
teammately run wait --run "$RUN_ID" --timeout 10m
teammately eval results --run "$RUN_ID" --limit 20
teammately run compare --run "$BASELINE_RUN_ID" --target "$RUN_ID"
```

Comparison needs an actual baseline selected before inspecting candidate outcomes. Without one, inspect the first Trial's results without inventing a comparison. Page through results and preserve incompleteness/comparability reasons.

## Recovery and corrections

Retry an interrupted write with the same original files and receipt. Changed content needs a new receipt and operation. Accepted responses are immutable within a Trial; a correction can create another Trial in the same external Run using `--group`, or an intentionally new Run.

If completion froze the responses but judging admission failed, use `teammately eval complete --group "$GROUP_ID" --run "$RUN_ID" --retry`, retaining the original partial policy. Admission success is not completed judging. These operations do not adopt code changes or activate a Harness.

## Related reference pages

{% related-card-grid %}
- [Command reference](/docs/cli/reference)
- [External outputs API](/docs/public-api/evaluation-outputs)
- [Output mapping troubleshooting](/docs/troubleshooting/output-mapping)
{% /related-card-grid %}
