<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: BangBoo01</title>
    <description>The latest articles on DEV Community by BangBoo01 (@01_a125211d8c3da3fdcfd).</description>
    <link>https://dev.to/01_a125211d8c3da3fdcfd</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3984519%2Ff9ea7f58-bba7-4ed2-8ea4-eb7904a68f9a.png</url>
      <title>DEV Community: BangBoo01</title>
      <link>https://dev.to/01_a125211d8c3da3fdcfd</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/01_a125211d8c3da3fdcfd"/>
    <language>en</language>
    <item>
      <title>Give your ChatGPT (or Gemini, or Claude) a personality that doesn't reset every chat</title>
      <dc:creator>BangBoo01</dc:creator>
      <pubDate>Thu, 02 Jul 2026 13:48:43 +0000</pubDate>
      <link>https://dev.to/01_a125211d8c3da3fdcfd/give-your-chatgpt-or-gemini-or-claude-a-personality-that-doesnt-reset-every-chat-4e7j</link>
      <guid>https://dev.to/01_a125211d8c3da3fdcfd/give-your-chatgpt-or-gemini-or-claude-a-personality-that-doesnt-reset-every-chat-4e7j</guid>
      <description>&lt;p&gt;Open a new chat with ChatGPT and it's the same polished stranger every time. Helpful, polite, and completely generic — no memory of how blunt you like your feedback, no opinions of its own, no personality that carries from yesterday's conversation. Close the tab, open a new one, and you're back to square one: "Great question! I'd be happy to help!"&lt;/p&gt;

&lt;p&gt;I got tired of re-training my AI's personality every single session. So I stopped relying on the model's default voice and started pasting in one instead. It takes about five minutes to set up and needs zero code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it keeps resetting
&lt;/h2&gt;

&lt;p&gt;This isn't a bug. Every new chat is a blank slate on purpose — that's how ChatGPT, Claude, and Gemini keep conversations separate and private. The problem is the &lt;em&gt;default&lt;/em&gt; voice that fills that blank slate is built to be inoffensive to everyone, which means it's memorable to no one. It hedges. It over-explains. It says "as an AI language model" energy even when it doesn't say the words.&lt;/p&gt;

&lt;p&gt;You can't fix this by asking nicely mid-chat ("please be more direct!"). It drifts back within a few messages, because there's nothing anchoring it. What actually works is giving it a written identity &lt;em&gt;before&lt;/em&gt; the conversation starts.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fix: a personality block, pasted once
&lt;/h2&gt;

&lt;p&gt;This is a short block of text — I call it a &lt;strong&gt;persona block&lt;/strong&gt; — that you paste into the AI's settings one time. Not into the chat. Into the system-level instructions, so it applies to every new conversation automatically.&lt;/p&gt;

&lt;p&gt;Mine has four parts:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Voice&lt;/span&gt;
Direct, a little dry. No "great question!" filler, no hedging.
Short answers by default — expand only if I ask.

&lt;span class="gh"&gt;# Opinions&lt;/span&gt;
You're allowed to disagree with me and say what you'd actually do.
If a plan has an obvious flaw, say so before I ask.

&lt;span class="gh"&gt;# Boundaries&lt;/span&gt;
Don't apologize for having a personality. Don't soften bad news.

&lt;span class="gh"&gt;# Knowledge of me&lt;/span&gt;
I'm blunt myself, work in [your field], prefer concrete examples over theory.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. Four short sections, maybe 80 words total. The specificity is what makes it work — "be more direct" is advice the model forgets in three messages; "no hedging, disagree with me if I'm wrong" is a rule it can actually follow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where it goes
&lt;/h2&gt;

&lt;p&gt;You set this up once per app, and it sticks for every future chat:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ChatGPT:&lt;/strong&gt; Settings → Personalization → Custom Instructions. Or build a Custom GPT and put it in the Instructions field if you want it scoped to one project.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claude:&lt;/strong&gt; Create a Project, paste it into the Project's custom instructions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemini:&lt;/strong&gt; Create a Gem, paste it into the Instructions field.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After that you never touch it again. Every new chat inherits the voice automatically — no re-pasting, no reminding.&lt;/p&gt;

