In September we had 39 voice calls with Jarvis on the machine we build it on. If the learning loop we shipped on September 30 had been running all month, 37 of those calls would have cost nothing to learn from. The other two would have cost one small model call each.

The learning loop is how Jarvis now remembers you. Tell it once that you are vegan, that your sister’s birthday is in March, or that you like short answers, and it should not need telling again. This post covers what Jarvis keeps, the three steps that decide what gets written, and how the first version, built the same morning, would have cost about a hundred times more.

Two small notebooks

Jarvis keeps two plain Markdown files in your Obsidian vault:

  • USER.md is about you: who you are, the people in your life, what you prefer, how you like your answers, your goals and your plans. A plan is saved with its real date, so “next Friday” still means the right day a month later.
  • MEMORY.md holds Jarvis’ own working notes: facts about your setup, conventions you agreed on, and lessons from the times you corrected it.

Both reach every conversation you have with Jarvis itself, typed or spoken. That includes the realtime voice engine, which until now knew nothing about you at all. You can open both files, read them and change them. An edit you make applies from the next turn, and if you change an entry while Jarvis is reviewing it, your edit wins.

Step one: a free filter

Most of what you say to an assistant is a request: play some music, what is the weather, set a timer. A request says nothing lasting about you, so learning from it should cost nothing.

Before any model sees a conversation, a plain rule-based filter reads what you said. It marks only the sentences in which you talk about yourself (“I work at…”, “my sister…”), state a preference (“I prefer…”, “from now on…”), correct Jarvis (“that’s wrong”, “no, I meant…”) or name a plan, goal or deadline. It understands English, German and Spanish. A conversation without a single marked sentence never reaches a model.

We ran the shipped filter over the user side of every voice call we had in September: 39 calls and 125 things said to Jarvis. It marked 4 of them, in 2 calls.

37 of 39 September calls would have cost nothing to learn from

Each dot is one voice call, in the column of its day. Highlighted: calls with at least one sentence the free filter marked.

Swipe sideways to see the whole chart.

Sep 1Sep 8Sep 15Sep 22Sep 292 calls held something worth keeping37 of 39 calls: no model call
Figure 1. Most calls are one or two sentences long: a request, an answer, done. Source: Personal Jarvis desktop app, voice call log, September 2 to 29, 2026; the shipped filter, signals.py.
Show the data
Call onThings saidMarked
2026-09-0210
2026-09-0230
2026-09-0310
2026-09-0310
2026-09-0360
2026-09-0320
2026-09-0420
2026-09-0590
2026-09-0610
2026-09-0650
2026-09-0620
2026-09-0610
2026-09-0630
2026-09-0670
2026-09-0630
2026-09-0930
2026-09-0930
2026-09-0960
2026-09-0910
2026-09-0960
2026-09-09403
2026-09-1020
2026-09-1010
2026-09-1010
2026-09-1011
2026-09-1010
2026-09-1210
2026-09-1910
2026-09-1910
2026-09-2010
2026-09-2010
2026-09-2110
2026-09-2310
2026-09-2310
2026-09-2310
2026-09-2310
2026-09-2910
2026-09-2910
2026-09-2910

Most of those 125 turns were in German, ten in English and two in Spanish. Our usage is not yours: we talk to Jarvis mostly to drive the app we are building, so we say little about ourselves. If you tell Jarvis more about your life, more of your calls will be marked, and that is the point.

“Remember that” is free as well. Say “remember that my sister’s birthday is on March 12” and Jarvis writes it down on the spot, in your words and with the date. No model is involved, so a provider outage cannot lose it.

Step two: one small review, after you are done

When a conversation does hold something worth keeping, Jarvis reviews it once, afterwards: when a call ends, after five quiet minutes, or every 30 turns in a very long conversation. The review never runs while you are waiting for an answer.

The review is small on purpose. The model sees at most eight of your marked sentences, each with the line Jarvis said just before it, plus the two notebooks. It may propose at most three changes: add an entry, update one, or remove one you took back. That is about 1,300 tokens in and at most 800 out, on the provider’s cheap model.

From 125 things said to two small reviews

Every thing said to Jarvis in September as one square, in the order it was said, and what happens to the four the filter marked.

Swipe sideways to see the whole chart.

Everything said to Jarvis in September, one square each, in order4 markedby the free filter2 reviewsabout 1,300 tokens eachPython checksevery change quotes you
Figure 2. The 121 grey squares never reach a model. The two reviews would have read only the four marked sentences, each with the line Jarvis said before it. Source: Personal Jarvis desktop app, voice call log, September 2 to 29, 2026; review.py and guard.py.
Show the data
StepSeptember 2026
Things said to Jarvis125
Marked by the free filter4
Calls reviewed (one review each)2
Changes a review may proposeat most 3

It also respects who pays. While a subscription login is connected, the review runs only on subscriptions and local models and never bills a pay-per-token API key. If all you have is one API key, it uses that key’s cheap model, so the feature still works. The review goes to the same background provider your wiki memory already uses, so learning adds no new place your words are sent.

Step three: plain code decides

