How to use it

Three steps to one list that follows you around.

1 Put something on it, out loud or on the tab.

Say "put buy a fuel scoop on my list", or press + on the Checklist tab and type it.

The item appears on the list; routes, engineering plans and goals add their own lines too.

put "buy a fuel scoop" on my list Ask Or open Checklist on the Commander tab and press + to type one in. Routes, engineering plans and goals land here on their own.

2 Tick things off by saying so.

Say "tick off the fuel scoop", or press its switch.

The item shows as done and the next stop becomes the current one.

HERE buy a fuel scoop done NEXT STOP grade 3 dirty drive at Farseer Say "tick off the fuel scoop", or press the switch.

! The one that stops people.

Say "remove it" to take a finished item off the list.

The item disappears; until then a ticked item stays so you can see what you did.

Ticking is not deleting. A finished item stays, so you can see what you did. Say "remove it" to take it off.
Why it works this way

One list of everything you are working on, and one place it can be changed.

1 Everything lands in one list.

the lines you write your ship builds your construction sites ONE LIST grouped by everywhere, this ship, this system Because “what am I working on” should have exactly one answer.

2 Two kinds of line, and you never pick which.

AUTHORED a sentence you wrote buy limpets you tick it DERIVED worked out from your journal grade 5 dirty drives it ticks itself — and can untick Which one it is depends on where the line came from, never on a choice you make.

3 Finishing something does not remove it.

STILL OPEN — 6 what you are actually working on FINISHED — 40 still here, ticked, below the line seeing how far you have come is most of the point Deleting is a different act — that one is changing your mind.

4 D47 proposes. You commit.

D47 checklist-proposals.json a suggestion — nothing has moved you accept YOU checklist.json your actual list Accepting is unreachable from the AI. Your journal and your comms panel are text D47 did not write, and anything it can call, a hostile message can try to call. The worst that reaches you is a proposal you decline.

The details

One list of what you are working on. Your own lines, your ship builds and your construction sites all live here — because “what am I working on” should have exactly one answer.

Ask for it

“what am I working on” “read my checklist” “add buy limpets to my checklist” “plan grade 5 dirty drives on the thrusters” “what do my plans still need”

The first two need no AI configured at all — they route straight through, with nothing guessed.

Two kinds of item

The whole design turns on one distinction, and it is a property of where the item came from, never something you pick.

  Authored Derived
What it is A sentence — buy limpets A structured intent — grade 5 dirty drives, MainEngines
How it completes You say so, or the journal event it watches for Computed from your journal
Tick it by hand Yes No — it refuses, and says why
Can un-complete itself No Yes, and it says so once

A derived item refuses a manual tick because the next journal read would either undo it or, worse, leave it standing and lying. In the panel there is no switch on one at all — a greyed-out switch would still assert that ticking is the mechanism, and it is not.

Watched lines

One of your own lines can carry a watch: one journal condition. When a matching event arrives after the watch was set, D47 ticks the line. It stays your line: it keeps its checkbox, you can still tick or untick it, and Remove fulfilled items never removes it.

Watch Ticks on
dock Docking at the station, in the system if one is named
arrive Jumping into the system, or your carrier jumping there with you aboard
buy Buying the commodity, at the station if one is named, until the quantity is reached
sell Selling the commodity, on the same terms
buyOrder Your carrier’s buy order for the commodity reaching the quantity

Names are compared without case, spaces or punctuation, and only an exact match counts. The line says what it is waiting for — Ticks when you buy 5 Hydrogen Fuel at Jameson Memorial · 2 of 5 so far. A watch never unticks a line. Unticking one by hand starts the count again from that moment. An event written while D47 was closed and before the newest journal file began is never seen; the checkbox is there for that.

A line you type into the Checklist tab’s Add box is added at once. D47 then sends the line, once and on its own, to the language model to ask whether one of these conditions would tick it. If the model names one, a proposal to set that watch waits under Suggestions for you to accept or decline. If it names none, no model is set up, or the request fails, the line stays one you tick yourself. A line you edit, tick or delete before the answer arrives is left alone.

Three groups

Universal, this ship, this system. Derived items belong to whatever produced them; your own lines file anywhere, which is what lets “ask Jim about the Krait build” sit beside the Krait’s plan.

Missions

