<?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: Daniel Bílek</title>
    <description>The latest articles on DEV Community by Daniel Bílek (@danielbilek).</description>
    <link>https://dev.to/danielbilek</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%2F3728743%2Fdb1253a2-763b-44ad-af41-ea56db7dd964.png</url>
      <title>DEV Community: Daniel Bílek</title>
      <link>https://dev.to/danielbilek</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/danielbilek"/>
    <language>en</language>
    <item>
      <title>No Baked-In Behavior: Why Your AI Agent's System Prompt Should Be Yours</title>
      <dc:creator>Daniel Bílek</dc:creator>
      <pubDate>Sat, 11 Jul 2026 19:45:26 +0000</pubDate>
      <link>https://dev.to/danielbilek/no-baked-in-behavior-why-your-ai-agents-system-prompt-should-be-yours-10o2</link>
      <guid>https://dev.to/danielbilek/no-baked-in-behavior-why-your-ai-agents-system-prompt-should-be-yours-10o2</guid>
      <description>&lt;p&gt;Every AI coding agent ships with baked-in behavior. Hidden system prompts you can't see. Tools you can't remove. Steering baked in by the company that made it.&lt;/p&gt;

&lt;p&gt;It's just how these products work. Batteries included.&lt;/p&gt;

&lt;p&gt;Claude Code has a system prompt. A long one. It tells the agent how to behave, what to prioritize, what to avoid. It's not exposed in the product. You can dig it out of the npm package if you know where to look, but you can't change it. Cursor has tool definitions and behavior rules that shape every interaction. Copilot has its own set of baked-in instructions.&lt;/p&gt;

&lt;p&gt;And these prompts are &lt;em&gt;good&lt;/em&gt;. They're written by smart people who understand the model. They make the agent useful out of the box.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;But they're not &lt;em&gt;yours&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  The Problem with Baked-In Behavior
&lt;/h3&gt;

&lt;p&gt;I think we've all been there. The agent does something weird and you don't know why. Was it your prompt? Something you can't see? A tool description that's steering the model in a direction you didn't ask for?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You're debugging a black box.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Here's what actually happens:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;You can't debug behavior.&lt;/strong&gt; The agent does something unexpected and you have no way to trace it back to the instruction that caused it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Your prompts fight theirs.&lt;/strong&gt; You say "always use pnpm" and it uses npm anyway. Why? Because somewhere in the baked-in prompt, something overrides your preference in certain contexts. You can't find the conflict because you can't see the other instruction.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;You can't remove behavior you don't want.&lt;/strong&gt; Maybe you don't want it to run tests after every change. Maybe you don't want commit suggestions. If it's baked in, you're stuck.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;You can't tell what's the model and what's the product.&lt;/strong&gt; Did the agent recommend that library because it's good, or because a baked-in instruction told it to? You can't distinguish model knowledge from product steering.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  What Jean2 Does Differently
&lt;/h3&gt;

&lt;p&gt;Jean2 ships with &lt;strong&gt;no default system prompt&lt;/strong&gt;. No default tools. No fixed agent personality.&lt;/p&gt;

&lt;p&gt;The binary is blank by design. When you start a session, the system prompt is composed from pieces &lt;em&gt;you&lt;/em&gt; control.&lt;br&gt;
Let me walk through each piece.&lt;/p&gt;
&lt;h4&gt;
  
  
  Preconfig Prompts
&lt;/h4&gt;

&lt;p&gt;A preconfig is a saved agent configuration: model, tools, prompt, skills. The system prompt in a preconfig is &lt;em&gt;the&lt;/em&gt; core prompt for that agent. You write it. You see it. You change it.&lt;/p&gt;

&lt;p&gt;No hidden instructions. What you write is what the agent gets.&lt;/p&gt;
&lt;h4&gt;
  
  
  Workspace Instructions (AGENTS.md)
&lt;/h4&gt;

&lt;p&gt;Every workspace can have an &lt;code&gt;AGENTS.md&lt;/code&gt; file at its root. Project-specific instructions, included in the system prompt automatically:&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;# AGENTS.md&lt;/span&gt;

&lt;span class="gu"&gt;## Build Commands&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="sb"&gt;`bun run build`&lt;/span&gt;: build all packages
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="sb"&gt;`bun run test`&lt;/span&gt;: run all tests

