<?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: Amariah Kamau</title>
    <description>The latest articles on DEV Community by Amariah Kamau (@abishaiama).</description>
    <link>https://dev.to/abishaiama</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%2F3394455%2F903b6008-0825-4cf9-b88b-bdaba42c4258.png</url>
      <title>DEV Community: Amariah Kamau</title>
      <link>https://dev.to/abishaiama</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/abishaiama"/>
    <language>en</language>
    <item>
      <title>We Deleted Two Tools and a Wizard. Every Turn Got 4% Lighter.</title>
      <dc:creator>Amariah Kamau</dc:creator>
      <pubDate>Sun, 25 Oct 2026 00:46:25 +0000</pubDate>
      <link>https://dev.to/abishaiama/we-deleted-two-tools-and-a-wizard-every-turn-got-4-lighter-1kfg</link>
      <guid>https://dev.to/abishaiama/we-deleted-two-tools-and-a-wizard-every-turn-got-4-lighter-1kfg</guid>
      <description>&lt;p&gt;Every request a coding agent sends carries the same baggage: the system prompt and the definition of every tool the model may call. It is cached, so it is cheap to resend, but it still fills the context window and still counts. For Atlarix 15.11 we went looking for what nobody used and deleted it. The result is small, and that is the point of this post: it is about 4% of every turn, forever.&lt;/p&gt;

&lt;h2&gt;
  
  
  What went
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The mobile tools.&lt;/strong&gt; Atlarix had two tools for driving a phone emulator or simulator. They were rarely called, and a model can do the same with the commands a person would type (&lt;code&gt;adb&lt;/code&gt; for an Android emulator, for example) through &lt;code&gt;run_command&lt;/code&gt;, then look at a screenshot with &lt;code&gt;view_image&lt;/code&gt;. So the special tools went, and the general ones stayed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Image tools for models that can't see.&lt;/strong&gt; Tools that return images are now offered only to models that accept images. A text-only model was being shown tools it could never use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Onboarding.&lt;/strong&gt; The first-run wizard, the guided tour, the coachmarks and the rotating tips are gone from the app, the CLI and the extension. The analytics choice still comes first. This part saves no tokens; it removes code and screens that few people finished.&lt;/p&gt;

&lt;h2&gt;
  
  
  Measured, not estimated
&lt;/h2&gt;

&lt;p&gt;We counted the request a Build-mode turn sends before and after, in the CLI, with Claude Haiku 4.5 through Anthropic's format:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Tokens per request&lt;/th&gt;
&lt;th&gt;Tools offered&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Before (15.10)&lt;/td&gt;
&lt;td&gt;10,802&lt;/td&gt;
&lt;td&gt;33&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;After (15.11)&lt;/td&gt;
&lt;td&gt;10,350&lt;/td&gt;
&lt;td&gt;31&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That is 452 tokens and two tools fewer on every request, about 4.2%. A text-only model drops the image tools as well, so its saving is a little larger.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a small cut is worth it
&lt;/h2&gt;

&lt;p&gt;Four percent sounds like rounding error, but it is paid on every model call, and a single agent message makes many of them as it works through tool results. Smaller models feel it twice: fewer tokens of instructions, and fewer tools to choose between, which is where weaker models make wrong calls. And every tool definition is a promise to keep working; deleting one we did not need is maintenance we stop paying for.&lt;/p&gt;

&lt;h2&gt;
  
  
  The rule we used
&lt;/h2&gt;

&lt;p&gt;A feature stays if people use it or if the model needs it to do the job. If a general tool already covers the case, the special one goes. We checked usage first, then deleted, then measured on the real request, not on the source code, because what reaches the model is the only number that matters.&lt;/p&gt;

&lt;p&gt;The cut shipped in Atlarix 15.11, alongside computer use and sessions that steer each other. A harness isn't what it carries; it's whether you can use it. The full list is in the &lt;a href="https://www.atlarix.dev/changelog" rel="noopener noreferrer"&gt;changelog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.atlarix.dev/blogs/deleting-tools-coding-agent-every-turn-lighter" rel="noopener noreferrer"&gt;atlarix.dev&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>performance</category>
      <category>programming</category>
    </item>
    <item>
      <title>Multi-Agent Coding You Can Watch: Sessions That Fork, Lead and Approve Each Other's Plans</title>
      <dc:creator>Amariah Kamau</dc:creator>
      <pubDate>Sun, 25 Oct 2026 00:45:43 +0000</pubDate>
      <link>https://dev.to/abishaiama/multi-agent-coding-you-can-watch-sessions-that-fork-lead-and-approve-each-others-plans-6ee</link>
      <guid>https://dev.to/abishaiama/multi-agent-coding-you-can-watch-sessions-that-fork-lead-and-approve-each-others-plans-6ee</guid>
      <description>&lt;p&gt;Most multi-agent setups for coding run hidden: a lead agent spawns workers you never see, and you read a summary at the end. Atlarix 15.10 and 15.11 build it from something you already use, the chat session. Sessions can fork, find each other, send each other work, change each other's mode and approve each other's plans, and every one of them is a normal session you can open, read and stop.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with /fork
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;/fork&lt;/code&gt; copies a conversation into a new session, in the desktop app, the CLI, VS Code and any editor that supports forking over the Agent Client Protocol. The copy knows everything the original knew up to that point, and the original is left as it was. Fork twice and you have three sessions that share the same understanding of the task.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sessions can see each other
&lt;/h2&gt;

&lt;p&gt;A session can call &lt;code&gt;list_sessions&lt;/code&gt; to see the others: where each runs (the app, the CLI, an editor), whether it is idle or working, its mode and model, and any plan waiting for approval. With &lt;code&gt;result_of&lt;/code&gt;, it reads another session's latest finished turn: how it ended, its reply and the files it changed, or "still working".&lt;/p&gt;

&lt;p&gt;This is the part that makes the pattern work. A lead does not need the workers to report back; it can look.&lt;/p&gt;

&lt;h2&gt;
  
  
  One session leads
&lt;/h2&gt;

&lt;p&gt;With &lt;code&gt;send_message&lt;/code&gt;, one session can give another a task, set its mode and model (from the providers you have set up), and review its plan: approve it, and the other session starts building exactly as if you had clicked Build; reject it with a reason, and it plans again; or replace it.&lt;/p&gt;

&lt;p&gt;The session on the receiving end shows a line saying who changed what, for example "Plan approved by Rix. Building it." or "Mode set to Review by Rix. From the next turn." A change is refused while that session is in the middle of a turn, so nothing is switched under it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why build it from sessions
&lt;/h2&gt;

&lt;p&gt;Because you can step in anywhere. Each worker is an ordinary session: open it in the app or VS Code and read along, type into it, stop it, or take over. A session open in two places stays in step, so the CLI can run a turn while the app shows it live. Nothing about the lead's decisions is hidden in a log you have to dig out afterwards; it is in the chats.&lt;/p&gt;

&lt;p&gt;It also means each worker can run on a different model. A cheap, fast model can do the mechanical part while a stronger one reviews.&lt;/p&gt;

&lt;h2&gt;
  
  
  A small example
&lt;/h2&gt;

&lt;p&gt;Ask a session to plan a feature, then &lt;code&gt;/fork&lt;/code&gt; it twice. In the first fork, ask it to lead: it lists the others, sends one the API half and the other the tests, sets the test session to a cheaper model, and approves each plan when it reads right. When both finish, it reads their results with &lt;code&gt;result_of&lt;/code&gt; and reviews the changed files. You watch any of the three, and stop any of them, at any point.&lt;/p&gt;

&lt;p&gt;Live sessions and &lt;code&gt;/fork&lt;/code&gt; shipped in Atlarix 15.10; sessions that steer and read each other shipped in 15.11. For agents that work inside a single turn, see &lt;a href="https://www.atlarix.dev/docs/guides/sub-agents" rel="noopener noreferrer"&gt;sub-agents&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Can one AI coding session control another in Atlarix?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes. A session can list the others, send them tasks, set their mode and model, and approve, reject or replace their plans. Each change shows in the target session.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What does /fork do in Atlarix?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It copies the conversation into a new session in the app, the CLI, VS Code or an ACP editor. The original is unchanged.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.atlarix.dev/blogs/multi-agent-coding-sessions-fork-lead-approve-plans" rel="noopener noreferrer"&gt;atlarix.dev&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Computer Use in a Coding Agent, With Any Vision Model</title>
      <dc:creator>Amariah Kamau</dc:creator>
      <pubDate>Sun, 25 Oct 2026 00:44:48 +0000</pubDate>
      <link>https://dev.to/abishaiama/computer-use-in-a-coding-agent-with-any-vision-model-2faa</link>
      <guid>https://dev.to/abishaiama/computer-use-in-a-coding-agent-with-any-vision-model-2faa</guid>
      <description>&lt;p&gt;Some of the software you work with has no API: an old admin panel, a desktop app, a dialog that only exists on screen. Atlarix 15.11 adds computer use, so the agent can look at your screen and use the mouse and keyboard when that is the only way in. It works with any model that can see images, not one vendor's, and it is off until you switch it on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which models can use it
