<?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: Zira</title>
    <description>The latest articles on DEV Community by Zira (@zira125).</description>
    <link>https://dev.to/zira125</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%2F3821470%2Fe5f46063-a9b0-4a62-b149-0e284388c1ff.jpeg</url>
      <title>DEV Community: Zira</title>
      <link>https://dev.to/zira125</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/zira125"/>
    <language>en</language>
    <item>
      <title>Confidence Is Not Authorization: A Safer GitHub Issue-Automation Policy</title>
      <dc:creator>Zira</dc:creator>
      <pubDate>Tue, 28 Jul 2026 11:14:50 +0000</pubDate>
      <link>https://dev.to/zira125/confidence-is-not-authorization-a-safer-github-issue-automation-policy-4o01</link>
      <guid>https://dev.to/zira125/confidence-is-not-authorization-a-safer-github-issue-automation-policy-4o01</guid>
      <description>&lt;p&gt;GitHub's new issue automations can now label, type, assign, or close issues with a confidence level and a rationale. That sounds like a small UX improvement. It is actually a policy-design problem: a model's confidence is a guess about its own output, while authorization is a rule about what the system is allowed to change.&lt;/p&gt;

&lt;p&gt;If you let those concepts collapse into one threshold, you can build an automation that is easy to operate and hard to govern. This guide turns the preview into a reviewable policy: automate low-impact metadata only when the action is reversible, keep ambiguous changes in a suggestion queue, and put security-sensitive decisions behind a real control boundary.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Scope note:&lt;/strong&gt; GitHub describes rationale, confidence, and approvals as a public preview. The examples below are a policy template, not a claim that the preview is a security product.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What GitHub actually added
&lt;/h2&gt;

&lt;p&gt;GitHub's July 23 changelog describes three controls for supported issue actions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Approvals:&lt;/strong&gt; ask the automation to suggest a change instead of applying it immediately.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Confidence:&lt;/strong&gt; the agent labels an action high, medium, or low confidence. High-confidence changes can apply automatically; medium and low-confidence changes wait as suggestions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rationale:&lt;/strong&gt; each action records why it was proposed or applied.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The initial action set covers labels, fields, issue type, closing, and assignees. You can search for waiting items with &lt;code&gt;has:suggestions&lt;/code&gt;, and repository administrators can configure the automation level that sets the confidence threshold.&lt;/p&gt;

&lt;p&gt;The important limitation is in GitHub's own wording: &lt;strong&gt;approvals are a workflow convenience, not a security control&lt;/strong&gt;. If an agent has permission to change issues, it can apply changes directly instead of suggesting them. A review panel improves the workflow, but it does not replace permissions, branch protection, environment gates, or server-side authorization.&lt;/p&gt;

&lt;h2&gt;
  
  
  The policy mistake to avoid
&lt;/h2&gt;

&lt;p&gt;Here is the tempting rule:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if confidence == "high":
    apply_change()
else:
    ask_a_human()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That rule treats confidence as if it were permission. It is not. A high-confidence label can still be the wrong label, and a correctly classified issue can still be unsafe to close or assign. The risk is not only model error. It is also stale repository policy, ambiguous ownership, duplicate reports, and a permission that is broader than the workflow author intended.&lt;/p&gt;

&lt;p&gt;A safer decision has at least four inputs:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Action impact:&lt;/strong&gt; what happens if the change is wrong?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evidence quality:&lt;/strong&gt; what facts support the action, and are they still current?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reversibility:&lt;/strong&gt; can a maintainer undo it without losing information or hiding work?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authority:&lt;/strong&gt; is this actor and this workflow actually allowed to perform the action?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Confidence can help rank work inside that decision. It should not make the authority decision for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical triage matrix
&lt;/h2&gt;

&lt;p&gt;Use a policy like this as a starting point, then tune it against false positives from your own issue tracker:&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;Default mode&lt;/th&gt;
&lt;th&gt;Minimum evidence&lt;/th&gt;
&lt;th&gt;Human review&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Add a non-sensitive topic label&lt;/td&gt;
&lt;td&gt;Suggest, or auto-apply in a bounded repo&lt;/td&gt;
&lt;td&gt;Explicit matching rule plus current issue text&lt;/td&gt;
&lt;td&gt;Sample audits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Set issue type or project field&lt;/td&gt;
&lt;td&gt;Suggest&lt;/td&gt;
&lt;td&gt;Rationale plus field ownership rule&lt;/td&gt;
&lt;td&gt;Yes for ambiguous cases&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Assign to a team or agent&lt;/td&gt;
&lt;td&gt;Suggest&lt;/td&gt;
&lt;td&gt;Current ownership map and matching component&lt;/td&gt;
&lt;td&gt;Yes unless ownership is deterministic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Close an issue&lt;/td&gt;
&lt;td&gt;Suggest&lt;/td&gt;
&lt;td&gt;Duplicate or resolution evidence, with a reopen path&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Apply a security, legal, or escalation label&lt;/td&gt;
&lt;td&gt;Suggest&lt;/td&gt;
&lt;td&gt;Evidence from a trusted system, not prose alone&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The matrix deliberately treats “close” and “assign” differently from a harmless topic label. The model may be very sure about its classification and still lack the authority or context to make the consequential change.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configure the workflow around intent, not just output
&lt;/h2&gt;

&lt;p&gt;For GitHub Agentic Workflows, the changelog documents &lt;code&gt;issue-intents: true&lt;/code&gt; for supported safe outputs such as &lt;code&gt;set-issue-type&lt;/code&gt;, &lt;code&gt;set-issue-field&lt;/code&gt;, &lt;code&gt;add-labels&lt;/code&gt;, &lt;code&gt;close-issue&lt;/code&gt;, &lt;code&gt;assign-to-agent&lt;/code&gt;, and &lt;code&gt;assign-to-user&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;A minimal policy sketch could look like this:&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="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Triage incoming issues&lt;/span&gt;
&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;issues&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;types&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;opened&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;edited&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;span class="na"&gt;permissions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;issues&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;write&lt;/span&gt;
&lt;span class="na"&gt;issue-intents&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;

&lt;span class="c1"&gt;# Keep the model's proposed action narrow.&lt;/span&gt;
&lt;span class="c1"&gt;# Require a rationale that names the evidence it used.&lt;/span&gt;
&lt;span class="c1"&gt;# Prefer a suggestion for assignment, closure, or escalation.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is not a complete security boundary. The &lt;code&gt;issues: write&lt;/code&gt; permission is still consequential, and the policy comments are not enforcement. Treat the workflow as an orchestrator whose permissions and repository settings need independent review.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make suggestions auditable
&lt;/h2&gt;

&lt;p&gt;For every applied or suggested action, retain a small record with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;issue number and repository;&lt;/li&gt;
&lt;li&gt;action, old value, and proposed value;&lt;/li&gt;
&lt;li&gt;confidence level;&lt;/li&gt;
&lt;li&gt;rationale and the evidence fields used;&lt;/li&gt;
&lt;li&gt;workflow version and model/tool version when available;&lt;/li&gt;
&lt;li&gt;actor permissions at execution time;&lt;/li&gt;
&lt;li&gt;reviewer decision, timestamp, and any correction.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Rationale is useful only if it can be compared with the action. “This looks like a bug” is not enough for an assignment or closure. A stronger record names the signal, for example: “The issue mentions &lt;code&gt;payments/checkout&lt;/code&gt;, the component map maps that path to Payments, and the current owner is team-payments.” Even then, the record is evidence for review, not proof that the change was authorized.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test the policy with a replay set
&lt;/h2&gt;

&lt;p&gt;Before changing the confidence threshold, create a small labeled set from real issues. Keep the set representative rather than enormous:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;issue_id,expected_action,expected_value,review_required
101,add-label,bug,false
102,assign-team,payments,true
103,no-change,,true
104,close-duplicate,101,true
105,add-label,security,true
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replay it after changing the prompt, workflow, model, label taxonomy, or ownership map. Track separate outcomes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;action precision:&lt;/strong&gt; when the automation acted, how often was the action correct?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;action recall:&lt;/strong&gt; how often did it find actions that should have happened?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;abstention quality:&lt;/strong&gt; when it suggested or skipped, did it avoid a costly mistake?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;review load:&lt;/strong&gt; how many suggestions were actionable versus noise?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;reversal rate:&lt;/strong&gt; how often did maintainers undo an applied change?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do not optimize only for the percentage of issues processed automatically. A lower automation rate can be the better result if it removes dangerous false positives and keeps review focused on high-impact work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Failure modes worth adding to the test set
&lt;/h2&gt;

&lt;p&gt;Include cases that exercise the policy, not only the happy path:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a stale component-to-owner mapping;&lt;/li&gt;
&lt;li&gt;a duplicate issue whose “canonical” issue was already closed;&lt;/li&gt;
&lt;li&gt;a prompt injection in an issue body or pasted log;&lt;/li&gt;
&lt;li&gt;a high-confidence classification with a missing required field;&lt;/li&gt;
&lt;li&gt;a low-confidence suggestion that would be harmless to apply;&lt;/li&gt;
&lt;li&gt;a security label inferred from an untrusted user claim;&lt;/li&gt;
&lt;li&gt;an issue that changes meaning after an edit;&lt;/li&gt;
&lt;li&gt;a workflow with write permission that should have been read-only.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For high-impact actions, test the permission boundary separately. An approval panel is not a substitute for verifying that a workflow cannot perform an action outside its intended scope.&lt;/p&gt;

&lt;h2&gt;
  
  
  A short rollout plan
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Start in suggestion mode.&lt;/strong&gt; Use &lt;code&gt;has:suggestions&lt;/code&gt; to build a review queue and inspect rationales.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Measure reversals and review cost.&lt;/strong&gt; Do not raise the threshold because the queue feels busy; inspect which suggestions are actually safe.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automate only reversible metadata first.&lt;/strong&gt; Keep closure, assignment, escalation, and security labels in review until the evidence and authority rules are stable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Separate policy from prompt text.&lt;/strong&gt; Store ownership, allowed labels, and action boundaries in versioned configuration or code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Re-test after every taxonomy or permission change.&lt;/strong&gt; A label rename or team change can invalidate an apparently good automation.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Confidence is treated as a ranking signal, not authorization.&lt;/li&gt;
&lt;li&gt;[ ] Each action has an explicit impact and reversibility class.&lt;/li&gt;
&lt;li&gt;[ ] The workflow permission is narrower than the broadest possible agent capability.&lt;/li&gt;
&lt;li&gt;[ ] Suggestions and applied actions retain rationale and evidence.&lt;/li&gt;
&lt;li&gt;[ ] Closure and assignment have a review path and a rollback path.&lt;/li&gt;
&lt;li&gt;[ ] Prompt-injection, stale-data, and missing-context cases are in the replay set.&lt;/li&gt;
&lt;li&gt;[ ] Threshold changes are evaluated against precision, recall, abstention, review load, and reversals.&lt;/li&gt;
&lt;li&gt;[ ] A human reviews the policy itself, not only individual suggestions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;GitHub's preview makes issue automation easier to inspect, which is valuable. The safe interpretation is not “the agent is confident, so let it act.” It is “the agent produced a proposal with evidence; now apply the repository's policy for impact, authority, and review.”&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 in public preview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.github.com/en/copilot/concepts/agents/cloud-agent/about-automation-rationale-and-approvals" rel="noopener noreferrer"&gt;GitHub Docs: About rationale, confidence, and approvals for issues&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.github.com/en/actions/concepts/ai/agentic-workflows" rel="noopener noreferrer"&gt;GitHub Docs: About GitHub Agentic Workflows&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;How are you separating model confidence from actual authorization in your issue or repository automations?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>agents</category>
      <category>git</category>
    </item>
    <item>
      <title>The Security Fix Is Not Done When the Agent Writes the Patch</title>
      <dc:creator>Zira</dc:creator>
      <pubDate>Mon, 27 Jul 2026 20:57:46 +0000</pubDate>
      <link>https://dev.to/zira125/the-security-fix-is-not-done-when-the-agent-writes-the-patch-1gnc</link>
      <guid>https://dev.to/zira125/the-security-fix-is-not-done-when-the-agent-writes-the-patch-1gnc</guid>
      <description>&lt;p&gt;A security agent can close the scanner alert and still leave your security process weaker.&lt;/p&gt;

&lt;p&gt;That is the uncomfortable shift in GitHub's new &lt;strong&gt;agentic autofix&lt;/strong&gt; preview: the system does not only suggest a patch. It explores the repository, edits code, reruns the original analysis, iterates if needed, and opens a draft pull request.&lt;/p&gt;

&lt;p&gt;That loop is useful. It is also where teams need to move their definition of “verified.” A clean CodeQL result answers one question: &lt;em&gt;does the original query still report this alert?&lt;/em&gt; It does not prove that the behavior is correct, the exploit is impossible, or that the change did not break a neighboring path.&lt;/p&gt;

&lt;p&gt;This is the review workflow I would put around it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the preview actually does
&lt;/h2&gt;

&lt;p&gt;GitHub says agentic autofix works with CodeQL and third-party code-scanning alerts. Assigning an alert to Copilot starts an agent session that:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;explores relevant files across the codebase;&lt;/li&gt;
&lt;li&gt;proposes a fix;&lt;/li&gt;
&lt;li&gt;reruns CodeQL to validate that the alert is closed;&lt;/li&gt;
&lt;li&gt;iterates if necessary; and&lt;/li&gt;
&lt;li&gt;opens a draft pull request with a summary and validation steps.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The feature is in public preview. It requires GitHub Code Security or Advanced Security plus a Copilot license with cloud agent enabled. A run consumes AI Credits and GitHub Actions minutes.&lt;/p&gt;

&lt;p&gt;Those constraints matter. This is not a free “fix everything” button, and it is not a replacement for a security review.&lt;/p&gt;

&lt;p&gt;Source: &lt;a href="https://github.blog/changelog/2026-07-10-agentic-autofix-for-code-scanning-alerts-in-public-preview/" rel="noopener noreferrer"&gt;GitHub Changelog: Agentic autofix for code scanning alerts&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Treat scanner revalidation as the first gate
&lt;/h2&gt;

&lt;p&gt;The automatic CodeQL rerun is valuable because it closes the loop on the alert that triggered the work. Keep that result, but store it as evidence for one specific claim:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The original scanner condition was no longer detected at the time of validation.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Do not silently promote that into “the vulnerability is fixed.” A patch can suppress a data-flow path, change the input shape, or move the behavior somewhere the original query does not cover.&lt;/p&gt;

&lt;p&gt;A useful draft PR should make the evidence visible:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;alert rule and severity;&lt;/li&gt;
&lt;li&gt;original location and changed files;&lt;/li&gt;
&lt;li&gt;CodeQL result before and after;&lt;/li&gt;
&lt;li&gt;tests added or changed;&lt;/li&gt;
&lt;li&gt;dependencies and configuration touched;&lt;/li&gt;
&lt;li&gt;remaining assumptions or unvalidated paths.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the PR does not contain that context, the reviewer has to reconstruct the agent's reasoning from logs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Add a behavioral test that the scanner cannot provide
&lt;/h2&gt;