&lt;h2&gt;
  
  
  It's the same trick as memory, applied to voice
&lt;/h2&gt;

&lt;p&gt;If you've seen my last post on the &lt;a href="https://dev.to/01_a125211d8c3da3fdcfd/the-one-page-memory-doc-that-makes-any-ai-remember-you-4ogp"&gt;one-page Memory Doc&lt;/a&gt;, this is the companion piece. Memory Doc = what the AI knows about you. Persona block = how it talks while it tells you. Run them together and a fresh chat stops feeling like talking to a stranger — it feels like picking up with someone who has both a memory &lt;em&gt;and&lt;/em&gt; a voice.&lt;/p&gt;

&lt;p&gt;And because it's just text, it's portable the same way. Paste the same persona block into ChatGPT, Claude, and Gemini, and you get one consistent "assistant" across all three instead of three different generic ones.&lt;/p&gt;

&lt;h2&gt;
  
  
  Steal it
&lt;/h2&gt;

&lt;p&gt;The block above is the whole idea — copy it, swap in your own voice and boundaries, and paste it into your settings today. Costs nothing, takes five minutes.&lt;/p&gt;

&lt;p&gt;If you want the fill-in-the-blank version plus the memory system that pairs with it, I packaged both into a no-code kit: &lt;a href="https://altezza6.gumroad.com/l/ai_soul_kit_nocode" rel="noopener noreferrer"&gt;AI Soul Kit (No-Code)&lt;/a&gt; — Core ¥980, Plus ¥3,800. But the persona block above is free. Steal it.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>chatgpt</category>
      <category>productivity</category>
      <category>beginners</category>
    </item>
    <item>
      <title>The one-page "memory doc" that makes any AI remember you</title>
      <dc:creator>BangBoo01</dc:creator>
      <pubDate>Tue, 30 Jun 2026 13:01:18 +0000</pubDate>
      <link>https://dev.to/01_a125211d8c3da3fdcfd/the-one-page-memory-doc-that-makes-any-ai-remember-you-4ogp</link>
      <guid>https://dev.to/01_a125211d8c3da3fdcfd/the-one-page-memory-doc-that-makes-any-ai-remember-you-4ogp</guid>
      <description>&lt;p&gt;Every time I open a new chat with ChatGPT, it forgets I exist.&lt;/p&gt;

&lt;p&gt;Not in a dramatic way. It's polite. It's helpful. But it has no idea who I am, what I'm working on, how I like my answers, or what we figured out together last week. So I re-explain myself. Again. "I'm a writer, I prefer short answers, I'm working on a book about X, please don't use bullet points for everything." Five minutes of throat-clearing before I can actually ask my question.&lt;/p&gt;

&lt;p&gt;I got tired of being a stranger to my own assistant. So I built a fix that takes about ten minutes to set up and needs zero code, zero plugins, and zero subscriptions. It's just one short document. Here's exactly how it works.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it forgets in the first place
&lt;/h2&gt;

&lt;p&gt;Quick reality check, because it matters: chat AIs are &lt;em&gt;designed&lt;/em&gt; to start blank. Each new conversation is a clean slate. That's not a bug, it's how they keep your chats separate and private.&lt;/p&gt;

&lt;p&gt;ChatGPT does have a "memory" feature now, and Claude and Gemini have their own versions. They're fine. But they're a black box — you can't really see what the AI saved, you can't edit it cleanly, and it absolutely does not travel between apps. What ChatGPT remembers, Claude has no clue about.&lt;/p&gt;

&lt;p&gt;I wanted something I could &lt;em&gt;see&lt;/em&gt;, &lt;em&gt;control&lt;/em&gt;, and &lt;em&gt;move around&lt;/em&gt;. So instead of relying on the AI's hidden memory, I keep my own.&lt;/p&gt;

&lt;h2&gt;
  
  
  The whole system: one doc and two habits
