Flight Data

The flight log, field by field

An AgentRiders flight log is one AI agent run recorded as 14 typed frontmatter fields: title, date, rider, mount, model, harness, task, duration, cost_usd, outcome, burns, lesson, reins and draft. One schema validates every published log and every submission. /logs.json serves every published log as one JSON array, newest first.

By · Published · Updated

Last verified

What is a flight log, as a data object?

A flight log is one AI agent run, recorded as a markdown file whose YAML frontmatter holds 14 typed fields and whose body holds the narrative.

One definition governs every log: src/lib/log-schema.ts, a zod object. The content collection parses published files with it at build; the submissions API validates every composer or MCP draft with it at request time, so an approved submission cannot fail the build. Counted from that file: 10 fields required, 2 optional (model, harness), 2 defaulted (burns, draft). Why each field exists is chapter 5; the form to copy is /logs/template/.

What to record for each AI agent session: the 14 fields

Every published log carries the 14 fields below; the example column is logged, from the one published flight, Shipped AgentRiders Phase 2.

FieldType, limitRequiredMeaningLogged example
titlestring, 1–140yesTask and outcome in one lineShipped AgentRiders Phase 2
dateyyyy-mm-dd, a real calendar dateyesDay of the flight2026-10-16
riderstring, 1–60yesHandle of who held the reinsmaxcr
mountstring, 1–80yesAgent product or frameworkClaude Code
modelstring, ≤ 80noModel or models, when knownClaude Fable 5 for planning and Opus 4.8 for coding
harnessstring, ≤ 80noWhere the mount ranClaude Code on the web (cloud session)
taskenum, 7 valuesyesKind of workcode
durationstring, 1–40yesElapsed time, rider-stated5h
cost_usdnumber, ≥ 0yesDirect cost in USD, self-reported550 (estimate; subscription plan)
outcomeenum, 3 valuesyesResult against the brieflanded
burnsarray, max 20default []What lost money, data or time3, each cost 0
lessonstring, 1–500yesOne change for next timein the JSON below
reinsobject, 4 stringsyesScope, budget, kill switch, autonomyin the JSON below
draftbooleandefault falsetrue hides the log and keeps it out of /logs.jsonfalse

Zero in cost_usd means a supported zero, never “did not check”. A subscription-billed flight has no per-run bill, so its cost is an allocation the rider computed, and the site labels it an estimate.

What goes in burns[] and reins{}?

burns is a list of up to 20 incidents, each with what happened, the recovery and its direct cost; reins is one object of four required strings: scope, budget, kill_switch, autonomy.

burns[] keyType, limitRequired
whatstring, 1–280yes
recoverystring, 1–280yes
cost_usdnumber, ≥ 0default 0
reins keyLimitMeaning
scope1–280What the agent could touch
budget1–120The spend cap, or the billing it ran under
kill_switch1–120How the run could be stopped
autonomy1–120How much it did without a person

An empty list means none were observed, not that the setup cannot fail. A burn cost already inside the flight’s cost_usd is explained in the body, not counted twice. Reins describe enforcement, not instructions; chapter 2 draws the line. The logged reins and one of the three logged burns are in the JSON entry below.

What are the allowed values for task and outcome?

task accepts exactly seven strings and outcome exactly three; any other value fails validation at build and at submission.

FieldValuesMeaning
taskcode, ops, research, sales, writing, data, otherThe kind of work; a category, not a claim of expertise
outcomelandedThe agreed deliverable passed its acceptance checks
partialUseful work exists, but part of the agreed result remains unmet
abortedThe run stopped without completing the agreed deliverable

Facet pages under /logs/ group flights by task, outcome, mount and whether burns is non-empty.

How is a log’s slug and URL decided?

The slug is the file name without .md: lowercase ASCII letters, digits and hyphens, 1 to 80 characters, starting and ending with a letter or digit; it becomes /logs/<slug>/ and never changes once published.

SLUG_REGEX in src/lib/log-schema.ts is ^[a-z0-9](?:[a-z0-9-]{0,78}[a-z0-9])?$. A hand-filed log is named by its author. A submission takes the slug it supplies, or slugify(title): lowercase, accents stripped, punctuation removed, spaces and underscores to single hyphens, cut at 80. “Shipped AgentRiders Phase 2” became shipped-agentriders-phase-2.

What does one logs.json entry look like?

Each entry is the log’s frontmatter without draft, plus its canonical url, in one JSON array sorted newest first.

src/pages/logs.json.ts builds it: logs with draft: false, sorted by date descending; url absolute with a trailing slash; date a yyyy-mm-dd string; model and harness omitted when absent, never null; numbers stay numbers; served as application/json; charset=utf-8. The live entry, with two of its three burns cut for length:

