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§

approval
One-use consent for an ask verdict when the caller has no approval UI.
hud
ljos hud — exec the separate ljos-hud binary.
jev
The prompt hook’s judgments through Jev, TypeSafe’s decision model, on TypeSafe’s own API or OpenRouter’s Decisions API: which candidate claims bear on a prompt, whether the prompt corrects the agent, and whether it puts a choice.
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.
sync
Sharing the seat’s memory across machines through the tracker repository that already travels between them.

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.
Event
One dated event on an issue’s timeline, from whichever store holds it.
Finding
One typed finding from an eb-stack campaign state file, flattened to what a seat reads and remembers.
Forecast
learn_about and learn_anchors together, written to the pack: the rows, then the personas the outcome moved. Returns what was written.
Habitat
One habitat and whether it answers.
Harness
One agent runner, as the seat’s own configuration describes it. The seat ships no runner’s name: the file at harnesses_path names them, one table each, and onboard and doctor read it.
Harnesses
The whole file: [[harness]] tables.
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.
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.
Step
One step an onboarding took, or would take.
StopTurn
The turn a stop ends, read from the runner’s transcript: the person’s last request, the shell commands since it, the output of the latest test run (or of the last commands when none ran), and the final message.
Trust
One row of the influence graph: from listens to to with weight. about scopes the row to the domains it speaks to: a row with none applies everywhere, a row with some applies when one of them meets the issue at hand (its title, or the entities of the island it activates).

Enums§

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

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.
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.
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.
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.
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_RERANK_BUDGET_MS
How long the prompt hook waits for the reranked search. Runners cut a hook off at 10 to 20 s, and a loaded host has made the rerank alone take longer than that.
HOOK_SCORE_FLOOR
The floor a hit must reach, as a share of the strongest hit’s score, to be injected. A command line matches many claims weakly; only the ones that match it as well as the best does are worth the agent’s context. The floor is not relevance: a vague sentence scores high on unrelated lessons, so a hit must also name a content word of the cue.
JEV_ALONE_AT
How sure Jev must be that a claim bears on a prompt it shares no content word with.
LEARN_BETA
The factor a refuted voter’s rows shrink by (Hedge, doi:10.1006/jcss.1997.1504).
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.
POLICY_TCB
Printed on stderr. ljos-policyd is the TCB when it exists.
PRINCIPLES
Five named principles, invocable mid-sitting, mapped onto existing law.
PROTOCOL
The sitting protocol: which store answers which question, the order of verbs before, during and after the work, and the refusals worth knowing. ljos protocol prints it, ljos onboard installs it as a skill, and the server serves it at ljos://protocol. Harness agnostic on purpose.
REQUIRED
The habitats the seat needs. Encoder and policyd move with the rest.
RUBRIC
The scoring sheet a compose is voted on. Personas vote the compose, not accept-at-most-one on the designs.
SEAT_ENTITY
The entity every write carries: which seat wrote it. Many seats share one pack, and a reader can then see whose lesson it is reading.
SEAT_PATHS
The files that are the seat’s law and its reach into each runner: the binaries the hooks run and the files that register them. An agent that may rewrite them can rewrite the law, so only the person does.
SEAT_VERBS
The seat verb a bare tracker verb stands in for: the tracker writes one store, the seat’s verb writes every store and weighs the ballot.
SEAT_WORKSPACE
The workspace the seat’s memory lives in when nothing names one. The pack’s command line keys a workspace to the repository it stands in; a seat is one memory across every repository it works in, so the seat pins one. PACKSET_WORKSPACE overrides it.
SHIPPED_PLAYBOOK_NAMES
The five 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.
TRUST_FLOOR
The least a row can fall to, so a voter who is right again is heard again.
WORK_NUDGE_EVERY
Tool calls a conversation may make without a word to the seat before the hook reminds it. A sitting opened at the start and nothing after it is how long work went unrecorded.

Functions§