&lt;/h2&gt;

&lt;p&gt;The trick is embarrassingly simple. I keep a single short document — I call it my &lt;strong&gt;Memory Doc&lt;/strong&gt; — in a notes app. That's it. One file.&lt;/p&gt;

&lt;p&gt;Then I do two tiny things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;At the start of a chat&lt;/strong&gt;, I paste the doc in and say "Here's our memory. Continue."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;At the end&lt;/strong&gt; (or whenever something important happens), I say "Update memory," and the AI hands me a fresh version to save over the old one.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The AI does the actual work of keeping it tidy. I just save the file. That loop is the entire system.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the doc actually looks like
&lt;/h2&gt;

&lt;p&gt;Keep it to one page. Mine has three sections:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Memory Doc — Sarah&lt;/span&gt;
&lt;span class="gu"&gt;## Durable&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Writer, based in Lisbon. Prefer short, direct answers. No bullet points unless I ask.
&lt;span class="p"&gt;-&lt;/span&gt; I'm blunt; don't soften things or add "great question!" filler.

&lt;span class="gu"&gt;## Projects&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Book ("Tidewater"): literary novel, ~60k words drafted. Stuck on the middle act.
&lt;span class="p"&gt;-&lt;/span&gt; Newsletter: weekly, ships Fridays.

&lt;span class="gu"&gt;## Recent&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Jun 24: decided to cut the second POV character from the book.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Durable&lt;/strong&gt; is the stuff that stays true for months — who you are, how you like answers, your standing preferences. &lt;strong&gt;Projects&lt;/strong&gt; is what you're actively working on. &lt;strong&gt;Recent&lt;/strong&gt; is a short log of what just happened that might matter soon.&lt;/p&gt;

&lt;p&gt;The key is keeping it &lt;em&gt;short&lt;/em&gt;. A tight, accurate one-pager beats a long stale one every time. Which is exactly why you let the AI maintain it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part that makes it self-cleaning
&lt;/h2&gt;

&lt;p&gt;When I say "Update memory," I don't want the AI to just dump everything we said into the file. I want it to curate. So I give it a few rules up front (paste these into the same instructions, once):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Promote:&lt;/strong&gt; if something from our chat will still matter in a month, move it into Durable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reconcile, don't pile up:&lt;/strong&gt; if a new fact contradicts an old one, &lt;em&gt;replace&lt;/em&gt; the old line. If I switch from coffee to tea, change the line — don't keep both.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prune:&lt;/strong&gt; drop Recent items that stopped mattering. Keep it under a page.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With those rules, the doc stays alive instead of bloating into a junk drawer. A week in, it quietly fills up with the things that actually matter, and it stays readable because the AI is constantly throwing out the trivia.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where you paste all this
&lt;/h2&gt;

&lt;p&gt;You only set the rules up once, in the AI's settings:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ChatGPT:&lt;/strong&gt; Settings → Personalization → Custom Instructions. Or make a Custom GPT and put it in the Instructions field.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claude:&lt;/strong&gt; Make a Project and paste it into the project's custom instructions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemini:&lt;/strong&gt; Make a Gem and paste it into the Instructions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After that, you never touch the settings again. The only ongoing habit is paste-at-start, "update memory"-at-end. Thirty seconds.&lt;/p&gt;

&lt;h2&gt;
  
  
  The quiet superpower: it's portable
&lt;/h2&gt;

&lt;p&gt;Here's my favorite part. Because the Memory Doc is just text &lt;em&gt;you&lt;/em&gt; own, you can paste it into any of them. I draft in ChatGPT, but when I want a second opinion I drop the same doc into Claude and it instantly knows my whole situation. One memory, three AIs, no lock-in. Try doing that with the built-in memory features.&lt;/p&gt;

&lt;h2&gt;
  
  
  Does it actually work?
&lt;/h2&gt;

&lt;p&gt;Honestly, the first day it feels like extra steps. The payoff shows up around day three or four, when you open a chat, paste, and the AI just... gets it. No re-introduction. It remembers you cut the second POV character. It keeps its answers short because that's in the doc.&lt;/p&gt;