&lt;p&gt;Code scanning is a static signal. Pair it with a test of the security property.&lt;/p&gt;

&lt;p&gt;For example, if an alert concerns path traversal, test the boundary rather than only the implementation detail:&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;pathlib&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Path&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;safe_read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;user_path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;base&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;candidate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;base&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;user_path&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;base&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;candidate&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parents&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;candidate&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;ValueError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;path escapes workspace&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;candidate&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read_bytes&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important tests are not just “a normal file can be read.” They include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;../ traversal;&lt;/li&gt;
&lt;li&gt;absolute paths;&lt;/li&gt;
&lt;li&gt;symlink escapes;&lt;/li&gt;
&lt;li&gt;encoded separators if input crosses a URL boundary;&lt;/li&gt;
&lt;li&gt;a missing file and a permission failure.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The exact cases depend on the alert. The principle is stable: the agent should fix the reported condition, while your tests assert the intended behavior at the trust boundary.&lt;/p&gt;

&lt;h2&gt;
  
  
  Review the patch as an agent-generated change
&lt;/h2&gt;

&lt;p&gt;A draft PR is a good human checkpoint, but only if the reviewer looks beyond the diff.&lt;/p&gt;

&lt;p&gt;I would ask four questions:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Did the fix reduce capability or merely hide a path?
&lt;/h3&gt;

&lt;p&gt;A security patch should usually narrow what an input, identity, or tool can do. If it only changes a query shape, adds a suppression, or catches an exception broadly, the review needs to stop.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Did the agent change authorization or destination logic?
&lt;/h3&gt;

&lt;p&gt;Changes to permission checks, URL construction, filesystem roots, shell commands, package installation, and serialization deserve focused review. These are places where a “small” patch can alter the reachable behavior of the whole service.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. What did the agent not test?
&lt;/h3&gt;

&lt;p&gt;Read the validation summary as a boundary, not a guarantee. “CodeQL passed” is not the same as “integration tests passed,” and neither is the same as exploitability review.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Can the result be reproduced?
&lt;/h3&gt;

&lt;p&gt;Keep the alert identifier, agent session or run link, commit, tool output, and test commands. If the patch cannot be explained and replayed, it is difficult to audit later.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical merge policy
&lt;/h2&gt;

&lt;p&gt;For high-severity or externally reachable findings, I would use this sequence:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;alert assigned
  -&amp;gt; agent opens draft PR
  -&amp;gt; scanner reruns successfully
  -&amp;gt; focused behavioral test passes
  -&amp;gt; dependency/config diff reviewed
  -&amp;gt; exploitability and regression review completed
  -&amp;gt; human approves
  -&amp;gt; merge with normal CI and deployment controls
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For lower-risk findings, some steps can be lighter. The policy should still be explicit. “The agent verified it” is not a policy.&lt;/p&gt;

&lt;p&gt;Also set a budget before experimenting. GitHub says agentic autofix consumes AI Credits when a fix runs, and the activity consumes Actions minutes. Batch only alerts that share a clear review strategy. A large pile of unrelated draft PRs can increase review debt faster than it reduces vulnerability debt.&lt;/p&gt;

&lt;h2&gt;
  
  
  The useful mental model
&lt;/h2&gt;

&lt;p&gt;Agentic autofix is best understood as a patch-producing loop with one built-in oracle: the original scanner. That is a meaningful improvement over a one-shot suggestion, but it is still only one oracle.&lt;/p&gt;

&lt;p&gt;The safest workflow combines three independent questions:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Question&lt;/th&gt;
&lt;th&gt;Evidence&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Did the original alert close?&lt;/td&gt;
&lt;td&gt;Scanner rerun&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Does the intended security property hold?&lt;/td&gt;
&lt;td&gt;Focused behavioral tests&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Is the change safe in this system?&lt;/td&gt;
&lt;td&gt;Human review, integration tests, and threat context&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If those answers disagree, the patch is not ready.&lt;/p&gt;

&lt;p&gt;GitHub's preview makes security remediation more executable. The engineering challenge is making the evidence more executable too.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How are you reviewing AI-generated security fixes today: scanner reruns only, focused exploit tests, or a stricter draft-PR policy?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>github</category>
      <category>security</category>
      <category>ai</category>
      <category>agents</category>
    </item>
    <item>
      <title>Grok Build Is Open Source. The Useful Part Is the Harness</title>
      <dc:creator>Zira</dc:creator>
      <pubDate>Mon, 27 Jul 2026 11:54:52 +0000</pubDate>
      <link>https://dev.to/zira125/grok-build-is-open-source-the-useful-part-is-the-harness-2h6a</link>
      <guid>https://dev.to/zira125/grok-build-is-open-source-the-useful-part-is-the-harness-2h6a</guid>
      <description>&lt;p&gt;xAI has open-sourced Grok Build, its coding agent and terminal UI. The interesting part is not that another coding tool appeared on GitHub.&lt;/p&gt;

&lt;p&gt;It is that the release makes the &lt;strong&gt;harness&lt;/strong&gt; inspectable: context assembly, tool dispatch, code editing, command execution, plan review, diffs, skills, plugins, hooks, MCP servers, and subagents.&lt;/p&gt;

&lt;p&gt;That changes the question from “Which model does this agent use?” to:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Can I inspect, constrain, and test the system that turns model output into repository changes?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is a more useful question for anyone running coding agents against real code.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the release actually exposes
&lt;/h2&gt;

&lt;p&gt;According to xAI’s announcement, the published source includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the agent loop and context assembly&lt;/li&gt;
&lt;li&gt;parsing model responses and dispatching tool calls&lt;/li&gt;
&lt;li&gt;tools for reading, editing, and searching code&lt;/li&gt;
&lt;li&gt;command execution&lt;/li&gt;
&lt;li&gt;a terminal UI with plan review and inline diffs&lt;/li&gt;
&lt;li&gt;an extension system for skills, plugins, hooks, MCP servers, and subagents&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;xAI also says Grok Build can run &lt;strong&gt;local-first&lt;/strong&gt;: compile it yourself, point it at local inference, and configure it through the &lt;code&gt;config.toml&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;That does not automatically make a deployment private or safe. It does give engineers something valuable: a codebase they can inspect instead of a black-box permission surface.&lt;/p&gt;

&lt;p&gt;Repository: &lt;a href="https://github.com/xai-org/grok-build" rel="noopener noreferrer"&gt;https://github.com/xai-org/grok-build&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with the harness, not the model
&lt;/h2&gt;

&lt;p&gt;When evaluating an open coding agent, I would inspect these paths before comparing model quality:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Context assembly
&lt;/h3&gt;

&lt;p&gt;What files, command output, history, and instructions enter the prompt? Look for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;repository-wide files that are always included&lt;/li&gt;
&lt;li&gt;generated or untrusted text that is treated as instructions&lt;/li&gt;
&lt;li&gt;secrets or environment values that can enter context&lt;/li&gt;
&lt;li&gt;truncation and compaction behavior&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A model can be excellent and still make poor changes if the context builder silently mixes source code with untrusted instructions.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Tool dispatch
&lt;/h3&gt;

&lt;p&gt;Trace the boundary between a model-produced tool call and the actual process that runs it.&lt;/p&gt;

&lt;p&gt;Questions worth answering from the source:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Are tool arguments schema-validated before execution?&lt;/li&gt;
&lt;li&gt;Is the working directory explicit?&lt;/li&gt;
&lt;li&gt;Are shell commands allowlisted, denied, or merely confirmed in the UI?&lt;/li&gt;
&lt;li&gt;Does the agent distinguish read-only, mutating, and network-capable tools?&lt;/li&gt;
&lt;li&gt;What happens when a tool times out or returns malformed output?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The important artifact is not the chat transcript. It is the tool-call ledger: tool name, normalized arguments, cwd, exit status, files changed, and approval decision.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Review and commit boundaries
&lt;/h3&gt;

&lt;p&gt;A plan view and inline diff are useful, but they are not the same as a security boundary.&lt;/p&gt;

&lt;p&gt;Before letting an agent work in a valuable repository, I would require:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;a clean working tree or disposable branch&lt;/li&gt;
&lt;li&gt;a visible plan&lt;/li&gt;
&lt;li&gt;a diff review before commit&lt;/li&gt;
&lt;li&gt;tests and static checks after the final tool call&lt;/li&gt;
&lt;li&gt;an explicit human decision before push, merge, or deployment&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The last step matters because a harmless-looking code edit can still alter CI, release scripts, credentials, or dependency resolution.&lt;/p&gt;

&lt;h2&gt;
  
  
  A small local-first preflight
&lt;/h2&gt;

&lt;p&gt;This is the kind of preflight I would run around any source-available coding agent. It keeps the agent useful while making its blast radius observable:&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="c"&gt;# Start from a disposable checkout&lt;/span&gt;
&lt;span class="nv"&gt;worktree&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;git worktree add &lt;span class="nt"&gt;--detach&lt;/span&gt; ../agent-checkout HEAD | &lt;span class="nb"&gt;tail&lt;/span&gt; &lt;span class="nt"&gt;-1&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$worktree&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="c"&gt;# Record the baseline before the agent starts&lt;/span&gt;
git status &lt;span class="nt"&gt;--short&lt;/span&gt;
&lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s1"&gt;'commit=%s\n'&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;git rev-parse HEAD&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="c"&gt;# Run the agent with the narrowest repository permissions available.&lt;/span&gt;
&lt;span class="c"&gt;# Review the exact config.toml fields for your build and provider.&lt;/span&gt;
&lt;span class="c"&gt;# Do not paste secrets into the repository or prompt.&lt;/span&gt;

&lt;span class="c"&gt;# After the run, inspect every changed path&lt;/span&gt;
git diff &lt;span class="nt"&gt;--stat&lt;/span&gt;
git diff &lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="s1"&gt;':!*.lock'&lt;/span&gt;

&lt;span class="c"&gt;# Re-run the repository's checks before accepting anything&lt;/span&gt;
npm &lt;span class="nb"&gt;test&lt;/span&gt;  &lt;span class="c"&gt;# replace with the project's actual checks&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The command is intentionally boring. The point is to make isolation, baseline state, changed files, and verification routine rather than relying on a reassuring UI.&lt;/p&gt;

&lt;h2&gt;
  
  
  What local-first does and does not solve
&lt;/h2&gt;

&lt;p&gt;Running the harness and inference locally can reduce the number of repository contents sent to a hosted service. It does not answer every data-handling question.&lt;/p&gt;

&lt;p&gt;You still need to inspect:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MCP server endpoints and their authorization&lt;/li&gt;
&lt;li&gt;plugins and hooks that make network requests&lt;/li&gt;
&lt;li&gt;telemetry and error-reporting paths&lt;/li&gt;
&lt;li&gt;shell commands with access outside the checkout&lt;/li&gt;
&lt;li&gt;model files and runtime dependencies&lt;/li&gt;
&lt;li&gt;logs that may contain source code or credentials&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Local compilation is a deployment option, not a threat model.&lt;/p&gt;

&lt;p&gt;There is also a practical tradeoff: source inspection and local inference can increase operational work. Teams now own provider configuration, upgrades, model serving, extension review, and incident debugging. That can be worthwhile for sensitive repositories, but it is not free.&lt;/p&gt;

&lt;h2&gt;
  
  
  A useful evaluation scorecard
&lt;/h2&gt;

&lt;p&gt;Instead of asking whether Grok Build “feels smart,” measure the harness:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Evidence to collect&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Context quality&lt;/td&gt;
&lt;td&gt;Files and instructions included per task&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool safety&lt;/td&gt;
&lt;td&gt;Allowed tools, approvals, cwd, network access&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Change quality&lt;/td&gt;
&lt;td&gt;Tests passed, files changed, review corrections&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Recovery&lt;/td&gt;
&lt;td&gt;Behavior after timeout, bad arguments, or failed tests&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reproducibility&lt;/td&gt;
&lt;td&gt;Same task on a clean checkout with the same config&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost and latency&lt;/td&gt;
&lt;td&gt;Model calls, tool calls, wall-clock time&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Keep model capability and harness behavior as separate columns. Otherwise, a strong model can hide weak controls, or a careful harness can be blamed for a task it was never given enough context to solve.&lt;/p&gt;

&lt;h2&gt;
  
  
  The takeaway
&lt;/h2&gt;

&lt;p&gt;Open-sourcing a coding agent is most valuable when it lets engineers examine the path from context to action. Grok Build gives developers a concrete harness to study, extend, and run local-first.&lt;/p&gt;

&lt;p&gt;I would not treat that as proof that it is production-ready. I would treat it as an invitation to perform the checks that black-box agents make difficult: inspect tool boundaries, test failure paths, review extensions, and measure the actual change surface.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you could inspect one part of a coding-agent harness before trusting it with a production repository, would you choose context assembly, shell/tool permissions, extension loading, or telemetry? Why?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;xAI, “Grok Build Is Now Open Source”: &lt;a href="https://x.ai/news/grok-build-open-source" rel="noopener noreferrer"&gt;https://x.ai/news/grok-build-open-source&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Grok Build repository: &lt;a href="https://github.com/xai-org/grok-build" rel="noopener noreferrer"&gt;https://github.com/xai-org/grok-build&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>security</category>
      <category>ai</category>
      <category>agents</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Your Coding Agent Needs a Code Brain, Not More Context</title>
      <dc:creator>Zira</dc:creator>
      <pubDate>Mon, 27 Jul 2026 05:47:19 +0000</pubDate>
      <link>https://dev.to/zira125/your-coding-agent-needs-a-code-brain-not-more-context-15bo</link>
      <guid>https://dev.to/zira125/your-coding-agent-needs-a-code-brain-not-more-context-15bo</guid>
      <description>&lt;h1&gt;
  
  
  Your Coding Agent Needs a Code Brain, Not More Context
&lt;/h1&gt;

&lt;p&gt;Most coding-agent failures do not begin with a weak model. They begin with missing repository context.&lt;/p&gt;

&lt;p&gt;The agent cannot find the architectural decision that explains a strange abstraction. It misses the convention hidden in an old package. It reads the same files again because nobody turned yesterday's discovery into reusable project knowledge.&lt;/p&gt;

&lt;p&gt;LangChain's open-source &lt;a href="https://github.com/langchain-ai/openwiki" rel="noopener noreferrer"&gt;OpenWiki&lt;/a&gt; takes a useful, deliberately boring approach: generate a local Markdown wiki for a repository, keep it updated, and teach coding agents to consult it before exploring the codebase from scratch.&lt;/p&gt;

&lt;p&gt;That is not magic memory. It is a maintained context artifact. For many teams, that distinction is the point.&lt;/p&gt;

&lt;h2&gt;
  
  
  What OpenWiki actually changes
&lt;/h2&gt;

&lt;p&gt;OpenWiki has a &lt;strong&gt;Code Brain&lt;/strong&gt; mode for a repository. Its CLI can initialize and update documentation in an &lt;em&gt;openwiki/&lt;/em&gt; directory. The project also maintains &lt;em&gt;AGENTS.md&lt;/em&gt; and &lt;em&gt;CLAUDE.md&lt;/em&gt; at the repository root so compatible coding agents are instructed to use the wiki when looking for context.&lt;/p&gt;

