{
  "@context": "https://schema.org",
  "@id": "https://aggr.aymericbeaumet.com/items/dbreunig-com/2026-02-11-how-system-prompts-define-agent-behavior/#webpage",
  "@type": [
    "WebPage",
    "ArchiveComponent"
  ],
  "articleBody": "*This post was [co-authored with Srihari Sriraman](https://blog.nilenso.com/blog/2026/02/10/how-system-prompts-define-agent-behaviiour/)*\n\nCoding agents are fascinating to study. They help us build software in a new way, while themselves exemplifying a novel approach to architecting and implementing software. At their core is an AI model, but wrapped around it is a mix of code, tools, and prompts: the harness.\n\nA critical part of this harness is the system prompt, the baseline instructions for the application. This context is present in every call to the model, no matter what skills, tools, or instructions are loaded. The system prompt is always present, defining a core set of behaviors, strategies, and tone.\n\nOnce you start analyzing agent design and behavior, a question emerges: how much does the system prompt actually determine an agent’s effectiveness? We take for granted that the model is the most important component of any agent, but how much can a system prompt contribute? Could a great system prompt paired with a mediocre model challenge a mediocre prompt paired with a frontier model?\n\nTo find out, we obtained and analyzed system prompts from six different coding agents. We clustered them semantically, comparing where their instructions diverged and where they converged. Then we swapped system prompts between agents and observed how behavior changed.\n\nSystem prompts matter far more than most assume. A given model sets the theoretical ceiling of an agent’s performance, but the system prompt determines whether this peak is reached.\n\n* * *\n\n### The Variety of System Prompts\n\nTo understand the range of system prompts, we looked at six CLI coding agents: Claude Code, Cursor, Gemini CLI, Codex CLI, OpenHands, and Kimi CLI. Each performs the same basic function: given a task they gather information, understands the code base, writes code, tracks their progress, and runs commands. But despite these similarities, the system prompts are *quite* different.\n\n![Waffle chart comparisons of 6 coding agent system prompts](https://www.dbreunig.com/img/resized/waffle_comparison.jpg)\n\nTry It Out\n\nWe’re analyzing [exfiltrated system prompts](https://github.com/asgeirtj/system_prompts_leaks), which we clean up and [host here](https://github.com/nilenso/long-prompts-analysis/tree/main/data/prompts/filtered)[^1]. Each of these is fed into [context-viewer](https://github.com/nilenso/context-viewer), a tool Srihari developed that chunks contexts in semantic components for exploration and analysis.\n\nLooking at the above visualizations, there is plenty of variety. Claude, Codex, Gemini, and OpenHands roughly prioritize the same instructions, but vary their distributions. Further, prompts for Claude Code and OpenHands both are less than half the length of prompts in Codex and Gemini.\n\nCursor’s and Kimi’s prompts are dramatically different. Here we’re looking at Cursor’s prompt that’s paired with GPT-5 ([Cursor uses slightly different prompts when hooked to different models](https://www.adiasg.com/blog/comparing-cursors-prompts-across-models)), and it spends over a third of its tokens on personality and steering instructions. Kimi CLI, meanwhile, contains zero workflow guidance, barely hints at personality instructions, and is the shortest prompt by far.\n\nGiven the similar interfaces of these apps, we’re left wondering: why are their system prompts so different?\n\nThere’s two main reasons the system prompts vary: *model calibration* and *user experience*.\n\nEach model has its own quirks, rough edges, and baseline behaviors. If the goal is to produce a measured, helpful TUI coding assistant, each system prompt will have to deal with and adjust for unique aspects of the underlying model to achieve this goal. This *model calibration* reins in problematic behavior.\n\nSystem prompts also vary because they specify slightly different *user experience*. Sure, they’re all text-only, terminal interfaces that explore and manipulate code. But some are more talkative, more autonomous, more direct, or require more detailed instructions. System prompts define this UX and, as we’ll see later, we can make a coding agent “feel” like a different agent just by swapping out the system prompt.\n\nWe can get a glimpse of these two functions together by looking at how a given system prompt changes over time, especially as new versions of models arrive. For example:\n\n![Claude's system prompt vascilates as new models are released, but trends steadily longer](https://www.dbreunig.com/img/resized/claude_over_time.jpg)\n\nTry It Out\n\nNote how the system prompt isn’t stable, nor growing in a straight line. It bounces around a bit, as the Claude Code team tweaks the prompt to both adjust new behaviors and smooth over the quirks of new models. Though the trend is a march upward, as the coding agent matures.\n\nIf you want to dive further into Claude Code’s prompt history, Mario Zechner has [an excellent site](https://cchistory.mariozechner.at) where he highlights the exact changes from version to version.\n\nGo Deeper\n\n* * *\n\n### The Common Jobs of a Coding Agent System Prompt\n\nWhile these prompts vary from tool to tool, there are many commonalities that each prompt features. There is clear evidence that these teams are [fighting the weights](https://www.dbreunig.com/2025/11/11/don-t-fight-the-weights.html): they use repeated instructions, all-caps admonishments, and stern warnings to adjust common behaviors. This shared effort suggests common patterns in their training datasets, which each has to mitigate.\n\nFor example, there are *many* notes about how these agents should use comments in their code. Cursor specifies that the model should, “not add comments for trivial or obvious code.” Claude states there should be no added comments, “unless the user asks you to.” Codex takes the same stance. Gemini instructions the model to, “Add code comments sparingly… NEVER talk to the user through comments.”\n\nThese consistent, repeated instructions are warranted. They fight against examples of conversation in code comments, present in countless codebases and Github repo. This behavior goes deep: we’ve even seen that Opus 4.5 will [reason in code comments if you turn off thinking](https://x.com/aidenybai/status/1993901129210712129).\n\nSystem prompts also repeatedly specify that tool calls should be parallel whenever possible. Claude should, “maximize use of parallel tool calls where possible.” Cursor is sternly told, “CRITICAL INSTRUCTION: involve all relevant tools concurrently… DEFAULT TO PARALLEL.” Kimi adopts all-caps as well, stating, “you are HIGHLY RECOMMENDED to make \\[tool calls\\] in parallel.”\n\nThis likley reflects the face that most post-training reasoning and agentic examples are *serial* in nature. This is perhaps easier to debug and a bit of delay when synthesizing these datasets isn’t a hinderence. However, in real world situations, users certainly appreciate the speed, so system prompts need to override this training.\n\nBoth of these examples of *fighting the weights* demonstrate how system prompts are used to smooth over the quirks of each model (which they pick up during training) and improve the user experience in an agentic coding application.\n\nMuch of what these prompts specify is shared; common adjustments, common desired behaviors, and common UX. But their differences notably affect application behavior.\n\n* * *\n\n### Do the Prompts Change the Agent?\n\nHelpfully, [OpenCode](https://opencode.ai) [allows users to specify custom system prompts](https://opencode.ai/docs/modes/#prompt). With this feature, we can drop in prompts from Kimi, Gemini, Codex and more, removing and swapping instructions to measure their contribution.\n\nWe gave SWE-Bench Pro test questions to two applications: two agents running the OpenCode harness, calling Opus 4.5, but with one one using the Claude Code system prompt and the other armed with Codex’s instructions.\n\nTime and time again, the agent workflows diverged immediately. For example:\n\n![Claude's system prompt defines a more iterative agent](https://www.dbreunig.com/img/resized/prompt_swap.jpg)\n\nThe Codex prompt produced a methodical, documentation-first approach: understand fully, then implement once. The Claude prompt produced an iterative approach: try something, see what breaks, fix it.\n\nThis pattern remains consistent over many SWE Bench problems. If we average the contexts for each model and system prompt pair, we get the following:\n\n![Swapping system prompts yielded different behavior for each model](https://www.dbreunig.com/img/resized/swe_bench_prompts.jpg)\n\nTry It Out\n\nAll prompt-model combinations correctly answered this subset of SWE Bench Pro questions. But *how* they suceeded was rather different. The system prompts shaped the workflows.\n\n* * *\n\n### System Prompts Deserve More Attention\n\nLast week, when Opus 4.6 and Codex 5.3 landed, people began putting them through the paces, trying to decide which would be their daily driver. Many tout the capabilities of one option over another, but just as often are complaints about approach, tone, or other discretionary choices. Further, it seems every week brings discussion of a new coding harness, especially for managing swarms of agents.\n\nThere is markedly less discussion about the system prompts that define the behaviors of these agents[^2]. System prompts define the UX and smooth over the rough edges of models. They’re given to the model with *every* instruction, yet we prefer to talk Opus vs. GPT-5.3 or Gastown vs. Pi.\n\nContext engineering starts with the system prompt.\n\n[^1]: Exfiltrated system prompts represent versions of the system prompt for a given session. It’s not 100% canonical, as many AI harnesses assemble system prompts from multiple snippets, given the task at hand. But given the consistent manner with which we can extrac these prompts, and comparing them with [public](https://platform.claude.com/docs/en/release-notes/system-prompts) [examples](https://github.com/openai/codex/blob/d452bb3ae5b5e0f715bba3a44d7d30a51b5f28ae/codex-rs/core/prompt.md), we feel they are sufficiently representative for this analysis.\n\n[^2]: Though you can use Mario’s [system prompt diff tool to explore the changes accompanying Opus 4.6’s release](https://cchistory.mariozechner.at/?from=2.1.31&to=2.1.34).\n",
  "authors": [
    "Drew Breunig"
  ],
  "captured_at": "2026-09-27T19:29:15.293681927+00:00",
  "category": "programming",
  "content_html": "<p><em>This post was <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://blog.nilenso.com/blog/2026/02/10/how-system-prompts-define-agent-behaviiour/\">co-authored with Srihari Sriraman</a></em></p>\n<p>Coding agents are fascinating to study. They help us build software in a new way, while themselves exemplifying a novel approach to architecting and implementing software. At their core is an AI model, but wrapped around it is a mix of code, tools, and prompts: the harness.</p>\n<p>A critical part of this harness is the system prompt, the baseline instructions for the application. This context is present in every call to the model, no matter what skills, tools, or instructions are loaded. The system prompt is always present, defining a core set of behaviors, strategies, and tone.</p>\n<p>Once you start analyzing agent design and behavior, a question emerges: how much does the system prompt actually determine an agent’s effectiveness? We take for granted that the model is the most important component of any agent, but how much can a system prompt contribute? Could a great system prompt paired with a mediocre model challenge a mediocre prompt paired with a frontier model?</p>\n<p>To find out, we obtained and analyzed system prompts from six different coding agents. We clustered them semantically, comparing where their instructions diverged and where they converged. Then we swapped system prompts between agents and observed how behavior changed.</p>\n<p>System prompts matter far more than most assume. A given model sets the theoretical ceiling of an agent’s performance, but the system prompt determines whether this peak is reached.</p>\n<hr />\n<h3>The Variety of System Prompts</h3>\n<p>To understand the range of system prompts, we looked at six CLI coding agents: Claude Code, Cursor, Gemini CLI, Codex CLI, OpenHands, and Kimi CLI. Each performs the same basic function: given a task they gather information, understands the code base, writes code, tracks their progress, and runs commands. But despite these similarities, the system prompts are <em>quite</em> different.</p>\n<p><picture class=\"article-picture article-picture-fallback\" style=\"--image-ratio:16 / 9\"><img src=\"https://www.dbreunig.com/img/resized/waffle_comparison.jpg\" alt=\"Waffle chart comparisons of 6 coding agent system prompts\" loading=\"eager\" decoding=\"async\" fetchpriority=\"high\" referrerpolicy=\"no-referrer\" class=\"progressive-image\"></picture></p>\n<p>Try It Out</p>\n<p>We’re analyzing <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/asgeirtj/system_prompts_leaks\">exfiltrated system prompts</a>, which we clean up and <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/nilenso/long-prompts-analysis/tree/main/data/prompts/filtered\">host here</a><sup class=\"footnote-ref\"><a href=\"#fn-1\" id=\"fnref-1\" data-footnote-ref>1</a></sup>. Each of these is fed into <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/nilenso/context-viewer\">context-viewer</a>, a tool Srihari developed that chunks contexts in semantic components for exploration and analysis.</p>\n<p>Looking at the above visualizations, there is plenty of variety. Claude, Codex, Gemini, and OpenHands roughly prioritize the same instructions, but vary their distributions. Further, prompts for Claude Code and OpenHands both are less than half the length of prompts in Codex and Gemini.</p>\n<p>Cursor’s and Kimi’s prompts are dramatically different. Here we’re looking at Cursor’s prompt that’s paired with GPT-5 (<a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://www.adiasg.com/blog/comparing-cursors-prompts-across-models\">Cursor uses slightly different prompts when hooked to different models</a>), and it spends over a third of its tokens on personality and steering instructions. Kimi CLI, meanwhile, contains zero workflow guidance, barely hints at personality instructions, and is the shortest prompt by far.</p>\n<p>Given the similar interfaces of these apps, we’re left wondering: why are their system prompts so different?</p>\n<p>There’s two main reasons the system prompts vary: <em>model calibration</em> and <em>user experience</em>.</p>\n<p>Each model has its own quirks, rough edges, and baseline behaviors. If the goal is to produce a measured, helpful TUI coding assistant, each system prompt will have to deal with and adjust for unique aspects of the underlying model to achieve this goal. This <em>model calibration</em> reins in problematic behavior.</p>\n<p>System prompts also vary because they specify slightly different <em>user experience</em>. Sure, they’re all text-only, terminal interfaces that explore and manipulate code. But some are more talkative, more autonomous, more direct, or require more detailed instructions. System prompts define this UX and, as we’ll see later, we can make a coding agent “feel” like a different agent just by swapping out the system prompt.</p>\n<p>We can get a glimpse of these two functions together by looking at how a given system prompt changes over time, especially as new versions of models arrive. For example:</p>\n<p><picture class=\"article-picture article-picture-fallback\" style=\"--image-ratio:16 / 9\"><img src=\"https://www.dbreunig.com/img/resized/claude_over_time.jpg\" alt=\"Claude&#39;s system prompt vascilates as new models are released, but trends steadily longer\" loading=\"lazy\" decoding=\"async\" fetchpriority=\"low\" referrerpolicy=\"no-referrer\" class=\"progressive-image\"></picture></p>\n<p>Try It Out</p>\n<p>Note how the system prompt isn’t stable, nor growing in a straight line. It bounces around a bit, as the Claude Code team tweaks the prompt to both adjust new behaviors and smooth over the quirks of new models. Though the trend is a march upward, as the coding agent matures.</p>\n<p>If you want to dive further into Claude Code’s prompt history, Mario Zechner has <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://cchistory.mariozechner.at\">an excellent site</a> where he highlights the exact changes from version to version.</p>\n<p>Go Deeper</p>\n<hr />\n<h3>The Common Jobs of a Coding Agent System Prompt</h3>\n<p>While these prompts vary from tool to tool, there are many commonalities that each prompt features. There is clear evidence that these teams are <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://www.dbreunig.com/2025/11/11/don-t-fight-the-weights.html\">fighting the weights</a>: they use repeated instructions, all-caps admonishments, and stern warnings to adjust common behaviors. This shared effort suggests common patterns in their training datasets, which each has to mitigate.</p>\n<p>For example, there are <em>many</em> notes about how these agents should use comments in their code. Cursor specifies that the model should, “not add comments for trivial or obvious code.” Claude states there should be no added comments, “unless the user asks you to.” Codex takes the same stance. Gemini instructions the model to, “Add code comments sparingly… NEVER talk to the user through comments.”</p>\n<p>These consistent, repeated instructions are warranted. They fight against examples of conversation in code comments, present in countless codebases and Github repo. This behavior goes deep: we’ve even seen that Opus 4.5 will <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://x.com/aidenybai/status/1993901129210712129\">reason in code comments if you turn off thinking</a>.</p>\n<p>System prompts also repeatedly specify that tool calls should be parallel whenever possible. Claude should, “maximize use of parallel tool calls where possible.” Cursor is sternly told, “CRITICAL INSTRUCTION: involve all relevant tools concurrently… DEFAULT TO PARALLEL.” Kimi adopts all-caps as well, stating, “you are HIGHLY RECOMMENDED to make [tool calls] in parallel.”</p>\n<p>This likley reflects the face that most post-training reasoning and agentic examples are <em>serial</em> in nature. This is perhaps easier to debug and a bit of delay when synthesizing these datasets isn’t a hinderence. However, in real world situations, users certainly appreciate the speed, so system prompts need to override this training.</p>\n<p>Both of these examples of <em>fighting the weights</em> demonstrate how system prompts are used to smooth over the quirks of each model (which they pick up during training) and improve the user experience in an agentic coding application.</p>\n<p>Much of what these prompts specify is shared; common adjustments, common desired behaviors, and common UX. But their differences notably affect application behavior.</p>\n<hr />\n<h3>Do the Prompts Change the Agent?</h3>\n<p>Helpfully, <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://opencode.ai\">OpenCode</a> <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://opencode.ai/docs/modes/#prompt\">allows users to specify custom system prompts</a>. With this feature, we can drop in prompts from Kimi, Gemini, Codex and more, removing and swapping instructions to measure their contribution.</p>\n<p>We gave SWE-Bench Pro test questions to two applications: two agents running the OpenCode harness, calling Opus 4.5, but with one one using the Claude Code system prompt and the other armed with Codex’s instructions.</p>\n<p>Time and time again, the agent workflows diverged immediately. For example:</p>\n<p><picture class=\"article-picture article-picture-fallback\" style=\"--image-ratio:16 / 9\"><img src=\"https://www.dbreunig.com/img/resized/prompt_swap.jpg\" alt=\"Claude&#39;s system prompt defines a more iterative agent\" loading=\"lazy\" decoding=\"async\" fetchpriority=\"low\" referrerpolicy=\"no-referrer\" class=\"progressive-image\"></picture></p>\n<p>The Codex prompt produced a methodical, documentation-first approach: understand fully, then implement once. The Claude prompt produced an iterative approach: try something, see what breaks, fix it.</p>\n<p>This pattern remains consistent over many SWE Bench problems. If we average the contexts for each model and system prompt pair, we get the following:</p>\n<p><picture class=\"article-picture article-picture-fallback\" style=\"--image-ratio:16 / 9\"><img src=\"https://www.dbreunig.com/img/resized/swe_bench_prompts.jpg\" alt=\"Swapping system prompts yielded different behavior for each model\" loading=\"lazy\" decoding=\"async\" fetchpriority=\"low\" referrerpolicy=\"no-referrer\" class=\"progressive-image\"></picture></p>\n<p>Try It Out</p>\n<p>All prompt-model combinations correctly answered this subset of SWE Bench Pro questions. But <em>how</em> they suceeded was rather different. The system prompts shaped the workflows.</p>\n<hr />\n<h3>System Prompts Deserve More Attention</h3>\n<p>Last week, when Opus 4.6 and Codex 5.3 landed, people began putting them through the paces, trying to decide which would be their daily driver. Many tout the capabilities of one option over another, but just as often are complaints about approach, tone, or other discretionary choices. Further, it seems every week brings discussion of a new coding harness, especially for managing swarms of agents.</p>\n<p>There is markedly less discussion about the system prompts that define the behaviors of these agents<sup class=\"footnote-ref\"><a href=\"#fn-2\" id=\"fnref-2\" data-footnote-ref>2</a></sup>. System prompts define the UX and smooth over the rough edges of models. They’re given to the model with <em>every</em> instruction, yet we prefer to talk Opus vs. GPT-5.3 or Gastown vs. Pi.</p>\n<p>Context engineering starts with the system prompt.</p>\n<section class=\"footnotes\" data-footnotes>\n<ol>\n<li id=\"fn-1\">\n<p>Exfiltrated system prompts represent versions of the system prompt for a given session. It’s not 100% canonical, as many AI harnesses assemble system prompts from multiple snippets, given the task at hand. But given the consistent manner with which we can extrac these prompts, and comparing them with <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://platform.claude.com/docs/en/release-notes/system-prompts\">public</a> <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/openai/codex/blob/d452bb3ae5b5e0f715bba3a44d7d30a51b5f28ae/codex-rs/core/prompt.md\">examples</a>, we feel they are sufficiently representative for this analysis. <a href=\"#fnref-1\" class=\"footnote-backref\" data-footnote-backref data-footnote-backref-idx=\"1\" aria-label=\"Back to reference 1\">↩</a></p>\n</li>\n<li id=\"fn-2\">\n<p>Though you can use Mario’s <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://cchistory.mariozechner.at/?from=2.1.31&amp;to=2.1.34\">system prompt diff tool to explore the changes accompanying Opus 4.6’s release</a>. <a href=\"#fnref-2\" class=\"footnote-backref\" data-footnote-backref data-footnote-backref-idx=\"2\" aria-label=\"Back to reference 2\">↩</a></p>\n</li>\n</ol>\n</section>\n",
  "content_markdown": "*This post was [co-authored with Srihari Sriraman](https://blog.nilenso.com/blog/2026/02/10/how-system-prompts-define-agent-behaviiour/)*\n\nCoding agents are fascinating to study. They help us build software in a new way, while themselves exemplifying a novel approach to architecting and implementing software. At their core is an AI model, but wrapped around it is a mix of code, tools, and prompts: the harness.\n\nA critical part of this harness is the system prompt, the baseline instructions for the application. This context is present in every call to the model, no matter what skills, tools, or instructions are loaded. The system prompt is always present, defining a core set of behaviors, strategies, and tone.\n\nOnce you start analyzing agent design and behavior, a question emerges: how much does the system prompt actually determine an agent’s effectiveness? We take for granted that the model is the most important component of any agent, but how much can a system prompt contribute? Could a great system prompt paired with a mediocre model challenge a mediocre prompt paired with a frontier model?\n\nTo find out, we obtained and analyzed system prompts from six different coding agents. We clustered them semantically, comparing where their instructions diverged and where they converged. Then we swapped system prompts between agents and observed how behavior changed.\n\nSystem prompts matter far more than most assume. A given model sets the theoretical ceiling of an agent’s performance, but the system prompt determines whether this peak is reached.\n\n* * *\n\n### The Variety of System Prompts\n\nTo understand the range of system prompts, we looked at six CLI coding agents: Claude Code, Cursor, Gemini CLI, Codex CLI, OpenHands, and Kimi CLI. Each performs the same basic function: given a task they gather information, understands the code base, writes code, tracks their progress, and runs commands. But despite these similarities, the system prompts are *quite* different.\n\n![Waffle chart comparisons of 6 coding agent system prompts](https://www.dbreunig.com/img/resized/waffle_comparison.jpg)\n\nTry It Out\n\nWe’re analyzing [exfiltrated system prompts](https://github.com/asgeirtj/system_prompts_leaks), which we clean up and [host here](https://github.com/nilenso/long-prompts-analysis/tree/main/data/prompts/filtered)[^1]. Each of these is fed into [context-viewer](https://github.com/nilenso/context-viewer), a tool Srihari developed that chunks contexts in semantic components for exploration and analysis.\n\nLooking at the above visualizations, there is plenty of variety. Claude, Codex, Gemini, and OpenHands roughly prioritize the same instructions, but vary their distributions. Further, prompts for Claude Code and OpenHands both are less than half the length of prompts in Codex and Gemini.\n\nCursor’s and Kimi’s prompts are dramatically different. Here we’re looking at Cursor’s prompt that’s paired with GPT-5 ([Cursor uses slightly different prompts when hooked to different models](https://www.adiasg.com/blog/comparing-cursors-prompts-across-models)), and it spends over a third of its tokens on personality and steering instructions. Kimi CLI, meanwhile, contains zero workflow guidance, barely hints at personality instructions, and is the shortest prompt by far.\n\nGiven the similar interfaces of these apps, we’re left wondering: why are their system prompts so different?\n\nThere’s two main reasons the system prompts vary: *model calibration* and *user experience*.\n\nEach model has its own quirks, rough edges, and baseline behaviors. If the goal is to produce a measured, helpful TUI coding assistant, each system prompt will have to deal with and adjust for unique aspects of the underlying model to achieve this goal. This *model calibration* reins in problematic behavior.\n\nSystem prompts also vary because they specify slightly different *user experience*. Sure, they’re all text-only, terminal interfaces that explore and manipulate code. But some are more talkative, more autonomous, more direct, or require more detailed instructions. System prompts define this UX and, as we’ll see later, we can make a coding agent “feel” like a different agent just by swapping out the system prompt.\n\nWe can get a glimpse of these two functions together by looking at how a given system prompt changes over time, especially as new versions of models arrive. For example:\n\n![Claude's system prompt vascilates as new models are released, but trends steadily longer](https://www.dbreunig.com/img/resized/claude_over_time.jpg)\n\nTry It Out\n\nNote how the system prompt isn’t stable, nor growing in a straight line. It bounces around a bit, as the Claude Code team tweaks the prompt to both adjust new behaviors and smooth over the quirks of new models. Though the trend is a march upward, as the coding agent matures.\n\nIf you want to dive further into Claude Code’s prompt history, Mario Zechner has [an excellent site](https://cchistory.mariozechner.at) where he highlights the exact changes from version to version.\n\nGo Deeper\n\n* * *\n\n### The Common Jobs of a Coding Agent System Prompt\n\nWhile these prompts vary from tool to tool, there are many commonalities that each prompt features. There is clear evidence that these teams are [fighting the weights](https://www.dbreunig.com/2025/11/11/don-t-fight-the-weights.html): they use repeated instructions, all-caps admonishments, and stern warnings to adjust common behaviors. This shared effort suggests common patterns in their training datasets, which each has to mitigate.\n\nFor example, there are *many* notes about how these agents should use comments in their code. Cursor specifies that the model should, “not add comments for trivial or obvious code.” Claude states there should be no added comments, “unless the user asks you to.” Codex takes the same stance. Gemini instructions the model to, “Add code comments sparingly… NEVER talk to the user through comments.”\n\nThese consistent, repeated instructions are warranted. They fight against examples of conversation in code comments, present in countless codebases and Github repo. This behavior goes deep: we’ve even seen that Opus 4.5 will [reason in code comments if you turn off thinking](https://x.com/aidenybai/status/1993901129210712129).\n\nSystem prompts also repeatedly specify that tool calls should be parallel whenever possible. Claude should, “maximize use of parallel tool calls where possible.” Cursor is sternly told, “CRITICAL INSTRUCTION: involve all relevant tools concurrently… DEFAULT TO PARALLEL.” Kimi adopts all-caps as well, stating, “you are HIGHLY RECOMMENDED to make \\[tool calls\\] in parallel.”\n\nThis likley reflects the face that most post-training reasoning and agentic examples are *serial* in nature. This is perhaps easier to debug and a bit of delay when synthesizing these datasets isn’t a hinderence. However, in real world situations, users certainly appreciate the speed, so system prompts need to override this training.\n\nBoth of these examples of *fighting the weights* demonstrate how system prompts are used to smooth over the quirks of each model (which they pick up during training) and improve the user experience in an agentic coding application.\n\nMuch of what these prompts specify is shared; common adjustments, common desired behaviors, and common UX. But their differences notably affect application behavior.\n\n* * *\n\n### Do the Prompts Change the Agent?\n\nHelpfully, [OpenCode](https://opencode.ai) [allows users to specify custom system prompts](https://opencode.ai/docs/modes/#prompt). With this feature, we can drop in prompts from Kimi, Gemini, Codex and more, removing and swapping instructions to measure their contribution.\n\nWe gave SWE-Bench Pro test questions to two applications: two agents running the OpenCode harness, calling Opus 4.5, but with one one using the Claude Code system prompt and the other armed with Codex’s instructions.\n\nTime and time again, the agent workflows diverged immediately. For example:\n\n![Claude's system prompt defines a more iterative agent](https://www.dbreunig.com/img/resized/prompt_swap.jpg)\n\nThe Codex prompt produced a methodical, documentation-first approach: understand fully, then implement once. The Claude prompt produced an iterative approach: try something, see what breaks, fix it.\n\nThis pattern remains consistent over many SWE Bench problems. If we average the contexts for each model and system prompt pair, we get the following:\n\n![Swapping system prompts yielded different behavior for each model](https://www.dbreunig.com/img/resized/swe_bench_prompts.jpg)\n\nTry It Out\n\nAll prompt-model combinations correctly answered this subset of SWE Bench Pro questions. But *how* they suceeded was rather different. The system prompts shaped the workflows.\n\n* * *\n\n### System Prompts Deserve More Attention\n\nLast week, when Opus 4.6 and Codex 5.3 landed, people began putting them through the paces, trying to decide which would be their daily driver. Many tout the capabilities of one option over another, but just as often are complaints about approach, tone, or other discretionary choices. Further, it seems every week brings discussion of a new coding harness, especially for managing swarms of agents.\n\nThere is markedly less discussion about the system prompts that define the behaviors of these agents[^2]. System prompts define the UX and smooth over the rough edges of models. They’re given to the model with *every* instruction, yet we prefer to talk Opus vs. GPT-5.3 or Gastown vs. Pi.\n\nContext engineering starts with the system prompt.\n\n[^1]: Exfiltrated system prompts represent versions of the system prompt for a given session. It’s not 100% canonical, as many AI harnesses assemble system prompts from multiple snippets, given the task at hand. But given the consistent manner with which we can extrac these prompts, and comparing them with [public](https://platform.claude.com/docs/en/release-notes/system-prompts) [examples](https://github.com/openai/codex/blob/d452bb3ae5b5e0f715bba3a44d7d30a51b5f28ae/codex-rs/core/prompt.md), we feel they are sufficiently representative for this analysis.\n\n[^2]: Though you can use Mario’s [system prompt diff tool to explore the changes accompanying Opus 4.6’s release](https://cchistory.mariozechner.at/?from=2.1.31&to=2.1.34).\n",
  "dateCreated": "2026-09-27T19:29:15.293681927+00:00",
  "date_created": "2026-02-11T05:34:00+00:00",
  "date_modified": "2026-09-15T15:44:24+00:00",
  "date_published": "2026-02-11T05:34:00+00:00",
  "description": "The model sets the ceiling on an agent's performance, but the system prompt decides whether it ever gets there.",
  "external_url": "https://www.dbreunig.com/2026/02/10/system-prompts-define-the-agent-as-much-as-the-model.html",
  "git": {
    "commit": "ebb0941c5c06a2ab2377342d607535262a3e969e",
    "path": "items/dbreunig-com/2026/02/2026-02-11-how-system-prompts-define-agent-behavior.md",
    "permalink": "https://github.com/aymericbeaumet/aggr-instance/blob/ebb0941c5c06a2ab2377342d607535262a3e969e/items/dbreunig-com/2026/02/2026-02-11-how-system-prompts-define-agent-behavior.md"
  },
  "id": "urn:aggr:item:edb34831fb09d1eac9258db0b893674057a3b2b5",
  "isBasedOn": {
    "@id": "https://www.dbreunig.com/2026/02/10/system-prompts-define-the-agent-as-much-as-the-model.html"
  },
  "mainEntity": {
    "@id": "https://www.dbreunig.com/2026/02/10/system-prompts-define-the-agent-as-much-as-the-model.html",
    "@type": "CreativeWork",
    "archivedAt": {
      "@id": "https://aggr.aymericbeaumet.com/items/dbreunig-com/2026-02-11-how-system-prompts-define-agent-behavior/#webpage"
    },
    "author": [
      {
        "@type": "Person",
        "name": "Drew Breunig"
      }
    ],
    "dateModified": "2026-09-15T15:44:24+00:00",
    "datePublished": "2026-02-11T05:34:00+00:00",
    "headline": "How System Prompts Define Agent Behavior",
    "timeRequired": "PT7M",
    "url": "https://www.dbreunig.com/2026/02/10/system-prompts-define-the-agent-as-much-as-the-model.html",
    "wordCount": 1412
  },
  "name": "Archived snapshot: How System Prompts Define Agent Behavior",
  "preview": null,
  "reading_minutes": 7,
  "replicated_at": null,
  "source": "dbreunig-com",
  "source_name": "Drew Breunig",
  "summary": "The model sets the ceiling on an agent's performance, but the system prompt decides whether it ever gets there.",
  "tags": [
    "agents",
    "ai",
    "collaboration",
    "context",
    "context engineering",
    "system prompts"
  ],
  "temporalCoverage": "2026-09-27T19:29:15.293681927+00:00",
  "title": "How System Prompts Define Agent Behavior",
  "url": "https://aggr.aymericbeaumet.com/items/dbreunig-com/2026-02-11-how-system-prompts-define-agent-behavior/",
  "word_count": 1412
}