add_entities
Add entities to a body without losing the seat’s.
age_of
How long ago a stamp was, in words a reader can place: today, yesterday, N days ago, then weeks, months and years once the count stops fitting the smaller unit. Empty when the stamp is missing or unreadable, in N days for a stamp ahead of now.
anchors_json
Anchors as the settles take them: {"name": anchor, ...}.
announce_seat
The MCP server, once a client has said who it is: the seat is the client’s name. The holder is any *_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.
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.
atom_body
Explicit claim body. The text is stored as given; never harvested. The entities open with the seat that wrote it.
atom_kind
Remember → lesson, Prefer → preference. Trust rows go through trust_atom.
atom_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.
ballots_from_json
(agent, choice) pairs from a tracker’s vote --json.
bind_playbook
Hold name on issue until finish or release. A different name while one is held is refused: mid-sitting turns re-read the same note.
block_output
The answer that keeps an agent going one more round with reason, in the runner’s words for it.
bound_playbook
The playbook name this sitting holds, if one was bound. Tracker note is the bind that survives the process; the runtime cache is only when the tracker does not answer.
brief
The brief a subagent playing a persona starts from: the persona’s view and domains, what the seat knows on those domains (preferences first), and the issue’s working set. One text, so a panel member reads the same seat the rest do and still reads it its own way.
brief_playbook_blocks
The three blocks a brief carries: playbook step (full body), named principles, arena rubric.
brier
Quadratic score of a stated probability against the outcome.
bump_issue_id
A deterministic issue id for a module of a generation: the project, then eight base-36 digits of the module and generation hashed.
bump_plan
Put a bundle’s modules on the tracker: one child issue per module under parent, blockers along the dependency edges, ids the same on every run so a rerun holds what exists and adds what is missing. vissue ready then lists the modules a seat can build now, and a sitting refuses the rest until their blockers close.
bump_rows
The plan a bundle implies for the tracker: one row per module the lock builds, blockers along the SBOM’s dependency edges. Nothing is written.
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 persona: the chosen option’s probability is the ballot’s confidence, the forecast is its prediction, and a note on the issue says the ballot came from Jev. Jev’s own confidence is a spread over the options, not a probability, so it only decides escalation.
cite_stands
Whether a cite stands: a deed accession deedar current takes, or an issue whose ballots settle (vissue consensus --gate) or that closed as a decision. The text says what it stood 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.
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.
command_segments
The commands a shell line runs: split on &&, ||, ;, | and new lines outside quotes, each with leading NAME=value assignments and the prefixes sudo, env, time, nohup and exec taken off. 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.
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.
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_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
consensus_steps_anchored with the model flags the issue’s tags ask for on the model crate’s settle.
conversation_tag
A short tag for one conversation from the process that runs it: the pid in base 36, so acme-cli-39u reads as a name and not a number.
copy_playbook
Bind name to issue and return the full recipe body. This is the copy into the working set; sitting prints it before recall.
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.
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.
expand_leading_tilde
raw with a leading ~ or ~/ put against home; None when there is nothing to expand.
finding_lesson
The lesson a finding leaves: what failed where, then the fix, or that a later attempt got past it. Two short sentences; the pack refuses more, and refuses hard prose.
finish
forecasts_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_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.
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_seat
ljos seat: who is sitting, one field a line.
format_seat_row
The doctor’s seat row: who votes, who holds, and where the names came from.
format_steps
format_sweep
One line on what the sweep did, or nothing when it found nothing.
format_write_ack
One line after a pack write: id, kind, due, text. Not the embedding.
gate_push
The verdict the push gate makes of a line the rules asked about: None lets it run. Only an ask on a push is gated; every other verdict, and a line with no push, is the rule’s own. A cited pass is noted on the cited issue, so the record says which decision let it through.
glob_matches
A glob over a command line: * matches any run of characters, ? one. The match is on the whole line, so rm -rf * is rm -rf and anything after, and *sudo* is sudo anywhere.
graded
Grade one review: recalled moves the atom out, lapsed brings it back sooner.
habit
Take a reading: write it as a claim that supersedes the habit’s earlier reading, carrying that reading as was, with its review due one cadence from now. Returns the pack’s answer and the reading it closed.
habit_text
The claim a reading is stored as. The words are for a reader; the numbers travel in the atom’s habit field.
habits
The live readings in the seat’s pack.
hand_ballot
Hand a persona’s open ballot to its own session, and note on the issue where it runs. None for a persona with no runner, whose ballot stays a brief for a subagent.
handover
Pack a slice of the seat into out: the tracker’s satchel, the pack’s atoms, the deeds both cite, sealed, and signed when a host key is set.
harnesses_from
Parse the runners file. An absent file is no runners, not an error.
harnesses_path
Where the runners are described: $XDG_CONFIG_HOME/ljos/harnesses.toml.
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_name
The name this conversation’s claims are held under.
hook_already_running
Whether an identical call (event, session, text) started in the last 20 seconds. A runner that loads another runner’s hook file runs the same hook twice for one event, and both queue on the pack’s one reranker. The first call makes the marker and answers; the second returns at once.
hook_call
Read a hook call from the runner’s JSON, or from plain text (an argv under argv law). Fields: hook_event_name, tool_name, tool_input (its command, else every string value joined), prompt; grok’s camelCase hookEventName, sessionId and toolInput read the same.
hook_call_as
hook_call with the event the runner’s hooks file named, for a runner whose payload does not carry one.
hook_context
The context the hook injects. A camel-case runner does not see prompt stdout, so the ids stay unmarked until the first tool result, or Stop when the turn ran no tool, delivers them. Every other runner is shown this string and the ids are marked now.
hook_note
The pack note for a prompt, and the memory ids named in it. The ids are not marked seen here: the caller marks them when the runner delivers the note. A camel-case prompt hook’s stdout is discarded, so marking here would burn the note before the model read it.
hook_output
The hook’s answer in the runner’s JSON: additionalContext under the event that fired. Empty context is no output, which the runner reads as no opinion.
hook_output_ruled
hook_output carrying a rule’s verdict on a tool call: deny or ask as the runner’s permission decision, with the rule’s reason. On a prompt or an argv line the verdict is a line of text.
hook_subagent
What a hook call says about a subagent: its type when the call fired inside one (subagentType, or agent_type), and whether a stop gate already held it this turn (stopHookActive), and the agent’s id when the runner shares one session between a parent and its subagents.
hook_trace
With $XDG_RUNTIME_DIR/ljos/hook-trace present, one line per hook call to hook-trace.jsonl beside it: the event as sent and as read, the payload’s top-level key names, the session and subagent type. Key names only, never values, so a runner’s hook contract can be read off a live session without storing what it said.
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_regex_pattern
Whether a rule’s pattern is a regular expression rather than a glob: it says so with re:, or it carries a class (\b, \s, \d, \w) or an alternation group, which a glob would read as literal text and never match.
is_seat_path
Whether a path names one of SEAT_PATHS; a backup beside a binary (ljos.bak) is not the binary.
is_version_tag
Whether a tag names a release: a version, v1.2 or 0.3.0, not a bookmark such as campaign-sent.
island_entities
The domains an issue’s island speaks to: the entities of the memories its title activates, most frequent first, eight at most. What learn scopes its rows to.
island_reading
What an activation number is, and whether this call rewrote weights.
issue_options
The options an issue puts to a vote: an Options: A, B line split on commas, or the - a bullets under a bare Options: line.
issue_words
The words an issue speaks in: its title’s topic words, its tags, and the entities of the island its title activates when that island is not weak.
jev_ballot
Jev’s answer for a persona on an issue, not yet cast: its brief, less the closing instructions a subagent needs, is the state, and the issue’s options are the choices.
jev_panel_stands
Whether a panel’s Jev answers may stand as its ballots: every seated persona sure, and all on one option. Personas answered by one model are correlated voters, so their agreement settles only a question it could not change; a split or an unsure seat goes to subagents.
jev_vote
One persona’s ballot through Jev: cast when Jev is sure, noted and left for a subagent when it is not.
join
judge_due_page
ljos due --judge: the review judges weigh each claim on the page against the newer claims about it. One that holds at jev::REVIEW_HOLDS_AT is graded recalled; one at or under jev::REVIEW_FAILS_AT is named for the agent to supersede or withdraw, and stays due; the rest stay due. No claim is lapsed by a judge, since a lapse says a reader forgot it.
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.
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_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 with one of each smoothed in, and the rows are the log odds of that scaled to the best voter at one (calibration_weights). Measured against multiplicative shrinking (Hedge) on voters of known accuracy, the record reaches the batch calibration and the shrink does not: a voter is weighed by what it got right, not by how many times it has been punished. 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.
log_score
Logarithmic score of the probability assigned to the event that occurred.
looks_pasted
Whether a prompt carries pasted material: a pasted block, a code fence, terminal or log output, or many lines. Jev’s injection question is asked of every prompt, and a plain request is not pasted text addressing the agent.
mark_seen
mcp_forward
One tool call answered by a fresh ljos-mcp: start program with marker set, send it the client’s initialize (init, or a plain one), the initialized notification and tools/call with params, and return the JSON-RPC answer to the call, result or error.
mean_brier
Mean Brier score over the forecasts that stated a probability, and how many those were. None when nobody stated one.
mean_log
Mean logarithmic score over the forecasts that stated a probability, how many of those scores were finite, and how many were unbounded.
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.
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.
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_from
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).
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.
pack
pack_last_write_ts
The pack’s last write, RFC 3339, for a HUD watch. None when the status has no stamp yet.
packset_consolidate
The rule a write applies on arrival, run over what the pack already holds. Without apply nothing is written; the pairs are reported.
packset_forget
Retire one atom from the workspace the cwd resolves to, optionally naming the deed that withdrew it.
packset_hubs
The claims the pack’s link graph turns on, highest first: what matters in this seat’s memory by its own connections, before any query.
packset_island
The memories a task activates: the pack’s island around the cue. With fire, the strongest of them fire together and their links gain weight.
packset_island_as
packset_island through a persona’s lens: the spread follows the weights that persona fired, and a fire writes its weights and not the seat’s. The seat’s own island is the one with no lens.
packset_search
packset_search_as_of
packset_search_opts asked of the pack as it stood at as_of (RFC 3339; a date alone reads as its start): only memories live then answer, what was withdrawn since included and what was learnt since left out. None is now. This is the question “what did the seat know when it decided that”, and the pack keeps every record so it can be asked.
packset_search_opts
packset_search with a limit and the cross-encoder rerank: the writer scores the top hits against the query with its reranker, which costs a model call and buys precision. For a brief or a person reading, not for the hook.
packset_write
packset_write_as
packset_write as a persona: the claim carries the persona’s entity, so what a persona learned comes back to it first in its next brief and stays in the seat’s one pack. A persona accumulates its own lessons the way a reviewer does; the seat still reads them all.
packset_write_scoped
packset_write for a lesson learned on an issue: it carries an issue:ID entity naming where it was learned, and a scope:NAME entity when one is given, so the claim travels with that scope’s log rather than the machine’s default.
panel
panel_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_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.
parse_every
7d, 24h, 2w, 30m, or bare seconds.
parse_playbook_name
Refuse a name that is not in PLAYBOOK_NAMES.
parse_semver
First N.N.N in a --version line.
peek_hook_context
The held pack text, left in place.
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. LJOS_TRACKER_GIT=off skips it; =commit commits without pushing.
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_entity
The entity a persona’s own claims carry, so a brief can find them.
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_of
The live personas: the latest persona atom per name.
personas_speaking_to
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 closed-set name 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 five shipped filled in when missing.
playbooks_of
The live playbooks: the latest playbook atom per name.
policy_line
policy_with_memory
The argv line, then what the pack knows that bears on it: the memory a policy layer injects beside its verdict. The line prints even when the pack is down; the memory is the part that may be empty.
policyd_bin
POLICYD_BIN, else ljos-policyd on PATH.
policyd_required
Operator switch: missing TCB is a deny. Unset, absence stays open.
post_claim
POST one explicit claim. Callers pass Remember/Prefer only.
post_hook_stdout
Stdout for a tool-result hook, and the ids to mark now that the note was delivered. A camel-case runner takes the note on the first tool result. Stop additionalContext would start another round, so the hold is cleared here and Stop finds nothing. Any other runner takes it the same way. A turn with no tool leaves the hold for Stop.
predictions_json
Forecasts as ljos-consensus surprising --predictions takes them.
predictions_of
The latest forecast per agent on an issue.
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.
push_call
The first git push in a line, following cd DIR and git -C DIR before it.
push_tier
What the gate makes of a push, from its arguments and the facts about its remote. Pure, so the ladder is tested without a repository.
push_tier_at
The tier of a push read from the repository it runs in: the remote it names (else the branch’s upstream remote, else origin) and whether any tag exists there.
read_campaign
Read an eb-stack campaign state (campaign.json).
readings_of
The live readings among atoms, one a habit, by name.
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.
release
Hand a session node back before it is terminal: ready again, assignee cleared, generation moved.
remember_findings
Write one lesson per finding a person or a seat resolved (every finding with all), cite the state file on the issue when one is named, and say what happened to each.
remote_slug
owner/repo from a remote URL: git@host:owner/repo.git, https://host/owner/repo, ssh://git@host/owner/repo.
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.
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_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_seat
Drop the records announce_seat wrote, when the server ends.
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.
rules_from_pack
The rules in the seat’s pack.
rules_of
The live rules in a set of atoms.
run
run_as
run with VISSUE_AGENT set to identity, so a ballot or a claim is recorded under a persona’s name rather than the seat’s.
run_captured
run_captured_as
run_captured with VISSUE_AGENT set to identity, for a tracker write whose output the caller has to hand on. None leaves the environment as it is.
run_fed
Run a habitat’s verb with input on stdin.
runner_pid
The process that started this one. For ljos-mcp that is the runner, and the runner is also above every shell it opens.
runs_tests
A command line that runs a test suite. Exact, so it is code, not a judgment.
search_reading
What a search score is. Empty and nonempty are different facts from a writer that did not answer.
seat_command_for
The exact seat command a denied vissue VERB ARGS line should have been, its arguments carried over: vissue claim ljos-6c3z is ljos sitting ljos-6c3z. None for a line with no such verb.
seat_for_thread
The seat for a thread a runner named on a call. The holder is the one a shell of that thread already took, found by the thread’s record; else the thread id whole, recorded so the thread’s shells find it.
seat_guard
The seat’s own guard, before any rule: a shell command that writes one of SEAT_PATHS (anything but a reader, or a redirect into it), or a file tool aimed at one, is refused. ljos onboard and ljos itself write them, run by the person.
seat_name
The name this seat remembers, votes and earns trust under.
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.
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_tag
A conversation tag from a stamped id: ten base-36 digits of FNV-1a over the whole id. A prefix of the id would not do: a UUID v7 opens with its timestamp, so two conversations started in one window share it.
settle_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.
shipped_playbooks
The five shipped playbooks, bodies in full, model roles as spawn hints.
sitting
Open a sitting on an issue, in the protocol’s order, and stop at the first habitat that does not answer: doctor, cards, the review clock, the island the issue’s title activates, the working set, the timeline, the claim. One verb, so the loop that makes the seat a memory runs every time and not only when somebody remembers to run it.
sitting_due_report
The review clock as a sitting prints it: a short prefix, then the summary.
sitting_gated
sitting, and with anyway the claim goes through even when the issue’s blockers are open. Without it a blocked issue is refused before anything is claimed: the tracker’s graph says what is workable, and a seat that sits on blocked work sits on nothing it can finish. playbook names the recipe copied into == playbook before recall; absent, a name already bound, else a closed-set token in the title, else sit. Sitting always binds one of the five before claim. Finish and release drop the sticky name.
skill_text
The skill file a harness loads: front matter, then the protocol.
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_hook_stdout
Stdout for Stop, and the ids to mark now that the note is delivered. A continuation (stop_active) says nothing: the first Stop already delivered the note.
stop_turn_from_transcript
Read a JSONL transcript of user and assistant entries whose message.content is text or blocks (text, tool_use, tool_result).
subagent_brief
What a subagent is told on its first tool result: the issue its parent holds and how its result joins it. A subagent that is not told the issue cannot cast a ballot on it, and a sitting of its own would contend with its parent’s.
subagent_stop_reason
The stop gate for a subagent: once, when its parent holds an issue, the reason the subagent is kept working one more round. A gate that already held it this turn, or a parent holding nothing, lets it stop.
take_hook_context
Take the held pack text once. Empty if nothing was held.
take_hook_note
Take the held note and its ids, and remove both files.
tcb_check
One line from ljos-policyd check -- argv. None if the binary is absent or failed to start. Absence is not a deny.
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).
topic_words
The words an issue is about, for scoping trust rows: its title, lower case, three letters or longer.
touches_seat
Whether a hook call’s cue is the seat’s own verbs or tools.
tracker_git_drift
Commits the tracker checkout holds that origin does not. The count is always named. A live background push, or commits younger than the push wait, stay healthy: the sitting already waited that long. Older drift fails the row, and a leftover refused-push log names the reason.
tracker_show_json
One issue as JSON from the tracker library. Same card as vissue show --json.
tracker_state
The tracker row from vissue identity: version, the root and prefix it resolved, and where the root came from. A root that is relative, missing, or holds no prefix directory fails the row: tickets filed there are invisible to every other seat. When the root is a git checkout with an upstream, the row also names how many commits origin lacks.
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).
under_a_runner
Whether this process runs under an agent runner: the environment carries a runner’s conversation, or a process above it is a runner, one whose server left a seat record or one the runners file names. Consent is the person’s, so the verbs that grant it refuse here.
utc_at
secs after the epoch, RFC 3339 UTC to the second, as the pack writes.
verdict_for
The verdict the rules give a command line: the first deny wins, then the first ask, else none, each tried on the whole line and on every command in it. Returns the rule that fired.
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 any *_SESSION_ID the runner stamped, 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.
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, and on a PostToolUse that reaches WORK_NUDGE_EVERY say what to record: a note, a lesson or a deed on the issue it holds, or an issue to open when it holds none. A subagent is left to its brief.
write_persona
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. Every persona is owed one unscoped inbound trust row; --about on a later trust row only adds weight, it does not replace that floor.
write_playbook
POST one playbook. A playbook of the same name already in the pack is superseded, so a rewrite moves the recipe without leaving the old body live.
write_prediction
POST one forecast. expect is an option name or {option: share}.
write_rule
POST one rule.
write_trust
POST one trust row.
write_trust_record
write_trust carrying the voter’s record on the row.

Type Aliases§

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