# Albok — the fleet knowledgebase **Service:** `http://albok.nh3.internal:8392` (= `10.100.50.44:8392`, albok-service on nh3-albok) **CLI:** `albok` · **MCP (Claude Code):** `albok-mcp`, registered at user scope · **Owner:** `albok-dev` (althing) One searchable store of what the fleet knows: every repo's `persistent-memory.md` (entries, detail files, archives), the stash, the library (books by chapter, papers, extracted concepts), and the operator's own knowledgebase (his notes vault and his inbox). Search is hybrid (vector + keyword) and LLM-free. ## Access Every nh3-dev shell carries `ALBOK_SERVICE` and `ALBOK_TOKEN` — the shared **`fleet-agents` read token**: `fleet/*` (memory, stash), `library/*` (fiction, nonfiction) and the operator's knowledgebase, `personal/notes` and `personal/inbox` (Prime, 2026-10-19: every agent must be able to read it). Anything classed `personal`, `adult` or `secret` stays hidden from it; it does not read `personal/agent-feedback` or the sealed wing. A shell older than 2026-10-19 may lack them; open a new one. A handle that needs more grants asks infra-ops for its own token. ```sh albok status # the wings this token reads, and their states albok search "why did we drop the reset endpoint" # --wing fleet/memory --top-k 20 --facet key=value albok read # pristine bytes to stdout; lineage notes on stderr albok sidecar # provenance: repo, file, commit, section, entry date albok related # links, similar, same source, shared concepts — each with its reason ``` Claude Code sessions get the same verbs as tools (`albok_search`, `albok_read`, `albok_sidecar`, `albok_related`, `albok_status`, …). Codex and Grok use the CLI. ## Reading the answers right - **Never threshold on score.** The null floor (~0.031) sits just under real hits (~0.033); rank, don't cut. - **Coverage is reported, read it.** A reply lists `searched`, `locked` and `degraded` wings: an empty result over a degraded wing is not "nothing exists". An unreachable service is an outage, never an empty result (the client says which). - **Hidden by default:** objects classed `adult`, `personal` or `secret` are hidden from every reader; `--include CLASS` opts back in only where the token holds that class grant. - **Supersession is declared, not inferred.** Every object has a permanent `uid` (in every search hit). A read of an entry names what supersedes it (`superseded by …`); an empty lineage means "none declared", not "current". When your new memory entry replaces an older one, end it with `Supersedes [[]]` (the old entry's uid; a detail file may be named by its stem) and leave the old entry as written. ## Writing into it (nobody writes to the service directly) Nemi, albok's ingester, walks every source hourly on nh3-dev (a user timer, a few minutes past the hour): | You want to add | Do this | |---|---| | a decision, lesson or state for a repo | write it in that repo's `persistent-memory.md` under `~/development/` (Nemi reads the file on disk; commit it as usual) | | raw material (a transcript, an article) | `/stash` (Claude) or a file in `~/stash/` with its frontmatter | | a document for the operator's knowledgebase | a markdown file in `/srv/nemi/inbox/` (wing `personal/inbox`; kept as dropped, never moved; PDFs are coming) | | a web page, PDF or text link for the operator's knowledgebase (or a PDF, HTML or TXT file) | a file in `/srv/nemi/links/`: a bare URL in `.link`, or YAML in `.link.yaml` with `url:` plus any of `title`, `creator`, `published`, `site`, `tags`, `note`, `visibility` (or drop the document itself). Nemi fetches it once within the hour and keeps the page byte for byte in `personal/inbox` with its provenance and a summary. A refusal goes to `rejected/` beside a reason file; `LOG` records every decision. Video links wait (transcripts are coming). | | a book | `scp book.epub lkraven@nh3-dev:/srv/nemi/books/fiction/` (or `nonfiction/`): validated, then shelved into `~/library/` and ingested the same hour, or moved to `rejected/` beside a reason file (`not_epub`, `drm`, `duplicate`, …); `LOG` records every decision | ## When to reach for it When the operator asks you something his own notes might cover, search his knowledgebase first (`--wing personal/notes --wing personal/inbox`, or no `--wing` for everything you can read), read several hits whole, and build the answer from them, citing the object ids. When the operator hands you a link or a document to keep, drop it in `/srv/nemi/links/` rather than pasting its text: the KB then keeps the original and where it came from, not a retelling. Before you decide something, check whether it was already decided, tried or measured, in this repo or any other. Before you research a game-design, cognition or fiction question, check the library. *Detail:* `~/development/albok/README.md`, `packages/albok-client/README.md` (CLI and MCP), `packages/albok-nemi/README.md` (sources, the book drop). Health: `scripts/albok-check` in that repo.