&lt;p&gt;The important design choice is that the memory is inspectable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Markdown files live with the project rather than inside an opaque vector database.&lt;/li&gt;
&lt;li&gt;Changes can be reviewed as a pull request.&lt;/li&gt;
&lt;li&gt;The wiki can be regenerated when the repository changes.&lt;/li&gt;
&lt;li&gt;The agent gets a stable map of the codebase before it starts making edits.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The tradeoff is equally important: generated documentation can become stale or confidently wrong. A code brain is only useful if its update path is part of the engineering workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  A small workflow that is safe to try
&lt;/h2&gt;

&lt;p&gt;Start with a branch, not your main checkout:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git switch -c chore/openwiki-refresh
openwiki --init
openwiki --update
git diff -- openwiki AGENTS.md CLAUDE.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Read the diff as if it came from a junior engineer. Look for:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Commands or deployment details that should not be documented publicly.&lt;/li&gt;
&lt;li&gt;Claims that are not supported by the current source tree.&lt;/li&gt;
&lt;li&gt;Missing boundaries between generated files and human-owned guidance.&lt;/li&gt;
&lt;li&gt;Instructions that could cause an agent to run destructive commands.&lt;/li&gt;
&lt;li&gt;Large or noisy pages that will cost more context than they save.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If the result is useful, commit it and add an update job. The repository README shows a CI workflow pattern that can open a pull request when the documentation changes. Keep that PR reviewable. Do not silently merge generated architectural claims.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make the agent use the wiki intentionally
&lt;/h2&gt;

&lt;p&gt;A generated file does not automatically improve every agent. Make the contract explicit in the repository guidance:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Agent context

Before changing code:

1. Read the relevant page under openwiki/.
2. Verify its claims against the current source files.
3. Treat source code and tests as authoritative when they disagree.
4. Update the wiki in a separate change when the architecture changes.
5. Never copy secrets, tokens, or private customer data into documentation.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This turns the wiki into a starting map, not an oracle. The agent still has to inspect the implementation and run tests.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to measure after adding a code brain
&lt;/h2&gt;

&lt;p&gt;Do not measure success by the number of generated pages. Measure the workflow:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Signal&lt;/th&gt;
&lt;th&gt;What it tells you&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Time to first correct file change&lt;/td&gt;
&lt;td&gt;Whether the map improves navigation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Repeated file reads per task&lt;/td&gt;
&lt;td&gt;Whether the agent is rediscovering the same context&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Invalid tool calls&lt;/td&gt;
&lt;td&gt;Whether instructions are clear enough&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Review corrections about architecture&lt;/td&gt;
&lt;td&gt;Whether the wiki is misleading&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Task success and repair count&lt;/td&gt;
&lt;td&gt;Whether the workflow is actually more reliable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Documentation refresh diff size&lt;/td&gt;
&lt;td&gt;Whether updates are stable or noisy&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Use the same small task set before and after adoption. Keep model, prompt, repository revision, and acceptance checks as constant as practical. A lower token count or shorter trace is not proof of higher developer productivity; it may just mean the agent skipped necessary verification.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where this pattern fits
&lt;/h2&gt;

&lt;p&gt;A code brain is most promising when a repository has:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;multiple services or packages;&lt;/li&gt;
&lt;li&gt;conventions that are hard to infer from one file;&lt;/li&gt;
&lt;li&gt;recurring onboarding or maintenance tasks;&lt;/li&gt;
&lt;li&gt;an agent that repeatedly explores the same architecture;&lt;/li&gt;
&lt;li&gt;a team willing to review generated documentation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is less attractive for a tiny project whose README and tests already explain the system. It also does not solve authorization, sandboxing, prompt injection, flaky tests, or poor task specifications. Those remain separate controls.&lt;/p&gt;

&lt;h2&gt;
  
  
  The practical checklist
&lt;/h2&gt;

&lt;p&gt;Before putting generated agent context into a shared repository, ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is every page traceable to files, tests, or approved human notes?&lt;/li&gt;
&lt;li&gt;Who owns stale-page cleanup?&lt;/li&gt;
&lt;li&gt;Does CI open a reviewable PR instead of changing main silently?&lt;/li&gt;
&lt;li&gt;Are secrets and sensitive source excerpts excluded?&lt;/li&gt;
&lt;li&gt;Does the agent have a fallback when the wiki conflicts with code?&lt;/li&gt;
&lt;li&gt;Can a developer delete or correct a page without fighting the generator?&lt;/li&gt;
&lt;li&gt;Are task outcomes measured separately from context retrieval?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;OpenWiki's interesting bet is not that agents need an infinite memory. It is that they need a compact, local, reviewable map of the software they are about to change.&lt;/p&gt;

&lt;p&gt;That is a much easier capability to govern than “remember everything.”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Would you trust a generated openwiki/ directory in a production repository, or would you keep agent context in a separate, human-maintained handbook? What review rule would you require?&lt;/strong&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/langchain-ai/openwiki" rel="noopener noreferrer"&gt;OpenWiki repository and CLI documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.langchain.com/blog/introducing-openwiki-brains-general-purpose-wiki-memory-for-agents" rel="noopener noreferrer"&gt;LangChain: OpenWiki Brains, proactive memory for AI agents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.langchain.com/blog/july-2026-langchain-newsletter" rel="noopener noreferrer"&gt;LangChain July 2026 newsletter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>tutorial</category>
      <category>ai</category>
      <category>agents</category>
      <category>opensource</category>
    </item>
    <item>
      <title>MCP 2026-07-28: A Migration Checklist for Stateless Servers and Safer Agent Tools</title>
      <dc:creator>Zira</dc:creator>
      <pubDate>Sat, 25 Jul 2026 14:41:24 +0000</pubDate>
      <link>https://dev.to/zira125/mcp-2026-07-28-a-migration-checklist-for-stateless-servers-and-safer-agent-tools-1kce</link>
      <guid>https://dev.to/zira125/mcp-2026-07-28-a-migration-checklist-for-stateless-servers-and-safer-agent-tools-1kce</guid>
      <description>&lt;p&gt;The next MCP specification is not a routine version bump. The 2026-07-28 release candidate removes the protocol-level session, adds first-class extensions and tasks, formalizes caching and trace context, and tightens the lifecycle for deprecated features.&lt;/p&gt;

&lt;p&gt;The final specification is scheduled for &lt;strong&gt;July 28, 2026&lt;/strong&gt;. If you maintain an MCP client, server, gateway, or coding-agent integration, the useful question is not “when do I upgrade?” It is “which assumptions in my stack are about to become invalid?”&lt;/p&gt;

&lt;p&gt;This is a practical migration checklist based on the official release candidate, not a claim that every SDK has already adopted it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changes in the release candidate
&lt;/h2&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;Before&lt;/th&gt;
&lt;th&gt;2026-07-28 direction&lt;/th&gt;
&lt;th&gt;Why it matters&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Protocol lifecycle&lt;/td&gt;
&lt;td&gt;Initialize/initialized handshake and session ID&lt;/td&gt;
&lt;td&gt;Stateless request model&lt;/td&gt;
&lt;td&gt;Easier horizontal scaling, fewer sticky-session assumptions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HTTP routing&lt;/td&gt;
&lt;td&gt;Gateways often need body-aware routing or session affinity&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;td&gt;Route and observe operations at the edge&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Results&lt;/td&gt;
&lt;td&gt;Limited cache semantics&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;ttlMs&lt;/code&gt; and &lt;code&gt;cacheScope&lt;/code&gt; for list/resource reads&lt;/td&gt;
&lt;td&gt;Make freshness an explicit product decision&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Observability&lt;/td&gt;
&lt;td&gt;Trace propagation varied by implementation&lt;/td&gt;
&lt;td&gt;W3C Trace Context in &lt;code&gt;_meta&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Correlate model, gateway, tool, and backend work&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Composition&lt;/td&gt;
&lt;td&gt;Extensions were mostly experimental&lt;/td&gt;
&lt;td&gt;Negotiated, independently versioned extensions&lt;/td&gt;
&lt;td&gt;Add capabilities without coupling every change to the core spec&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Long-running work&lt;/td&gt;
&lt;td&gt;Request/response was the dominant shape&lt;/td&gt;
&lt;td&gt;Tasks and multi-round-trip patterns&lt;/td&gt;
&lt;td&gt;Model asynchronous work explicitly&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The candidate is still a release candidate. Treat the final specification and your SDK’s support matrix as the compatibility authority.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Remove accidental session state
&lt;/h2&gt;

&lt;p&gt;The biggest operational change is the removal of the protocol-level session and the &lt;code&gt;Mcp-Session-Id&lt;/code&gt; header. A remote server should no longer depend on a request returning to the same process because a prior MCP handshake happened there.&lt;/p&gt;

&lt;p&gt;That does &lt;strong&gt;not&lt;/strong&gt; mean your application cannot have state. It means application state must be explicit rather than hidden inside the protocol connection.&lt;/p&gt;

&lt;p&gt;Audit for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;in-memory maps keyed only by session ID;&lt;/li&gt;
&lt;li&gt;sticky-session requirements in the load balancer;&lt;/li&gt;
&lt;li&gt;initialization code that populates process-local capabilities;&lt;/li&gt;
&lt;li&gt;connection cleanup that is doing business-state cleanup;&lt;/li&gt;
&lt;li&gt;tests that send a handshake once and reuse an implicit server session.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A safer shape is to make the request carry the identity your application actually needs:&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;dataclasses&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;dataclass&lt;/span&gt;

&lt;span class="nd"&gt;@dataclass&lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;AgentContext&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;tenant_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;
    &lt;span class="n"&gt;run_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;
    &lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;authorize_tool_call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;AgentContext&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tool_name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;policy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;check&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tenant&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tenant_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tool&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;tool_name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Keep this context in your auth layer, task store, or trace system. Do not recreate protocol session affinity under a new name.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Make the gateway boring
&lt;/h2&gt;

&lt;p&gt;Stateless MCP is valuable only if the edge can treat requests as ordinary routable traffic. Before changing the load balancer, test that every instance can handle:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;a fresh request;&lt;/li&gt;
&lt;li&gt;a request after another instance handled the previous request;&lt;/li&gt;
&lt;li&gt;a retry after a timeout;&lt;/li&gt;
&lt;li&gt;a request with no process-local warm-up;&lt;/li&gt;
&lt;li&gt;a request whose backend operation is still running asynchronously.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Log the protocol method, MCP name, request ID, server instance, tenant, and trace ID. Never put API keys, tokens, or user content into routing headers. Headers are visible to proxies, access logs, and telemetry systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Add cache policy, not just a cache
&lt;/h2&gt;

&lt;p&gt;The candidate’s &lt;code&gt;ttlMs&lt;/code&gt; and &lt;code&gt;cacheScope&lt;/code&gt; fields make caching inspectable, but they do not decide whether your data is safe to reuse.&lt;/p&gt;

&lt;p&gt;For every list or resource read, answer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is the result public, tenant-scoped, user-scoped, or run-scoped?&lt;/li&gt;
&lt;li&gt;What event invalidates it?&lt;/li&gt;
&lt;li&gt;Is stale data acceptable for this tool?&lt;/li&gt;
&lt;li&gt;Can a cache key include the full authorization scope?&lt;/li&gt;
&lt;li&gt;Will the agent mistake a cached result for a live check?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A useful default is &lt;strong&gt;short-lived and scope-bound&lt;/strong&gt;. Cache documentation and immutable metadata more aggressively than issue status, permissions, or deployment state.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Wire trace context end to end
&lt;/h2&gt;

&lt;p&gt;Propagating &lt;code&gt;traceparent&lt;/code&gt;, &lt;code&gt;tracestate&lt;/code&gt;, and &lt;code&gt;baggage&lt;/code&gt; in &lt;code&gt;_meta&lt;/code&gt; is only useful if your system keeps one trace across the whole action:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;agent run -&amp;gt; model call -&amp;gt; MCP gateway -&amp;gt; MCP server -&amp;gt; database/API -&amp;gt; tool result
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At minimum, record latency, retry count, authorization decision, tool name, result size, and failure class. Redact secrets before exporting metadata. This is especially important for coding agents, where a “successful” tool call can still produce an unsafe edit or an incomplete migration.&lt;/p&gt;

&lt;p&gt;Zira’s earlier guide on &lt;a href="https://dev.to/zira125/observability-for-coding-agents-openai-agents-sdk-vs-langchain-vs-google-adk-n5l"&gt;observability for coding agents&lt;/a&gt; covers the broader instrumentation trade-offs. MCP trace context gives that instrumentation a protocol-level place to travel.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Treat Tasks as a resource with limits
&lt;/h2&gt;

&lt;p&gt;Tasks are a better fit for long-running work than holding an HTTP request open, but they introduce lifecycle and capacity questions. Define:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;who may create a task;&lt;/li&gt;
&lt;li&gt;maximum runtime and queue depth;&lt;/li&gt;
&lt;li&gt;polling or notification policy;&lt;/li&gt;
&lt;li&gt;cancellation semantics;&lt;/li&gt;
&lt;li&gt;retention and deletion rules;&lt;/li&gt;
&lt;li&gt;idempotency behavior after client retries;&lt;/li&gt;
&lt;li&gt;what the agent is allowed to do while the task is pending.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do not let “async” become “unbounded.” A task that invokes tools, starts builds, or touches a repository needs the same approval and sandbox policy as a synchronous call.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Validate extensions and deprecations explicitly
&lt;/h2&gt;

&lt;p&gt;The release candidate makes extensions first-class and introduces a formal deprecation policy. That is healthier than silently depending on undocumented behavior, but it means capability negotiation belongs in tests.&lt;/p&gt;

&lt;p&gt;Create a compatibility matrix for each client/server pair:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;negotiated protocol version;&lt;/li&gt;
&lt;li&gt;supported extension IDs and versions;&lt;/li&gt;
&lt;li&gt;Tasks support;&lt;/li&gt;
&lt;li&gt;Apps support, if applicable;&lt;/li&gt;
&lt;li&gt;transport support;&lt;/li&gt;
&lt;li&gt;deprecated feature usage;&lt;/li&gt;
&lt;li&gt;fallback behavior when a capability is missing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Run it in CI against the exact SDK versions you ship. The previous finalized specification may remain in use while SDKs adopt the candidate at different speeds.&lt;/p&gt;

&lt;h2&gt;
  
  
  A 72-hour migration plan
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Today:&lt;/strong&gt; inventory session, routing, cache, trace, task, and deprecated-feature assumptions. Pin current SDK versions and save representative request fixtures.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Next:&lt;/strong&gt; run a two-instance server behind a non-sticky load balancer. Add negative tests for missing capabilities, expired tasks, unauthorized scopes, duplicate retries, and stale cache entries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Before July 28:&lt;/strong&gt; read the final specification, check your SDK release notes, and canary one low-risk server. Keep rollback support for the previous finalized version until your clients have converged.&lt;/p&gt;

&lt;h2&gt;
  
  
  The practical takeaway
&lt;/h2&gt;

&lt;p&gt;MCP 2026-07-28 is a scaling opportunity, not a reason to delete every state store. Remove hidden protocol coupling, make application state explicit, bind caches to authorization scope, propagate traces, and put hard limits around asynchronous work.&lt;/p&gt;

