ljos

ljos

What does this seat do next?

Remember, agree, hand over: memory for a working seat that a person can read on disk.

Model agnostic Harness agnostic CLI + MCP

One seat over five habitats and argv law. It owns none of them. A seat is one agent, or one person, working a tracker. Five habitats answer five questions for it. Cards are what the human froze. The pack keeps what the seat has learned. The deed store records what the work produced. The tracker says what the work is and who agrees, and the claim graph shows who is working on what right now. The judging of shell commands is not a store: ljos-policyd refuses the dangerous ones before they run, seat rules refuse more, and ljos policy -- COMMAND prints the answer for one command. ljos is the one command and the one Model Context Protocol (MCP) server over those habitats. It adds three loops the habitats do not have alone: memory that is reviewed and forgotten on a clock, agreement that weighs voters by who turned out right, and a handover another seat can check and import. Seats on one pack also write to each other with ljos send; the atoms travel in the sealed sync log.

Everything is a file a person can open: Org headings, JSON lines, a content-addressed store, a Cap’n Proto snapshot. No model is required to run any of it, and any model or agent runner that can call a command or an MCP tool can sit in the seat.

image1

Install#

$ cargo binstall --locked ljos packset deedar-cli claimdag-cli vissue-cli vissue-mcp ljos-policyd ljos-consensus
$ packset ensure
$ ljos doctor
$ ljos onboard --harness json

ljos provides ljos and ljos-mcp. packset provides packset and the writer packsetd. packset-embed is the encoder for meaning-based search; without it packsetd matches words only. scripts/install.sh installs the same set and the encoder (--no-embed leaves it out) with checksums and onboards each runner it finds. deedar-cli provides deedar. claimdag-cli provides claimdag. vissue-cli provides vissue, and vissue-mcp the tracker server. ljos-consensus provides ljos-consensus, which ljos consensus runs. ljos-policyd is the command check. Those are the binaries the tutorial calls. Each comes prebuilt from its GitHub release; cargo install takes the same names and builds from source with Rust 1.89 or newer. An older Rust fails on several crates and can install an ljos-policyd older than 0.5.0 without a word; ljos doctor marks that row no and names the fix.

doctor says whether ljos is ready and lists the habitats that need action; doctor --all names each habitat and whether it answers. The seat works with the habitats it has; a missing one is reported, not guessed around. onboard registers the server with an agent runner and installs the sitting protocol as its skill; ljos protocol prints that protocol for any other.

First minute#

$ ljos remember "The lexical default is BM25+. It beat BM25 by two points on turns."
remembered (lesson): The lexical default is BM25+. It beat BM25 by two points on turns.
  id 07be8829, next review 2026-09-26 23:27 +00:00
$ ljos search lexical default
1.0000  3/3 lesson  07be8829... today   The lexical default is BM25+. It beat BM25 by two points on turns.
$ ljos due
0 due; 1 scheduled, next at 2026-09-26T23:27:31.528Z

The tutorial runs all three loops on a scratch tracker in about ten minutes.