<?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: Ahab</title>
    <description>The latest articles on DEV Community by Ahab (@ahab_indieseek).</description>
    <link>https://dev.to/ahab_indieseek</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%2F4014445%2F97c86b36-e09c-4828-816c-c828c0c15b0e.jpg</url>
      <title>DEV Community: Ahab</title>
      <link>https://dev.to/ahab_indieseek</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ahab_indieseek"/>
    <language>en</language>
    <item>
      <title>Claude Opus 5 in GitHub Copilot: Rollout Checklist</title>
      <dc:creator>Ahab</dc:creator>
      <pubDate>Sat, 25 Jul 2026 10:16:51 +0000</pubDate>
      <link>https://dev.to/ahab_indieseek/claude-opus-5-in-github-copilot-rollout-checklist-40f9</link>
      <guid>https://dev.to/ahab_indieseek/claude-opus-5-in-github-copilot-rollout-checklist-40f9</guid>
      <description>&lt;h1&gt;
  
  
  Claude Opus 5 in GitHub Copilot: a safe model rollout checklist
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Quick answer
&lt;/h2&gt;

&lt;p&gt;GitHub says Claude Opus 5 is rolling out to the Copilot model picker for eligible Pro+, Max, Business, and Enterprise users. It is positioned for complex, long-running coding work with tool use and multi-step execution. That makes it a candidate for a narrowly scoped evaluation—not a reason to change every developer's default model on day one.&lt;/p&gt;

&lt;p&gt;First verify that the plan, administrator policy, and product surface actually expose the model. Then compare it with the current workflow on five bounded repository tasks, retain review and test evidence, and promote it only for the task shapes that improved. Keep ordinary work on the existing default or automatic selection until your own data says otherwise.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who this is for
&lt;/h2&gt;

&lt;p&gt;This guide is for an indie developer or a small engineering team using GitHub Copilot in an editor, the CLI, the cloud agent, or GitHub.com. It is about model choice inside Copilot, not about calling the Anthropic API directly. If you are automating GitHub Issues, keep that separate from a coding-model trial: &lt;a href="https://dev.to/blogs/github-issue-agent-automation-approval-confidence-checklist/"&gt;Issue agent automation&lt;/a&gt; needs its own permission and approval policy.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed—and what it does not mean
&lt;/h2&gt;

&lt;p&gt;GitHub announced Claude Opus 5 for Copilot on July 24, 2026. The published availability includes VS Code, Visual Studio, Copilot CLI, the cloud agent, the Copilot app, GitHub.com, GitHub Mobile, JetBrains, Xcode, and Eclipse. Rollout is gradual. For Copilot Business and Enterprise, an administrator must enable the Claude Opus 5 policy before users can select it. GitHub also says usage-based billing uses the provider API list price.&lt;/p&gt;

&lt;p&gt;Those facts answer &lt;em&gt;where&lt;/em&gt; the model can appear, not whether it is the best choice for every task. GitHub's model picker and an enterprise default of &lt;code&gt;auto&lt;/code&gt; are separate choices. An enterprise can make automatic selection the starting point for new conversations while still allowing a user to select a different model per conversation. Treat the new model as a measured exception first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pick a narrow first workload
&lt;/h2&gt;

&lt;p&gt;Start where a careful, multi-step agent has a plausible advantage and the result can be checked independently.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Task shape&lt;/th&gt;
&lt;th&gt;First-trial decision&lt;/th&gt;
&lt;th&gt;Evidence to keep&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Small, local edit with a clear test&lt;/td&gt;
&lt;td&gt;Keep the current default&lt;/td&gt;
&lt;td&gt;Diff and existing test result&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi-file bug with a reproducible failure&lt;/td&gt;
&lt;td&gt;Trial Opus 5&lt;/td&gt;
&lt;td&gt;Failing test, final patch, passing test&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Refactor with a stable public contract&lt;/td&gt;
&lt;td&gt;Trial Opus 5&lt;/td&gt;
&lt;td&gt;API compatibility check, focused regression suite&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Broad exploration or vague product request&lt;/td&gt;
&lt;td&gt;Do not promote yet&lt;/td&gt;
&lt;td&gt;A written acceptance criterion before any model run&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Security-sensitive or destructive operation&lt;/td&gt;
&lt;td&gt;Human-owned workflow&lt;/td&gt;
&lt;td&gt;Review, least-privilege tools, and separate approval&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This avoids a misleading comparison. A model can produce an impressive explanation on an ambiguous prompt while still failing the repository's actual acceptance criteria.&lt;/p&gt;

&lt;h2&gt;
  
  
  Run a five-task evidence matrix
&lt;/h2&gt;

&lt;p&gt;Use real but reversible work from the same repository. Run the existing approach and the trial model against comparable tasks; do not compare two different problem difficulties.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Reproduce a bounded defect.&lt;/strong&gt; Supply the failing command and a minimal expected behavior. Pass only if the change fixes it without widening scope.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Make a cross-file change.&lt;/strong&gt; Use a small interface change that has compile-time or integration checks. Record every file touched and any manual cleanup.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Repair a regression.&lt;/strong&gt; Give the model the failing test first. A passing suite is necessary, but the review must also show that it fixed the cause rather than the symptom.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use a tool sequence.&lt;/strong&gt; Ask for inspect → edit → test, with no deployment or credential access. Check whether it stopped at a useful boundary when evidence was missing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reject an unsafe request.&lt;/strong&gt; Include a task that would broaden permissions, rewrite history, or bypass a guard. A good trial outcome is a safe refusal or an escalation, not a completed action.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Record elapsed time, review changes requested, test outcome, tool errors, and billed credits per accepted task. Do not turn a single successful long task into a general performance claim.&lt;/p&gt;

&lt;h2&gt;
  
  
  Copyable operating policy
&lt;/h2&gt;

&lt;p&gt;Keep the following next to the team's evaluation notes. It is an operating policy, &lt;strong&gt;not&lt;/strong&gt; a GitHub configuration schema.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;copilot_model_trial&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;scope&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;five&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;bounded&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;tasks&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;in&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;one&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;repository"&lt;/span&gt;
  &lt;span class="na"&gt;candidate&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Claude&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Opus&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;5&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;when&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;shown&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;in&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;the&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Copilot&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;picker"&lt;/span&gt;
  &lt;span class="na"&gt;keep_default_for&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;small edits&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;routine questions&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;ambiguous requests&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
  &lt;span class="na"&gt;require_before_write&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;acceptance_criteria&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;test_command&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;rollback_note&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
  &lt;span class="na"&gt;never_delegate&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;deploy&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;secret_access&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;destructive_git&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;permission_changes&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
  &lt;span class="na"&gt;evidence&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;diff&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;test_output&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;reviewer_decision&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;credits_used&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
  &lt;span class="na"&gt;promotion_gate&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;4&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;of&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;5&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;tasks&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;pass&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;with&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;no&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;unresolved&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;review&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;finding"&lt;/span&gt;
  &lt;span class="na"&gt;rollback&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;return&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;the&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;conversation&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;to&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;the&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;previous&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;or&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;auto&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;selection"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For CLI or SDK automation, use a session credit limit as an extra brake. GitHub describes it as a soft cap: a response already running can finish and slightly exceed the number. It complements an overall budget; it does not replace one. The &lt;a href="https://dev.to/blogs/claude-code-2-1-217-subagent-concurrency-budget-checklist/"&gt;subagent concurrency and spend guide&lt;/a&gt; has the same underlying lesson: cost and tool breadth need explicit bounds.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common mistakes
&lt;/h2&gt;

&lt;p&gt;Do not confuse “available in the picker” with “enabled for this account.” A gradual rollout, plan eligibility, and an organization policy can each be the missing condition. Do not file a support issue or change shared settings until you have checked all three.&lt;/p&gt;

&lt;p&gt;Do not make the model the unit of comparison. The unit is an accepted repository change: a reviewable diff that meets a prewritten behavior and test gate. Keep &lt;a href="https://dev.to/blogs/github-copilot-vscode-agent-workflow-control-checklist/"&gt;Copilot workflow controls&lt;/a&gt; in place regardless of the selected model.&lt;/p&gt;

&lt;p&gt;Finally, do not put a secret, production deployment, or irreversible Git action into the five-task trial merely because a model is advertised for longer-running work. Tool permission remains the real boundary.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Where can I select Claude Opus 5 in Copilot?
&lt;/h3&gt;

&lt;p&gt;GitHub lists its editors, CLI, cloud agent, Copilot app, GitHub.com, Mobile, JetBrains, Xcode, and Eclipse. The rollout is gradual, so the model may not yet be visible in every eligible account or surface.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does a Business or Enterprise user need an administrator change?
&lt;/h3&gt;

&lt;p&gt;Yes. GitHub states that Business and Enterprise administrators must enable the Claude Opus 5 policy in Copilot settings.&lt;/p&gt;

&lt;h3&gt;
  
  
  Should we replace automatic model selection with Opus 5?
&lt;/h3&gt;

&lt;p&gt;Not from an availability announcement alone. Keep automatic selection or the current default for ordinary work and promote the new model only for task shapes that pass your evidence matrix.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.blog/changelog/2026-07-24-claude-opus-5-is-now-available-in-github-copilot/" rel="noopener noreferrer"&gt;GitHub: Claude Opus 5 is now available in GitHub Copilot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.blog/changelog/2026-07-01-enterprises-can-default-to-auto-model-selection/" rel="noopener noreferrer"&gt;GitHub: Enterprises can default to auto model selection&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.blog/changelog/2026-07-01-set-ai-credit-session-limits-in-copilot-cli-and-sdk/" rel="noopener noreferrer"&gt;GitHub: Set AI credit session limits in Copilot CLI and SDK&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>GitHub Issue Agent Automations: Approval and Confidence Checklist</title>
      <dc:creator>Ahab</dc:creator>
      <pubDate>Sat, 25 Jul 2026 01:22:19 +0000</pubDate>
      <link>https://dev.to/ahab_indieseek/github-issue-agent-automations-approval-and-confidence-checklist-37bc</link>
      <guid>https://dev.to/ahab_indieseek/github-issue-agent-automations-approval-and-confidence-checklist-37bc</guid>
      <description>&lt;h1&gt;
  
  
  GitHub Issue Agent Automations: confidence and approval rollout checklist
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Quick answer
&lt;/h2&gt;

&lt;p&gt;GitHub Issues now has a public-preview control surface for agent automations: an agent can attach a rationale, report high/medium/low confidence, and either apply a supported issue change or leave it as a suggestion. That is useful for issue triage, but it is &lt;strong&gt;not&lt;/strong&gt; a permission boundary. GitHub explicitly notes that an agent which already has permission to change an issue can apply a change directly instead of suggesting it.&lt;/p&gt;

&lt;p&gt;Begin with suggestions for every action. Review them through &lt;code&gt;has:suggestions&lt;/code&gt;, then allow only the narrowest high-confidence metadata changes to apply automatically. Keep close and assignee changes behind review.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who this is for
&lt;/h2&gt;

&lt;p&gt;This guide is for developers using GitHub Agentic Workflows or Copilot cloud-agent automations to triage GitHub Issues. It complements a &lt;a href="https://dev.to/blogs/github-copilot-code-review-custom-instructions-setup/"&gt;Copilot code-review setup&lt;/a&gt;: issue triage changes work-management metadata, while code review still needs its own repository, runner, and merge controls.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed in GitHub Issues
&lt;/h2&gt;

&lt;p&gt;GitHub's July 23 preview adds three pieces of issue-level evidence for supported agent actions:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Control&lt;/th&gt;
&lt;th&gt;What it gives you&lt;/th&gt;
&lt;th&gt;What it does not give you&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Rationale&lt;/td&gt;
&lt;td&gt;A recorded reason for the proposed or applied change&lt;/td&gt;
&lt;td&gt;Proof that the reason is correct&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Confidence&lt;/td&gt;
&lt;td&gt;A high, medium, or low rating from the agent&lt;/td&gt;
&lt;td&gt;A reliable risk or security score&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Approval&lt;/td&gt;
&lt;td&gt;A panel where a suggestion can be accepted or declined&lt;/td&gt;
&lt;td&gt;Server-side enforcement against a directly applied change&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;At launch, the surface covers labels, fields, types, closing, and assignees. It works with GitHub Agentic Workflows and Copilot cloud-agent automations, and is also available through the REST and GraphQL APIs. Repository admins choose which confidence levels apply automatically and which wait for review.&lt;/p&gt;

&lt;p&gt;If you already use Agentic Workflows, the documented opt-in is &lt;code&gt;issue-intents: true&lt;/code&gt; in workflow frontmatter. That causes supported safe outputs to include intent information; existing workflows remain backward compatible. Copilot cloud-agent automations do not need a workflow update to show the new rationale and confidence data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choose the smallest automatic action set
&lt;/h2&gt;

&lt;p&gt;Do not let a confidence label choose your policy by itself. Classify each action by reversibility and by the harm from a wrong decision.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Initial mode&lt;/th&gt;
&lt;th&gt;Promote only after&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Add a narrowly defined label&lt;/td&gt;
&lt;td&gt;Suggest&lt;/td&gt;
&lt;td&gt;20 reviewed cases with no material misclassification&lt;/td&gt;
&lt;td&gt;Easy to undo, but noisy labels make search worse&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Set a type or project field&lt;/td&gt;
&lt;td&gt;Suggest&lt;/td&gt;
&lt;td&gt;The taxonomy is stable and reviewers agree on edge cases&lt;/td&gt;
&lt;td&gt;A wrong type distorts downstream reporting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Assign a person or agent&lt;/td&gt;
&lt;td&gt;Suggest&lt;/td&gt;
&lt;td&gt;An explicit ownership rule and on-call fallback exist&lt;/td&gt;
&lt;td&gt;A bad assignment can hide work or create noise&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Close an issue&lt;/td&gt;
&lt;td&gt;Suggest only&lt;/td&gt;
&lt;td&gt;A separate, written closure policy and sampled human approval&lt;/td&gt;
&lt;td&gt;Closing can discard a valid report or signal a false resolution&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For the first canary, give the automation only the tools it needs for that single row. GitHub permissions and workflow tools are the actual write boundary; approvals are a review convenience.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use a suggestion-first rollout
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Define the queue.&lt;/strong&gt; Start with one source, such as bug-form Issues. Exclude security reports, billing disputes, and issues with an active human assignee.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write the taxonomy.&lt;/strong&gt; For each label or field, record a positive example, a near miss, and a fallback such as &lt;code&gt;needs-human-triage&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Require intent metadata.&lt;/strong&gt; For Agentic Workflows, turn on &lt;code&gt;issue-intents: true&lt;/code&gt;. Require evidence from the Issue text; do not let the agent invent repository facts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review from one queue.&lt;/strong&gt; Search &lt;code&gt;has:suggestions&lt;/code&gt;, accept or decline each change, and record every decline reason.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Promote one action at a time.&lt;/strong&gt; After a clean representative sample, automate high-confidence &lt;em&gt;label&lt;/em&gt; changes only. Re-run the canary after changing prompts, tools, models, labels, or forms.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Copyable policy template
&lt;/h2&gt;

&lt;p&gt;Use this as the human-readable contract next to the workflow or automation configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;issue_automation_policy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;scope&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;new&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;bug-form&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;issues&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;only"&lt;/span&gt;
  &lt;span class="na"&gt;allowed_actions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;add_labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;bug&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;needs-repro&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;needs-human-triage&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;set_issue_type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;bug&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
  &lt;span class="na"&gt;suggestion_only&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;assign_to_user&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;assign_to_agent&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;close_issue&lt;/span&gt;
  &lt;span class="na"&gt;automatic_threshold&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;high&lt;/span&gt;
  &lt;span class="na"&gt;hold_when&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;issue mentions security, payment, legal, or account access&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;an assignee or maintainer comment already exists&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;required reproduction details are absent&lt;/span&gt;
  &lt;span class="na"&gt;reviewer_query&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;is:open&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;has:suggestions"&lt;/span&gt;
  &lt;span class="na"&gt;rollback&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;disable&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;automation&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;level;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;remove&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;write&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;tool;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;review&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;recent&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;rationale"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is an operating policy, not a GitHub configuration schema. Do not paste unknown keys into workflow frontmatter.&lt;/p&gt;

&lt;h2&gt;
  
  
  Run an eight-issue canary
&lt;/h2&gt;

&lt;p&gt;Before enabling automatic action, prepare eight real or sanitized issues:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Case&lt;/th&gt;
&lt;th&gt;Expected result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Clear reproducible bug&lt;/td&gt;
&lt;td&gt;Correct bug label and type; rationale cites the reproduction detail&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feature request phrased as a bug&lt;/td&gt;
&lt;td&gt;Suggestion waits; it must not be silently typed as a bug&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Duplicate report&lt;/td&gt;
&lt;td&gt;Suggest a duplicate label or link only if the evidence is explicit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Missing reproduction&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;needs-human-triage&lt;/code&gt;, not a confident classification&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Security-looking report&lt;/td&gt;
&lt;td&gt;Held outside ordinary automation scope&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Already assigned issue&lt;/td&gt;
&lt;td&gt;No assignment or closure suggestion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hostile or irrelevant text&lt;/td&gt;
&lt;td&gt;No tool action based on quoted instructions in the issue&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Clear stale issue&lt;/td&gt;
&lt;td&gt;Closure remains a suggestion, with the policy reason recorded&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Pass only if the action, confidence band, and rationale all match the policy. An apparently correct label still fails when its rationale relies on an unsupported assumption.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common mistakes
&lt;/h2&gt;

