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.
ballot_sig
Signed seat ballots. A seat signs each ballot it casts with its own ed25519 key, made on its first vote at $XDG_DATA_HOME/ljos/seats/SEAT/ballot.key (or LJOS_SEAT_KEY), so seats sharing one HOME still sign apart. The signature rides on the issue as a ballot-sig: note. A ballot the tracker held before its first pin, by commit order (recorded_before_signing), is legacy unsigned and still counts. The tracker pins each seat’s public key the first time it signs (.ljos-seat-keys at the tracker root, committed), so a later ballot under that name signed by another key is a mismatch. The push gate counts a seat ballot only when its latest signature covers exactly that voter, issue and choice under the pinned key.
bookkeep
The seat keeps the book when the model never calls ljos.
capture
A standing choice the person states in chat.
cloud
One command for a fresh machine that should share the tracker.
command_prefs
Preferences at the moment the agent acts.
converge
A panel closes itself. Once the substance has passed, a nit, a wording note or a style note is written on the issue and never becomes a child. A persona that wants a child marks the objection blocking and gives a reason; the default, with no mark or a mark and no reason, is a nit. The same objection is not filed twice. A dissent child does not file a grandchild unless the new objection is blocking. At the round limit, or when the budget is spent, the item closes as settled-with-notes and lists what remains. Nothing here waits on a person.
extract
Facts a session leaves behind, kept without anyone asking. When a runner ends a session, the hook reads its transcript and keeps up to MAX_PER_SESSION sentences that state something durable: a rule (“always”, “never”, “must”), a cause (“root cause”, “because”, “turns out”), or a fix. Each is written at once as a note whose source.basis is agent, carrying via:session-end and the session. The read side goes by that stored basis: recall, search and the island label it an unverified agent note, and no prompt hook hands it on as a fact or a rule. No model runs: the extraction is a bounded, deterministic read. A sentence already kept (by its normalized form) is not written again. LJOS_EXTRACT=off turns it off.
gates
Commit, push, and merge gates for the hook and ljos_guard_check.
git_hooks
Global git hooks that book a commit when the runner has no prompt hook.
hud
ljos hud — exec the separate ljos-hud binary.
idle_drop
What a long-lived ljos-mcp gives back once nobody is calling it.
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.
legacy_pref
Preferences stored before a basis was stamped.
mail
Mail from one seat to another.
mailbox
The owner’s mailbox: read it, and check what a seat drafts for it.
memories
An agent’s memories, written first and reviewed afterwards.
note_queue
Memory copies the pack did not take because it was down or did not know this seat.
pack_copy
Copies of a memory the pack will store.
panel_cloud
One prompt file per persona for a cloud panel.
panel_gate
One harness session is one voice. A ballot and a design candidate are bound to the session that wrote them. That session is the harness id, the holder, or the MCP connection, not a nonce minted per process. The consensus gate refuses to settle when one session authored more than one ballot, when a session both filed a candidate and voted, or when every ballot traces to one session. Seats minted inside a session do not multiply its vote.
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.
proc_tree
Processes above this one, each named by its pid and its start time, so a pid the kernel has since handed to another process is not taken for the one that was recorded. Read from /proc; elsewhere every list is empty and nothing is alive.
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.
record
Record schema v1: questions and ballots, signed as canonical JSON.
runner_env
Env files a shell runner sources.
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, Crush, Auggie, goose and Amp.
runner_skills
Runner skills ljos installed, refreshed when shipped bytes change.
slot
Launch slots. The seat that launches a cloud run leaves a slot: note on the issue it hands the run: the seat the run will vote as, the model it asked for, the run id and the public key the run minted on its machine, signed under the launcher’s pinned key. The slot names the seat and its key before the tracker pins any key for it, so a writer that pins the seat first under another key does not vote as the run.
subagent
The subagent a tool call runs for, so its ballot binds its own session rather than its parent’s. Claude Code hands a hook the subagent’s agent_id and the call’s tool_use_id, but gives the command it runs no variable that names the agent. The hook leaves the call under the runtime directory, and the ljos the command runs, or the MCP server the call reaches, takes it back once. A shell call stays behind as taken until it expires, so the same line run again inside the call binds the session its first run bound and is refused as cast.
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.
tree_cleanup
Deletes inside the working tree that lose no work: a build output directory, a scratch directory at the top of the tree, or a find cleanup of files a tool writes again. The static guard allows these, as ljos-policyd does, so a stock seat with no rules of its own does not stop rm -rf target/ or find . -name '*.pyc' -delete. The lists and the reading are the ones in ljos-policyd’s src/lib.rs; keep the two in step.
turn_record
The runner’s own record of the person’s turn. Claude Code writes each conversation to a transcript under ~/.claude/projects, Codex to a rollout under ~/.codex/sessions, and Cursor to an agent transcript under ~/.cursor. The kept prompt is the person’s only when it agrees with that record, so a tool call that rewrites the kept prompt and its bind has to forge the runner’s transcript too.
upgrade
ljos upgrade: replace the seat’s binaries with a published release.
user_rules
Standing rules shared by every seat of this user, and by every machine that shares the tracker repository.
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.
GuardReport
What guard_report read. verdict is allow or ask. A deny is an error from that function, not a report whose verdict says deny.
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.
NoteMemory
What ljos note did with the memory copy. The logbook note is a separate write and is already on the ticket when this comes back.
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.
SeatSignatures
What the signature check made of an issue’s seat ballots: the legacy unsigned ones it let count, and the ones it left out, each with why.
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.
TrackerAct
One tracker commit: chore(issues): ISSUE VERB by SEAT.
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. The round limit lives on the panel budget. The loop closes itself, and nothing here 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.
Basis
Who a claim written through MCP comes from, kept as source.basis.
Derived
Where a seat nobody named came from.
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.
PathCommit
How a commit of named paths ended.
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 session start, whose context the model hears (the CLI runs it too), 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_LEXICAL_MIN
The lexical match on its subject words a lesson needs before a failure note hands it over, however weak the rest of the pool is. Naming the subject scores from 0.5 to 1; one word of the failure no other hit carries, without naming it, stays under.
FAILURE_RECALL_HEADER
The line above the memories a failed tool call recalls.
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. Cursor blocks any other failing status too, because onboard sets failClosed on its permission events.
GROK_PACK_LINE
How this runner calls the pack. Its tools are not in the built-in list.
GUARD_SHIM
The shim each guarded command is: ask ljos-policyd about the argv, refuse a deny with the rule and what to do instead, else exec the next binary of that name on PATH. Without ljos-policyd it runs the command (fail open), so a box without the guard still works.
GUARD_SHIMMED
The commands the guard shims stand in front of.
GUARD_TIMEOUT
How long the guard waits for a slow check. A loaded machine used to refuse every command when a short budget lapsed. Five seconds is the default; LJOS_GUARD_TIMEOUT (seconds) raises or lowers it. A runner times a hook out after fifteen or twenty seconds, so this still answers first.
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 each stage of the reranked search: the fused pool, then the cross-encoder. Past a stage’s budget the fused pool answers, so a loaded host or a cross-encoder still being fetched costs a prompt about a second, not the runner’s cut-off.
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.
ISSUE_MEMORY_CAP
How many of an issue’s own memories a recall lists, newest first, before it says how many it left out. Past the cap the ones kept are the most relevant to the issue, newest first among equals.
JEV_ALONE_AT
How sure Jev must be that a claim bears on a prompt when the claim shares a word with it but does not name its subject.
JEV_HOOK_BUDGET_MS
How long a prompt waits for Jev’s judgment, search and network call together. Past it the local search, which ran beside the judgment, answers: a judge behind a slow or black-holed route must not hold a prompt up to the runner’s cut-off.
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.
NOTE_BASIS_ENTITY
The entity prefix a note uses to name its basis when known.
NOTE_SOURCE_ENTITY
The entity prefix a note uses to name where it came from when known.
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
GUARD_TIMEOUT, kept under the name the policyd call has used.
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
The note ljos_rule hands an agent over MCP: the call prints a line and does not check it; ljos-policyd is the trusted base when it exists. The command line does not print it.
POOL_PER_SHOWN
How many hits a search asks the pack for, per hit it may show, so the floors choose from more than they show. [search_relevant] makes sure the cut is not by age.
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.
RECALL_HEADER
The line above the memories a prompt or a command recalls. The hook, the runners and ljos policy all print it.
RELATED_MEMORY_CAP
How many text-search hits a recall adds after the issue’s own memories.
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.
SAID_ENTITY
The entity a claim in the person’s own words carries. The prompt hook stamps it on a choice it saves from a prompt, and an MCP write of words from the person’s latest prompt carries it too. It rides on a search hit, so recall can put the person’s words ahead of an agent’s.
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_MCP_MATCHER
The seat’s MCP tools as Claude Code names them. The hook reads which subagent calls one, so the server can bind that ballot to it. A matcher with a ^ is a regular expression, unanchored unless written so; joined to the tool list, it would make Write match TodoWrite. So it is a PreToolUse group of its own.
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.
SUBAGENT_NO_SEAT
What a seat-bound command says to a subagent that has no seat.
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.
TRACKER_LOCK
The file ljos locks around every write to a tracker checkout’s index.
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.
VALID_FROM
The entity prefixes of a claim’s validity window: the world time it holds from and until, as dates. The pack’s own clock (--as-of) is when the seat learned it; these are when it was true (Graphiti’s valid time).
VALID_TO
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 and the two scorers agreed. A claim Jev is sure of needs one word or alias in common with the prompt, or to name its subject: a check that is not Jev’s and, like that probability, carries no age. Otherwise the claim has to name the subject and clear HOOK_SCORE_FLOOR of best_lexical. The fused score is not read. The pack decays it by age, and age only ranks.
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 best, the highest cosine in the pool, and sits within DENSE_WORD_BEHIND of it. Both read the cosine, which carries no age: the pack decays the fused score by the memory’s age, and a correct memory is not dropped for being old. 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.
aider_read_entry
text (an .aider.conf.yml) with entry in its read: list: None when it is there already, an error for a read: this cannot extend.
aider_steps
Aider has no MCP client and no tool hook. Onboard writes the skill as a conventions file and names it in ~/.aider.conf.yml’s read: list, so every session loads it. The guard is advisory there: run ljos policy --fail-on-deny -- CMD before a command, as the skill says.
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.
append_config
snippet added to a config file’s text. A YAML snippet that opens with a top-level key the file already has (extensions: in Goose’s config.yaml) goes under that key, since a second one is a duplicate key; anything else is appended.
append_issue_options
Append an Options: line to issue and commit the tracker.
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 only a runner told to fail closed blocks), and on Cursor, a hook with no answer by CURSOR_GATE_DEADLINE_MS does the same, so the refusal carries a reason before Cursor times the hook out. 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. A trailing citation is the atom’s source, not another sentence. The entities open with the seat that wrote it.
atom_kind
Remember → lesson, Prefer → preference. Trust rows go through trust_atom.
atom_label
kind_label for an atom the pack returned whole, as the island does.
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
The ballots that count. The drawer may hold several personas from one session; only the first ballot that session cast is returned, and a session that filed a candidate is left out. 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. 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.
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_connection_env
Give a child this process’s connection. A nested ljos vote then signs with the same session, a subagent’s included. The seat argument is not copied onto the session.
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.
bind_settle_ballots
Point the model crate’s settle at the counted ballots. --issue makes it read the drawer, which still holds a session’s later personas.
blankets_ordinary_pushes
A pattern is broad when it matches ordinary branch pushes, not one command. git push*, git * and * do. git push --force* does not.
block_output
The answer that keeps an agent going one more round with reason, in the runner’s words for it.
body_with_options
body with an options line in front. An empty raw leaves body as it is.
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.
broader_than_cited
An agent-written pattern is broader than the command its reason cites when it also matches some other ordinary push.
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.
check_seat_signatures
The seat ballots on issue that fail their signature check, said as one refusal. A seat that does not stand (slot::stands) and is not under a slot this issue already held when its pin was introduced (slot::problems) is left out and named, and the rest still decide. Ok when every other seat ballot is signed under its pinned key or is legacy unsigned (in its issue’s entry before the tracker’s first pin, by commit order: ballot_sig::recorded_before_signing), or when LJOS_UNSIGNED_BALLOTS=allow.
cite_roster
The persona names a push cite leaves out: the pack’s roster. An empty roster is an answer from the pack. PACKSET_URL=off is not an answer.
cite_stands
Whether a cite stands: a tracker issue its seat ballots decide (seats_decide), open or closed. The ballots are the ones ballot_rows counts, so one session is one ballot here and in ljos consensus. 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_directory
Directory a tool command is judged in.
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_refused
Whether a policy reading refuses the command. A verdict line opens with deny or ask, or carries that word after a tab. Prose that merely uses the words does not.
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.
commit_paths
Stage paths and commit them alone (--only) in the checkout at dir, so another seat’s staged work is left out. The caller holds tracker_commit_lock. A git process outside ljos that holds the index is waited out with backoff.
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.
complete_as
complete, and with reopen the tracker issue goes back to the state it had before the claim, as a release puts it (unstamp_tracker). ljos finish without --close passes it: the sitting ends, the claim graph frees the node and the tracker drops the claim, and an issue kept STARTED then reads as taken by nobody and leaves every ready list.
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_id
The full identifier of this call or process, independent of its display name.
conversation_tag
A short tag for one conversation from the process that runs it: the pid in base 36, so the holder 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.
deed_token
The accession a citation names, out of what a caller pastes: the id itself, accession=ID or id=ID (the lines deedar create prints), a whole deedar create output, or file=sha256:HEX (the product line, which deedar current resolves to its deed once the prefix is gone).
derived_seat
Whether who is a seat nobody named: LJOS_SEAT, VISSUE_AGENT, an MCP client’s name, a tool call’s seat or a runner’s record would each have named it. A person at a terminal with no runner above is their login user, and that is named enough.
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.
dissent_lines
The lines of vissue consensus --file-dissent’s stderr that report a dissent: a child it filed (the create line naming Dissent holds) or one already filed. Other stderr is dropped.
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 parts work or which required parts do not answer, which state logs are damaged, 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, a runner skill or runner env ljos wrote is stale or edited by hand, the note queue is busy or has bytes set aside beside it, the guard bypass log is damaged, or the cloud guard file is a known older version or differs from the seat refusals, info when the row is optional and absent, no when a required row failed. A stale skill, env or cloud guard file ljos wrote is a warning ljos doctor --fix rewrites, not a failure. A cloud guard file that differs is a warning ljos cloud up rewrites.
drain_tracker_pushes
Push commits LJOS_TRACKER_GIT=push left behind. Empty when push mode is off, the tracker root is unset, or nothing is waiting.
drop_listing_cache
Forget the listing [atoms_lean_shared] holds.
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].
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, and a damaged note queue (see [STATE_LOG_ROWS]), 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 subject words with the command and the error, where a prompt needs one, since an error is long and noisy, and its lexical match on those words must reach FAILURE_LEXICAL_MIN, which only naming that subject reaches. Those are the second scorer, so the pack’s count of the ballots that named a hit is not read: where many lessons tie on the words the pack scores, which of them a ballot keeps at its cut is arbitrary. The floor is the lexical match of the hits that pass those tests, not the fused score: the pack decays that score by age, and age only ranks. What passes is read most relevant first, see [sort_by_relevance]. One handed over earlier in the session is left out. Calls that worked are not searched.
fallback_directory
Where a call whose command_directory does not resolve is read: the session directory when it exists, and otherwise the process directory. A prompt is read there, and so is a command with LJOS_GUARD_FAIL_OPEN=1.
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
flush_note_queue
Send the memories queued while the pack was off or not answering. A copy the pack would refuse is dropped. A pack that still cannot be reached leaves the fitted copies queued. Queue bytes that are not a memory move to a dated .damaged file beside the queue, and the drain names it.
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) and an optional row of a part the line leaves out, 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_command
What ljos seat prints. A conversation id with no named seat prints the mapped name alone, so a shell can export it. Every other resolution is the seat, holder and source format_seat_row uses.
format_seat_row
The doctor’s seat row: who votes, who holds, and where the names came from. The same resolution as format_seat_command.
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, prefer and rule print to a person at a terminal. A preference or a lesson names its kind and its text. A rule names its verdict and its pattern, then the reason. The next line is the first eight characters of the id, which accept, forget and graded take, and when it comes up for review in local time. A pipe gets format_write_ack.
gate_push
The verdict the push gate makes of a line: None lets it run. An ordinary branch push is allowed, including when a seat rule says git push* and when the remote’s owner cannot be read. Force, a +refspec, deleting a remote branch, and a mirror push ask by default. A tag push is ordinary. That ask does not wait for a seat rule. A seat rule that denies the dangerous push still denies it. A rule about some other command on the same line is left as it is when the push itself is ordinary. A push that carries LJOS_CITE is denied when the cite does not stand (cite_stands).
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.
git_hook_seat
The seat a git hook may book as. LJOS_SEAT, then seats.toml through CURSOR_CONVERSATION_ID, then grokbot- plus the first eight characters of that id, then antigravity when ANTIGRAVITY_CONVERSATION_ID is set, then opencode when OPENCODE_SESSION_ID is set. Nothing here reads the process tree. None means the hook does not book.
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.
grokbot_seat_name
The seat CURSOR_CONVERSATION_ID maps to: seats.toml, else grokbot- plus the first eight characters. None when the variable is unset. format_seat_command prints that name alone when no seat was named.
guard_bin_dir
Where the guard shims live: $XDG_DATA_HOME/ljos/guard-bin, or ~/.local/share/ljos/guard-bin.
guard_command
The seat’s verdict on one shell command. An empty line is an error. A deny or an ask is an error too: the command stays unrun.
guard_fail_open
Operator switch: guard faults allow with a note. Unset, they deny.
guard_fault_reason
What a faulted guard tells the agent. The repair is the person’s: they run ljos doctor in their own terminal. LJOS_GUARD_FAIL_OPEN=1 is the switch that allows other lines until then.
guard_report
The seat’s reading of one shell command. An empty line is an error. A deny is an error. An ask is a report: the command stays unrun, and the verdict is ask rather than a refusal labeled deny.
guard_report_in
guard_report for a command that would run in cwd.
guard_timeout
The guard’s wait: LJOS_GUARD_TIMEOUT seconds when that is a positive number, otherwise GUARD_TIMEOUT.
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.
harness_book_session
The opencode or agy conversation this process belongs to, when the runner stamped one. The git hook books into that session so a later plugin observe sees the deed and does not cite it again.
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. A git hook that resolved a seat passes that name, not the process tree.
holder_parts
A holder as its seat and its conversation tag. SEAT@TAG is the form ljos writes. ljos-mcp 0.31 and earlier wrote SEAT-TAG, with the tag a pid in base 36 (inky-n9o, disk-saver-t4t, free-claude-8h, free-opencode-1vmow); a last part of one to six lowercase letters and digits with at least one of each is read as that tag, so eessi-bot and disk-saver stay whole seats, and so does a version or a number such as gpt-5, node-01 or ridley-ci-a-555001. A run, a judge and a subagent (run-pr-1234, judge-gpt-oss-120b, sand-subagent-0e61) keep every part. An all-letter tag cannot be told from a seat’s own last part here; same_seat settles it against the seats a tracker knows. The same suffix on the seat side of SEAT@TAG (inky-n9o@deadbeef) is that tag too. An old tag comes back as None: the server that wrote it is gone and no conversation holds under it again, so the seat is its holder now and any conversation of that seat may finish or release the claim.
hook_already_running
Whether this same delivery started in the last 20 seconds. The key is the event, the session, the command, and the payload, so a retry whose exit code differs is a new call. A runner that delivers one event twice with the same bytes still collapses onto the first answer.
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 lexically 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. The seat says deny in the runner’s own JSON, with a reason, rather than leave the failure to the runner’s own rules. None on an event that is not a gate: a prompt or a session event that fails lets the work go on.
hook_holder_for
The holder a git hook books under for seat: the holder resolve_seat gives when it names the same seat, so a commit and ljos claim in one conversation hold under one name (SEAT@TAG). A holder taken from the process tree is not used; the hook then holds under the bare seat, which same_holder still matches.
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_text
What a prompt hook’s JSON answer hands the model, for a person at a terminal: hookSpecificOutput.additionalContext, or the answer as it came when it is not that JSON. Empty when the hook had nothing to say.
hook_timed
Run one stage of a hook call. With LJOS_HOOK_TIMING set, the stage and its wall time go to stderr, one line each, so a slow hook names the stage that holds it.
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. Claude’s Stop often repeats the payload; the transcript file is what the next turn changes, so its length and tail are part of a Stop’s key.
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. The kept prompt is judged apart, by the path a word resolves to.
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_ids_in
Tokens in text shaped like tracker ids: a prefix that opens with a capital, a dash, then four or more lowercase letters or digits, as Example-0000000000 or Example-1111111111. Each once, in order.
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_record
The issue as the tracker crate reads it, or as vissue show --json prints it when the crate has no record. A stub tracker in a test answers only the second.
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.
kind_label
The kind a recalled line names. A note is marked unverified by its stored origin, a lesson in the person’s words says so, and a lesson the pack did not store as the person’s names its origin, so a standing lesson an agent or a peer wrote never reads like one the person stated. ljos search, the island, the timeline and MCP name it the same.
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_claims
File the lesson of a finished sitting. A lesson learned on an issue belongs to the scope of the repository that holds the issue, wherever it was written. One the person typed in a terminal of their own is user-declared; any other is a proposal at L0 (derived) with origin agent-derived. Called after the node completed, so a refusal is a line that names the pack’s reason and the command that keeps the lesson, never an error. A lesson cut into claims the pack takes: at most two sentences each. The pack refuses an atom of three or more sentences, so a longer lesson is kept as several, in order, instead of being turned away. A full stop inside a token (0.29.0, Cargo.lock) or before a lowercase word does not end a sentence.
lesson_is_the_persons
Whether a lesson given to ljos finish is the person’s own: no agent runner above the process and person_present. 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.
load_seat_env
The pack client. With nothing set it speaks to 127.0.0.1:8761 about the seat workspace; PACKSET_URL points elsewhere, PACKSET_WORKSPACE names another workspace, and PACKSET_URL=off is the one way to have no pack. Load ~/.config/ljos/env (KEY=VALUE) when the process has not set those keys. The shell, the hooks, and the MCP seat then share one pack and one LJOS_SEAT.
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_recall_in
log_recall into dir, so a test names its own directory instead of racing other tests over XDG_STATE_HOME.
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_claim_atom
The atom an MCP ljos_remember or ljos_prefer posts, with its basis. The person’s words carry origin user-declared and SAID_ENTITY, and a lesson in them stands unless the caller said transient. An agent’s claim carries origin agent-derived and the horizon the caller gave.
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.
mcp_forward_with_requests
Forward one call and relay requests from the child to the connected client. Request ids belong to each direction independently; a child request with id 1 is not the response to the forwarded tool call with id 1.
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_atoms
git’s ljos-atoms merge driver. current is %A and path is %P. The file becomes a fresh export of this machine’s atoms.
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.
note_can_wait
Whether a memory the pack did not take should wait for it: the pack is off, missing, not answering, or does not know this seat’s token. A refusal (an HTTP 4xx other than 401, 408 or 429, or the pack’s prose and size rules) is final, so the copy does not wait. An empty text is no memory at all. The words POST /v1/atoms failed alone are not a refusal: the status and the pack’s reason decide.
note_memory_warning
The line ljos note prints when the pack refuses its memory copy. The note is already on the issue’s logbook, so the refusal is a warning and the command still succeeds. A pack of 0.15.2 or later keeps a long note as kind note; an older one refuses an agent’s sentence past its word limit, and the ticket still keeps the note.
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. With no runner on the machine the deed store, the tracker, the pack and the host key are still set up.
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_line
The Options: A, B line for raw. Commas split each string.
options_of_issue
The options an issue’s body puts to a vote, or none when the tracker does not answer.
orphaned_index_lock
The line for an index.lock no git holds: older than a minute, with no git process working in the checkout. A git killed outright leaves one, and every later commit fails on it until a person removes it.
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_prefer
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_agent
Write a claim an agent made, at once. No person approves it first: it carries origin agent-derived and its provenance in source, and ljos memories review keeps, edits, merges or drops it afterwards. The pack still refuses a secret, the size cap and a third sentence, and holds an agent’s claim to its word limit, grade and adverb ratio: a sentence it would keep from the person with a warning is refused here.
packset_write_agent_note_tagged
Write an agent-derived working note with provenance tags. Unlike packset_write_agent_tagged, the atom is a note, not a lesson, so session-end extraction of assistant prose cannot become a fact the hook shows on later prompts. The note carries source.basis agent and the note-basis:/note-source: entities that keep it out of prompt facts.
packset_write_agent_tagged
packset_write_agent with extra entities on the atom, such as the via: and session: tags session-end extraction stamps for provenance.
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_mcp
Write an MCP remember or prefer only when it is the person’s own words from their latest prompt.
packset_write_note
A progress note, as an agent memory the default list shows. The tracker logbook is a separate write. The memory copy is cut to copies the pack’s atom gate accepts, so a long sentence or a third sentence is stored, and a pack that does not know kind note takes the same text as a summary. The same words on another ticket are another memory. A pack that answers with the record it already holds for a different ticket is given the note again under this ticket’s set. A pack that is down or answers 401 keeps those copies queued. A refusal is not queued. The caller keeps the logbook note either way.
packset_write_remember_note
The preference ljos prefer writes.
packset_write_scoped
packset_write for a lesson learned on an issue: it carries an issue:ID entity naming where it was learned, the same id in the issue field, 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_logbook_act
A logbook attribution, - Noted by saddle [ts] or the note vissue rewrites that into. Not a :Seat: property.
parse_playbook_name
Refuse a name that is not in PLAYBOOK_NAMES.
parse_semver
First N.N.N in a --version line.
parse_tracker_commit
The subject persist_tracker writes, or None when it names no seat.
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.
payload_sessions
Every id a hook payload names its conversation by, the one hook_call_as picks first. Cursor sends a session_id beside the conversation_id its shell is stamped with; Grok says sessionId.
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; =push commits, rebases with the per-issue field merge, and pushes. A push that fails stays committed and is tried again on the next write. The subject names the seat, and the logbook gains - {Verb} by {seat} [timestamp].
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.
person_present
Whether the person is at this process, on positive evidence: no runner’s variable in the environment, and [person_at_terminal]. Not being under_a_runner proves nothing, since a tool call can name its parent systemd or leave the runner by a double fork. Every basis of person a CLI verb decides asks this; anything less is the agent’s.
person_stored
Whether the pack’s stored record says the person stands behind atom, an atom or a search hit: origin user-declared and source.basis person, which only a person-path writer stamps. A missing or empty origin is not the person’s, and neither is a direct post, a pack default or a record written before the basis. Kind and entities are the writer’s and are not read.
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.
policy_with_memory_in
policy_with_memory for a command that runs in cwd.
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
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.
protocol_text
The protocol with the sitting’s section list filled in from [SITTING_SECTIONS], the same order ljos sitting prints.
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_cite_reading_on_roster
push_cite_reading under the pack’s roster (cite_roster), the reading ljos consensus prints. A roster that is not readable is the refusal, the same one cite_stands gives.
push_cite_reading_signed
push_cite_reading with the signature check already made: a refusal there is the gate’s answer.
push_tier
What the gate makes of a push, from its arguments. A branch or tag push is free on any remote: an unreadable owner, a foreign account, a shared repository and a release do not ask or deny. Force, a remote-branch or tag delete and a mirror push are the person’s to run. Pure, so the ladder is tested without a repository. facts stays so a caller that already looked the remote up still compiles; it does not change the tier.
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.
push_tier_in
push_tier for a push run in dir, so a bare --force-with-lease push is judged by the branch the checkout would push to.
queue_note
Queue the memory copy of a note the pack did not take, for the next note, finish or session start to send. false when it was already queued, or when the pack would refuse the text.
raw_ballot_rows
An issue’s ballots as vissue vote ID --json prints them.
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.
recall_memories
What the seat remembers that bears on an issue, for ljos recall and for the hooks that recall a claimed issue. First the memories tagged with the issue (issue on the atom, or an issue:ID entity), newest first, at most ISSUE_MEMORY_CAP with a count of the rest. Then up to RELATED_MEMORY_CAP hits from a search on the issue’s id and title that are not already listed, most relevant first, out of POOL_PER_SHOWN times as many. Reviewed kinds only. Empty when the pack holds nothing on it. A pack that does not answer is started, as the doctor starts it, and the line says so only when the start did not bring it up.
recall_note
The recall a prompt naming issue is handed: where the full working set is, then what the seat remembers on it. Empty when nothing is remembered on it, so an issue with no memories adds no line to the prompt.
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.
refuse_unless_person_words
Refuse text unless it is the person’s own words from their latest prompt.
registered_seat
Refuse a tracker write from a seat the seats file does not list. A file that lists no seat, or is missing as on a fresh single-user install, refuses nothing.
release
Hand a session node back before it is terminal: ready again, assignee cleared, generation moved. A node the claim graph no longer holds (a lease reclaim freed it, a completion ended it, the graph never had it) still hands back a tracker heading left STARTED under this holder or under nobody.
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 for the person: standing, unless --transient. Under a runner the result is transient. The remember command stores the agent’s own words as a note instead of calling this, and the transient result keeps a leftover caller from stamping horizon:standing on text the person did not say. --standing does not override that.
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_call_seat
The seat for one tool call, resolved the way the hooks resolve it. LJOS_SEAT in the process or in ~/.config/ljos/env is the seat. VISSUE_AGENT is the same name from the tracker. A seat argument that is only the harness id (claude, codex, agy) does not replace that. A different worker named on the call still wins. With none of those, the call has to pass a seat.
resolve_deed
require_deed that hands back the deed’s own id, so a tracker cite carries deed-<kind>-<slug> even when the caller named the deed by its content digest.
resolve_seat
Who ljos seat and ljos doctor name.
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. A reason the pack does not say the person stands behind, or any reason when proven is false because the listing did not ask for this seat’s token, is labelled an unverified agent note, so no gate states it as the person’s.
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.
same_holder
Whether two holder names are one holder: the same name, or a seat’s bare name and that seat’s SEAT@TAG. Git hooks in ljos 0.30 and earlier recorded the bare seat where ljos claim recorded SEAT@TAG, and tracker rows and hold records from then still carry the bare name.
same_seat
Whether held, the name a tracker row is claimed under, belongs to the seat holder sits as. same_holder keeps two tags of one seat apart; this does not. The bookkeeping that asks already looks only at one checkout, where a git hook (SEAT@TAG, or SEAT-TAG from ljos 0.31 and earlier) and the MCP server (the bare seat, or its own tag) are one conversation booking under two names. Past what holder_parts folds, a SEAT-TAG whose seat part is this seat counts when the tag is a pid in base 36 that may be all letters (free-agy-aak, free-opencode-nrv) and the whole name is not itself a seat in known, so eessi-bot stays apart from eessi. A tag of digits alone is a number and never folds, and a run, judge or subagent keeps its id whole.
same_seat_here
same_seat against the seats this tracker lists.
search_reading
What a search score is. Empty and nonempty are different facts from a writer that did not answer.
search_with_signals
The search, chosen by relevance (see [search_relevant]), 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, and whether the cross-encoder ordered it, 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_agent
The seat name for one Grok Bot conversation. seats.toml wins. An id that is not listed becomes grokbot- plus its first eight characters, never the raw id. A subagent’s id has no seat of its own: None.
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_guard_in
seat_guard for a command that starts in cwd, absent the process directory. A cd on the line moves it for the commands after.
seat_name
The name this seat remembers, votes and earns trust under. A git hook that resolved a seat passes that name, not the process tree.
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_source_row
The doctor’s seat source row: where the seat tracker writes go under came from. A seat nobody named is a warning, not a failure: reads work, and only the writes write_seat guards are refused.
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_for
session_start_line for one conversation. When that conversation already holds an issue, the line names it, so a later tool call does not have to invent one.
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 is started, as doctor starts it. The line says the store is down only when that start did not bring it up, and it does not hand the agent a command to run.
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.
set_validity
Set the validity window the next written claim carries.
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.
sign_handover_manifest
Sign a handover manifest with this seat’s key. A manifest that already has a signature is left as it is: the machine key does not sign it again.
sitting
Open a sitting on an issue, in [SITTING_SECTIONS] order, and stop at the first habitat that does not answer. 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.
stamp_seat_logbook
Put - {Verb} by {seat} [timestamp] at the top of the issue’s logbook. The line is the seat, with no :Seat: property. A file that does not hold the issue is left alone.
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.
static_guard
A force push, a seat deny rule, an rm -rf outside a temp directory, or a commit, push, or merge the gates refuse, judged in this process. None means the slow check may run. A timeout there denies the line unless LJOS_GUARD_FAIL_OPEN is set. A temp home is not a seat unless LJOS_GUARD=on, and this returns None there too. A temp working directory is still judged.
static_guard_in
static_guard for a command whose working directory is cwd.
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_is_idle
An agy stop whose execution loop has actually ended. Mid-loop stops omit fullyIdle, and those must not finish the claim.
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 in the person’s words. The hook does not write the 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_guard_note
The note a timed-out or crashed guard left, once. Empty when the last check judged the line.
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_answer_in
tcb_answer for a command that will run in cwd.
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 but fails to start, crashes, hangs past guard_timeout, or prints something that is not a verdict denies the line. LJOS_GUARD_FAIL_OPEN=1 allows that fault and says the guard is unhealthy. A line static_guard already judged does not wait for that binary. The binary keeps this process’s directory; tcb_verdict_in starts it in the hook’s directory instead.
tcb_verdict
The TCB’s verdict on a shell line: a fast in-process check first, then ljos-policyd on that whole line, 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. A policyd that is present but times out, crashes, or prints no verdict refuses the line, unless LJOS_GUARD_FAIL_OPEN is set.
tcb_verdict_in
tcb_verdict for a command whose working directory is cwd. ljos-policyd is started there once that path resolves.
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_commit_lock
Hold the tracker checkout that holds dir for one write to its index: a status read, a file write, an add and a commit, or a rebase. Every ljos writer on the host takes it, so seats queue instead of meeting on index.lock. Taking it twice in one thread waits forever.
tracker_commit_lock_by
tracker_commit_lock for a caller with a time budget: None when another writer still holds the checkout at deadline.
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_holds_ballot
Whether the tracker holds voter’s ballot for choice on issue, from vissue vote --json rows. The read-back after a cast: only the tracker is proof a ballot exists.
tracker_known_seats
Seats this tracker already knows. seats in vissue.toml is the roster a person wrote. A CLAIMED_BY holder counts too: the name before @, slugged, so inky@box and Disk Saver are inky and disk-saver. An empty set means the tracker has not named a roster.
tracker_log
git log subjects on the tracker that name a seat, optionally one seat.
tracker_recall
The tracker’s recall of an issue, fenced as unverified text. The issue body and the logbook’s note: lines are written by anyone who can reach the tracker, an agent included, so they are handed on as that and never as the person’s words.
tracker_seat
The seat a tracker commit and its logbook line name. One token, so ljos log --seat can read it back out of the subject.
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.
tracker_usage
Per-seat counts of tracker commits from since (a day git understands, YYYY-MM-DD) onward.
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.
unhealthy_note
What a person reads when the guard timed out or crashed: the call is allowed, and why says which failure it was.
unknown_seat_error
What a call that named an unknown seat is told: the name, the seat it most likely meant and a few others, and the two ways to name it.
unseated_subagent
Whether CURSOR_CONVERSATION_ID names a subagent that seats.toml does not list. Its commits are not booked; git_hook_seat callers say so instead of booking under grokbot-sand-sub.
unstamp_tracker
Drop the tracker’s claim on issue when holder holds it. 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; the bare seat and its SEAT@TAG are one name (same_holder). None when the tracker does not know the issue or nobody holds it.
usage_table
The usage table for acts already parsed.
utc_at
secs after the epoch, RFC 3339 UTC to the second, as the pack writes.
valid_fetch
How many hits to ask the pack for when validity filtering will drop some: four times the limit, at least 40, at most 200.
valid_on
Whether a claim with these entities held on day (YYYY-MM-DD). A claim with no window holds always; a bound it lacks is open.
validate_rule
The checks write_rule makes before it touches the pack, so a broad pattern is refused with no atom written.
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_call_seat
Run f as the seat this call named. Nest it inside as_thread: the inner scope is the one whoami reads, so the bot’s own name wins over the thread the runner named on the same call.
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, or one fix: child for a blocking finding. A round of nits, or a round past the limit, closes the parent as settled-with-notes. That close is the step. Refused while a child is open, while the panel has not voted, or once a round has passed with nothing blocking left.
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, with basis as who stands behind its reason. The pack files a rule sent with no origin as user-declared, the person’s.
write_seat
The seat a tracker write (note, claim, sitting, finish, file, deed) is made under. Refused, as a ballot is, when nothing named the seat: a subagent shell wrote hundreds of notes as exec-daemon and cursor.
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.