&lt;/h2&gt;

&lt;p&gt;Models that ship their own computer tool, like Claude, use their own. Any other model that accepts images gets Atlarix's &lt;code&gt;computer&lt;/code&gt; tool, which takes a screenshot, clicks, types, scrolls and presses keys. Text-only models get neither, and the model menu says why instead of showing a switch. So the same feature works with your own key, a local vision model, Amazon Bedrock or a gateway; what matters is whether the model can see.&lt;/p&gt;

&lt;h2&gt;
  
  
  Off by default, switched on per model
&lt;/h2&gt;

&lt;p&gt;You turn it on for a model, not for everything: in Settings → Computer use, in the chat's model menu, with &lt;code&gt;/computer&lt;/code&gt; in the &lt;a href="https://www.atlarix.dev/cli" rel="noopener noreferrer"&gt;CLI&lt;/a&gt;, in the VS Code panel's settings, or in the session options of an ACP editor like Zed. There are no approval cards for each click or keystroke. Asking on every click would make it unusable, so the decision is made once, when you switch it on.&lt;/p&gt;

&lt;p&gt;It is offered in Build and Debug modes only, and only one session controls the screen at a time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stopping it
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Moving the mouse stops it, on every surface.&lt;/strong&gt; The agent's next click or keystroke is refused and the turn ends, so nothing lands while your hand is on the mouse. Esc, and ⌃⌥Esc in the app, stop it at once.&lt;/p&gt;

&lt;p&gt;While it runs, the desktop app shows a "Controlling your screen" pill with a Stop button. The pill is hidden from the model's own screenshots, so it never tries to click it. The CLI posts a system notification instead, and in an editor each action is a step in the chat that the editor's Stop button ends.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it needs from your machine
&lt;/h2&gt;

&lt;p&gt;It runs on macOS, Windows and Linux (X11 and Wayland; Wayland is not yet tested on real hardware). On macOS it needs Screen Recording and Accessibility once. macOS names the app that asks, which is Atlarix when you use the desktop app, and your terminal or editor when the agent runs there, so Atlarix tells you which name to expect before the prompt appears.&lt;/p&gt;

&lt;p&gt;On Windows, typed text is pasted rather than sent key by key, and your clipboard is put back afterwards, kept out of clipboard history.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using it well
&lt;/h2&gt;

&lt;p&gt;It sees whatever is on your screen, so close what you don't want it to touch before you start. Give it a concrete task with a visible end ("add these three rows in the ledger app and save") rather than an open one. And prefer a real interface when there is one: a CLI command or an API call is faster and more reliable than clicking, and the agent already has those. Computer use is for the software that leaves no other way.&lt;/p&gt;

&lt;p&gt;Computer use shipped in Atlarix 15.11 for the desktop app, the CLI, VS Code-family editors and ACP editors. The full list of changes is in the &lt;a href="https://www.atlarix.dev/changelog" rel="noopener noreferrer"&gt;changelog&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Can an AI coding agent use my mouse and keyboard with a model other than Claude?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes. In Atlarix, models with their own computer tool use it, and any other model that accepts images gets Atlarix's computer tool. Text-only models cannot use computer use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is computer use on by default in Atlarix?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No. It is off by default and switched on per model, in Settings, the chat's model menu, /computer in the CLI, or the editor's settings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do I stop the agent while it is controlling my screen?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Move the mouse. Its next action is refused and the turn ends. Esc, Ctrl+Option+Esc in the app, or the Stop button also stop it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.atlarix.dev/blogs/computer-use-coding-agent-any-vision-model" rel="noopener noreferrer"&gt;atlarix.dev&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>programming</category>
      <category>automation</category>
    </item>
    <item>
      <title>Claude in Your Coding Agent: Anthropic's API, Amazon Bedrock, or Any Gateway</title>
      <dc:creator>Amariah Kamau</dc:creator>
      <pubDate>Sun, 18 Oct 2026 01:11:46 +0000</pubDate>
      <link>https://dev.to/abishaiama/claude-in-your-coding-agent-anthropics-api-amazon-bedrock-or-any-gateway-4cnl</link>
      <guid>https://dev.to/abishaiama/claude-in-your-coding-agent-anthropics-api-amazon-bedrock-or-any-gateway-4cnl</guid>
      <description>&lt;p&gt;Claude is the model a lot of teams want for coding, but the way they pay for it differs. Some have an Anthropic API key. Some buy everything through AWS, so Claude reaches them through Amazon Bedrock. Some run a company gateway that every request has to pass through. Since Atlarix 15.9, all three work the same way inside the agent, in the desktop app, the CLI, VS Code and the editors that speak the Agent Client Protocol. This is how to connect each one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why one format covers all three
&lt;/h2&gt;

&lt;p&gt;Anthropic publishes its own API, the &lt;strong&gt;Messages API&lt;/strong&gt;: &lt;code&gt;POST /v1/messages&lt;/code&gt;, a key, and a version header. Amazon Bedrock offers Claude on an endpoint that speaks the same format, and so do many gateways and proxies. So the question Atlarix asks is not "which company" but "which format". A provider you add can now speak either OpenAI's format or Anthropic's, and the agent talks to each in its own terms, through Anthropic's own SDK for the second.&lt;/p&gt;

&lt;h2&gt;
  
  
  Route 1: your own Anthropic API key
&lt;/h2&gt;

&lt;p&gt;This is the direct route, and it needs nothing custom. Create a key in the Anthropic Console, then:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Desktop app:&lt;/strong&gt; Settings → Providers → &lt;strong&gt;Anthropic&lt;/strong&gt;, and paste the key.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CLI:&lt;/strong&gt; &lt;code&gt;/connect&lt;/code&gt; → &lt;strong&gt;Anthropic&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VS Code, Cursor, Kiro, Windsurf:&lt;/strong&gt; the account panel → &lt;strong&gt;Connect a provider…&lt;/strong&gt; → Anthropic.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The key is checked with Anthropic before it is saved, Claude's models appear in the model picker, and your requests go from your computer to Anthropic, not through Atlarix. Keys and providers are shared, so connecting once in any of these is enough.&lt;/p&gt;

&lt;h2&gt;
  
  
  Route 2: Amazon Bedrock
&lt;/h2&gt;

&lt;p&gt;Bedrock's Anthropic-compatible endpoint is &lt;code&gt;https://bedrock-runtime.&amp;lt;region&amp;gt;.amazonaws.com/anthropic/v1&lt;/code&gt;, for example &lt;code&gt;us-east-1&lt;/code&gt;. Add it as a provider of your own:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Desktop app:&lt;/strong&gt; Settings → Providers → add a custom provider, and choose &lt;strong&gt;API format: Anthropic&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CLI:&lt;/strong&gt; &lt;code&gt;/connect&lt;/code&gt; → &lt;strong&gt;Other: your own endpoint…&lt;/strong&gt; → &lt;strong&gt;Anthropic&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VS Code panel:&lt;/strong&gt; add a provider → &lt;strong&gt;Your own endpoint&lt;/strong&gt; → API format &lt;strong&gt;Anthropic&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Give it a name, paste the base URL up to &lt;code&gt;/v1&lt;/code&gt;, and use a &lt;strong&gt;Bedrock API key&lt;/strong&gt; as the key (Bedrock's console issues them). Bedrock's endpoint does not list its models, so Atlarix asks for the model id: Bedrock's own id, such as &lt;code&gt;us.anthropic.claude-haiku-4-5-20251001-v1:0&lt;/code&gt;. The &lt;code&gt;us.&lt;/code&gt; or &lt;code&gt;global.&lt;/code&gt; prefix picks a cross-region profile.&lt;/p&gt;

&lt;p&gt;Two things on the AWS side, before any of this works. The first time an account uses Anthropic's models on Bedrock, AWS asks for a short use-case form in the Bedrock console. And AWS decides which Claude models each account may call: a new account may see "not available for this account" for the newest ones until AWS enables them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Route 3: any gateway on the Anthropic format
&lt;/h2&gt;

&lt;p&gt;A company proxy, an LLM gateway, a self-hosted router: if it serves &lt;code&gt;POST /v1/messages&lt;/code&gt;, add it the same way as Bedrock, with its own base URL up to &lt;code&gt;/v1&lt;/code&gt; and its own key. When it serves a model list at &lt;code&gt;/v1/models&lt;/code&gt;, Atlarix shows those models; otherwise you type the model id once.&lt;/p&gt;