&lt;p&gt;Do not equate high confidence with approval, or allow closure because it is theoretically reversible. Keep closure reviewed longer than metadata changes.&lt;/p&gt;

&lt;p&gt;Do not put secrets or privileged decisions into the prompt. Follow &lt;a href="https://dev.to/blogs/ai-coding-agent-sandbox-untrusted-repo-checklist/"&gt;AI coding-agent sandbox&lt;/a&gt; discipline: an Issue body is untrusted content, not an instruction source.&lt;/p&gt;

&lt;p&gt;Finally, do not merge issue and coding automation into one broad role. Use &lt;a href="https://dev.to/blogs/agents-md-vs-claude-md-copilot-instructions/"&gt;agent instruction files&lt;/a&gt; to state scope, but enforce it with each automation's GitHub permissions and tools.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Does approval stop an agent with issue-write permission?
&lt;/h3&gt;

&lt;p&gt;No. GitHub describes approvals as a workflow convenience, not a security control. Keep write permissions and allowed tools narrow.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where do reviewers find held changes?
&lt;/h3&gt;

&lt;p&gt;Use the GitHub Issue search qualifier &lt;code&gt;has:suggestions&lt;/code&gt; and review the attached rationale before accepting or declining a proposal.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can a small project enable automatic triage immediately?
&lt;/h3&gt;

&lt;p&gt;It can, but suggestion-first is cheaper than repairing a polluted taxonomy. Start with high-confidence labels only after an eight-issue canary and a representative reviewed sample.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.blog/changelog/2026-07-23-agent-automation-controls-in-github-issues-in-public-preview/" rel="noopener noreferrer"&gt;GitHub: Agent automation controls in GitHub Issues (public preview)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.blog/changelog/label/copilot/" rel="noopener noreferrer"&gt;GitHub Copilot changelog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>MCP 2026-07-28: Stateless Migration Checklist</title>
      <dc:creator>Ahab</dc:creator>
      <pubDate>Fri, 24 Jul 2026 10:19:07 +0000</pubDate>
      <link>https://dev.to/ahab_indieseek/mcp-2026-07-28-stateless-migration-checklist-o8l</link>
      <guid>https://dev.to/ahab_indieseek/mcp-2026-07-28-stateless-migration-checklist-o8l</guid>
      <description>&lt;h2&gt;
  
  
  Quick answer
&lt;/h2&gt;

&lt;p&gt;The Model Context Protocol release candidate dated &lt;code&gt;2026-07-28&lt;/code&gt; replaces the protocol-level session with self-contained requests. The &lt;code&gt;initialize&lt;/code&gt; / &lt;code&gt;initialized&lt;/code&gt; handshake and &lt;code&gt;Mcp-Session-Id&lt;/code&gt; are removed. Protocol version, client identity, and capabilities now travel with requests, while &lt;code&gt;server/discover&lt;/code&gt; provides server capabilities on demand.&lt;/p&gt;

&lt;p&gt;As of July 24, this is a release candidate; the final specification is scheduled for July 28. GitHub announced on July 23 that its MCP Server already supports the new specification. If you maintain a custom MCP client, server, gateway, or SDK integration, use the remaining window to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Separate protocol session state from real application state.&lt;/li&gt;
&lt;li&gt;Add version-aware request handling without removing legacy support.&lt;/li&gt;
&lt;li&gt;Test routing, metadata, discovery, authorization, and multi-round-trip flows.&lt;/li&gt;
&lt;li&gt;Run the official MCP conformance suite before shifting traffic.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Do not delete a Redis store merely because the protocol became stateless. First prove that the store contains only transport-session data and not browser sessions, job progress, user consent, rate limits, or another application-owned state.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who this guide is for
&lt;/h2&gt;

&lt;p&gt;This guide is for developers who operate remote MCP servers, write clients, terminate MCP traffic at a gateway, or embed MCP in an AI agent product. It is not a guide for simply enabling an existing hosted connector whose vendor owns the protocol implementation.&lt;/p&gt;

&lt;p&gt;The migration changes transport and lifecycle assumptions. Tool permissions still need a product-level boundary. Use the &lt;a href="https://indieseek.co/blogs/webmcp-agent-ready-website-security-checklist/" rel="noopener noreferrer"&gt;WebMCP security checklist&lt;/a&gt; for user-visible browser actions and the &lt;a href="https://indieseek.co/blogs/ai-coding-agent-sandbox-untrusted-repo-checklist/" rel="noopener noreferrer"&gt;AI coding-agent sandbox checklist&lt;/a&gt; for untrusted repositories.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed
&lt;/h2&gt;

&lt;p&gt;Under the &lt;code&gt;2025-11-25&lt;/code&gt; lifecycle, a client first called &lt;code&gt;initialize&lt;/code&gt;, received an &lt;code&gt;Mcp-Session-Id&lt;/code&gt;, and sent that ID with later requests. A horizontally scaled server often needed sticky routing or a shared session store.&lt;/p&gt;

&lt;p&gt;In the &lt;code&gt;2026-07-28&lt;/code&gt; candidate, each request carries enough protocol context to land on any compatible instance:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Concern&lt;/th&gt;
&lt;th&gt;Previous lifecycle&lt;/th&gt;
&lt;th&gt;2026-07-28 candidate&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Startup&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;initialize&lt;/code&gt; then &lt;code&gt;initialized&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;No initialization handshake&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Protocol state&lt;/td&gt;
&lt;td&gt;Session established once&lt;/td&gt;
&lt;td&gt;Self-contained per request&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Client context&lt;/td&gt;
&lt;td&gt;Exchanged during initialization&lt;/td&gt;
&lt;td&gt;Client info and capabilities in request &lt;code&gt;_meta&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Routing&lt;/td&gt;
&lt;td&gt;Often sticky by session ID&lt;/td&gt;
&lt;td&gt;Any instance can handle a request&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Server capabilities&lt;/td&gt;
&lt;td&gt;Initialization response&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;server/discover&lt;/code&gt; on demand&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Request routing hints&lt;/td&gt;
&lt;td&gt;Gateway inspects JSON-RPC body&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;Mcp-Method&lt;/code&gt; and &lt;code&gt;Mcp-Name&lt;/code&gt; headers&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The protocol can be stateless while the application remains stateful. A browser tool may still need a &lt;code&gt;browser_id&lt;/code&gt;; a durable job may need a &lt;code&gt;job_id&lt;/code&gt;. The server should return that explicit handle, and the model or host should pass it as an ordinary argument on later calls.&lt;/p&gt;

&lt;p&gt;GitHub reports that its MCP Server removed Redis-backed protocol sessions and per-call session reads. It also moved logging and secret-scanning routing data to guaranteed HTTP headers instead of deeply inspecting every request body. That is an implementation example, not evidence that every MCP deployment can remove the same infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build a state-ownership inventory first
&lt;/h2&gt;

&lt;p&gt;Trace every value currently keyed by &lt;code&gt;Mcp-Session-Id&lt;/code&gt; or created during &lt;code&gt;initialize&lt;/code&gt;.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;State&lt;/th&gt;
&lt;th&gt;Owner after migration&lt;/th&gt;
&lt;th&gt;Keep or remove&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Protocol version&lt;/td&gt;
&lt;td&gt;Request header&lt;/td&gt;
&lt;td&gt;Remove session copy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Client name and capabilities&lt;/td&gt;
&lt;td&gt;Per-request &lt;code&gt;_meta&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Remove session copy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Discovered server capabilities&lt;/td&gt;
&lt;td&gt;Client cache with expiry&lt;/td&gt;
&lt;td&gt;Remove server session copy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OAuth subject and scopes&lt;/td&gt;
&lt;td&gt;Authorization layer&lt;/td&gt;
&lt;td&gt;Keep and revalidate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Browser, cart, or workspace state&lt;/td&gt;
&lt;td&gt;Application handle&lt;/td&gt;
&lt;td&gt;Keep explicitly&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Long-running task progress&lt;/td&gt;
&lt;td&gt;Tasks extension or application job&lt;/td&gt;
&lt;td&gt;Keep durably&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Consent and approval evidence&lt;/td&gt;
&lt;td&gt;Product audit store&lt;/td&gt;
&lt;td&gt;Keep durably&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rate-limit counters&lt;/td&gt;
&lt;td&gt;Identity, token, or tenant&lt;/td&gt;
&lt;td&gt;Keep independently&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This table is the migration's most important artifact. If a value has no clear owner, do not remove it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Add a dual-version boundary
&lt;/h2&gt;

&lt;p&gt;Keep old and candidate behavior isolated behind protocol-version dispatch:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;request
  -&amp;gt; authenticate and authorize
  -&amp;gt; read MCP-Protocol-Version
  -&amp;gt; 2025-11-25: legacy initialize/session adapter
  -&amp;gt; 2026-07-28: stateless request adapter
  -&amp;gt; shared tool/resource/prompt implementation
  -&amp;gt; version-specific response envelope
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Do not fork the business logic. Fork only lifecycle and envelope handling. Record the protocol version, method, tool name, instance ID, authorization subject, latency, and result class in traces. Never log secrets or unrestricted tool arguments.&lt;/p&gt;

&lt;p&gt;For application state, make the handle contract explicit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tool"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"add_item"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"arguments"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"basket_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"opaque-handle-from-create-basket"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"sku"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SKU-42"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Treat handles as authorization-sensitive references. Validate that the caller may use the handle on every request; a stateless transport must not turn an opaque ID into an authorization bypass.&lt;/p&gt;

&lt;h2&gt;
  
  
  Run the official conformance suite
&lt;/h2&gt;

&lt;p&gt;The official framework can test clients and servers against dated and draft behavior. Start with an isolated test instance and pin the package or action version in CI.&lt;/p&gt;

&lt;p&gt;For a server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @modelcontextprotocol/conformance server &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--url&lt;/span&gt; http://127.0.0.1:3000/mcp &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--suite&lt;/span&gt; draft
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For a client:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @modelcontextprotocol/conformance client &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--command&lt;/span&gt; &lt;span class="s2"&gt;"node ./tests/everything-client.mjs"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--suite&lt;/span&gt; draft &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--spec-version&lt;/span&gt; 2026-07-28
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The framework records checks and exits non-zero for unexpected regressions. It supports an expected-failures baseline, but use check-level entries where possible. A whole-scenario exception can hide many unrelated failures; a stale baseline should also fail once the implementation starts passing.&lt;/p&gt;

&lt;p&gt;Conformance proves protocol behavior, not product safety. Keep authorization, tenant isolation, consent, tool side-effect, and data-retention tests in the same release gate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Run a seven-case canary
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Case&lt;/th&gt;
&lt;th&gt;Test&lt;/th&gt;
&lt;th&gt;Pass condition&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Handshake-free&lt;/td&gt;
&lt;td&gt;Send a valid 2026 request without &lt;code&gt;initialize&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Request succeeds without creating session state&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cross-instance&lt;/td&gt;
&lt;td&gt;Send consecutive calls to different instances&lt;/td&gt;
&lt;td&gt;Both succeed without sticky routing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Client context&lt;/td&gt;
&lt;td&gt;Vary per-request client metadata&lt;/td&gt;
&lt;td&gt;Policy sees the current request, not stale context&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Discovery and cache&lt;/td&gt;
&lt;td&gt;Refresh &lt;code&gt;server/discover&lt;/code&gt; after capability change&lt;/td&gt;
&lt;td&gt;Cache respects the advertised expiry and refreshes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Application state&lt;/td&gt;
&lt;td&gt;Create a handle, then use it on another instance&lt;/td&gt;
&lt;td&gt;Authorized state continues; another user is rejected&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi-round trip&lt;/td&gt;
&lt;td&gt;Complete URL elicitation over separate HTTP requests&lt;/td&gt;
&lt;td&gt;Flow resumes without a protocol session&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Backward compatibility&lt;/td&gt;
&lt;td&gt;Run one legacy client and one candidate client&lt;/td&gt;
&lt;td&gt;Both pass through isolated adapters&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Canary production traffic gradually. Roll back the candidate adapter if conformance regresses, authorization decisions diverge, cross-instance calls lose application state, discovery becomes stale, or error rates exceed the recorded baseline.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common mistakes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Calling the candidate a final specification before July 28.&lt;/li&gt;
&lt;li&gt;Removing all server state instead of separating protocol and application ownership.&lt;/li&gt;
&lt;li&gt;Trusting client-provided metadata without authentication and authorization.&lt;/li&gt;
&lt;li&gt;Caching capabilities forever because initialization no longer returns them.&lt;/li&gt;
&lt;li&gt;Assuming round-robin routing proves state correctness without forcing cross-instance calls.&lt;/li&gt;
&lt;li&gt;Dropping legacy support before the clients you depend on have upgraded.&lt;/li&gt;
&lt;li&gt;Baselining an entire conformance scenario to hide one known failure.&lt;/li&gt;
&lt;li&gt;Treating protocol conformance as approval to run high-impact tools.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h3&gt;
  
  
  Must every MCP server become stateless?
&lt;/h3&gt;

&lt;p&gt;The candidate removes protocol-level sessions. Applications may still keep durable state, but it should be represented by explicit handles or extension semantics rather than an implicit transport session.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I remove Redis after upgrading?
&lt;/h3&gt;

&lt;p&gt;Only if an inventory proves Redis holds no application, authorization, consent, rate-limit, or task state. GitHub removed its protocol-session dependency; that does not generalize automatically to your deployment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do official SDKs preserve older clients?
&lt;/h3&gt;

&lt;p&gt;GitHub says Tier 1 SDKs have preserved backward compatibility and shipped beta support. Verify the exact SDK version you deploy and run both protocol paths in your own conformance and product tests.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.blog/changelog/2026-07-23-github-mcp-server-supports-the-next-mcp-specification/" rel="noopener noreferrer"&gt;GitHub Changelog: GitHub MCP Server supports the next MCP specification&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.modelcontextprotocol.io/posts/2026-07-28-release-candidate/" rel="noopener noreferrer"&gt;MCP Blog: 2026-07-28 specification release candidate&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://modelcontextprotocol.io/specification/draft" rel="noopener noreferrer"&gt;Model Context Protocol draft specification&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/modelcontextprotocol/conformance" rel="noopener noreferrer"&gt;Official MCP conformance test framework&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>Grok Build Workflows: Parallel Agent Rollout Checklist</title>
      <dc:creator>Ahab</dc:creator>
      <pubDate>Fri, 24 Jul 2026 01:20:40 +0000</pubDate>
      <link>https://dev.to/ahab_indieseek/grok-build-workflows-parallel-agent-rollout-checklist-4l2m</link>
      <guid>https://dev.to/ahab_indieseek/grok-build-workflows-parallel-agent-rollout-checklist-4l2m</guid>
      <description>&lt;h2&gt;
  
  
  Quick answer
&lt;/h2&gt;

&lt;p&gt;SpaceXAI added Workflows to Grok Build on July 23, 2026. A workflow is an orchestration script that Grok creates from a natural-language request, runs in phases, fans work out to parallel agents, verifies results, and returns one report in the background.&lt;/p&gt;

&lt;p&gt;Use a workflow only when the job has three properties:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It can be split into many independent units.&lt;/li&gt;
&lt;li&gt;Every unit can return a structured result.&lt;/li&gt;
&lt;li&gt;A separate verification phase can reject weak or unsupported findings.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The official release gives a run a budget of 128 agents, with up to 1,024 for large jobs. That is an agent-count ceiling, not a cost guarantee or a reason to use every available slot. Start with the smallest fan-out that covers the work, keep write access narrow, and require evidence before the synthesis phase accepts a result.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who this guide is for
&lt;/h2&gt;

&lt;p&gt;This guide is for developers evaluating Grok Build Workflows for large pull-request review, issue triage, route-handler security audits, migration inventories, or other repository tasks that exceed one conversation.&lt;/p&gt;

&lt;p&gt;Grok Build is the coding-agent harness and terminal product. Grok 4.5 is the model that currently powers it and is also available through the xAI API. Keep harness rollout separate from model evaluation; use the &lt;a href="https://indieseek.co/blogs/grok-4-5-coding-agent-api-eval-cost-checklist/" rel="noopener noreferrer"&gt;Grok 4.5 coding-agent evaluation&lt;/a&gt; for model, context, tool, and price decisions.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed
&lt;/h2&gt;

&lt;p&gt;Grok Build can now generate and run a multi-phase workflow from a plain-language task. Each agent starts with a clean, focused context. Completed progress is saved, so pausing and resuming does not redo finished work. The &lt;code&gt;/workflows&lt;/code&gt; view shows phases, agents, and per-agent token counts.&lt;/p&gt;

&lt;p&gt;Successful workflows can be saved in two scopes:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Path&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Best use&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;.grok/workflows/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Repository and team&lt;/td&gt;
&lt;td&gt;A reviewed workflow tied to one codebase&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;~/.grok/workflows/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Personal&lt;/td&gt;
&lt;td&gt;A reusable workflow that follows one developer&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Each saved workflow becomes a slash command with arguments. Grok authors and smoke-checks the script; you do not have to write it manually.&lt;/p&gt;

&lt;p&gt;Do not confuse this with Grok Automations. Automations run a recurring or email-triggered assistant job. Grok Build Workflows orchestrate many agents inside one complex build or review run.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choose the right execution shape
&lt;/h2&gt;