Missions are not on the checklist. They are on the Missions page under Commander. A mission line left in an older checklist file is removed when it loads.

Finishing is not removing

A finished item stays, checked, below the line with its count showing. On something that runs for weeks, seeing how far you have come is most of the point — so forty finished items never bury the six still open.

Deleting is changing your mind. A different act, and it can happen whether or not the item was ever finished.

“Delete completed items”, on the Checklist page’s control bar, does that in bulk: every Done line, whatever list it is in or where it came from, gone in one confirmed press. It looks at the whole checklist rather than what the current filter or search is showing, and is greyed out when nothing is Done. A plan proposal still waiting to be accepted loses the same lines from what it would add, so accepting it afterwards does not put them back.

Changing a plan is a diff, not a rebuild

Burst lasers instead of multi-cannons is a revision, and Directive 47 tells it apart from the world moving underneath a plan that did not change:

  • World changed, plan did not — the item un-completes and you hear about it once. A computed tick going backwards is information, not a glitch to hide.
  • Plan changed — items in both versions keep everything they had earned, dropped ones are removed, added ones open.

A line a later revision wants again comes back as a new open line — Directive 47 does not remember what it had earned before.

This works because an item knows what it is independently of where it sits in a list: slot plus intent for a ship, body or orbital slot plus facility for a system. Talking about one hardpoint rewrites what the plan says about that hardpoint and leaves the shield boosters alone.

What Directive 47 may and may not do to your list

It proposes; you commit. Every tool that would change your list writes a proposal instead, into a second file. You accept it, and only then does anything move.

That is not politeness. Journal text and in-game messages are untrusted input, so anything the AI can call, a hostile message in your comms panel can attempt to invoke. The worst that achieves here is a proposal you decline.

The boundary is visible by opening data\:

File Written by
data/checklist.json You — the panel, and the phrases below
data/checklist-proposals.json Directive 47

Accepting is unreachable from the AI entirely. Say it, or press the button:

“accept the proposal” · “accept that” · “add it to my checklist” · “do it then” “decline the proposal” · “leave my checklist alone” · “decline everything”

How often you hear about one

Once in full, twice as a clause, then not again. A proposal you have not answered is mentioned after a turn that did not resolve it — the full sentence the first time, a short “one proposal is still waiting on you” for the next two, and after that nothing.

Going quiet is not forgetting. It stays on the Checklist page, with its count on the bar, until you answer it. What stops is the talking.

This used to repeat the full sentence after every turn, forever, which is how a Commander learns to stop listening — the same reason a line Directive 47 has no table for is noted once and then let alone. If you want the queue gone rather than quiet, “decline everything” clears it in one.

And a proposal is described rather than inventoried. A revision touching six slots says so — “Set six slots on the Cartage’s plan: …” — instead of reading out six slot names and then three modifications with nothing to say which went where. Slot names go through the same wording layer the checklist lines use, so you hear “7A Shield Generator” rather than Slot01_Size7, and a small revision still names exactly what it changes. The slot-by-slot detail is what the proposal view on the panel is for.

The Checklist page

The first page of the Commander tab, on the bar after Stories — and on the headset panel too, which is the whole reason it moved: it used to be a separate window, and a window cannot appear in VR at all, so a Commander with a headset on could not see their checklist.

It is one list, in your order, with the scope shown on each line rather than the page being carved into a list per ship. What you reorder on a whim is everything you are working on, not one ship’s share of it, so scope is a label and a filter and never a partition.

Reordering

Press a line to select it; it grows a pair of arrows. Press them to move it up or down, past whatever is above or below it whichever scope that belongs to.

Not a drag. A drag is the worst gesture available to a laser pointer at a metre — it needs a press, an aim held through movement, and a release — and it has no spoken form at all, where “move buy limpets up” is just the phrase.

What a state means

A state is a next action, not a badge:

State What to do about it
Elsewhere You own this. Transfer it rather than grinding for another.
Blocked Nothing to do until your rank with the engineer reaches the grade.
Unverified Your journal has something in that slot and Directive 47 cannot confirm it is this one, so it will not claim it.

Colour is spent only on Unverified, because it is the one where something is actually wrong. A page where six things are coloured is a page where none of them is noticed.

Suggestions