&lt;h2&gt;
  
  
  You don't have to know how it takes the key
&lt;/h2&gt;

&lt;p&gt;Anthropic's API takes the key in an &lt;code&gt;x-api-key&lt;/code&gt; header. Bedrock and many gateways take a Bearer token instead. When you add the provider, Atlarix asks the endpoint: it tries &lt;code&gt;x-api-key&lt;/code&gt;, then Bearer, and remembers the one that worked. For an endpoint with no model list, it asks with an empty request that costs nothing. A key the endpoint refuses is never saved, and the provider's own error is what you see.&lt;/p&gt;

&lt;h2&gt;
  
  
  What works the same on every route
&lt;/h2&gt;

&lt;p&gt;Atlarix recognises the Claude model behind the name, including Bedrock's longer ids, and uses its catalog entry for the rest:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Thinking and &lt;code&gt;/effort&lt;/code&gt;:&lt;/strong&gt; the newest Claude models think adaptively, and &lt;code&gt;/effort&lt;/code&gt; sets how hard (low through max, as the model lists them). Older models that take a thinking budget get three budget sizes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prompt caching:&lt;/strong&gt; the stable part of the prompt is marked for Claude's cache, so later messages in a chat read it instead of paying for it again.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tools, plans, approvals:&lt;/strong&gt; every mode works, Build, Explore, Plan, Debug and Review, with edits and commands waiting for your yes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One difference: Anthropic's own server-side web search is used only on Anthropic's API. Through Bedrock or a gateway, the agent uses its own web search tool instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it costs
&lt;/h2&gt;

&lt;p&gt;Atlarix adds nothing to your own provider's bill. Anthropic bills its key at its own prices; Bedrock bills through your AWS account at AWS's rates for that model; a gateway bills however your company set it up. The chat's usage panel shows what the session has cost on your key.&lt;/p&gt;

&lt;h2&gt;
  
  
  Questions people ask
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Can I use Claude on Amazon Bedrock in a coding agent?&lt;/strong&gt;&lt;br&gt;
Yes. In Atlarix, add a provider with API format Anthropic, base URL &lt;code&gt;https://bedrock-runtime.&amp;lt;region&amp;gt;.amazonaws.com/anthropic/v1&lt;/code&gt;, a Bedrock API key, and the Bedrock model id such as &lt;code&gt;us.anthropic.claude-haiku-4-5-20251001-v1:0&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does Atlarix work with an Anthropic API key?&lt;/strong&gt;&lt;br&gt;
Yes. Choose Anthropic in the provider list in the app, the CLI (&lt;code&gt;/connect&lt;/code&gt;) or the VS Code panel and paste the key; Claude's models then appear in the model picker.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is an Anthropic-compatible endpoint?&lt;/strong&gt;&lt;br&gt;
An API that speaks Anthropic's Messages API format (&lt;code&gt;POST /v1/messages&lt;/code&gt;). Amazon Bedrock offers one for Claude, and many gateways and proxies do too; Atlarix connects to any of them as a provider of your own.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does extended thinking work through Bedrock?&lt;/strong&gt;&lt;br&gt;
Yes. Atlarix maps the Bedrock model id to the Claude model and sends thinking in the form that model takes: adaptive thinking with an effort level on the newest models, a thinking budget on older ones.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.atlarix.dev/blogs/claude-coding-agent-anthropic-api-bedrock-gateway" rel="noopener noreferrer"&gt;atlarix.dev&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>aws</category>
      <category>devtools</category>
    </item>
    <item>
      <title>One Misplaced Block Made Every Message Rewrite 19,000 Cached Tokens</title>
      <dc:creator>Amariah Kamau</dc:creator>
      <pubDate>Sun, 18 Oct 2026 01:10:35 +0000</pubDate>
      <link>https://dev.to/abishaiama/one-misplaced-block-made-every-message-rewrite-19000-cached-tokens-1jjb</link>
      <guid>https://dev.to/abishaiama/one-misplaced-block-made-every-message-rewrite-19000-cached-tokens-1jjb</guid>
      <description>&lt;p&gt;Prompt caching is the cheapest win in an AI coding agent. The system prompt and tool definitions are the same on every request, so the provider can keep them and charge a fraction for reading them back. Atlarix has marked its prompt for caching for a long time, and the logs looked right. Then a QA pass compared two messages in the same chat, byte for byte, and found that in Build mode every message after the first rewrote the whole cache instead of reading it.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the cache works, briefly
&lt;/h2&gt;

&lt;p&gt;Claude's cache matches on an exact &lt;strong&gt;prefix&lt;/strong&gt;: tools, then the system prompt, then the conversation, up to a marked breakpoint. If any byte before the breakpoint changes, everything from that byte on is a miss and is written to the cache again. On Anthropic's pricing, writing costs more than normal input (1.25× for a five-minute entry, 2× for a one-hour one) and reading costs about a tenth. So a cache that is written every time is worse than no cache at all.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we were sending
&lt;/h2&gt;

&lt;p&gt;Atlarix builds its system prompt in two parts. The &lt;strong&gt;stable header&lt;/strong&gt; holds who the agent is, the tool rules and the mode's instructions; it is the same for the whole chat, so it carries the cache breakpoint, with a one-hour lifetime. The &lt;strong&gt;per-turn tail&lt;/strong&gt; holds today's date and this message's request; it changes every message, so it is meant to go after the breakpoint, in a block of its own.&lt;/p&gt;

&lt;p&gt;Ask mode did exactly that. Build mode joined the two parts into one string, then appended the context sections, the guides and project notes, after it. So the request sat in the middle of the one block that carried the breakpoint.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why nothing looked wrong
&lt;/h2&gt;

&lt;p&gt;Inside a single message, the agent makes several model calls as it works through tool results, and those all share the same system prompt. So the logs showed healthy cache reads: on step two of a message, 19,379 tokens read from the cache. The miss only showed &lt;strong&gt;between&lt;/strong&gt; messages, where the request text changes. A check that looks at one message at a time will always pass.&lt;/p&gt;

&lt;h2&gt;
  
  
  How we found it
&lt;/h2&gt;

&lt;p&gt;During QA for the Anthropic-format providers, we captured two consecutive request bodies from the same chat and compared them. The first difference was at character 22,966 of a 24,000-character system block: the &lt;code&gt;&amp;lt;user_context&amp;gt;&lt;/code&gt; holding the user's request. Everything after it was identical, and everything before it was identical. That one block was the entire difference.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fix
&lt;/h2&gt;

&lt;p&gt;The finished Build prompt is now split back into its two parts before it is sent: the cached part, which no longer contains anything that changes per message, and the per-turn tail, sent as its own system block after it. No words in the prompt changed; only where the tail sits. Every other part of the app that reads the prompt still reads it whole.&lt;/p&gt;

&lt;p&gt;The test that guards it does what the QA pass did: it runs two messages and requires the cached block to be byte-for-byte identical, with the request in a later block. On the old code it fails; on the new one it passes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Before and after, measured
&lt;/h2&gt;

&lt;p&gt;Three messages in one chat, Build mode, Claude Haiku 4.5 on Amazon Bedrock:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Cache read&lt;/th&gt;
&lt;th&gt;Cache written&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Before, messages 2 and 3&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;~19,600 each&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;After, message 1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;19,348&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;After, message 2&lt;/td&gt;
&lt;td&gt;18,767&lt;/td&gt;
&lt;td&gt;597&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;After, message 3&lt;/td&gt;
&lt;td&gt;18,767&lt;/td&gt;
&lt;td&gt;620&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;From the second message on, the fixed part of the prompt is now a cache read at about a tenth of the input price, where it was a one-hour cache write at twice the input price. For the fixed part of each message, that is roughly fifteen times cheaper on Claude, and the same layout is what lets any provider that caches by prefix reuse it.&lt;/p&gt;

&lt;p&gt;The rule we take from it: anything that changes per message must come after the last cache breakpoint, and the only reliable check is to compare two real requests, not one. The fix shipped in Atlarix 15.9.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.atlarix.dev/blogs/prompt-cache-bug-every-message-rewrote-19000-tokens" rel="noopener noreferrer"&gt;atlarix.dev&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>performance</category>
      <category>devtools</category>
    </item>
    <item>
      <title>Add a Coding Agent to Zed and JetBrains IDEs With the Agent Client Protocol</title>
      <dc:creator>Amariah Kamau</dc:creator>
      <pubDate>Sat, 10 Oct 2026 14:21:41 +0000</pubDate>
      <link>https://dev.to/abishaiama/add-a-coding-agent-to-zed-and-jetbrains-ides-with-the-agent-client-protocol-4o08</link>
      <guid>https://dev.to/abishaiama/add-a-coding-agent-to-zed-and-jetbrains-ides-with-the-agent-client-protocol-4o08</guid>
      <description>&lt;p&gt;Zed and JetBrains IDEs both speak the Agent Client Protocol (ACP): an open protocol between an editor and a coding agent, so the editor provides the chat, the diffs and the approvals, and any agent that implements the protocol can sit behind them. No plugin is involved. Atlarix implements it with one command, &lt;code&gt;atlarix acp&lt;/code&gt;. Here is how to add it to each editor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install the Atlarix CLI