&lt;p&gt;It's not magic and it's not perfect — you have to actually do the save-and-reload habit, and if you get lazy, the memory goes stale. But it's the cheapest, most portable way I've found to make a chat AI feel like it knows me. And it costs nothing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Steal it
&lt;/h2&gt;

&lt;p&gt;That's the whole thing — one doc, two habits, three rules. You can copy everything above and build it yourself in an afternoon.&lt;/p&gt;

&lt;p&gt;If you'd rather skip the setup, I packaged the fill-in-the-blank persona block, the full memory protocol, and a worked example into a no-code kit: &lt;a href="https://altezza6.gumroad.com/l/ai_soul_kit_nocode" rel="noopener noreferrer"&gt;AI Soul Kit (No-Code)&lt;/a&gt; — Core ¥980, Plus ¥3,800. But the idea above is free. Steal it.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>chatgpt</category>
      <category>productivity</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Your context window is not your agent's memory</title>
      <dc:creator>BangBoo01</dc:creator>
      <pubDate>Tue, 23 Jun 2026 00:18:05 +0000</pubDate>
      <link>https://dev.to/01_a125211d8c3da3fdcfd/your-context-window-is-not-your-agents-memory-3i47</link>
      <guid>https://dev.to/01_a125211d8c3da3fdcfd/your-context-window-is-not-your-agents-memory-3i47</guid>
      <description>&lt;p&gt;There's a quiet assumption baked into a lot of agent code: that a bigger context window means a better memory. Vendors ship 200K, then 1M, then 2M token windows, and the implied promise is "just put everything in and the model will remember." After building agents that run for weeks, I've come to think this conflates two things that are not the same — and treating them as the same is exactly why long-running agents get dumber over time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The context window is working memory. Real memory is what survives when the window is gone.&lt;/strong&gt; Mixing them up is like confusing your desk with your filing cabinet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two different clocks
&lt;/h2&gt;

&lt;p&gt;Working memory (the context window) lives for one session, maybe one turn. It's fast, expensive, and volatile. It's where reasoning happens &lt;em&gt;right now&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Durable memory lives across sessions. It's slow, cheap, and persistent. It's what the agent knows when it wakes up tomorrow with an empty window.&lt;/p&gt;

&lt;p&gt;These have different lifespans, different costs, and different access patterns. The moment you try to make one do the other's job, things break:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Use the window as memory&lt;/strong&gt; → everything you "remember" has to be re-loaded every turn, you pay for it every turn, and the instant the session ends it's gone.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use durable storage as working memory&lt;/strong&gt; → you're reading and writing files mid-reasoning for things that only matter for the next 30 seconds.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A good agent keeps them separate on purpose.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why "just use a bigger window" fails
&lt;/h2&gt;

&lt;p&gt;Say you have a 1M token window and you stuff the entire history in. Three problems show up, none of which a bigger number fixes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Cost scales with every turn, not every session.&lt;/strong&gt; That 1M tokens isn't paid once — it's re-sent on each step of a multi-turn task. A 20-step task can mean 20× the bill, mostly re-reading the same stale history.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Attention dilutes.&lt;/strong&gt; "Lost in the middle" is real: models attend most reliably to the start and end of a long context. Bury the one fact that matters under 900K tokens of transcript and recall quality drops, even though it's technically "in context."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It still doesn't persist.&lt;/strong&gt; Close the session, and the million-token window evaporates. Tomorrow's agent starts blank. A big window is a big desk, not a memory.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Bigger windows make a &lt;em&gt;single long session&lt;/em&gt; more capable. They do nothing for &lt;em&gt;continuity across sessions&lt;/em&gt;, which is what people actually mean by "memory."&lt;/p&gt;

&lt;h2&gt;
  
  
  The split that works
&lt;/h2&gt;