&lt;p&gt;Use the smallest shape that can finish the task:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Work shape&lt;/th&gt;
&lt;th&gt;Choose&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;One file, one bug, one clear test&lt;/td&gt;
&lt;td&gt;Single session&lt;/td&gt;
&lt;td&gt;Coordination overhead adds no value&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Two to six related investigations&lt;/td&gt;
&lt;td&gt;Ordinary subagents&lt;/td&gt;
&lt;td&gt;The parent can still integrate the result directly&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dozens of independent files, issues, or features plus a common verifier&lt;/td&gt;
&lt;td&gt;Workflow&lt;/td&gt;
&lt;td&gt;Parallel coverage and staged synthesis are useful&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scheduled inbox, research, or reminder task&lt;/td&gt;
&lt;td&gt;Automation&lt;/td&gt;
&lt;td&gt;The trigger matters more than repository fan-out&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A workflow is a poor fit when every worker must edit the same files, when acceptance is subjective, or when no independent check can tell a real finding from a plausible one. In those cases, use a single plan or a smaller set of isolated subagents.&lt;/p&gt;

&lt;h2&gt;
  
  
  Design four explicit phases
&lt;/h2&gt;

&lt;p&gt;A useful default is &lt;strong&gt;Context → Work → Verify → Synthesize&lt;/strong&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Context:&lt;/strong&gt; build the authoritative inventory once. Record the base commit, file or issue list, exclusions, and acceptance rules.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Work:&lt;/strong&gt; assign non-overlapping units. Require each worker to return an ID, evidence location, conclusion, confidence, and proposed check.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verify:&lt;/strong&gt; give fresh agents the original evidence, not just the worker's summary. Reject duplicates, missing locations, and claims that fail a test or reproduction.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Synthesize:&lt;/strong&gt; rank only verified results, explain coverage and omissions, and produce one action list.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For a route authorization audit, the request can be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create and run a workflow to audit every HTTP route for missing authorization.

Context:
- Inventory route handlers from the current commit.
- Exclude generated and test fixtures.

Work:
- Assign each route to exactly one reviewer.
- Return route, file and line, required identity, observed guard, and a reproduction idea.

Verify:
- Independently reproduce every high-severity finding.
- Reject any finding without a precise location and request path.

Synthesize:
- Report verified findings by severity.
- Include coverage, rejected findings, and routes that could not be evaluated.
- Do not modify files or open pull requests.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This contract is the original increment: it makes coverage, evidence, independent rejection, and side-effect boundaries visible before a large fan-out begins.&lt;/p&gt;

&lt;h2&gt;
  
  
  Budget the fan-out
&lt;/h2&gt;

&lt;p&gt;Do not begin at 128 agents. Estimate the useful roles:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;inventory_agents&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
&lt;span class="na"&gt;worker_agents&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;12&lt;/span&gt;
&lt;span class="na"&gt;verification_agents&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;
&lt;span class="na"&gt;synthesis_agents&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
&lt;span class="na"&gt;maximum_total_agents&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20&lt;/span&gt;
&lt;span class="na"&gt;write_access&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;none&lt;/span&gt;
&lt;span class="na"&gt;stop_if_inventory_changes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="na"&gt;stop_if_verifier_cannot_reproduce&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These values are an example, not a Grok default. Increase the worker count only when units are genuinely independent. Increase verification capacity when findings are high risk or expensive to reverse. If ten agents inspect the same surface, that is usually duplication, not coverage.&lt;/p&gt;

&lt;p&gt;Use the per-agent token counts as an observability signal. A worker consuming far more context than peers may have received an oversized unit, entered a loop, or lacked a usable stopping condition.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lock permissions before scaling
&lt;/h2&gt;

&lt;p&gt;Run &lt;code&gt;grok inspect&lt;/code&gt; before the first workflow to see which instructions, skills, plugins, hooks, and MCP servers the directory loads. Grok Build's permission documentation distinguishes approval from sandboxing: permission decides whether a tool call may run, while the sandbox limits what an approved call can reach.&lt;/p&gt;

&lt;p&gt;For the first canary:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keep Ask mode for actions not explicitly allowed.&lt;/li&gt;
&lt;li&gt;Add explicit deny rules for destructive shell and remote publish commands.&lt;/li&gt;
&lt;li&gt;Use a sandbox profile that limits filesystem and network access.&lt;/li&gt;
&lt;li&gt;Keep worker phases read-only where possible.&lt;/li&gt;
&lt;li&gt;Reserve edits for a later, separately reviewed run.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Deny rules take precedence over allow rules. Avoid Always-approve for an unproven workflow: multiplying agents also multiplies the blast radius of a mistaken permission policy. If the repository is not trusted, apply the &lt;a href="https://indieseek.co/blogs/ai-coding-agent-sandbox-untrusted-repo-checklist/" rel="noopener noreferrer"&gt;AI coding-agent sandbox checklist&lt;/a&gt; before starting Grok Build.&lt;/p&gt;

&lt;h2&gt;
  
  
  Run a six-case canary
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Case&lt;/th&gt;
&lt;th&gt;Test&lt;/th&gt;
&lt;th&gt;Pass condition&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Partition&lt;/td&gt;
&lt;td&gt;Use a 20-item inventory&lt;/td&gt;
&lt;td&gt;Every item has one owner; none are missing or duplicated&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Evidence&lt;/td&gt;
&lt;td&gt;Seed one known issue&lt;/td&gt;
&lt;td&gt;The worker returns the exact location and reproduction&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skeptic&lt;/td&gt;
&lt;td&gt;Seed one plausible false positive&lt;/td&gt;
&lt;td&gt;The verification phase rejects it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pause/resume&lt;/td&gt;
&lt;td&gt;Pause after one phase, then resume&lt;/td&gt;
&lt;td&gt;Completed units are not rerun&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Permission&lt;/td&gt;
&lt;td&gt;Ask a worker to attempt a denied action&lt;/td&gt;
&lt;td&gt;The action is blocked and visible in the run evidence&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Partial failure&lt;/td&gt;
&lt;td&gt;Make one unit unreadable&lt;/td&gt;
&lt;td&gt;Synthesis reports the gap instead of claiming full coverage&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Promote the workflow only when its report states the base revision, coverage denominator, verified findings, rejected findings, unresolved units, agent count, and permission mode. For coding changes, keep deterministic tests and human review as the final gate. The workflow report is evidence, not merge approval.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common mistakes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Using a workflow for a small sequential task.&lt;/li&gt;
&lt;li&gt;Treating the 128-agent budget as a target.&lt;/li&gt;
&lt;li&gt;Letting multiple workers edit the same checkout or files.&lt;/li&gt;
&lt;li&gt;Asking the synthesis phase to trust worker summaries without fresh verification.&lt;/li&gt;
&lt;li&gt;Saving a generated workflow to the repository before reviewing its scope and side effects.&lt;/li&gt;
&lt;li&gt;Using Always-approve because the run happens in the background.&lt;/li&gt;
&lt;li&gt;Reporting success without a coverage denominator or unresolved-item list.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h3&gt;
  
  
  Does a workflow replace ordinary subagents?
&lt;/h3&gt;

&lt;p&gt;No. Ordinary subagents are better for a few related investigations. A workflow adds explicit phases, larger fan-out, resumable progress, verification, and reusable commands for much larger tasks.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is the 128-agent budget a token or spending limit?
&lt;/h3&gt;

&lt;p&gt;No. The announcement describes an agent budget and exposes per-agent token counts. Treat provider usage and financial limits as separate controls.&lt;/p&gt;

&lt;h3&gt;
  
  
  Should a team commit &lt;code&gt;.grok/workflows/&lt;/code&gt;?
&lt;/h3&gt;

&lt;p&gt;Only after reviewing the generated workflow against repository rules, permissions, acceptance criteria, and a canary result. The repository scope makes it shareable; it does not make it safe by default.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://x.ai/news/workflows" rel="noopener noreferrer"&gt;SpaceXAI: Workflows in Grok Build&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.x.ai/build/overview" rel="noopener noreferrer"&gt;SpaceXAI: Grok Build overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.x.ai/build/features/permissions" rel="noopener noreferrer"&gt;SpaceXAI: Grok Build permissions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.x.ai/build/enterprise" rel="noopener noreferrer"&gt;SpaceXAI: Enterprise deployment and sandbox controls&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/xai-org/grok-build" rel="noopener noreferrer"&gt;SpaceXAI Grok Build open-source repository&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>OpenAI API Hard Spend Limits: 429 Runbook and Budget Setup</title>
      <dc:creator>Ahab</dc:creator>
      <pubDate>Thu, 23 Jul 2026 10:20:21 +0000</pubDate>
      <link>https://dev.to/ahab_indieseek/openai-api-hard-spend-limits-429-runbook-and-budget-setup-b83</link>
      <guid>https://dev.to/ahab_indieseek/openai-api-hard-spend-limits-429-runbook-and-budget-setup-b83</guid>
      <description>&lt;h1&gt;
  
  
  OpenAI API hard spend limits: cap cost without a surprise outage
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Quick answer
&lt;/h2&gt;

&lt;p&gt;OpenAI added organization and project hard spend limits to the API platform on July 22, 2026. A spend alert only notifies you; a hard limit causes affected requests to return HTTP &lt;code&gt;429&lt;/code&gt; with the code &lt;code&gt;insufficient_quota&lt;/code&gt; when tracked spend reaches an applicable monthly cap.&lt;/p&gt;

&lt;p&gt;Use the controls as a hierarchy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set a &lt;strong&gt;project hard limit&lt;/strong&gt; to contain one product, environment, or customer workload.&lt;/li&gt;
&lt;li&gt;Set an &lt;strong&gt;organization hard limit&lt;/strong&gt; as the last ceiling across every project.&lt;/li&gt;
&lt;li&gt;Put &lt;strong&gt;spend alerts below both limits&lt;/strong&gt; so a person or automation can act before traffic stops.&lt;/li&gt;
&lt;li&gt;Treat &lt;code&gt;429 insufficient_quota&lt;/code&gt; as a budget or quota incident, not as an ordinary retry signal.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hard-limit enforcement is not instantaneous. Recorded spend can slightly exceed the configured amount while the state propagates, so do not make the configured cap equal to a financial boundary you cannot exceed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who this guide is for
&lt;/h2&gt;

&lt;p&gt;This guide is for independent developers and small teams running OpenAI-backed products, agents, scheduled jobs, or coding workflows. It is especially useful when one API organization contains production, staging, experiments, and internal automation.&lt;/p&gt;

&lt;p&gt;Spend limits control total cost. They do not replace model routing or acceptance metrics. Use the &lt;a href="https://indieseek.co/blogs/gpt-5-6-sol-vs-terra-vs-luna/" rel="noopener noreferrer"&gt;GPT-5.6 model choice guide&lt;/a&gt; to choose an appropriate model, the &lt;a href="https://indieseek.co/blogs/cursor-router-cost-balance-intelligence-rollout-guide/" rel="noopener noreferrer"&gt;Cursor Router rollout guide&lt;/a&gt; to measure accepted work, and the &lt;a href="https://indieseek.co/blogs/gemini-3-6-flash-vs-3-5-flash-lite-api-migration-guide/" rel="noopener noreferrer"&gt;Gemini migration guide&lt;/a&gt; as a provider-independent canary pattern.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed
&lt;/h2&gt;

&lt;p&gt;OpenAI now lets permitted organization or project administrators configure a monthly spend amount and optionally enforce it as a hard limit. Organization and project limits can both apply to the same request. Reaching either applicable hard limit stops affected traffic.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Control&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;At the threshold&lt;/th&gt;
&lt;th&gt;Best role&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Spend alert&lt;/td&gt;
&lt;td&gt;Project notification&lt;/td&gt;
&lt;td&gt;Sends email; traffic continues&lt;/td&gt;
&lt;td&gt;Early warning and investigation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Project hard limit&lt;/td&gt;
&lt;td&gt;One API project&lt;/td&gt;
&lt;td&gt;Affected requests fail with &lt;code&gt;429 insufficient_quota&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Contain one product or environment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Organization hard limit&lt;/td&gt;
&lt;td&gt;All projects&lt;/td&gt;
&lt;td&gt;Affected requests across the organization can fail&lt;/td&gt;
&lt;td&gt;Catastrophic cost ceiling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Approved usage limit&lt;/td&gt;
&lt;td&gt;OpenAI-assigned usage tier&lt;/td&gt;
&lt;td&gt;Separate account quota boundary&lt;/td&gt;
&lt;td&gt;Platform allowance, not your configured budget&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The approved monthly usage limit associated with your OpenAI usage tier is separate from the spend limits you configure. Prepaid-credit exhaustion is another possible cause of a quota error. This is why the HTTP status alone cannot tell you which control fired.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build a budget hierarchy
&lt;/h2&gt;

&lt;p&gt;Start with the product's tolerated monthly loss, not the provider dashboard.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Give production, staging, experiments, and scheduled automation separate projects where practical.&lt;/li&gt;
&lt;li&gt;Estimate a project operating budget from real requests, including retries, tool loops, long context, and batch jobs.&lt;/li&gt;
&lt;li&gt;Add alerts at 50%, 75%, and 90% as a starting ladder. These are operational recommendations, not OpenAI defaults.&lt;/li&gt;
&lt;li&gt;Put the project hard limit above normal peak usage but below the amount that would create an unacceptable loss.&lt;/li&gt;
&lt;li&gt;Set the organization hard limit above the planned project total plus an explicit reserve. Keep it low enough to stop a credential leak or runaway loop.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Project&lt;/th&gt;
&lt;th&gt;Monthly plan&lt;/th&gt;
&lt;th&gt;Alerts&lt;/th&gt;
&lt;th&gt;Hard limit&lt;/th&gt;
&lt;th&gt;At the limit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Production assistant&lt;/td&gt;
&lt;td&gt;$180&lt;/td&gt;
&lt;td&gt;$90 / $135 / $162&lt;/td&gt;
&lt;td&gt;$200&lt;/td&gt;
&lt;td&gt;Disable generation, preserve account and billing paths&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Staging&lt;/td&gt;
&lt;td&gt;$30&lt;/td&gt;
&lt;td&gt;$15 / $22.50 / $27&lt;/td&gt;
&lt;td&gt;$35&lt;/td&gt;
&lt;td&gt;Stop AI tests&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scheduled research&lt;/td&gt;
&lt;td&gt;$50&lt;/td&gt;
&lt;td&gt;$25 / $37.50 / $45&lt;/td&gt;
&lt;td&gt;$60&lt;/td&gt;
&lt;td&gt;Pause new jobs; keep completed results&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Organization&lt;/td&gt;
&lt;td&gt;$260 planned&lt;/td&gt;
&lt;td&gt;Review at $220&lt;/td&gt;
&lt;td&gt;$320&lt;/td&gt;
&lt;td&gt;Incident response; no blind provider retry&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Do not copy those dollar values. Copy the structure and calculate amounts from your traffic, margin, and failure tolerance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configure the controls
&lt;/h2&gt;

&lt;p&gt;For an organization limit, open &lt;strong&gt;Organization settings → Limits → Spend → Edit spend limit&lt;/strong&gt;, enter the monthly amount, and enable &lt;strong&gt;Enforce a hard limit&lt;/strong&gt;. For a project, select the project and use &lt;strong&gt;Settings → Limits → Spend&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Spend alerts can also be managed through the Admin API. OpenAI's alert API takes threshold amounts in cents, so &lt;code&gt;$500&lt;/code&gt; is &lt;code&gt;50000&lt;/code&gt;. Keep alert recipients in an owned operations group rather than one founder's personal inbox.&lt;/p&gt;

&lt;p&gt;Record the effective policy next to the service:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;project&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;production-assistant&lt;/span&gt;
&lt;span class="na"&gt;monthly_plan_usd&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;180&lt;/span&gt;
&lt;span class="na"&gt;alert_thresholds_usd&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;90&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;135&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;162&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;span class="na"&gt;hard_limit_usd&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;200&lt;/span&gt;
&lt;span class="na"&gt;owner&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;on-call&lt;/span&gt;
&lt;span class="na"&gt;quota_fallback&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;disable-generation&lt;/span&gt;
&lt;span class="na"&gt;recovery_approver&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;product-owner&lt;/span&gt;
&lt;span class="na"&gt;last_drill&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;2026-07-23&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Handle 429 without retrying the wrong problem
&lt;/h2&gt;

&lt;p&gt;Classify both the status and provider error code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;classifyOpenAIError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;code&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
    &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;code&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt;
    &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;code&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt;
    &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;code&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="mi"&gt;429&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;other&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;code&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;insufficient_quota&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;quota-boundary&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;rate-limit&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This normalizer is application code, not an OpenAI SDK contract; adapt the property paths to the SDK and version you actually use.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Classification&lt;/th&gt;
&lt;th&gt;Immediate action&lt;/th&gt;
&lt;th&gt;Diagnose&lt;/th&gt;
&lt;th&gt;Do not do&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;quota-boundary&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Stop automatic retries and apply the product fallback&lt;/td&gt;
&lt;td&gt;Compare usage with project and organization limits, prepaid credits, and the approved usage limit&lt;/td&gt;
&lt;td&gt;Retry every worker and multiply failures&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;rate-limit&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Follow the provider's rate-limit guidance&lt;/td&gt;
&lt;td&gt;Inspect request/token limits and retry headers&lt;/td&gt;
&lt;td&gt;Raise a spend cap to solve throughput&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;other&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Preserve the error and request ID&lt;/td&gt;
&lt;td&gt;Use the relevant API error path&lt;/td&gt;
&lt;td&gt;Convert every failure into a quota incident&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For non-critical features, return a clear temporary-unavailable state or queue bounded work for later. For a core paid feature, decide in advance whether to raise the limit, switch to a separately approved provider route, or stop safely. Never expose provider keys or raw billing details in the user-facing error.&lt;/p&gt;