&lt;/h2&gt;

&lt;p&gt;ACP editors start the agent as a program, so first install the CLI: &lt;code&gt;npm i -g atlarix&lt;/code&gt;, &lt;code&gt;brew install amariahak/atlarix/atlarix&lt;/code&gt;, or the one-line installers on &lt;a href="https://www.atlarix.dev/cli" rel="noopener noreferrer"&gt;the CLI page&lt;/a&gt;. Check it with &lt;code&gt;atlarix --version&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Zed
&lt;/h2&gt;

&lt;p&gt;Open Zed's settings (&lt;code&gt;~/.config/zed/settings.json&lt;/code&gt;) and add Atlarix as an agent server: &lt;code&gt;"agent_servers": { "Atlarix": { "type": "custom", "command": "atlarix", "args": ["acp"] } }&lt;/code&gt;. Then open the Agent Panel, start a new thread and choose Atlarix. Sign in when it asks; it opens your browser once.&lt;/p&gt;

&lt;h2&gt;
  
  
  JetBrains IDEs
&lt;/h2&gt;

&lt;p&gt;In IntelliJ IDEA, PyCharm, WebStorm, GoLand or any other JetBrains IDE with AI Assistant, open the chat's agent menu and choose &lt;strong&gt;More Agents → Add Custom Agent&lt;/strong&gt;. That opens &lt;code&gt;~/.jetbrains/acp.json&lt;/code&gt;; add &lt;code&gt;"agent_servers": { "Atlarix": { "command": "/path/to/atlarix", "args": ["acp"] } }&lt;/code&gt; with the full path from &lt;code&gt;which atlarix&lt;/code&gt; (macOS, Linux) or &lt;code&gt;where atlarix&lt;/code&gt; (Windows). You do not need a JetBrains AI subscription to use an ACP agent.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you get in the editor
&lt;/h2&gt;

&lt;p&gt;Atlarix's modes — Build, Explore, Plan, Debug, Review — and its models appear in the editor's own mode and model pickers. Edits and commands come to you as the editor's permission prompts before anything changes. In Plan mode the plan shows as the editor's plan list, and building it switches the mode picker to Build. File references in replies open at the line. Past chats load from the editor's history.&lt;/p&gt;

&lt;h2&gt;
  
  
  Signing in
&lt;/h2&gt;

&lt;p&gt;Atlarix offers two sign-in methods to an ACP editor: a browser sign-in the editor can start for you, and &lt;code&gt;atlarix login&lt;/code&gt; in a terminal. Either signs in the CLI on that computer, and the editor's chats then use your account, your models and your own keys.&lt;/p&gt;

&lt;h2&gt;
  
  
  The same agent everywhere
&lt;/h2&gt;

&lt;p&gt;A chat started in Zed or a JetBrains IDE is an Atlarix session like any other, so it shows up in the Atlarix app and CLI, and other Atlarix sessions can message it. The editor is just one more place to type.&lt;/p&gt;

&lt;p&gt;We have also submitted Atlarix to the ACP registry, which Zed and JetBrains read to offer agents with one click; until that is merged, the settings above are the way in. For VS Code, Cursor, Kiro and Windsurf, which do not speak ACP, Atlarix has its own extension — see the &lt;a href="https://www.atlarix.dev/docs/guides/editors" rel="noopener noreferrer"&gt;editors guide&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.atlarix.dev/blogs/add-coding-agent-zed-jetbrains-agent-client-protocol" rel="noopener noreferrer"&gt;atlarix.dev&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>tutorial</category>
      <category>productivity</category>
      <category>programming</category>
    </item>
    <item>
      <title>How to Use Your Own API Key With an AI Coding Agent in VS Code</title>
      <dc:creator>Amariah Kamau</dc:creator>
      <pubDate>Sat, 10 Oct 2026 14:20:51 +0000</pubDate>
      <link>https://dev.to/abishaiama/how-to-use-your-own-api-key-with-an-ai-coding-agent-in-vs-code-19bg</link>
      <guid>https://dev.to/abishaiama/how-to-use-your-own-api-key-with-an-ai-coding-agent-in-vs-code-19bg</guid>
      <description>&lt;p&gt;A coding agent on your own API key means three things: you choose the model, you pay the provider's price with no markup, and your requests go to the provider you picked. This is how to set that up in VS Code — or Cursor, Kiro or Windsurf — with the Atlarix extension, start to finish.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Install the extension
&lt;/h2&gt;

&lt;p&gt;In your editor's Extensions view, search for &lt;strong&gt;Atlarix&lt;/strong&gt; and install it — it comes from the &lt;a href="https://marketplace.visualstudio.com/items?itemName=atlarix.atlarix" rel="noopener noreferrer"&gt;Visual Studio Marketplace&lt;/a&gt; in VS Code and from &lt;a href="https://open-vsx.org/extension/atlarix/atlarix" rel="noopener noreferrer"&gt;Open VSX&lt;/a&gt; in Cursor, Kiro and Windsurf. It brings its own copy of the agent, so there is no CLI or runtime to install separately.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Sign in once
&lt;/h2&gt;

&lt;p&gt;Open the Atlarix view (the ant in the activity bar, or ⌘⌥A / Ctrl+Alt+A) and sign in. An Atlarix account is free; it is what keeps your chats, settings and keys the same across the editor, the desktop app and the CLI.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Connect your provider
&lt;/h2&gt;

&lt;p&gt;Open the ⋯ menu at the top of the chat and choose &lt;strong&gt;Account, usage and billing&lt;/strong&gt;. Under &lt;strong&gt;Your own keys&lt;/strong&gt;, press &lt;strong&gt;Connect a provider…&lt;/strong&gt;, pick the provider — OpenAI, Anthropic, Google, DeepSeek, OpenRouter, or another from the list — and paste the key. The prompt links to the page where that provider issues keys. The key is stored by Atlarix on your computer, and the Atlarix app and CLI on the same computer use it too.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Pick the model
&lt;/h2&gt;

&lt;p&gt;The model picker sits just under the message box. Your key's models now appear in it alongside Atlarix Auto and the Atlarix Core models; choose one and it applies to this chat. Different chats can use different models — a fast cheap one for questions, a stronger one for a refactor.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Work as normal
&lt;/h2&gt;

&lt;p&gt;Every mode works on your own key: Build, Explore, Plan, Debug and Review. Edits open in the editor's diff for your Yes or No, commands wait for approval, and plans tick off as they are built. The account panel shows what this chat has cost on your key so far.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it costs, and where requests go
&lt;/h2&gt;

&lt;p&gt;Atlarix adds nothing to your own key's usage: you pay the provider exactly what they charge. Requests on your key go from your computer to the provider, not through Atlarix. If the provider rejects the key — revoked, mistyped or out of credit — the chat says so, so you know to fix the key rather than retry.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which model to start with
&lt;/h2&gt;

&lt;p&gt;There is no single answer, and the honest advice is to try two. Frontier models from OpenAI, Anthropic and Google are the strongest at long multi-step changes; DeepSeek and GLM are far cheaper per token and very capable for most everyday work; OpenRouter gives you one key for many providers. Because the picker is per chat, comparing them on your own code costs one extra chat.&lt;/p&gt;

&lt;p&gt;The same key works in Zed and JetBrains IDEs, which run Atlarix over the Agent Client Protocol — see the &lt;a href="https://www.atlarix.dev/docs/guides/editors" rel="noopener noreferrer"&gt;editors guide&lt;/a&gt;. And if you would rather not manage keys at all, Atlarix Auto in the same picker chooses a model for each step for you.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.atlarix.dev/blogs/use-your-own-api-key-ai-coding-agent-vs-code" rel="noopener noreferrer"&gt;atlarix.dev&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>ai</category>
      <category>tutorial</category>
      <category>llm</category>
    </item>
    <item>
      <title>Atlarix in VS Code, Cursor, Kiro and Windsurf: An AI Coding Agent That Uses Any Model</title>
      <dc:creator>Amariah Kamau</dc:creator>
      <pubDate>Sat, 10 Oct 2026 14:19:52 +0000</pubDate>
      <link>https://dev.to/abishaiama/atlarix-in-vs-code-cursor-kiro-and-windsurf-an-ai-coding-agent-that-uses-any-model-3p8i</link>
      <guid>https://dev.to/abishaiama/atlarix-in-vs-code-cursor-kiro-and-windsurf-an-ai-coding-agent-that-uses-any-model-3p8i</guid>
      <description>&lt;p&gt;Until this release, using Atlarix meant a window beside your editor: the desktop app, or since 15.0 the CLI in a terminal. With 15.4.0 the agent moves into the editor itself. One extension for VS Code and the editors built on it — Cursor, Kiro, Windsurf, VSCodium — carries the same agent as the app and the CLI, and Zed and JetBrains IDEs run it through the Agent Client Protocol. This post is what you get and how to start.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install it