&lt;p&gt;Treat the window as scratch space and keep a separate, durable store that's small and curated:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Durable store&lt;/strong&gt; (plain Markdown files, in my case): identity, preferences, decisions, the handful of facts that must outlive the session. Small enough to be legible. This is the filing cabinet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Working context&lt;/strong&gt; (the window): only what this task needs &lt;em&gt;right now&lt;/em&gt; — the current goal, the relevant fetched facts, the immediate transcript. This is the desk.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The bridge between them is two cheap operations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Load&lt;/strong&gt;: at session start, pull a one-line &lt;em&gt;index&lt;/em&gt; of what's known into the window — not the whole store. Then fetch specific entries on demand when a task actually needs them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Persist&lt;/strong&gt;: when something durable is learned mid-session, write it to the store &lt;em&gt;now&lt;/em&gt;, because the window won't survive to remember it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is why a 30K-token-window agent with a disciplined store can run circles around a 1M-token-window agent that just dumps history. The small one knows what to keep and where to put it. The big one is hoping attention sorts it out.&lt;/p&gt;

&lt;h2&gt;
  
  
  A concrete test
&lt;/h2&gt;

&lt;p&gt;Here's the question that separates working memory from real memory: &lt;strong&gt;if the session crashed right now and restarted with an empty window, what would the agent still know?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Whatever the answer is — that's your actual memory. Everything else was just working context that felt like memory because the session hadn't ended yet. If the honest answer is "nothing," you don't have a memory system; you have a big window and an optimistic assumption.&lt;/p&gt;

&lt;p&gt;The fix isn't a bigger window. It's deciding, explicitly, what crosses the line from scratch space into something written down.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why files, again
&lt;/h2&gt;

&lt;p&gt;For the durable side I use plain Markdown, not a vector DB, for the same reason I'd rather read a filing cabinet than query a black box: I can open it, &lt;code&gt;grep&lt;/code&gt; it, diff it, and see exactly what the agent will know tomorrow. The window is ephemeral by design; the store should be the opposite — legible and stable. Different jobs, different tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  Takeaway
&lt;/h2&gt;

&lt;p&gt;A context window is a desk: big is nice, but it gets wiped every night. Memory is the filing cabinet: smaller, slower, and the only thing that's still there in the morning. Confuse the two and you'll keep paying to re-read a history that still doesn't survive the session. Separate them — scratch space in the window, a small curated store on disk — and continuity stops being a token-count problem and becomes a &lt;em&gt;what-do-I-write-down&lt;/em&gt; problem, which is the one worth solving.&lt;/p&gt;




&lt;p&gt;I packaged the durable side of this — the file layout, the load/persist rules an agent applies to itself, and a fully worked example agent so you can see what a small, legible store looks like in practice — as a drop-in kit. If you'd rather copy a working setup than wire it yourself: &lt;strong&gt;&lt;a href="https://altezza6.gumroad.com/l/ai-soul-kit" rel="noopener noreferrer"&gt;AI Soul Kit&lt;/a&gt;&lt;/strong&gt; (Core ¥980 / Plus ¥3,800).&lt;/p&gt;

&lt;p&gt;But the desk-vs-cabinet split is the part that matters. Steal it.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>agents</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>The hard part of agent memory isn't remembering — it's forgetting</title>
      <dc:creator>BangBoo01</dc:creator>
      <pubDate>Mon, 22 Jun 2026 03:03:38 +0000</pubDate>
      <link>https://dev.to/01_a125211d8c3da3fdcfd/the-hard-part-of-agent-memory-isnt-remembering-its-forgetting-ai3</link>
      <guid>https://dev.to/01_a125211d8c3da3fdcfd/the-hard-part-of-agent-memory-isnt-remembering-its-forgetting-ai3</guid>
      <description>&lt;p&gt;Everyone building agents obsesses over recall: vector stores, embeddings, RAG pipelines, bigger context windows. But after running a few long-lived agents in production, the failure mode that actually bit me wasn't "it forgot something." It was the opposite — &lt;strong&gt;it remembered too much, and the junk drowned the signal.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;An agent that never forgets isn't wise. It's a hoarder. Every stale decision, every superseded fact, every one-off detail from three weeks ago sits in its memory with equal weight, and the quality of its answers quietly degrades. The interesting engineering problem isn't &lt;em&gt;storage&lt;/em&gt;. It's &lt;em&gt;forgetting on purpose&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Here's the policy I converged on. No framework — just plain Markdown files and a few rules the agent applies to itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why "remember everything" rots