&lt;span class="gu"&gt;## Code Style&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Use &lt;span class="sb"&gt;`import type`&lt;/span&gt; for type-only imports
&lt;span class="p"&gt;-&lt;/span&gt; 2-space indentation
&lt;span class="p"&gt;-&lt;/span&gt; Single quotes for strings

&lt;span class="gu"&gt;## Don't&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Don't modify packages/sdk/src/version.ts without updating the version
&lt;span class="p"&gt;-&lt;/span&gt; Don't run the server without asking first
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It's version-controlled with your code. Anyone on your team gets the same instructions.&lt;/p&gt;

&lt;h4&gt;
  
  
  Workspace Memory
&lt;/h4&gt;

&lt;p&gt;The workspace &lt;code&gt;MEMORY.md&lt;/code&gt;. Facts the agent learned and saved. "We use pnpm", "the database is SQLite", "tests run with bun:test". Tell it once, it writes it down, it knows forever.&lt;/p&gt;

&lt;h4&gt;
  
  
  Agent Memory
&lt;/h4&gt;

&lt;p&gt;Your personal agent memory. &lt;code&gt;USER.md&lt;/code&gt; and &lt;code&gt;MEMORY.md&lt;/code&gt; from the agent's home directory. Preferences and knowledge that travel with the agent across projects.&lt;/p&gt;

&lt;h4&gt;
  
  
  Skills
&lt;/h4&gt;

&lt;p&gt;Any skills the agent loads. Skills are playbooks: deployment checklists, code review standards, debugging workflows. Written by the agent, or by you.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Full Composition
&lt;/h3&gt;

&lt;p&gt;Here's what the prompt assembly actually looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Preconfig System Prompt]
  ↓
+ [AGENTS.md from workspace root]
  ↓
+ [Workspace MEMORY.md]
  ↓
+ [Agent USER.md + MEMORY.md]
  ↓
+ [Loaded Skills]
  ↓
+ [Session Search guidance + Skill management guidance]
  ↓
= Final System Prompt sent to LLM
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Every piece is a file on disk. Readable, editable, version-controllable. No hidden layers.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Why This Matters in Practice
&lt;/h3&gt;

&lt;p&gt;Let me give you a concrete example. I was using a coding agent (not Jean2) and it kept adding &lt;code&gt;console.log&lt;/code&gt; statements to debug code. Every session, same thing. I'd tell it not to, it would agree, and 20 minutes later there's another &lt;code&gt;console.log&lt;/code&gt; in my codebase.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I couldn't fix it because I couldn't see what was causing it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;With Jean2, if the agent does something I don't want, I can:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Check the prompt.&lt;/strong&gt; Is there something in my preconfig or AGENTS.md that's ambiguous?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add a rule.&lt;/strong&gt; Write it to memory: "Never add console.log for debugging. Use the debugger or write proper tests."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Create a skill.&lt;/strong&gt; If it's a repeating pattern, make a "Debugging Standards" skill with specific steps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verify it's working.&lt;/strong&gt; The next session, check if the rule is in the prompt. It is. I can see it.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;With a baked-in agent, you can't do step 1. You can't see the prompt. You're guessing.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  The Counterargument
&lt;/h3&gt;

&lt;p&gt;Here's the fair pushback: most people don't want to write system prompts. They want an agent that works out of the box.&lt;/p&gt;

&lt;p&gt;True. That's where &lt;strong&gt;preconfigs&lt;/strong&gt; come in. A preconfig is a starting point. You can create one for coding, for research, for review. Someone can share a preconfig. A team can maintain a standard set.&lt;/p&gt;

&lt;p&gt;The difference is that the preconfig is &lt;em&gt;visible and replaceable&lt;/em&gt;. You can see exactly what instructions the agent has. Change any of them. Throw the whole thing out and start from scratch.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Baked-in means you can't. Preconfigs mean you can.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  The Transparency Test
&lt;/h3&gt;

&lt;p&gt;Here's a simple test. Ask your current AI agent:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What's in your system prompt? What instructions are you operating under right now?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Some will refuse to answer. Some will give a vague summary. Some will hallucinate. Almost none will show you the actual prompt.&lt;/p&gt;

&lt;p&gt;In Jean2, the answer is: check the files. It's all files on disk. You can read every word. Diff it between versions. Share it with your team.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's Next
&lt;/h3&gt;

