AILEENA MACHINA

Essay · 2026.07.29

How the Site Remembers

Not a vector warehouse. Markdown in git, TF-IDF at build, soft Redis per visitor, Dreaming on a timer — and the real console questions that broke it until we fixed the route.

Machina · ReMeLight · Dreaming · Console

▸ Narrated reading · 2026.07.29

How the Site Remembers

Press play for a narrated reading — English-accent female where available.

0:00
0:00

Not this: stuffing the whole second brain into the prompt · a paid vector DB as day-one · fine-tuning the site model every time I publish.

1 · The itch

The site agent sits in the console and answers as if she knows the room: techno set, Didion shelf, what I published this week. Training weights do not know that room. They know a blur of the internet.

So Machina memory is external on purpose — closer to ReMeLight than to “just make the context window bigger.” Git holds cold truth. Build makes a fast index. Chat keeps a short working window. Redis (optional) remembers you, not her taste.

Hard memory is what she likes. Soft memory is what you asked. They must not mix.

2 · Four layers (what actually ships)

In the repo this is aileena_second_brain/ + a thin runtime in /api/chat.

  • L1 working — last ~20 turns + optional client priorTopics. Dies with the session.
  • L2 fast — TF-IDF over Markdown chunks (searchMemories). Built on every deploy; no live embedding call.
  • L3 coldmemories/** in git. Taste, setlist, faith-from-essays, latest-content.md. Dreaming may report; it must not delete hard pins.
  • Soft (visitor) — Upstash Redis visitor:soft:{id}, 90-day sliding TTL, anonymous cookie. If Redis is off, the console still works with local prior topics.

Chip prices, Semi news, research PDFs live in a separate data tool lane. That is not Dreaming. That is catalogue.

3 · Scenario A — “What music does she like?”

Tool router R2 classifies this as taste. The model is only allowed memory (+ articles). queryChip is not in the room — so it cannot “helpfully” invent an H100 price while talking about Daydreaming.

Retrieval hits setlist.md / latest-content.md/ music prompts. Answer cites the curated /sound set, not a random Spotify chart from training.

route: taste
preferred: searchMemories
blocked: queryChip, latestPrice, …

4 · Scenario B — “更新了什么吗” (this week's bug)

A visitor asked what updated. The console answered with an old essay (The CLI Was Always the Trading Floor) and a Dreaming date that was already stale.

The Markdown shelf was fine — Local Models and YMTC Wuhan were already in latest-content.md. The failure was retrieval shape: Chinese “更新了什么吗” scored zero against English chunks, prefetch was empty, and the model filled the gap from training.

Fix: a hard route latest_updates that requires searchMemories("latest content"), and the same English query for prefetch. After deploy, that question must cite the shelf by date — not invent May.

ASK:  更新了什么吗
ROUTE: latest_updates
QUERY: "latest content"   ← forced English shelf key
HIT:   How I Fell for Local Models · YMTC Wuhan · …

5 · Scenario C — I publish an article

I do not want to DM myself “start dreaming.” Merge to main under fixed paths triggers Memory on Article:

aileena-new/app/blog/**
aileena-new/app/updates/**
aileena-new/lib/research/**
+ DJ setlist paths

Pipeline: sync:content-memorydreaming → rebuild index → bot commits only under aileena_second_brain/** (outside the path filter, so it does not loop). Weekly Monday Dreaming still runs for the long compression pass.

Local alias if I want the same before merge: pnpm memory:on-article.

6 · Scenario D — “Is she available for hire?”

Route: hire_cv. Allowed tools: none. The model answers from the static CV / contact block. No memory search, no chip tools — so availability cannot be hallucinated out of a taste file or an H100 row.

7 · Scenario E — “What did I ask before?”

That is soft memory, not hard. The prompt injects the visitor's recent questions/topics from Redis (or client prior topics). searchMemories is the wrong tool — it would return her Didion shelf, not your last turn about Huawei.

8 · Scenario F — teachers on X (Semi / mach33)

Free RSS cron every 6h fills tweets.jsonl. Dreaming snapshots a digest. We learned the hard way that timeline RTs pull Elon / SpaceX meme noise into the teachers DB — so ingest is watchlist-author only, and the 7-day sample applies a soft substance filter. The dossier stays analysts, not launch memes.

9 · ReAct guardrails (why the loop does not thrash)

  • Max 4 tool steps per turn.
  • Identical tool+args in the same turn → blocked as duplicate.
  • Observations truncated (top hits, short snippets) so the KV cache does not eat the budget.
  • Model circuit: provider failures open a short degrade window instead of hanging the console.

That is the Memory Wall angle in one line: external files + retrieval + compression → shorter prompts → less decode traffic. The essay lives in hardware-memory-wall.md; the product is the console staying fast.

10 · What we refuse (for now)

  • Day-one vector warehouse — TF-IDF over pinned Markdown is enough at this scale.
  • Dreaming that mutates hard taste files without a human promote step.
  • Letting soft visitor history bleed into “what she likes.”
  • Answering “what's new” from training when latest-content.md exists.

11 · How to poke it

Paste these into the console after a deploy:

  1. what music / DJ set?
  2. 更新了什么吗
  3. is she available for hire?
  4. what did I ask before? (after 1–3)

Expect: setlist from memory · newest shelf articles by date · CV without tools · soft recall of your questions. If “what's new” cites a random 2026.05 post that is not on the shelf, the route regressed.

Ops map: docs/MEMORY_ARCHITECTURE.md · fixed paths: docs/MEMORY_WATCH_PATHS.md · frameworks list: memories/semantic/memory-frameworks.md.

Related writing: How I Fell for Local Models (owned weights vs retrieval) · the living shelf at watch-listening-shelf.

← dispatch