&lt;p&gt;The teams that migrate safely will be the ones that test the boundaries around the protocol, not just the happy-path tool call.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you maintain an MCP server today, which assumption is hardest to remove: sticky sessions, cache scope, trace propagation, or long-running task control?&lt;/strong&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blog.modelcontextprotocol.io/posts/2026-07-28-release-candidate/" rel="noopener noreferrer"&gt;MCP 2026-07-28 Specification Release Candidate&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/modelcontextprotocol/modelcontextprotocol/releases/tag/2026-07-28-RC" rel="noopener noreferrer"&gt;MCP 2026-07-28 RC on GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://modelcontextprotocol.io/specification/draft" rel="noopener noreferrer"&gt;MCP draft specification&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://modelcontextprotocol.io/specification/draft/changelog" rel="noopener noreferrer"&gt;MCP changelog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>security</category>
      <category>mcp</category>
      <category>ai</category>
      <category>agents</category>
    </item>
    <item>
      <title>Gemini 3.6 Flash Is Built for Faster, Cheaper AI Agents</title>
      <dc:creator>Zira</dc:creator>
      <pubDate>Wed, 22 Jul 2026 07:07:38 +0000</pubDate>
      <link>https://dev.to/zira125/gemini-36-flash-is-built-for-faster-cheaper-ai-agents-1op6</link>
      <guid>https://dev.to/zira125/gemini-36-flash-is-built-for-faster-cheaper-ai-agents-1op6</guid>
      <description>&lt;p&gt;Google has released &lt;strong&gt;Gemini 3.6 Flash&lt;/strong&gt;, a production-ready model focused on coding, multimodal processing, and multi-step agent workflows.&lt;/p&gt;

&lt;p&gt;The new model is available through the Gemini API using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gemini-3.6-flash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What Changed?
&lt;/h2&gt;

&lt;p&gt;Gemini 3.6 Flash improves on Gemini 3.5 Flash in several practical areas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;17% fewer output tokens&lt;/strong&gt; on the Artificial Analysis Index&lt;/li&gt;
&lt;li&gt;Fewer reasoning steps, tool calls, and repeated execution loops&lt;/li&gt;
&lt;li&gt;Better code generation with fewer unwanted file changes&lt;/li&gt;
&lt;li&gt;Improved document, chart, image, audio, video, and PDF understanding&lt;/li&gt;
&lt;li&gt;Native support for function calling, code execution, search grounding, file search, and computer use&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Google reports that the model scored &lt;strong&gt;49% on DeepSWE&lt;/strong&gt;, compared with 37% for Gemini 3.5 Flash. It also improved on OSWorld-Verified from 78.4% to 83%.&lt;/p&gt;

&lt;h2&gt;
  
  
  Context Window and Pricing
&lt;/h2&gt;

&lt;p&gt;Gemini 3.6 Flash supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;1,048,576 input tokens&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;65,536 output tokens&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;$1.50 per million input tokens&lt;/li&gt;
&lt;li&gt;$7.50 per million output tokens&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The input price remains unchanged from Gemini 3.5 Flash, while the output price drops from $9 to $7.50 per million tokens.&lt;/p&gt;

&lt;h2&gt;
  
  
  Basic Python Example
&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;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;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;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;Review this codebase and create a safe migration plan.&lt;/span&gt;&lt;span class="sh"&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;output_text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  One Migration Warning
&lt;/h2&gt;

&lt;p&gt;When moving to Gemini 3.6 Flash, remove deprecated parameters such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;temperature
top_p
top_k
candidate_count
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Applications using &lt;code&gt;thinking_budget&lt;/code&gt; should migrate to the newer &lt;code&gt;thinking_level&lt;/code&gt; setting.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Take
&lt;/h2&gt;

&lt;p&gt;Gemini 3.6 Flash is not simply a faster chatbot model. Its real target is production agent systems that repeatedly inspect files, generate code, call tools, and complete multi-step tasks.&lt;/p&gt;

&lt;p&gt;The lower output price and reduced token usage could make it a practical upgrade for teams already running Gemini-based coding agents or automation workflows.&lt;/p&gt;

&lt;p&gt;Official resources: &lt;a href="https://ai.google.dev/gemini-api/docs/models/gemini-3.6-flash" rel="noopener noreferrer"&gt;Gemini 3.6 Flash documentation&lt;/a&gt; and &lt;a href="https://blog.google/innovation-and-ai/models-and-research/gemini-models/gemini-3-6-flash-3-5-flash-lite-3-5-flash-cyber/" rel="noopener noreferrer"&gt;Google’s release announcement&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>gemini</category>
      <category>programming</category>
      <category>agents</category>
    </item>
    <item>
      <title>Automate Bug Fixes From GitHub Issues With Claude Code</title>
      <dc:creator>Zira</dc:creator>
      <pubDate>Tue, 21 Jul 2026 11:41:22 +0000</pubDate>
      <link>https://dev.to/zira125/automate-bug-fixes-from-github-issues-with-claude-code-4pgg</link>
      <guid>https://dev.to/zira125/automate-bug-fixes-from-github-issues-with-claude-code-4pgg</guid>
      <description>&lt;p&gt;Small bug fixes often follow the same workflow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GitHub issue → investigate → edit code → run tests → open pull request
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Claude Code can automate most of this while keeping review and merging under human control.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Install Claude Code
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @anthropic-ai/claude-code
&lt;span class="nb"&gt;cd &lt;/span&gt;your-project
claude
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then connect it to GitHub:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/install-github-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Follow the setup steps to install the GitHub app and add the required API key secret.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Add Repository Instructions
&lt;/h2&gt;

&lt;p&gt;Create a &lt;code&gt;CLAUDE.md&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Project Rules&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; Run &lt;span class="sb"&gt;`npm test`&lt;/span&gt; before completing changes.
&lt;span class="p"&gt;-&lt;/span&gt; Run &lt;span class="sb"&gt;`npm run lint`&lt;/span&gt;.
&lt;span class="p"&gt;-&lt;/span&gt; Add a regression test for every bug fix.
&lt;span class="p"&gt;-&lt;/span&gt; Do not modify unrelated files.
&lt;span class="p"&gt;-&lt;/span&gt; Do not add dependencies without approval.
&lt;span class="p"&gt;-&lt;/span&gt; Keep changes small and focused.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This prevents the agent from improvising its own development philosophy, which is rarely a gift.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Add CI Checks
&lt;/h2&gt;

&lt;p&gt;Create &lt;code&gt;.github/workflows/ci.yml&lt;/code&gt;:&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;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;CI&lt;/span&gt;

&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;pull_request&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;test&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;

    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v4&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/setup-node@v4&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;node-version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;22&lt;/span&gt;
          &lt;span class="na"&gt;cache&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm ci&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm run lint&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm test&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now every generated pull request is checked independently.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Trigger the Workflow
&lt;/h2&gt;

&lt;p&gt;Create a detailed GitHub issue, then comment:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@claude investigate this bug and create a fix.

Requirements:
- Find the root cause
- Make the smallest safe change
- Add a regression test
- Run lint and tests
- Create a draft pull request
- Do not modify unrelated files
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Claude Code can inspect the repository, implement the fix, and prepare the pull request.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Keep Humans in Control
&lt;/h2&gt;

&lt;p&gt;Do not let the agent merge directly into &lt;code&gt;main&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Require:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Passing CI checks&lt;/li&gt;
&lt;li&gt;Human review&lt;/li&gt;
&lt;li&gt;Branch protection&lt;/li&gt;
&lt;li&gt;Draft pull requests&lt;/li&gt;
&lt;li&gt;Manual approval for security, payments, or authentication changes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The useful goal is not fully autonomous development.&lt;/p&gt;

&lt;p&gt;It is reducing repetitive work while humans still make the final decision.&lt;/p&gt;

</description>
      <category>devplusplus</category>
      <category>git</category>
      <category>claude</category>
      <category>automation</category>
    </item>
    <item>
      <title>Claude Code vs Codex vs Gemini CLI: The Harness Matters More Than the Model</title>
      <dc:creator>Zira</dc:creator>
      <pubDate>Tue, 21 Jul 2026 08:42:02 +0000</pubDate>
      <link>https://dev.to/zira125/claude-code-vs-codex-vs-gemini-cli-the-harness-matters-more-than-the-model-h69</link>
      <guid>https://dev.to/zira125/claude-code-vs-codex-vs-gemini-cli-the-harness-matters-more-than-the-model-h69</guid>
      <description>&lt;p&gt;Developers often compare AI coding agents by asking one question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Which model is smartest?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is increasingly the wrong question.&lt;/p&gt;

&lt;p&gt;Claude Code, OpenAI Codex, and Gemini CLI can all inspect repositories, edit files, execute commands, run tests, and automate development tasks. Their real differences come from the systems surrounding the models:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How they collect context&lt;/li&gt;
&lt;li&gt;Which tools they can access&lt;/li&gt;
&lt;li&gt;How they request permission&lt;/li&gt;
&lt;li&gt;How they recover from failure&lt;/li&gt;
&lt;li&gt;How easily they fit into scripts and team workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The model matters. But the &lt;strong&gt;agent harness&lt;/strong&gt; determines how that intelligence behaves inside a real codebase.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick comparison
&lt;/h2&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;Claude Code&lt;/th&gt;
&lt;th&gt;OpenAI Codex&lt;/th&gt;
&lt;th&gt;Gemini CLI&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Best fit&lt;/td&gt;
&lt;td&gt;Deep repository work&lt;/td&gt;
&lt;td&gt;Structured coding automation&lt;/td&gt;
&lt;td&gt;Open and customizable CLI workflows&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Interface&lt;/td&gt;
&lt;td&gt;Terminal-first agent&lt;/td&gt;
&lt;td&gt;CLI and broader Codex workflows&lt;/td&gt;
&lt;td&gt;Open-source terminal agent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Project context&lt;/td&gt;
&lt;td&gt;&lt;code&gt;CLAUDE.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Repository instructions and task context&lt;/td&gt;
&lt;td&gt;&lt;code&gt;GEMINI.md&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Automation&lt;/td&gt;
&lt;td&gt;Hooks, print mode and scripts&lt;/td&gt;
&lt;td&gt;CLI, structured workflows and integrations&lt;/td&gt;
&lt;td&gt;Non-interactive mode, JSON and stream output&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Extensibility&lt;/td&gt;
&lt;td&gt;MCP and hooks&lt;/td&gt;
&lt;td&gt;MCP, skills and external commands&lt;/td&gt;
&lt;td&gt;MCP, extensions and custom tools&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Main advantage&lt;/td&gt;
&lt;td&gt;Strong codebase reasoning&lt;/td&gt;
&lt;td&gt;Controlled execution and workflow integration&lt;/td&gt;
&lt;td&gt;Openness and provider ecosystem&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Main tradeoff&lt;/td&gt;
&lt;td&gt;Can become expensive on long sessions&lt;/td&gt;
&lt;td&gt;Results depend heavily on task specification&lt;/td&gt;
&lt;td&gt;Fast-moving releases may introduce regressions&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;There is no universal winner. The correct choice depends on the type of work being delegated.&lt;/p&gt;

&lt;h2&gt;
  
  
  Claude Code: best for deep repository work
&lt;/h2&gt;

&lt;p&gt;Claude Code is designed to operate directly inside a project from the terminal. It can search files, understand relationships across a repository, edit code, run commands and iterate against test results.&lt;/p&gt;

&lt;p&gt;Its biggest strength is not merely code generation. It is maintaining a useful mental model of a codebase while moving through a multi-step task.&lt;/p&gt;

&lt;p&gt;That makes it particularly useful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Investigating unfamiliar repositories&lt;/li&gt;
&lt;li&gt;Planning large refactors&lt;/li&gt;
&lt;li&gt;Tracing bugs across multiple modules&lt;/li&gt;
&lt;li&gt;Updating implementations and related tests together&lt;/li&gt;
&lt;li&gt;Reviewing architectural decisions&lt;/li&gt;
&lt;li&gt;Executing tasks that require repeated reasoning&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Projects can provide persistent instructions through &lt;code&gt;CLAUDE.md&lt;/code&gt;. Teams can use this file to describe architecture, commands, conventions, testing requirements and boundaries the agent should respect.&lt;/p&gt;

&lt;p&gt;Claude Code also supports &lt;a href="https://docs.anthropic.com/en/docs/mcp" rel="noopener noreferrer"&gt;Model Context Protocol integrations&lt;/a&gt;, allowing it to interact with external tools and data sources instead of treating the repository as an isolated folder.&lt;/p&gt;

&lt;p&gt;Its CLI also supports structured output, including JSON and streaming JSON, which makes it possible to use Claude Code inside scripts rather than only through interactive sessions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where Claude Code fits best
&lt;/h3&gt;

&lt;p&gt;Use Claude Code when the task sounds like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Understand how this subsystem works, identify the root cause, propose a fix, implement it and verify that nothing else broke.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is different from asking an assistant to produce one isolated function.&lt;/p&gt;

&lt;h3&gt;
  
  
  Main limitation
&lt;/h3&gt;

&lt;p&gt;Long exploratory sessions can consume substantial context and tokens. Without clear repository instructions, agents may repeatedly search the same areas or make technically valid changes that conflict with local conventions.&lt;/p&gt;

&lt;p&gt;Claude Code performs better when the repository contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clear project instructions&lt;/li&gt;
&lt;li&gt;Reliable test commands&lt;/li&gt;
&lt;li&gt;Small, reviewable task boundaries&lt;/li&gt;
&lt;li&gt;Explicit rules for generated files and migrations&lt;/li&gt;
&lt;li&gt;Permission limits for destructive operations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The better the environment, the less intelligence gets wasted rediscovering basic facts.&lt;/p&gt;

&lt;h2&gt;
  
  
  OpenAI Codex: best for structured execution
&lt;/h2&gt;

&lt;p&gt;Codex is strongest when coding work needs to become a repeatable workflow rather than an extended conversation.&lt;/p&gt;

&lt;p&gt;It is well suited to tasks such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Implementing clearly scoped changes&lt;/li&gt;
&lt;li&gt;Updating documentation from source code&lt;/li&gt;
&lt;li&gt;Creating internal developer commands&lt;/li&gt;
&lt;li&gt;Running repeatable evaluation tasks&lt;/li&gt;
&lt;li&gt;Automating maintenance work&lt;/li&gt;
&lt;li&gt;Integrating coding actions with team systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;OpenAI’s official Codex examples increasingly extend beyond writing code. They include maintaining documentation, creating command-line tools, preparing product requirements and combining repository context with external organizational information.&lt;/p&gt;

&lt;p&gt;This represents an important shift.&lt;/p&gt;

&lt;p&gt;A coding agent is no longer only a developer sitting inside the terminal. It can become an execution layer between repositories, issue trackers, documentation systems, logs and internal tools.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where Codex fits best
&lt;/h3&gt;

&lt;p&gt;Use Codex when the task sounds like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Take this defined issue, make the required changes, run the relevant checks and return a reviewable result.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Codex benefits from clear acceptance criteria. The more precisely the expected result can be verified, the easier it is to delegate safely.&lt;/p&gt;