&lt;/h2&gt;

&lt;p&gt;Search for &lt;strong&gt;Atlarix&lt;/strong&gt; in your editor's Extensions view, or install it from the &lt;a href="https://marketplace.visualstudio.com/items?itemName=atlarix.atlarix" rel="noopener noreferrer"&gt;Visual Studio Marketplace&lt;/a&gt; (VS Code) or &lt;a href="https://open-vsx.org/extension/atlarix/atlarix" rel="noopener noreferrer"&gt;Open VSX&lt;/a&gt; (Cursor, Kiro, Windsurf, VSCodium). There are builds for macOS, Windows and Linux on Intel and ARM, and the extension carries its own copy of the Atlarix CLI, so there is nothing else to install. Open the Atlarix view (the ant in the activity bar, or ⌘⌥A / Ctrl+Alt+A) and sign in the first time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Every mode, any model
&lt;/h2&gt;

&lt;p&gt;The message box has the mode: &lt;strong&gt;Build&lt;/strong&gt; changes code and runs commands, &lt;strong&gt;Explore&lt;/strong&gt; reads and answers without changing anything, &lt;strong&gt;Plan&lt;/strong&gt; writes a plan you can read before anything happens, &lt;strong&gt;Debug&lt;/strong&gt; chases a failure to its cause, &lt;strong&gt;Review&lt;/strong&gt; reads a change and reports what is wrong with it. Just under it is the model: Atlarix Auto, which picks a model for each step, the Atlarix Core models, or any model from your own API key — OpenAI, Anthropic, Google, DeepSeek, OpenRouter and the rest. The picker is the same list the app and CLI show.&lt;/p&gt;

&lt;h2&gt;
  
  
  Edits you approve in the editor's own diff
&lt;/h2&gt;

&lt;p&gt;When the agent wants to change a file, the editor opens its own side-by-side diff with the proposed version before anything is written. &lt;strong&gt;Yes&lt;/strong&gt; applies it, &lt;strong&gt;No&lt;/strong&gt; leaves the file alone, and &lt;strong&gt;Always&lt;/strong&gt; stops asking for that kind of change in this workspace. Commands wait for you the same way. You are reading the change in the tool you already trust for reading changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Plans you can watch being built
&lt;/h2&gt;

&lt;p&gt;In Plan mode the plan appears in its own panel with a checklist of steps. &lt;strong&gt;Build it&lt;/strong&gt; switches to Build and carries it out, and the panel stays on screen while it works: each step goes from ☐ to ◐ to ☑, the header counts them off, and it says Built at the end. You can see where the work is without reading the transcript.&lt;/p&gt;

&lt;h2&gt;
  
  
  Context without copy-paste
&lt;/h2&gt;

&lt;p&gt;Select code and press ⌘⌥L (Ctrl+Alt+L) to add it to the chat with its file and lines; type @ to attach a file; the + button attaches images. The model's thinking streams into a fold above its answer, so you can watch it reason and close it when the answer starts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your Chrome, your other sessions
&lt;/h2&gt;

&lt;p&gt;With the Atlarix Chrome extension installed, the agent in your editor can open pages in your own Chrome — signed in as you — to test what it just built. Every Atlarix session can message every other one: the app, the CLI, Chrome or another editor can hand your editor a task, and it arrives as a card and is answered there. &lt;code&gt;/editor&lt;/code&gt; in the CLI moves a terminal chat into your editor; the ⋯ menu in the editor moves it back to the app or a terminal.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your account in the panel
&lt;/h2&gt;

&lt;p&gt;⋯ → &lt;strong&gt;Account, usage and billing&lt;/strong&gt; shows your plan, credit and this chat's usage, with Get Pro, Add credit and Sign out; your own provider keys; and the MCP servers in this folder, which you can test, switch off or add. Come back after a few minutes away and one line recaps where the chat stands; turn that off in the same menu.&lt;/p&gt;

&lt;h2&gt;
  
  
  Zed and JetBrains IDEs
&lt;/h2&gt;

&lt;p&gt;Zed and JetBrains IDEs speak the Agent Client Protocol natively, so they run Atlarix's CLI as their agent with no plugin: &lt;code&gt;atlarix acp&lt;/code&gt;. Building a plan switches the editor's mode picker, the plan shows as the editor's own plan list, and file links open at the line. The &lt;a href="https://www.atlarix.dev/docs/guides/editors" rel="noopener noreferrer"&gt;editors guide&lt;/a&gt; has the settings for both.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it costs
&lt;/h2&gt;

&lt;p&gt;Installing the extension is free. Your own API keys cost nothing through Atlarix — you pay your provider directly. Atlarix Core models are paid from Pro or pay-as-you-go credit, the same balance as the app and CLI.&lt;/p&gt;

&lt;p&gt;Chats you start in the editor show up in the app and the CLI, and the other way round: it is one agent with one history, wherever you happen to be typing. Install it from the &lt;a href="https://marketplace.visualstudio.com/items?itemName=atlarix.atlarix" rel="noopener noreferrer"&gt;Marketplace&lt;/a&gt; or &lt;a href="https://open-vsx.org/extension/atlarix/atlarix" rel="noopener noreferrer"&gt;Open VSX&lt;/a&gt;, and see the &lt;a href="https://www.atlarix.dev/docs/guides/editors" rel="noopener noreferrer"&gt;editors guide&lt;/a&gt; for everything else.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.atlarix.dev/blogs/atlarix-vs-code-cursor-kiro-windsurf-ai-coding-agent-any-model" rel="noopener noreferrer"&gt;atlarix.dev&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Atlarix CLI 15.0.1: Sub-Agents in the Terminal, Coloured Code and a Plan You Can Read</title>
      <dc:creator>Amariah Kamau</dc:creator>
      <pubDate>Mon, 05 Oct 2026 16:06:10 +0000</pubDate>
      <link>https://dev.to/abishaiama/atlarix-cli-1501-sub-agents-in-the-terminal-coloured-code-and-a-plan-you-can-read-2hpo</link>
      <guid>https://dev.to/abishaiama/atlarix-cli-1501-sub-agents-in-the-terminal-coloured-code-and-a-plan-you-can-read-2hpo</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.atlarix.dev/blogs/atlarix-cli-sub-agents-coloured-code-readable-plan" rel="noopener noreferrer"&gt;atlarix.dev&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The Atlarix CLI shipped in 15.0.0 as the same agent as the desktop app, in a terminal. We then used it for real work: an actual pull request to a well-known open-source project, start to finish, from the terminal. That surfaced the bugs and rough edges a demo never does. Atlarix 15.0.1 is what came out of it, and this post walks through what changed and why.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sub-agents work, and they sit under the prompt box
&lt;/h2&gt;

&lt;p&gt;Sub-agents are how an agent explores in parallel: one reads the tests while another traces a function. In 15.0.0 every sub-agent the CLI started failed before it ran and then showed as running forever. Two separate bugs were behind it, and a third turned up while fixing them: outside Atlarix's own repository the CLI could not find the prompts it ships with, so every turn quietly ran without its mode's instructions and every sub-agent failed to start. All three are fixed, with tests that run the CLI from a folder that is not ours.&lt;/p&gt;

&lt;p&gt;While Atlarix works, the space under the prompt box now lists what is running: the main agent and what it is doing, then one row per sub-agent with its current step, how long it has run and its tokens. Finished ones drop off, and background commands share one row. Press ↓ and enter on a sub-agent to watch it live, its tool calls and what it is writing; ← and → step between sub-agents and esc backs out.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code is coloured, for the languages you actually read
&lt;/h2&gt;

&lt;p&gt;Answers and edit diffs are now syntax highlighted, and inline code stands out in lavender rather than a dim grey chip. The interesting part is how languages are handled. Atlarix does not ship a list of grammars. The first time a language shows up, its grammar is found by name: one already on your machine from another terminal app built on the same toolkit is reused, otherwise the language's own grammar project is fetched once. Only the languages you read ever land on disk, and offline the code simply stays plain.&lt;/p&gt;

&lt;h2&gt;
  
  
  A plan you can read while you decide
&lt;/h2&gt;

&lt;p&gt;Plan mode used to end with a popup that asked you to approve a plan you could not see. Now the plan stays pinned above the prompt box while it waits to be built. You read it, type what to change underneath, and watch it redraw as Atlarix revises it. Build it, or /build, starts the work; esc hides the plan and /plan brings it back.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sending is instant
&lt;/h2&gt;

