nc://flightlog

v0.1.0Pinned
ThomSharktools/nodecode-flightlog: Records every turn locally and flags the ones that finished green but went wrong. - a rewrite of piyushpradhan/flightlog (MIT), credited to piyushpradhanf3daef5· 9 Nov1 commit
test1 filecell.lisp23.4 KBrules.lisp14.5 KBstore.lisp10.8 KB

nodecode-flightlog

Flightlog: records every turn locally and flags the ones that finished green but went wrong. A Nodecode rewrite of piyushpradhan/flightlog by piyushpradhan.

A turn can finish cleanly and still be wrong: the answer says the fix works but no test ran after the last edit, a tool errored and the answer never mentions it, the same call goes round forty times, a job that usually spends ten thousand tokens spends forty, a job that usually makes twelve calls makes one and answers from memory. Flightlog records what each turn did and says so, afterwards, in plain words.

Nothing is dialled and nothing leaves the machine: the record is one JSON document under the Nodecode home.

Get it

Tell the agent "add the flightlog cell", or run nodecode add nc://flightlog.

Set it up

Nothing is required. Recording starts when the cell starts, and the store lives in flightlog/ under the home. The flightlog section of ~/.nodecode/config.jsonc (or /settings, or the page's Settings tab) moves the store and tunes what counts as wrong:

{
  "flightlog": {
    "dir": "~/notes/flightlog/",   // where the store lives; flightlog/ under the home unless answered
    "keep_runs": 200,              // runs kept, newest first
    "notice": true,                // raise a flagged run as a standing notice
    "loop_repeats": 5,             // the same tool with the same arguments this many times
    "cost_spike_pct": 300,         // tokens this percent of the job's median
    "effort_collapse_pct": 25,     // tool calls under this percent of the job's median
    "min_baseline_runs": 3         // healthy runs a job needs before its baseline speaks
  }
}

A value out of range refuses the start, naming the member; a store file that will not parse refuses it too, rather than being quietly replaced.

Use it

/flightlog lists the newest runs with a verdict each:

Flightlog · last 24h: 3 runs, 1 needs a look

⚠ Claimed it works, but never proved it
   chat · 4m ago · run 3f9a01c2 · 6 tools · 9.1k tokens

✓ Looks fine
   job cron-7 · 1h ago · run 71b2d3e4 · 11 tools · 12.4k tokens
  • /flightlog why RUN — one run's report and its timeline: what ran, on what, how long, and every step that failed, plus the finding's sentence and why it matters.
  • /flightlog jobs — each scheduled job's baseline: median tools, tokens and duration over its healthy runs.
  • /flightlog ack FINDING — acknowledge a finding; that rule stays quiet for that job from then on.
  • /flightlog purge confirm — forget every run, finding and silence.

When a run is flagged and notice is on, the verdict is also raised as a standing notice naming the run, so it reaches you without opening anything. The model can read the same record with the flightlog_runs tool.

The rules

Rule Trips when Default
Claimed it works, but never proved it A file was edited, the answer claims tests pass or the fix works, and no test, build or lint ran after the last edit — or the last one failed any
Said done, but a step failed A tool call failed and the answer never mentions it 1 error
Stuck in a loop The same tool, with near-identical arguments, again and again in one turn 5 repeats
Cost far above normal Tokens far above the job's median 3× median
Did far less work than usual Tool calls far below the job's median under 25%
Answered without doing any work No tool call at all, on a job that normally makes them baseline over 0

A job is a scheduled turn: the cron cell runs every job in its own session, cron-<id>, and a run in such a session is compared with that job's last seven healthy runs. Everything else is a chat, and gets the three rules that need no history. The baseline rules stay silent until a job has three healthy runs.

(help :flightlog) in a session answers the same page.

What is recorded

Per turn: each tool call (its name, the argument that matters — the command, the form, the path — how long it took and whether it failed), each model round with its tokens, the answer, and how the turn ended. A call's one argument is clipped to a hundred characters and a failure's words to a hundred and twenty, so the store stays a record and not a second transcript.

Licence

MIT. The original is MIT, Copyright (c) 2026 Piyush Pradhan; see NOTICE and LICENSE.

Add nc://flightlog

  1. 1

    Install Nodecode

    Once per machine.

    $ curl -fsSL https://nodecode.ai/install.sh | sh
  2. 2

    Add the cell

    Pinned at f3daef5.

    $ nodecode add nc://flightlog

    Or tell the agent add the flightlog cell.