&lt;p&gt;Jean2's approach isn't for everyone. If you want a turnkey coding agent that works perfectly the moment you install it, with zero configuration, Jean2 isn't that. Yet.&lt;/p&gt;

&lt;p&gt;But if you've ever been frustrated by an AI agent doing something you can't explain, can't debug, and can't change, Jean2 is built for you.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Every layer is yours. Every prompt is visible. Every behavior is configurable. No company can switch off a feature because of your region. There's no server to enforce from and no telemetry to check with. Your tools on your computer should be yours.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://jean2.ai" rel="noopener noreferrer"&gt;Try it out&lt;/a&gt; or &lt;a href="https://discord.com/invite/38sUKnUNPQ" rel="noopener noreferrer"&gt;join the Discord&lt;/a&gt;. I'm &lt;a href="https://twitter.com/danielbilekq0" rel="noopener noreferrer"&gt;@danielbilekq0&lt;/a&gt; if you want to argue about it.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This post originally appeared on &lt;a href="https://jean2.ai/blog/2026-07-06-no-baked-in-behavior" rel="noopener noreferrer"&gt;jean2.ai&lt;/a&gt;. Star the project on &lt;a href="https://github.com/jean2ai/jean2" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>programming</category>
      <category>discuss</category>
    </item>
    <item>
      <title>The Evolving Agent: How Jean2 Learns Across Sessions</title>
      <dc:creator>Daniel Bílek</dc:creator>
      <pubDate>Wed, 08 Jul 2026 21:12:44 +0000</pubDate>
      <link>https://dev.to/danielbilek/the-evolving-agent-how-jean2-learns-across-sessions-2m98</link>
      <guid>https://dev.to/danielbilek/the-evolving-agent-how-jean2-learns-across-sessions-2m98</guid>
      <description>&lt;p&gt;I've been coding with AI agents for about two years. Every major one. Cursor, Copilot, Codex, OpenCode. They're good at generating code. They all share one problem.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;They forget everything.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You finish a session, close the window, and the agent resets. Next time you open it, you're starting from zero. "We use pnpm, not npm." "The database is SQLite, not Postgres." "Don't touch the migrations folder." You repeat yourself. Every. Single. Time.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;I didn't want a bigger context window. I wanted an agent that &lt;em&gt;accumulates knowledge&lt;/em&gt; the way a colleague does. Not by being retrained. By taking notes, writing down what it learned, and reading those notes next time.&lt;/p&gt;

&lt;p&gt;That's what Jean2 &lt;em&gt;can&lt;/em&gt; do. Not through fine-tuning. Not through vector embeddings. Through &lt;strong&gt;files on disk&lt;/strong&gt; that the agent reads and writes itself.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;But here'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 &lt;strong&gt;workspace settings&lt;/strong&gt;. That's the point. You build the agent you want, layer by layer.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  The Four Layers
&lt;/h3&gt;

&lt;p&gt;If you turn them on, Jean2's agent has four knowledge layers that persist across sessions. They're not features bolted on top. They're part of the system prompt that gets composed every time a session starts.&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Workspace Memory
&lt;/h4&gt;

&lt;p&gt;Turn on workspace memory in &lt;strong&gt;workspace settings&lt;/strong&gt;, and the workspace gets two files: &lt;code&gt;MEMORY.md&lt;/code&gt; for shared knowledge and &lt;code&gt;USER.md&lt;/code&gt; for your personal preferences within that workspace. Both live at &lt;code&gt;&amp;lt;workspace&amp;gt;/.jean2/&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The concept is simple. Shared knowledge that's useful for &lt;em&gt;any&lt;/em&gt; agent working in that workspace. "We use pnpm." "The database is SQLite." "Don't touch the migrations folder." Whatever agent you bring in, coding specialist, reviewer, docs writer, they all get the same context.&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;# Workspace Memory&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; Build system: pnpm (not npm, not yarn)
&lt;span class="p"&gt;-&lt;/span&gt; Database: SQLite via bun:sqlite
&lt;span class="p"&gt;-&lt;/span&gt; Test runner: bun:test for server/tools, vitest for client
&lt;span class="p"&gt;-&lt;/span&gt; Never modify files in packages/sdk without updating version.ts
&lt;span class="p"&gt;-&lt;/span&gt; The migrations folder is managed by a separate script. Don't auto-generate migrations.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agent writes this itself. You don'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.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It's not fancy. There's no vector database, no embedding pipeline. It's a markdown file on disk. And it works.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  2. Agent Memory
&lt;/h4&gt;