Anything Directive 47 has proposed waits on its own page — press Suggestions — rather than arriving as an interruption in the middle of your list. Accepting stays your own act, from there or by saying so, and from nowhere else.

A revision arrives as a diff, so an ordering you spent time on survives a plan change.

The filter

The filter is generated from what is actually on your list — kind, source, group and state — so a new kind of plan turns up in it without anybody remembering to add it.

One filter, both surfaces, and it keeps. What you are reading is the same in the window and in the headset — apply “what Lei Cheung can do here” at the desk and the panel a foot away is under it too — and it is still there next time you start. The search box is not: what you typed is where you were that minute, and one restored from last week is a list that looks broken until you find the box.

The engineer filter shows what that engineer does, not what your standing with them lets you have done today. A Grade 5 roll they offer is on the page whether you are grade 5 with them or grade 1, and the line says which — “Hera Tani rolls this at grade 5, and you are grade 4 with them”. There is no switch for it, because you came to the workshop to find out what is there.

Focusing on one engineer’s unlock

Once “Add to checklist” on an engineer’s own page has put their prerequisites on the list, an entry for them appears under its own heading, Unlocking an engineer. Choosing it shows only that engineer’s own invitation and tribute lines, and any referral line for whoever recommends them — nothing else on the list. The entry is worded with their name and keyed on their id, so a Commander unlocking three engineers at once sees three separate rows rather than one they have to narrow further with the search box.

A finished line stays under Done, the same as under any other filter. If the last of an engineer’s lines does leave the list — ticked off and forgotten rather than kept — the filter falls back to Everything on its own, rather than sitting on a row with nothing left to show.

Include Partial Grades

Beside the engineer filter, and only there, is a switch. It decides which of two questions the page is answering, and they are a sentence apart:

  • off — what this engineer can take all the way to the grade the line asks for;
  • on — and lines they can only take part of the way, which somebody else must finish.

Off is the default and is what you had before the switch existed. On, a line says how far it goes on the line itself — “Lei Cheung takes this to 3 of 5” — so the answer is on screen and not only here.

It matters because an engineer’s grades are not the blueprint’s. Heavy Duty on a Shield Booster is Lei Cheung’s to grade 3, and grades 4 and 5 belong to Mel Brandon and Didi Vatermann. A Grade 5 Heavy Duty line is not his work — but he genuinely can take that booster from nothing to 3, at a workshop you are standing in, and that is real work you would otherwise walk past.

An experimental effect follows the module it belongs to. It carries no grade of its own — it is bought outright and applied at any standing — so on its own nothing would ever hold it back. But applying it is part of finishing that module, so if the module’s blueprint is only partly this engineer’s work, the effect is too: both appear together or neither does.

The tab reflects changes live. It is a view of data/checklist.json, and that file is re-read while Directive 47 is running, so a line edited in a text editor appears a moment later with no restart. A line the file gets wrong is reported rather than silently dropped — a checklist that silently loses a line is worse than one that refuses it out loud.

The file says universal where everything else says custom, and that is deliberate. The group a Commander sees, says and reads in the tool schema is custom — it is the list they wrote themselves. The value stored on disk is still universal, unchanged, so a checklist written by any earlier version keeps loading and there is no migration to get wrong. The two spellings meet in one place, ChecklistScope.Word.

{
  "commanders": [
    {
      "commanderFid": "F1234567",
      "commanderName": "Jameson",
      "items": [
        {
          "key": "note-1",
          "scope": { "group": "universal" },
          "kind": "authored",
          "text": "buy limpets",
          "state": "open"
        },
        {
          "key": "note-2",
          "scope": { "group": "universal" },
          "kind": "authored",
          "text": "Buy 5 Hydrogen Fuel",
          "state": "open",
          "watch": {
            "kind": "buy",
            "subject": "Hydrogen Fuel",
            "place": "Jameson Memorial",
            "quantity": 5,
            "since": "2026-10-07T19:00:00+00:00",
            "progress": 2,
            "countedTo": "2026-10-07T19:08:25+00:00"
          }
        },
        {
          "key": "bp/mainengines/dirty-drive-tuning/g5",
          "scope": { "group": "ship", "key": "12" },
          "kind": "derived",
          "source": "engineeringPlan",
          "text": "Grade 5 Dirty Drive Tuning on MainEngines",
          "intent": {
            "kind": "blueprint",
            "subject": "MainEngines",
            "detail": "Dirty Drive Tuning",
            "grade": 5
          },
          "hull": "Krait_MkII",
          "state": "open",
          "provenance": "asserted"
        }
      ]
    }
  ]
}