&lt;h2&gt;
  
  
  Run a six-case failure drill
&lt;/h2&gt;

&lt;p&gt;Use a staging project or a mocked provider boundary. Do not burn production budget to test the control.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Case&lt;/th&gt;
&lt;th&gt;Test&lt;/th&gt;
&lt;th&gt;Pass condition&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Project cap&lt;/td&gt;
&lt;td&gt;Simulate &lt;code&gt;429 insufficient_quota&lt;/code&gt; for one project&lt;/td&gt;
&lt;td&gt;Only that product degrades; other projects remain healthy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Organization cap&lt;/td&gt;
&lt;td&gt;Simulate the organization ceiling&lt;/td&gt;
&lt;td&gt;Every OpenAI-dependent path enters its documented safe state&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Alert ladder&lt;/td&gt;
&lt;td&gt;Deliver 50%, 75%, and 90% notifications&lt;/td&gt;
&lt;td&gt;The correct owner, runbook, and project are visible&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rate limit&lt;/td&gt;
&lt;td&gt;Simulate a non-quota 429&lt;/td&gt;
&lt;td&gt;Bounded rate-limit handling runs; the quota incident path does not&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Propagation&lt;/td&gt;
&lt;td&gt;Keep usage slightly above the configured cap in the fixture&lt;/td&gt;
&lt;td&gt;Reporting tolerates a small overage and does not promise an exact stop&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Recovery&lt;/td&gt;
&lt;td&gt;Raise or remove a reached limit in the drill state&lt;/td&gt;
&lt;td&gt;Traffic resumes only after propagation and a health check&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Promote the policy only after the fallback preserves sign-in, billing, stored results, and support access. A cost control that turns a recoverable AI failure into a full-site outage is not ready.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common mistakes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Assuming a spend alert stops traffic.&lt;/li&gt;
&lt;li&gt;Setting only an organization hard limit, so one experiment can stop every product.&lt;/li&gt;
&lt;li&gt;Retrying &lt;code&gt;insufficient_quota&lt;/code&gt; as if it were a transient request-rate limit.&lt;/li&gt;
&lt;li&gt;Setting a cap equal to an absolute financial maximum even though enforcement can lag slightly.&lt;/li&gt;
&lt;li&gt;Forgetting prepaid credits and the OpenAI-approved usage limit during diagnosis.&lt;/li&gt;
&lt;li&gt;Sending alerts to an inbox nobody monitors.&lt;/li&gt;
&lt;li&gt;Raising a cap during an incident without first stopping the loop or leaked credential that consumed it.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h3&gt;
  
  
  Can a project limit protect other projects?
&lt;/h3&gt;

&lt;p&gt;Yes. A project hard limit applies only to traffic billed to that project. An organization hard limit still applies across all projects.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does a hard limit guarantee zero overspend?
&lt;/h3&gt;

&lt;p&gt;No. OpenAI says enforcement is not instantaneous, so tracked spend can slightly exceed the configured amount while the state propagates.&lt;/p&gt;

&lt;h3&gt;
  
  
  When does traffic return?
&lt;/h3&gt;

&lt;p&gt;Raising or removing the reached hard limit allows traffic to resume after the update propagates. Otherwise, the limit resets with the next monthly cycle. If usage is below every applicable hard limit, check prepaid credits, the approved usage limit, and whether the error is actually a request or token rate limit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developers.openai.com/api/docs/changelog" rel="noopener noreferrer"&gt;OpenAI API changelog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.openai.com/api/docs/guides/spend-limits" rel="noopener noreferrer"&gt;OpenAI API spend limits&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.openai.com/api/docs/guides/admin-apis#manage-spend-limit-alerts" rel="noopener noreferrer"&gt;OpenAI Admin APIs: manage spend limit alerts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.openai.com/api/docs/guides/rate-limits" rel="noopener noreferrer"&gt;OpenAI API rate limits&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>Cursor Router: Cost vs Balance vs Intelligence Rollout Guide</title>
      <dc:creator>Ahab</dc:creator>
      <pubDate>Thu, 23 Jul 2026 01:15:32 +0000</pubDate>
      <link>https://dev.to/ahab_indieseek/cursor-router-cost-vs-balance-vs-intelligence-rollout-guide-456b</link>
      <guid>https://dev.to/ahab_indieseek/cursor-router-cost-vs-balance-vs-intelligence-rollout-guide-456b</guid>
      <description>&lt;h1&gt;
  
  
  Cursor Router: choose Cost, Balance, or Intelligence with an eval gate
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Quick answer
&lt;/h2&gt;

&lt;p&gt;Cursor launched Cursor Router on July 22, 2026 for Teams and Enterprise. Auto mode now classifies each request by its query, context, task complexity, and domain, then sends it to an underlying model. You choose one of three optimization modes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cost&lt;/strong&gt; for bounded, repeatable work where a lower accepted-task cost matters most.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Balance&lt;/strong&gt; as the starting default for mixed product work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Intelligence&lt;/strong&gt; for difficult diagnosis, architecture, and long-horizon implementation where failure or rework is expensive.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do not enable a mode organization-wide because of a headline savings percentage. Cursor's early-access results are its own production measurements, not a guarantee for your repositories. Build a fixed task set, reveal the routed model during the canary, compare cost per accepted change, and keep a fixed-model fallback.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who this guide is for
&lt;/h2&gt;

&lt;p&gt;This guide is for engineering leads and small teams using Cursor Agents who need to control AI coding quality and spend without asking every developer to pick a model for every prompt.&lt;/p&gt;

&lt;p&gt;If you are still choosing fixed models, use the same fixtures from the &lt;a href="https://indieseek.co/blogs/gemini-3-6-flash-vs-3-5-flash-lite-api-migration-guide/" rel="noopener noreferrer"&gt;Gemini 3.6 Flash routing guide&lt;/a&gt; and &lt;a href="https://indieseek.co/blogs/grok-4-5-coding-agent-api-eval-cost-checklist/" rel="noopener noreferrer"&gt;Grok 4.5 coding-agent eval&lt;/a&gt;. Model routing does not replace the &lt;a href="https://indieseek.co/blogs/ai-coding-agent-sandbox-untrusted-repo-checklist/" rel="noopener noreferrer"&gt;untrusted-repository sandbox gate&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed
&lt;/h2&gt;

&lt;p&gt;Cursor Router is a routing layer, not a new foundation model. Cursor says the classifier was trained on more than 600,000 live requests and evaluated across millions of requests. It can switch the underlying model per request and is cache-aware in its training and production evaluation.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mode&lt;/th&gt;
&lt;th&gt;Start here when&lt;/th&gt;
&lt;th&gt;Main risk&lt;/th&gt;
&lt;th&gt;Required evidence&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Cost&lt;/td&gt;
&lt;td&gt;Tests, mechanical edits, documentation, and bounded cleanup&lt;/td&gt;
&lt;td&gt;Cheap attempts create more corrections&lt;/td&gt;
&lt;td&gt;Accepted-change rate and rework time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Balance&lt;/td&gt;
&lt;td&gt;A team has a mix of routine and moderately complex work&lt;/td&gt;
&lt;td&gt;An average hides weak task categories&lt;/td&gt;
&lt;td&gt;Results split by workload class&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Intelligence&lt;/td&gt;
&lt;td&gt;Repository diagnosis, migrations, security review, and long tasks&lt;/td&gt;
&lt;td&gt;Frontier-quality routing exceeds the budget&lt;/td&gt;
&lt;td&gt;Cost per accepted task and failure severity&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Cursor reports that early-access customers saved roughly 30% to 50% against routing all traffic to Opus 4.8, and that online tests found larger savings in selected comparisons. Treat those figures as vendor evidence. Reproduce the decision on your own accepted work.&lt;/p&gt;

&lt;p&gt;Balance and Intelligence are billed at the routed model's rate. Cursor also gives admins mode restrictions, model allow/block lists, defaults, and soft or hard enforcement. The routed model is hidden by default but can be displayed. Teams have Router enabled by default; Enterprise admins can enable it. Availability covers desktop, web, iOS, CLI, and the SDK.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choose a mode by the cost of being wrong
&lt;/h2&gt;

&lt;p&gt;Use task consequence before task length:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Workload&lt;/th&gt;
&lt;th&gt;First mode&lt;/th&gt;
&lt;th&gt;Escalate when&lt;/th&gt;
&lt;th&gt;Keep fixed-model control&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Rename, formatting, test generation&lt;/td&gt;
&lt;td&gt;Cost&lt;/td&gt;
&lt;td&gt;The first correction exceeds the expected savings&lt;/td&gt;
&lt;td&gt;Fast low-cost model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Small feature with clear tests&lt;/td&gt;
&lt;td&gt;Balance&lt;/td&gt;
&lt;td&gt;The agent misses acceptance criteria twice&lt;/td&gt;
&lt;td&gt;Current daily-driver model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Intermittent bug or multi-file migration&lt;/td&gt;
&lt;td&gt;Intelligence&lt;/td&gt;
&lt;td&gt;Start here; downgrade only after repeated success&lt;/td&gt;
&lt;td&gt;Best proven reasoning model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Security-sensitive change&lt;/td&gt;
&lt;td&gt;Intelligence&lt;/td&gt;
&lt;td&gt;Never relax permissions to rescue a route&lt;/td&gt;
&lt;td&gt;Reviewed fixed model plus human approval&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Long conversation with valuable context&lt;/td&gt;
&lt;td&gt;Current model&lt;/td&gt;
&lt;td&gt;Start a new routed session instead of switching mid-chat&lt;/td&gt;
&lt;td&gt;Existing session and branch&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The last row matters because caches are model-specific. Cursor's harness team recommends staying with one model through a conversation unless there is a reason to switch. A fresh subagent or new session is easier to compare and roll back.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build a 30-task routing eval
&lt;/h2&gt;

&lt;p&gt;Create three buckets of ten real, sanitized tasks:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Routine: tests, copy changes, renames, and one-file fixes.&lt;/li&gt;
&lt;li&gt;Product: small features, UI changes, API wiring, and refactors.&lt;/li&gt;
&lt;li&gt;Hard: ambiguous bugs, migrations, security boundaries, and multi-file work.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Run the current fixed model and each allowed Router mode from a fresh branch and fresh conversation. Keep repository state, instructions, permissions, and verification commands identical. Record this evidence without prompt contents or secrets:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;task_id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;product-07&lt;/span&gt;
&lt;span class="na"&gt;route&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;auto-balance&lt;/span&gt;
&lt;span class="na"&gt;routed_model&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;visible-during-canary&lt;/span&gt;
&lt;span class="na"&gt;accepted_without_correction&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="na"&gt;kept_diff_after_24h&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="na"&gt;tool_errors&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="na"&gt;verification&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;passed&lt;/span&gt;
&lt;span class="na"&gt;latency_seconds&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;84&lt;/span&gt;
&lt;span class="na"&gt;cost_usd&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.42&lt;/span&gt;
&lt;span class="na"&gt;rollback_needed&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Calculate &lt;code&gt;total route cost / accepted tasks&lt;/code&gt;, not average request cost. Also track correction turns, kept diff after a day, verification pass rate, tool errors, p95 latency, and rollback frequency. A cheap route that creates rejected patches is not cheap.&lt;/p&gt;

&lt;h2&gt;
  
  
  Six-case canary gate
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Case&lt;/th&gt;
&lt;th&gt;Probe&lt;/th&gt;
&lt;th&gt;Pass condition&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Routing fit&lt;/td&gt;
&lt;td&gt;Run all 30 tasks with the routed model visible&lt;/td&gt;
&lt;td&gt;Each task class has an explicit default and escalation path&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quality&lt;/td&gt;
&lt;td&gt;Blind-review diffs and run deterministic tests&lt;/td&gt;
&lt;td&gt;Acceptance and verification do not regress beyond the agreed threshold&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Continuity&lt;/td&gt;
&lt;td&gt;Compare fresh sessions with one controlled multi-turn task&lt;/td&gt;
&lt;td&gt;Cache misses and model switches do not create hidden latency or context loss&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Permissions&lt;/td&gt;
&lt;td&gt;Repeat one denied network or write action&lt;/td&gt;
&lt;td&gt;The route cannot widen tools, secrets, or approval boundaries&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost&lt;/td&gt;
&lt;td&gt;Compare total spend, corrections, and accepted changes&lt;/td&gt;
&lt;td&gt;Cost per accepted task fits the mode budget&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rollback&lt;/td&gt;
&lt;td&gt;Disable Router for a canary group&lt;/td&gt;
&lt;td&gt;New sessions return to the fixed model and open work remains recoverable&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Promote one group at a time: 5%, 25%, then the target share. Keep the routed model visible during the canary. Stop on permission drift, test regressions, repeated correction loops, unknown model changes, or a budget breach.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common mistakes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Treating Cursor's aggregate savings as a repository-specific forecast.&lt;/li&gt;
&lt;li&gt;Sending every task to Intelligence because it sounds safest.&lt;/li&gt;
&lt;li&gt;Measuring token spend without measuring accepted changes and rework.&lt;/li&gt;
&lt;li&gt;Hiding the routed model before debugging and cost attribution are stable.&lt;/li&gt;
&lt;li&gt;Blocking an underlying model without testing how that changes Router behavior.&lt;/li&gt;
&lt;li&gt;Comparing modes in different conversations, branches, or permission profiles.&lt;/li&gt;
&lt;li&gt;Switching a valuable long-running conversation mid-task instead of starting a fresh routed session.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h3&gt;
  
  
  Is Cursor Router available on individual plans?
&lt;/h3&gt;

&lt;p&gt;The launch announcement says Teams and Enterprise. Do not assume individual Pro availability from the presence of Auto in another plan.&lt;/p&gt;

&lt;h3&gt;
  
  
  Which mode should a small team start with?
&lt;/h3&gt;

&lt;p&gt;Start with Balance for mixed work, then move bounded tasks to Cost and high-consequence tasks to Intelligence only when your eval supports it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does Router remove the need to choose models?
&lt;/h3&gt;

&lt;p&gt;It removes repeated per-prompt selection, but admins still choose allowed models, modes, defaults, visibility, and enforcement. You still need a fallback and an audit trail.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://cursor.com/changelog/router" rel="noopener noreferrer"&gt;Cursor Changelog: Cursor Router&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cursor.com/blog/router" rel="noopener noreferrer"&gt;Cursor: Introducing Cursor Router&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cursor.com/blog/continually-improving-agent-harness" rel="noopener noreferrer"&gt;Cursor: Continually improving our agent harness&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
      <category>cursor</category>
    </item>
    <item>
      <title>Gemini 3.6 Flash vs 3.5 Flash-Lite: API Migration Guide</title>
      <dc:creator>Ahab</dc:creator>
      <pubDate>Wed, 22 Jul 2026 10:21:30 +0000</pubDate>
      <link>https://dev.to/ahab_indieseek/gemini-36-flash-vs-35-flash-lite-api-migration-guide-7j9</link>
      <guid>https://dev.to/ahab_indieseek/gemini-36-flash-vs-35-flash-lite-api-migration-guide-7j9</guid>
      <description>&lt;h1&gt;
  
  
  Gemini 3.6 Flash vs 3.5 Flash-Lite: API migration and routing guide
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Quick answer
&lt;/h2&gt;

&lt;p&gt;Google released &lt;code&gt;gemini-3.6-flash&lt;/code&gt; and &lt;code&gt;gemini-3.5-flash-lite&lt;/code&gt; as generally available Gemini API models on July 21, 2026. Both support a 1-million-token context window, up to 64K output tokens, thinking, and built-in tools including Computer Use. They solve different production jobs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use Gemini 3.6 Flash for coding, multimodal reasoning, and multi-step agent workflows where accepted results matter more than the lowest possible cost.&lt;/li&gt;
&lt;li&gt;Use Gemini 3.5 Flash-Lite for extraction, classification, routing, and high-volume subagent work where latency and unit economics dominate.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do not treat this as a model-ID-only upgrade. These models deprecate &lt;code&gt;temperature&lt;/code&gt;, &lt;code&gt;top_p&lt;/code&gt;, and &lt;code&gt;top_k&lt;/code&gt;, reject conversations that end with a prefilled model turn, and continue the Gemini 3.x migration away from numeric thinking budgets. Remove incompatible fields, run both models through the same task fixtures, and route by workload before changing a production default.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who this guide is for
&lt;/h2&gt;

&lt;p&gt;This guide is for teams migrating a Gemini API application, coding agent, or automation system.&lt;/p&gt;

&lt;p&gt;If you are evaluating other current models, compare the same fixtures with the &lt;a href="https://indieseek.co/blogs/kimi-k3-api-context-cost-agent-rollout-guide/" rel="noopener noreferrer"&gt;Kimi K3 rollout guide&lt;/a&gt; and &lt;a href="https://indieseek.co/blogs/grok-4-5-coding-agent-api-eval-cost-checklist/" rel="noopener noreferrer"&gt;Grok 4.5 coding-agent checklist&lt;/a&gt;. If the model can execute repository commands, keep the &lt;a href="https://indieseek.co/blogs/ai-coding-agent-sandbox-untrusted-repo-checklist/" rel="noopener noreferrer"&gt;untrusted-repository sandbox gate&lt;/a&gt; independent of model choice.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed
&lt;/h2&gt;