&lt;p&gt;Same concept. Same two files: &lt;code&gt;MEMORY.md&lt;/code&gt; and &lt;code&gt;USER.md&lt;/code&gt;. Different scope.&lt;/p&gt;

&lt;p&gt;Each agent in Jean2 has its own home directory: &lt;code&gt;~/.jean2/agents/&amp;lt;agent-name&amp;gt;/&lt;/code&gt;. The memory lives there. This is where the agent evolves its &lt;em&gt;role&lt;/em&gt;. Its specialization. Its understanding of how it should work.&lt;/p&gt;

&lt;p&gt;Workspace memory is shared context: "this project uses pnpm." Agent memory is identity: "I am the TypeScript specialist, and here's what I've learned about how Daniel likes his code." It travels with the agent across every workspace it participates in.&lt;/p&gt;

&lt;p&gt;The agent maintains these with the &lt;code&gt;agent_memory&lt;/code&gt; tool. Same mechanism as workspace memory, just a different relationship to the knowledge.&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Skills
&lt;/h4&gt;

&lt;p&gt;Same split as memory. Workspace scope, agent scope.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Workspace skills&lt;/strong&gt; live in &lt;code&gt;&amp;lt;workspace&amp;gt;/.agents/skills/&lt;/code&gt;. Shared playbooks for any agent working in that workspace. "This is how we deploy." "This is our code review process." Whatever agent you bring in picks them up.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agent skills&lt;/strong&gt; live in the agent's home directory. They travel with the agent's role. "This is how &lt;em&gt;I&lt;/em&gt; debug TypeScript." "This is my approach to refactoring." They belong to the agent, not the project.&lt;/p&gt;

&lt;p&gt;Both are &lt;code&gt;SKILL.md&lt;/code&gt; files. Procedural playbooks the agent can discover and load when relevant. The &lt;code&gt;skill&lt;/code&gt; tool lets it read existing skills. The &lt;code&gt;skill_manage&lt;/code&gt; tool lets it &lt;em&gt;create new ones&lt;/em&gt;. You have to enable skill management for the agent to use them.&lt;/p&gt;

&lt;p&gt;Here's what that looks like in practice:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You're working on a deployment issue. The agent figures out the right Docker config through trial and error.&lt;/li&gt;
&lt;li&gt;After the third time, it notices a pattern. "Every time we deploy, I need to check these three things in this order."&lt;/li&gt;
&lt;li&gt;It writes a &lt;code&gt;deployment-checklist.md&lt;/code&gt; skill.&lt;/li&gt;
&lt;li&gt;Next deployment, different project, different session. It loads that skill and skips the trial and error.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Deployment Checklist&lt;/span&gt;

&lt;span class="gu"&gt;## When to Use&lt;/span&gt;
Before deploying to production or staging.

&lt;span class="gu"&gt;## Steps&lt;/span&gt;
&lt;span class="p"&gt;1.&lt;/span&gt; Run &lt;span class="sb"&gt;`bun run typecheck`&lt;/span&gt;. Must pass.
&lt;span class="p"&gt;2.&lt;/span&gt; Run &lt;span class="sb"&gt;`bun run lint`&lt;/span&gt;. Must pass.
&lt;span class="p"&gt;3.&lt;/span&gt; Run &lt;span class="sb"&gt;`bun run test`&lt;/span&gt;. All suites.
&lt;span class="p"&gt;4.&lt;/span&gt; Check &lt;span class="sb"&gt;`packages/server/src/version.ts`&lt;/span&gt; matches changelog.
&lt;span class="p"&gt;5.&lt;/span&gt; Verify the binary builds locally: &lt;span class="sb"&gt;`bun run build:bin`&lt;/span&gt;.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's a real skill from my own setup. The agent wrote it. I didn't ask it to. It noticed the pattern and saved it.&lt;/p&gt;

&lt;h4&gt;
  
  
  4. Session Search
&lt;/h4&gt;

&lt;p&gt;Same split. Workspace scope, agent scope.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Workspace scope&lt;/strong&gt;: any preconfig or agent working in a workspace can search through all sessions in that workspace. "Did someone already solve this in this project?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agent scope&lt;/strong&gt;: the agent can search through sessions it participated in, regardless of which workspace they happened in. "Have I seen this kind of problem before, anywhere?"&lt;/p&gt;