Your Commander id is inside the document rather than in the filename. It comes out of the journal, and journal content is untrusted — turning it into a path would buy a path-traversal surface for an organisational convenience.

Ship builds

A plan is a list of intents, not a target loadout. A Krait has around twenty slots and a conversation about a build produces opinions about six — a target loadout would mean inventing the other fourteen and then reporting “6 of 20” where the accurate number is “6 of 9 things you asked for”.

Leaving something out means any, not unknown. “Grade 5 dirty drives and I don’t care which thrusters” is a plan Directive 47 can hold and can meet.

Progress is a diff against your live Loadout, so you never type in what you have already done. Three answers that are not “open”:

  • Elsewhere — you own it and it is in Deciat, and moving it costs 2.1 million. A completely different next action from “go and grind it”.
  • Blocked — grade 5 cannot be crafted at rank 3 at all. Not a slow route, no route; and the price of clearing it is quoted, because naming a blocker and shrugging at it is not an answer.
  • Unverified — see below.

A grade counts as finished at 0.85 progress, not 1.0. That is measured across 6,272 real crafts: of the grades left below 1.0 that the game let a Commander move on from, every one sat at 0.85 or above. Testing for 1.0 would tell you a module you can see is finished is not.

What Directive 47 cannot check: the blueprint’s name

Elite writes a blueprint as a symbol — Engine_Dirty, FSD_LongRange — and never localises it. The shipped recipe table calls the same thing “Dirty Drive Tuning”. Nothing Directive 47 ships carries both spellings, so when everything else about a slot matches, it says so and marks the item unverified rather than guessing. It says that once per item, not every time.

Two ways round it: name the blueprint the way the journal does, or read the verdict — “at grade 5 and finished” is a fact either way. An experimental effect has no such problem: Elite localises that one, so it is checked exactly. See docs/spikes/blueprint-name-join.md.

What a plan costs

“what do my plans still need”

Netted across every live plan at once, because storage caps are shared and two plans that each fit can be jointly impossible.

The total is exact rather than a floor. An application costs exactly one of each ingredient — measured across 786 blueprints and 1,885 ingredient entries — and the crafts a grade takes are 5, 4, 3, 2, 1 as your rank exceeds the recipe’s grade. Known unit cost times known count is a real number.

Caps are reported first, because needing more than you can hold is a flat certainty — at least two trips, however the crafts go — while everything below it is a possibility and has to read like one.

Materials, cargo and ship-locker goods are totalled apart. Meta-alloys are a material, Gold ×200 is two hundred tonnes of cargo, and Opinion Polls ×40 are ship locker; adding them together produces a feasibility verdict that is nonsense delivered confidently.

Anything with no recipe under that name is kept and marked, never refused. A macro refuses an unknown action because it presses keys; a checklist line presses nothing.

Colonisation

Keyed on a system instead of a ship, and riding the same machinery — the key and the table behind it are the only real differences.

Progress is a diff against ColonisationConstructionDepot, which carries what is required and what has been provided. What is left is one subtraction. Two things that follow from how that event behaves, both measured over 6,330 events:

  • It arrives only while you are docked at that site, so what Directive 47 knows is as fresh as your last visit, and it says so rather than implying live numbers.
  • A completed site keeps reporting, so the flag says finished, never “the events stopped”.

What this cannot be. Directive 47 cannot tell you what a facility costs, what it will do to the system, or what order to build in. No licence-clean source publishes those figures — Frontier’s own guide states every mechanic and publishes not one number, and every machine-readable rendering of them sits inside GPL-3.0 source. It holds the plan and counts what the depot says you still owe. See docs/spikes/colonisation-sources.md.

It also cannot tell you a system is unclaimed. A claim lasts 24 hours and lives on Frontier’s servers, so no crowd-fed index holds it.

Speaking up