&lt;p&gt;The new stable models add a useful two-tier route instead of one universal replacement:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Default thinking&lt;/th&gt;
&lt;th&gt;Input / 1M tokens&lt;/th&gt;
&lt;th&gt;Output / 1M tokens&lt;/th&gt;
&lt;th&gt;Best first test&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Gemini 3.6 Flash&lt;/td&gt;
&lt;td&gt;&lt;code&gt;medium&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$1.50&lt;/td&gt;
&lt;td&gt;$7.50&lt;/td&gt;
&lt;td&gt;Coding, multimodal analysis, tool-heavy planning&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemini 3.5 Flash-Lite&lt;/td&gt;
&lt;td&gt;&lt;code&gt;minimal&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$0.30&lt;/td&gt;
&lt;td&gt;$2.50&lt;/td&gt;
&lt;td&gt;Extraction, classification, routing, cheap subagents&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Google says 3.6 Flash uses fewer turns and tool calls than 3.5 Flash, makes fewer unwanted code edits, and improves agentic and spatial tasks. It now powers the Antigravity managed agent by default. Human evaluators still preferred earlier models for some visual styling, so keep screenshot review.&lt;/p&gt;

&lt;p&gt;Flash-Lite is the throughput route. Keep &lt;code&gt;minimal&lt;/code&gt; for bounded tasks; test &lt;code&gt;medium&lt;/code&gt; or &lt;code&gt;high&lt;/code&gt; for autonomous planning and complex tools. Higher thinking can erase its latency and cost advantage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Route by task, not by model rank
&lt;/h2&gt;

&lt;p&gt;Start with this router, then test assumptions:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Workload&lt;/th&gt;
&lt;th&gt;Start with&lt;/th&gt;
&lt;th&gt;Promote when&lt;/th&gt;
&lt;th&gt;Keep a fallback to&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Repository diagnosis or multi-file implementation&lt;/td&gt;
&lt;td&gt;3.6 Flash&lt;/td&gt;
&lt;td&gt;Acceptance rises without extra unwanted edits&lt;/td&gt;
&lt;td&gt;Current coding model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Screenshot-to-code or chart interpretation&lt;/td&gt;
&lt;td&gt;3.6 Flash&lt;/td&gt;
&lt;td&gt;Visual fixtures and browser checks pass&lt;/td&gt;
&lt;td&gt;Human-reviewed baseline&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Document extraction or strict JSON parsing&lt;/td&gt;
&lt;td&gt;3.5 Flash-Lite&lt;/td&gt;
&lt;td&gt;Schema pass rate holds at target throughput&lt;/td&gt;
&lt;td&gt;3.6 Flash for hard cases&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Triage, labeling, or request routing&lt;/td&gt;
&lt;td&gt;3.5 Flash-Lite&lt;/td&gt;
&lt;td&gt;False-route rate stays below threshold&lt;/td&gt;
&lt;td&gt;Rules or current classifier&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Autonomous subagent with several tools&lt;/td&gt;
&lt;td&gt;Flash-Lite at &lt;code&gt;medium&lt;/code&gt;, then 3.6 Flash&lt;/td&gt;
&lt;td&gt;Tool completion improves enough to justify cost&lt;/td&gt;
&lt;td&gt;One-step manual escalation&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For 100K input and 10K output tokens, listed-token cost is about &lt;code&gt;$0.225&lt;/code&gt; on 3.6 Flash and &lt;code&gt;$0.055&lt;/code&gt; on Flash-Lite. Compare cost per accepted task, not per request.&lt;/p&gt;

&lt;h2&gt;
  
  
  Migrate the request contract first
&lt;/h2&gt;

&lt;p&gt;Start with the smallest current Interactions API request:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;google&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;genai&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;genai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Client&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;interaction&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;interactions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gemini-3.6-flash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Inspect this failure and return the most likely cause.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;system_instruction&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Do not modify files. Return evidence before recommendations.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;interaction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;output_text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then audit the production adapter:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Replace the model ID with &lt;code&gt;gemini-3.6-flash&lt;/code&gt; or &lt;code&gt;gemini-3.5-flash-lite&lt;/code&gt; behind a routing flag.&lt;/li&gt;
&lt;li&gt;Remove &lt;code&gt;temperature&lt;/code&gt;, &lt;code&gt;top_p&lt;/code&gt;, and &lt;code&gt;top_k&lt;/code&gt;; these fields are deprecated and ignored now, and future model generations will return HTTP 400.&lt;/li&gt;
&lt;li&gt;Replace &lt;code&gt;thinking_budget&lt;/code&gt; with the string &lt;code&gt;thinking_level&lt;/code&gt;; remove unsupported &lt;code&gt;candidate_count&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Remove prefilled model turns. If the final non-empty turn has the &lt;code&gt;model&lt;/code&gt; role, the request returns HTTP 400. Use &lt;code&gt;system_instruction&lt;/code&gt; and structured outputs instead.&lt;/li&gt;
&lt;li&gt;Standardize multi-turn state on &lt;code&gt;previous_interaction_id&lt;/code&gt;. For &lt;code&gt;generateContent&lt;/code&gt;, preserve required thought signatures and include &lt;code&gt;call_id&lt;/code&gt; plus &lt;code&gt;name&lt;/code&gt; in every function response.&lt;/li&gt;
&lt;li&gt;Record model ID, thinking level, input/output tokens, tool rounds, latency, HTTP status, schema result, and human acceptance without logging secrets or sensitive prompt contents.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Six-case canary gate
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Case&lt;/th&gt;
&lt;th&gt;Probe&lt;/th&gt;
&lt;th&gt;Pass condition&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Contract&lt;/td&gt;
&lt;td&gt;Send removed sampling fields and a prefilled model turn in disposable negative tests&lt;/td&gt;
&lt;td&gt;Monitoring identifies the expected deprecation or HTTP 400 instead of silently corrupting output&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quality&lt;/td&gt;
&lt;td&gt;Run 20 representative tasks on the old route, 3.6 Flash, and Flash-Lite&lt;/td&gt;
&lt;td&gt;Blind acceptance rate and unwanted-edit rate are recorded under one harness&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tools&lt;/td&gt;
&lt;td&gt;Exercise search, code execution, function calls, and one failure/retry path&lt;/td&gt;
&lt;td&gt;Call IDs match, retries are bounded, and the agent stops on permission boundaries&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Structure&lt;/td&gt;
&lt;td&gt;Validate extraction and refusal cases against the production JSON Schema&lt;/td&gt;
&lt;td&gt;Invalid output never reaches downstream writes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost&lt;/td&gt;
&lt;td&gt;Replay short, long-context, and multi-turn tasks&lt;/td&gt;
&lt;td&gt;Cost per accepted task and p95 latency stay within explicit budgets&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rollback&lt;/td&gt;
&lt;td&gt;Disable the route flag during a canary&lt;/td&gt;
&lt;td&gt;New sessions return to the prior model without reusing incompatible conversation state&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Promote one workload at a time: 5%, then 25%, then the target share. Stop on schema regressions, unexpected tool actions, budget breaches, or lower acceptance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common mistakes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Sending legacy sampling fields because the API still ignores them today.&lt;/li&gt;
&lt;li&gt;Choosing 3.6 Flash for every subagent and paying frontier-model prices for deterministic extraction.&lt;/li&gt;
&lt;li&gt;Choosing Flash-Lite for complex autonomous planning while leaving thinking at &lt;code&gt;minimal&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Hot-switching a live conversation between incompatible request contracts.&lt;/li&gt;
&lt;li&gt;Claiming Gemini API availability means the same model is enabled in every Google or third-party product.&lt;/li&gt;
&lt;li&gt;Measuring tokens and latency but not whether the result was actually accepted.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h3&gt;
  
  
  Is Gemini 3.6 Flash cheaper than Gemini 3.5 Flash?
&lt;/h3&gt;

&lt;p&gt;Input remains $1.50 per million tokens while output falls from $9.00 to $7.50. Fewer turns and tool calls can matter more than the rate.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is 3.5 Flash-Lite a good coding model?
&lt;/h3&gt;

&lt;p&gt;It handles lightweight web coding and subagents, but its strongest case is high-throughput bounded work. Start complex repository changes on 3.6 Flash and test fixtures before rerouting.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I keep using &lt;code&gt;generateContent&lt;/code&gt;?
&lt;/h3&gt;

&lt;p&gt;Yes, but Google recommends the GA Interactions API for the latest models and features. On either surface, test deprecated fields, conversation state, thought signatures, and function responses.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ai.google.dev/gemini-api/docs/changelog" rel="noopener noreferrer"&gt;Google Gemini API release notes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ai.google.dev/gemini-api/docs/latest-model" rel="noopener noreferrer"&gt;Google guide: Using the latest Gemini models&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ai.google.dev/gemini-api/docs/pricing" rel="noopener noreferrer"&gt;Google Gemini Developer API pricing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.blog/changelog/2026-07-21-gemini-3-6-flash-is-now-available-in-github-copilot/" rel="noopener noreferrer"&gt;GitHub Changelog: Gemini 3.6 Flash in GitHub Copilot&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>api</category>
      <category>gemini</category>
    </item>
    <item>
      <title>Claude Code 2.1.217 Subagent Concurrency and Budget Guide</title>
      <dc:creator>Ahab</dc:creator>
      <pubDate>Wed, 22 Jul 2026 01:25:10 +0000</pubDate>
      <link>https://dev.to/ahab_indieseek/claude-code-21217-subagent-concurrency-and-budget-guide-5g9c</link>
      <guid>https://dev.to/ahab_indieseek/claude-code-21217-subagent-concurrency-and-budget-guide-5g9c</guid>
      <description>&lt;h1&gt;
  
  
  Claude Code 2.1.217 subagent concurrency and budget checklist
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Quick answer
&lt;/h2&gt;

&lt;p&gt;Claude Code &lt;code&gt;v2.1.217&lt;/code&gt;, released July 21, 2026 UTC, adds three controls for delegated work: a default cap of 20 concurrently running subagents, no nested subagent spawning by default, and enforcement of &lt;code&gt;--max-budget-usd&lt;/code&gt; against background subagents. When a print-mode budget is reached, new subagents are denied and running background subagents are halted.&lt;/p&gt;

&lt;p&gt;The safest upgrade is not to keep every default. Set a smaller concurrency cap for your repository, leave nested spawning disabled until you have a measured reason to enable it, and use a dollar limit for unattended &lt;code&gt;claude -p&lt;/code&gt; jobs. Treat these as separate controls:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;breadth: how many subagents may run at once
depth: whether a subagent may delegate again
spend: when the whole print-mode run must stop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Who this is for
&lt;/h2&gt;

&lt;p&gt;This guide is for developers using Claude Code subagents, background sessions, CI jobs, or scripts that can fan one prompt into parallel work. It is especially useful when an agent reviews many files, runs tests in parallel, or delegates research and implementation.&lt;/p&gt;

&lt;p&gt;Use the &lt;a href="https://indieseek.co/blogs/claude-code-2-1-216-sandbox-worktree-security-checklist/" rel="noopener noreferrer"&gt;Claude Code sandbox and worktree checklist&lt;/a&gt; for filesystem boundaries. Use the &lt;a href="https://indieseek.co/blogs/claude-code-verify-code-review-explicit-workflow/" rel="noopener noreferrer"&gt;explicit &lt;code&gt;/verify&lt;/code&gt; and &lt;code&gt;/code-review&lt;/code&gt; workflow&lt;/a&gt; after delegated work returns. This page covers the control plane between those two gates.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed in 2.1.217
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Control&lt;/th&gt;
&lt;th&gt;Confirmed behavior&lt;/th&gt;
&lt;th&gt;Practical consequence&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Concurrent subagents&lt;/td&gt;
&lt;td&gt;The default maximum is 20; &lt;code&gt;CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS&lt;/code&gt; overrides it&lt;/td&gt;
&lt;td&gt;A single prompt can no longer fan out without a ceiling, but 20 may still be too high for a small repo or API limit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Spawn depth&lt;/td&gt;
&lt;td&gt;Subagents no longer spawn nested subagents by default; &lt;code&gt;CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH&lt;/code&gt; can allow deeper nesting&lt;/td&gt;
&lt;td&gt;The default delegation graph stays one level deep and easier to audit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dollar budget&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;--max-budget-usd&lt;/code&gt; now stops background subagents, denies new spawns, and halts running ones after the cap&lt;/td&gt;
&lt;td&gt;An unattended print-mode run has a real whole-run stop condition&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The same release also fixes a symlinked-working-directory escape for background sessions, warns when transcripts are not being saved, and releases memory retained by truncated MCP outputs. Those fixes improve isolation and durability, but they do not replace the three workload controls above.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with a conservative profile
&lt;/h2&gt;

&lt;p&gt;For a small repository or a first canary, begin with two to four concurrent subagents and the default no-nesting behavior. A print-mode automation can use this shape:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;4
&lt;span class="nb"&gt;unset &lt;/span&gt;CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH

claude &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--max-budget-usd&lt;/span&gt; 5.00 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--output-format&lt;/span&gt; json &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s2"&gt;"Inspect the changed files, delegate independent checks, run the relevant tests, and return evidence."&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;--max-budget-usd&lt;/code&gt; applies only to print mode. Interactive sessions and subscription plans need their own organization, workspace, or provider limits. The JSON result includes &lt;code&gt;total_cost_usd&lt;/code&gt;, which gives a simple per-run ledger even when you do not operate an OpenTelemetry backend.&lt;/p&gt;

&lt;p&gt;Raise concurrency only after you know the repository can support the extra file reads, test processes, API requests, and review output. Keep the spawn-depth variable unset unless a task genuinely needs hierarchical delegation and your evidence system can preserve parent-child relationships.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choose a workload envelope
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Profile&lt;/th&gt;
&lt;th&gt;Concurrent cap&lt;/th&gt;
&lt;th&gt;Nested spawning&lt;/th&gt;
&lt;th&gt;Print-mode budget&lt;/th&gt;
&lt;th&gt;Use when&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Local canary&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Default off&lt;/td&gt;
&lt;td&gt;$1-3&lt;/td&gt;
&lt;td&gt;Learning how a prompt decomposes and measuring cost&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Small repo CI&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Default off&lt;/td&gt;
&lt;td&gt;$3-10&lt;/td&gt;
&lt;td&gt;Independent lint, test, documentation, and review checks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Large audit&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;Default off&lt;/td&gt;
&lt;td&gt;Measured from a prior canary&lt;/td&gt;
&lt;td&gt;Read-heavy audits with isolated outputs and adequate API headroom&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hierarchical workflow&lt;/td&gt;
&lt;td&gt;Start at 4&lt;/td&gt;
&lt;td&gt;Explicit exception&lt;/td&gt;
&lt;td&gt;Mandatory&lt;/td&gt;
&lt;td&gt;A parent subagent must coordinate a second layer and the graph is observable&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These are starting points, not Anthropic service limits. Replace the dollar figures with values derived from your own model, repository, and provider. The important invariant is that concurrency, depth, and spend all have explicit owners and stop conditions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Five-case rollout matrix
&lt;/h2&gt;

&lt;p&gt;Run the checks in a disposable branch with harmless tasks. Record the Claude Code version, model, prompt, environment variables, wall time, total cost, number of spawned agents, and exit result.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Case&lt;/th&gt;
&lt;th&gt;Safe probe&lt;/th&gt;
&lt;th&gt;Pass condition&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Concurrency ceiling&lt;/td&gt;
&lt;td&gt;Set the cap to 2 and ask for five independent read-only checks&lt;/td&gt;
&lt;td&gt;No more than two subagents run concurrently; excess work waits or is completed without repeated spawn attempts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Default depth&lt;/td&gt;
&lt;td&gt;Ask one subagent to split its own task again while the depth variable is unset&lt;/td&gt;
&lt;td&gt;The child does not spawn another child and completes with its available tools&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Budget stop&lt;/td&gt;
&lt;td&gt;Run a bounded print-mode task with a deliberately small non-zero test budget&lt;/td&gt;
&lt;td&gt;The result never exceeds the configured control by continuing background work; new spawns stop at the gate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cancellation cleanup&lt;/td&gt;
&lt;td&gt;Start multiple harmless background checks, then trigger the budget or interrupt the parent&lt;/td&gt;
&lt;td&gt;No orphan background work keeps consuming tokens or modifying the fixture&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Evidence completeness&lt;/td&gt;
&lt;td&gt;Collect JSON output or OpenTelemetry spans for the run&lt;/td&gt;
&lt;td&gt;Cost, model, agent IDs, parent-agent IDs, tool activity, and terminal state can be reconstructed without logging prompt or tool content&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Anthropic's monitoring documentation exposes &lt;code&gt;agent_id&lt;/code&gt; and &lt;code&gt;parent_agent_id&lt;/code&gt; on model and tool spans. Content logging is off by default; keep it that way unless a reviewed debugging need justifies the privacy cost.&lt;/p&gt;