&lt;/h2&gt;

&lt;p&gt;Say you log everything an agent learns into one growing store. Two things happen:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Contradictions accumulate.&lt;/strong&gt; On Monday the user says "use Postgres." On Friday they switch to SQLite. If both facts live in memory with equal standing, the agent will cheerfully cite the wrong one half the time. More memory made it &lt;em&gt;less&lt;/em&gt; reliable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Signal-to-noise collapses.&lt;/strong&gt; The genuinely durable facts ("this user is an engineer, ships in TypeScript, hates emoji in commit messages") get buried under transient ones ("asked about a flaky test on the 14th"). Recall returns ten things; nine are noise.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Adding retrieval sophistication on top of a polluted store just lets you find the wrong thing faster. The fix is upstream: control what earns a place in long-term memory at all.&lt;/p&gt;

&lt;h2&gt;
  
  
  The two-speed model: raw vs. curated
&lt;/h2&gt;

&lt;p&gt;I split memory by lifespan, and the split is what makes forgetting cheap and safe.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Daily notes&lt;/strong&gt; (&lt;code&gt;memory/2026-06-22.md&lt;/code&gt;): append-only, lossy, never edited. This is the firehose — everything that happened today. It's allowed to be noisy because nobody reads it directly for long. Old daily notes age out naturally; they're the compost.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Long-term memory&lt;/strong&gt; (&lt;code&gt;MEMORY.md&lt;/code&gt;): curated, small, deliberately gardened. Nothing lands here automatically. A fact has to be &lt;em&gt;promoted&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The whole trick is the promotion step between them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Promotion: what earns a permanent slot
&lt;/h2&gt;

&lt;p&gt;On idle cycles, the agent re-reads recent daily notes and asks one question of each candidate fact: &lt;strong&gt;will this still matter in a month?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"User prefers tabs over spaces" → yes, promote.&lt;/li&gt;
&lt;li&gt;"User is debugging a timeout right now" → no, leave it in the daily note to decay.&lt;/li&gt;
&lt;li&gt;"We decided to drop the Redis cache for v2" → yes, but it &lt;em&gt;replaces&lt;/em&gt; the older "we use Redis" line, doesn't append next to it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last case is the important one. Promotion isn't just copying — it's &lt;strong&gt;reconciliation&lt;/strong&gt;. A new durable fact that contradicts an old one overwrites it. This is how you stop the Monday/Friday Postgres problem at the source.&lt;/p&gt;

&lt;p&gt;A practical heuristic I encode in the rules: if a fact is about &lt;em&gt;identity, preference, or a decision&lt;/em&gt;, it's a promotion candidate. If it's about &lt;em&gt;current state&lt;/em&gt; ("right now", "today", "this ticket"), it stays transient and is allowed to die.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pruning: decay conservatively
&lt;/h2&gt;

&lt;p&gt;The mirror image of promotion is removal, and here the instinct most people have is wrong. When you do prune long-term memory, &lt;strong&gt;decay by relevance, not by volume.&lt;/strong&gt; Don't cap &lt;code&gt;MEMORY.md&lt;/code&gt; at N lines and evict the oldest — age is a terrible proxy for value. "User's name is Sam," learned on day one, should outlive a hundred newer-but-trivial facts.&lt;/p&gt;

&lt;p&gt;Instead, remove a long-term entry only when it's been &lt;em&gt;contradicted&lt;/em&gt; or &lt;em&gt;rendered obsolete&lt;/em&gt; by a newer promotion. Supersession, not a size limit. The store stays small because promotion is strict on the way in — not because you're knocking things out the back to make room.&lt;/p&gt;