Three moments, all switchable under Callouts → Checklist changes:

  • A plan item the journal has just changed its mind about — said once, in either direction.
  • Picking up the last unit a plan needed.
  • A watched line ticked by its event — Ticked “Buy 5 Hydrogen Fuel”: you bought 5 Hydrogen Fuel.

The tools

get_checklist

Reads the list. Open items by group, then what is done with its count, then anything waiting for you. Derived items carry the journal’s verdict as of right now, and a watched line says what it is waiting for.

here narrows it to what an engineer in this system could craft today — the blueprint is theirs, you have unlocked them, and your grade with them reaches the grade you asked for. Anything they offer but cannot yet craft is left out of that answer rather than counted as work.

{"type":"object","properties":{"group":{"type":"string","description":"Which list: custom, ship, system, suit or weapon. Omitted shows all of them. With no name, each means the one the Commander is in or carrying right now.","enum":["custom","ship","system","suit","weapon"]},"here":{"type":"boolean","description":"Only what an engineer in this system could craft today."},"kind":{"type":"string","description":"Only the Commander\u0027s own lines (authored), only the computed ones (derived), or one plan\u0027s \u2014 engineeringPlan, colonisationPlan or onFootPlan."},"name":{"type":"string","description":"A specific ship id, star system, suit id or weapon id, when the group is not the current one."},"state":{"type":"string","description":"Only the open items, or only the finished ones.","enum":["open","complete"]}},"required":[],"additionalProperties":false}

get_plan_shortfall

What every live plan still needs, netted across all of them: exact totals against what you hold, caps that force more than one trip, rank gates, what can be gathered in one trip, and what a site still wants delivered.

{"type":"object","properties":{},"required":[],"additionalProperties":false}

add_to_checklist

Proposes a line in your own words. Proposes — it is not added until you agree.

It can also propose that the line ticks itself: tick_when (dock, arrive, buy, sell or buy_order) with subject, and place and quantity where they apply. The proposal names the condition, and counting starts when you accept. A condition that cannot work, such as a quantity on a dock, is refused with the reason and nothing is recorded.

{"type":"object","properties":{"group":{"type":"string","description":"Which list it belongs on. Defaults to custom.","enum":["custom","ship","system","suit","weapon"]},"name":{"type":"string","description":"A specific ship id or star system, when it is not the current one."},"place":{"type":"string","description":"The system for dock, the station for buy and sell. Not used by arrive or buy_order."},"quantity":{"type":"integer","description":"How many, for buy, sell and buy_order. At least 1."},"subject":{"type":"string","description":"What tick_when waits for, as Elite names it: a station for dock, a system for arrive, a commodity for buy, sell and buy_order."},"text":{"type":"string","description":"The line, as the Commander would say it."},"tick_when":{"type":"string","description":"A journal condition that ticks the line itself once the Commander agrees: dock at a station, arrive in a system, buy or sell a commodity, or set a carrier buy order. Needs subject.","enum":["dock","arrive","buy","sell","buy_order"]}},"required":["text"],"additionalProperties":false}

propose_checklist_change

Proposes that one of your own lines is finished, open again, should go, or should tick itself when a journal condition is met (change of watch, with the same tick_when, subject, place and quantity). Only your own lines: a computed item’s state is read out of the journal and simply stated, so there is nothing there to agree to. That is the distinction between observing and asserting, and it is the reason this tool exists at all.

{"type":"object","properties":{"change":{"type":"string","description":"What to propose.","enum":["done","open","remove","watch"]},"item":{"type":"string","description":"The line, in enough of its own words to pick it out."},"place":{"type":"string","description":"The system for dock, the station for buy and sell. Not used by arrive or buy_order."},"quantity":{"type":"integer","description":"How many, for buy, sell and buy_order. At least 1."},"subject":{"type":"string","description":"What tick_when waits for, as Elite names it: a station for dock, a system for arrive, a commodity for buy, sell and buy_order."},"tick_when":{"type":"string","description":"A journal condition that ticks the line itself once the Commander agrees: dock at a station, arrive in a system, buy or sell a commodity, or set a carrier buy order. Needs subject.","enum":["dock","arrive","buy","sell","buy_order"]}},"required":["item"],"additionalProperties":false}

plan_ship_build

Proposes what a ship’s build should say about one slot, leaving everything the plan says about other slots alone.