&lt;p&gt;The first message of a session used to freeze the terminal for about a second before it appeared. The cause was token counting, which rebuilt its tokenizer every time it counted, dozens of times on a first turn. It is built once now. The desktop app got faster from the same fix.&lt;/p&gt;

&lt;h2&gt;
  
  
  The small things that add up
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The context meter shows how full the context is as a share and as tokens of the model's window, instead of a running total that could pass the window and look like a contradiction.&lt;/li&gt;
&lt;li&gt;A message you send while Atlarix works is drawn where the agent read it, not under the whole reply.&lt;/li&gt;
&lt;li&gt;/compact typed mid-answer waits for the answer to finish, and messages typed after it still go first.&lt;/li&gt;
&lt;li&gt;Pasting the same text again expands the pasted-text chip so you can edit it.&lt;/li&gt;
&lt;li&gt;The approval dialog's diff is coloured like the transcript's.&lt;/li&gt;
&lt;li&gt;The terminal tab pulses while Atlarix works, so a busy session is visible from another tab.&lt;/li&gt;
&lt;li&gt;Long session names are shortened, the prompt box sits a step above the page, and checklists read on one line.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to get it
&lt;/h2&gt;

&lt;p&gt;If you already have the CLI it updates itself. Otherwise: &lt;code&gt;npm install -g atlarix&lt;/code&gt;, &lt;code&gt;brew install amariahak/atlarix/atlarix&lt;/code&gt;, or the one-line installer on &lt;a href="https://www.atlarix.dev/cli" rel="noopener noreferrer"&gt;atlarix.dev/cli&lt;/a&gt;. The CLI shares the desktop app's sessions, models, keys and MCP servers, and runs on your own API keys, local models or Atlarix Core.&lt;/p&gt;

&lt;p&gt;Most of 15.0.1 came from using the CLI on a real task and fixing what got in the way. It also gave us the next one: Atlarix in Slack, which works on your repositories from a message and is coming soon. The full list of changes is in the &lt;a href="https://www.atlarix.dev/changelog" rel="noopener noreferrer"&gt;Atlarix changelog&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>cli</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Atlarix Auto: A Free AI Coding Agent That Picks the Model for Each Step</title>
      <dc:creator>Amariah Kamau</dc:creator>
      <pubDate>Wed, 23 Sep 2026 20:57:54 +0000</pubDate>
      <link>https://dev.to/abishaiama/atlarix-auto-a-free-ai-coding-agent-that-picks-the-model-for-each-step-4g1i</link>
      <guid>https://dev.to/abishaiama/atlarix-auto-a-free-ai-coding-agent-that-picks-the-model-for-each-step-4g1i</guid>
      <description>&lt;p&gt;Most AI coding tools ask you to make two decisions before you write a line: which model, and whose API key. Atlarix Auto removes both. It is one option in the model picker — the one new installs start on — and instead of running your whole session on a single model, it chooses a model for each step of the work. On an account with no credit, Auto in the Atlarix desktop app is free. On Atlarix Pro or credit, it is paid and private.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Atlarix Auto is
&lt;/h2&gt;

&lt;p&gt;Atlarix is a desktop coding agent: it plans, edits your code, runs commands in a per-OS sandbox, and runs your tests before it calls anything done, with every change waiting for your approval. Auto is the model setting that decides which language model does each piece of that work. You pick Auto and give it a task.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Auto picks a model, step by step
&lt;/h2&gt;

&lt;p&gt;A coding session is not one kind of work. Reading a codebase, writing a change, planning a refactor and reviewing a diff need very different amounts of reasoning. Auto routes on what each request is:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What the step is&lt;/th&gt;
&lt;th&gt;What Auto uses&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Exploring and building&lt;/td&gt;
&lt;td&gt;A fast, affordable model that is strong at code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Planning and code review&lt;/td&gt;
&lt;td&gt;A stronger reasoning model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deep thinking switched on&lt;/td&gt;
&lt;td&gt;Every step moves up one level&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A step with a screenshot, image or PDF&lt;/td&gt;
&lt;td&gt;A model that can actually read it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sub-agents, session titles, summaries&lt;/td&gt;
&lt;td&gt;The cheapest capable model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A model is rate-limited&lt;/td&gt;
&lt;td&gt;The same level from another provider&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Routing happens per request, not per session: a long task that suddenly needs to look at a screenshot gets a vision-capable model for that one step, then returns to the cheaper one. If a step fails, Atlarix retries it; a "Try with a stronger model" button reruns a hard turn one level up.&lt;/p&gt;

&lt;h2&gt;
  
  
  Free Auto, and the trade that makes it free
&lt;/h2&gt;

&lt;p&gt;On an account with no credit, Auto in the desktop app costs nothing. It runs on OpenAI models through OpenAI's data-sharing program: OpenAI provides free daily capacity for traffic it may use to improve its models. That is the whole reason it is free. Before your first free message, Atlarix shows a one-time notice explaining this, and you choose whether to go ahead. Free Auto is available in the desktop app (and to Atlarix Reviewer for public repositories only); the Chrome extension runs on paid Auto.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the free daily allowance works
&lt;/h2&gt;

&lt;p&gt;Each account gets a fair daily share, sized from what is left and how many people are using it, with a floor so everyone gets real work done and a ceiling so no single account drains it. When your share runs out, Auto falls back to a free model rather than cutting you off; only past that does it pause until the daily reset — shown on your own clock.&lt;/p&gt;

&lt;h2&gt;
  
  
  What stays private
&lt;/h2&gt;

&lt;p&gt;With Atlarix Pro or credit, Auto is paid and private: nothing it handles is shared or used to train models. Your own API keys work as before. Local models through Ollama or LM Studio never leave your machine. Atlarix itself never trains on your code, in any mode.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it costs when you pay
&lt;/h2&gt;

&lt;p&gt;The app is free — every feature, no gating. Paid inference is Atlarix Pro ($19/month, including Core usage across the desktop app, the Chrome extension and Atlarix Reviewer) or pay-as-you-go credit, with the cost of every reply shown.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Download Atlarix from &lt;a href="https://www.atlarix.dev" rel="noopener noreferrer"&gt;atlarix.dev&lt;/a&gt;. New installs start on Auto; if you picked a model before, switch to Auto in the model picker, then give it a real task on your own code.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.atlarix.dev/blogs/atlarix-auto-free-ai-coding-agent-no-api-key" rel="noopener noreferrer"&gt;atlarix.dev&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
      <category>tooling</category>
    </item>
    <item>
      <title>The harness, not the model: how to make a weak or local model reliable enough to ship</title>
      <dc:creator>Amariah Kamau</dc:creator>
      <pubDate>Fri, 11 Sep 2026 19:41:05 +0000</pubDate>
      <link>https://dev.to/abishaiama/the-harness-not-the-model-how-to-make-a-weak-or-local-model-reliable-enough-to-ship-2plp</link>
      <guid>https://dev.to/abishaiama/the-harness-not-the-model-how-to-make-a-weak-or-local-model-reliable-enough-to-ship-2plp</guid>
      <description>&lt;p&gt;If you've tried to point a local model — Qwen, a quantized Llama, whatever fits on your GPU — at a real task in a real repo, you already know the feeling. It starts confidently. It edits three files. It announces it's done. And then you run the tests and half of them are red, one of the files it "edited" is byte-for-byte unchanged, and the function it swore it added isn't there.&lt;/p&gt;

&lt;p&gt;The usual conclusion is: the model is too weak. Get a bigger model, or rent a frontier API, and the problem goes away.&lt;/p&gt;

&lt;p&gt;That conclusion is mostly wrong, and it's expensive. A large share of what looks like model weakness is actually &lt;strong&gt;the absence of a system around the model&lt;/strong&gt; — the scaffolding that a frontier model partially compensates for on its own and a weak model does not. If you build that system, a much weaker model becomes usable for work you'd have assumed it couldn't touch. The industry has a name for that system: the &lt;strong&gt;harness&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I've spent the last several months building one — a coding harness called Atlarix that's designed to run any model, including small local ones, and get real work out of them. Along the way it's produced code that got merged into projects like Remix, Caddy, Traefik, and Valkey (more on that, honestly, at the end). This post isn't a pitch for it. It's the set of principles I learned building it, written so you can apply them to your &lt;em&gt;own&lt;/em&gt; agent, whatever it's built on. Atlarix is just the reference implementation I'll point at to prove I actually did each thing rather than just theorizing.&lt;/p&gt;

&lt;p&gt;Here's the core claim, stated plainly:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A weak model doesn't need a bigger prompt. It needs a system that catches its mistakes instead of trusting them.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Four mechanisms do most of the work. None of them require a better model.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Verify edits against reality, not against the model's word
&lt;/h2&gt;

