Skip to main content

Crate ljos_cli

Crate ljos_cli 

Source
Expand description

One seat over the habitats. Each habitat keeps its own crate.

Cards are read-only. Remember/Prefer POST /v1/atoms and never extract on write. Consensus is a different crate, then the tracker verb. Policyd is argv law: this process does not reload a pack as a check.

Modules§

admit
Origin-bound admission.
approval
One-use consent for an ask verdict when the caller has no approval UI.
ask_pack
The ask pack: built-in ask rules for commands that lose data or reach past the machine. Database drops and resets, infrastructure and cluster teardown, cloud and container deletes, publishing a package, reading a secret, emptying or deleting a config file, mirroring a delete into the home directory, dropping a stash, and putting a world-writable directory ahead of $PATH each ask the person first, with a reason and a safer form. The pack is on by default. LJOS_ASK_PACK=off turns it off, and a list such as LJOS_ASK_PACK=db,cloud keeps only those classes. A seat rule in the pack is read first, so a person’s own deny or ask on the same line wins.
capture
A standing choice the person states in chat.
command_prefs
Preferences at the moment the agent acts.
hud
ljos hud — exec the separate ljos-hud binary.
jev
The prompt hook’s judgments through Jev, TypeSafe’s decision model, on TypeSafe’s own API or OpenRouter’s Decisions API: which candidate claims bear on a prompt, whether the prompt corrects the agent, and whether it puts a choice.
mail
Mail from one seat to another.
persona_session
A persona’s session: the runner that thinks as the persona, in a pane the person can watch and talk to, kept across hand-offs.
plugin
A harness child, restarted the way OTP restarts one.
reap
Reap idle claims: a sitting nobody finished goes back to ready, and its seat hears why. A claim is idle when neither its claim time nor the newest tracker commit naming it falls inside the window.
runner_hooks
Hook setups for runners whose hook contract is not Claude Code’s own: GitHub Copilot, Gemini CLI, Windsurf (Devin Desktop), Factory Droid, Kiro, Cline, Qwen Code and Crush.
sync
Sharing the seat’s memory across machines through the tracker repository that already travels between them.
tools
The tools a runner lives in: terminal multiplexers and agent runtimes. A tool opens a pane the person can watch and hands the runner a line, and its alive verb says whether the pane is still there.
upgrade
ljos upgrade: replace the seat’s binaries with a published release.
wake
Wake a seat when mail reaches it.

Structs§

BumpRow
One module of a bump bundle as the tracker will hold it.
Calibration
One voter’s forecast record. The bins are the probabilities actually stated, in thousandths, each with how many times it was stated and how many of those events occurred. Murphy’s categories are those values, not a grid this seat invented.
Campaign
A campaign state file: the package it builds, the target, its findings.
CommitLock
An exclusive advisory lock on a file, held until dropped. Taking it blocks; a lock that cannot be opened is no lock, and the commit goes on as it would have without one.
ConsensusStep
CrateVersion
A registry answer and where it came from: the day cache on disk, or the registry itself.
DenseSignal
What the pack’s encoder said about one hit: its rank on the dense ballot (from 1) and its cosine with the prompt. Both are absent on a pack that does not send them, or on a hit the encoder did not name.
Event
One dated event on an issue’s timeline, from whichever store holds it.
Expired
A claim on the graph that has been quiet longer than the lease.
Finding
One typed finding from an eb-stack campaign state file, flattened to what a seat reads and remembers.
Forecast
learn_about and learn_anchors together, written to the pack: the rows, then the personas the outcome moved. Returns what was written.
Habitat
One habitat and whether it answers.
Harness
One agent runner, as the seat’s own configuration describes it. The seat ships no runner’s name: the file at harnesses_path names them, one table each, and onboard and doctor read it.
Harnesses
The whole file: [[harness]] tables, and [[tool]] tables for the multiplexers and agent runtimes a runner lives in (tools).
Hold
What a conversation left beside the claim graph when it took a node: the name it held under, its seat, the runner process, and when. The claim graph keeps only the hashed actor; this is how a later conversation that finds the node held learns who holds it, and whether that conversation is still running.
HookCall
What the runner’s hook hands the seat: the event, and the text worth asking the pack about. From a tool call, the command about to run; from a prompt, the prompt.
PanelVerdict
Whether a closed panel round passed, and why not when it did not.
Partition
Murphy’s partition of the Brier score (1973, doi:10.1175/1520-0450(1973)012<0595:ANVPOT>2.0.CO;2). brier = reliability - resolution + uncertainty.
Persona
A voter with a view of its own: a persona. anchor in [0, 1] is how far it moves off its ballot in a settle; 0 never moves, 1 is a plain DeGroot voter. entities are the domains it speaks to.
Playbook
A recipe a sitting copies before personas enter. models are optional spawn hints; every panel still ends in ljos vote --as then ljos consensus.
Prediction
One voter’s forecast on one issue: what share the others give each option, or the option it expects to win.
PushCall
A git push found in a shell line: where it runs, its arguments after push, and the LJOS_CITE it carries.
PushFacts
What the gate knows about the remote a push goes to.
Reading
One reading of a habit: a number the seat keeps measuring, with the cadence it is measured at. A reading is a claim of kind habit that supersedes the reading before it, so the pack holds one live value a habit and search --as-of still answers what it stood at then; its review clock is the cadence, so due and the hook say when the next reading is late.
Remembered
What remember_findings did with one finding.
Rule
Argv law kept in the pack: a glob over the command line, a verdict, and the reason a reader sees when it fires. deny stops the action at the runner and under ljos policy; ask hands it to the person.
Said
What a habitat printed, kept for a caller that has to hand it on. A non-zero exit is an error carrying stderr.
Seat
Who is sitting. The seat is the program that connected: the name a runner remembers, votes and earns trust under, the same across its conversations. The holder is that seat in one conversation: the name its claims are held under, so two conversations of one runner hold two tickets while a vote from either counts for the one voter.
SeatDecision
What a push cite stood on: the option, and the ballots counted for it in words.
Step
One step an onboarding took, or would take.
StopTurn
The turn a stop ends, read from the runner’s transcript: the person’s last request, the shell commands since it, the output of the latest test run (or of the last commands when none ran), and the final message.
Trust
One row of the influence graph: from listens to to with weight. about scopes the row to the domains it speaks to: a row with none applies everywhere, a row with some applies when one of them meets the issue at hand (its title, or the entities of the island it activates).
WorkflowChild
One child of a workflow parent, as the status reads it.
WorkflowConfig
The workflow settings S1 reads: which workflow new feature work takes, the panel, who can veto, the pass share and the tie-break. There is no round cap and no setting that waits on the person.
WorkflowStatus
Where a workflow parent stands and what comes next.

Enums§

Access
Whose a remote is, as far as the seat can tell.
HookShape
The hook contract a call arrived in, told apart by its stdin. The runners share one name for the answer, permissionDecision, but not what they do with it.
JevVote
What a Jev ballot did: cast under the persona’s name, or handed to a subagent because Jev was not sure enough.
PersonaWrite
How a persona write treats a live persona of the same name.
PushTier
How much a push needs before it runs.
Stage
The step of a workflow a child issue stands for.

Constants§