[
  {
    "url": "https://agentriders.com/logs/shipped-agentriders-phase-2/",
    "title": "Shipped AgentRiders Phase 2",
    "date": "2026-10-16",
    "rider": "maxcr",
    "mount": "Claude Code",
    "model": "Claude Fable 5 for planning and Opus 4.8 for coding",
    "harness": "Claude Code on the web (cloud session)",
    "task": "code",
    "duration": "5h",
    "cost_usd": 550,
    "outcome": "landed",
    "burns": [
      {
        "what": "A local dev-server kill script repeatedly matched and killed the agent’s own shell (exit 144), stalling test runs.",
        "recovery": "Ran the kill from a file and by port instead of an inline process-name pattern.",
        "cost_usd": 0
      }
    ],
    "lesson": "\"Tests pass\" is not \"safe to ship\": agent-written code needs an adversarial review pass before merge — ours caught an IDOR and a stored XSS that 38 green tests missed.",
    "reins": {
      "scope": "maxfain/agentriders only — feature-branch PRs into main; Cloudflare account via a scoped API token; production D1 + Pages",
      "budget": "subscription",
      "kill_switch": "on — human merges each milestone PR manually; secrets and infra changes gated on the owner",
      "autonomy": "High — autonomous build across milestones M0–M2, with human approval at every merge"
    }
  }
]

The 550 is an estimate: budget says subscription, so no per-run bill exists, and the log does not record how the figure was derived. /data/methodology/ explains the label.

How do I fetch /logs.json, and what may I do with it?

https://agentriders.com/logs.json is a static file with no sign-in, regenerated at every deploy, and the Terms let you quote its records with attribution and a link.

curl -s https://agentriders.com/logs.json \
  | jq '.[] | {url, mount, duration, cost_usd, outcome, burns: (.burns | length)}'

Today it holds 1 entry from 1 rider on 1 mount: a case study, not a sample; no median is published below 10 flights from 3 or more riders. Every value is self-reported; a verified flight’s device-signed record lives outside this file (/api/public/site-state.json lists which slugs carry one; /agents/ describes it). public/_headers sets no CORS header, so read the file from a script, server or agent, not another site’s browser page.

The license lives in one document today. The Dataset JSON-LD on /logs/ names the Terms as its license, not a Creative Commons one: declaring CC BY 4.0 would promise a public reuse right the Terms do not grant. What the corpus /logs.json distributes is the frontmatter fields, never the log bodies, which stay the author’s. The Terms are narrow: content belongs to its authors; quote it with attribution and a link; do not republish whole chapters or logs without permission; riders keep their rights and grant AgentRiders a non-exclusive licence to publish. They carry no public CC BY grant, so this page promises none. Until they do: credit “AgentRiders Flight Logs, https://agentriders.com/logs.json”, keep each record’s rider handle (it is the byline), and ask [email protected] before republishing whole records. If the Terms gain a public reuse grant, this page changes with them.

Is logs.json a transcript dataset?

No. It is a metadata-only run log: never prompts, code, file paths, command text or output.

A transcript is a different object. Claude Code stores each session as JSONL under ~/.claude/projects/<project>/<session-id>.jsonl and documents the format as internal, changing between versions, with direct parsing unsupported (Claude Code docs: sessions, last verified 2026-10-16). A flight log is what a rider asserts about a run after reading the receipts, in 14 fields another rider can compare. Signed counts and timestamps from the agentriders CLI go into the verified record, not logs.json.

Questions riders ask

Is there an agent run log template I can copy?

Yes. /logs/template/ shows the YAML frontmatter, copyable and downloadable: the 14 fields above, what to record for each AI agent session. Replace every example value and leave draft: true until reviewed. The composer at /logs/new/ collects the same fields; rider comes from your account and draft is set to false when an admin approves.

Where can I download AI agent run logs as JSON?

https://agentriders.com/logs.json, no sign-in, regenerated on every deploy. It is an array sorted newest first; each entry is one published flight’s frontmatter plus its URL. Today it holds 1 entry, from 1 rider on 1 mount, and that flight’s cost is an estimate on a subscription plan.

Can I use logs.json in my own project or paper?

Quote it with attribution and a link, per the Terms: “AgentRiders Flight Logs, https://agentriders.com/logs.json” plus each record’s rider handle. The Dataset markup on /logs/ names the Terms as its license, and the Terms grant no public CC BY reuse, so ask [email protected] before republishing whole records. Do not average one flight; /data/methodology/ says when a number is safe.

Sources