It is tempting to locate an agent’s intelligence in one place: the model. If a companion is repetitive, forgetful, or easily confused, the obvious response is to reach for more parameters.
Mote has pushed me toward a different question. How much of useful behavior should be carried by the world around the model?
Mote is a standalone local companion experiment adapted from AIWorld’s cognitive contracts. It has its own SQLite save, scheduler, evidence, and small simulated life. My thesis is not that a tiny model secretly matches a frontier model. It plainly may not. The thesis is that parameter count is only one part of a cognitive system, and that we waste model capacity when we ask generated text to stand in for time, memory, action, and truth.
Put ordinary life in ordinary code
Mote’s routine life does not require an inference call. Procedural code advances energy, curiosity, companionship, place, current activity, and progress. A utility rule chooses among resting, exploring, playing, and observing, with feasibility checks and a repetition penalty. Completed activities can advance small persistent pursuits. Those outcomes become events with source IDs and survive a restart.
The language model has a narrower job. It can propose speech, a short inspectable reflection, a next action, and memory IDs. Zod validates the shape. The application filters unknown memory IDs, checks whether an action is feasible, and commits the actual result separately. A proposed exploration is not a completed exploration. A diary line is labelled as a hypothesis, not promoted into fact.
This division is a cognitive architecture, not merely guardrails around a chatbot. The world supplies continuity and consequences. Retrieval supplies bounded evidence. The model interprets an unusual moment or finds words for a response. Most clock ticks need no prose at all.
A concrete scenario makes the boundary clearer. Suppose Mote finishes exploring and the committed event says it reached the garden and made a discovery. Later I ask, “What did you find?” The prompt can include that sourced development, and the model can describe it in character. If the model instead proposes another exploration, the resolver still has to check energy and start the activity; it cannot narrate a second discovery into existence. If I ask an unrelated question, relevance gating should keep routine world chatter out of the answer.
The architecture will not make weak prose beautiful. It can, however, stop beautiful prose from becoming the database.
The first local trials were small and revealing
On October 6, I recorded a few isolated local-model samples on an Apple M2 Max with 32 GB of unified memory. These were tiny, noncontrolled samples, not a benchmark, a ranking, or evidence of long-term companion quality.
Gemma 4B produced valid structured decisions in only 2 of 6 unconstrained-JSON samples. With a required JSON schema it produced 6 of 6 valid decisions, with a median response latency of 2.64 seconds. That is a useful transport result: constraining the output fixed the envelope in those samples. It is not proof that the content was good. The notes still record repetitive questions and scene embellishment.
Qwen 0.6B returned one schema-valid sample in 1.10 seconds, but it echoed the input instead of replying. Gemma 1B returned one schema-valid sample in 2.11 seconds and produced an actual companion response, which made it a reasonable lighter initial default. Later isolated checks still found echoing and loose handling of unclear input, including an additional packaged-app greeting that echoed part of the request. One successful reply did not settle the quality question.
I have no battery result to report from those samples. There was no sustained all-day thermal test, and Node process memory would not account for Ollama’s model memory anyway. The recorded latencies and output speeds are observations about those particular runs, not a general comparison among model families.
What the samples do show is that validation and conversation are separate problems. A schema can turn malformed output into valid output without turning an echo into a useful answer. Conversely, an appealing sentence is not enough if the action or memory references cannot be checked.
Memory is not one interchangeable feature
Mote and AIWorld deliberately use different recall mechanisms today.
Mote performs bounded lexical selection over grounded memories, combining word overlap with recency. It keeps immutable source event IDs, labels user statements as reports, and distinguishes lived events from reflections and communicated memories. This is inspectable and cheap, but it can miss a relevant paraphrase that shares no useful words with the query. Mote does not claim a semantic embedding index or mem0 integration.
AIWorld preserves its mem0-based semantic fact retrieval and adds scoped evidence and structured cognitive records around it. Semantic recall can help with paraphrases, but mem0 is still not the authority for inventory, arrival, task completion, or who witnessed an event. In both systems, provenance and scope come before fluency. The mechanisms are related, not identical.
That distinction matters when discussing “small models.” Better retrieval can reduce the context a model has to interpret, but retrieval errors remain retrieval errors. A tiny model can also follow the schema while selecting the wrong evidence, repeating the user, or giving a bland response. Architecture reallocates work; it does not abolish model capability.
Compare systems, not isolated replies
The fairest next evaluation would hold scenarios constant and vary both model size and architecture. I would run the same scripted conversations and world events through a small model with Mote’s procedural life, the same small model with prompt-only state, and a larger prompt-only model. The scripts should include paraphrased recall, an unwitnessed event, an infeasible action, a quiet request, a restart, an unclear message, and a question about a completed pursuit.
Before running them, I would define pass/fail measures: valid decision rate, direct response versus input echo, correct selection of sourced memories, false claims about actions, respect for quiet and scope, consistency after restart, latency, and blinded human ratings of usefulness and repetition. A separate sustained run should measure whole-machine memory, thermal behavior, and battery rather than infer them from model latency.
This could disprove the stronger version of my thesis. If the world-wrapped small model still fails basic conversation, if procedural state does not improve continuity, or if a larger prompt-only model is equally grounded with less complexity, then the architecture has not bought enough. I expect tradeoffs rather than a universal winner: lexical recall is limited, the action vocabulary is narrow, and handcrafted utility can become predictable.
Still, I like the direction. A model does not have to simulate an entire existence every time it speaks. Give it a clock it cannot rewrite, events it did not invent, choices that can fail, and a memory system that names its sources. Then even a small model has a world to think from—and we can evaluate the system by what actually happened, not only by how intelligent one reply sounded.
Experiment record and transport reference
The figures above come from my October 6 trial notes, summarized with their sample sizes and limitations. These are a project notebook, not independently reproduced measurements. Ollama’s structured-output documentation describes the schema-constrained transport mechanism; it makes no claim about the usefulness of these particular companion replies.