BROAD_EPSILON
The confidence bound a broad issue settles under: voters within this L1 distance of each other’s opinion listen to each other.
BROAD_TAG
The tag on an issue that asks for bounded confidence: a panel for a broad audience is allowed to settle into clusters, and the settle says how far apart they are, where a single-position model would average them away. Without it the anchored model runs.
CARD_NAMES
Working-core files this seat will print. Nothing else, and never write.
COMMAND_PREFERENCES
How many preferences one command hears at most.
CORRECTION_CUES
Phrases a person uses when the agent has forgotten something it was told. A prompt that opens this way is a preference or a lesson the pack does not hold yet, and the moment to write it is now, before the work that follows.
CURSOR_GATE_DEADLINE_MS
How long a Cursor gate waits on the seat before the seat refuses the call itself: under the 10 seconds onboard registers, so the refusal is written before Cursor gives up on the hook.
CURSOR_HOOK_EVENTS
The events the seat’s hook takes in Cursor’s hooks file, each with its timeout in seconds. They are the gate before a shell command, the prompt, the tool results that deliver its note, a failure, a compaction, the stop, and the end of the session. A prompt’s note is held, since Cursor does not hand a prompt hook’s context to the model.
DECISION_CUES
Phrases that put a choice to the agent. A choice with more than one defensible answer is a ballot, and a ballot needs an issue to sit on.
DECISION_OPENING
How much of a prompt the decision cues are looked for in.
DEFAULT_ANCHOR
The anchor a voter with none of its own settles under when a persona votes on the same issue: it moves halfway toward the others. Under Friedkin-Johnsen a voter at susceptibility 1 keeps none of its ballot, so with no anchor of its own the seat lost every settle to any anchored persona, however few held that view.
DENSE_ALONE_AT
The cosine the encoder’s first hit must reach when it shares no word with the prompt. Set on the 20-memory set: 13 of the 16 paraphrase targets that the encoder ranked first cleared it, and the first hit on none of 12 unrelated prompts did (their best was 0.653).
DENSE_ALONE_RANK
How far down the dense ballot a hit that shares no word with the prompt may sit and still be handed over: first only.
DENSE_WORD_BEHIND
How far below the prompt’s best cosine a hit that names the subject may sit, in place of two scorers agreeing. The cosines of one prompt sit close together, so the distance from the best tells more than a fixed floor. One ordinary word of a longer cue does not enter this band: see [names_the_subject].
DUE_SHOWN_TTL_S
How long a due row stays open to graded after a page showed it.
DUE_WINDOW_DAYS
How far back the prompt’s due line looks.
ENCODER_WARMING_NOTE
What a prompt hears while the pack’s encoder loads. On a new machine the first load downloads the model, which takes longer than a hook may.
FAILURE_SHARED_WORDS
How many content words a lesson must share with a failed command and its error. A failure cue is long and noisy. One word in common (build in an npm error and in “Grok Build”) is a coincidence, not a match.
GATE_REFUSED_EXIT
The exit status of a gate the seat refused because the hook failed. Cursor, Claude Code and Codex each read exit 2 from a tool hook as a deny; any other failing status lets the call run on Cursor’s CLI.
GROK_PACK_LINE
How this runner calls the pack. Its tools are not in the built-in list.
HABIT_ENTITY
The entity a habit’s readings carry, so a name finds them.
HABIT_EVERY_S
A habit’s cadence when none is given: a week, in seconds.
HARNESSES_EXAMPLE
An example of the file, with placeholder names. ljos onboard --example prints it; the two shapes are a registering command and a config file.
HOOK_DEADLINE_MS
How long a context hook may take before it answers with nothing. The shortest runner cut-off seen is grok’s 15 s on a prompt; this leaves it room on a loaded host.
HOOK_EVENTS
The events the memory hook fires on when a runner’s table names none: the prompt, which carries the task in the person’s words. A tool call carries the command about to run and is a cue too; a runner asks for it with hook_events. The default came out of a panel of this seat’s personas: a turn issues many shell commands and one prompt.
HOOK_MATCHERS
The events the hook knows a matcher for; any other event takes *.
HOOK_MAX_MEMORIES
The most memories one prompt is handed. Past three, the ones that bear on the prompt are read among the ones that do not.
HOOK_RERANK_BUDGET_MS
How long the prompt hook waits for the reranked search. Runners cut a hook off at 10 to 20 s, and a loaded host has made the rerank alone take longer than that.
HOOK_SCORE_FLOOR
The floor a hit must reach, as a share of the strongest hit’s score, to be injected. A command line matches many claims weakly; only the ones that match it as well as the best does are worth the agent’s context. The floor is not relevance: a vague sentence scores high on unrelated lessons, so a hit must also name a content word of the cue.
JEV_ALONE_AT
How sure Jev must be that a claim bears on a prompt it shares no content word with.
LEARN_BETA
The factor a refuted voter’s rows shrink by (Hedge, doi:10.1006/jcss.1997.1504).
MIN_NAMED_OUTCOMES
Named outcomes a pair must share before ljos-consensus correlation reads its correlation (its --min-shared default). Below it no discount can move, so the reading is not asked for.
OOM_RECENT_S
How long an OOM kill keeps the host row failing.
PANEL_BY_VIEW
How many specialists a panel seats by their views when no domain and no generalist speaks to the issue.
PLAYBOOK_NAMES
The closed set. Write, list, bind, and copy refuse any other name.
PLAYBOOK_NOTE_PREFIX
A tracker logbook note that binds a playbook name to an issue. Latest such note wins; empty rest is the sitting-scoped drop finish/release write.
PLUGIN_TEMPLATES
The plugins ljos carries for runners whose hooks are code, by name. {ljos} in each is filled with the absolute path at onboard.
POLICYD_DEADLINE
How long the TCB has to answer before the line is refused. A runner times a hook out after seconds and most then run the tool, so the check must give its own answer first.
POLICYD_MIN
The oldest ljos-policyd this ljos runs with. A Rust older than the workspace’s rust-version can leave an older one installed: cargo install picks the newest release that builds and says nothing.
POLICY_TCB
Printed on stderr. ljos-policyd is the TCB when it exists.
PRINCIPLES
Five named principles, invocable mid-sitting, mapped onto existing law.
PROTOCOL
The sitting protocol: which store answers which question, the order of verbs before, during and after the work, and the refusals worth knowing. ljos protocol prints it, ljos onboard installs it as a skill, and the server serves it at ljos://protocol. Harness agnostic on purpose.
REQUIRED
The habitats the seat needs. The encoder (packset-embed) is not one: it links ONNX Runtime, and without it the pack ranks by words alone.
RUBRIC
The scoring sheet a compose is voted on. Personas vote the compose, not accept-at-most-one on the designs.
RUST_MIN
The oldest Rust that builds the seat from source, the workspace’s rust-version.
SEAT_ENTITY
The entity every write carries: which seat wrote it. Many seats share one pack, and a reader can then see whose lesson it is reading.
SEAT_PATHS
The files that are the seat’s law and its reach into each runner: the binaries the hooks run and the files that register them. An agent that may rewrite them can rewrite the law, so only the person does.
SEAT_VERBS
The seat verb a bare tracker verb stands in for: the tracker writes one store, the seat’s verb writes every store and weighs the ballot.
SEAT_WORKSPACE
The workspace the seat’s memory lives in when nothing names one. The pack’s command line keys a workspace to the repository it stands in; a seat is one memory across every repository it works in, so the seat pins one. PACKSET_WORKSPACE overrides it.
SHIPPED_PLAYBOOK_NAMES
The six shipped recipes. Kind playbook, weighed not recalled.
SITTING_DUE
How many due rows a sitting prints before the summary line.
SITTING_TIMELINE
How many dated events a sitting’s timeline prints. Protocol: last twelve.
TITLE_PLAYBOOK_NAMES
The names a title token binds by itself. feature is left out: “feature” is an ordinary word in titles, and the feature recipe is for a parent that ljos workflow --start put under the workflow.
TRUST_FLOOR
The least a row can fall to, so a voter who is right again is heard again.
TWIN_EVENTS
Events said once per occurrence, whose twin from a second registration is dropped by hook_twin. A tool gate is never dropped: its verdict must reach the runner from every registration.
WORKFLOW_NAMES
The workflows a parent issue can carry. Each is the playbook of the same name; the parent keeps it across every sitting on its children.
WORKFLOW_NOTE_PREFIX
The logbook note that binds a workflow to a parent: workflow: NAME. Latest wins and an empty rest drops it, like the playbook note, but no finish or release writes the drop: the workflow outlives every sitting.
WORKFLOW_TAG_PREFIX
The tag a workflow parent carries, for boards and search. vissue splits org tags on :, so the tag joins with a hyphen.
WORK_NUDGE_EVERY
Tool calls a conversation that already holds an issue may make without a word to the seat before the hook reminds it. A conversation that holds none is told on the first result, when the seat tracks work.

Functions§