&lt;h3&gt;
  
  
  Main limitation
&lt;/h3&gt;

&lt;p&gt;Structured execution does not eliminate ambiguity.&lt;/p&gt;

&lt;p&gt;If a task contains vague product decisions, hidden architectural assumptions or unclear ownership boundaries, the agent may confidently produce a complete solution to the wrong interpretation.&lt;/p&gt;

&lt;p&gt;Codex should not be treated as a replacement for task definition. It amplifies the quality of the task it receives, including the bad parts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gemini CLI: best for open and customizable workflows
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/google-gemini/gemini-cli" rel="noopener noreferrer"&gt;Gemini CLI&lt;/a&gt; is an open-source terminal agent released under the Apache 2.0 licence.&lt;/p&gt;

&lt;p&gt;It supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Interactive terminal sessions&lt;/li&gt;
&lt;li&gt;Non-interactive prompts&lt;/li&gt;
&lt;li&gt;JSON output&lt;/li&gt;
&lt;li&gt;Streaming JSON events&lt;/li&gt;
&lt;li&gt;Multiple project directories&lt;/li&gt;
&lt;li&gt;Persistent context through &lt;code&gt;GEMINI.md&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;MCP servers&lt;/li&gt;
&lt;li&gt;Extensions and custom commands&lt;/li&gt;
&lt;li&gt;Built-in tools such as web search&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes Gemini CLI particularly interesting for developers who want to inspect, modify or extend the agent environment instead of accepting a fully closed workflow.&lt;/p&gt;

&lt;p&gt;Its non-interactive mode can be used in shell scripts:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gemini &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="s2"&gt;"Explain the architecture of this repository"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Structured output can be requested for automation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gemini &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="s2"&gt;"Run the tests and summarize failures"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--output-format&lt;/span&gt; json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For long-running workflows, it can stream newline-delimited events:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gemini &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="s2"&gt;"Run tests, fix failures and report the result"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--output-format&lt;/span&gt; stream-json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Gemini CLI also supports MCP and custom tool discovery, providing several ways to connect the agent to external systems.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where Gemini CLI fits best
&lt;/h3&gt;

&lt;p&gt;Use Gemini CLI when the task sounds like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Build a transparent terminal workflow that I can customize, script, inspect and connect to other tools.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It is especially relevant for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open-source toolchains&lt;/li&gt;
&lt;li&gt;Experimental agent workflows&lt;/li&gt;
&lt;li&gt;CI scripts&lt;/li&gt;
&lt;li&gt;Model and tool research&lt;/li&gt;
&lt;li&gt;Developers already working heavily with Google’s ecosystem&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Main limitation
&lt;/h3&gt;

&lt;p&gt;Gemini CLI publishes preview, stable and nightly release channels. That is useful for rapid experimentation, but preview and nightly builds may carry regressions or incomplete validation. Production workflows should pin versions and avoid casually tracking the newest build simply because it exists.&lt;/p&gt;

&lt;h2&gt;
  
  
  What empirical research says
&lt;/h2&gt;

&lt;p&gt;Most coding-agent comparisons are based on demos, benchmarks or one developer’s preferred stack.&lt;/p&gt;

&lt;p&gt;Recent research paints a less convenient picture.&lt;/p&gt;

&lt;p&gt;A 2026 study analysed &lt;strong&gt;7,156 pull requests&lt;/strong&gt; created by Codex, GitHub Copilot, Devin, Cursor and Claude Code. It found that task type had a major effect on acceptance.&lt;/p&gt;

&lt;p&gt;Documentation changes had an acceptance rate of 82.1%, while new-feature work reached 66.1%. That 16-point difference was larger than the usual performance gap between agents.&lt;/p&gt;

&lt;p&gt;The study found:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Claude Code led on documentation and feature tasks&lt;/li&gt;
&lt;li&gt;Cursor performed strongly on fix tasks&lt;/li&gt;
&lt;li&gt;Codex maintained relatively strong results across task categories&lt;/li&gt;
&lt;li&gt;No agent performed best on every type of work&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The useful conclusion is not that one tool won.&lt;/p&gt;

&lt;p&gt;It is that &lt;strong&gt;the task category may matter more than the brand of agent performing it&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reliability is still the uncomfortable part
&lt;/h2&gt;

&lt;p&gt;Another study examined more than &lt;strong&gt;3,800 publicly reported bugs&lt;/strong&gt; across Claude Code, Codex and Gemini CLI.&lt;/p&gt;

&lt;p&gt;More than 67% were functionality-related. API, integration and configuration problems accounted for 36.9% of identified root causes.&lt;/p&gt;

&lt;p&gt;Common symptoms included:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API failures&lt;/li&gt;
&lt;li&gt;Terminal problems&lt;/li&gt;
&lt;li&gt;Broken commands&lt;/li&gt;
&lt;li&gt;Tool-invocation errors&lt;/li&gt;
&lt;li&gt;Command-execution failures&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The research found that tool invocation and command execution were among the most failure-prone parts of the agent workflow.&lt;/p&gt;

&lt;p&gt;This matters because developers often evaluate agents using successful demonstrations.&lt;/p&gt;

&lt;p&gt;Production systems must be evaluated using failure recovery.&lt;/p&gt;

&lt;p&gt;A useful coding agent needs to do more than produce correct code when everything works. It must also behave predictably when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A command exits unexpectedly&lt;/li&gt;
&lt;li&gt;Authentication expires&lt;/li&gt;
&lt;li&gt;A tool returns malformed data&lt;/li&gt;
&lt;li&gt;Tests are flaky&lt;/li&gt;
&lt;li&gt;Repository instructions conflict&lt;/li&gt;
&lt;li&gt;A dependency has changed&lt;/li&gt;
&lt;li&gt;The agent reaches a permission boundary&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The polished demo is the least interesting part of the system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Model versus harness
&lt;/h2&gt;

&lt;p&gt;A coding agent can be simplified into five layers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Model
  ↓
Context management
  ↓
Tool selection
  ↓
Execution environment
  ↓
Verification and recovery
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Developers usually focus on the first layer.&lt;/p&gt;

&lt;p&gt;Production failures frequently occur in the remaining four.&lt;/p&gt;

&lt;p&gt;Two agents using similarly capable models can behave very differently because one:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reads project instructions more reliably&lt;/li&gt;
&lt;li&gt;Searches fewer irrelevant files&lt;/li&gt;
&lt;li&gt;Uses tools more efficiently&lt;/li&gt;
&lt;li&gt;Requests permission at better moments&lt;/li&gt;
&lt;li&gt;Runs the correct tests&lt;/li&gt;
&lt;li&gt;Recognizes failed execution&lt;/li&gt;
&lt;li&gt;Preserves state between steps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is why switching models does not automatically fix a weak agent workflow.&lt;/p&gt;

&lt;p&gt;Sometimes the agent does not need a smarter model. It needs better context, narrower tools and a clearer definition of completion.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which one should you choose?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Choose Claude Code when:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Repository understanding is the main challenge&lt;/li&gt;
&lt;li&gt;Tasks regularly cross several files&lt;/li&gt;
&lt;li&gt;You perform architectural investigation&lt;/li&gt;
&lt;li&gt;You want strong interactive reasoning&lt;/li&gt;
&lt;li&gt;Your team can maintain useful project instructions&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Choose Codex when:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Tasks have clear acceptance criteria&lt;/li&gt;
&lt;li&gt;You want repeatable coding automation&lt;/li&gt;
&lt;li&gt;Work needs to connect with other systems&lt;/li&gt;
&lt;li&gt;You are building delegated engineering workflows&lt;/li&gt;
&lt;li&gt;Execution and review need clearer separation&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Choose Gemini CLI when:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Open source matters&lt;/li&gt;
&lt;li&gt;You want to inspect or extend the agent&lt;/li&gt;
&lt;li&gt;CLI scripting is central to your workflow&lt;/li&gt;
&lt;li&gt;You need JSON or streaming output&lt;/li&gt;
&lt;li&gt;You are experimenting with MCP and custom tools&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A better evaluation method
&lt;/h2&gt;

&lt;p&gt;Do not evaluate coding agents using one prompt that generates a landing page.&lt;/p&gt;

&lt;p&gt;That test mostly measures how effectively the agent can produce something visually convincing before anyone reads the code.&lt;/p&gt;

&lt;p&gt;Instead, create a small internal evaluation set based on real work:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Fix a bug spanning multiple modules.&lt;/li&gt;
&lt;li&gt;Add a feature with existing architectural constraints.&lt;/li&gt;
&lt;li&gt;Refactor code without changing behaviour.&lt;/li&gt;
&lt;li&gt;Update tests after an API change.&lt;/li&gt;
&lt;li&gt;Explain an unfamiliar subsystem.&lt;/li&gt;
&lt;li&gt;Diagnose a deliberately broken build.&lt;/li&gt;
&lt;li&gt;Follow repository-specific security rules.&lt;/li&gt;
&lt;li&gt;Stop safely when requirements are ambiguous.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For each task, record:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Completion rate&lt;/li&gt;
&lt;li&gt;Human corrections required&lt;/li&gt;
&lt;li&gt;Tests passed&lt;/li&gt;
&lt;li&gt;Unnecessary files changed&lt;/li&gt;
&lt;li&gt;Tokens or credits consumed&lt;/li&gt;
&lt;li&gt;Time spent reviewing&lt;/li&gt;
&lt;li&gt;Permission violations&lt;/li&gt;
&lt;li&gt;Recovery after failed commands&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The best tool is not the one that generates the most code.&lt;/p&gt;

&lt;p&gt;It is the one that produces the highest percentage of changes you are willing to merge.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final verdict
&lt;/h2&gt;

&lt;p&gt;Claude Code, Codex and Gemini CLI are converging on a similar interface: an agent that can inspect a repository, call tools, execute commands and modify code.&lt;/p&gt;

&lt;p&gt;Their meaningful differences now lie in workflow design.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code&lt;/strong&gt; is strongest for deep, interactive repository reasoning.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Codex&lt;/strong&gt; is strongest for defined tasks and structured execution.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemini CLI&lt;/strong&gt; is strongest for open, customizable terminal automation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None should be trusted without tests, permission boundaries and human review.&lt;/p&gt;

&lt;p&gt;The next generation of coding-agent competition will not be decided only by which company releases the smartest model.&lt;/p&gt;

&lt;p&gt;It will be decided by which harness turns intelligence into reliable engineering work.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Observability for Coding Agents: OpenAI Agents SDK vs LangChain vs Google ADK</title>
      <dc:creator>Zira</dc:creator>
      <pubDate>Tue, 21 Jul 2026 06:49:53 +0000</pubDate>
      <link>https://dev.to/zira125/observability-for-coding-agents-openai-agents-sdk-vs-langchain-vs-google-adk-n5l</link>
      <guid>https://dev.to/zira125/observability-for-coding-agents-openai-agents-sdk-vs-langchain-vs-google-adk-n5l</guid>
      <description>&lt;p&gt;Your coding agent can pass a demo and still be impossible to debug in production.&lt;/p&gt;

&lt;p&gt;When a run edits the wrong file, burns through a retry loop, or silently loses a child-agent span, the useful question is not only “what did the model answer?” It is “what happened across the entire workflow?”&lt;/p&gt;

&lt;p&gt;This comparison looks at observability paths in three popular Python stacks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OpenAI Agents SDK&lt;/li&gt;
&lt;li&gt;LangChain agents with LangSmith&lt;/li&gt;
&lt;li&gt;Google Agent Development Kit (ADK)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The practical hook: choose the stack that gives your team the right evidence for a failed coding task without leaking repository content or locking every service to one telemetry destination.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scope and evaluation criteria
&lt;/h2&gt;

&lt;p&gt;This is an official-documentation comparison checked on July 21, 2026. I did not run a shared benchmark, measure export latency, or score the dashboards. Treat the “best fit” guidance as engineering judgment, not a universal ranking.&lt;/p&gt;

&lt;p&gt;I compared five things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Default capture:&lt;/strong&gt; What does one agent run record without custom spans?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Control and export:&lt;/strong&gt; Can you disable, extend, replace, or fan out telemetry?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Coding-agent usefulness:&lt;/strong&gt; Can a trace explain model turns, tool calls, handoffs, and failures?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Privacy controls:&lt;/strong&gt; How explicit is the path for excluding prompts, outputs, or message content?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evaluation loop:&lt;/strong&gt; How naturally can traces become datasets, feedback, or regression checks?&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  At a glance
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stack&lt;/th&gt;
&lt;th&gt;Default observability path&lt;/th&gt;
&lt;th&gt;Strongest debugging signal&lt;/th&gt;
&lt;th&gt;Export/control shape&lt;/th&gt;
&lt;th&gt;Main trade-off&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI Agents SDK&lt;/td&gt;
&lt;td&gt;Built-in traces and spans sent to the OpenAI Traces dashboard&lt;/td&gt;
&lt;td&gt;A structured hierarchy for runs, model turns, tools, guardrails, and handoffs&lt;/td&gt;
&lt;td&gt;Add processors or replace the default processors; community integrations are listed in the docs&lt;/td&gt;
&lt;td&gt;The default backend is OpenAI, and tracing is unavailable for organizations using OpenAI API Zero Data Retention&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LangChain + LangSmith&lt;/td&gt;
&lt;td&gt;LangChain agents automatically support LangSmith tracing when enabled&lt;/td&gt;
&lt;td&gt;Step-by-step agent traces with tools, model interactions, decisions, metadata, and tags&lt;/td&gt;
&lt;td&gt;Native tracing plus OpenTelemetry export, alternate OTLP endpoints, and collector fan-out&lt;/td&gt;
&lt;td&gt;Requires LangSmith setup for the easiest path; distributed traces can disappear if ancestors are never exported there&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google ADK&lt;/td&gt;
&lt;td&gt;Built-in logging, metrics, and traces&lt;/td&gt;
&lt;td&gt;Agent workflow telemetry plus events from tools and multi-agent execution&lt;/td&gt;
&lt;td&gt;OpenTelemetry is a first-class route; integrations can add analysis and monitoring&lt;/td&gt;
&lt;td&gt;You still need to choose a backend and decide how much message content to capture&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The table describes documented capabilities, not equal implementations. “Built-in” does not mean identical span names, retention, sampling, or dashboard features.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. OpenAI Agents SDK: fastest path to a workflow trace
&lt;/h2&gt;

&lt;p&gt;The SDK traces a complete Runner.run() by default. Its documented hierarchy includes task and turn spans, agent spans, model generations, function tools, guardrails, handoffs, and custom spans. That is a good match for a coding agent where the failure may be in the transition between steps rather than in the final text.&lt;/p&gt;

&lt;p&gt;A minimal run can therefore answer questions such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Did the agent call the repository search tool before editing?&lt;/li&gt;
&lt;li&gt;Which model turn produced the risky tool arguments?&lt;/li&gt;
&lt;li&gt;Did a handoff send the task to the reviewer agent?&lt;/li&gt;
&lt;li&gt;Did a guardrail run, and where did it sit in the trace?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The SDK also exposes a useful control boundary. Add a custom trace processor to send a second copy elsewhere, or replace the default processors entirely. For long-running workers, the docs call out flush_traces() when you need an immediate delivery guarantee after a unit of work.&lt;/p&gt;