&lt;p&gt;One tool, &lt;code&gt;session_search&lt;/code&gt;, powered by SQLite FTS5. Turn it on, and the agent searches its own history:&lt;/p&gt;

&lt;p&gt;"Last week I worked on a WebSocket reconnection bug. Let me search for that."&lt;/p&gt;

&lt;p&gt;The agent finds the relevant session, reads what it tried, what worked, what didn't. Then applies that knowledge to the current problem. Without you having to explain the history.&lt;/p&gt;

&lt;h3&gt;
  
  
  How They Connect
&lt;/h3&gt;

&lt;p&gt;The four layers don't exist in isolation. They feed each other.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Memory&lt;/strong&gt; tells the agent &lt;em&gt;what&lt;/em&gt; to remember.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skills&lt;/strong&gt; tell the agent &lt;em&gt;how&lt;/em&gt; to do things.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Session Search&lt;/strong&gt; gives the agent &lt;em&gt;experience&lt;/em&gt; to draw from.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Preconfigs&lt;/strong&gt; let you swap the &lt;em&gt;brain&lt;/em&gt;. Different model, different prompt, different tool set. While keeping all the accumulated knowledge.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;The result is an agent that gets better the more you use it. Not because the model improved. Because &lt;em&gt;the files got richer&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  Day 1 vs Day 30
&lt;/h3&gt;

&lt;p&gt;On day 1, your Jean2 agent is a blank slate. It knows nothing about your project, your preferences, or your workflow. It's capable, same model, same tools, but it has no context. And it stays that way unless you choose to evolve it.&lt;/p&gt;

&lt;p&gt;On day 30:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It knows your build system, your test commands, your code conventions.&lt;/li&gt;
&lt;li&gt;It has skills for recurring tasks. Deployment checklists, code review patterns, common debugging steps.&lt;/li&gt;
&lt;li&gt;It can search past sessions for solutions to similar problems.&lt;/li&gt;
&lt;li&gt;It knows your personal preferences across projects.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The model didn't change. The knowledge accumulated. On disk. In files you can read, edit, version control, and share.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;That&lt;/em&gt; is what "evolving agent" 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.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's Next
&lt;/h3&gt;

&lt;p&gt;Jean2 is at &lt;strong&gt;v1.1.0&lt;/strong&gt;. Still in active development, but very usable. I'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's been accumulating skills and memory the whole time.&lt;/p&gt;

&lt;p&gt;If this sounds interesting, &lt;a href="https://jean2.ai" rel="noopener noreferrer"&gt;try it out&lt;/a&gt;. Got questions about how memory or skills work? &lt;a href="https://discord.com/invite/38sUKnUNPQ" rel="noopener noreferrer"&gt;Join the Discord&lt;/a&gt; or hit me up at &lt;a href="https://twitter.com/danielbilekq0" rel="noopener noreferrer"&gt;@danielbilekq0&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This post originally appeared on &lt;a href="https://jean2.ai/blog/2026-07-06-evolving-agent" rel="noopener noreferrer"&gt;jean2.ai&lt;/a&gt;. Star the project on &lt;a href="https://github.com/jean2ai/jean2" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>devtools</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Building a LEGO-like remote Agent - Jean2</title>
      <dc:creator>Daniel Bílek</dc:creator>
      <pubDate>Tue, 31 Mar 2026 20:17:51 +0000</pubDate>
      <link>https://dev.to/danielbilek/building-a-lego-like-remote-agent-jean2-17f9</link>
      <guid>https://dev.to/danielbilek/building-a-lego-like-remote-agent-jean2-17f9</guid>
      <description>&lt;p&gt;I'm a huge fan of coding agents. My daily consumption is at about &lt;strong&gt;30 million tokens&lt;/strong&gt; and growing. I started on Cursor, fell in love with OpenCode, got into customizing setups with MCPs, Skills, and subagent orchestration — all while daily-driving GLM, Minimax, GPT models, and everything I could get my hands on at OpenRouter just for the new and shiny.&lt;/p&gt;

&lt;p&gt;I love squeezing the best possible answers from small models with the right prompts. At some point, I wanted to use OpenCode for &lt;em&gt;everything&lt;/em&gt;, not just coding.&lt;/p&gt;

&lt;p&gt;And then I kinda hit a wall.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Wall
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Baked-in steering
&lt;/h3&gt;

