On this page
Supported arenas
Run arenas inspect before starting. The local server reports whether each operation is available and which services are missing.
| Arena | Local scope | Boundary |
|---|---|---|
| 72-Hour Disaster Response | Practice, comparison, authenticated revisions, history, download, Final Entry | Strategy v2; submission requires configured account and storage services. |
| Rescue Room | Deterministic Doctrine Practice and same-Episode comparison | Practice only. No saved submissions, Final Entry, or paid AI Playbook inference through this CLI. |

Install locally
Use Node.js 22 or newer. The selected CLI and SDK version is 0.3.0, with shared definitions at 0.2.0. Run these commands from the Frontier repository root. The workspace packages remain private and are not installed globally.
pnpm install
pnpm build:tooling
pnpm exec frontier --version
pnpm exec frontier --helpStart the local web server at http://localhost:3000 before continuing. Each example pins this origin explicitly. Use the same origin for authorization, Practice, and submission.
First Practice
Strategy v2: public Practice and authenticated submission.
pnpm exec frontier --base-url http://localhost:3000 arenas list
pnpm exec frontier --base-url http://localhost:3000 arenas inspect disaster-response
pnpm exec frontier --base-url http://localhost:3000 init disaster-response --dir disaster-strategystrategy.json- Your editable Strategy.
strategy.schema.json- The published input format.
frontier.json- Arena, origin, artifact path, and provenance.
frontier.lock.json- Pinned context, evaluator, schema, and manifest conditions.
Edit strategy.json, then validate and evaluate it. Initialization requires a new or empty directory.
pnpm exec frontier --base-url http://localhost:3000 check --project disaster-strategy
pnpm exec frontier --base-url http://localhost:3000 practice --project disaster-strategy --wait
pnpm exec frontier --base-url http://localhost:3000 runs list --project disaster-strategycheck verifies local input rules; the evaluator decides correctness. Practice is synchronous, so --wait makes waiting explicit and does not create a background job. Run IDs refer to local records in .frontier/runs/.
Compare results
After changing the artifact and running Practice again, use the two IDs from runs list. Replace all angle-bracket placeholders below with actual IDs.
pnpm exec frontier --base-url http://localhost:3000 runs inspect <run-id> --project disaster-strategy
pnpm exec frontier --base-url http://localhost:3000 compare <run-a> <run-b> --project disaster-strategyComparison keeps each metric's value, direction, unit, and difference separate. Outcomes can be A dominates, B dominates, trade-off, or equal. There is no weighted total or implied full-field ranking.
Arena, evaluator, dataset, constraints, metrics, context, and evidence class must match. Rescue Room also requires matching Doctrine runtime context and Episode. Failed or missing correctness evidence excludes a result from eligible Pareto comparison.
Sign in & submit
Disaster Response only. Run these commands inside your Disaster Response project. Browser authorization uses the account you want to own the saved revision.
pnpm exec frontier --base-url http://localhost:3000 auth login
pnpm exec frontier --base-url http://localhost:3000 auth status
pnpm exec frontier --base-url http://localhost:3000 submit --project disaster-strategy
pnpm exec frontier --base-url http://localhost:3000 submissions list --project disaster-strategyReview the confirmation before submitting. The command may register the account if needed and saves one revision. Submission does not select the Final Entry. Keep --yes for explicitly approved automation; --json never counts as consent.
pnpm exec frontier --base-url http://localhost:3000 submissions inspect <submission-id> --project disaster-strategy
pnpm exec frontier --base-url http://localhost:3000 submissions download <submission-id> --project disaster-strategy --output submitted-strategy.json
pnpm exec frontier --base-url http://localhost:3000 entry select <submission-id> --project disaster-strategy
pnpm exec frontier --base-url http://localhost:3000 open <submission-id> --project disaster-strategyentry select confirms the revision to use and follows the server's current selection rules. Viewing a saved result never selects it. A selected entry is not proof of a deadline lock, commitment, or payment.
open uses /submissions/<id>?arena=disaster-response. Sign in to the same account in the browser. Local Practice Runs stay in runs inspect and have no saved-result URL.
TypeScript SDK
This example follows the local SDK 0.3.0 API. The SDK and shared definitions are workspace packages in this repository.
Put the example in practice.ts inside the disaster-strategyproject created earlier. It reads the existing Strategy and pinned context, then calls public Practice without authentication. The SDK returns a result to your script; unlike the CLI it does not write a local Run.
pnpm build:toolingimport { readFile } from "node:fs/promises";
import { FrontierClient, cliLockSchema } from "@frontier/sdk";
async function main() {
const project = new URL("./", import.meta.url);
const baseUrl = "http://localhost:3000";
const client = new FrontierClient({ baseUrl });
const lock = cliLockSchema.parse(
JSON.parse(await readFile(new URL("frontier.lock.json", project), "utf8")),
);
if (lock.arenaId !== "disaster-response" ||
new URL(lock.baseUrl).origin !== new URL(baseUrl).origin) {
throw new Error("Use a Disaster Response project for this origin.");
}
const artifact = JSON.parse(
await readFile(new URL("strategy.json", project), "utf8"),
);
const result = await client.evaluations.practice({
arenaId: "disaster-response",
artifact,
context: lock.context,
});
console.log(JSON.stringify({
correctness: result.correctness,
state: result.context.evidenceState,
values: result.values,
resultHash: result.resultHash,
}, null, 2));
}
main().catch((error: unknown) => {
console.error(error instanceof Error ? error.message : "Practice failed");
process.exitCode = 1;
});pnpm exec tsx disaster-strategy/practice.tsAI agents
pnpm exec frontier --base-url http://localhost:3000 arenas inspect disaster-response --json
pnpm exec frontier --base-url http://localhost:3000 practice --project disaster-strategy --wait --json
pnpm exec frontier --base-url http://localhost:3000 compare <run-a> <run-b> --project disaster-strategy --jsonRead the public arena conditions. Evaluate up to three candidate strategies within the current limits, explain each metric's trade-offs, and propose a revision for review.
Preserve Agent provenance in the project configuration, including name, version, and objective. Provenance does not add reward points. Submission and Final Entry changes require explicit authorization; a reusable Agent Skill and Bazantic Recipe are outside this local preview.
Command reference
Generated from the local CLI 0.3.0 command definitions used by --help. Check your installed bundle with --version. Prefix each command below with pnpm exec frontier --base-url http://localhost:3000.
| Command | Purpose |
|---|---|
arenas list | List public arena capabilities |
arenas inspect <arena> | Inspect an arena manifest |
init <arena> | Create a verified starter project--dir <value>: New or empty directory |
check | Validate local input without evaluation or network access |
context inspect | Inspect the pinned context |
context update | Review and update the pinned context--yes: Confirm context update |
practice | Run one synchronous public practice evaluation--episode <value>: Public episode ID--wait: Wait for the synchronous result (default) |
runs list | List local runs |
runs inspect <id> | Inspect a local run and raw result |
compare <run-a> <run-b> | Compare two compatible local runs by metric |
auth login | Authorize a device and store its session in the OS keychain--no-browser: Print approval instructions without opening a browser |
auth status | Inspect the current server session |
auth logout | Revoke the session and delete local credentials |
submit | Confirm participation and save one submission revision--yes: Confirm participation and submission--resume <value>: Resume a saved operation with its original body and key |
submissions list | List your saved submissions |
submissions inspect <id> | Inspect your saved submission |
submissions download <id> | Download the saved strategy without overwriting files--output <value>: Destination JSON file (required) |
entry select <id> | Confirm and select your final entry--yes: Confirm final-entry selection |
open <submission-id> | Open your saved submission result--print-url: Return URL without opening a browser |
--project <directory> targets a project from another working directory. --timeout-ms <milliseconds> sets the request timeout. auth login --no-browser supports a terminal without automatic browser launch. open --print-url prints the saved-result link. Neither link contains credentials or the Strategy body.
Evidence & conditions
- Validated
- Local input checks passed. Runtime correctness may still fail.
- Measured
- A deterministic evaluator produced results. Disaster Response measures the public model, not real disaster operations.
- Simulated
- Rescue Room Doctrine outcomes and game-credit payments remain simulated. Practice credits are not tokens.
- Saved / selected
- A server revision exists / the server currently identifies it as the Final Entry. These are distinct actions.
- Committed
- Corresponding onchain commitment evidence exists. A context hash or selected entry alone does not prove this.
- Paid
- Transfer, event, and recipient evidence exist. A reward preview is not a payment.
Preserve official context, manifest, input, and result hashes. A local file checksum is only file-integrity evidence. Public Practice does not establish a production tournament, hidden-final evaluation, or automatic reward payment.
Troubleshooting
- Invalid input
- Fix the reported field and run
checkagain. Do not treat unevaluated constraints as passed. - Expired authorization
- Run
auth status, thenauth loginfor the same origin and owning account. - Context mismatch
- Inspect
context inspect. Review and explicitly confirmcontext updatebefore making new Runs; old Runs keep their original conditions. - Practice limit reached
- Respect the server's retry delay. Repeating Practice may consume another attempt.
- Submission response lost
- Inspect your saved submissions, then use
submit --resume <operation-id>with the recorded operation. Do not start a fresh submission to guess whether the first saved. - Practice timeout
- The server may still have evaluated the request. There is no remote Run-status endpoint; do not infer cancellation or blindly retry.
- Saved result missing
- Check
submissions listand the browser account. Unknown IDs and revisions belonging to another account are unavailable in your list. A local Run ID cannot open a saved page. - Service unavailable
- Read
arenas inspectfor missing services. Rescue Room submission is unsupported; Practice does not save a server revision.