Operations

Last verified against the code: 2026-11-14 (0.10.0)

Everist runs on one machine, as the person. There is nothing to deploy and no secret anywhere.

Files on disk

Path What Written by
~/.everist/memory.db The store (SQLite): episodes, sessions, lessons, predictions ingest, recall (touches), sleep, serve (remember)
~/.everist/lessons.jsonl The wire format: one lesson per line sleep
~/.everist/morning.md Last night's report sleep
~/.claude/projects/<project>/*.jsonl The raw stream: Claude Code's transcripts (read only) Claude Code
~/.claude/projects/<project>/memory/om-<id>.md One rendered lesson sleep (render)
~/.claude/projects/<project>/memory/MEMORY.md The index Claude Code loads; Everist owns one marked section sleep (render), Claude Code
~/.claude/projects/<project>/memory/written.json, vetoed.json What render wrote; what the owner vetoed sleep (render)

Back up ~/.everist to keep the memory; the raw stream is Claude Code's own and can be re-read at any time (everist ingest after deleting memory.db rebuilds everything except notes, touches and vetoes).

Configuration

Variable Default What it does
EVERIST_HOME ~/.everist Where the store, lessons.jsonl and morning.md live
CLAUDE_PROJECTS_DIR ~/.claude/projects Where transcripts are read and memory folders written
EVERIST_LLM 1 0 (or false, off) disables the local model
EVERIST_LLM_URL the first of localhost:1234/v1 (LM Studio) and localhost:11434/v1 (Ollama) that answers, probed once per process with a one-second timeout The OpenAI-compatible endpoint
EVERIST_LLM_KEY unset A bearer token sent by everist experiment to a hosted model (the frontier replication, goal A4); never stored by Everist
EVERIST_LLM_MODEL first listed The model id; otherwise the first in GET /models
EVERIST_LLM_TIMEOUT 120 Seconds per completion
EVERIST_UPSTREAM the local model server that answers (as EVERIST_LLM_URL) Where everist proxy forwards OpenAI-compatible requests, e.g. https://api.openai.com/v1
EVERIST_ANTHROPIC_UPSTREAM https://api.anthropic.com Where the proxy forwards /v1/messages
EVERIST_PROXY_TIMEOUT 600 Seconds per proxied request
EVERIST_PROXY_MEMORY moment Where the proxy puts the memory: moment (only a lesson the message meets, plus the end-of-turn reminder; paper §7.3), first (the whole memory as its own system message before the app's, one cached prefix for every app) or last (after the app's system prompt)
EVERIST_PROXY_LOG unset Any value: the proxy logs each request to stderr
EVERIST_SHARE_DIR unset, then ~/.everist/share-target A folder or a commons URL every sleep syncs with; the target last synced by hand is remembered in share-target
EVERIST_COMMONS_TOKEN ~/.everist/commons-token The bearer token the commons wants until launch
CODEX_HOME ~/.codex Where Codex CLI keeps sessions/, read by ingest
GEMINI_HOME ~/.gemini Where Gemini CLI keeps tmp/ (saved chats, checkpoints), read by ingest
EVERIST_HOLDOUT 0.5 Share of sessions whose reminders are logged but not shown (the experiment)
EVERIST_EMBED auto: the first Ollama model with "embed" in its name, else hashed hash keeps hashed words; or an Ollama model name
EVERIST_EMBED_URL http://localhost:11434 The Ollama server for embeddings
EVERIST_EMBED_TIMEOUT 60 Seconds per embedding batch

The local model

Any OpenAI-compatible chat server. LM Studio is the default because it listens on port 1234 with no setup. The model is asked to write a session gist (300 tokens) per ingested session and a lesson (80 tokens) per new lesson, with temperature 0.2. Reachability is checked once per process with a two-second timeout; a server that is down costs two seconds and nothing else.

This machine (AMD Ryzen AI MAX+ 395, Radeon 8060S, 128 GB unified memory) runs mid-size local models comfortably. Ollama 0.40.8 is installed under ~/.local/ollama (no sudo) and runs as a user service (~/.config/systemd/user/ollama.service, systemctl --user status ollama, started at boot through loginctl enable-linger), with hf.co/unsloth/Qwen3-30B-A3B-Instruct-2507-GGUF:Q4_K_M pulled for sleep (Ollama's own qwen3:30b-a3b-instruct-2507-q4_K_M tag is the same model): a mixture-of-experts instruct model (no thinking) that is fast on this hardware and only needs to summarize and to write one careful sentence. ~/.local/ollama/bin/ollama ps shows whether a run used the GPU.

For embeddings (0.2.0), qwen3-embedding:0.6b is pulled (640 MB; curl localhost:11434/api/pull -d '{"model":"qwen3-embedding:0.6b"}' if the ollama binary is not on the PATH). Ingest embeds one batch per transcript; a sleep that switches spaces embeds every memory again, about a second for the owner's store.

The commons

/commons/ on the same Worker (src/commons.js), stored in the KV namespace COMMONS (ff0b3287315c467aa4b5b12ac8d17722, bound in wrangler.jsonc). The secret COMMONS_TOKEN gates reads and writes until launch; the owner's copy is ~/.everist/commons-token (mode 600; never in a repository). Rotate it with npx wrangler secret put COMMONS_TOKEN --name everist and copy the new value to every machine. This machine syncs there every sleep (~/.everist/share-target); its origin is everist share whoami. Inspect with curl -H "authorization: Bearer $(cat ~/.everist/commons-token)" https://everist.acific.com/commons/index.

Releasing

A release is done only when uv run python scripts/release-check.py passes every line (AGENTS.md rule 17). The order: bump VERSION and pyproject.toml, CHANGELOG and MIGRATIONS entries, docs (every "last verified" header, Appendix A, README, home page, ROADMAP's where we left off), tests and npm test, uv tool install --reinstall -q ., uv run python scripts/live-snapshot.py, npm run deploy, commit and push, the handbook log and the memory notes, then the release check.

The installer

npm run build builds a wheel from the checkout (uv build), puts it and install.sh (its SHA-256 written in) in dist/install/; the Worker serves /install/ only with the commons token. everist share invite prints the line. /version.json (public) says what is deployed.

The site: everist.acific.com

A Cloudflare Worker named everist serving dist/ as static assets through the ASSETS binding (wrangler.jsonc: assets.directory is dist, run_worker_first so the gate sees every request, the custom domain everist.acific.com on the acific.com zone, workers_dev on). npm run deploy builds and deploys; it needs npx wrangler login once on the machine. The pre-launch gate is on when the GATE_PASSWORD secret is set GATE_LIMIT: optional rate-limit binding ([[ratelimits]], 10 per 60 s) that counts the gate's password tries per address across Cloudflare. Not set: each Worker instance counts on its own (10 wrong tries in 10 minutes from one address get a 429). (npx wrangler secret put GATE_PASSWORD; the shared password from the handbook) and off otherwise, so local npm run dev is open. It is off: the secret was deleted on 2026-11-09 and the whole site is public; put the secret back to close it again. Every response carries the security headers of SECURITY.md, set in src/worker.js; /.well-known/security.txt is served without the password. /live/ shows the store as of the last uv run python scripts/live-snapshot.py (it copies the store to a temporary home, adds one repeated error and one correction, runs the real sleep there with the local model, and writes site/live/snapshot.json; run it before a deploy when the page should show today). The page is public and the store holds every session on the machine: list what must stay off the page in ~/.everist/snapshot-private.txt (words and phrases, one a line, # for a comment; never in the repository). Every memory that names one is left out with the lessons that quote it, the commands run on the rest, and the snapshot is not written if a listed word still shows. Read the snapshot before deploying it. Assets are cached four hours at the edge: bump V in scripts/build-site.mjs when a file under site/assets/ changes. The site's address is everist.acific.com; remem.acific.com and open.acific.com (the addresses until 2026-11-14 and 2026-11-13) redirect pages there and still answer /commons/, /install/ and /version.json. The okay loader is no longer part of the site (removed 2026-11-13 with the Vacuum design; okaydesign's consumers.json may still list this repository).

This machine, as left on 2026-10-24

0.2.0 is installed (uv tool install --reinstall . from the checkout; the everist on the PATH is that install, not the checkout, so reinstall after every change or the cron runs old code). Embeddings come from qwen3-embedding:0.6b. The store after the 0.2.0 sleep: 23 memories, 3 lessons (two themes and one single correction), 3 open predictions; the store from before is at ~/.everist/memory.db.before-0.2.0.

As left on 2026-10-22

The owner's Linux box (amd-halo): the hook, the MCP server and the 4 am cron are wired in; Ollama runs as a user service with the instruct model above; wrangler is logged in as the owner (npx wrangler whoami), so npm run deploy works; the GATE_PASSWORD secret is deleted (the site is public since 2026-11-09); Dependabot alerts and security updates are on for the repository. The store holds the first full run (11 memories, no lessons yet); ~/.everist/morning.md is what sleep last wrote.

The nightly job

0 4 * * * everist sleep >/dev/null 2>&1

Sleep runs in well under a second without a model on hundreds of episodes; with a model it takes as long as the model needs per new lesson. It is safe to run twice. The report is in morning.md either way.

The hook

everist ingest --quiet on Claude Code's SessionEnd (everist hook prints the JSON). Ingest with a model takes one completion per session; without one it is instant. A session that is still open is re-read on its next end because its mtime changed.

everist prime on UserPromptSubmit (0.2.0) reads the hook's JSON on stdin and prints the lessons the prompt bears on, which Claude Code adds to the prompt's context. It embeds one text (tens of milliseconds with Ollama warm; the embedding timeout is three seconds here) and scores every lesson. Shown lessons are remembered per session in ~/.everist/primed/<session>.json; every prime is appended to ~/.everist/primed.jsonl. Any failure prints nothing and exits 0. Since 0.2.1 the same command answers Stop (prints {"decision": "block", "reason": …} when the reply ends in a hand-back and a correction lesson bears on it; nothing when stop_hook_active) and PreToolUse (prints {"hookSpecificOutput": {"hookEventName": "PreToolUse", "additionalContext": …}}). EVERIST_HOLDOUT (default 0.5) is the share of sessions whose primes are logged with "shown": false and not shown. Wired on the owner's machine since 2026-10-24 by everist setup (backup: ~/.claude/settings.json.before-everist).

Monitoring

everist status is the dashboard: counts, the model found, what to run next. The morning report's first line has the trend; comparing predictions confirmed with failed over weeks is the system's own fitness signal (paper §7.3).

Troubleshooting

Problem Where to look
Ingest reads nothing everist paths; ls $CLAUDE_PROJECTS_DIR/*/*.jsonl
A lesson keeps coming back after deleting it It was not written by render (no everist- prefix) or vetoed.json was removed
The site does not resolve from this machine right after the domain was attached The local resolver (and the router's) cached the miss from before the record existed; Cloudflare's own resolvers answer. Wait for the negative TTL, flush with resolvectl flush-caches, or test with curl --resolve everist.acific.com:443:<edge ip>
memory.db is locked Two commands at once (cron sleep during a hook ingest); SQLite waits five seconds by default, then fails; rerun
A rendered file has the wrong project Episodes carry the cwd of their session; sessions started from ~ render into ~'s project
The model times out Raise EVERIST_LLM_TIMEOUT or load a smaller model; or --no-llm