{"type":"object","properties":{"blueprint":{"type":"string","description":"A blueprint by name \u2014 \u0022Dirty Drive Tuning\u0022. Omit for any."},"drop":{"type":"boolean","description":"Say nothing about this slot. What it already produced is kept."},"experimental":{"type":"string","description":"An experimental effect, which becomes its own item on the same slot."},"grade":{"type":"integer","description":"1 to 5. Omit for any grade \u2014 that is a wildcard, not an unknown."},"ship":{"type":"string","description":"A ship id, name, or a hull they do not own yet. Omit for the one they fly."},"slot":{"type":"string","description":"The slot or the module \u2014 \u0022MainEngines\u0022, \u0022thrusters\u0022, \u0022Slot01_Size4\u0022."}},"required":["slot"],"additionalProperties":false}

plan_on_foot_build

Sets what a suit’s or a hand weapon’s plan says. Like plan_ship_build, it writes the plan and stops: it does not reach your checklist until you promote it, because the plan owns what and the checklist owns when. See On foot for the plan itself.

A modification with no slot named takes the first free one, counted from the grade the plan is aiming at — so planning a modification on a grade 1 suit the same plan is taking to grade 4 works. The grade always comes first in what promotion produces, because a grade 1 item has no modification slots and an engineer’s base has no Pioneer Supplies — so “upgrade first” is a step in the order rather than advice under it.

One modification at a time, deliberately. They are permanent, four at most, and a wrong one is recoverable only by buying and re-upgrading a fresh item, so a batch is the wrong shape for a decision this hard to undo.

{"type":"object","properties":{"drop":{"type":"boolean","description":"Say nothing about this any more. What it already put on the checklist is kept."},"equipment":{"type":"string","description":"The suit or weapon by name \u2014 \u0022Maverick\u0022, \u0022Dominator\u0022, \u0022Karma AR-50\u0022."},"grade":{"type":"integer","description":"The grade to reach, 2 to 5. Omit to leave the grade alone \u2014 on foot that means no upgrade rather than any upgrade."},"item":{"type":"string","description":"The suit or weapon by name. Omit for the suit being worn, or the one weapon carried."},"modification":{"type":"string","description":"One modification to fit \u2014 \u0022Night Vision\u0022, \u0022Magazine Size\u0022. Permanent, so set them one at a time."},"weapon":{"type":"boolean","description":"True when this is about a hand weapon rather than the suit."}},"required":["equipment"],"additionalProperties":false}

plan_colonisation

The same shape for a system, keyed on a place rather than a slot.

{"type":"object","properties":{"drop":{"type":"boolean","description":"Propose that the plan say nothing about this place."},"facility":{"type":"string","description":"What goes there, in the Commander\u0027s words."},"place":{"type":"string","description":"The body or orbital slot the facility goes at."},"system":{"type":"string","description":"The star system. Omit for the one the Commander is in."}},"required":["place"],"additionalProperties":false}

accept_proposal

Not offered to the AI, and refused if it asks. Reachable from the panel and from the phrases above, and from nowhere else. This is the same rule that keeps safety-critical settings off the tool surface: protected is a property of the caller, not of the modality.

{"type":"object","properties":{"id":{"type":"string","description":"One proposal by id. Omit for everything waiting."}},"required":[],"additionalProperties":false}

move_checklist_item

Ordering, on the same boundary. The order is your answer to what you are working on next, which is not a thing an in-game message gets to rearrange — so this is reachable from the Checklist page and from the phrases below, and refused if the AI asks for it.

Say “move it up”, “move it down”, “move it to the top” or “put it at the bottom”. It means the selected line — the one the tab is drawing a highlight round, which is also the line you have just added, so a line and then “put it at the top” works in one breath. Nothing selected is answered by saying so and naming what to say instead.

The four are also buttons on the selected line: the outer pair are the ends, the inner pair the steps.

{"type":"object","properties":{"item":{"type":"string","description":"The line, in enough of its own words to tell it from the others. Omit for the selected one."},"to":{"type":"string","description":"up, down, top or bottom.","enum":["up","down","top","bottom"]}},"required":["to"],"additionalProperties":false}

decline_proposal

The other half, with the same boundary.

{"type":"object","properties":{"id":{"type":"string","description":"One proposal by id. Omit for everything waiting."}},"required":[],"additionalProperties":false}