&lt;p&gt;The privacy footgun is equally clear: generation and function spans may contain sensitive data, and trace_include_sensitive_data is true by default. A coding-agent team should decide whether prompts, diffs, file contents, and tool arguments belong in the trace before enabling this in a repository with secrets or customer data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choose this path when:&lt;/strong&gt; you are already using the OpenAI Agents SDK, want rich workflow structure with little instrumentation code, and accept OpenAI Traces or are prepared to install a custom processor.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. LangChain + LangSmith: the most complete trace-to-evaluation workflow
&lt;/h2&gt;

&lt;p&gt;LangChain’s current agent docs say agents built with create_agent automatically support LangSmith tracing. Enabling it is primarily configuration: set LANGSMITH_TRACING=true and provide an API key. The resulting traces cover the input-to-output path, including tools, model interactions, and decision points. Tags and metadata can be attached per invocation, which is especially useful for coding-agent slices such as repository, branch, model route, or task type.&lt;/p&gt;

&lt;p&gt;The differentiator is not merely “it has traces.” LangSmith’s observability docs connect traces to debugging, evaluation, monitoring, feedback, and datasets. That makes it a natural fit for a team asking:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which tool-error pattern is recurring across repositories?&lt;/li&gt;
&lt;li&gt;Did a prompt or model change increase failed patch attempts?&lt;/li&gt;
&lt;li&gt;Can production traces seed a regression set before the next harness change?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It also has a vendor-neutral route. LangSmith documents OpenTelemetry tracing for LangChain and non-LangChain applications, including collector fan-out to multiple destinations. That is useful when your coding agent spans an API service, a sandbox worker, and a separate test runner.&lt;/p&gt;

&lt;p&gt;There is a subtle distributed-tracing limitation worth testing: the docs state that a span whose parent is never sent to LangSmith is dropped. A successful OTLP response from the collector is not proof that the complete trace will appear as one connected run. Export the ancestors you need, or make the loss mode visible in your own checks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choose this path when:&lt;/strong&gt; trace search, metadata, human feedback, evaluation, and production monitoring are part of the same improvement loop, or when you need OpenTelemetry fan-out.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Google ADK: telemetry as a framework capability, backend as a choice
&lt;/h2&gt;

&lt;p&gt;Google ADK’s observability documentation treats logging, metrics, and traces as built-in capabilities rather than an afterthought. Its examples show OpenTelemetry for traces and a logging plugin for detailed output. The docs also warn that basic input/output monitoring is insufficient for complex agents because debugging needs visibility into reasoning traces, tool calls, and other internal activity represented in telemetry.&lt;/p&gt;

&lt;p&gt;That model fits multi-agent coding workflows where the orchestration graph matters: a planner may delegate to a code-search agent, which invokes tools, which triggers a test runner. You want to correlate those events with service-level metrics, not only inspect the final response.&lt;/p&gt;

&lt;p&gt;ADK leaves more backend choice to you. The official quick start configures an OTLP exporter, and the docs point to observability integrations for additional monitoring and analysis. This can be an advantage for teams that already run an OpenTelemetry Collector, but it is also setup work: you must choose the exporter, backend, retention policy, and content-capture policy.&lt;/p&gt;

&lt;p&gt;The privacy control is explicit in the docs’ Kotlin example: capturing full message content is configurable and should be used with caution in production. The same operational rule applies to a coding agent in any language: structured metadata such as repository ID, task ID, model name, and exit status is often safer than storing full prompts, diffs, or tool payloads.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choose this path when:&lt;/strong&gt; you want framework-level logging, metrics, and traces, run multi-agent workflows, and already have an OpenTelemetry-oriented platform team.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical coding-agent trace contract
&lt;/h2&gt;

&lt;p&gt;Whichever framework you choose, define a small contract before adding every possible payload to telemetry:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;task_id: task_2026_07_21_0042
repo: payments-api
base_revision: abc123
agent: implementer
model: router-selected
tool: run_tests
side_effect: read-only
outcome: failed
error_class: test_failure
duration_ms: 1840
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Store the full diff, command output, and prompt only where your security policy allows it. Keep the trace useful even when content capture is disabled. A task ID and stable error class are often enough to join a redacted trace to an internal artifact store.&lt;/p&gt;

&lt;p&gt;This complements, rather than replaces, a regression strategy. A trace shows what happened; an evaluation or replay check decides whether the behavior is acceptable. For a concrete workflow, see &lt;a href="https://dev.to/zira125/stop-replaying-coding-agent-bugs-by-hand-turn-traces-into-regression-tests-1h4o"&gt;Stop Replaying Coding-Agent Bugs by Hand: Turn Traces Into Regression Tests&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Decision checklist
&lt;/h2&gt;

&lt;p&gt;Pick &lt;strong&gt;OpenAI Agents SDK&lt;/strong&gt; if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You want detailed agent-native spans immediately.&lt;/li&gt;
&lt;li&gt;Your team is comfortable with OpenAI’s tracing destination or custom processors.&lt;/li&gt;
&lt;li&gt;The agent’s main complexity is handoffs, guardrails, and tool execution.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pick &lt;strong&gt;LangChain + LangSmith&lt;/strong&gt; if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You need traces connected to feedback, datasets, evaluations, and monitoring.&lt;/li&gt;
&lt;li&gt;You want tags and metadata for slicing coding tasks.&lt;/li&gt;
&lt;li&gt;You need documented OpenTelemetry export or multi-destination fan-out.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pick &lt;strong&gt;Google ADK&lt;/strong&gt; if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You want logging, metrics, and traces as part of an ADK workflow.&lt;/li&gt;
&lt;li&gt;You operate a multi-agent system and already have an OTLP backend or collector.&lt;/li&gt;
&lt;li&gt;Backend portability matters more than a zero-setup hosted dashboard.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your agent performs side effects, pair observability with explicit error classification and retry policy. A trace can reveal that a tool failed, but it should not silently turn a non-idempotent write into a retry. &lt;a href="https://dev.to/zira125/tool-errors-are-not-retries-langchain-vs-openai-agents-sdk-vs-microsoft-agent-framework-4gk1"&gt;Tool Errors Are Not Retries&lt;/a&gt; covers that boundary.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do now
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Pick one representative coding task: a failing test plus a small patch is enough.&lt;/li&gt;
&lt;li&gt;Run it with content capture disabled first.&lt;/li&gt;
&lt;li&gt;Verify that the trace still records agent, model, tool, handoff, duration, status, and task ID.&lt;/li&gt;
&lt;li&gt;Export one trace to the backend your team actually operates.&lt;/li&gt;
&lt;li&gt;Intentionally fail a tool and confirm the failure is visible without exposing secrets.&lt;/li&gt;
&lt;li&gt;Promote the trace to a regression case only after you can state the expected outcome.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Candid limitations
&lt;/h2&gt;

&lt;p&gt;This is a documentation-based comparison, not a common benchmark. I did not measure dashboard query speed, export overhead, retention, pricing, or trace completeness under process crashes. Framework versions and integrations change quickly. OpenTelemetry compatibility also does not guarantee identical semantics across backends: span names, attributes, sampling, and redaction behavior still need a small integration test.&lt;/p&gt;

&lt;p&gt;The right observability stack is the one your team will actually inspect during a failed run and can operate within its data-retention and security constraints.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://openai.github.io/openai-agents-python/tracing" rel="noopener noreferrer"&gt;OpenAI Agents SDK tracing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.langchain.com/oss/python/langchain/observability" rel="noopener noreferrer"&gt;LangChain observability&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.langchain.com/langsmith/trace-with-opentelemetry" rel="noopener noreferrer"&gt;LangSmith OpenTelemetry tracing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://adk.dev/observability/" rel="noopener noreferrer"&gt;Google ADK observability&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://opentelemetry.io/docs/specs/semconv/gen-ai/" rel="noopener noreferrer"&gt;OpenTelemetry GenAI semantic conventions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What is the first field or event you would refuse to omit from a coding-agent trace, and why?&lt;/p&gt;

</description>
      <category>python</category>
      <category>agents</category>
      <category>ai</category>
      <category>programming</category>
    </item>
    <item>
      <title>Durable State for Coding Agents: LangGraph vs Google ADK vs OpenAI Agents SDK</title>
      <dc:creator>Zira</dc:creator>
      <pubDate>Tue, 21 Jul 2026 03:49:23 +0000</pubDate>
      <link>https://dev.to/zira125/durable-state-for-coding-agents-langgraph-vs-google-adk-vs-openai-agents-sdk-49c5</link>
      <guid>https://dev.to/zira125/durable-state-for-coding-agents-langgraph-vs-google-adk-vs-openai-agents-sdk-49c5</guid>
      <description>&lt;p&gt;Long-running coding agents fail in ways a chat demo hides: the worker restarts, a human approval arrives hours later, or a tool call is interrupted after changing the repository. “Memory” alone is not enough. You need to know what state is saved, what resumes, and what may run twice.&lt;/p&gt;

&lt;p&gt;This is a documentation-based comparison of &lt;strong&gt;LangGraph&lt;/strong&gt;, &lt;strong&gt;Google ADK&lt;/strong&gt;, and the &lt;strong&gt;OpenAI Agents SDK&lt;/strong&gt;. It is not a benchmark, and I did not run a common workload across the three. I reviewed the official documentation on July 21, 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  Evaluation criteria
&lt;/h2&gt;

&lt;p&gt;I compared each option on:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;State model:&lt;/strong&gt; conversation history, workflow state, and cross-session data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Durability boundary:&lt;/strong&gt; what is persisted and when.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resume primitive:&lt;/strong&gt; how a paused or interrupted run continues.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Replay and side effects:&lt;/strong&gt; whether tools or nodes can execute again.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Production path:&lt;/strong&gt; storage backends and operational control.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Coding-agent fit:&lt;/strong&gt; repository edits, tests, approvals, and long waits.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  At a glance
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Framework&lt;/th&gt;
&lt;th&gt;Primary durable abstraction&lt;/th&gt;
&lt;th&gt;Resume handle&lt;/th&gt;
&lt;th&gt;Cross-session memory&lt;/th&gt;
&lt;th&gt;Main sharp edge&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;LangGraph&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Checkpointer for thread state; Store for shared data&lt;/td&gt;
&lt;td&gt;thread_id plus graph input or Command&lt;/td&gt;
&lt;td&gt;Store, separate from checkpoints&lt;/td&gt;
&lt;td&gt;Resumed nodes can replay; side effects must be idempotent or isolated in tasks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Google ADK&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Session events and state via a SessionService&lt;/td&gt;
&lt;td&gt;session_id plus prior invocation_id when resumability is enabled&lt;/td&gt;
&lt;td&gt;user: and app: state scopes with a persistent service&lt;/td&gt;
&lt;td&gt;Tools are at-least-once on resume and may run more than once&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;OpenAI Agents SDK&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Session history, RunState, or server-managed conversation&lt;/td&gt;
&lt;td&gt;Same session plus resumed RunState&lt;/td&gt;
&lt;td&gt;Pluggable sessions or OpenAI-hosted Conversations&lt;/td&gt;
&lt;td&gt;Sessions preserve history, but durable workflow execution is an integration concern&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These are not interchangeable terms. A conversation session can preserve messages while still leaving your workflow step, approval status, or file-write outcome undefined.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. LangGraph: explicit checkpoints plus a separate Store
&lt;/h2&gt;

&lt;p&gt;LangGraph splits persistence into two deliberate layers. A &lt;strong&gt;checkpointer&lt;/strong&gt; saves graph state for one thread. A &lt;strong&gt;Store&lt;/strong&gt; holds application-defined key-value data across threads. That maps cleanly to a coding agent:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;checkpoint: the current repository task, plan, tool results, and approval pause;&lt;/li&gt;
&lt;li&gt;store: reusable user preferences, team conventions, or a verified project index.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The thread ID is the durable cursor. For a human approval, interrupt() pauses execution, saves state, and later resumes with a Command using the same thread. This is a strong fit when you want the workflow graph and its control flow to be inspectable.&lt;/p&gt;

&lt;p&gt;The important limitation is replay. LangGraph documents that execution resumes from a checkpoint boundary, not from the exact Python line. A node can run again. Wrap nondeterministic work and side effects in tasks or nodes, make writes idempotent, and use an idempotency key for operations such as opening a pull request or applying a migration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best fit:&lt;/strong&gt; a coding workflow with explicit stages such as inspect → plan → approve → edit → test → review, especially when you need time travel, human-in-the-loop pauses, or recovery after failure.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Google ADK: event-backed sessions and resumable workflows
&lt;/h2&gt;

&lt;p&gt;Google ADK’s Session is more than a message list. Its state is a serializable key-value scratchpad, and the SessionService determines whether it survives a restart. InMemorySessionService is not durable; DatabaseSessionService and VertexAiSessionService are the production-oriented persistent choices documented for state.&lt;/p&gt;

&lt;p&gt;ADK also makes scope visible through prefixes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;no prefix: current session;&lt;/li&gt;
&lt;li&gt;user: shared across that user’s sessions;&lt;/li&gt;
&lt;li&gt;app: shared across the application;&lt;/li&gt;
&lt;li&gt;temp: current invocation only and not persistent.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With resumability enabled, ADK records completed workflow tasks in Events. A stopped workflow can be resumed with the saved session and invocation IDs. Sequential and parallel workflows use recorded completion state to avoid re-running completed branches where possible.&lt;/p&gt;

&lt;p&gt;But the safety warning matters for coding agents: the official resume documentation says tools are guaranteed to run &lt;strong&gt;at least once&lt;/strong&gt; and may run more than once during resume. A tool that edits a file, pushes a branch, or creates an issue therefore needs duplicate protection and a post-run reality check.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best fit:&lt;/strong&gt; teams already using Google’s agent runtime and wanting session-scoped, user-scoped, or app-scoped state plus resumable sequential or parallel workflows.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. OpenAI Agents SDK: flexible sessions, explicit run continuation
&lt;/h2&gt;

&lt;p&gt;The OpenAI Agents SDK provides a pluggable Session interface. The runner loads session items before a run and persists new items afterward. The official Python docs list file-backed SQLite, Redis, SQLAlchemy, MongoDB, Dapr, encrypted wrappers, and OpenAI-hosted Conversations as options.&lt;/p&gt;

&lt;p&gt;For a paused human approval, the SDK serializes a RunState. You approve or reject the interruption, then run again with that state and the same session. That is a useful distinction: the session stores the conversation history, while RunState represents the interrupted execution that must continue.&lt;/p&gt;

&lt;p&gt;The SDK also lets you limit retrieved history or customize how history is merged before a model call. That helps control context growth, but it is not the same as checkpointing every arbitrary workflow step. For long waits, retries, or process restarts, the official running-agents guide points to durable-execution integrations such as Temporal, Dapr, Restate, and DBOS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best fit:&lt;/strong&gt; an agent application that primarily needs durable conversation and approval continuation, or a team comfortable adding a workflow runtime when execution must survive long outages and waits.&lt;/p&gt;