accepts_another_conversation
Whether a conversation under a runner may accept a proposal: only one another conversation filed, such as a worker it started. proposer is the holder the proposal’s atom names, holder this conversation’s.
add_entities
Add entities to a body without losing the seat’s.
admits_judged
Whether a judged claim reaches the prompt: Jev says it bears, the two scorers agreed, and its score clears HOOK_SCORE_FLOOR of the top.
admits_local
Whether a hit from the fused pool reaches the prompt on a pack that sends the encoder’s cosine. A preference, a standing lesson or a transient lesson gets in when the encoder ranked it first at DENSE_ALONE_AT or more, or when it names the prompt’s subject, clears HOOK_SCORE_FLOOR of the top score and sits within DENSE_WORD_BEHIND of best, the highest cosine in the pool. A lesson with no horizon tag stays out.
adopts_holder
Whether assignee names the same seat as any of named, the holder names the hold record and the tracker give, so complete may finish under the claim graph’s holder.
age_of
How long ago a stamp was, in words a reader can place: today, yesterday, N days ago, then weeks, months and years once the count stops fitting the smaller unit. Empty when the stamp is missing or unreadable, in N days for a stamp ahead of now.
anchors_json
Anchors as the settles take them: {"name": anchor, ...}.
announce_seat
The MCP server, once a client has said who it is: the seat is the client’s name. The holder is that seat and a short tag for the *_SESSION_ID the runner stamped, else that seat tagged with the runner’s process. The record under the runtime directory is how ljos in a shell the same runner opened names the same seat and holder. A runner started from another runner’s shell carries that runner’s ids; it holds under its own process and leaves the parent’s records alone.
answer_denies
Whether an answer refuses the action. JSON is a deny on decision, permission or permissionDecision. Plain text is a later line, or the only line, that starts with deny: or deny and a tab. A lesson that merely contains the word does not count, and an ask does not.
answer_gate
Write a gate’s answer and mark it given, so a failure after it, or the deadline, writes nothing more.
arm_gate
Arm the refusals of a gate call: a panic in the hook writes the deny of hook_failure_output and exits 2 (a panic exits 101, which Cursor’s CLI reads as an allow), and on Cursor, a hook with no answer by CURSOR_GATE_DEADLINE_MS does the same. A Cursor hook that times out is a deny in the IDE and an allow in the CLI, so the seat answers first. Nothing is armed for an event that is not a gate.
as_thread
Run f as the thread a runner named on this call, when it named one. A runner that spawns one server for many conversations names each in the call’s metadata rather than in the server’s environment.
ask_persona
ljos ask NAME TEXT: the persona’s own session takes the question, in its open pane or one that continues its session.
asks_decision
A tool call the transcript names at the top level: name and arguments. Whether the person’s words ask for a choice rather than a change.
assist_note_line
The line ljos note adds when another seat holds the issue. A note from outside the sitting is an assist: it goes in the logbook, which the holder reads at its next sitting, and ljos send reaches the holder now. None when nobody holds the issue live, when this seat holds it, or when no record on this host names the holder’s seat. Reads only; a node the claim graph lacks is not minted.
atom_body
Explicit claim body. The text is stored as given; never harvested. The entities open with the seat that wrote it.
atom_kind
Remember → lesson, Prefer → preference. Trust rows go through trust_atom.
atom_out
What rule and forget print. The default is one line. --json is the atom, embedding included.
atom_source
Where a claim was written: the runner, the conversation, the host and, when the runner stamped one, the turn. An audit reads a claim’s lineage here instead of guessing it from its entities.
atoms_lean
The pack’s live atoms without their dense vectors. Every reader here wants texts, kinds, review clocks, trust or rules; the vectors are nine tenths of the listing, and parsing them grew one ljos-mcp from 10 to 66 MB and kept it. A writer older than embedding=omit sends them anyway, and the answer is the same.
atoms_timeout
How long a pack listing may take. A hook is killed at 10s and the kill drops a deny, so the listing fails at 2s and the local gate still runs. Outside a hook the listing may take 30s.
ballot_rows
An issue’s ballots as vissue vote ID --json prints them; empty when the tracker does not answer.
ballot_seat
The seat a ballot or a forecast counts for. Refused when nothing named the seat and it is only the program above this shell: a subagent with no LJOS_SEAT cast 25 forecasts as exec-daemon, the box’s command daemon, and nothing said so (Software-o9bu). LJOS_SEAT, VISSUE_AGENT, an MCP client’s name or a runner’s record name a seat; a person at a terminal is their login user, as before.
ballot_voters
The names on an issue’s ballots, from vissue vote ID --json.
ballots_from_json
(agent, choice) pairs from a tracker’s vote --json.
bare_seat
The bare seat a holder name stands for: no :node scope, no @host suffix, trimmed and lowercased.
bind_playbook
Hold name on issue until finish or release. A different name while one is held is refused: mid-sitting turns re-read the same note.
block_output
The answer that keeps an agent going one more round with reason, in the runner’s words for it.
bound_playbook
The playbook name this sitting holds, if one was bound. Tracker note is the bind that survives the process; the runtime cache is only when the tracker does not answer.
brief
The brief a subagent playing a persona starts from: the persona’s view and domains, what the seat knows on those domains (preferences first), and the issue’s working set. One text, so a panel member reads the same seat the rest do and still reads it its own way.
brief_playbook_blocks
The blocks a brief carries: the playbook step (full body), then, on ljos’s own issues only, the named principles and the arena rubric. Another project’s issue gets its playbook and a line saying no product rubric applies, so a persona reasons from the issue alone.
brier
Quadratic score of a stated probability against the outcome.
bump_issue_id
A deterministic issue id for a module of a generation: the project, then eight base-36 digits of the module and generation hashed.
bump_plan
Put a bundle’s modules on the tracker: one child issue per module under parent, blockers along the dependency edges, ids the same on every run so a rerun holds what exists and adds what is missing. vissue ready then lists the modules a seat can build now, and a sitting refuses the rest until their blockers close.
bump_rows
The plan a bundle implies for the tracker: one row per module the lock builds, blockers along the SBOM’s dependency edges. Nothing is written.
bypass_log_path
$XDG_DATA_HOME/ljos/bypass.jsonl: one row each time a command ran that the guard would have stopped.
bypass_summary
[bypass_row]’s text from the log’s rows.
calibrate
Turn a project’s voting history into trust rows without anyone naming an outcome: Dawid and Skene’s accuracy per voter (doi:10.2307/2346806), from ljos-consensus reliability, turned into the weight every other voter gives that voter by calibration_weights: log odds, so a voter right nine times in ten outweighs one right six times in ten by five to one, not three to two. Rows are complete and floored at TRUST_FLOOR, so the settle sees the whole graph.
calibration_from_atoms
The latest forecast record per voter, from the trust rows that carry one.
calibration_weights
The weight a voter of estimated accuracy p earns: the log odds ln(p / (1 - p)), the optimal weight for independent voters on a two-way choice (Nitzan and Paroush, doi:10.2307/2526438; a weighted majority under these weights is the maximum-likelihood decision), with p held inside [0.01, 0.99] so a perfect record does not become an infinite vote, and a voter at or under chance at TRUST_FLOOR. The weights are scaled so the most reliable voter stands at one, which is the scale the trust rows live on; the ratios between voters are the rule’s.
came_due_since
The due claims that came due at or after since (RFC 3339): a review date inside the window, or, for a claim never reviewed, a write inside it. The rest is backlog the nudge does not count.
card_paths
cards
Read-only cards. Only CARD_NAMES, never created, never written.
cast_jev
Cast Jev’s ballot as the judge, not the persona. The chosen option’s probability is the ballot’s confidence, the forecast is the judge’s prediction, and --used names the judge. Confidence decides escalation.
check_persona
ljos persona NAME --check: persona_check_report against the pack.
cite_stands
Whether a cite stands: a tracker issue its seat ballots decide (seats_decide), open or closed. The text says which ballots it counted. A deed alone does not stand: the pushing seat can mint one with deedar create a moment before the push, so the decision has to be on an issue another seat voted on.
claim
Take a session node, and when the claim graph refuses because the assignee still holds another node, say which tracker id that is and the two verbs that free it. The bare refusal names a 32-hex id nobody can act on.
claim_graph_absent
The directory claimdag would create, when its refusal says the seat has no work graph yet because nothing was ever claimed. A fresh host is not a fault: the sitting’s first claim creates the graph.
claim_next
Claim the ready node the claim graph puts first for assignee, through claim. A node another conversation took first is passed over.
clean_user_prompt
The person’s request out of the wrapper a runner puts around it: agy sends <USER_REQUEST>...</USER_REQUEST> beside metadata blocks, and only the request is a cue.
cli_assignee
Resolve a command line --assignee. A name typed on the command line is taken as given, the seat’s own name too, so ljos sitting ISSUE --assignee saddle claims as saddle and a board filtered by seat finds it. Empty or a pronoun (seat, you, agent) is the conversation’s holder. A tool call’s field keeps resolve_assignee, where a runner echoing its own seat name means itself.
command_preference_note
The note a tool call carries: the preferences that bear on its command and that this session has not heard on a command yet, and the keys to mark seen once it is delivered.
command_segments
The commands a shell line runs: split on &&, ||, ;, | and new lines outside quotes, each with leading NAME=value assignments and the prefixes in [SEGMENT_PREFIXES] taken off with their flags. A rule anchored at a command’s start then sees cd x && git push and FOO=1 git push as the push they run, and quoted text is not split, so a commit message naming a command is not that command.
compact_sitting
A sitting’s report cut to what a person acts on. The full report goes section by section (== doctor, == island: TITLE, …); this keeps the doctor’s summary and the rows that need action, the memories the island found, open blockers, the playbook’s name, a panel, a reclaim that moved something, and the claim, then says the issue is held. ljos sitting --verbose prints the full report.
compaction_note
What a compacted conversation needs to go on: the issue it holds, and where its working set, its history and the protocol are.
complete
Close a sitting: remember the lesson when there is one, fire the island the issue’s title activates, complete the session node, and learn from the outcome when one is named. Without a lesson the report says so, because a sitting that taught nothing worth two sentences is rare and worth noticing.
confidence_in_words
What a ballot’s confidence does, said when any ballot states one: it is recorded, ljos learn scores it once an outcome is named, and nothing else reads it. None when no ballot states one.
conflicts
Consolidate the seat’s memory: every claim that replaces an earlier one (a rewrite, a new object under the same head, a correction, an explicit supersedes) closes the earlier one’s window and names it. Candidate contradictions from the geometry of the seat’s memory: the landscape binary reads the pack’s embeddings at the point scale and prints the lowest passes between single memories, which on a record of planted contradictions were the contradictions nine times in ten. The replacement rule reads words; this reads distance, in any language. A candidate is for a person or consolidate to judge; nothing is written here. landscape is an optional habitat: absent, this says so.
consensus_document
ljos consensus --json as one JSON object. gate is the push cite, and its fields stay at the top level under the keys the push cite already uses. Each step’s output follows under its label (settle, tracker, surprising, reputation), parsed when it is JSON and kept as text when it is not.
consensus_step_label
The key a step’s output takes in ljos consensus --json: the model crate’s verb (settle, surprising, reputation), or tracker for vissue’s own settle.
consensus_steps
ljos-consensus first, then vissue consensus, both under the pack’s trust rows when there are any. Missing bins are skipped.
consensus_steps_anchored
consensus_steps passing the personas’ anchors to both settles as --susceptibility-of, so a persona holds its ballot as much as it says.
consensus_steps_for
The steps consensus_steps_anchored builds, under the anchors settle_anchors gives for these voters, with the model flags the issue’s tags ask for on the model crate’s settle.
conversation_tag
A short tag for one conversation from the process that runs it: the pid in base 36, so acme-cli-39u reads as a name and not a number.
copy_playbook
Bind name to issue and return the full recipe body. This is the copy into the working set; sitting prints it before recall.
correction_cue
The first cue in CORRECTION_CUES that text contains.
correlation_step
The correlation reading over the issues whose outcome is named: each issue’s ballots beside the option it closed on. None below MIN_NAMED_OUTCOMES.
cursor_plugin_in
The ljos Cursor plugin under Cursor’s plugins directory, when installed: a clone in local/ljos, or a marketplace or /add-plugin install in cache/<marketplace>/ljos/<commit>.
decision_hold
The line a decision gets before anyone picks, when the host could not start the panel itself.
decision_member_task
What one panel member is asked, after its brief. It votes as itself and stops. It does not sit, edit, or leave the machine.
deed_alone
Why a deed cited on its own does not let a push through.
detect_runners
The runners among shapes this machine has: a runner’s command is on the PATH, or the directory its MCP config or its hooks file sits in exists under home. Shell-only runners and the example shapes are never found, since nothing on disk tells them apart.
discount_from
The discount a correlation reading asks the settle for, and the line that says so. None when no pair passed the gate, so every voter keeps its whole weight.
doctor
Which habitats answer: binaries on PATH, the pack over PACKSET_URL, the deed store, the tracker, the claim graph.
doctor_seat
The seat’s own rows: binaries, pack, host key, deed store, tracker, claim graph. What a sitting checks; the runner rows are onboarding.
doctor_summary
The line ljos doctor opens with: whether the seat is ready, which required parts do not answer, and how many optional parts are off.
doctor_word
ok when the row answers, warn when the policy row names an ljos-policyd without phronesis, info when the row is optional and absent, no when a required row failed.
drop_playbook
Drop the sticky name. Finish and release call this; a new task is a new sitting. Writes an empty playbook: note so the next sitting does not reprint the previous recipe, and unlinks the runtime cache.
due
What the pack holds for review now.
due_of
The live atoms whose review is due at now (RFC 3339 UTC), soonest first. A claim that has never entered the review clock has no due_at; it is due now, and grading it puts it on the clock. Trust and persona rows are weighed, not recalled, and never come up.
due_on_island_first
The due claims with the island’s first, keeping each group’s due order: the claims a sitting’s work bears on are the ones its agent can grade from what it is about to read, rather than the oldest in the pack.
due_page
The soonest SITTING_DUE claims, how many are due in all, and the clock line. Read-only: the sweep stays on ljos due and on a sitting.
due_report
The review clock as ljos due prints it: the soonest SITTING_DUE due atoms, then the summary. Those rows are the ones graded takes. With all, every due atom is listed to read, and none is put up for grading: a list of a thousand is a census, not a review.
due_shown_live
The ids a due page showed inside DUE_SHOWN_TTL_S, read from text (EPOCH\tID lines) at now.
enclose
Deeds to enclose: the satchel’s needs plus what the pack cites, once each.
enclosed_atoms
Every atom in a satchel’s data/atoms/*.jsonl.
encoder_cold
Whether the pack’s encoder has not answered since packsetd started: it is on, its binary is there, and no dense call came back yet. A search then waits for the model to load, and on a new machine for its download. A status without the answering field, from an older packsetd, says nothing about it, and is not cold.
encoder_warming
Whether the pack’s encoder is still loading. When it is, a warm-up starts in the background, at most one per [ENCODER_WARM_EVERY]. The status call has half a second; a pack that does not answer in that time is not called cold, and the search goes on as before.
evidence_here
evidence_in_words in this machine’s zone.
evidence_in_words
The reader’s seconds east of UTC at the instant secs. The tracker writes org stamps in local wall time; a timeline reads every store in it. deedar evidence as a person reads it: after each time= line in seconds since the epoch, an at= line with the same instant in ISO 8601 with the reader’s UTC offset. The time= line stays as it is, since the timeline and scripts read it.
exec_server
Replace this process with the ljos-mcp that goes with this ljos, so ljos mcp serves on the same standard input and output. Returns only when the server cannot be found or started.
expand_leading_tilde
raw with a leading ~ or ~/ put against home; None when there is nothing to expand.
expired_claims
The claimed or running nodes in a claimdag list --json answer that have been quiet for at least lease seconds at now, oldest first.
export_agents
ljos agents: every persona as an agent definition in each runner’s agents directory, or in one runner’s.
failing
The required rows that do not answer, by name.
failing_for_sitting
The required rows a sitting cannot open without, by name.
failure_note
What this seat knows that bears on a tool that just failed. The pack is searched on the command and the error it gave, and a hit has to pass the prompt hook’s tests. It must also share FAILURE_SHARED_WORDS content words with the command and the error, where a prompt needs one, since an error is long and noisy. One handed over earlier in the session is left out. Calls that worked are not searched.
file_placement
Where ljos file puts a new issue: its parent, its project, and a line for the agent when the held issue was passed over. --top files with no parent and --parent names one. Otherwise the held issue is the parent, unless -p names another project: a child lives in its parent’s project, so a tool bug filed with -p mid-sitting goes to the top of that project, not under the work being sat on.
finding_lesson
The lesson a finding leaves: what failed where, then the fix, or that a later attempt got past it. Two short sentences; the pack refuses more, and refuses hard prose.
finish
forecasts_for_surprising
Forecasts the surprisingly popular step may read. A judge’s forecast stays out of that step.
forecasts_from_json
(agent, choice, confidence) from a tracker’s vote --json.
format_bump_rows
format_change
The change since the reading before, signed, or nothing for a first reading.
format_consolidation
The pairs a consolidation closed or would close, one a line, then the count and whether it was applied.
format_doctor
format_doctor_short
The short doctor: the summary line, then only the rows that need action (no and warn), each with the fix its state names.
format_due
format_findings
One line per finding: id, status, class, stage, recipe, then the fix or the summary.
format_hits
One line per hit: score, how many scorers named it out of how many ran, kind, id, age, text. The age is the one column a reader needs to lay the hits on a timeline; the count is what the hook keys on. explain (ljos search --explain) opens with search_reading; without it the hits come alone, and an empty answer is the one line No hits.
format_hubs
One line per hub: score, links, id, text.
format_island
One line per activated memory: activation, seed mark, id, text.
format_personas
A panel for a runner with no MCP: one brief per persona written to out, named <persona>.md, and the lines that run it. A runner starts one subagent per file, each ends with the ballot its brief names, and ljos consensus ISSUE settles.
format_playbook_copy
The recipe body a sitting copies, including optional spawn hints.
format_playbooks
The roster, one playbook per line: name, spawn hints, first sentence.
format_readings
ljos habit: one line a habit: name, value with unit, the change since the last reading, the age of this one, when the next is due, source.
format_remembered
format_rules
The rules as ljos rules prints them: verdict\tpattern\treason, deny first, or a JSON array.
format_seat
ljos seat: who is sitting, one field a line.
format_seat_row
The doctor’s seat row: who votes, who holds, and where the names came from.
format_steps
format_sweep
One line on what the sweep did, or nothing when it found nothing.
format_workflow_status
The status as the sitting and ljos workflow print it.
format_write_ack
One line after a pack write: id, kind, due, text. Not the embedding.
format_write_ack_plain
What remember and prefer print to a person at a terminal: the kind and the text, when it comes up for review in local time, and the first eight characters of its id, which accept, forget and graded take. A pipe gets format_write_ack.
gate_push
The verdict the push gate makes of a line the rules asked about: None lets it run. Only an ask on a push is gated; every other verdict, and a line with no push, is the rule’s own. A cited pass is noted on the cited issue, so the record says which decision let it through.
gate_read
The rules a gate judges by, as rules_for_gate, and the pack’s preferences as (id, text), from the one listing. The preferences are empty when the pack does not answer: a reminder is not worth a wait.
glob_matches
A glob over a command line: * matches any run of characters, ? one. The match is on the whole line, so rm -rf * is rm -rf and anything after, and *sudo* is sudo anywhere.
graded
Grade one review: recalled moves the atom out, lapsed brings it back sooner.
habit
Take a reading: write it as a claim that supersedes the habit’s earlier reading, carrying that reading as was, with its review due one cadence from now. Returns the pack’s answer and the reading it closed.
habit_text
The claim a reading is stored as. The words are for a reader; the numbers travel in the atom’s habit field.
habits
The live readings in the seat’s pack.
hand_ballot
Hand a persona’s open ballot to its own session, and note on the issue where it runs. None for a persona with no runner, whose ballot stays a brief for a subagent.
handover
Pack a slice of the seat into out: the tracker’s satchel, the pack’s atoms, the deeds both cite, sealed, and signed when a host key is set.
harnesses_from
Parse the runners file. An absent file is no runners, not an error.
harnesses_path
Where the runners are described: $XDG_CONFIG_HOME/ljos/harnesses.toml.
harnesses_with_shipped
The runners file with each runner it names merged over the shipped shape of that name (merge_shipped). An absent file is no runners.
has_unscoped_inbound
Whether name already has the seat’s unscoped inbound row in rows. A third-party unscoped row does not seat this persona.
healthy
Whether every required habitat answers.
held_by_another_message
Refusal when another conversation holds the node: names that holder and still says held by another, so a concurrent sitting can match it.
held_issue
The issue this conversation’s holder claimed last and still works: a subagent’s hook runs under its parent’s holder, so this is the work the subagent is a slice of.
hold_hook_context
Remember the prompt’s pack text and the memory ids it names. An empty note leaves a note already held: a later prompt that matches nothing must not erase one the runner has not delivered yet.
hold_hook_note
Hold context with the ids to mark seen when a runner delivers it.
holder_for_session
SEAT@TAG for one conversation id.
holder_name
The name this conversation’s claims are held under.
hook_already_running
Whether an identical call (event, session, text) started in the last 20 seconds. A runner that loads another runner’s hook file runs the same hook twice for one event, and both queue on the pack’s one reranker. The first call makes the marker and answers; the second returns at once.
hook_call
Read a hook call from the runner’s JSON, or from plain text (an argv under argv law). Fields: hook_event_name, tool_name, tool_input (its command, else every string value joined), prompt; grok’s camelCase hookEventName, sessionId and toolInput read the same.
hook_call_as
hook_call with the event the runner’s hooks file named, for a runner whose payload does not carry one.
hook_context
The context the hook injects. A camel-case runner does not see prompt stdout, so the ids stay unmarked until the first tool result, or Stop when the turn ran no tool, delivers them. Every other runner is shown this string and the ids are marked now.
hook_directory
The directory the tool executes in, including an explicit tool override. Relative overrides are resolved against the hook’s directory.
hook_failure_output
A gate’s refusal when the hook fails before it reaches a verdict: an error, a panic, or no verdict by the deadline. Cursor’s IDE reads a permission hook that prints nothing as a deny when failClosed is set, and Cursor’s CLI reads the same silence as an allow, so the seat says deny in the runner’s own JSON and both refuse. None on an event that is not a gate: a prompt or a session event that fails lets the work go on.
hook_note
The pack note for a prompt, and the memory ids named in it. The ids are not marked seen here: the caller marks them when the runner delivers the note. A camel-case prompt hook’s stdout is discarded, so marking here would burn the note before the model read it.
hook_output
The hook’s answer in the runner’s JSON: additionalContext under the event that fired. Empty context is no output, which the runner reads as no opinion.
hook_output_ruled
hook_output carrying a rule’s verdict on a tool call: deny or ask as the runner’s permission decision, with the rule’s reason. On a prompt or an argv line the verdict is a line of text.
hook_subagent
What a hook call says about a subagent: its type when the call fired inside one (subagentType, or agent_type), and whether a stop gate already held it this turn (stopHookActive), and the agent’s id when the runner shares one session between a parent and its subagents.
hook_trace
With $XDG_RUNTIME_DIR/ljos/hook-trace present, one line per hook call to hook-trace.jsonl beside it: the event as sent and as read, the payload’s top-level key names, the session and subagent type. Key names only, never values, so a runner’s hook contract can be read off a live session without storing what it said.
hook_trusted
Whether a runner that gates hooks on trust has trusted the hooks in hooks: its trust file records a trusted_hash, and was written after the hooks file last changed (a changed hook loses its trust).
hook_twin
Whether this call is the twin of one that started in the last ten seconds: the same event with the same payload, byte for byte. A Cursor with the plugin and an earlier onboard, or a runner that also loads Claude’s settings, runs the seat’s hook twice for one event, and both copies get the same payload. A later event of the same kind carries a new generation, loop count or transcript, and is not a twin.
hook_uses_rerank
The local path reranks when the judge did not answer.
identity_or_seat
The identity a ballot is cast under: the persona named, else the seat (whoami), the same name across a runner’s conversations so its record accrues to one voter.
inbound_floor
The unscoped inbound row a persona is owed: the seat weighs it at 1, everywhere. None when the seat and the persona are the same name (a row cannot weigh itself).
is_decision
Whether an issue asks for a decision: a decision tag, a decision type, or a body line opening Options:.
is_gate_event
Whether a hook event is a gate: a tool call the runner holds until the hook answers.
is_ljos_issue
Whether an issue is ljos’s own work: an id in the ljos project, a tracker project named ljos, or an ljos or ljos-* tag. The named principles and the arena rubric are ljos’s product law, so only such an issue’s brief carries them.
is_regex_pattern
Whether a rule’s pattern is a regular expression rather than a glob: it says so with re:, or it carries a class (\b, \s, \d, \w) or an alternation group, which a glob would read as literal text and never match.
is_seat_path
Whether a path names one of SEAT_PATHS; a backup beside a binary (ljos.bak) is not the binary.
is_version_tag
Whether a tag names a release: a version, v1.2 or 0.3.0, not a bookmark such as campaign-sent.
island_entities
The domains an issue’s island speaks to: the entities of the memories its title activates, most frequent first, eight at most. What learn scopes its rows to.
island_reading
What an activation number is, and whether this call rewrote weights.
issue_direct_words
The words an issue’s title and tags give, apart from its island.
issue_options
The options an issue puts to a vote: an Options: A, B line split on commas, or the - a bullets under a bare Options: line.
issue_words
The words an issue speaks in: its title’s topic words, its tags, and the entities of the island its title activates when that island is not weak.
jev_ballot
Jev’s answer for a persona on an issue, not yet cast: its brief, less the closing instructions a subagent needs, is the state, and the issue’s options are the choices.
jev_panel_stands
Whether a panel’s Jev answers may stand as its ballots: every seated persona sure, and all on one option. Personas answered by one model are correlated voters, so their agreement settles only a question it could not change; a split or an unsure seat goes to subagents.
jev_vote
One persona’s ballot through Jev: cast when Jev is sure, noted and left for a subagent when it is not.
join
judge_due_page
ljos due --judge: the review judges weigh each claim on the page against the newer claims about it. One that holds at jev::REVIEW_HOLDS_AT is named for ljos graded. One at or under jev::REVIEW_FAILS_AT is named for the agent to supersede or withdraw, and stays due. The rest stay due. A judge does not grade and does not lapse.
judge_score_report
ljos judge-score: the judge log joined with outcome atoms. A pack that does not answer is named, and the log is still scored.
judge_trust_row
The trust row a judge starts with. learn rewrites rows whose to is this voter once the judge is on a ballot beside another voter.
judge_voter
The voter a judge’s ballot is recorded as. Not the persona.
keep_hook_answer
Keep the answer the first call printed, for replay_hook_answer. Readable by its owner only, and written whole before it can be read.
keep_rules
Write the rules when they changed, through a temporary file so a gate reading at the same time sees the old rules or the new, never half.
kept_rules
The rules last kept at path; none when there is no file or it does not parse.
last_user_text
The text of the person’s last message in a transcript of JSON lines, read without knowing its schema: the last entry that names a user turn (a type, role, source or stepType value containing user), and in it the longest string under text, content, prompt, message, userMessage or userResponse.
latest_note_value
The rest of the latest logbook note that opens with prefix, by timestamp, else the first one listed when none is dated. An empty rest is a drop: the answer is None, and no earlier note is walked back to.
learn
The rows every voter holds on every other after outcome is known: a voter whose ballot was refuted shrinks by beta, floored at TRUST_FLOOR; a missing row starts at one. Complete, so the settle sees the whole graph.
learn_about
learn writing rows scoped to about: the domains the issue’s island speaks to, so that being wrong about one topic does not cost a voter its standing on every other. An empty about is the unscoped rule.
learn_anchors
The personas after an outcome: one whose ballot the outcome refuted moves its anchor toward one by 1 - beta of the gap, so a persona that keeps being wrong listens more; a vindicated one keeps its anchor. The personas that voted are the only ones touched. Acemoglu, Como, Fagnani and Ozdaglar (doi:10.1287/moor.1120.0570) show what a stubborn wrong voter does to a pool; this is the seat’s remedy.
learn_and_write
Learn from issue’s outcome by the record and write what it moved: the trust rows, the personas, and the outcome itself.
learn_reading
What a learn did. The rows are the next settle’s weights. This call is not a settle. The scores, when any ballot stated a probability, are not trust weights. calibration is each voter’s record after this outcome is folded in.
learn_record
Learn from an outcome by the record: each voter’s hits and misses so far, this outcome added, give its accuracy shrunk toward the panel’s (shrunk_accuracy), and the rows are the log odds of that scaled to the best voter at one (calibration_weights). Measured against Hedge’s multiplicative update on voters of known accuracy, the record reaches the batch calibration and Hedge does not: a voter is weighed by what it got right, not by how many times it has been punished. One outcome cannot tell voters apart, so the first leaves them equal. Rows are complete over the voters and scoped to about.
learn_shared
learn_about with a fixed share of recovery: after the Hedge step every row moves toward one by share of the gap, so a voter refuted long ago is not held down forever and the best voter can change (Herbster and Warmuth, doi:10.1023/A:1007424614876). Zero is plain Hedge; the seat’s default.
lesson_is_the_persons
Whether a lesson given to ljos finish is the person’s own: no agent runner above the process and a terminal on its input. Such a lesson is written at once; one an agent gives waits for ljos accept.
limit_notice
The id of the runner’s notice that its usage limit is reached, when the latest user-side line of the transcript is one: the line’s uuid, else its position. A runner announces the limit as text in the conversation, not as an event, so the transcript is where the hook sees it.
limit_stop
At a usage limit the turn is held once, so what the conversation knows reaches the stores before the runner cuts it off: a note on the held issue saying what is done and what is left, an issue per item left, and the lessons. None when no limit was announced, or this notice was already answered.
listener_uid_in
[listener_uid] over the text of the tables. A row is sl local remote state ... uid ...; the local address ends in :PORT in hex, and state 0A is a listening socket.
local_when
local_when_in in this machine’s zone.
local_when_in
An RFC 3339 time in the given zone as 2026-10-12 09:00 -05:00, or the text unchanged when it does not parse.
log_bypass
Write a row when the guard is passed over on a command it would have stopped: approval when a one-use grant let an asked command run, and switch when a setting such as LJOS_ASK_PACK=off turned off the rule that would have asked. how says which grant or setting. A row that cannot be written is skipped; the command’s verdict does not wait on it.
log_recall
Append one line, ts seat verb what, to the state dir’s recall.log, so an audit can tell when a seat last asked its memory. Best effort: a log that cannot be written never fails the call.
log_score
Logarithmic score of the probability assigned to the event that occurred.
looks_pasted
Whether a prompt carries pasted material: a pasted block, a code fence, terminal or log output, or many lines. Jev’s injection question is asked of every prompt, and a plain request is not pasted text addressing the agent.
mark_seen
mcp_forward
One tool call answered by a fresh ljos-mcp: start program with marker set, send it the client’s initialize (init, or a plain one), the initialized notification and tools/call with params, and return the JSON-RPC answer to the call, result or error.
mean_brier
Mean Brier score over the forecasts that stated a probability, and how many those were. None when nobody stated one.
mean_log
Mean logarithmic score over the forecasts that stated a probability, how many of those scores were finite, and how many were unbounded.
merge_shipped
One runner’s table with the shipped shape under it, field by field: a key the file sets wins, a key it leaves out comes from the shape. A shape added to ljos after the first onboard reaches the runner.
murphy
Reliability, resolution, and uncertainty. None until the voter has two forecasts: one forecast makes the partition the score itself.
named_hook_spec
The seat’s hooks for a runner whose hooks file maps a hook name to its events: the tool gate on shell commands, the prompt and tool-result notes on each model call, and the stop audit. The payload names no event, so each command is told its own.
named_outcome
The outcome as the ballots spell it, and a line for the reading when it is on no ballot. An outcome that matches a ballot or one of the issue’s options, ignoring case, takes that spelling. Any other answer scores every voter a miss, which a typo would do as well, so it is refused unless new_option says the person’s answer was none of them: a tie broken with a third answer is recorded and calibrated like any other.
needs_of
The accessions a satchel’s description says it needs.
node_for
The claimdag node standing for issue, minted with the tracker id as its summary when the graph does not hold it yet.
normalize_tracker_env
Expand a leading ~ in ISSUE_ROOT and VISSUE_ROOT once, at start. environment.d and MCP env blocks pass ~/... through unexpanded; a tracker crate that predates the fix then resolves it against the working directory, and every child vissue inherits the same relative root.
not_assignee_message
Refusal when this shell’s holder is not the name that holds the node: names the holder from the hold record, else from the tracker, and the --assignee that finishes under it. A shell runner without a session id gets a new holder per shell, which is the usual cause.
now_utc
Now, RFC 3339 UTC to the second, the stamp the pack writes.
observe
Add one stated probability to a voter’s record.
occupancy_assignee
Occupancy is always {name}:{issue}. One live claim per name is what made two conversations unseat each other; the issue is already exclusive. Already-scoped names (they contain :) are left alone.
on_path
onboard
Register the server and install the skill for one runner named in the runners file. json registers nothing and returns the entry to paste. dry reports without writing.
onboard_detected
Onboard every runner detect_runners finds, from the shapes ljos ships and the ones harnesses.toml names. Each runner’s steps follow a line naming it, a runner that fails is said and the rest go on, and a step two runners share (the pack, the host key) is said once.
onboard_from
onboard_in
onboard_to
oom_recent
Whether the kernel’s OOM count says a kill is recent, and what to keep: the count and when it last rose. The counter is cumulative since boot, so a kill counts as recent when the count rose since the last look, or rose within OOM_RECENT_S; a first look that finds kills cannot date them and counts them as recent. The record lives in the runtime directory, which a reboot clears with the counter.
open_blockers
The blockers of an issue that are still open, as id (STATE), read from the tracker. Empty when the issue is workable, or when the tracker does not answer (the sitting’s doctor already said so).
open_decision_panel
File a yes-or-no decision for prompt when nothing open is already one, sit it, write the briefs, and start one headless member per persona. The opener’s own log is log.
options_of_issue
The options an issue’s body puts to a vote, or none when the tracker does not answer.
other_seat
The seat that wrote a hit, when it was another than this one. Many seats share a pack; a reader is told whose lesson it is reading only when that is news.
outcome_text
The sentence an outcome is stored under, clipped to 80 characters of issue and 200 of choice, inside the pack’s text cap.
outcomes_of
The latest outcome per issue among the pack’s atoms.
pack
pack_last_write_ts
The pack’s last write, RFC 3339, for a HUD watch. None when the status has no stamp yet.
pack_token_row
The pack token row of ljos doctor. has says whether a token was found, from_env whether PACKSET_TOKEN carried it, path is where the token file is looked for, and refused whether the writer answered 401 (None when it was not asked or did not answer).
packset_consolidate
The rule a write applies on arrival, run over what the pack already holds. Without apply nothing is written; the pairs are reported.
packset_forget
Retire one atom from the workspace the cwd resolves to, optionally naming the deed that withdrew it.
packset_hubs
The claims the pack’s link graph turns on, highest first: what matters in this seat’s memory by its own connections, before any query.
packset_island
The memories a task activates: the pack’s island around the cue. With fire, the strongest of them fire together and their links gain weight.
packset_island_as
packset_island through a persona’s lens: the spread follows the weights that persona fired, and a fire writes its weights and not the seat’s. The seat’s own island is the one with no lens.
packset_search
packset_search_as_of
packset_search_opts asked of the pack as it stood at as_of (RFC 3339; a date alone reads as its start): only memories live then answer, what was withdrawn since included and what was learnt since left out. None is now. This is the question “what did the seat know when it decided that”, and the pack keeps every record so it can be asked.
packset_search_opts
packset_search with a limit and the cross-encoder rerank: the writer scores the top hits against the query with its reranker, which costs a model call and buys precision. For a brief or a person reading, not for the hook. A claim the fused ranking and the encoder both placed first stays at the head; the reranker reorders the rest.
packset_write
packset_write_as
packset_write as a persona: the claim carries the persona’s entity, so what a persona learned comes back to it first in its next brief and stays in the seat’s one pack. A persona accumulates its own lessons the way a reviewer does; the seat still reads them all.
packset_write_scoped
packset_write for a lesson learned on an issue: it carries an issue:ID entity naming where it was learned, and a scope:NAME entity when one is given, so the claim travels with that scope’s log rather than the machine’s default.
panel
panel_concurrency
Maximum concurrent panel member processes to avoid CPU starvation, memory pressure, and model rate limit exhaustion. Unset defaults to available parallelism clamped to [1, 4]. Set to 0 to disable concurrency limits.
panel_jev
A panel through Jev: every seated persona’s ballot is asked of Jev first. When all are sure and agree (jev_panel_stands) they are cast; otherwise none is, and every seat gets a brief in out for a subagent, with Jev’s lean noted on the issue.
panel_member_argv
The argv of one headless panel member, from the headless template of the runner the panel names (LJOS_PANEL_RUNNER) or else of the seat’s own runner. A panel opened under Claude Code runs Claude; a runner with no template runs grok with the seat’s fallback flags. LJOS_MEMBER_BIN is the test stand-in.
panel_personas
The personas a panel on issue seats, by seat_panel.
panel_round_number
N in a title that opens panel rN.
panel_steps
The two readings beside a settle, when the pack holds what they need: the surprisingly popular answer when two or more voters forecast the others (predict), and the EigenTrust standing of the voters when trust rows exist. Both are the model crate’s verbs.
panel_verdict
The exit rule on one round’s ballots. A pass needs every panel persona’s ballot, no revise from a veto persona, and a pass share at or above the quorum that is not a tie. Everything else revises; nothing waits.
panel_voters
One effective voter per model. An all-one-model panel is one voter.
parse_every
7d, 24h, 2w, 30m, or bare seconds.
parse_playbook_name
Refuse a name that is not in PLAYBOOK_NAMES.
parse_semver
First N.N.N in a --version line.
parse_workflow_name
Refuse a name that is not a workflow.
pasted_or_quoted
Whether a prompt is pasted or quoted, so a phrase match inside it is not filed as a correction. A markdown quote, or a double-quoted span, refuses the whole prompt.
peek_hook_context
The held pack text, left in place.
per_user_pack_port
Where a seat’s writer listens when the default port is another user’s: one port per user id, from 18761 up.
persist_tracker
Commit the tracker file that holds issue and push it, when the tracker is a git checkout. A write that stays in one working tree is lost to every other host and to a rebuilt one; closures made on one laptop and never committed were how tickets came back open. Only that file is committed (--only), so another seat’s staged work is left alone. Never an error: the verb already happened, and the line says what did not. An ignored file is named with its ignore rule. It is not a clean tree and it is not force-added. LJOS_TRACKER_GIT=off skips it; =commit commits without pushing.
persist_tracker_file
persist_tracker for a file already known: an issue filed into a projected board’s inbox lives there until the fold, not in the corpus.
persona_agent
A persona as a runner’s agent definition: Markdown under YAML front matter, the shape Claude Code and Grok Build both read. Grok spawns it with spawn_subagent and subagent_type ljos-NAME; capabilityMode: execute lets it read and run commands but gives it no edit tool. The persona briefs itself, casts one ballot before reading the others, notes why, and stops. Returns the file name and the text.
persona_atom
The persona atom for the pack: kind persona, the view as text.
persona_ballot_task
What a persona’s runner is asked to do with its ballot: the brief, then how the verdict reaches the seat, under the persona’s own name.
persona_check_report
What ljos persona NAME would do with the pack as it stands, written as lines a person reads. atoms are the pack’s persona atoms; seat and holder are this conversation’s. Nothing is written.
persona_entity
The entity a persona’s own claims carry, so a brief can find them.
persona_owner
Who defined a persona, from its atom: seat, holder and the date it was defined. None on a persona written before personas had owners.
persona_set
The set a persona’s own conclusions live in: persona-<name>, in the pack’s set alphabet. A set is its own tree for the duplicate and replacement rules, so a persona’s lesson never closes the seat’s or another persona’s, and the seat still reads them all.
personas_from_pack
The personas in the seat’s pack.
personas_listing
ljos personas: one line per live persona, with the seat that defined it and when.
personas_of
The live personas: the latest persona atom per name.
personas_speaking_to
pick_pack_port
The port to point the pack client at, or None to leave the default. A port the person named is used as named, unless another user’s process listens on it: that is refused. With nothing named, a writer this user already runs on the per-user port is used; the default port is used when it is free or this user’s; when another user’s writer holds it, the seat moves to the per-user port, where packset ensure starts its own.
pin_encoder_leader
Keep leader at the front when rank is DENSE_ALONE_RANK: the fused ranking and the encoder named the same claim first. The list stays the same length. Any other rank leaves the cross-encoder’s order as it stands.
playbook_among
Pack latest for name, else the shipped seed. Unknown names are refused even when the pack holds them.
playbook_atom
The playbook atom: kind playbook, the recipe as text.
playbook_from_title
A title-bound name (TITLE_PLAYBOOK_NAMES) the issue title names, else sit. Longer names win (company-panel before a stray sit token); sitting is not sit.
playbook_name_from_issue
The playbook name bound on an issue JSON: the latest logbook note that opens with PLAYBOOK_NOTE_PREFIX. Empty rest means this sitting dropped it; do not walk back to an earlier bind.
playbook_named
Look up one playbook by name: pack latest first, shipped seed only when the pack has no live atom of that name.
playbook_named_on
The playbook name bound on a tracker issue, if any.
playbook_opening
The == playbook section of a sitting: bind when a name is given, else reprint the sticky body, else say none is bound.
playbooks_from_pack
The roster: pack atoms, with the six shipped filled in when missing.
playbooks_of
The live playbooks: the latest playbook atom per name.
policy_line
policy_with_memory
The argv line, then what the pack knows that bears on it: the memory a policy layer injects beside its verdict. The line prints even when the pack is down; the memory is the part that may be empty.
policyd_bin
POLICYD_BIN, else ljos-policyd on PATH.
policyd_reason
A refusal from ljos-policyd in words a person and an agent can act on: the check’s token first, so logs and scripts still find it, then what the command would have done and what to run instead. A token this build does not know is passed through as it came.
policyd_required
Operator switch: missing TCB is a deny. Unset, absence stays open.
post_claim
POST one explicit claim. Callers pass Remember/Prefer only.
post_hook_stdout
Stdout for a tool-result hook, and the ids to mark now that the note was delivered. A runner that holds the prompt note takes whatever note is held. The file goes with that take, so a later tool in the same turn finds nothing and Stop has nothing to say. Skipping a new hold because an earlier note was echoed leaves that hold for Stop, and Stop additionalContext starts another round. A turn with no tool leaves the hold until Stop takes it. A camel-case runner does not print that take.
prediction_text
The sentence a forecast is stored under: the option the agent expects most, with its share when the forecast is a distribution, clipped so the claim fits the pack’s text cap. The whole forecast rides in expect.
predictions_json
Forecasts as ljos-consensus surprising --predictions takes them.
predictions_of
The latest forecast per agent on an issue.
preference_rules
The rules a preference carries: one per --deny and --ask pattern, each with the preference as its reason, so the person who is stopped reads the words they wrote. Checked before anything is written, so a bad pattern leaves neither the preference nor a rule behind.
preferences_enforced
How the stored preferences stand against the rules: how many a rule enforces (a rule whose reason is the preference, as ljos prefer --deny and --ask write), how many more name a command they forbid and could carry one, and how many there are.
preferences_line
The doctor’s preferences line from preferences_enforced.
preferences_of
The live preferences in a set of atoms, as (id, text).
prompt_call
Stdin as the person’s prompt. Plain text is the prompt. JSON keeps the runner’s shape and is read as UserPromptSubmit, so a shell agent does not have to wrap a prompt as a tool call.
prompt_hook_stdout
Stdout for a prompt hook. A camel-case runner discards that stdout, so the note is held and the stdout is empty. Any other runner is handed the note directly.
prose_warning_line
The line a write prints when the pack stored the person’s words over a prose warning: what the gate said, and that shorter sentences are recalled better. None when the pack gave no warning.
push_call
The first git push in a line, following cd DIR and git -C DIR before it.
push_cite_reading
What the push gate makes of an issue, the first lines ljos consensus prints: whether a push citing it stands for pusher, on which seat ballots (seats_decide), then what the ballots’ confidence does. The JSON beside the words carries the same answer.
push_tier
What the gate makes of a push, from its arguments and the facts about its remote. Pure, so the ladder is tested without a repository.
push_tier_at
The tier of a push read from the repository it runs in: the remote it names (else the branch’s upstream remote, else origin) and whether any tag exists there.
read_campaign
Read an eb-stack campaign state (campaign.json).
readings_of
The live readings among atoms, one a habit, by name.
rearm_after_compaction
A conversation about to be compacted keeps the issue it holds and loses what the seat handed it. Every injected memory leaves the seen list, and so does the mark that the held note was echoed. Other named keys stay, the nudges and panel marks among them. When two or more memories were injected, up to eight of them fire together, as at a session’s end. When the conversation holds an issue, the next delivery opens with compaction_note. Returns how many fired.
receive
Check a satchel that arrived: manifest, deed receipts, signature, and what the atoms hold; with import, POST the atoms into this seat’s pack.
record_due_shown
Put the rows a due page showed up for grading. A page shared by the CLI and every server of the login lives in the runtime directory.
records_from_atoms
The latest record per voter among the trust atoms that carry one.
redirect_seat_verb
A deny on a bare tracker verb names the exact seat command to run in its place, so the agent runs it instead of guessing at a placeholder. vissue vote ID with no ballot reads the tally, which writes nothing and is not refused.
refresh_agents
Rewrite the agent definitions after a persona changed, in every agents directory that harnesses.toml names and that exists on disk. A directory the file does not name, such as the Grok one a first onboard fills from the shipped shape, is left to onboard or ljos agents.
refuse_failed_gate
Write the gate’s refusal for error and exit with GATE_REFUSED_EXIT, unless this process is not answering a gate or has already answered. Returns when there is nothing to refuse.
release
Hand a session node back before it is terminal: ready again, assignee cleared, generation moved.
remember_findings
Write one lesson per finding a person or a seat resolved (every finding with all), cite the state file on the issue when one is named, and say what happened to each.
remember_horizon
The horizon ljos remember writes when neither --transient nor --standing is given. The person typing it is the review, so the lesson takes effect at once, like prefer and rule. Run under an agent runner it is the agent’s lesson: an episode. The hook shows it when a prompt bears on it, and a review promotes it to standing.
remember_note
The line ljos remember prints after the write, saying when the hook shows the lesson.
remote_slug
owner/repo from a remote URL: git@host:owner/repo.git, https://host/owner/repo, ssh://git@host/owner/repo.
replay_hook_answer
The first call’s answer, once it is written, waiting up to wait. None when it never comes: the copy then answers with nothing, as a copy on any other runner does, and the first call’s answer stands.
replays_its_copy
Whether a copy of this call gets the first call’s answer again rather than nothing. Codex (the runner whose stdin carries turn_id) delivers every hook event twice, and how it joins the two answers is not written down, so its copy of a prompt or a tool result says what the first said. A runner that joins two registrations’ answers, such as Cursor, would show the memories twice, so its copy stays silent.
repo_entity
The entity a repository’s facts carry in the pack.
repo_fact_text
The sentence a repository’s facts are remembered as.
repo_facts_in
The latest facts the pack holds about a repository, from the atoms.
require_ballots
Refuse a settle on an issue that holds no ballots. The model reads an empty ballot as settled with no options, which a caller takes for agreement.
require_deed
Whether accession is in the deed store. deedar current has to accept it. A dangling id is refused before a tracker cite.
resolve_assignee
Resolve an --assignee / MCP field for a claim. Empty, a pronoun (seat, you, agent), or this process naming itself is omitted: occupancy is the conversation’s holder, not the product name on the box. A named worker is taken as given.
resolve_short_id
The full id a short one names: input itself when it is a whole id or names none of ids, the one id it starts when it starts exactly one, and an error naming them when it starts several. Ids under six characters are taken as typed.
resolve_sitting_playbook
Which playbook a sitting copies: an explicit name, else the name already bound on the issue (sticky until finish/release), else a closed-set token in the title, else sit.
retire_persona
ljos persona NAME --retire: withdraw every atom of the persona, so it leaves the roster and casts no more ballots. The pack keeps that it was held and withdrawn. Only the conversation that defined it may retire it; take_over (--replace) retires one another seat or holder defined.
retire_seat
Drop the records announce_seat wrote, when the server ends.
review_mark
What due --judge says about a hold probability. A hold is a report. The seat’s own ljos graded is what marks the claim recalled.
review_summary
One line on the state of the review clock: how many are due, how many are scheduled, and when the next one comes up. An empty due with a next date is a clock that is running; an empty due with nothing scheduled is a seat that has remembered nothing.
rows_about
The rows that apply to an issue about topic: every unscoped row, and every scoped row one of whose domains is among the topic’s words.
rule_matches
A rule’s pattern over one command: a regular expression anchored at the command’s start, else a glob. A pattern that does not compile matches nothing.
ruled_verdict
The verdict a shell line gets before it runs: the pack’s own rules first (verdict_for), then the built-in ask pack (ask_pack::ask_pack_verdict), so a person’s deny or ask on the same line wins.
rules_for_gate
The rules a gate judges by. A read from the pack is kept on disk, and when the pack is down, slow or switched off the last rules read stand: a deny the person wrote does not lapse because a server did.
rules_from_pack
The rules in the seat’s pack.
rules_of
The live rules in a set of atoms.
run
run_as
run with VISSUE_AGENT set to identity, so a ballot or a claim is recorded under a persona’s name rather than the seat’s.
run_captured
run_captured_as
run_captured with VISSUE_AGENT set to identity, for a tracker write whose output the caller has to hand on. None leaves the environment as it is.
run_fed
Run a habitat’s verb with input on stdin.
runner_pid
The process that started this one. For ljos-mcp that is the runner, and the runner is also above every shell it opens.
runs_tests
A command line that runs a test suite. Exact, so it is code, not a judgment.
runtime_fallback
The runtime directory when XDG_RUNTIME_DIR is unset: ljos-UID under the temporary directory, so two users on one host never read each other’s holds, seat records or approvals. A ljos-UID that is a symlink, or that another user made first, is not used; the seat then keeps its records under ~/.cache/ljos/run.
search_reading
What a search score is. Empty and nonempty are different facts from a writer that did not answer.
search_with_signals
The fused search with what the encoder said about each hit. A pack that sends dense_rank and cosine on its hits fills them in; the pack client does not read those fields yet, so the request is made here. Any failure falls back to the client’s search with no signals.
search_within
The reranked search, or an error once ms has passed. The request runs on its own thread: the pack client gives a reranked search at least a minute whatever PACKSET_TIMEOUT_MS says, and a hook cannot wait that long. A thread left waiting ends with the hook’s process.
seat_command_for
The exact seat command a denied vissue VERB ARGS line should have been, its arguments carried over: vissue claim demo-6c3z is ljos sitting demo-6c3z. None for a line with no such verb.
seat_for_thread
The seat for a thread a runner named on a call. The holder is the one a shell of that thread already took, found by the thread’s record; else the thread id whole, recorded so the thread’s shells find it.
seat_guard
The seat’s own guard, before any rule: a shell command that writes one of SEAT_PATHS (anything but a reader, or a redirect into it), or a file tool aimed at one, is refused. A path is a word of its own: a quoted sentence that names one is data. ljos onboard and ljos itself write them, run by the person.
seat_name
The name this seat remembers, votes and earns trust under.
seat_panel
The personas a panel seats for an issue whose title and tags give direct and whose island gives island. A persona whose domain is a title word or tag sits. One a domain matches only through the island must also share a content word of the title in its own view: an island carries the pack’s neighbours, and alone it seated physics reviewers on a filesystem capability question. With no domain match, the view fallback reads the title and tags only and wants two of their words in a view, not one everyday word such as “change”. Nobody is a correct answer: the caller says so and names how to write a persona.
seat_slug
A name as a seat: lower case, runs of letters and digits joined by one hyphen. Acme CLI, acme-cli and acme_cli/1.2 are one seat.
seat_stop_reason
Why a turn is held for one more round. A decision that has not been sat is held even when an issue is already open. With tracks_work on, a conversation that holds no issue and used tools without touching the seat is held too. A subagent is left to its brief. The second stop of the same turn is not held. None lets the turn end.
seats_decide
The option an issue’s seat ballots decide for a push cite. Only seat ballots count: persona ballots and Jev ballots (judge:MODEL) are left out before anything is weighed, so they can neither pass a push nor block one. The seats that voted have to agree, and at least one of them has to be a seat other than pusher, the seat asking to push: a seat that votes alone on its own issue has not been checked by anyone. Every answer names the seat ballots counted and how many were left out.
seen_ids
server_entry
The MCP server entry any runner that reads JSON accepts.
session_end
When a session ends, the memories injected during it fire together: they served one sitting, so their links gain weight and the next sitting like it walks a heavier path (Hebb, through the pack’s fire). The seen file goes with the session. Returns how many fired; nothing to fire, or no pack, is zero and not an error, since a hook must not stop a runner from ending.
session_start_line
The line a new session hears first: that ljos is on, how many memories this workspace holds and how many are due, whether the command guard runs, and up to three of the workspace’s preferences. A pack that does not answer within 400 ms is named with its fix.
session_start_line_from
session_start_line from what it read: the workspace’s atoms, or None when the pack did not answer, and whether ljos-policyd is on the PATH.
session_tag
A conversation tag from a stamped id: ten base-36 digits of FNV-1a over the whole id. A prefix of the id would not do: a UUID v7 opens with its timestamp, so two conversations started in one window share it.
settle_anchors
The susceptibilities a settle runs under, by voter. Empty when no persona voted, so a ballot of seats alone stays plain DeGroot. When one did, every voter that is not a persona, the seat included, takes DEFAULT_ANCHOR, and each persona its own anchor but never one below it. Under Friedkin-Johnsen with equal trust the share of its ballot a voter keeps is its weight in the settle, so a persona written at 0 would count as two seats and tie a 2-to-1 vote on its own. A persona can move more than a seat does, never less. Trust rows still weigh voters as they say.
settle_discount
The correlation discount for the next settle, from the issues the pack names an outcome for, with each one’s ballots from the tracker. None below MIN_NAMED_OUTCOMES, when the model crate is absent, or when no pair of voters is shown to err together.
settle_flags_for
The model flags an issue’s tags ask for, beside the rows and anchors. The kind of work sets the dynamics: broad runs bounded confidence.
settle_in_words
The settle’s JSON in words: the shares, who leads and by how much, each voter’s influence, and what each anchor did. None when the text is not a settle’s JSON.
shared_holder_note
The note a resumed sitting prints when the holder is shared and the hold was taken from another process that still runs: that process may be another conversation of the same runner.
shell_exit
Exit status for a shell agent. fail_on_deny leaves the usual exit of 0 alone, and otherwise returns 1 when answer_denies is true.
shipped_differences
Where the runners file parts from the shipped shapes: one line per key the file sets to something other than the shape, as runner.key: yours X, shipped Y. A copy an older onboard wrote shows here when the shape has moved on.
shipped_playbooks
The six shipped playbooks, bodies in full, model roles as spawn hints.
shrunk_accuracy
Each voter’s accuracy from its record, shrunk toward the panel’s pooled accuracy by empirical Bayes (Efron and Morris, doi:10.1080/01621459.1975.10479864). The prior weakens as the records spread beyond binomial noise: the pooled variance times N / (N - 1), divided by each record’s length and averaged, where N counts the ballots the records hold. When the records differ no more than noise would make them, as on a panel’s first outcome, every voter gets the pooled accuracy. A long record keeps the differences it shows. correlation_history in the consensus crate measures the gain: plug-in log odds trail a count by 6.4 points on seven similar voters at three outcomes, and shrunk ones by 1.2.
sitting
Open a sitting on an issue, in the protocol’s order, and stop at the first habitat that does not answer: doctor, cards, the review clock, the island the issue’s title activates, the working set, the timeline, the claim. One verb, so the loop that makes the seat a memory runs every time and not only when somebody remembers to run it.
sitting_due_report
The review clock as a sitting prints it: a short prefix, then the summary.
sitting_gated
sitting, and with anyway the claim goes through even when the issue’s blockers are open. Without it a blocked issue is refused before anything is claimed: the tracker’s graph says what is workable, and a seat that sits on blocked work sits on nothing it can finish. playbook names the recipe copied into == playbook before recall; absent, a name already bound, else a closed-set token in the title, else sit. A workflow parent takes its workflow’s recipe. Sitting always binds one of the closed set before claim. Finish and release drop the sticky name; the workflow on a parent stays.
sitting_warn_line
The line a sitting prints under its doctor when a warn row failed: what the row means for the work that follows.
skill_text
The skill file a harness loads: front matter, then the protocol.
stage_of
A child’s stage: its stage-* tag, else its title’s opening word (design:, impl: or fix:, review:, panel rN), so a child filed by hand with ljos file "impl: ..." counts too.
standing_in_words
The reputation step’s JSON in words, for the voters on this issue only. EigenTrust runs over every trust row about the topic, so its standing names personas and seats that never voted here; listing them beside the settle read as influence they did not have. Those are counted, not named. None when the text is not reputation JSON.
start_decision_panel
Fork the panel opener and return at once. The opener files or reuses the decision, writes the briefs, and starts one headless member per persona. A second call for the same prompt in this session does not fork again. A panel member (LJOS_PANEL_CHILD) does not fork one of its own.
statusline
The seat’s line for a runner’s status bar, Grok Build’s [ui.status_line] or Claude Code’s statusLine: the seat, the issue this conversation holds, and how many claims are due for review. input is the runner’s status JSON. Only its session_id is read, to keep one cached line a session. A pack that does not answer within 300 ms shows as pack down.
stop_audit
Why an agent about to stop is held for one more round, from a Jev audit of the turn; None lets it stop. Only a runner’s first attempt is audited, only with Jev on, and only a final message long enough to claim anything.
stop_context_for_runner
What Stop prints. A camel-case runner treats additionalContext as another round, so a held note is not a reason to continue. An audit block is a separate answer and does not come through here.
stop_hook_stdout
Stdout for Stop, and the ids to mark now that the note is delivered. A continuation (stop_active) says nothing: the first Stop already delivered the note.
stop_turn_from_transcript
Read a JSONL transcript. One shape stores message.content blocks (text, tool_use, tool_result). The other stores content and a top-level tool_calls list of name and arguments.
store_correction
File a correction as a proposal. The hook does not write a preference. Once per session per cue. A pack that does not answer is left for the note.
subagent_brief
What a subagent is told on its first tool result: the issue its parent holds and how its result joins it. A subagent that is not told the issue cannot cast a ballot on it, and a sitting of its own would contend with its parent’s.
subagent_stop_reason
The stop gate for a subagent: once, when its parent holds an issue, the reason the subagent is kept working one more round. A gate that already held it this turn, or a parent holding nothing, lets it stop.
take_hook_context
Take the held pack text once. Empty if nothing was held.
take_hook_note
Take the held note and its ids, and remove both files.
tcb_answer
What bin check -- argv says within deadline, as a verdict line.
tcb_check
One line from ljos-policyd check -- argv. None only when there is no binary to ask: absence is not a deny unless POLICYD_REQUIRED says so. A binary that is there and fails to start, crashes, hangs past POLICYD_DEADLINE, or prints something that is not a verdict gets a deny, because the check it was meant to make did not happen.
tcb_verdict
The TCB’s verdict on a shell line: ljos-policyd judges each pipeline the line runs, in shell words, and the first deny stands. A heredoc body is data the shell feeds a command, and it is not sent as argv. With the TCB required and absent, the line is refused.
timeline
The issue’s timeline, the three stores read as one dated list, oldest first: the tracker’s logbook (creation, state changes, claims, notes), the deeds the issue cites with the time each was produced, and the memories the issue’s title activates with the time each was written. The reader gets time as data, not as stamps to do arithmetic on: each line carries its age and the gap since the line before it, and a later line supersedes an earlier one on the same matter.
timeline_events
The issue’s timeline as dated rows. The HUD paints this; it does not parse ljos timeline stdout. Tracker rows come from vissue_core::agent::show_json. Deed rows still shell deedar evidence, a named gap (deedar::Store::evidence).
tool_error
The error a failed tool reported. The first field set wins, in this order: Grok’s error, Cursor’s error_message, tool_response.error, toolResult.error and tool_response.stderr.
topic_words
The words an issue is about, for scoping trust rows: its title, lower case, three letters or longer.
touches_seat
Whether a hook call’s cue is the seat’s own verbs or tools.
tracker_git_drift
Commits the tracker checkout holds that origin does not. The count is always named. A live background push, or commits younger than the push wait, stay healthy: the sitting already waited that long. Older drift fails the row, and a leftover refused-push log names the reason.
tracker_show_json
One issue as JSON from the tracker library. Same card as vissue show --json.
tracker_state
The tracker row from vissue identity: version, the root and prefix it resolved, and where the root came from. A root that is relative, missing, or holds no prefix directory fails the row: tickets filed there are invisible to every other seat. When the root is a git checkout with an upstream, the row also names how many commits origin lacks.
tracks_work
Whether the hooks ask a conversation that holds no issue to open one. Off unless LJOS_TRACK_WORK=on: a person who installed the seat for its memory and its guard did not ask for a tracker in every conversation. A conversation that sat on an issue is reminded either way.
trim_num
A number as a person writes it: up to four decimals, no trailing zeros.
trust_atom
A trust atom for one row. why are deed accessions it cites.
trust_from_pack
The live trust rows in the seat’s pack.
trust_json
Rows as the consensus takes them: [[from, to, weight], ...].
trust_rows
The live rows in a set of atoms: the latest trust atom per (from, to).
uncite_deed
Drop accession from the citations on ticket.
under_a_runner
Whether this process runs under an agent runner: the environment carries a runner’s conversation, or a process above it is a runner, one whose server left a seat record or one the runners file names. Consent is the person’s, so the verbs that grant it refuse here.
unstamp_tracker
Drop the tracker’s claim on issue when holder holds it, and keep the issue’s state. The claim graph frees a node on release and on completion; the tracker kept CLAIMED_BY, so ljos claims listed every finished sitting as still held. A claim another name took since is left alone and said so. None when the tracker does not know the issue or nobody holds it.
utc_at
secs after the epoch, RFC 3339 UTC to the second, as the pack writes.
verdict_for
The verdict the rules give a command line: the first deny wins, then the first ask, else none, each tried on the whole line and on every command in it. Returns the rule that fired.
voters_of
The names on these ballot rows.
warm_command
The warm-up: one reranked search, run by exe in its own process group, so packsetd loads the encoder and the reranker off the hook’s clock, and a runner that kills the hook’s group does not stop it.
whoami
Who is sitting, with nothing set. The seat: LJOS_SEAT or the tracker’s VISSUE_AGENT when someone set one; else what the MCP client said at initialize; else the process tree above this shell, which is the runner that opened it or the server that runner opened; else the login user, who is the seat when no program is. The holder is the seat and a short tag for any *_SESSION_ID the runner stamped (holder_for_session), ahead of the process tag, so MCP sitting and CLI sitting of one conversation are one occupancy name; else the seat tagged with the conversation’s process.
with_discount
The discount on the model crate’s settle; the tracker’s settle has none.
withdraw_prediction
Take back agent’s forecasts on an issue: each prediction atom it wrote there is deleted, leaving the pack’s tombstone, so the settle reads the voter as forecasting nothing. Returns how many went.
work_id
A claimdag id for a name: the name itself when it is already 32 hex, else FNV-1a 128 of it. One tracker id maps to one node; one assignee to one actor.
work_nudge
Count this conversation’s tool calls since it last touched the seat. With no issue held and tracks_work on, the first PostToolUse of a stretch says to open one and sit; with it off, nothing is said. With an issue held, a PostToolUse that reaches WORK_NUDGE_EVERY says what to record. A subagent is left to its brief.
work_nudge_delivered
The reminder was printed. The next stretch starts at zero.
workflow_close_refusal
Why ljos finish PARENT --close is refused on a workflow parent, or none when the latest round passed and no child is open.
workflow_config
The workflow settings. Built-in defaults for now; the suite’s configuration layer plugs in here, so every caller already reads through it.
workflow_name_from_issue
The workflow an issue JSON carries: the latest workflow: note when the logbook has one (an empty rest is a drop), else a workflow-NAME tag. A name that is not a workflow is none.
workflow_on
The workflow an issue carries, read from the tracker.
workflow_round
File the next panel round, a decision child with options pass and revise. Refused while any child is open or once a round has passed.
workflow_sitting_block
The == workflow block of a sitting: the status of the issue’s own workflow, or of its parent’s when the issue is a step of one. Empty when neither carries a workflow.
workflow_start
Put parent under workflow name and file its design child. Running it again files nothing new. The parent gets no blocker edge, so it never turns BLOCKED; the close gate reads the children instead.
workflow_status
The status of a workflow parent; none when it carries no workflow.
workflow_status_of
The status from the parent’s children and the latest round’s ballots. Open children come first, in the order design, implement, review, panel; a closed latest round is read by panel_verdict.
write_outcome
POST the option issue closed on. The issue’s ballots and this outcome say which voters were right; settle_discount reads them.
write_persona
POST one persona, defined by this seat. See write_persona_as.
write_persona_as
POST one persona. A persona of the same name already in the pack is superseded, so a rewrite moves the roster without leaving the old view live. Each persona names the seat and holder that defined it and when. Personas are shared by every seat on the pack, so redefining a name someone else defined is refused unless the write is a replace. Every persona is owed one unscoped inbound trust row; --about on a later trust row only adds weight, it does not replace that floor.
write_playbook
POST one playbook. A playbook of the same name already in the pack is superseded, so a rewrite moves the recipe without leaving the old body live.
write_prediction
POST one forecast. expect is an option name or {option: share}.
write_rule
POST one rule.
write_trust
POST one trust row.
write_trust_record
write_trust carrying the voter’s record on the row.

Type Aliases§

LearnedState
Trust rows, personas, and each voter’s forecast calibration.
Standing
A voter’s record: how often the outcome agreed with its ballot, and how often not, carried on every trust row into that voter.