&lt;h2&gt;
  
  
  Promotion and rollback workflow
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Upgrade one machine or CI runner to &lt;code&gt;v2.1.217&lt;/code&gt; or newer and restart its sessions.&lt;/li&gt;
&lt;li&gt;Capture the current parallel-agent baseline: peak concurrency, p95 wall time, failed requests, total cost, and number of manual interventions.&lt;/li&gt;
&lt;li&gt;Apply a conservative cap and leave nesting at its default. Run the five fixtures twice so one lucky run does not become the baseline.&lt;/li&gt;
&lt;li&gt;Canary a real low-risk task. Compare output quality and elapsed time with a single-agent run; more parallelism is useful only when it reduces useful completion time without widening review debt.&lt;/li&gt;
&lt;li&gt;Increase the cap one step at a time. Roll back when cost per accepted result rises, rate-limit errors increase, agents contend on the same files, or evidence becomes incomplete.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Use this compact record:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Claude Code subagent control evidence
- version / model / provider:
- repository and fixture commit:
- concurrent cap / spawn-depth setting:
- max budget / total_cost_usd:
- peak active agents / terminal agents:
- wall time / retries / rate-limit errors:
- verification result:
- promote, hold, or roll back:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Common mistakes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Treating the default cap of 20 as a recommended team size.&lt;/li&gt;
&lt;li&gt;Enabling nested spawning before a flat workflow has proved insufficient.&lt;/li&gt;
&lt;li&gt;Assuming &lt;code&gt;--max-budget-usd&lt;/code&gt; controls an interactive session; the CLI reference limits it to print mode.&lt;/li&gt;
&lt;li&gt;Counting spawned agents without checking how many finished, failed, or were halted.&lt;/li&gt;
&lt;li&gt;Logging complete prompts and tool outputs merely to get cost visibility.&lt;/li&gt;
&lt;li&gt;Increasing parallelism when tasks edit the same files or share one fragile external service.&lt;/li&gt;
&lt;li&gt;Treating a budget stop as successful completion without running deterministic verification.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h3&gt;
  
  
  Should I set the concurrency cap to 20?
&lt;/h3&gt;

&lt;p&gt;Usually not for the first rollout. Twenty is the product default, not a repository-specific optimum. Start with two to four and raise it only when measurements show independent work, available API headroom, and manageable review output.&lt;/p&gt;

&lt;h3&gt;
  
  
  Should I enable nested subagents?
&lt;/h3&gt;

&lt;p&gt;Keep the default unless one layer cannot express the workflow. Hierarchical delegation increases the number of paths, contexts, and failure states. If you enable it, require a parent-child trace and a stricter budget.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does the budget flag guarantee a useful result?
&lt;/h3&gt;

&lt;p&gt;No. It is a stop condition, not a quality gate. A run may stop mid-task. Your wrapper must distinguish a verified result from a budget-limited partial result.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does this replace sandboxing?
&lt;/h3&gt;

&lt;p&gt;No. Concurrency, depth, and spend limit workload shape. Sandboxing, worktrees, permissions, network controls, and credential scope limit what the workload can touch.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Claude Code GitHub release &lt;code&gt;v2.1.217&lt;/code&gt;: &lt;a href="https://github.com/anthropics/claude-code/releases/tag/v2.1.217" rel="noopener noreferrer"&gt;https://github.com/anthropics/claude-code/releases/tag/v2.1.217&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Claude Code Docs: Run agents in parallel: &lt;a href="https://code.claude.com/docs/en/agents" rel="noopener noreferrer"&gt;https://code.claude.com/docs/en/agents&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Claude Code Docs: Create custom subagents: &lt;a href="https://code.claude.com/docs/en/sub-agents" rel="noopener noreferrer"&gt;https://code.claude.com/docs/en/sub-agents&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Claude Code Docs: CLI reference: &lt;a href="https://code.claude.com/docs/en/cli-reference" rel="noopener noreferrer"&gt;https://code.claude.com/docs/en/cli-reference&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Claude Code Docs: Monitor usage with OpenTelemetry: &lt;a href="https://code.claude.com/docs/en/monitoring-usage" rel="noopener noreferrer"&gt;https://code.claude.com/docs/en/monitoring-usage&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Claude Code Docs: Manage costs effectively: &lt;a href="https://code.claude.com/docs/en/costs" rel="noopener noreferrer"&gt;https://code.claude.com/docs/en/costs&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>programming</category>
      <category>devtools</category>
    </item>
    <item>
      <title>Kimi K3 API Guide: Context, Pricing, and Agent Rollout</title>
      <dc:creator>Ahab</dc:creator>
      <pubDate>Tue, 21 Jul 2026 15:50:57 +0000</pubDate>
      <link>https://dev.to/ahab_indieseek/kimi-k3-api-guide-context-pricing-and-agent-rollout-9lh</link>
      <guid>https://dev.to/ahab_indieseek/kimi-k3-api-guide-context-pricing-and-agent-rollout-9lh</guid>
      <description>&lt;h1&gt;
  
  
  Kimi K3 API guide: context, cost, agent loops, and rollout
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Quick answer
&lt;/h2&gt;

&lt;p&gt;Moonshot AI released Kimi K3 on July 16, 2026 as its new flagship model. The official product and API surfaces are available now: Kimi, Kimi Work, Kimi Code, and the Kimi API. The API model name is &lt;code&gt;kimi-k3&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The headline specifications are substantial: 2.8 trillion total parameters, native vision, a 1-million-token context window, and an architecture that activates 16 of 896 experts. But two launch boundaries matter more than the parameter count for an independent developer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;K3 always uses thinking mode. &lt;code&gt;reasoning_effort&lt;/code&gt; supports &lt;code&gt;low&lt;/code&gt;, &lt;code&gt;high&lt;/code&gt;, and &lt;code&gt;max&lt;/code&gt;, with &lt;code&gt;max&lt;/code&gt; as the default.&lt;/li&gt;
&lt;li&gt;Moonshot says the full model weights will arrive by July 27. Until the weights and technical report are actually available, treat K3 as an API and hosted-product release—not as a self-hosting option you can validate today.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;K3 is a sensible canary for long-running coding, multimodal engineering, and agentic knowledge work. It should not automatically replace Kimi K2.7 Code for routine repository tasks: K3 has a larger context and higher capability ceiling, but it also costs materially more and imposes stricter history-handling requirements.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who this guide is for
&lt;/h2&gt;

&lt;p&gt;This guide is for developers deciding whether to add Kimi K3 to an AI coding tool, research workflow, document agent, or multi-tool application. It focuses on the API contract and rollout risks rather than repeating launch benchmarks.&lt;/p&gt;

&lt;p&gt;If you are comparing several frontier models, pair this with the &lt;a href="https://indieseek.co/blogs/grok-4-5-coding-agent-api-eval-cost-checklist/" rel="noopener noreferrer"&gt;Grok 4.5 coding-agent evaluation checklist&lt;/a&gt; and the &lt;a href="https://indieseek.co/blogs/gpt-5-6-sol-vs-terra-vs-luna/" rel="noopener noreferrer"&gt;GPT-5.6 model-routing guide&lt;/a&gt;. If your agent executes repository commands, keep the &lt;a href="https://indieseek.co/blogs/ai-coding-agent-sandbox-untrusted-repo-checklist/" rel="noopener noreferrer"&gt;untrusted-repository sandbox gate&lt;/a&gt; in place regardless of model quality.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed—and what remains pending
&lt;/h2&gt;

&lt;p&gt;Kimi K3 is available through four distinct surfaces:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Surface&lt;/th&gt;
&lt;th&gt;Current access&lt;/th&gt;
&lt;th&gt;Important boundary&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Kimi&lt;/td&gt;
&lt;td&gt;Hosted agent workspace&lt;/td&gt;
&lt;td&gt;Product limits and memberships are separate from API billing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kimi Work&lt;/td&gt;
&lt;td&gt;Desktop app 3.1.0 or later&lt;/td&gt;
&lt;td&gt;Available for Windows and Apple silicon Macs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kimi Code&lt;/td&gt;
&lt;td&gt;Terminal coding agent&lt;/td&gt;
&lt;td&gt;Select K3 with &lt;code&gt;/model&lt;/code&gt;; start a fresh session for the switch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kimi API&lt;/td&gt;
&lt;td&gt;OpenAI SDK-compatible endpoint&lt;/td&gt;
&lt;td&gt;Use &lt;code&gt;model="kimi-k3"&lt;/code&gt;; a successful top-up of at least $1 unlocks access&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Local/self-hosted&lt;/td&gt;
&lt;td&gt;Not yet verifiable&lt;/td&gt;
&lt;td&gt;Full weights and more technical details are promised by July 27&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The launch blog calls K3 an open 3T-class model, but availability must be stated precisely. Hosted access is live. The weights, technical report, vLLM work, license details, and practical hardware recipes still need to be checked when the planned weight release lands.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choose K3, K2.7 Code, or K2.6 by task
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Task&lt;/th&gt;
&lt;th&gt;First model to test&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Long-horizon coding across a very large repository&lt;/td&gt;
&lt;td&gt;K3&lt;/td&gt;
&lt;td&gt;1M context, tool use, and long-session training target&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Visual frontend, CAD, game, image, or video reasoning&lt;/td&gt;
&lt;td&gt;K3&lt;/td&gt;
&lt;td&gt;Native multimodal input and visual feedback loops&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Routine coding within 256K context&lt;/td&gt;
&lt;td&gt;K2.7 Code&lt;/td&gt;
&lt;td&gt;Coding specialist with much lower input and output prices&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;General text-and-image application within 256K&lt;/td&gt;
&lt;td&gt;K2.6&lt;/td&gt;
&lt;td&gt;General-purpose multimodal route at K2.7-level pricing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Self-hosting or private inference&lt;/td&gt;
&lt;td&gt;Wait&lt;/td&gt;
&lt;td&gt;K3 weights and deployment evidence are not yet available&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This is a routing decision, not a leaderboard decision. The official K3 benchmark table uses maximum reasoning effort and multiple harnesses, including Kimi Code, Claude Code, and Codex. Some results are internal or use modified hardware environments. Reproduce the user task inside your own harness before changing a production default.&lt;/p&gt;

&lt;h2&gt;
  
  
  Calculate task cost before opening the 1M window
&lt;/h2&gt;

&lt;p&gt;Official pay-as-you-go prices per million tokens are:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Cache-hit input&lt;/th&gt;
&lt;th&gt;Cache-miss input&lt;/th&gt;
&lt;th&gt;Output&lt;/th&gt;
&lt;th&gt;Context&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Kimi K3&lt;/td&gt;
&lt;td&gt;$0.30&lt;/td&gt;
&lt;td&gt;$3.00&lt;/td&gt;
&lt;td&gt;$15.00&lt;/td&gt;
&lt;td&gt;1M&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kimi K2.7 Code&lt;/td&gt;
&lt;td&gt;$0.19&lt;/td&gt;
&lt;td&gt;$0.95&lt;/td&gt;
&lt;td&gt;$4.00&lt;/td&gt;
&lt;td&gt;256K&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kimi K2.6&lt;/td&gt;
&lt;td&gt;$0.16&lt;/td&gt;
&lt;td&gt;$0.95&lt;/td&gt;
&lt;td&gt;$4.00&lt;/td&gt;
&lt;td&gt;256K&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For K3, a task with 500K uncached input tokens and 20K output tokens costs about &lt;code&gt;$1.80&lt;/code&gt;: &lt;code&gt;0.5 × $3 + 0.02 × $15&lt;/code&gt;. If the 500K prefix hits the cache, the same token counts cost about &lt;code&gt;$0.45&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Caching is automatic, but a previous prompt must exceed 256 tokens and the reusable prefix must remain unchanged. A 1M context window removes a context-length price tier; it does not make long prompts free. Log cache hits, input, reasoning/output, retries, tool rounds, wall time, and cost per accepted task.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with the smallest correct API call
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MOONSHOT_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.moonshot.ai/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;kimi-k3&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;reasoning_effort&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;low&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;system&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Do not modify files. Return a plan and risks.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Review this migration task.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Begin with &lt;code&gt;low&lt;/code&gt; on bounded triage tasks, then promote only the cases where &lt;code&gt;high&lt;/code&gt; or &lt;code&gt;max&lt;/code&gt; improves acceptance enough to justify latency and output cost. K3 fixes sampling settings such as temperature and top-p, so omit those fields instead of copying an old provider configuration blindly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Preserve the agent-loop contract
&lt;/h2&gt;

&lt;p&gt;K3 was trained with preserved thinking history. For multi-turn conversations and tool calls, append the complete assistant message returned by the API to the next request. Keeping only the visible &lt;code&gt;content&lt;/code&gt; can make later generations unstable because it drops reasoning and tool-call state.&lt;/p&gt;

&lt;p&gt;Use these invariants:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Start a new session when switching from another model to K3.&lt;/li&gt;
&lt;li&gt;Store and replay the complete assistant message unchanged.&lt;/li&gt;
&lt;li&gt;Return one tool result for every &lt;code&gt;tool_call_id&lt;/code&gt; before asking K3 to continue.&lt;/li&gt;
&lt;li&gt;Keep dynamically loaded tool definitions in later requests; the server does not retain them for you.&lt;/li&gt;
&lt;li&gt;Parse structured output only from final &lt;code&gt;message.content&lt;/code&gt;, not from &lt;code&gt;reasoning_content&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Send vision data as base64 or an uploaded &lt;code&gt;ms://&lt;/code&gt; file ID. Public image URLs are not supported by the launch API contract.&lt;/li&gt;
&lt;li&gt;Keep the official web-search tool out of production canaries for now; Moonshot says it is being updated and is not recommended in the near term.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;K3 can also act too proactively on ambiguous tasks. Put approval boundaries, allowed tools, file scopes, spend caps, and stop conditions in the system prompt or &lt;code&gt;AGENTS.md&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Seven-case rollout gate
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Case&lt;/th&gt;
&lt;th&gt;Probe&lt;/th&gt;
&lt;th&gt;Pass condition&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Baseline&lt;/td&gt;
&lt;td&gt;Run a representative task on the current model and K3 low/high/max&lt;/td&gt;
&lt;td&gt;Quality, latency, and total token use are recorded under the same harness&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;History&lt;/td&gt;
&lt;td&gt;Continue a tool session with full assistant messages, then repeat with content-only history in a disposable test&lt;/td&gt;
&lt;td&gt;Production path remains stable; the broken fixture proves monitoring can detect history loss&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool loop&lt;/td&gt;
&lt;td&gt;Require two parallel tool calls and return results out of order in the negative fixture&lt;/td&gt;
&lt;td&gt;Every call ID is matched; missing or duplicate results fail safely&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Context and cache&lt;/td&gt;
&lt;td&gt;Repeat a long, unchanged prefix, then alter an early byte&lt;/td&gt;
&lt;td&gt;Cache behavior and task cost match expectations; cache misses are visible&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Structured output&lt;/td&gt;
&lt;td&gt;Validate strict JSON Schema across normal, refusal, and long-reasoning cases&lt;/td&gt;
&lt;td&gt;Only final content is parsed and schema failures are rejected&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multimodal&lt;/td&gt;
&lt;td&gt;Test base64 image and uploaded video inputs, plus a public-URL negative case&lt;/td&gt;
&lt;td&gt;Supported inputs work and unsupported URLs fail predictably&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Guardrails&lt;/td&gt;
&lt;td&gt;Give an ambiguous request near a file, network, or spending boundary&lt;/td&gt;
&lt;td&gt;K3 asks or stops instead of improvising beyond permission&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Promote K3 only when it improves accepted outcomes per dollar or completes a class of tasks the cheaper model cannot. Keep a one-flag rollback to K2.7 Code or your existing provider.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common mistakes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Saying the weights are downloadable before the planned July 27 release.&lt;/li&gt;
&lt;li&gt;Treating a 1M window as a reason to send an entire repository on every turn.&lt;/li&gt;
&lt;li&gt;Switching an existing conversation to K3 and blaming the model for corrupted history.&lt;/li&gt;
&lt;li&gt;Dropping &lt;code&gt;reasoning_content&lt;/code&gt; or tool-call fields when rebuilding messages.&lt;/li&gt;
&lt;li&gt;Comparing benchmark scores without matching reasoning effort and agent harness.&lt;/li&gt;
&lt;li&gt;Using &lt;code&gt;max&lt;/code&gt; for every task without measuring the cost of output and retries.&lt;/li&gt;
&lt;li&gt;Allowing an agent trained for long-horizon autonomy to make product, file, or network decisions without explicit limits.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h3&gt;
  
  
  Is Kimi K3 open source today?
&lt;/h3&gt;

&lt;p&gt;Hosted K3 is available today. Moonshot says the full weights will be released by July 27, with more architecture and evaluation detail in a technical report. Recheck the files, license, checksums, and inference support after that release rather than describing self-hosting as complete now.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is the API OpenAI-compatible?
&lt;/h3&gt;

&lt;p&gt;It uses the OpenAI Python SDK and the &lt;code&gt;https://api.moonshot.ai/v1&lt;/code&gt; base URL. Compatibility is not identical: K3 adds &lt;code&gt;reasoning_effort&lt;/code&gt;, preserves thinking history, fixes several sampling parameters, separates streamed reasoning, and has specific vision and tool-loop rules.&lt;/p&gt;

&lt;h3&gt;
  
  
  Should K3 replace K2.7 Code?
&lt;/h3&gt;

&lt;p&gt;Not by default. Test K3 for difficult long-horizon, multimodal, or million-token tasks. Keep K2.7 Code as the cheaper baseline for routine coding until task-level evidence justifies the upgrade.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.kimi.com/blog/kimi-k3" rel="noopener noreferrer"&gt;Moonshot AI: Kimi K3 technical launch blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://platform.kimi.ai/docs/guide/kimi-k3-quickstart" rel="noopener noreferrer"&gt;Kimi API Platform: Kimi K3 quickstart and limits&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://platform.kimi.ai/" rel="noopener noreferrer"&gt;Kimi API Platform: current model pricing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.moonshot.ai/" rel="noopener noreferrer"&gt;Moonshot AI product and research availability&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>programming</category>
      <category>api</category>
    </item>
    <item>
      <title>Qwen CUA Driver 0.7.3 Compatibility Checklist</title>
      <dc:creator>Ahab</dc:creator>
      <pubDate>Tue, 21 Jul 2026 10:31:10 +0000</pubDate>
      <link>https://dev.to/ahab_indieseek/qwen-cua-driver-073-compatibility-checklist-386h</link>
      <guid>https://dev.to/ahab_indieseek/qwen-cua-driver-073-compatibility-checklist-386h</guid>
      <description>&lt;h1&gt;
  
  
  Qwen CUA Driver 0.7.3 coordinate and payload compatibility checklist
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Quick answer
&lt;/h2&gt;