&lt;h2&gt;
  
  
  The coding-agent decision rule
&lt;/h2&gt;

&lt;p&gt;Choose based on the failure you must recover from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;“Resume this graph at a known stage and inspect prior state.”&lt;/strong&gt; Start with LangGraph.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;“Persist session, user, and app state inside Google’s agent runtime.”&lt;/strong&gt; Start with Google ADK.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;“Persist conversation history and resume an approval, then add a workflow engine when needed.”&lt;/strong&gt; Start with OpenAI Agents SDK.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do not select based only on the word “memory.” Ask where these facts live after a crash:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Which commit or worktree was active?&lt;/li&gt;
&lt;li&gt;Which tools completed successfully?&lt;/li&gt;
&lt;li&gt;Was the approval granted for this exact command and arguments?&lt;/li&gt;
&lt;li&gt;Is the next step safe to replay?&lt;/li&gt;
&lt;li&gt;Can an operator inspect and delete stale state?&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  A practical state contract
&lt;/h2&gt;

&lt;p&gt;Regardless of framework, persist a small, explicit contract rather than dumping the entire prompt into memory:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "task_id": "issue-1842",
  "repo_sha": "abc123",
  "worktree": "/worktrees/issue-1842",
  "phase": "tests",
  "approved_action_hash": "sha256:...",
  "completed_tools": ["read_diff", "run_unit_tests"],
  "next_action": "run_integration_tests",
  "idempotency_keys": ["issue-1842:patch:1"]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Keep secrets and untrusted tool output out of durable memory unless you have a retention, encryption, and retrieval policy. Persist identifiers and verified results, not credentials.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do now
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Pick one failure scenario: worker restart during tests, approval wait, or duplicate patch application.&lt;/li&gt;
&lt;li&gt;Draw the state boundary: conversation, workflow cursor, tool result, and cross-session memory are separate things.&lt;/li&gt;
&lt;li&gt;Add a stable task ID and idempotency key to every side-effecting tool.&lt;/li&gt;
&lt;li&gt;Run the same scenario twice: once normally and once after killing the worker at each tool boundary.&lt;/li&gt;
&lt;li&gt;Verify the repository, branch, issue tracker, and CI system after resume. “The framework resumed” is not proof that the side effect happened exactly once.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Candid limitations
&lt;/h2&gt;

&lt;p&gt;This comparison is based on official documentation, not a common benchmark. APIs and integrations change quickly, and “persistent” does not by itself specify transactionality, encryption, retention, multi-writer behavior, or exactly-once effects. Storage latency, deployment topology, and tool design can dominate the framework choice. Treat the documented resume semantics as design constraints, then test your own failure modes.&lt;/p&gt;

&lt;p&gt;If you are working on observability, see &lt;a href="https://dev.to/zira125/stop-replaying-coding-agent-bugs-by-hand-turn-traces-into-regression-tests-1h4o"&gt;how to turn agent traces into regression tests&lt;/a&gt;. For a related control-flow choice, see &lt;a href="https://dev.to/zira125/handoffs-vs-subagents-openai-agents-sdk-vs-google-adk-vs-langgraph-1064"&gt;handoffs vs subagents across agent frameworks&lt;/a&gt;.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.langchain.com/oss/python/langgraph/persistence" rel="noopener noreferrer"&gt;LangGraph persistence&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.langchain.com/oss/python/langgraph/durable-execution" rel="noopener noreferrer"&gt;LangGraph durable execution&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://google.github.io/adk-docs/sessions/state/" rel="noopener noreferrer"&gt;Google ADK state&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://google.github.io/adk-docs/runtime/resume/" rel="noopener noreferrer"&gt;Google ADK resume stopped agents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://openai.github.io/openai-agents-python/sessions/" rel="noopener noreferrer"&gt;OpenAI Agents SDK sessions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://openai.github.io/openai-agents-python/running_agents" rel="noopener noreferrer"&gt;OpenAI Agents SDK running agents and durable execution&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Discussion
&lt;/h2&gt;

&lt;p&gt;What is the first side effect your coding agent must make safe to replay: a file edit, a commit, a pull request, or a production change?&lt;/p&gt;

</description>
      <category>python</category>
      <category>agents</category>
      <category>ai</category>
      <category>programming</category>
    </item>
    <item>
      <title>Handoffs vs Subagents: OpenAI Agents SDK vs Google ADK vs LangGraph</title>
      <dc:creator>Zira</dc:creator>
      <pubDate>Tue, 21 Jul 2026 00:53:48 +0000</pubDate>
      <link>https://dev.to/zira125/handoffs-vs-subagents-openai-agents-sdk-vs-google-adk-vs-langgraph-1064</link>
      <guid>https://dev.to/zira125/handoffs-vs-subagents-openai-agents-sdk-vs-google-adk-vs-langgraph-1064</guid>
      <description>&lt;p&gt;“Multi-agent” is often used as if it describes one architecture. It does not.&lt;/p&gt;

&lt;p&gt;For a coding workflow, there is a big difference between transferring ownership of the conversation to a specialist, calling a specialist and getting a result back, and running a fixed pipeline where the application controls the next step.&lt;/p&gt;

&lt;p&gt;Those choices affect context visibility, testing, retries, approval boundaries, and how easy it is to explain a bad run.&lt;/p&gt;

&lt;p&gt;This is a documentation-based comparison of three approaches: &lt;strong&gt;OpenAI Agents SDK&lt;/strong&gt;, with handoffs and agents-as-tools; &lt;strong&gt;Google ADK&lt;/strong&gt;, with parent/sub-agent transfer and workflow agents; and &lt;strong&gt;LangGraph&lt;/strong&gt;, with subgraphs and explicit state.&lt;/p&gt;

&lt;p&gt;I evaluated them on five criteria: who owns the next response, how state is passed, whether routing is model- or application-controlled, suitability for parallel or repeatable work, and what a developer can inspect after a failure. I did not run a common benchmark, so this is not a claim that one framework is faster or more reliable.&lt;/p&gt;

&lt;h2&gt;
  
  
  The key distinction: transfer or return?
&lt;/h2&gt;

&lt;p&gt;Start with a coding task: “Inspect this pull request, run the tests, and suggest a patch.”&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;handoff&lt;/strong&gt; is appropriate when a specialist should take over. The original agent is no longer the owner of the next response. In the OpenAI Agents SDK, handoffs are exposed to the model as transfer tools, and the receiving agent continues the run. The SDK also supports typed handoff inputs and history filters.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;subagent call&lt;/strong&gt; is appropriate when a manager should remain in control. The specialist does a bounded job, returns a result, and the manager decides what to do next. This is the safer default when a planner needs to combine several independent reviews before producing one answer.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;workflow graph&lt;/strong&gt; is appropriate when the application should make control flow legible. A graph can say “run security review and test review in parallel, then require a synthesizer,” without asking a model to invent that structure at runtime.&lt;/p&gt;

&lt;p&gt;The practical mistake is treating these as interchangeable function calls. They are different ownership models.&lt;/p&gt;

&lt;h2&gt;
  
  
  Comparison at a glance
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;OpenAI Agents SDK&lt;/th&gt;
&lt;th&gt;Google ADK&lt;/th&gt;
&lt;th&gt;LangGraph&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Primary control primitive&lt;/td&gt;
&lt;td&gt;Model-selected handoffs or agents-as-tools&lt;/td&gt;
&lt;td&gt;Parent/sub-agent transfer plus Sequential, Parallel, and Loop agents&lt;/td&gt;
&lt;td&gt;Explicit graph nodes, edges, subgraphs, and state&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Specialist ownership&lt;/td&gt;
&lt;td&gt;Handoff transfers the next response; agent-as-tool returns to manager&lt;/td&gt;
&lt;td&gt;Transfer can move the conversation; workflow agents keep orchestration explicit&lt;/td&gt;
&lt;td&gt;Depends on graph design; nodes return state to the graph&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Routing style&lt;/td&gt;
&lt;td&gt;Usually model-selected, with application-configured destinations&lt;/td&gt;
&lt;td&gt;Hierarchy or workflow configuration; custom agents can implement routing&lt;/td&gt;
&lt;td&gt;Application-defined edges or router nodes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Context strategy&lt;/td&gt;
&lt;td&gt;Full history by default, with handoff filters available&lt;/td&gt;
&lt;td&gt;Session/state mechanisms and agent hierarchy&lt;/td&gt;
&lt;td&gt;Shared or private schemas; subgraph persistence can be per-invocation or per-thread&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Parallel work&lt;/td&gt;
&lt;td&gt;Compose it yourself or use multiple calls&lt;/td&gt;
&lt;td&gt;First-class ParallelAgent&lt;/td&gt;
&lt;td&gt;Model parallel branches explicitly in the graph&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best fit&lt;/td&gt;
&lt;td&gt;OpenAI-first apps needing lightweight delegation and tracing&lt;/td&gt;
&lt;td&gt;Python workflows with clear parent/child or sequential/parallel stages&lt;/td&gt;
&lt;td&gt;Stateful, inspectable workflows where control flow is part of the product&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Main caution&lt;/td&gt;
&lt;td&gt;A handoff can make ownership less obvious than a returned result&lt;/td&gt;
&lt;td&gt;Transfer and workflow-agent semantics are easy to conflate&lt;/td&gt;
&lt;td&gt;More explicit machinery means more design and state-management work&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  OpenAI Agents SDK: choose the ownership model deliberately
&lt;/h2&gt;

&lt;p&gt;OpenAI’s orchestration guidance separates &lt;strong&gt;agents as tools&lt;/strong&gt; from &lt;strong&gt;handoffs&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Use agents as tools when a manager should retain control. For example, a code-review manager can call a security specialist, a test specialist, and a documentation specialist, then reconcile their outputs. The manager owns the final answer and can enforce a common output contract.&lt;/p&gt;

&lt;p&gt;Use a handoff when the specialist should own the next response. A triage agent can transfer a repository task to a migration specialist, which then asks the user for missing version details or continues with its own tools.&lt;/p&gt;

&lt;p&gt;That distinction is useful for coding agents because “review this diff” and “continue this migration” are not the same job. The first often benefits from a bounded result. The second may require a specialist to take over a multi-turn interaction.&lt;/p&gt;

&lt;p&gt;A production guardrail follows from the docs: do not assume an input or output guardrail automatically surrounds every agent in a handoff chain. Put checks at the tool or workflow boundary when every side effect must be reviewed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Google ADK: hierarchy for delegation, workflow agents for pipelines
&lt;/h2&gt;

&lt;p&gt;Google ADK exposes two related but different ideas.&lt;/p&gt;

&lt;p&gt;A parent agent can transfer to a sub-agent when the sub-agent should handle the next interaction. That resembles a handoff: control moves down the hierarchy.&lt;/p&gt;

&lt;p&gt;For automated multi-step work, ADK provides workflow agents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SequentialAgent&lt;/strong&gt; runs children in a defined order.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ParallelAgent&lt;/strong&gt; runs independent children concurrently.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LoopAgent&lt;/strong&gt; repeats children until a termination condition or limit is reached.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes ADK a natural fit for a coding pipeline: collect repository context, run static analysis and tests in parallel, synthesize findings, then loop on repair-and-verify with a hard iteration limit.&lt;/p&gt;

&lt;p&gt;The important choice is whether a user-facing specialist should take over, or whether the application should complete a predictable pipeline. For the latter, a workflow agent is easier to reason about than an unconstrained chain of model-selected transfers.&lt;/p&gt;

&lt;h2&gt;
  
  
  LangGraph: make state and control flow explicit
&lt;/h2&gt;

&lt;p&gt;LangGraph treats the workflow as a graph. A node can call an agent, a tool, or ordinary application code. Conditional edges decide what runs next, and subgraphs encapsulate a specialist’s internal workflow.&lt;/p&gt;

&lt;p&gt;Its most useful distinction for multi-agent coding systems is state scope. A subgraph can share the parent’s message state, or use a different schema and keep a private history. The docs describe per-invocation persistence as the usual choice for independent subagent tasks, with per-thread persistence when a specialist needs memory across turns.&lt;/p&gt;

&lt;p&gt;That is more configuration than a basic handoff, but it answers questions that matter in production:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does the security reviewer remember the previous request?&lt;/li&gt;
&lt;li&gt;Which state is allowed to cross the boundary?&lt;/li&gt;
&lt;li&gt;Can a failed branch be inspected and resumed?&lt;/li&gt;
&lt;li&gt;Is a second invocation a fresh review or a continuation?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a coding agent with approvals, durable state, or multiple branches, those are part of the workflow contract.&lt;/p&gt;

&lt;h2&gt;
  
  
  A decision rule for developers
&lt;/h2&gt;

&lt;p&gt;Choose the smallest control model that makes failure modes visible:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Use a handoff&lt;/strong&gt; when one specialist should own the next user-facing turn.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use an agent-as-tool or bounded subagent&lt;/strong&gt; when a manager needs a typed result and must keep control.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use a sequential workflow&lt;/strong&gt; when order is fixed and each step depends on the previous output.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use parallel branches&lt;/strong&gt; when reviews are independent and can be reconciled later.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use a loop&lt;/strong&gt; only with an explicit exit condition, iteration cap, and verification step.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use a graph or durable workflow&lt;/strong&gt; when approvals, restarts, auditability, or state scope are core requirements.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ask: “If this specialist produces a dangerous suggestion, who is still responsible for deciding whether it becomes an action?” If the answer is unclear, the boundary is probably too implicit.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do now
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Draw the ownership boundary for every specialist: &lt;strong&gt;takes over&lt;/strong&gt; or &lt;strong&gt;returns a result&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Give each specialist a narrow output contract with findings, evidence, confidence, and recommended action.&lt;/li&gt;
&lt;li&gt;Keep side-effecting tools behind an approval or policy boundary. Do not let a reviewer silently become an executor.&lt;/li&gt;
&lt;li&gt;Add one failure test for each branch: timeout, malformed output, stale repository state, and rejected approval.&lt;/li&gt;
&lt;li&gt;Record the state crossing each boundary. A short trace is more useful than a vague “multi-agent” label.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you are measuring the system, track branch-selection accuracy, useful-result rate, review-to-action rate, tool failures, approval interventions, and cost per completed repository task. Framework choice alone will not tell you whether the workflow works.&lt;/p&gt;

&lt;h2&gt;
  
  
  Candid limitations
&lt;/h2&gt;

&lt;p&gt;The comparison reflects official documentation available on July 21, 2026. APIs and recommended patterns can change quickly. The frameworks do not expose identical abstractions, so row-by-row equivalence is approximate. I did not run the same repository task across all three, measure latency, or compare model quality. Real outcomes depend on model, prompts, tools, state store, concurrency limits, and evaluation quality.&lt;/p&gt;

