{"id":6776,"date":"2026-07-09T04:20:48","date_gmt":"2026-07-08T21:20:48","guid":{"rendered":"https:\/\/daiilynews.cu.ma\/?p=6776"},"modified":"2026-07-09T04:20:48","modified_gmt":"2026-07-08T21:20:48","slug":"the-evolving-agent-how-jean2-learns-across-sessions","status":"publish","type":"post","link":"https:\/\/daiilynews.cu.ma\/?p=6776","title":{"rendered":"The Evolving Agent: How Jean2 Learns Across Sessions"},"content":{"rendered":"<p> <br \/>\n<br \/>\n                I&#8217;ve been coding with AI agents for about two years. Every major one. Cursor, Copilot, Codex, OpenCode. They&#8217;re good at generating code. They all share one problem.<\/p>\n<p>They forget everything.<\/p>\n<p>You finish a session, close the window, and the agent resets. Next time you open it, you&#8217;re starting from zero. &#8220;We use pnpm, not npm.&#8221; &#8220;The database is SQLite, not Postgres.&#8221; &#8220;Don&#8217;t touch the migrations folder.&#8221; You repeat yourself. Every. Single. Time.<\/p>\n<p>Some tools added memory features. Usually as an afterthought. A pinned file. A custom instruction. A context window that grows until it hits a wall and everything old gets silently dropped.<\/p>\n<p>I didn&#8217;t want a bigger context window. I wanted an agent that accumulates knowledge the way a colleague does. Not by being retrained. By taking notes, writing down what it learned, and reading those notes next time.<\/p>\n<p>That&#8217;s what Jean2 can do. Not through fine-tuning. Not through vector embeddings. Through files on disk that the agent reads and writes itself.<\/p>\n<p>But here&#8217;s the thing: none of this is on by default. By default, Jean2 is as bare as Codex or OpenCode. A blank prompt. No memory. No skills. No session search. You opt in to each layer in workspace settings. That&#8217;s the point. You build the agent you want, layer by layer.<\/p>\n<p>  The Four Layers<\/p>\n<p>If you turn them on, Jean2&#8217;s agent has four knowledge layers that persist across sessions. They&#8217;re not features bolted on top. They&#8217;re part of the system prompt that gets composed every time a session starts.<\/p>\n<p>  1. Workspace Memory<\/p>\n<p>Turn on workspace memory in workspace settings, and the workspace gets two files: MEMORY.md for shared knowledge and USER.md for your personal preferences within that workspace. Both live at \/.jean2\/.<\/p>\n<p>The concept is simple. Shared knowledge that&#8217;s useful for any agent working in that workspace. &#8220;We use pnpm.&#8221; &#8220;The database is SQLite.&#8221; &#8220;Don&#8217;t touch the migrations folder.&#8221; Whatever agent you bring in, coding specialist, reviewer, docs writer, they all get the same context.<\/p>\n<p># Workspace Memory<\/p>\n<p>&#8211; Build system: pnpm (not npm, not yarn)<br \/>\n&#8211; Database: SQLite via bun:sqlite<br \/>\n&#8211; Test runner: bun:test for server\/tools, vitest for client<br \/>\n&#8211; Never modify files in packages\/sdk without updating version.ts<br \/>\n&#8211; The migrations folder is managed by a separate script. Don&#8217;t auto-generate migrations.<\/p>\n<p>    Enter fullscreen mode<\/p>\n<p>    Exit fullscreen mode<\/p>\n<p>The agent writes this itself. You don&#8217;t manage it manually. When it learns something worth remembering, it saves it. When it makes a mistake and you correct it, it saves the correction.<\/p>\n<p>It&#8217;s not fancy. There&#8217;s no vector database, no embedding pipeline. It&#8217;s a markdown file on disk. And it works.<\/p>\n<p>  2. Agent Memory<\/p>\n<p>Same concept. Same two files: MEMORY.md and USER.md. Different scope.<\/p>\n<p>Each agent in Jean2 has its own home directory: ~\/.jean2\/agents\/\/. The memory lives there. This is where the agent evolves its role. Its specialization. Its understanding of how it should work.<\/p>\n<p>Workspace memory is shared context: &#8220;this project uses pnpm.&#8221; Agent memory is identity: &#8220;I am the TypeScript specialist, and here&#8217;s what I&#8217;ve learned about how Daniel likes his code.&#8221; It travels with the agent across every workspace it participates in.<\/p>\n<p>The agent maintains these with the agent_memory tool. Same mechanism as workspace memory, just a different relationship to the knowledge.<\/p>\n<p>  3. Skills<\/p>\n<p>Same split as memory. Workspace scope, agent scope.<\/p>\n<p>Workspace skills live in \/.agents\/skills\/. Shared playbooks for any agent working in that workspace. &#8220;This is how we deploy.&#8221; &#8220;This is our code review process.&#8221; Whatever agent you bring in picks them up.<\/p>\n<p>Agent skills live in the agent&#8217;s home directory. They travel with the agent&#8217;s role. &#8220;This is how I debug TypeScript.&#8221; &#8220;This is my approach to refactoring.&#8221; They belong to the agent, not the project.<\/p>\n<p>Both are SKILL.md files. Procedural playbooks the agent can discover and load when relevant. The skill tool lets it read existing skills. The skill_manage tool lets it create new ones. You have to enable skill management for the agent to use them.<\/p>\n<p>Here&#8217;s what that looks like in practice:<\/p>\n<p>You&#8217;re working on a deployment issue. The agent figures out the right Docker config through trial and error.<br \/>\nAfter the third time, it notices a pattern. &#8220;Every time we deploy, I need to check these three things in this order.&#8221;<br \/>\nIt writes a deployment-checklist.md skill.<br \/>\nNext deployment, different project, different session. It loads that skill and skips the trial and error.<\/p>\n<p># Deployment Checklist<\/p>\n<p>## When to Use<br \/>\nBefore deploying to production or staging.<\/p>\n<p>## Steps<br \/>\n1. Run `bun run typecheck`. Must pass.<br \/>\n2. Run `bun run lint`. Must pass.<br \/>\n3. Run `bun run test`. All suites.<br \/>\n4. Check `packages\/server\/src\/version.ts` matches changelog.<br \/>\n5. Verify the binary builds locally: `bun run build:bin`.<\/p>\n<p>    Enter fullscreen mode<\/p>\n<p>    Exit fullscreen mode<\/p>\n<p>That&#8217;s a real skill from my own setup. The agent wrote it. I didn&#8217;t ask it to. It noticed the pattern and saved it.<\/p>\n<p>  4. Session Search<\/p>\n<p>Same split. Workspace scope, agent scope.<\/p>\n<p>Workspace scope: any preconfig or agent working in a workspace can search through all sessions in that workspace. &#8220;Did someone already solve this in this project?&#8221;<\/p>\n<p>Agent scope: the agent can search through sessions it participated in, regardless of which workspace they happened in. &#8220;Have I seen this kind of problem before, anywhere?&#8221;<\/p>\n<p>One tool, session_search, powered by SQLite FTS5. Turn it on, and the agent searches its own history:<\/p>\n<p>&#8220;Last week I worked on a WebSocket reconnection bug. Let me search for that.&#8221;<\/p>\n<p>The agent finds the relevant session, reads what it tried, what worked, what didn&#8217;t. Then applies that knowledge to the current problem. Without you having to explain the history.<\/p>\n<p>  How They Connect<\/p>\n<p>The four layers don&#8217;t exist in isolation. They feed each other.<\/p>\n<p>Memory tells the agent what to remember.<\/p>\n<p>Skills tell the agent how to do things.<\/p>\n<p>Session Search gives the agent experience to draw from.<\/p>\n<p>Preconfigs let you swap the brain. Different model, different prompt, different tool set. While keeping all the accumulated knowledge.<\/p>\n<p>The result is an agent that gets better the more you use it. Not because the model improved. Because the files got richer.<\/p>\n<p>  Day 1 vs Day 30<\/p>\n<p>On day 1, your Jean2 agent is a blank slate. It knows nothing about your project, your preferences, or your workflow. It&#8217;s capable, same model, same tools, but it has no context. And it stays that way unless you choose to evolve it.<\/p>\n<p>On day 30:<\/p>\n<p>It knows your build system, your test commands, your code conventions.<br \/>\nIt has skills for recurring tasks. Deployment checklists, code review patterns, common debugging steps.<br \/>\nIt can search past sessions for solutions to similar problems.<br \/>\nIt knows your personal preferences across projects.<\/p>\n<p>The model didn&#8217;t change. The knowledge accumulated. On disk. In files you can read, edit, version control, and share.<\/p>\n<p>That is what &#8220;evolving agent&#8221; means. Not a model that retrains itself. An agent that takes notes. But only because you opted in. You could also leave it bare and it would work like any other coding agent.<\/p>\n<p>  What&#8217;s Next<\/p>\n<p>Jean2 is at v1.1.0. Still in active development, but very usable. I&#8217;ve been coding with it every day for months. The agent that helps me today is noticeably better than the one I started with, because it&#8217;s been accumulating skills and memory the whole time.<\/p>\n<p>If this sounds interesting, try it out. Got questions about how memory or skills work? Join the Discord or hit me up at @danielbilekq0.<\/p>\n<p>This post originally appeared on jean2.ai. Star the project on GitHub.<\/p>\n<p><br \/>\n<br \/><a href=\"https:\/\/dev.to\/danielbilek\/the-evolving-agent-how-jean2-learns-across-sessions-2m98\">Source link <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>I&#8217;ve been coding with AI agents for about two years. Every major one. Cursor, Copilot, Codex, OpenCode. They&#8217;re good at generating code. They all share one problem. They forget everything. You finish a session, close the window, and the agent resets. Next time you open it, you&#8217;re starting from zero. &#8220;We use pnpm, not npm.&#8221; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":6777,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[676],"tags":[835,761,765,762,1584,763,764,937,793,760],"class_list":["post-6776","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tech-ai","tag-ai","tag-coding","tag-community","tag-development","tag-devtools","tag-engineering","tag-inclusive","tag-opensource","tag-productivity","tag-software"],"_links":{"self":[{"href":"https:\/\/daiilynews.cu.ma\/index.php?rest_route=\/wp\/v2\/posts\/6776","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/daiilynews.cu.ma\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/daiilynews.cu.ma\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/daiilynews.cu.ma\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/daiilynews.cu.ma\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=6776"}],"version-history":[{"count":0,"href":"https:\/\/daiilynews.cu.ma\/index.php?rest_route=\/wp\/v2\/posts\/6776\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/daiilynews.cu.ma\/index.php?rest_route=\/wp\/v2\/media\/6777"}],"wp:attachment":[{"href":"https:\/\/daiilynews.cu.ma\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6776"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/daiilynews.cu.ma\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=6776"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/daiilynews.cu.ma\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=6776"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}