&lt;p&gt;The single most common failure mode of a weak model in a coding loop is the &lt;strong&gt;confident false completion&lt;/strong&gt;: it reports success for work it didn't actually do. The edit didn't apply. The file didn't change. The function it described isn't on disk.&lt;/p&gt;

&lt;p&gt;A frontier model does this too — it just does it less often, so you get away with trusting it. With a weak model you cannot trust the report at all. So don't. The fix is a principle I'd now build into any agent from day one:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Never let the model be the judge of whether its own change succeeded. Check the world.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Concretely, after every edit, the harness re-reads the file from disk and confirms the change is actually present. If the edit didn't land, that fact goes &lt;strong&gt;back to the model as a tool result&lt;/strong&gt; — "the file is unchanged" — instead of forward to the user as "done." The model gets a chance to notice and retry, in the same turn, before anything reaches you.&lt;/p&gt;

&lt;p&gt;The same principle extends to commands. When the agent runs the project's own checks — &lt;code&gt;tsc&lt;/code&gt;, &lt;code&gt;eslint&lt;/code&gt;, &lt;code&gt;ruff&lt;/code&gt;, &lt;code&gt;mypy&lt;/code&gt;, &lt;code&gt;pytest&lt;/code&gt;, whatever the repo uses — a non-zero exit code is not something the agent gets to narrate its way past. In Atlarix the turn is &lt;em&gt;held open&lt;/em&gt;: a command that exits non-zero, or an edit that didn't verify on disk, is routed back to the agent rather than surfaced as a finished result. The agent literally cannot declare a task done while the project's own tests are failing.&lt;/p&gt;

&lt;p&gt;That one rule — &lt;strong&gt;the agent can't mark work complete while the repo's checks are red&lt;/strong&gt; — eliminates the most damaging class of weak-model errors, because the most damaging errors aren't wrong code. They're wrong code &lt;em&gt;reported as correct&lt;/em&gt;. Wrong-but-flagged is recoverable. Wrong-but-confident is what ships bugs.&lt;/p&gt;

&lt;p&gt;You can implement this in any loop. Run the checks. Read the exit code. If it's non-zero, feed the failure back as the next observation instead of returning to the caller. It's not clever. It's just refusing to take the model's word for anything you can verify yourself.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Enforce control in the harness, not in the prompt
&lt;/h2&gt;

&lt;p&gt;There's a strong temptation to solve agent misbehavior with more instructions. &lt;em&gt;"Always wait for the command to finish before continuing. Never claim completion prematurely. Always ask before running destructive commands."&lt;/em&gt; You write a longer and longer system prompt, and a frontier model mostly follows it, and a weak model mostly doesn't — because following a paragraph of procedural instructions &lt;em&gt;is itself a capability&lt;/em&gt; that weak models lack.&lt;/p&gt;