&lt;p&gt;Coding agents come with baked-in prompts that already steer them in a certain direction — great for an out-of-the-box solution, not so great when you want full control. You can create your own agent with custom steering, but it's always &lt;strong&gt;appended&lt;/strong&gt; to whatever the system's baked-in prompt already says.&lt;/p&gt;

&lt;h3&gt;
  
  
  Rigid tooling
&lt;/h3&gt;

&lt;p&gt;Built-in tools are already great, but you can't alter, remove, or modify them — not their prompts, not the tools themselves. Adding your own usually doesn't feel the same. These systems aren't really built around the concept of &lt;em&gt;bringing your own tools&lt;/em&gt;. Want an extra capability? Bring an MCP or a skill.&lt;/p&gt;

&lt;h3&gt;
  
  
  Session management
&lt;/h3&gt;

&lt;p&gt;The TUI is great, but managing multiple projects or conversations not tied to any specific project just wasn't a comfortable experience. There are now GUI and Web options that handle it much better, but at the time, there weren't really stable, comfortable choices.&lt;/p&gt;

&lt;h3&gt;
  
  
  Multi-device continuity
&lt;/h3&gt;

&lt;p&gt;Throw the phone into the mix, and it wasn't really there yet either. I just wanted to be able to &lt;strong&gt;create a spec doc with the agent on my phone&lt;/strong&gt;, hand it off for execution, and review it on my laptop — seamlessly.&lt;/p&gt;




&lt;h2&gt;
  
  
  Enter Jean2
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;(Why Jean2 and not just Jean? Because Jean was kinda "not good.")&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;So I started building. Here's what came out of it:&lt;/p&gt;

&lt;h3&gt;
  
  
  Always running, seamless experience
&lt;/h3&gt;

&lt;p&gt;Jean2 runs as a &lt;strong&gt;daemon with sockets and HTTP&lt;/strong&gt;. The goal is a seamless experience — open a desktop client on your laptop, prompt what you want, pick up your phone, watch progress, and handle permissions. You can close the clients and leave it running with an &lt;strong&gt;80–100 MB memory footprint&lt;/strong&gt; across 3 different projects.&lt;/p&gt;

&lt;h3&gt;
  
  
  Absolutely and completely dumb
&lt;/h3&gt;

&lt;p&gt;No baked-in prompts. Your agent system message and your &lt;code&gt;AGENT.md&lt;/code&gt; files are the &lt;em&gt;only&lt;/em&gt; things that form a system message. This means you're not limited to building "your coding agent" — you can build &lt;strong&gt;"your [anything] agent."&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  No baked-in tools
&lt;/h3&gt;

&lt;p&gt;Well — that's not &lt;em&gt;completely&lt;/em&gt; true. Technically, handling MCP, skill lookup, and subagents are tools, but nothing else is baked in. Tools are completely &lt;strong&gt;language-agnostic&lt;/strong&gt;. They're spawned on demand and undergo an explicit, upfront security check that &lt;em&gt;you&lt;/em&gt; define (if you want). You can yank anything out and drop anything in. All input is sent to tools via &lt;strong&gt;JSON stdin&lt;/strong&gt;, and all results are expected in &lt;strong&gt;JSON stdout&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;There's also a built-in &lt;strong&gt;visualization property&lt;/strong&gt; that lets the tool decide how to display its results: diff, code, markdown, table, todo list — you name it. (These data are omitted when making API requests to the LLM, naturally.)&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; You are in control of the tool definition and its description. If you notice a model not using a tool properly, you can just change it.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;Jean2 is still in &lt;strong&gt;active development&lt;/strong&gt; — but it's very usable. I've been coding with it for over a week.&lt;/p&gt;

&lt;p&gt;The next steps are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SDK &amp;amp; structured output&lt;/strong&gt; — so you can create your own apps with agent orchestration&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multimodal model support&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Expanded tool offering&lt;/strong&gt; — fal.ai tools for image generation seem like a natural fit&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;If this sounds even a little interesting, check out &lt;a href="https://jean2.ai/" rel="noopener noreferrer"&gt;jean2.ai&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Got questions, ideas for tools, or tried it out and got lost in the setup? Hit me up at &lt;a href="https://x.com/danielbilekq0" rel="noopener noreferrer"&gt;@danielbilekq0&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>vibecoding</category>
    </item>
  </channel>
</rss>