&lt;p&gt;Qwen released &lt;code&gt;cua-driver-rs-v0.7.3&lt;/code&gt; on July 21, 2026. This is the version of the computer-use driver vendored inside the Qwen Code repository, not “Qwen Code 0.7.3.” It ships cross-platform binaries and exposes two opt-in compatibility modes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;CUA_DRIVER_RS_COORDINATE_SPACE=1&lt;/code&gt; converts model-facing coordinates to a normalized 0–1000 space. The default remains pixels, and &lt;code&gt;CUA_DRIVER_RS_COORDINATE_SCALE&lt;/code&gt; can change the full scale.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;MCP_MODEL_PAYLOAD_FILTER=1&lt;/code&gt; reversibly rewrites configured terms in textual MCP responses, then decodes returned aliases when they come back to the same driver. The default remains unfiltered.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do not enable both flags merely because they are new. First prove which coordinate contract your model actually follows and whether a model API route is rejecting accumulated text. Then run the five-case gate below on a disposable desktop session.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who this is for
&lt;/h2&gt;

&lt;p&gt;This guide is for developers connecting Qwen-VL, Qwen Code, Claude Code, Codex, Cursor, or another MCP client to a native computer-use driver on macOS, Windows, or Linux.&lt;/p&gt;

&lt;p&gt;It complements the &lt;a href="https://indieseek.co/blogs/chrome-devtools-mcp-ai-agent-debugging-workflow/" rel="noopener noreferrer"&gt;Chrome DevTools MCP debugging workflow&lt;/a&gt; for browser internals and the &lt;a href="https://indieseek.co/blogs/ai-coding-agent-sandbox-untrusted-repo-checklist/" rel="noopener noreferrer"&gt;agent sandbox checklist&lt;/a&gt; for repository execution. A desktop driver adds a different boundary: screenshots, accessibility trees, coordinates, input events, application identities, and OS permissions.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed—and what did not
&lt;/h2&gt;

&lt;p&gt;The release provides a signed and notarized universal macOS binary plus &lt;code&gt;QwenCuaDriver.app&lt;/code&gt;. Linux and Windows artifacts are unsigned. The driver can be pinned and verified with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;CUA_DRIVER_RS_VERSION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0.7.3 /bin/bash &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/QwenLM/qwen-code/main/packages/cua-driver/scripts/install.sh&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
qwen-cua-driver &lt;span class="nt"&gt;--version&lt;/span&gt;
qwen-cua-driver list-tools
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Relative-coordinate mode is designed for models that emit positions on a normalized grid. The official design converts normalized x values by screenshot width and y values by screenshot height, using 1000 as the default divisor. However, the same design records a real Qwen trace that followed the tool schema’s pixel wording correctly. Model family alone therefore does not prove that normalized mode is required.&lt;/p&gt;

&lt;p&gt;The payload filter solves a separate compatibility problem. Some model routes may reject a request after configured terms appear in accumulated tool output. When explicitly enabled, the filter transforms textual response keys and values and reverses valid aliases on incoming driver arguments. It does not transform image or audio bytes, JSON-RPC routing fields, unrelated shell output, or values sent to another MCP server.&lt;/p&gt;

&lt;h2&gt;
  
  
  Decide before enabling a flag
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Does a captured tool call use screenshot pixels?
├─ yes -&amp;gt; keep coordinate mode off
└─ no, it consistently uses a 0–1000 grid
   -&amp;gt; enable coordinate mode in a canary session

Does the API reject requests because a configured term appears in MCP history?
├─ no evidence -&amp;gt; keep payload filtering off
└─ reproducible rejection -&amp;gt; enable it only on the affected driver route
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A suitable MCP configuration for a controlled canary is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"cua-computer-use-canary"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"qwen-cua-driver"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"mcp"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"CUA_DRIVER_RS_COORDINATE_SPACE"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"CUA_DRIVER_RS_COORDINATE_SCALE"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1000"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add &lt;code&gt;MCP_MODEL_PAYLOAD_FILTER=1&lt;/code&gt; only for a separately proven payload rejection. Changing two contracts at once makes failures harder to attribute.&lt;/p&gt;

&lt;h2&gt;
  
  
  Five-case rollout gate
&lt;/h2&gt;

&lt;p&gt;Use a disposable test account and harmless target application. Keep production credentials and destructive controls out of reach.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Case&lt;/th&gt;
&lt;th&gt;Probe&lt;/th&gt;
&lt;th&gt;Pass condition&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Baseline compatibility&lt;/td&gt;
&lt;td&gt;Run initialize, tool discovery, one screenshot, and one safe click with both flags off&lt;/td&gt;
&lt;td&gt;Tool schemas and results match the previous driver; the click lands correctly&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coordinate mapping&lt;/td&gt;
&lt;td&gt;With normalized mode on, click four marked quadrants in two differently sized windows; repeat with the model’s actual scale&lt;/td&gt;
&lt;td&gt;Each point lands inside its target; x and y do not swap or drift after resize&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mixed coordinate paths&lt;/td&gt;
&lt;td&gt;Test an accessibility &lt;code&gt;element_index&lt;/code&gt;, a direct click, a zoomed image, and &lt;code&gt;move_cursor&lt;/code&gt; separately&lt;/td&gt;
&lt;td&gt;Element targeting still works; zoom-space exceptions are not mistaken for the main 0–1000 grid&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Payload round trip&lt;/td&gt;
&lt;td&gt;With filtering on, exercise nested textual keys and values, an invalid alias, a key collision, and a returned application identifier&lt;/td&gt;
&lt;td&gt;Configured terms disappear from model-facing text; valid aliases recover exactly; invalid/colliding input fails safely&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Binary and restart integrity&lt;/td&gt;
&lt;td&gt;Hash a screenshot before and after filtering, restart the MCP server, and repeat the canary&lt;/td&gt;
&lt;td&gt;Image bytes are unchanged, settings remain explicit, and rollback restores the baseline immediately&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For macOS, also verify the installed app’s signature and Screen Recording/Accessibility permissions. For Linux and Windows, record that the published artifacts are unsigned and apply your own checksum, provenance, or internal signing policy before wider distribution.&lt;/p&gt;

&lt;h2&gt;
  
  
  Record evidence, then promote
&lt;/h2&gt;

&lt;p&gt;The official payload-filter change reports zero configured-term matches across 73,976 response bytes in a real driver session, while preserving default-off behavior and binary data. Treat that as upstream evidence, not a substitute for your own route, model, and application fixtures.&lt;/p&gt;

&lt;p&gt;Use a compact rollout record:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Qwen CUA Driver canary
- driver version / artifact hash / OS:
- MCP client and model route:
- observed coordinate contract and scale:
- baseline click targets:
- normalized click error by window size:
- payload rejection reproduced before flag: yes/no
- text leak count / alias round-trip result:
- screenshot hash unchanged: yes/no
- rollback command and owner:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Promote only after the same fixture passes across restart and window resize. Keep one-click rollback by removing the environment flag and restarting the MCP process.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common mistakes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Calling the release “Qwen Code 0.7.3” and implying the whole CLI changed versions.&lt;/li&gt;
&lt;li&gt;Assuming every Qwen model emits 0–1000 coordinates without capturing a real tool call.&lt;/li&gt;
&lt;li&gt;Mixing screenshot-local, screen-global, zoom-image, and accessibility-element coordinates in one assertion.&lt;/li&gt;
&lt;li&gt;Treating reversible text rewriting as authorization, sanitization, or prompt-injection protection.&lt;/li&gt;
&lt;li&gt;Expecting an alias passed to a shell or different MCP server to decode automatically.&lt;/li&gt;
&lt;li&gt;Enabling both flags and upgrading the binary in one unobservable production change.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h3&gt;
  
  
  Should Qwen-VL users always enable relative coordinates?
&lt;/h3&gt;

&lt;p&gt;No. The mode exists for Qwen-VL computer-use flows, but the official design also documents a Qwen trace that followed pixel-based tool descriptions. Capture the model’s actual output and enable normalization only when the contract is consistently 0–1000.&lt;/p&gt;

&lt;h3&gt;
  
  
  Should the scale be 1000 or 999?
&lt;/h3&gt;

&lt;p&gt;The driver defaults to 1000, while the design notes that different cookbooks have used both. Keep the scale explicit and run marked corner and quadrant tests instead of guessing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is MCP payload filtering a security boundary?
&lt;/h3&gt;

&lt;p&gt;No. It is a route-compatibility transform for configured text. It does not inspect images, govern tool authority, remove prompt injection, or rewrite data emitted by unrelated tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Qwen Code release &lt;code&gt;cua-driver-rs-v0.7.3&lt;/code&gt;: &lt;a href="https://github.com/QwenLM/qwen-code/releases/tag/cua-driver-rs-v0.7.3" rel="noopener noreferrer"&gt;https://github.com/QwenLM/qwen-code/releases/tag/cua-driver-rs-v0.7.3&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Qwen CUA Driver README at the release tag: &lt;a href="https://github.com/QwenLM/qwen-code/blob/cua-driver-rs-v0.7.3/packages/cua-driver/README.md" rel="noopener noreferrer"&gt;https://github.com/QwenLM/qwen-code/blob/cua-driver-rs-v0.7.3/packages/cua-driver/README.md&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Qwen relative-coordinate design: &lt;a href="https://github.com/QwenLM/qwen-code/blob/cua-driver-rs-v0.7.3/packages/cua-driver/docs/relative-coordinates-design.md" rel="noopener noreferrer"&gt;https://github.com/QwenLM/qwen-code/blob/cua-driver-rs-v0.7.3/packages/cua-driver/docs/relative-coordinates-design.md&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Qwen MCP payload-filter change and validation: &lt;a href="https://github.com/QwenLM/qwen-code/pull/7413" rel="noopener noreferrer"&gt;https://github.com/QwenLM/qwen-code/pull/7413&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Community coordinate-contract questions: &lt;a href="https://github.com/QwenLM/Qwen3-VL/issues/1521" rel="noopener noreferrer"&gt;https://github.com/QwenLM/Qwen3-VL/issues/1521&lt;/a&gt; and &lt;a href="https://github.com/QwenLM/Qwen3-VL/issues/1780" rel="noopener noreferrer"&gt;https://github.com/QwenLM/Qwen3-VL/issues/1780&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>programming</category>
      <category>security</category>
    </item>
    <item>
      <title>Claude Code 2.1.216 Sandbox Security Checklist</title>
      <dc:creator>Ahab</dc:creator>
      <pubDate>Tue, 21 Jul 2026 01:29:54 +0000</pubDate>
      <link>https://dev.to/ahab_indieseek/claude-code-21216-sandbox-security-checklist-4mc7</link>
      <guid>https://dev.to/ahab_indieseek/claude-code-21216-sandbox-security-checklist-4mc7</guid>
      <description>&lt;h1&gt;
  
  
  Claude Code 2.1.216 sandbox and worktree security checklist
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Quick answer
&lt;/h2&gt;

&lt;p&gt;Claude Code &lt;code&gt;v2.1.216&lt;/code&gt;, released July 20, 2026, adds &lt;code&gt;sandbox.filesystem.disabled&lt;/code&gt;, which lets you skip Claude Code's filesystem isolation while retaining network egress control. The same release fixes several boundary failures involving worktree-isolated subagents, symlinked &lt;code&gt;.claude&lt;/code&gt; paths, rewind operations, and resumed background-agent restrictions.&lt;/p&gt;

&lt;p&gt;Upgrade before relying on those boundaries, but do not switch off filesystem isolation merely to reduce friction. Anthropic's sandbox documentation says effective isolation needs both filesystem and network controls. Use the new exception only when another layer—such as a disposable container or VM—already confines filesystem access.&lt;/p&gt;

&lt;p&gt;Use this release gate:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;upgrade to 2.1.216
-&amp;gt; choose an isolation profile
-&amp;gt; run five non-destructive boundary tests
-&amp;gt; compare logs and sentinel hashes
-&amp;gt; promote gradually
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Who this is for
&lt;/h2&gt;

&lt;p&gt;This guide is for developers running Claude Code locally, in CI, or through background agents, especially when using worktrees, scheduled tasks, workflows, custom sandbox settings, or long-lived sessions.&lt;/p&gt;

&lt;p&gt;It complements the broader &lt;a href="https://indieseek.co/blogs/ai-coding-agent-sandbox-untrusted-repo-checklist/" rel="noopener noreferrer"&gt;untrusted-repository sandbox checklist&lt;/a&gt;. That guide defines the trust boundary; this one verifies the concrete changes in &lt;code&gt;v2.1.216&lt;/code&gt;. After the environment is safe, use the &lt;a href="https://indieseek.co/blogs/claude-code-verify-code-review-explicit-workflow/" rel="noopener noreferrer"&gt;explicit &lt;code&gt;/verify&lt;/code&gt; and &lt;code&gt;/code-review&lt;/code&gt; finish gate&lt;/a&gt; for output quality.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed
&lt;/h2&gt;

&lt;p&gt;The release note confirms five changes that deserve regression coverage:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Area&lt;/th&gt;
&lt;th&gt;Confirmed change&lt;/th&gt;
&lt;th&gt;Upgrade question&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Sandbox configuration&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;sandbox.filesystem.disabled&lt;/code&gt; can skip filesystem isolation while keeping network egress control&lt;/td&gt;
&lt;td&gt;Is another layer actually containing disk access?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Worktree isolation&lt;/td&gt;
&lt;td&gt;Isolated subagents can no longer redirect Git into the shared checkout with &lt;code&gt;git -C&lt;/code&gt;, &lt;code&gt;--git-dir&lt;/code&gt;, &lt;code&gt;GIT_DIR&lt;/code&gt;, or &lt;code&gt;GIT_WORK_TREE&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Can a test agent still reach the parent checkout?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Configuration writes&lt;/td&gt;
&lt;td&gt;Workflow and scheduled-task writes no longer follow a symlink at &lt;code&gt;.claude&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Does an outside sentinel remain unchanged?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rewind&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;/rewind&lt;/code&gt; skips symlinked or hard-linked tracked paths and reports the skipped count&lt;/td&gt;
&lt;td&gt;Are external files protected and skips visible?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Resumed agents&lt;/td&gt;
&lt;td&gt;Background sessions restore the original agent prompt and tool restrictions instead of reverting to defaults&lt;/td&gt;
&lt;td&gt;Do restrictions survive stop and resume?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These are fixes to Claude Code's enforcement and state restoration. They do not make every command safe, inspect encrypted traffic, or isolate built-in file tools. Anthropic documents sandboxing as an OS-level boundary for Bash and its child processes; Read, Edit, Write, computer use, and MCP tools have separate controls.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choose the right isolation profile
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Profile&lt;/th&gt;
&lt;th&gt;Filesystem&lt;/th&gt;
&lt;th&gt;Network&lt;/th&gt;
&lt;th&gt;Use when&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Default&lt;/td&gt;
&lt;td&gt;Claude Code sandbox&lt;/td&gt;
&lt;td&gt;Domain allowlist&lt;/td&gt;
&lt;td&gt;Normal local development&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Compatibility exception&lt;/td&gt;
&lt;td&gt;External container or VM; Claude filesystem isolation disabled&lt;/td&gt;
&lt;td&gt;Claude network sandbox remains enabled&lt;/td&gt;
&lt;td&gt;A required tool conflicts with filesystem isolation and the outer runtime is disposable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Managed hard gate&lt;/td&gt;
&lt;td&gt;Claude sandbox plus container policy&lt;/td&gt;
&lt;td&gt;Managed allowlist and inspected proxy when required&lt;/td&gt;
&lt;td&gt;CI or enterprise workloads with enforceable policy&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For the default profile, prefer narrow &lt;code&gt;sandbox.filesystem.allowWrite&lt;/code&gt; entries over excluding an entire command. For a hard gate, enable &lt;code&gt;sandbox.failIfUnavailable&lt;/code&gt; and disable the unsandboxed escape hatch with &lt;code&gt;allowUnsandboxedCommands: false&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The compatibility profile may look like this on &lt;code&gt;v2.1.216&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"sandbox"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"filesystem"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"disabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"network"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"allowedDomains"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"registry.npmjs.org"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"allowUnsandboxedCommands"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Treat that configuration as a transfer of responsibility, not a security improvement. The container or VM must prevent writes to host credentials, shell startup files, other repositories, and deployment configuration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Five-case regression matrix
&lt;/h2&gt;

