Use Firegoat
Local evals (Firegoat CLI)
Run AX evals on your own machine with npx firegoat.
The Firegoat CLI runs AX evals on your own machine: no account, no server. Run it in the repo of the tool you want to test. It needs Node 18+ and claude installed and logged in. The product page is firegoat.ai/cli.
Install and run
- Init. Creates
firegoat.yamland.firegoat/, installs the Firegoat skills, and copies a prompt for your coding agent. - Write tests. Edit
firegoat.yamlyourself, or paste the copied prompt into your coding agent and let it write them. - Eval. Your
clauderuns each test in its own fresh folder. Checks run after, and set the exit code.
npx firegoat init # firegoat.yaml + .firegoat/, skills, agent prompt
npx firegoat eval # runs claude on each test in .firegoat/runs/<runId>/<test>/<n>/workFull yaml reference: npx firegoat init --help. All eval flags: npx firegoat eval --help.
firegoat.yaml
Each test is a prompt, an end_goal, and script checks. build builds your code once, so the agent uses your local build, not the registry. install installs that build into each fresh folder.
build: npm pack --pack-destination "$FIREGOAT_OUT"
install: npm init -y >/dev/null && npm install "$FIREGOAT_OUT"/*.tgz
tests:
- name: quickstart
prompt: >-
acme-sdk is already installed in this project. Use it to send one test event
and print the event id. Credentials are in ACME_API_KEY. Keep it minimal.
end_goal: A script sends one event with the SDK's client and prints its id.
checks:
- run: grep -qE 'evt_[A-Za-z0-9]+' "$FIREGOAT_TRANSCRIPT"For a CLI, whatever build writes to $FIREGOAT_OUT is first on the agent's PATH. runs: 3 repeats every test, and {{vars.SHA}} in a prompt is filled from --var on the command line.
npx firegoat eval --json # all tests, JSON summary on stdout
npx firegoat eval quickstart --runs 3 # one test, three runs
npx firegoat eval --var SHA=$(git rev-parse HEAD)
npx firegoat eval --parallel 1 # one run at a time (default 4)How it works
- Runs locally. Every run gets a fresh, empty folder:
.firegoat/runs/<runId>/<test>/<n>/work. Four runs at a time by default. - Your own claude. It runs on your Claude login, or
ANTHROPIC_API_KEYif set. Its config dir is fresh: none of your settings, CLAUDE.md, plugins, skills or MCP servers. The agent starts cold, like your users' agents. - Traces stay on disk. Each run saves
transcript.txt(every tool call, its output, the final answer, files made),run.json, and claude's full session.summary.jsoncovers the whole eval. - Checks set the exit code. Script checks run in the agent's folder after it finishes.
- Your coding agent judges the end goal. Firegoat records no verdict beyond the checks. Your coding agent runs
npx firegoat eval --json, reads each run'srun.jsonand transcript, and decides whether theend_goalwas met.
| Exit code | Meaning |
|---|---|
| 0 | every run's checks passed |
| 1 | a check failed |
| 2 | a run was not graded (claude missing or logged out, crash, timeout, build or install failed) |
| 3 | usage or config error |
Feedback
Something got in your way? Tell us from the terminal: npx firegoat feedback "..."