&lt;p&gt;So stop asking the model to behave and make the behavior structural.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If a rule matters, the harness should enforce it mechanically, so a model that "forgets" the rule physically can't break it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Tool approvals, background command handling, wait-states, sub-agent orchestration — in a prompt-driven agent these are all things you &lt;em&gt;ask&lt;/em&gt; the model to handle correctly. In a harness-driven agent they're enforced by the system around the model. A weak model can't emit a premature "task complete" if completion is gated on verification it doesn't control (see #1). It can't skip an approval if the approval is a queue the execution path &lt;em&gt;must&lt;/em&gt; pass through, not a politeness the model chooses to observe.&lt;/p&gt;

&lt;p&gt;The practical test: for every "always/never" line in your system prompt, ask &lt;em&gt;"what happens if the model ignores this?"&lt;/em&gt; If the answer is "something bad happens," that rule doesn't belong in the prompt — it belongs in the harness, as a gate the model routes through whether it wants to or not. The prompt is for guidance. The harness is for guarantees. Weak models need guarantees.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Give it a sandbox, so a mistake is contained instead of catastrophic
&lt;/h2&gt;

&lt;p&gt;A weak model &lt;em&gt;will&lt;/em&gt; try to run something it shouldn't — a command scoped too broadly, a write outside the project, a destructive operation it didn't reason through. If your safety story is "the model is careful," you don't have a safety story.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Contain execution at the OS level, so the blast radius of a bad call is bounded by the system, not by the model's judgment.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Atlarix confines command execution per-OS — Landlock on Linux, AppContainer on Windows, Seatbelt on macOS — so the agent physically cannot write outside the project you opened. There's an approval queue with hunk-level accept/reject on every diff, and a danger gate on destructive operations. The point isn't the specific primitives; it's the principle: &lt;strong&gt;the model's mistakes are caught by the system, not trusted on faith.&lt;/strong&gt; When containment is structural, you can let a weaker, less-trustworthy model act, because the cost of it being wrong is bounded.&lt;/p&gt;

&lt;p&gt;This is also what makes local-first viable at all. If the model runs on your machine and the execution is sandboxed to your project, "the AI touched my system" stops being a leap of faith. The containment is what earns the autonomy.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Feed it structure on demand, not the whole repo
&lt;/h2&gt;

&lt;p&gt;Weak models have smaller effective context and degrade faster as you fill it. The instinct is to stuff the repo into the prompt so the model "has everything." This is exactly backwards — you drown the small model in tokens and it performs &lt;em&gt;worse&lt;/em&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Retrieve narrowly and on demand. Let the model pull what it needs when it needs it, instead of pre-loading everything it might need.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Atlarix searches the repo on demand — bundled &lt;code&gt;ripgrep&lt;/code&gt; for &lt;code&gt;grep&lt;/code&gt;/&lt;code&gt;glob&lt;/code&gt;, no index to build, no background watcher — and keeps durable notes on what it learns about the codebase so it doesn't re-derive the same structure every turn. The model asks for what it needs; it isn't forced to hold the whole tree in its head.&lt;/p&gt;

&lt;p&gt;The general principle for any agent: on-demand, tool-driven retrieval beats context-stuffing, and it beats it &lt;em&gt;more&lt;/em&gt; the weaker your model is. A frontier model can afford to waste context. A local model can't. Give it a way to look things up, and a way to remember what it found, and you've freed its limited context for actual reasoning.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why this matters beyond saving on API bills
&lt;/h2&gt;

&lt;p&gt;The obvious payoff is cost — run a local model, pay nothing per token, keep your code on your own machine. That's real. But the deeper payoff is &lt;em&gt;trust&lt;/em&gt;. Every one of these mechanisms replaces a place where you were trusting the model with a place where the system checks. Verified edits replace trusting the completion report. Harness-enforced control replaces trusting the model to follow rules. The sandbox replaces trusting it not to do damage. On-demand retrieval replaces trusting it to juggle the whole repo.&lt;/p&gt;

&lt;p&gt;Stack them and something surprising happens: &lt;strong&gt;the model's reliability stops being the ceiling.&lt;/strong&gt; The system's guarantees become the floor, and a weaker model operating above a solid floor beats a stronger model operating on trust. That's the whole thesis. The harness, not the model.&lt;/p&gt;




&lt;h2&gt;
  
  
  The honest part
&lt;/h2&gt;

&lt;p&gt;I said I'd be straight about the merges, so here it is.&lt;/p&gt;

&lt;p&gt;Atlarix, running on open-weight and local models, has produced code that maintainers merged into real projects — Remix (merged by its co-creator), Caddy, Traefik, Valkey, and others. Every one is a public, verifiable pull request; the links are on &lt;a href="https://atlarix.dev" rel="noopener noreferrer"&gt;atlarix.dev&lt;/a&gt; if you want to check them, and you should.&lt;/p&gt;

&lt;p&gt;But I want to be precise about what that does and doesn't mean, because a technical audience deserves it and will figure it out anyway. These were &lt;strong&gt;human-directed&lt;/strong&gt;. I drove the agent — chose the target, steered the work, reviewed the diff before it went out — and the agent appears as a &lt;em&gt;co-author&lt;/em&gt; on the commits, not the sole author. A maintainer of Remix or Caddy reviewed the change and merged it after dealing with me as the human behind it. What the harness did was get an open-weight model's output to the point where it could clear that bar: correct, verified against the project's own checks, and clean enough to survive a real maintainer's review.&lt;/p&gt;

&lt;p&gt;That's the claim, and it's a narrower and more honest one than "AI merged code into Remix." It's: a well-built harness plus a modest model, driven by a human who knows what they want, can produce work that passes the same gate a human contributor's work passes. That's not magic. It's the four mechanisms above, doing their job.&lt;/p&gt;

&lt;p&gt;If you're building your own agent, take the principles and leave the tool. If you want to see the reference implementation, it's &lt;a href="https://atlarix.dev" rel="noopener noreferrer"&gt;Atlarix&lt;/a&gt; — a private AI workstation that runs any model, local or hosted, with your code staying on your machine. Either way: stop blaming the model. Build the harness.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I'm Amariah Abishai, a self-taught engineer in Nairobi building AI developer tooling at NorahLabs. If you want the deeper version of the retrieval design, there's a &lt;a href="https://doi.org/10.5281/zenodo.20381860" rel="noopener noreferrer"&gt;published paper&lt;/a&gt; on an earlier structural-retrieval approach I tried, measured, and eventually moved away from — which is its own lesson for another post.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>localagents</category>
      <category>agents</category>
    </item>
    <item>
      <title>I shipped two PRs into Alibaba's qwen-code using only open-weight models. Here's the honest version.</title>
      <dc:creator>Amariah Kamau</dc:creator>
      <pubDate>Fri, 03 Jul 2026 16:28:04 +0000</pubDate>
      <link>https://dev.to/abishaiama/i-shipped-two-prs-into-alibabas-qwen-code-using-only-open-weight-models-heres-the-honest-version-3clk</link>
      <guid>https://dev.to/abishaiama/i-shipped-two-prs-into-alibabas-qwen-code-using-only-open-weight-models-heres-the-honest-version-3clk</guid>
      <description>&lt;p&gt;I build &lt;a href="https://atlarix.dev" rel="noopener noreferrer"&gt;Atlarix&lt;/a&gt; — a desktop coding harness that runs whatever model you point it at: managed, your own API key, or fully local via Ollama or LM Studio. The whole thesis is that the gap between a weak open-weight model and a frontier one closes when the harness does the heavy lifting. This post is a test of exactly that.&lt;/p&gt;

&lt;p&gt;So I decided to test that thesis in the least forgiving place I could think of: contributing real code to a frontier lab's &lt;em&gt;own&lt;/em&gt; production repo, using nothing but open-weight models to write it.&lt;/p&gt;

&lt;p&gt;Two pull requests are now merged into &lt;a href="https://github.com/QwenLM/qwen-code" rel="noopener noreferrer"&gt;QwenLM/qwen-code&lt;/a&gt; — Alibaba's open-source coding agent. Here's the honest version, including the part that didn't go well and the constraint that shaped how I worked.&lt;/p&gt;

&lt;h2&gt;
  
  
  The first attempt got closed — correctly
&lt;/h2&gt;

&lt;p&gt;My first swing was ambitious: a full always-on scheduled-task daemon. Tasks that fire on a cron schedule without an interactive session open, system service installation, webhook triggers, the works. Around 5,000 lines across four rollout phases.&lt;/p&gt;

&lt;p&gt;A maintainer closed it. And they were right to.&lt;/p&gt;

&lt;p&gt;The problem wasn't that the code didn't work — it was that I'd built a &lt;em&gt;second, parallel&lt;/em&gt; daemon with its own storage format and lifecycle, when the repo already had a long-running daemon (&lt;code&gt;qwen serve&lt;/code&gt;) and a durable scheduler I should have extended instead. On top of that, four phases in one PR is simply too much to review well.&lt;/p&gt;

&lt;p&gt;The maintainer's feedback was blunt and generous at the same time: reuse the existing infrastructure, make the change incremental, split it into reviewable pieces. What could have been ~300 lines of extension, I'd written as thousands of lines of duplication.&lt;/p&gt;

&lt;p&gt;That stung. But it was the most useful thing that happened in the whole process, because it taught me the lesson every open-source contributor eventually learns: &lt;strong&gt;read the existing architecture before you build, and keep your PRs small enough to review.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  So I did the right-sized thing instead
&lt;/h2&gt;

&lt;p&gt;Instead of fighting to rebuild the giant feature immediately, I went looking for a small, well-scoped problem — the kind of change that's easy to review, easy to revert, and unlikely to break anything.&lt;/p&gt;

&lt;p&gt;I found one in the web-shell's model picker.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/QwenLM/qwen-code/pull/6209" rel="noopener noreferrer"&gt;PR #6209&lt;/a&gt; — vision model support in the web-shell UI.&lt;/strong&gt; The CLI could select a vision model; the web-shell daemon UI couldn't. I added it, following the exact pattern the codebase already used for other model modes. Small, mechanical, convention-matching. It merged.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/QwenLM/qwen-code/pull/6236" rel="noopener noreferrer"&gt;PR #6236&lt;/a&gt; — a real data-loss fix.&lt;/strong&gt; This one mattered more than its size suggests. When a user selected a vision model from the web-shell picker, they'd see a success toast — but their choice was silently discarded. The picker stored the model ID in one format (&lt;code&gt;modelId(authType)&lt;/code&gt;, ACP-style) while the core resolver expected another (&lt;code&gt;authType:modelId&lt;/code&gt;). The mismatch meant the stored value never resolved, and the system quietly fell back to auto-select. The settings page still &lt;em&gt;showed&lt;/em&gt; the value, which masked the failure completely. The user's explicit choice had no effect, and nothing told them.&lt;/p&gt;

&lt;p&gt;The fix re-encodes the format before persisting, plus type-safe dispatch to replace some fragile ternary chains, plus the missing English and Chinese i18n keys. It merged too.&lt;/p&gt;

&lt;h2&gt;
  
  
  The honest part: the models didn't write perfect code
&lt;/h2&gt;

&lt;p&gt;This is the bit I actually care about, because it's where the hype usually lies.&lt;/p&gt;

&lt;p&gt;Both PRs went through several rounds of genuine maintainer review. And the maintainers — Alibaba collaborators, plus an automated reviewer running on Qwen's own models — found &lt;em&gt;real&lt;/em&gt; bugs. Not style nitpicks. Actual security and lifecycle issues: an HMAC check computed over the wrong input, a timing-attack-vulnerable token comparison, a timer that could fire on a stopped process, an auth config silently stripped from a webhook path.&lt;/p&gt;

&lt;p&gt;I fixed and re-verified each one before merge. On #6236, a maintainer even built the PR locally with real browser tests and screenshots to confirm the fix worked end-to-end before approving.&lt;/p&gt;

&lt;p&gt;That review loop is the entire point. The claim isn't "open-weight models wrote flawless code." They didn't. The claim is that &lt;strong&gt;open-weight models, driven by a good harness, could take architectural feedback and iterate to something a senior maintainer at a frontier lab was willing to merge.&lt;/strong&gt; That's a much more interesting and much more honest result than "the AI one-shotted it."&lt;/p&gt;

&lt;h2&gt;
  
  
  The constraint nobody tells you about: cost
&lt;/h2&gt;

&lt;p&gt;Here's a detail I think is worth being transparent about, because it's the reality of building solo.&lt;/p&gt;

&lt;p&gt;PR #6209 was built almost entirely on Qwen (3.6 Plus, 3.7 Plus/Max) via OpenRouter. But partway through PR #6236, I started running low on OpenRouter credits. As a solo founder trying to conserve runway for actual users, I switched to using DeepSeek API credits instead. So #6236 ended up roughly a 50/50 mix of Qwen and DeepSeek.&lt;/p&gt;

&lt;p&gt;I could have hidden that and claimed "100% Qwen" across the board. But two things: first, it wouldn't be true, and the whole value of a post like this is that it's honest. Second — it actually makes the result &lt;em&gt;broader&lt;/em&gt;, not weaker. The thesis was never "Qwen specifically." It was "open-weight models, in a harness built for them, can do real work." Making that work across &lt;em&gt;two&lt;/em&gt; different open-weight labs is stronger evidence than making it work with one.&lt;/p&gt;

&lt;p&gt;No frontier model wrote either PR. Just open-weight models — Qwen and DeepSeek — running in Atlarix.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters (to me, at least)
&lt;/h2&gt;

&lt;p&gt;I'm a self-taught developer building in Nairobi. The models I can afford to run at scale are open-weight ones. Atlarix exists because I needed a way to make those models genuinely productive — not "good enough for a demo," but good enough to ship code into a repo maintained by the people who &lt;em&gt;train&lt;/em&gt; the models.&lt;/p&gt;

&lt;p&gt;Two merged PRs in a Tier-1 lab's production repo, written by open-weight models in the harness, reviewed and merged by the lab's own maintainers, is the clearest proof of that thesis I've been able to produce.&lt;/p&gt;

&lt;p&gt;The gap between open-weight and frontier is real. But a lot of it lives in the harness, not the weights. Close that gap, and a model you can run yourself can punch well above its weight.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Atlarix is at &lt;a href="https://atlarix.dev" rel="noopener noreferrer"&gt;atlarix.dev&lt;/a&gt;. If you're building with open-weight models or thinking about model-agnostic tooling, I'd genuinely like to compare notes.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>openweight</category>
      <category>devtools</category>
    </item>
  </channel>
</rss>