&lt;p&gt;Run the tests in a disposable repository with fake data. Never point a security fixture at real credentials or a production checkout.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Case&lt;/th&gt;
&lt;th&gt;Safe probe&lt;/th&gt;
&lt;th&gt;Pass condition&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Network egress&lt;/td&gt;
&lt;td&gt;Request one allowed host and one harmless unlisted host&lt;/td&gt;
&lt;td&gt;Allowed request succeeds; unlisted request is blocked or prompts according to policy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Worktree redirect&lt;/td&gt;
&lt;td&gt;From an isolated subagent, run read-only &lt;code&gt;git status&lt;/code&gt; variants using &lt;code&gt;-C&lt;/code&gt;, &lt;code&gt;--git-dir&lt;/code&gt;, &lt;code&gt;GIT_DIR&lt;/code&gt;, and &lt;code&gt;GIT_WORK_TREE&lt;/code&gt; aimed at a parent test checkout&lt;/td&gt;
&lt;td&gt;The subagent does not operate on the shared checkout&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;.claude&lt;/code&gt; symlink&lt;/td&gt;
&lt;td&gt;In a fixture repo, point &lt;code&gt;.claude&lt;/code&gt; at an outside directory containing a hashed sentinel, then attempt to save a test workflow or scheduled task&lt;/td&gt;
&lt;td&gt;No outside file is created or changed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rewind links&lt;/td&gt;
&lt;td&gt;Put a symlink and hard link in the fixture, change tracked content, then run &lt;code&gt;/rewind&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Linked external targets keep their hash; Claude reports skipped paths&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Restriction restore&lt;/td&gt;
&lt;td&gt;Start a background agent with one harmless tool denied, stop it, resume it, then ask for that tool&lt;/td&gt;
&lt;td&gt;The original denial still applies after resume&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Record the Claude Code version, operating system, settings scopes, fixture commit, commands, prompts, exit status, prompts shown, and sentinel hashes. A pass without evidence is difficult to distinguish from a test that never reached the intended path.&lt;/p&gt;

&lt;h2&gt;
  
  
  Upgrade workflow
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Capture the current policy and run &lt;code&gt;claude --version&lt;/code&gt;. Do not edit sandbox rules and upgrade the binary in the same unexplained change.&lt;/li&gt;
&lt;li&gt;Upgrade to &lt;code&gt;v2.1.216&lt;/code&gt; or newer stable release, then reopen sessions so they load the new code and settings.&lt;/li&gt;
&lt;li&gt;Run the five fixtures with the default full sandbox first. If a tool is incompatible, try a narrow &lt;code&gt;allowWrite&lt;/code&gt; path before disabling filesystem isolation.&lt;/li&gt;
&lt;li&gt;If the compatibility exception is unavoidable, run Claude Code inside a disposable container or VM, keep the network allowlist narrow, and repeat every fixture.&lt;/li&gt;
&lt;li&gt;Canary the configuration on one low-risk repository. Watch denied operations, unexpected prompts, writes outside the repo, network destinations, and resumed-agent behavior before wider rollout.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Use this compact evidence record:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Claude Code isolation evidence
- version / OS:
- settings scope and profile:
- fixture commit:
- egress allow and deny result:
- worktree redirect result:
- symlink and hard-link sentinel hashes:
- resumed-agent restriction result:
- remaining exception and owner:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Common mistakes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Reading &lt;code&gt;filesystem.disabled&lt;/code&gt; as a recommended default instead of a compatibility escape hatch.&lt;/li&gt;
&lt;li&gt;Keeping network filtering but allowing a broad domain that can receive arbitrary uploaded data.&lt;/li&gt;
&lt;li&gt;Testing worktree isolation with a real shared checkout or commands that modify history.&lt;/li&gt;
&lt;li&gt;Assuming Bash sandbox rules also govern Read, Edit, Write, computer use, and every MCP tool.&lt;/li&gt;
&lt;li&gt;Resuming an old background session without checking whether its prompt and tool restrictions were restored.&lt;/li&gt;
&lt;li&gt;Treating a successful upgrade as proof that existing managed settings, hooks, and containers still compose safely.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h3&gt;
  
  
  Should I set &lt;code&gt;sandbox.filesystem.disabled&lt;/code&gt; to true?
&lt;/h3&gt;

&lt;p&gt;Usually no. Use it only when a separate filesystem boundary is already enforced and you have a concrete compatibility problem. For normal local development, retain both filesystem and network isolation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does network isolation prevent every exfiltration path?
&lt;/h3&gt;

&lt;p&gt;No. Anthropic notes that the built-in proxy filters by domain and does not inspect encrypted traffic. Broad allowed domains and powerful Unix sockets can weaken the boundary. Use a TLS-inspecting proxy or stronger outer isolation when your threat model requires it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do the worktree fixes protect the parent repository automatically?
&lt;/h3&gt;

&lt;p&gt;They close specific redirection paths named in the release. You should still keep unrelated worktree changes, credentials, Git configuration, hooks, and deployment actions outside an untrusted agent's authority.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is &lt;code&gt;v2.1.216&lt;/code&gt; enough for unattended coding agents?
&lt;/h3&gt;

&lt;p&gt;It is a useful security upgrade, not a complete unattended-run policy. Keep deterministic tests, scoped credentials, network controls, an irreversible-action gate, and recorded evidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Claude Code GitHub release &lt;code&gt;v2.1.216&lt;/code&gt;: &lt;a href="https://github.com/anthropics/claude-code/releases/tag/v2.1.216" rel="noopener noreferrer"&gt;https://github.com/anthropics/claude-code/releases/tag/v2.1.216&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Claude Code Docs: Sandboxing: &lt;a href="https://code.claude.com/docs/en/sandboxing" rel="noopener noreferrer"&gt;https://code.claude.com/docs/en/sandboxing&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Claude Code Docs: Settings: &lt;a href="https://code.claude.com/docs/en/settings" rel="noopener noreferrer"&gt;https://code.claude.com/docs/en/settings&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Claude Code Docs: Organization setup: &lt;a href="https://code.claude.com/docs/en/admin-setup" rel="noopener noreferrer"&gt;https://code.claude.com/docs/en/admin-setup&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Claude Code Docs: Development containers: &lt;a href="https://code.claude.com/docs/en/devcontainer" rel="noopener noreferrer"&gt;https://code.claude.com/docs/en/devcontainer&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>claudecode</category>
      <category>security</category>
      <category>programming</category>
    </item>
    <item>
      <title>Grok 4.5 API for coding agents: evaluate cost, tools, and rollout</title>
      <dc:creator>Ahab</dc:creator>
      <pubDate>Mon, 20 Jul 2026 10:33:50 +0000</pubDate>
      <link>https://dev.to/ahab_indieseek/grok-45-api-for-coding-agents-evaluate-cost-tools-and-rollout-1j1e</link>
      <guid>https://dev.to/ahab_indieseek/grok-45-api-for-coding-agents-evaluate-cost-tools-and-rollout-1j1e</guid>
      <description>&lt;h1&gt;
  
  
  Grok 4.5 API for coding agents: evaluate cost, tools, and rollout
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Quick answer
&lt;/h2&gt;

&lt;p&gt;Grok 4.5 launched on July 16, 2026 as SpaceXAI's flagship model for coding, agentic tasks, and knowledge work. The API model is &lt;code&gt;grok-4.5&lt;/code&gt;; it supports a 500,000-token context window, function calling, structured outputs, and configurable reasoning. Standard short-context pricing is $2 per million input tokens, $0.30 per million cached input tokens, and $6 per million output tokens.&lt;/p&gt;

&lt;p&gt;Do not route every coding task to it on announcement claims alone. Run a small repository-specific evaluation first, measure tool-loop reliability and total task cost, and include prompts on both sides of the 200,000-token threshold because long-context rates double to $4 input, $0.60 cached input, and $12 output per million tokens.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who this is for
&lt;/h2&gt;

&lt;p&gt;This guide is for independent developers and small teams deciding whether to add Grok 4.5 to an existing coding-agent router, replace another model for selected tasks, or test the xAI Responses API without losing cost and verification controls.&lt;/p&gt;

&lt;p&gt;It assumes your harness already owns file access, command execution, approvals, and final validation. If the repository itself is untrusted, establish an &lt;a href="https://indieseek.co/blogs/ai-coding-agent-sandbox-untrusted-repo-checklist/" rel="noopener noreferrer"&gt;AI coding-agent sandbox&lt;/a&gt; before comparing models. If you are also changing provider identifiers, reuse the staged checks from the &lt;a href="https://indieseek.co/blogs/deepseek-v4-api-migration-legacy-models/" rel="noopener noreferrer"&gt;DeepSeek API migration guide&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed and what is confirmed
&lt;/h2&gt;

&lt;p&gt;The official announcement positions Grok 4.5 for coding and agentic work, reports service speed of 80 tokens per second, and lists availability through the SpaceXAI console, Grok Build, and Cursor. The API example uses the Responses endpoint with model ID &lt;code&gt;grok-4.5&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The model documentation adds the boundaries that matter in production:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Property&lt;/th&gt;
&lt;th&gt;Confirmed value&lt;/th&gt;
&lt;th&gt;Rollout consequence&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Context window&lt;/td&gt;
&lt;td&gt;500,000 tokens&lt;/td&gt;
&lt;td&gt;Test real repository prompts, not only short snippets&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Modalities&lt;/td&gt;
&lt;td&gt;Text and image input; text output&lt;/td&gt;
&lt;td&gt;Keep non-text output on a separate model path&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reasoning&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;low&lt;/code&gt;, &lt;code&gt;medium&lt;/code&gt;, or &lt;code&gt;high&lt;/code&gt;; default is &lt;code&gt;high&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Set effort explicitly so latency and cost do not drift&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tools&lt;/td&gt;
&lt;td&gt;Function calling and structured outputs&lt;/td&gt;
&lt;td&gt;Validate arguments, tool results, and loop termination&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Short-context price&lt;/td&gt;
&lt;td&gt;$2 input / $0.30 cached / $6 output per 1M tokens&lt;/td&gt;
&lt;td&gt;Suitable for a controlled challenger lane&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Long-context price&lt;/td&gt;
&lt;td&gt;$4 input / $0.60 cached / $12 output per 1M tokens&lt;/td&gt;
&lt;td&gt;A prompt at or above 200k makes all tokens use long rates&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Knowledge cutoff&lt;/td&gt;
&lt;td&gt;February 1, 2026&lt;/td&gt;
&lt;td&gt;Enable search only when current information is required&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The vendor's benchmark results are useful candidate evidence, not proof for your codebase. A model can score well on public software-engineering tasks and still fail your framework conventions, approval rules, or tool schemas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with one explicit API call
&lt;/h2&gt;

&lt;p&gt;Use an environment variable for the key and set reasoning effort rather than accepting the default silently:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://api.x.ai/v1/responses &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$XAI_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "grok-4.5",
    "reasoning": {"effort": "medium"},
    "input": "Inspect the supplied diff, identify the root cause, and propose the smallest testable fix."
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Grok 4.5 reasoning cannot be disabled. &lt;code&gt;low&lt;/code&gt; is intended for latency-sensitive agentic work and simple tool calls, &lt;code&gt;medium&lt;/code&gt; for more complex analysis, and &lt;code&gt;high&lt;/code&gt; for the hardest multi-step work. Also remove &lt;code&gt;presencePenalty&lt;/code&gt;, &lt;code&gt;frequencyPenalty&lt;/code&gt;, and &lt;code&gt;stop&lt;/code&gt; from requests to this reasoning model; the official docs say those fields cause an error.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build a seven-case coding eval
&lt;/h2&gt;

&lt;p&gt;Keep the repository, prompt, tool definitions, timeout, and verification commands identical across models. Use at least these cases:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Case&lt;/th&gt;
&lt;th&gt;Evidence to record&lt;/th&gt;
&lt;th&gt;Failure that should block rollout&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Single-file bug&lt;/td&gt;
&lt;td&gt;Correct patch, unit test, changed lines&lt;/td&gt;
&lt;td&gt;Plausible explanation with a failing test&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi-file feature&lt;/td&gt;
&lt;td&gt;Plan, touched files, integration test&lt;/td&gt;
&lt;td&gt;Unrequested architectural rewrite&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool-loop recovery&lt;/td&gt;
&lt;td&gt;Tool call IDs, results, retry count&lt;/td&gt;
&lt;td&gt;Repeating a failed tool without new evidence&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Instruction conflict&lt;/td&gt;
&lt;td&gt;Which rule won and why&lt;/td&gt;
&lt;td&gt;Ignoring repository or approval constraints&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Structured output&lt;/td&gt;
&lt;td&gt;Schema-valid result and parsed fields&lt;/td&gt;
&lt;td&gt;Invalid or invented tool arguments&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Large context&lt;/td&gt;
&lt;td&gt;Runs near 190k and 210k input tokens&lt;/td&gt;
&lt;td&gt;Quality collapse or unexplained cost jump&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Adversarial repository text&lt;/td&gt;
&lt;td&gt;Commands proposed versus approved&lt;/td&gt;
&lt;td&gt;Executing instructions found in untrusted files&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For each run, capture task success, deterministic test result, human edits required, tool-call count, invalid tool calls, elapsed time, input and cached-input tokens, reasoning and output tokens, and final cost. A lower price per token is not a win when the agent needs more turns or manual repair.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use a promotion gate, not a global switch
&lt;/h2&gt;

&lt;p&gt;Route Grok 4.5 into production only after it passes all three gates:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Correctness:&lt;/strong&gt; required build and tests pass on the final diff, not an earlier attempt.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent reliability:&lt;/strong&gt; tool arguments validate, approval boundaries hold, and loops terminate within the step budget.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Economics:&lt;/strong&gt; median cost and p95 latency fit the task class, including long-context and server-side tool charges.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A practical first policy is narrow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if task is bounded and prompt &amp;amp;lt; 200k:
  try grok-4.5 with explicit reasoning effort
  require deterministic checks
else:
  keep the current production route

promote only after 20-30 comparable tasks
rollback on test regression, invalid tool call, cost cap, or approval breach
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The exact task count is a sampling rule, not a guarantee. Prefer tasks that resemble paid user work, and retain failures in the eval set.&lt;/p&gt;

&lt;h2&gt;
  
  
  Budget the 200k boundary deliberately
&lt;/h2&gt;

&lt;p&gt;The pricing page says that once a prompt reaches the long-context threshold, long rates apply to every token in that request. That makes context selection part of routing, not merely prompt hygiene.&lt;/p&gt;

&lt;p&gt;Before sending a full repository snapshot:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;include the task, repository rules, relevant symbols, failing output, and nearby tests;&lt;/li&gt;
&lt;li&gt;retrieve additional files on demand through bounded tools;&lt;/li&gt;
&lt;li&gt;reuse stable prefixes so cached-input discounts can apply;&lt;/li&gt;
&lt;li&gt;compact completed tool history without deleting unresolved evidence;&lt;/li&gt;
&lt;li&gt;reject a request that exceeds its estimated dollar cap.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Track the provider's returned usage as the billing source of truth. Add separate allowances for server-side tools: the current pricing page lists web search, X search, and code execution at $5 per 1,000 calls. Custom function execution still happens in your harness, where you must enforce time, permission, and monetary limits.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common mistakes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Treating vendor SWE benchmarks as a repository acceptance test.&lt;/li&gt;
&lt;li&gt;Leaving reasoning at the default &lt;code&gt;high&lt;/code&gt; for every task and then comparing only answer quality.&lt;/li&gt;
&lt;li&gt;Testing at 20k tokens while production prompts regularly cross 200k.&lt;/li&gt;
&lt;li&gt;Assuming a 500k window means the whole repository should be sent every turn.&lt;/li&gt;
&lt;li&gt;Accepting syntactically valid tool arguments without authorization and semantic validation.&lt;/li&gt;
&lt;li&gt;Switching a global alias without recording the resolved model, usage, prompt version, and eval result.&lt;/li&gt;
&lt;li&gt;Letting an AI-generated patch bypass tests or human approval for material changes.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h3&gt;
  
  
  Is Grok 4.5 the same as Grok Build?
&lt;/h3&gt;

&lt;p&gt;No. Grok 4.5 is the model available through the API and products including Grok Build. Grok Build is the coding-agent harness and terminal interface. Keep model evaluation separate from harness evaluation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Should I use &lt;code&gt;low&lt;/code&gt;, &lt;code&gt;medium&lt;/code&gt;, or &lt;code&gt;high&lt;/code&gt; reasoning?
&lt;/h3&gt;

&lt;p&gt;Start with an explicit level tied to a task class. Test &lt;code&gt;low&lt;/code&gt; for small tool-driven jobs, &lt;code&gt;medium&lt;/code&gt; for ordinary repository work, and &lt;code&gt;high&lt;/code&gt; only where the extra reasoning improves deterministic outcomes enough to justify latency and tokens.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does the 500k context window cost the same throughout?
&lt;/h3&gt;

&lt;p&gt;No. The model supports 500k tokens, but the official pricing table applies higher rates once the prompt reaches 200k tokens. Test both sides of the boundary.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can Grok 4.5 replace CI or code review?
&lt;/h3&gt;

&lt;p&gt;No. Use the model to propose and inspect changes. Keep builds, tests, security checks, approval policy, and final merge authority outside the model.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;SpaceXAI announcement: Introducing Grok 4.5: &lt;a href="https://x.ai/news/grok-4-5" rel="noopener noreferrer"&gt;https://x.ai/news/grok-4-5&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;SpaceXAI model documentation: &lt;a href="https://docs.x.ai/developers/models/grok-4.5" rel="noopener noreferrer"&gt;https://docs.x.ai/developers/models/grok-4.5&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;SpaceXAI reasoning documentation: &lt;a href="https://docs.x.ai/developers/model-capabilities/text/reasoning" rel="noopener noreferrer"&gt;https://docs.x.ai/developers/model-capabilities/text/reasoning&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;SpaceXAI pricing: &lt;a href="https://docs.x.ai/developers/pricing" rel="noopener noreferrer"&gt;https://docs.x.ai/developers/pricing&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;SpaceXAI function-calling documentation: &lt;a href="https://docs.x.ai/developers/tools/function-calling" rel="noopener noreferrer"&gt;https://docs.x.ai/developers/tools/function-calling&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>agents</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
