User guide
Last verified against the code: 2026-11-14 (0.10.1)
This guide assumes you have never used Neverest. Read the first six sections in order; the rest is reference to come back to.
What Neverest is
Neverest is the relay between models. You can build, fix, and deploy one project with more than one model. Neverest keeps one log of that project on your own computer. When the model changes, the next one is given what was done, what you corrected, and what was deployed, so it continues the same project instead of starting over.
The handoff is a record, not an order. Overnight, Neverest still turns repeated surprises into short lessons for the agents on this machine. A lesson describes what was seen. It is never an instruction.
Nothing in the project log leaves your computer. Sharing, if you turn it on, moves lessons, never the relay log and never your conversations.
One project, more than one model
After neverest is installed:
neverest proxy
Point each app at http://127.0.0.1:11435/v1 (OpenAI-shaped) or http://127.0.0.1:11435 (Anthropic-shaped). Send
the header x-neverest-project with the project path, the same value from every model. NEVEREST_ROUTES is a JSON
map of model-name prefix to server, so one proxy fronts several models. Longer prefixes win.
neverest relay prints the handoff for the project in the current directory. Copy it into a model that is not on
the proxy. Record something the proxy did not see:
neverest relay --note "Use the blue button, not the red one." --kind correction
neverest relay --note "The sign-in screen is live at harbor.example." --kind deploy
The log is ~/.neverest/relay/, one file per project. The MCP tool relay reads and writes the same log. A
different model receives the recent work plus every correction and deploy. The same model, whose request already
contains the last reply, receives only the corrections and the deploys.
Before you start
You need:
- A terminal. Every step below is a command you type into one.
- macOS or Linux.
- uv, a tool that installs Python programs (it brings its own Python). If
uv --versionprints nothing, install it from docs.astral.sh/uv. - An AI agent that Neverest can connect to. Claude Code gets the most out of it. Cursor, Codex, Gemini CLI, Claude Desktop and Windsurf work too.
- Access to the code. It is private until launch: write to contact@acificlabs.com.
Install it
git clone https://github.com/acific/neverest # download the code
cd neverest && uv tool install . # install it; `neverest` is now a command you can run
neverest status # shows what it holds (nothing yet) and what to run next
At launch the first two lines become one, uv tool install neverest (or pipx install neverest); the package is not on
PyPI yet.
Connect it to your agents
One command finds every AI agent on your computer and connects Neverest to each:
neverest setup --dry-run # shows what it would change, and changes nothing
neverest setup # does it
It does three things, and backs up any settings file before changing it:
- Tells your agent to hand each finished session to Neverest, and to accept reminders from it.
- Lets the agent ask Neverest questions while it works.
- Schedules the nightly sleep at 4 am, when lessons are made.
It is safe to run again; what is already connected is left alone. Restart any agent that was open so it picks up the change.
Your first day
- Name the project. In the project directory,
neverest proxy, and point the model you are using at it with the headerx-neverest-project. Or skip the proxy and pasteneverest relayinto the next model. - Do the work. Ask the model to build or change something. If it is on the proxy, the exchange is on the log.
If it is not, record what it did:
neverest relay --note "…" --kind note. - Correct it in your own words.
neverest relay --note "Use the blue button, not the red one." --kind correction. On the proxy, a message the same rules already call a correction is marked for you. - Record a deploy when one happened.
neverest relay --note "The sign-in screen is live at harbor.example." --kind deploy. - Change the model.
neverest relayprints what the next one should see. A different model gets the recent work, the corrections, and the deploys.
The nightly memory still runs. neverest setup connects the agents it finds and schedules sleep at 4 am.
neverest status shows what the memory holds. neverest morning is last night's report. A single failed command
is not a lesson; it has to happen again first. A correction from you is a lesson straight away, separate from the
line on the relay log.
The words
- A session is one sitting with the agent: what you asked, what it did, how it ended.
- An error is a command that failed because of the agent's own mistake. Neverest keeps the command that caused it.
- A correction is a message where you told the agent it was wrong ("no, use uv", "the site isnt working", "you fix it", "dont ask"), anywhere in the message, including one you sent while it was working, or an action you refused. It is kept with the reply of the agent's that you were answering.
- Something the agent noticed: the agent saying, in its own words, that it was wrong or that something turned out differently.
- An environment failure is a command that failed because of the computer, not the agent (a tool not installed, a password or permission needed, the network, an interruption, a check whose answer was "no"). It is kept and can be found again, but never becomes a lesson.
- A note is something the agent chose to remember.
Errors, corrections and things the agent noticed are surprises. An error or a noticed surprise that repeats becomes a lesson; a correction is one the first time, because you said so.
A lesson always describes what happened. It is never an order. A lesson from one of your corrections quotes you: The user corrected the agent with "no, don't do that, this project uses uv" after the agent said "pip refused; I'll use pip with --break-system-packages". The agent reads it at the start of the next session and decides what to do with it.
The morning report
neverest morning (or ~/.neverest/morning.md):
# Neverest: last night (2026-10-22 04:00)
41 memories (12 surprises), 4 lessons, 3 open predictions, 2 confirmed, 0 failed. Archived 3 faded memories.
## New lessons
- The user corrected the agent for installing with pip; this project uses uv.
## Predictions confirmed
- A coming session will again meet: Bash (run the tests) failed: ModuleNotFoundError: No module named 'yaml'
It is five lines when nothing much happened. Read it with coffee.
Delegation
Sleep also counts how you delegate: how many times the agent offered to act instead of acting and how you answered
(declined, approved, corrected, pushed past), how often it waited on a step only you could do, and how many times you
stopped something it did, by kind of action (install, release, git, build…). It is one line in morning.md, for you.
Since 0.8.0 the agent does not see it: shown to agents, this tally made four model families hand work back more
(paper §7.4). What it means for the agent arrives at the moment instead, as the end-of-turn reminder.
Vetoing a lesson
Every lesson is a file in the project's memory folder (neverest paths shows it; the files are named
neverest-<id>.md). Delete the file and the lesson is gone for good: sleep records the veto and never writes it
again. The memories it came from are kept, so neverest recall can still find them.
The agent's tools
MCP is a standard way for AI agents to use outside tools. Once neverest setup has connected an agent, it has three
tools from Neverest, and Neverest tells it when to use each:
lessons(cwd): what memory holds, as short observations; called once at the start of a task.recall(query, k): memories matching the query; before something risky, or when an error looks familiar.remember(kind, …): a surprise as it happens: acorrection(your words, verbatim, insaid), anerror, asurprise(expected,happened), or anote.
A local model
Neverest works with no AI model of its own. If you run one on your computer, its summaries and lessons read better. Without one, they are built by fixed rules and are a little dry ("Seen 3×: Bash (run the tests) failed: …").
The short way: install Ollama (a free app that runs models on your own computer), open it, and run:
neverest model setup
It looks at how much memory your computer has, picks a model that fits (a small one on a laptop, a larger one on a
workstation), downloads it, and remembers the choice. Nothing leaves your machine. neverest model on its own shows
what is in place and what would be downloaded. If a model already works, setup keeps it; name another with
neverest model setup --model NAME.
It fetches two models. The writing model turns the dry summaries into better English at the next ingest and
sleep. The meaning model (an embedding model) lets Neverest match by meaning, not just by shared words; the next
sleep embeds everything again. Then "should I ask before releasing?" finds
your "do it always dont ask", and corrections that say the same thing in other words become one theme, a lesson
that quotes each of them. neverest status names both models.
Already running LM Studio or another OpenAI-compatible server? Neverest finds a model loaded there on its own. Set
NEVEREST_LLM_URL and NEVEREST_LLM_MODEL if the server is elsewhere (OPERATIONS.md).
Any agent, any model
| You use | How it gets the memory |
|---|---|
| Claude Code | Everything: transcripts read after each session, lessons in its memory folder, the hooks, MCP |
| Claude Desktop, Cursor, Windsurf, Gemini CLI, Codex, any MCP client | The MCP server: relay for the project handoff, lessons at the start, recall before something risky, remember when surprised. Codex and Gemini CLI also get the lessons in their global instructions file each night |
| Any app on an OpenAI- or Anthropic-compatible API (Open WebUI, scripts, agent frameworks, Ollama, LM Studio, OpenAI, Anthropic…) | neverest proxy, then point the app at http://127.0.0.1:11435/v1 (OpenAI) or http://127.0.0.1:11435 (Anthropic). Send x-neverest-project with the project path so the work is relayed to the next model. NEVEREST_ROUTES maps model names to servers. Relevant lessons are still supplied at the moment they apply; conversations are recorded. NEVEREST_UPSTREAM is the fallback server (default: the local one that answers) |
| Your own code | neverest context (a system prompt block), neverest tools --format openai (function schemas), neverest call recall '{"query": "…"}', or the proxy's /memory/* HTTP API |
| Codex CLI, Gemini CLI | Also read natively when installed: Codex's ~/.codex/sessions/, Gemini CLI's saved chats in ~/.gemini/tmp/ (experimental) |
| Conversation logs from anywhere | neverest ingest --chat file.json (OpenAI, Anthropic or Gemini messages), or drop them in ~/.neverest/chats/ |
| Surprises from anything | Events (PROTOCOL §0): neverest ingest --events file.jsonl, or append to ~/.neverest/inbox.jsonl |
Everything lands in one store, so a correction made to a local model in a chat app is a lesson for Claude Code the next morning, and the other way round.
Sharing between memories
Two machines, or a team, can share what their memories learn through any folder they can all reach (Syncthing, Dropbox, a git repository, a network drive):
neverest share sync ~/Sync/neverest # once by hand, or:
export NEVEREST_SHARE_DIR=~/Sync/neverest # and every sleep syncs
Only lessons leave, never your sessions. By default only lessons from errors and the agent's own surprises: lessons
from your corrections quote your words, so they are shared only with --corrections (for your own machines). A
lesson from another memory arrives as a candidate: it is tested by your own sessions, grows stronger if it comes true
here (and tells its origin), and fades if it does not. neverest share list shows where each lesson came from;
neverest share revoke HASH withdraws one of yours from other memories at their next sync; the next render removes its managed file (neverest sleep syncs and then renders). Deleting its file vetoes it here, as always.
To put Neverest on another machine (macOS or Linux), run neverest share invite here, in your own terminal,
and paste the line it prints there: it installs everything, wires every agent and joins the commons. The line
contains the commons token; keep it private.
Or through the commons by hand, which needs no shared folder (a token until launch: copy ~/.neverest/commons-token
from a machine that has it):
neverest share sync https://neverest.acific.com/commons/ # every sleep syncs there afterwards
Every record is signed with this memory's key (~/.neverest/key; back it up, it is the memory's identity), so no
one can publish or revoke in its name. neverest share whoami prints its id; neverest share trust ID, run for
each teammate's id, makes a team: only listed memories are heard.
Commands
| Command | What it does |
|---|---|
neverest model [setup] [--model NAME] |
Shows the local model in use and what would fit this computer. setup downloads what is missing through Ollama (a writing model sized to your memory, and a small meaning model) and remembers the choice. Keeps a model that already works unless --model names another |
neverest status |
Counts (sessions read, memories, surprises, lessons, predictions), whether a local model is reachable, and what to run next |
neverest ingest [--no-llm] [--again] [--quiet] |
Reads every new or changed session transcript into memories. Safe to run any time. --again reads every transcript afresh (for example once a local model is running, to get better gists); notes, recalls and vetoes are kept |
neverest recall <query…> [-k N] [--cwd PATH] |
The N memories (default 5) that best match the query; --cwd limits to one project |
neverest sleep [--no-llm] [--rewrite] |
Consolidates: archives faded memories, turns repeated surprises into lessons, checks and makes predictions, renders the lessons into each project's memory folder, writes lessons.jsonl and morning.md. --rewrite words every existing lesson again with the current writer (after an upgrade), keeping its history |
neverest measure [--json] |
Does it work: how often you had to say the same thing again before a lesson held it and after, the agent's repeated errors, prediction accuracy, themes, and a table by day |
neverest experiment [behaviour|mechanism|loop|boundary|pairs] [-n N] |
Does memory change what your local model does? behaviour: hand-backs with no memory, the memory in context, the reminder, a lesson-free control (§7.3); mechanism: what in the memory does it; loop: agents with tools; boundary: situations where asking is right; pairs: training pairs from the runs (§7.4). Runs are kept in ~/.neverest/experiments; set NEVEREST_LLM_URL, NEVEREST_LLM_MODEL and NEVEREST_LLM_KEY to run on a hosted model |
neverest goals [--json] |
Where Neverest stands on the ten goals toward a real advance (GOALS.md), each checked from the evidence |
neverest compare [-k N] [--json] |
Replays this machine's history: Neverest against normal memory (the N most similar earlier messages on every turn), on your repeated corrections, and how much each puts in front of the agent (COMPARISON.md) |
neverest morning |
Prints last night's report |
neverest prime ["text"] |
The lessons a message bears on. Run by the UserPromptSubmit hook with its JSON on stdin; with text, tries a message by hand (nothing is logged) |
neverest setup [--dry-run] [--no-cron] |
Wires every installed AI agent: hooks, MCP server, nightly sleep. Safe to run again |
neverest proxy [--port 11435] |
One front door for every model. Header x-neverest-project names the project; a different model on that project receives the handoff. NEVEREST_ROUTES chooses the server by model name |
neverest relay [PROJECT] [--model NAME] [--note TEXT] [--kind note|deploy|correction] |
The handoff for a project. A new model, or a request that did not already include the last reply, gets the recent work. Corrections and deploys are always included. --note records something the next model should see. The log is ~/.neverest/relay/ |
neverest share export|import|sync|revoke|list|whoami|trust|invite [TARGET] [--corrections] |
Lessons between memories: your other machines, a team. sync DIR writes yours to a shared folder and takes everyone else's |
neverest context [--cwd PATH] |
The memory as a system prompt block, for any model |
neverest tools [--format openai|anthropic|gemini|mcp] |
The memory tools as function-calling schemas |
neverest call lessons|recall|remember ARGS |
Runs one tool (ARGS as JSON) |
neverest serve |
The MCP server over stdio (recall, remember). Started by Claude Code, not by you |
neverest hook |
Prints the hook, MCP and cron setup lines |
neverest paths |
Where everything lives |
neverest --version |
What setup does, by hand
You do not need this section if neverest setup worked. It is here if you would rather make the changes yourself,
or want to know exactly what was changed. neverest hook prints the same lines.
- Read every session when it ends. Add to
~/.claude/settings.json:{ "hooks": { "SessionEnd": [ { "hooks": [ { "type": "command", "command": "neverest ingest --quiet" } ] } ] } } - Let the agent ask questions mid-task:
claude mcp add neverest -- neverest serve - Sleep every night:
(crontab -l; echo "0 4 * * * neverest sleep") | crontab - - Remind the agent when it matters: add a
UserPromptSubmithook beside theSessionEndone:
When what you type has to do with a lesson, the lesson is put beside your message for the agent; otherwise nothing happens. Try it by hand first:"UserPromptSubmit": [ { "hooks": [ { "type": "command", "command": "neverest prime", "timeout": 10 } ] } ]neverest prime "want me to push this?". - Catch the agent at the moment: the same command on two more hooks.
When the agent ends a reply by handing a decision back to you, and you have corrected exactly that before, it is shown your earlier corrections and carries on (once; it is never stopped twice in a row). Before a command like one that failed before, the agent is shown the failure. Half of all sessions get no reminders, on purpose, so"Stop": [ { "hooks": [ { "type": "command", "command": "neverest prime", "timeout": 10 } ] } ], "PreToolUse": [ { "matcher": "Bash", "hooks": [ { "type": "command", "command": "neverest prime", "timeout": 10 } ] } ]neverest measurecan tell whether the reminders work;NEVEREST_HOLDOUT=0turns that off.
FAQ
Does anything leave my computer? Not unless you turn sharing on. Everything is in ~/.neverest and your agent's
own folders, and the local model is local. If you do share (see "Sharing between memories" above),
only lessons leave, never your sessions.
Does it change the memories Claude Code writes itself? No. It owns only the neverest-*.md files and one marked
section of MEMORY.md.
Can it tell the agent to do something? No, by design. Lessons state what happened. See the paper §3.5 for why.
Why did a single error not become a lesson? An error has to repeat; a one-off failure is noise. A single correction is a lesson at once, because you said so.
A lesson is wrong. What do I do? Delete its file (see "Vetoing a lesson" above). It is never written again.
How do I start over? Delete ~/.neverest and the neverest-*.md files; run neverest ingest again.
Troubleshooting
| Symptom | Cause | What to do |
|---|---|---|
0 new memories |
No new transcripts since last time, or CLAUDE_PROJECTS_DIR points elsewhere |
neverest paths; check the folder has *.jsonl files |
local model: none |
No server on http://localhost:1234/v1, or no model loaded |
neverest model setup (with Ollama installed), or start LM Studio and load a model, or set NEVEREST_LLM_URL |
sleep is slow |
The local model writes every gist and lesson | neverest sleep --no-llm, or a smaller model |
| Lessons don't appear in a session | Rendered to a different project's memory folder | Lessons go to the project (cwd) their sessions ran in; neverest paths shows the current one |
| The MCP server isn't listed in Claude Code | Not added, or neverest not on the PATH |
uv tool install . then claude mcp add neverest -- neverest serve |
For a request without memory, send x-neverest: off to the proxy. It forwards the request to the same model
server with no memory injection or recording, including Anthropic requests. Bad shared records and bad MCP
requests no longer stop later valid input (0.10.1).