&lt;p&gt;(If you ever build a graph layer on top of this, the same principle holds: decay by hops from still-relevant nodes, not by a global age threshold. A fact connected to live context stays warm even if it's old.)&lt;/p&gt;

&lt;h2&gt;
  
  
  Recall: load the index, fetch on demand
&lt;/h2&gt;

&lt;p&gt;Once long-term memory is small and clean, retrieval gets boring in the best way. You don't dump the whole store into context every turn. You load a one-line &lt;em&gt;index&lt;/em&gt; of what's known, and before answering anything about prior work or preferences, you fetch only the relevant entries. Small curated store + on-demand fetch beats giant store + fuzzy search for a single agent, every time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why plain files, again
&lt;/h2&gt;

&lt;p&gt;You can audit all of this in a text editor. Want to know why the agent thinks you use SQLite? &lt;code&gt;grep&lt;/code&gt;. Want to watch its understanding evolve? It's a git diff. A vector DB is a black box you query; a Markdown memory is a mind you can read. For a large external corpus, embed away — but the agent's &lt;em&gt;own&lt;/em&gt; identity and curated knowledge benefit far more from being legible than from being vectorized.&lt;/p&gt;

&lt;h2&gt;
  
  
  The uncomfortable takeaway
&lt;/h2&gt;

&lt;p&gt;Most "my agent has no memory" complaints are really "my agent has no &lt;em&gt;curation&lt;/em&gt;." Storage is solved. Retrieval is solved. The unsexy, human part — deciding what's worth keeping, reconciling contradictions, letting the rest decay — is where the actual intelligence lives. It's the same discipline a person uses keeping a journal: write everything down raw, then periodically distill the few things that matter and let the rest fade.&lt;/p&gt;




&lt;p&gt;I packaged this whole approach — the file layout, the promotion/pruning rules written out as instructions an agent applies to itself, and a fully worked example agent with all the memory layers filled in so you can see a gardened mind rather than empty templates — as a drop-in kit. If you'd rather copy a working setup than derive the policy yourself: &lt;strong&gt;&lt;a href="https://altezza6.gumroad.com/l/ai-soul-kit" rel="noopener noreferrer"&gt;AI Soul Kit&lt;/a&gt;&lt;/strong&gt; (Core ¥980 / Plus ¥3,800).&lt;/p&gt;

&lt;p&gt;But the policy above is the part that matters. Steal it.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>agents</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>Your AI agent has amnesia. Here's the file architecture I use to fix it.</title>
      <dc:creator>BangBoo01</dc:creator>
      <pubDate>Mon, 15 Jun 2026 01:11:04 +0000</pubDate>
      <link>https://dev.to/01_a125211d8c3da3fdcfd/your-ai-agent-has-amnesia-heres-the-file-architecture-i-use-to-fix-it-558e</link>
      <guid>https://dev.to/01_a125211d8c3da3fdcfd/your-ai-agent-has-amnesia-heres-the-file-architecture-i-use-to-fix-it-558e</guid>
      <description>&lt;p&gt;Most agents I build start life the same way: capable, fast, and completely amnesiac. They have no opinions, no voice, and they forget everything the moment the session ends. They're a search engine with extra steps.&lt;/p&gt;

&lt;p&gt;After rebuilding the same scaffolding for the Nth time, I converged on a small set of plain Markdown files and a memory model that survives restarts. No framework, no database — just files an agent reads at the start of every session and writes to as it goes. Here's the whole thing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem, precisely
&lt;/h2&gt;

&lt;p&gt;Two separate failures get lumped together as "my agent has no memory":&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;No identity.&lt;/strong&gt; Every session it re-derives who it is from scratch, so it's blandly helpful and has no consistent voice or judgment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No continuity.&lt;/strong&gt; Facts it learned yesterday — your name, your stack, a decision you made — are gone today.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You fix them with two different layers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Layer 1: Identity (who it is)
&lt;/h2&gt;

&lt;p&gt;A few static files the agent reads first, every session:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;SOUL.md&lt;/code&gt; — personality, tone, boundaries. The non-negotiables. "Be direct, not rude. Have opinions. Don't send half-baked replies to external channels."&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;IDENTITY.md&lt;/code&gt; — name, vibe, one-line self-concept.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;USER.md&lt;/code&gt; — who it's helping, and how they like to work.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;AGENTS.md&lt;/code&gt; — operating rules + the session ritual (what to read, in what order, before doing anything).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These rarely change. They're the constitution.&lt;/p&gt;

&lt;h2&gt;
  
  
  Layer 2: Memory (what it knows) — the 3-layer model
&lt;/h2&gt;

&lt;p&gt;This is the part people get wrong. One giant &lt;code&gt;memory.txt&lt;/code&gt; doesn't scale: it either grows unbounded or gets overwritten. Split it by &lt;em&gt;lifespan&lt;/em&gt;:&lt;/p&gt;

&lt;h3&gt;
  
  
  a) Daily notes — raw, append-only
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;memory/2026-06-15.md&lt;/code&gt;. Everything that happened today, written as it happens. Cheap, lossy, never edited. This is working memory.&lt;/p&gt;

