These docs track main. Latest release: v1.0.0.

antigravity-booster
Reference

Log formats

events.jsonl event types, per-ticket transcripts, run.json and the run report.

Every agb run (and agb sweep) leaves four kinds of record under .booster/ in the target repository. All are JSON, written owner-only. Paths are on File layout.

FileShapeWriter
.booster/logs/<runId>/events.jsonlone event object per line, append-onlyRunStatus.appendEvent
.booster/logs/<runId>/<ticket>.jsonlone transcript record per agy invocationrunAgy
.booster/run.jsonsingle object, rewritten atomicallyRunStatus.flush
.booster/report.jsonsingle object, written once at the endRunStatus.report

events.jsonl

Every event has ts (ISO 8601), runId and type. There are four types.

phase

Emitted on every ticket update (ticket()).

FieldPresent whenMeaning
ticketalwaysTicket id.
tothe phase changedNew phase.
fromthe ticket had a previous phaseOld phase.
detailgivenFree-text detail (failure reason, merge sha and so on).
modelgivenModel working the ticket.
strikesgivenStrike count so far.

Phases the scheduler sets are pending, building, gating, prosecuting, fixing, merging, merged, failed, blocked and paused.

{"ts":"2026-07-14T14:09:16.252Z","runId":"run-lq2x1k","type":"phase","ticket":"T1","to":"gating","from":"building"}

pool

A snapshot of pool state whenever leases change (pools()). pools is the PoolSet.snapshot() object: caps, in-flight and request counts per pool.

strike

A failed build attempt (strike()): ticket, model, error, strikes.

report

The last event of a completed run: done: true and report, the same object as report.json (report()).

agb status --watch tails this file and exits when it sees the report (watchStatus). The sidecar dashboard streams it to the browser over /events (server).

Ticket transcripts

Each line of <ticket>.jsonl records one agy call made for that ticket, builder or fixer (log file per ticket):

FieldMeaning
tsWhen the call finished.
modelModel slug requested.
cwdWorktree the call ran in.
strikeAttempt number.
msWall time.
promptThe full prompt sent.
outputThe full agy stdout. With stream-json this is the raw event stream.
okWhether the call succeeded.
rolebuilder for build calls.
kind, errorOnly when ok is false: the failure class (timeout, server, spawn, schema_violation, and so on) and message.

Transcripts can contain secrets

prompt and output are stored verbatim. A model that reads a .env can quote it into its output. Treat .booster/ as sensitive. See Security.

run.json

The live state of the current or last run (RunStatus constructor):

{
  "runId": "run-lq2x1k",
  "repo": "/abs/path/to/repo",
  "startedAt": "2026-07-14T14:09:00.000Z",
  "updatedAt": "2026-07-14T14:12:41.000Z",
  "done": false,
  "tickets": {
    "T1": { "phase": "gating", "model": "gemini-3.8-flash-low", "strikes": 0, "updatedAt": "..." }
  },
  "pools": { }
}

tickets.<id> merges every patch the scheduler sends (phase, detail, model, strikes, error) with its own updatedAt. When the run ends, done becomes true and report holds the report object.

Report

agb run prints the report on stdout and writes it to .booster/report.json (report object):

KeyTypeMeaning
runIdstringRun id.
mergedstring[]Ticket ids merged into the base branch.
failedobjectTicket id to failure reason. Non-empty means exit code 2.
requestsobjectagy requests made per pool.
enforcementAvailablebooleanWhether live rail enforcement by the companion plugin was active.
enforcementReasonstringWhy enforcement was or was not available.
compromisedstring or nullSet when the run-integrity check found tampering (for example hooks or git config changed during the run).

On this page