&lt;p&gt;This is not an argument for using multiple agents by default. A single well-scoped coding agent with explicit tools and verification is often easier to test than a team of agents.&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/guides/agents/orchestration" rel="noopener noreferrer"&gt;OpenAI Agents SDK: orchestration and handoffs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://openai.github.io/openai-agents-python/handoffs/" rel="noopener noreferrer"&gt;OpenAI Agents SDK: handoffs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://google.github.io/adk-docs/agents/workflow-agents/" rel="noopener noreferrer"&gt;Google ADK: workflow agents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://codelabs.developers.google.com/codelabs/production-ready-ai-with-gc/3-developing-agents/build-a-multi-agent-system-with-adk" rel="noopener noreferrer"&gt;Google Codelab: build multi-agent systems with ADK&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.langchain.com/oss/python/langgraph/use-subgraphs" rel="noopener noreferrer"&gt;LangGraph: subgraphs and persistence&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the next layer of production detail, see Zira’s &lt;a href="https://dev.to/zira125/context-compaction-for-coding-agents-openai-vs-claude-vs-google-adk-8p1"&gt;context compaction comparison&lt;/a&gt;, &lt;a href="https://dev.to/zira125/tool-errors-are-not-retries-langchain-vs-openai-agents-sdk-vs-microsoft-agent-framework-4gk1"&gt;tool-error handling comparison&lt;/a&gt;, and &lt;a href="https://dev.to/zira125/swe-bench-vs-terminal-bench-vs-swe-atlas-what-coding-agent-scores-actually-mean-1ljf"&gt;coding-agent score guide&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Discussion:&lt;/strong&gt; In your coding-agent workflows, do you prefer specialists to take over the conversation, or return bounded results to a manager, and what failure made you choose that design?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>programming</category>
      <category>python</category>
    </item>
    <item>
      <title>SWE-bench vs Terminal-Bench vs SWE-Atlas: What Coding-Agent Scores Actually Mean</title>
      <dc:creator>Zira</dc:creator>
      <pubDate>Mon, 20 Jul 2026 21:47:30 +0000</pubDate>
      <link>https://dev.to/zira125/swe-bench-vs-terminal-bench-vs-swe-atlas-what-coding-agent-scores-actually-mean-1ljf</link>
      <guid>https://dev.to/zira125/swe-bench-vs-terminal-bench-vs-swe-atlas-what-coding-agent-scores-actually-mean-1ljf</guid>
      <description>&lt;p&gt;A coding agent can score well on one benchmark and still disappoint on your repository.&lt;/p&gt;

&lt;p&gt;That is not necessarily a contradiction. SWE-bench, Terminal-Bench, and SWE-Atlas ask different questions about software engineering. One centers on resolving an issue in a real repository. Another tests end-to-end work in a terminal sandbox. The third splits the engineering loop into codebase understanding, test writing, and refactoring.&lt;/p&gt;

&lt;p&gt;The practical lesson is simple: do not treat a benchmark score as a universal ranking. Match the benchmark to the failure mode you need to reduce.&lt;/p&gt;

&lt;h2&gt;
  
  
  The evaluation criteria
&lt;/h2&gt;

&lt;p&gt;I compared the three benchmark families on five criteria:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Primary task:&lt;/strong&gt; What is the agent actually asked to do?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Environment and tools:&lt;/strong&gt; Does it operate in a repository, a general terminal, or both?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Grading signal:&lt;/strong&gt; What counts as success: tests, a rubric, or another verifier?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What it reveals:&lt;/strong&gt; Which part of a developer workflow does the score illuminate?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Where it can mislead:&lt;/strong&gt; What should you not infer from the number?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is a documentation-based comparison checked against the maintainers' public documentation and papers on July 21, 2026. I did not run a common model, prompt, or harness across all three, so this is not a new head-to-head benchmark.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Benchmark&lt;/th&gt;
&lt;th&gt;Core question&lt;/th&gt;
&lt;th&gt;Typical success signal&lt;/th&gt;
&lt;th&gt;Best fit for&lt;/th&gt;
&lt;th&gt;Main blind spot&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SWE-bench&lt;/td&gt;
&lt;td&gt;Can an agent resolve a real GitHub issue?&lt;/td&gt;
&lt;td&gt;A generated patch passes the task's tests&lt;/td&gt;
&lt;td&gt;Issue fixing and patch generation&lt;/td&gt;
&lt;td&gt;It does not fully measure investigation, test design, or refactor completeness&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Terminal-Bench&lt;/td&gt;
&lt;td&gt;Can an agent complete a difficult end-to-end terminal task?&lt;/td&gt;
&lt;td&gt;A task-specific test script passes in a sandbox&lt;/td&gt;
&lt;td&gt;CLI-heavy, system, and multi-step work&lt;/td&gt;
&lt;td&gt;Broad terminal capability is not the same as repository maintenance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SWE-Atlas&lt;/td&gt;
&lt;td&gt;Can an agent understand, validate, and maintain a real codebase?&lt;/td&gt;
&lt;td&gt;Task-specific rubrics and resolve rates across three tracks&lt;/td&gt;
&lt;td&gt;Code comprehension, test writing, and refactoring&lt;/td&gt;
&lt;td&gt;Smaller, newer suite with rubric and judge-model dependencies&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The columns describe intended measurement, not a leaderboard ranking.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. SWE-bench: the issue-resolution test
&lt;/h2&gt;

&lt;p&gt;SWE-bench starts with a real software issue collected from GitHub, a codebase, and an expected patch. The agent must produce a change that resolves the issue. The official project describes Docker-based reproducible evaluation and multiple datasets, including SWE-bench, Lite, Verified, and Multimodal.&lt;/p&gt;

&lt;p&gt;That makes SWE-bench a useful first question for a coding agent:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Given an issue and a repository, can it make the existing tests pass with a plausible patch?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For an engineering team, this is closest to triaging a backlog of bug fixes or small feature requests. It is also a relatively concrete success condition: the patch is evaluated against tests rather than judged only by a prose answer.&lt;/p&gt;

&lt;h3&gt;
  
  
  What the score tells you
&lt;/h3&gt;

&lt;p&gt;A strong result is evidence that the evaluated model-plus-agent setup can navigate enough repository context to produce issue-resolving patches on that dataset. It is useful for comparing systems under the same split, scaffold, budget, and evaluation protocol.&lt;/p&gt;

&lt;h3&gt;
  
  
  What it does not tell you
&lt;/h3&gt;

&lt;p&gt;A passing patch does not prove that the agent:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;investigated the system deeply before editing;&lt;/li&gt;
&lt;li&gt;wrote the right new tests;&lt;/li&gt;
&lt;li&gt;removed every stale call site after a refactor;&lt;/li&gt;
&lt;li&gt;produced a maintainable change for your review standards; or&lt;/li&gt;
&lt;li&gt;will behave the same way on a private, newer, or differently structured repository.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is also a measurement-health caveat: benchmark contamination and memorization are active concerns for SWE-bench-style evaluations. Treat the dataset version and reporting date as part of the result, not as footnotes.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Terminal-Bench: the terminal-work test
&lt;/h2&gt;

&lt;p&gt;Terminal-Bench evaluates agents in real terminal environments. Its task suite includes work such as compiling code, training models, setting up servers, system administration, and security-oriented tasks. The project has two separable pieces: a dataset of tasks and an execution harness that connects an agent to a sandboxed terminal.&lt;/p&gt;

&lt;p&gt;Each task includes an English instruction, a test script, and a reference solution. That structure is valuable because the agent must perform a sequence of actions rather than emit a single patch. It can expose failures in command selection, environment setup, debugging loops, and operational persistence.&lt;/p&gt;

&lt;h3&gt;
  
  
  What the score tells you
&lt;/h3&gt;

&lt;p&gt;Terminal-Bench is a better lens than an issue-only benchmark when your agent has to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;install or configure dependencies;&lt;/li&gt;
&lt;li&gt;compile or run software;&lt;/li&gt;
&lt;li&gt;manipulate files and processes;&lt;/li&gt;
&lt;li&gt;diagnose failures from logs; or&lt;/li&gt;
&lt;li&gt;complete a multi-step CLI workflow.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is particularly relevant to agents that live in a terminal, CI runner, container, or remote development environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  What it does not tell you
&lt;/h3&gt;

&lt;p&gt;A terminal task can be completed successfully without demonstrating long-term codebase stewardship. Passing a server-setup or systems task does not imply the agent will understand a large application, write regression tests with strong assertions, or complete a broad refactor.&lt;/p&gt;

&lt;p&gt;The environment also matters enormously. Agent adapters, tool permissions, time limits, concurrency, model version, and container images can change the result. Comparing two numbers without those conditions is usually comparing configurations, not just models.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. SWE-Atlas: the engineering-loop test
&lt;/h2&gt;

&lt;p&gt;SWE-Atlas is designed to measure complementary capabilities across the software development cycle rather than collapse everything into issue resolution. Its public repository and Scale's overview describe three tracks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Codebase QnA:&lt;/strong&gt; understand a complex repository through runtime analysis and multi-file reasoning;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test Writing:&lt;/strong&gt; identify the right tests for important behavior and follow repository conventions; and&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Refactoring:&lt;/strong&gt; restructure code while preserving behavior, updating consumers, cleaning up stale code, and keeping documentation aligned.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This framing makes SWE-Atlas useful for a question that patch benchmarks often leave implicit:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can the agent do the investigative and maintenance work around a code change, not just produce a patch that passes existing tests?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The suite contains 284 tasks across its three tracks, according to Scale's overview. The Codebase QnA track uses real repositories and task-specific rubrics. The Test Writing track cares about whether tests catch meaningful behavior, not simply how many test files the agent adds. Refactoring evaluates multi-file changes and completeness in addition to test preservation.&lt;/p&gt;

&lt;h3&gt;
  
  
  What the score tells you
&lt;/h3&gt;

&lt;p&gt;SWE-Atlas can reveal different weaknesses in agents that look similar on issue resolution:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;shallow repository exploration;&lt;/li&gt;
&lt;li&gt;answers that sound plausible but lack runtime evidence;&lt;/li&gt;
&lt;li&gt;tests that pass while asserting too little; and&lt;/li&gt;
&lt;li&gt;refactors that leave missed call sites or dead code behind.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That makes it a strong complement to SWE-bench for teams building review, migration, or maintenance workflows.&lt;/p&gt;

&lt;h3&gt;
  
  
  What it does not tell you
&lt;/h3&gt;

&lt;p&gt;SWE-Atlas is not a complete production simulation. Its tasks, repositories, rubrics, judge model, and harness still define the measurement. A rubric-graded task can introduce evaluator variance, while a benchmark with a fixed task set cannot represent every language, architecture, security policy, or organizational workflow.&lt;/p&gt;

&lt;p&gt;The suite is also newer and smaller than the most established issue-resolution benchmarks. Use it as a diagnostic signal, not a definitive industry-wide ranking.&lt;/p&gt;

&lt;h2&gt;
  
  
  The most important distinction: model versus agent setup
&lt;/h2&gt;

&lt;p&gt;These benchmarks measure more than a base model. They measure a model operating through an agent scaffold, tools, prompts, permissions, context limits, and execution environment.&lt;/p&gt;

&lt;p&gt;That distinction is easy to lose in leaderboard tables. The same model can explore more effectively with a native coding-agent scaffold than with a generic harness. Conversely, a benchmark result from a highly optimized scaffold may not predict what you get from a minimal internal wrapper.&lt;/p&gt;

&lt;p&gt;When reading a result, record at least:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;model and exact version;&lt;/li&gt;
&lt;li&gt;agent or scaffold;&lt;/li&gt;
&lt;li&gt;benchmark name, split, and version;&lt;/li&gt;
&lt;li&gt;token, time, and step budgets;&lt;/li&gt;
&lt;li&gt;tool permissions and network policy;&lt;/li&gt;
&lt;li&gt;number of trials and pass definition; and&lt;/li&gt;
&lt;li&gt;whether grading is test-based, rubric-based, or judge-model-based.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the benchmark equivalent of keeping a trace rather than trusting a final “done” message. I use the same principle in &lt;a href="https://dev.to/zira125/stop-replaying-coding-agent-bugs-by-hand-turn-traces-into-regression-tests-1h4o"&gt;turning coding-agent traces into regression tests&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical decision rule
&lt;/h2&gt;

&lt;p&gt;Choose the benchmark that matches the work you want to delegate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Backlog issue resolution:&lt;/strong&gt; start with SWE-bench-style evaluation, then inspect patch quality and hidden-test behavior.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Terminal and infrastructure automation:&lt;/strong&gt; use Terminal-Bench-style tasks with your actual permission and network model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maintenance-heavy engineering:&lt;/strong&gt; add SWE-Atlas-style codebase QnA, test-writing, and refactoring tasks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Long-running agents:&lt;/strong&gt; evaluate repeated trials, not just one successful run. Reliability matters as much as peak capability.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Production rollout:&lt;/strong&gt; build a private holdout set from your repositories. Public benchmarks are a calibration tool, not a substitute for internal acceptance tests.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do not ask one benchmark to answer all five questions. A compact internal eval can combine one issue fix, one debugging task, one codebase explanation, one test-writing task, and one refactor, each with a clear rubric and a reviewable trace.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do now
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Pick one real workflow you want to delegate, such as bug fixes, dependency upgrades, or test maintenance.&lt;/li&gt;
&lt;li&gt;Map it to the closest benchmark lens: issue resolution, terminal execution, or engineering-loop quality.&lt;/li&gt;
&lt;li&gt;Re-run a small private holdout with the exact agent scaffold and permissions you plan to use.&lt;/li&gt;
&lt;li&gt;Score more than completion: include test quality, diff scope, investigation evidence, cleanup, cost, latency, and reviewer rework.&lt;/li&gt;
&lt;li&gt;Repeat each task at least three times. Track pass rate and consistency separately.&lt;/li&gt;
&lt;li&gt;Keep benchmark version, model version, and harness configuration beside every result.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For long-running work, context strategy is another variable worth recording. My &lt;a href="https://dev.to/zira125/context-compaction-for-coding-agents-openai-vs-claude-vs-google-adk-8p1"&gt;context-compaction comparison for coding agents&lt;/a&gt; covers why a long context window alone does not guarantee durable task state.&lt;/p&gt;

&lt;h2&gt;
  
  
  Candid limitations
&lt;/h2&gt;

&lt;p&gt;This comparison uses public documentation and research descriptions, not a controlled run. Benchmark versions and leaderboards change. The tasks are not interchangeable, and scores should not be averaged into a single “best coding agent” number. Some evaluation details, especially around scaffolds and judge models, can materially affect outcomes. Finally, passing a benchmark is evidence of capability under a protocol, not proof of safe autonomous production behavior.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.swebench.com/SWE-bench" rel="noopener noreferrer"&gt;SWE-bench official overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/harbor-framework/terminal-bench" rel="noopener noreferrer"&gt;Terminal-Bench repository and task format&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://arxiv.org/html/2601.11868v1" rel="noopener noreferrer"&gt;Terminal-Bench paper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/scaleapi/SWE-Atlas" rel="noopener noreferrer"&gt;SWE-Atlas repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://scale.com/blog/swe-atlas-complete" rel="noopener noreferrer"&gt;SWE-Atlas overview from Scale&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://arxiv.org/html/2605.08366v1" rel="noopener noreferrer"&gt;SWE-Atlas paper&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Discussion
&lt;/h2&gt;

&lt;p&gt;Which benchmark signal has been most predictive in your own coding-agent workflow: issue resolution, terminal execution, or engineering-loop quality?&lt;/p&gt;

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