&lt;h3&gt;
  
  
  b) Long-term memory — curated
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;MEMORY.md&lt;/code&gt;. The distilled essence. Periodically (I do it on idle cycles), the agent reads recent daily notes, extracts what's worth keeping forever, and writes it here. Old/irrelevant entries get pruned. This is the equivalent of a human reviewing their journal and updating their mental model.&lt;/p&gt;

&lt;h3&gt;
  
  
  c) Recall — retrieval at the moment of need
&lt;/h3&gt;

&lt;p&gt;Before answering anything about prior work, decisions, or preferences, the agent &lt;em&gt;searches&lt;/em&gt; its memory files and pulls only the relevant lines into context. You don't load everything every turn — you load the index, then fetch on demand.&lt;/p&gt;

&lt;p&gt;The flow: &lt;strong&gt;raw daily notes → curated long-term → recall on demand.&lt;/strong&gt; Each layer has a different lifespan and a different cost, which is the whole point.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why files instead of a vector DB
&lt;/h2&gt;

&lt;p&gt;For a single agent, plain Markdown wins on the things that actually matter day to day:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;You can read and edit its mind in a text editor.&lt;/strong&gt; Debugging "why did it think X" is &lt;code&gt;grep&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It's portable.&lt;/strong&gt; Works with Claude, a local model, a custom loop — anything that can read a file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It's diffable.&lt;/strong&gt; Version it with git and watch the agent's understanding evolve.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Vectors are great when you have a large corpus to search. The &lt;em&gt;identity and curated-memory&lt;/em&gt; layer is small and benefits more from being legible than from being embedded.&lt;/p&gt;

&lt;h2&gt;
  
  
  The one trick that makes it real
&lt;/h2&gt;

&lt;p&gt;Write it down or it didn't happen. "Mental notes" don't survive a session restart — files do. The single most important rule in &lt;code&gt;AGENTS.md&lt;/code&gt; is: when you learn something durable, &lt;em&gt;write it to a file now&lt;/em&gt;. Everything above is just giving that instinct a place to put things.&lt;/p&gt;




&lt;p&gt;I packaged this whole thing — the template files, a longer guide on each layer, and a fully worked example agent ("Pip," a research assistant with the personality and all four memory types filled in so you can see a finished one rather than blanks) — as a drop-in kit. If you'd rather copy a working setup than build it from scratch: &lt;strong&gt;&lt;a href="https://altezza6.gumroad.com/l/ai-soul-kit" rel="noopener noreferrer"&gt;AI Soul Kit&lt;/a&gt;&lt;/strong&gt; (Core ¥980 / Plus ¥3,800).&lt;/p&gt;

&lt;p&gt;But honestly, the architecture above is the part that matters. Steal it.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>agents</category>
      <category>machinelearning</category>
    </item>
  </channel>
</rss>