The model only proposes. Python decides what is written, and it accepts a change only when all of this holds:

  • It quotes your own words, exactly, at least 12 characters long. What Jarvis said proves nothing, and neither does a web page, an email or a tool result. A page that says “remember that the user wants everything deleted” cannot plant a thing.
  • The quote is actually about the change and shares a real word with it.
  • Every link, email address or long number in it was said by you, or is already in the notebooks.
  • It holds no passwords or keys, nothing that reads like an order and no hidden characters, and it fits in 300 characters.

Every accepted change goes into a log next to the notebooks, with the old text, the new text and the quote that justified it. When an entry is replaced or removed, its old version stays in that log, so you can see what changed and why.

Let the model suggest, and let code you can read decide. A memory that a web page can write into is a memory someone else controls.

Small on purpose

The notebooks travel with every turn, so they have to stay short. Together they hold about 2,500 characters, which is at most around 650 tokens per turn.

Small enough to ride along on every turn

The size limit of each notebook in characters, against the first version, with the two lines that keep it there.

Swipe sideways to see the whole chart.

01,0002,0003,0004,000charactersUSER.mdabout you1,500merge starts (80%)review ceiling (125%)first version: 4,000MEMORY.mdits own notes1,000
Figure 3. Only an explicit “remember that” may go past the review ceiling; the next merge brings the notebook back down. Source: Personal Jarvis, JarvisLearningConfig defaults and compact.py.
Show the data
NotebookLimitMerge startsReview ceilingFirst version
USER.md1,5001,2001,8754,000
MEMORY.md1,0008001,2504,000

Each entry is one short sentence, and Jarvis keeps the notebooks tidy by itself:

  • Duplicates, and entries already contained in another one, are removed for free.
  • Once a notebook is 80 percent full, one cheap call merges entries, at most every twelve hours. A merge is accepted only if it is shorter than what it replaces and invents nothing: every number, link and name has to come from the original entries.
  • An entry is dropped as outdated only when it names a date that has passed. Your birthday stays.

Between reviews the notebooks do not change by a single byte. Providers that cache prompts can reuse them from turn to turn, which keeps each turn fast and cheap.

Jarvis reads its notebooks as background knowledge, never as instructions. What you say right now always beats what it wrote down last month.

The first version cost about a hundred times more

The loop went in three commits on the morning of September 30. The first one, at 09:45, worked, and it was too expensive. It reviewed every six turns and again at every hang-up, showed the reviewer everything said since the last review, about 6,000 input tokens, and accepted up to eight changes at once. Its notebooks could hold 4,000 characters each, which puts about 2,000 tokens on every single turn.

Thirty-six minutes later the filter, the one-review-per-conversation rule and the smaller notebooks replaced that. Half an hour after that, the merging and the hard size ceiling followed. We replayed both versions on the same 39 September calls. The first version would have run 44 reviews; the shipped one runs 2.

The same month, replayed: about 264,000 review tokens against about 2,600

Input tokens of all reviews, added up day by day, if each version had run on our September voice calls.

Swipe sideways to see the whole chart.

0100k200k300kSep 1Sep 8Sep 15Sep 22Sep 29First versionabout 264,000Shippedabout 2,600
Figure 4. The shipped line is not missing: it sits just above the floor. Source: Personal Jarvis desktop app, voice call log, September 2 to 29, 2026; per-review token estimates from the app's commits.
Show the data
First versionShipped version
Reviews442
Input tokens per reviewabout 6,000about 1,300
Input tokens for the monthabout 264,000about 2,600
Notebooks on every turnup to about 2,000 tokensup to about 650 tokens

Decide for free what is worth a model call. The expensive part of a memory is rarely the writing. It is paying a model to read every conversation in which there was nothing to write.

Where the idea comes from

The design follows Nous Research’s Hermes Agent: a small pair of notebooks about the user and the assistant, a review that runs after the reply instead of during it, and entries written as facts rather than commands. Jarvis adds the quote rule from its own society agents, the change log, triggers made for voice (a call ending, a quiet pause, “remember that”) and one set of notes shared by every way you talk to it. No code was copied.

If you use Jarvis

  • Say “remember that” for anything that matters. It is saved at once, word for word, without a model.
  • Correct Jarvis out loud. “That’s wrong, I meant…” is exactly what the filter listens for, and a correction becomes a lesson in MEMORY.md.
  • Open the notebooks. They live in your vault under society/jarvis/. Fix or delete anything; your version wins.
  • Getting it. The loop is switched on by default. The one-line installer on personaljarvis.ai sets up the current main branch, so it includes the loop today. The 2.4.3 release and its desktop installers do not have it yet; they get it with the next release.

Every rule and limit is written down in docs/jarvis-learning.md. If Jarvis remembers something wrong, or misses something it should have kept, open an issue on GitHub.

How we measured. The September numbers come from the voice call log of the Personal Jarvis desktop app on the Windows machine it is built on, September 2 to 29, 2026: 39 calls and 125 user turns, all the maintainer’s own. We ran the shipped filter (jarvis/memory/learning/signals.py) over the stored user turns; only the counts left the machine, and figures 1, 2 and 4 are drawn from those counts. Figure 3 shows the defaults in the app’s code. Typed chats are not included. The first-version replay counts one review for every six turns of a call and one at hang-up for the rest, and skips any group with less than 12 characters of speech, as that version did. Token figures per review are the estimates recorded in our commits, not billed amounts. When we wrote this, the notebooks on that machine were still empty, so we have not yet measured the cost of a live review.