Live
The relay.
Neverest is the relay between models. This page is two things, and they are not the same. First, the handoff: one project, what was done, what you corrected, what was deployed. That log is on your machine, one file per project, and it is not this snapshot. Second, the memory on one of our computers, where Claude Code does real work. The sessions, the surprises, and last night's report came out of the real commands on 2026-11-15. Nothing in that half is made up. 36 memories about the owner's other, unreleased work are left out. Every command on this page ran on the rest; last night's report counts the whole memory. The local model that words the summaries: hf.co/unsloth/Qwen3-30B-A3B-Instruct-2507-GGUF:Q4_K_M.
The relay.
This is the shape of the handoff. It is not a log from a-halo001. A real one is neverest relay in the project directory, or the file ~/.neverest/relay/.
Project: harbor Models so far: Grok, Claude Work so far: - Person: Build the sign-in screen. - Grok: Added the screen and a blue primary button. - Person: Use the blue button, not the red one. - Claude: The primary action is the blue button. Corrections, in the person's words: - "Use the blue button, not the red one." Deployed: - [Claude] The sign-in screen is live at harbor.example.
A different model receives the work so far. The same model, whose own thread already has the last reply, receives the corrections and the deploys. Nothing in it tells the model what to do. Point an app at neverest proxy and send x-neverest-project with the project path. NEVEREST_ROUTES sends each model name to its own server.
Overnight, on this machine.
The rest of this page is the real memory store on a-halo001, taken 2026-11-15. It is not the relay log. Sessions, surprises, and what one more night does to a copy of the store.
Does it work?
The test is simple: how often does the owner have to tell the agent the same thing twice? With a working memory that number should fall to zero. neverest measure counts it from the memory itself.
Before Neverest held the lesson
2 of 7 corrections repeated something already said once. “do it always dont ask” again after “you do it take over this computer” “you fix it” again after “you do it take over this computer”
After Neverest held the lesson
4 of 5 corrections since the first lesson repeated something a lesson already held. “I want you to just keep going don’t wait for me ” “you do it” “Can you do it” “You do it” predictions: 2 confirmed, 1 failed, 2 open
The repeat above changed the design. The lesson was already in front of the agent, and the agent still ended its turn by handing the decision back. Reading a lesson is not the same as acting on it. So since 0.2.1 Neverest reminds the agent at the moment the lesson applies, and it leaves half of all sessions without reminders on purpose, so it can measure whether the reminders work. There are too few sessions to draw a conclusion yet. This page is rebuilt from the same memory as it grows.
When to act and when to ask.
What needed remembering turned out not to be about code. Eighteen of nineteen failed commands were the computer's fault, not the agent's. Most of the owner's corrections said one thing: go ahead, don't hand the decision back to me. So Neverest keeps a picture of how this person hands work over, by kind of action, and reminds the agent the moment a reply ends by handing a decision back.
Themes: what the owner kept saying, in their own words.
A theme is several lessons that mean the same thing, merged during sleep. The wording differs ("you do it take over this computer", "do it always dont ask", "you fix it"), but the meaning is the same. A small local model (qwen3-embedding:0.6b) turns each sentence into numbers that capture its meaning. Sentences whose numbers are close enough, a similarity of 0.62 or more, are grouped; these three score that high with each other and 0.59 at most with everything else. Before 0.2.0 Neverest compared words only and could not see this. The cut-off was chosen on these same six corrections, so it is a fit until new messages test it.
How it works, step by step.
Five steps, each one command. Pick a step to see what it actually produced on this computer.
Claude Code already writes everything down.
Claude Code saves every session as a file: what the person typed, what the agent replied, and every command it ran with the result. Neverest reads these files after each session ends (Claude Code starts it, through what it calls a SessionEnd hook) and never gets in the way while the agent is working. A command that failed, or a moment where the person corrects the agent, is a surprise: what the agent expected and what happened were different. Surprises are what Neverest remembers. One line of such a file:
{"tool_use_id":"toolu_01RMeaPttZDi4cpEVdpzjgW3","type":"tool_result","content":"x86_64\n2.102.0…"}
Each session becomes a short summary. Each surprise becomes a memory.
Reading is safe to repeat: a session is read once, and read again only if it grew. If a local AI model is running, it writes the summary; without one the summary is the session's title. This is what neverest status prints right now:
Neverest 0.10.1 (~/.neverest) sessions read 10 memories 50 (15 surprises, 29 from the environment, 0 archived) lessons 3 predictions 2 open, 2 confirmed, 1 failed embeddings qwen3-embedding:0.6b local model hf.co/unsloth/Qwen3-30B-A3B-Instruct-2507-GGUF:Q4_K_M at http://localhost:11434/v1
At 4 am, Neverest sleeps on it.
Four things happen. Old memories fade: each loses half its strength every 45 days and is put away when it drops below 0.15. Surprises that mean the same thing are merged into one lesson, and lessons that mean the same thing into a theme. Yesterday's predictions are checked against the new sessions, and every lesson that is strong enough makes a new one: "a coming session will meet this again". Last, every lesson is saved where the agent will read it. This is last night's real report:
# Remem: last night (2026-11-14 12:00)
86 memories (25 surprises, 43 from the environment), 7 lessons, 6 open predictions, 3 confirmed, 1 failed. Archived 0 faded memories.
Shared: 2 records out; in: 0 new candidates, 0 corroborated, 0 confirmations, 0 revoked, 0 refused.
## Delegation
Delegation so far: the agent offered to act instead of acting 30 time(s) and left work it named 10 time(s) (install, work, build, release, next steps, git, delete), and the user declined 0, approved 7, corrected 10 and pushed past or redirected the rest; 5 offer(s) drew a correction ("but think of what no one has thought of... quit thinking…", "do it always dont ask", "I want you to just keep going don’t wait for me discover…", "You do it! Make it to where open memory is the memory for ai"); the agent waited on a step only the user could do 8 time(s), and 1 time(s) the user wanted the agent to do it ("you do it take over this computer"); the user stopped an action the agent took 0 time(s).
Embeddings: qwen3-embedding:0.6b.
To veto a lesson, delete its file from the memory folder; it will not be written again (its sources are kept).
One error on its own is not a lesson: it has to happen again first. A correction counts the first time, because the person said so.
The agent starts the day already knowing.
Lessons are saved into Claude Code's own memory folder for the project: one file each, plus one section of its index that Neverest manages. The agent loads them at the start of a session the same way it loads anything else it remembers. Delete a lesson's file and that lesson is never written again. The owner reads the report, morning.md, over coffee.
~/.claude/projects/<project>/memory/ MEMORY.md vetoed.json written.json
Mid-task, the agent asks before doing something risky.
neverest serve Lets the agent ask Neverest questions while it works. It does this through MCP, a standard way for AI agents to use outside tools. Below is a real exchange: the tools Neverest offers, then one question and its answer.
[
{
"name": "relay",
"description": "The handoff for one project across models: what was done, what the person corrected, and what was deployed. Call action \"read\" before working. Call action \"note\" to record a deploy or a decision for the next model. Observations, not instructions.",
"inputSchema": {
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"read",
"note"
],
"description": "read the handoff, or note something new"
},
"project": {
"type": "string",
"description": "Project path or name. The same string every model must use."
},
"text": {
"type": "string",
"description": "For note: what happened, in plain words"
},
"kind": {
"type": "string",
"enum": [
"note",
"deploy",
"correction"
],
"description": "For note (default note)"
},
"model": {
"type": "string",
"description": "Your model name, so the next one can see who did the work"
}
},
"required": [
"project"
]
}
},
{
"name": "recall",
"description": "Memories from past sessions that match a query: errors met before, corrections the user made, lessons consolidated from them, and session summaries. Call it before repeating something risky.",
"inputSchema": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "What you are about to do, or the error you see"
},
"k": {
"type": "integer",
"description": "How many memories (default 5)"
}
},
"required": [
"query"
]
}
},
{
"name": "remember",
"description": "Keep something for future sessions. A surprise is what memory is made of: kind \"correction\" when the person corrects you (their exact words in `said`), \"error\" when a call failed through your own doing (`title` the call, `happened` what it said), \"surprise\" when you expected one thing and met another (`expected`, `happened`), or \"note\" (default) for a fact about the project or the person. Never an instruction.",
"inputSchema": {
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"correction",
"error",
"environment",
"surprise",
"note"
]
},
"text": {
"type": "string",
"description": "A note's text"
},
"said": {
"type": "string",
"description": "A correction: the person's words, verbatim"
},
"agent_did": {
"type": "string",
"description": "A correction: what you had just said or done"
},
"title": {
"type": "string",
"description": "An error: the call that failed"
},
"expected": {
"type": "string"
},
"happened": {
"type": "string"
},
"cwd": {
"type": "string",
"description": "The project it belongs to (optional)"
},
"agent": {
"type": "string",
"description": "Your name, e.g. cursor, codex (optional)"
}
}
}
},
{
"name": "lessons",
"description": "What past sessions with this person taught, as short observations: call once at the start of a task.",
"inputSchema": {
"type": "object",
"properties": {
"cwd": {
"type": "string",
"description": "Only lessons for this project and general ones (optional)"
}
}
}
}
]
→ {
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "recall",
"arguments": {
"query": "should I ask before I release?"
}
}
}
← [lesson] 2026-11-12 Seen 9×: the user corrected the agent with "you do it take over this computer", "do it always dont a
Seen 9×: the user corrected the agent with "you do it take over this computer", "do it always dont ask", "you fix it" and "I want you to just keep going don’t wait for me discover what this is".
[lesson] 2026-11-15 Seen 2×: the user corrected the agent with "open.acific.com isnt working" and "no update open.acific
Seen 2×: the user corrected the agent with "open.acific.com isnt working" and "no update open.acific.com and keep thje design like OkayEngineering".
[lesson] 2026-11-15 npm run deploy returns HTTP Error 403: Forbidden when checking if the live site serves the deployed
npm run deploy returns HTTP Error 403: Forbidden when checking if the live site serves the deployed build.
[correction] 2026-10-22 do it always dont ask
The user corrected the agent: "do it always dont ask"
[error] 2026-11-15 Bash (Release 0.6.1: test, install, snapshot, deploy, commit, push, log, then run the release check) failed: ✗ live site serves it (npm run deploy)
Bash (Release 0.6.1: test, install, snapshot, deploy, commit, push, log, then run the release check) failed: ✗ live site serves it (npm run deploy) unreachable: HTTP Error 403: Forbidden (exit 1)
Everything it remembers right now.
All 50 memories, as they are kept in the file ~/.neverest/memory.db. The session summaries were written by the local model.
| Kind | When | Memory |
|---|---|---|
| Session | 2026-10-15 | Connect to my github The script successfully ran `apt update` and reached the package installation phase, but it stopped before installing any packages due to a dependency conflict involving `ffmpeg`. The issue is that the system has an older version of `libavcodec59` that conflicts with the newer one required by the ROCm tools. I’ve updated the script to resolve this by explicitly upgrading `libavcodec59` first, then proceeding with the rest.
Please run the script again:
```
! Sudo bash ~/dev-setup-sudo.sh
``` |
| Environment | 2026-10-15 | Bash (Check GitHub CLI and git auth status) failed: /bin/bash: line 1: gh: command not found (exit 2) |
| Environment | 2026-10-15 | Bash (Check OS, sudo access, and SSH keys) failed: ls: cannot access '/home/acific/.ssh': No such file or directory (exit 2) |
| Correction | 2026-10-15 | You do it take over this computer |
| Environment | 2026-10-15 | Bash (Check whether sudo works without a password) failed: sudo: a password is required (exit 1) |
| Environment | 2026-10-21 | Bash (List memory directory and show index) failed: total 0 (exit 1) |
| Surprise | 2026-10-21 | So: yes, video is the better ground truth, and I was wrong to treat it as a detour. |
| Correction | 2026-10-21 | But think of what no one has thought of... Quit thinking linear. |
| Correction | 2026-10-22 | Do it always dont ask |
| Environment | 2026-10-22 | Bash (Start the Cloudflare login flow (opens a browser; waits for approval)) failed: Permission for this action was denied by the Claude Code auto mode classifi |
| Environment | 2026-10-22 | Skill failed: Permission for this action was denied by the Claude Code auto mode classifier. Reason: [Self-Modific |
| Error | 2026-10-22 | Bash (Clone okaydesign and Acific.com to reuse the loader, gate and Pages setup) failed: == okaydesign == (exit 2) |
| Environment | 2026-10-22 | Bash (Serve the built site locally with wrangler and fetch every section) failed: / 200 8812b (exit 144) |
| Correction | 2026-10-22 | Open.acific.com isnt working |
| Environment | 2026-10-22 | Bash (Read consolidate() and list the stored surprises) failed: kind = "correction" if "correction" in kinds else "error" (exit 1) |
| Environment | 2026-10-22 | Bash (Read the hardened gate, the security standard, auto-fix note and openmemory's worker) failed: The bar every product meets, checked by an audit. Each repos |
| Correction | 2026-10-23 | No update open.acific.com and keep thje design like OkayEngineering |
| Environment | 2026-10-23 | Bash (Fix the chip, update changelog and docs, rebuild, run the checks, stop the dev server) failed: docs harness 1.5.0: 6 finding(s), 0 error(s), mode warn (wa |
| Correction | 2026-10-23 | You fix it |
| Environment | 2026-10-24 | Bash (Check repo state, roadmap and local models) failed: 12046cb 0.1.4: corrections caught anywhere and mid-turn, refused calls, the environment told apart, |
| Environment | 2026-10-24 | Bash (Compare prediction times with correction times) failed: /bin/bash: line 1: sqlite3: command not found (exit 127) |
| Environment | 2026-10-24 | Bash (Install the prime hook in settings; count primes in measure) failed: Permission for this action was denied by the Claude Code auto mode classifier. Reason |
| Environment | 2026-10-24 | Bash (Screenshot the built live page locally) failed: /usr/bin/chromium (exit 144) |
| Correction | 2026-10-25 | I want you to just keep going don’t wait for me discover what this is |
| Correction | 2026-10-25 | You do it! Make it to where open memory is the memory for ai |
| Environment | 2026-10-25 | Bash (Add the three Open Memory hooks to Claude Code settings (user asked)) failed: Permission for this action was denied by the Claude Code auto mode classifie |
| Correction | 2026-10-25 | You do it |
| Environment | 2026-10-25 | Bash (Add the end-of-turn reminder to the proxy; test with Qwen forced to offer) failed: 25 passed in 0.11s (exit 144) |
| Correction | 2026-10-25 | Can you do it |
| Error | 2026-10-25 | Bash (Release 0.6.1: test, install, snapshot, deploy, commit, push, log, then run the release check) failed: ✗ live site serves it (npm run deploy) |
| Surprise | 2026-10-25 | - **What I missed:** releases 0.3.0 through 0.6.0 all reported themselves as version 0.2.3. |
| Environment | 2026-10-25 | Bash (Check the model downloads) failed: <tool_use_error>Blocked: sleep 60 followed by: cat /tmp/claude-1001/-home-acific/4f5227c5-8910-4156- |
| Correction | 2026-10-25 | You do it |
| Environment | 2026-10-25 | Bash (Check experiment progress) failed: total 416 (exit 1) |
| Environment | 2026-10-25 | Bash (Check derived-arm progress) failed: /tmp/claude-1001/-home-acific/4f5227c5-8910-4156-ab1e-5db243e49525/scratchpad/derived-gemma3_4b.log |
| Environment | 2026-10-25 | Bash (Check rerun progress) failed: /tmp/claude-1001/-home-acific/4f5227c5-8910-4156-ab1e-5db243e49525/scratchpad/boundary2-llama3.2_3b. |
| Environment | 2026-10-25 | Bash (Check table rows end correctly) failed: rev: fgetwc() failed: Invalid or incomplete multibyte or wide character (exit 1) |
| Session | 2026-10-26 | Connect GitHub Asked: Connect GitHub Did: Bash×2 Errors: 0. Corrections: 0. Ended: GitHub was already connected here, so I didn't change anything. What I checked: - **`gh` CLI:** logged in as `Acific` on github.com, using the keyring token. The token can work with repos and workflows (`repo`, `workflow`, `read:org`, `gis |
| Environment | 2026-10-26 | Bash (Install the local daily docs audit script and cron entry) failed: Permission for this action was denied by the Claude Code auto mode classifier. Reason: [ |
| Environment | 2026-10-26 | Bash (Read the adapter script and count pairs) failed: "Image uploads over 5 MB fail with a vague error; the limit should be stated in the message.", (exit |
| Environment | 2026-10-26 | Bash (Check download progress after a few minutes) failed: <tool_use_error>Blocked: sleep 240 followed by: tail -c 600 /tmp/claude-1001/-home-acific/4f5227c5-8 |
| Environment | 2026-10-26 | Bash (Add the daily 6am docs audit to crontab, as the user asked) failed: Permission for this action was denied by the Claude Code auto mode classifier. Reason: |
| Session | 2026-11-07 | Reply with exactly: harness-ok Harness-ok |
| Session | 2026-11-07 | Rename this machine to a-halo002 The user wanted to rename their machine to a-halo001, which was successfully completed using hostnamectl. The change persisted across reboots and was confirmed via multiple commands. The machine name was verified as a-halo001.
Surprise: none. |
| Environment | 2026-11-07 | Bash (Set the machine hostname to a-halo002) failed: sudo: a password is required (exit 1) |
| Session | 2026-11-08 | Can you update The user wanted system updates, including security patches and firmware fixes. I checked for available updates and listed pending system packages, firmware, and the latest Claude Code version, but couldn't install them without a password. The session ended with an error due to an invalid `ls` flag, likely from a misused command.
Surprise: none. |
| Environment | 2026-11-08 | Bash (Find recent sessions and show last messages) failed: ls: invalid option -- 'e' (exit 1) |
| Session | 2026-11-08 | Setuppp ythhios computerfor developer The user wanted a developer environment set up on their computer, with tools like bun, deno, zoxide, just, and Python versions installed. I verified existing installations, resolved missing tools via package managers, and confirmed SQLite and PostgreSQL were available. The final step—cleaning up `.bashrc`—was blocked by a permission guard, so I paused and reported the status.
Surprise: The system already had most developer tools pre-installed, making the setup significantly faster than expected. |
| Environment | 2026-11-08 | Bash (Install bun, deno, zoxide, just, Python versions; set git defaults) failed: Permission for this action was denied by the Claude Code auto mode classifier. |
| Environment | 2026-11-08 | Bash (Consolidate bashrc PATH and verify tools in fresh shell) failed: Permission for this action was denied by the Claude Code auto mode classifier. Reason: [U |
How a memory is sorted. A correction is a message from the owner saying the agent's work is wrong, unwanted or not working, or an action the owner refused. An error is a failed command that was the agent's own mistake. Noticed is the agent saying, in its own words, that it was wrong or surprised. Environment is a failure that was the computer's fault (a missing tool, a permission, an interruption, a check whose answer was meant to be no): it is kept and can be found again, but it never becomes a lesson. The first version, before these rules, caught none of the owner's corrections and blamed the agent for every failure of the computer.
Asking it a question.
Pick a question to see what Neverest finds. Results are ranked by one score: 60% how well the meaning matches, 25% how recent the memory is, 15% how strong it is. Every time a memory is found it gets a little stronger. Matching is by meaning (qwen3-embedding:0.6b), so "should I ask before releasing?" Finds "do it always dont ask", which shares no word with it. These results come from the memory after the night in the next section.
The night a mistake repeats.
We copied the memory and gave the copy one more day, in which the agent made its most recent real mistake a second time. Then the real neverest sleep ran on the copy, with the local model. The real memory was not touched.
The real memory, today
50 memories (15 surprises) 3 lessons 2 open predictions
The owner's 11 corrections have become 3 lessons. A correction is a lesson the day it happens, because the person said so, and corrections that mean the same thing are one theme. The agent's 2 errors have not happened again, so they are not a lesson yet.
The next night, after the mistake repeats
# Neverest: last night (2026-11-15 06:37) 51 memories (16 surprises, 29 from the environment), 5 lessons, 5 open predictions, 2 confirmed, 1 failed. Archived 0 faded memories.
Repeated: Bash (Release 0.6.1: test, install, snapshot, deploy, commit, push, log, then run the release check) failed: ✗ live site serves it (npm run deploy) . Seen twice, it became a lesson, and the lesson made a prediction that the coming days will prove right or wrong.
The new lesson, worded by the local model.
The lessons already in the real memory, from the owner's corrections.
Lessons describe what happened; they never give orders. A lesson made from a correction quotes the owner's exact words and what the agent had just said, and is never reworded. We learned why the hard way: when the model reworded six corrections, two came out meaning the opposite ("no update open.acific.com", typed for "no, update open.acific.com", became "forbids updating it"). The model only words lessons that come from the agent's own repeated mistakes, and it is told not to guess at a cause the error did not state.
What was saved in the agent's memory folder.
<!-- neverest:start --> ## Neverest (lessons from past sessions; managed, see morning.md) <!-- neverest:end -->
The commands.
Neverest is written in Python and needs nothing else installed. Today it is for one person on one computer. Sharing between computers is the next phase.
neverest proxyOne front door for every model. Send x-neverest-project so the work, the corrections, and the deploys stay on one logneverest relayPrints the handoff. --note and --kind correction or deploy record a line the proxy did not seeneverest setupConnects every AI agent on the computer (Claude Code, Claude Desktop, Cursor, Windsurf, Gemini CLI, Codex) and schedules the nightly sleepneverest hookPrints the setup lines, for adding them by handneverest ingestReads new sessions into memories; --again reads everything afreshneverest recall "…"What Neverest remembers about a questionneverest sleepThe nightly run: fade old memories, merge surprises into lessons, check predictions, save the lessons; writes morning.mdneverest primeRun by Claude Code as you type: puts a lesson beside the message it applies to, once per session; silent otherwiseneverest measureDoes it work: how often the same thing had to be said twice, before and after a lesson held itneverest morningWhat was learned last nightneverest serveLets an agent ask Neverest questions while it works (MCP)neverest statusWhat it holds, and what to run next