<?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: Akash Das</title>
    <description>The latest articles on DEV Community by Akash Das (@akashdas).</description>
    <link>https://dev.to/akashdas</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%2F244231%2Ff7b5c02d-424b-4a7e-8ea1-380102cdd182.png</url>
      <title>DEV Community: Akash Das</title>
      <link>https://dev.to/akashdas</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/akashdas"/>
    <language>en</language>
    <item>
      <title>A pre-flight checklist for shipping a Claude connector</title>
      <dc:creator>Akash Das</dc:creator>
      <pubDate>Sat, 22 Aug 2026 18:46:58 +0000</pubDate>
      <link>https://dev.to/akashdas/a-pre-flight-checklist-for-shipping-a-claude-connector-56oc</link>
      <guid>https://dev.to/akashdas/a-pre-flight-checklist-for-shipping-a-claude-connector-56oc</guid>
      <description>&lt;p&gt;Writing an MCP server is the easy part. Shipping one as a Claude connector means passing four gates that have nothing to do with your business logic: Anthropic's network can reach you, Claude can get an OAuth client identity, a human reviewer approves your tool design, and your server does not waste the user's context window.&lt;/p&gt;

&lt;p&gt;Here is the checklist I wish I had had, in the order the failures actually happen.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gate 1 — Can Anthropic's infrastructure reach you?
&lt;/h3&gt;

&lt;p&gt;Claude connects from Anthropic's servers, not from your laptop. So the tests you run at your desk prove almost nothing. Run these from a network that is not yours:&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;# Every returned address must be globally routable.&lt;/span&gt;
&lt;span class="c"&gt;# Any 10.x, 172.16–31.x, 192.168.x, 100.64.x, loopback or link-local&lt;/span&gt;
&lt;span class="c"&gt;# address in the answer kills the connection before an HTTP request is sent.&lt;/span&gt;
dig +short your-server.example.com

&lt;span class="c"&gt;# Connectors are IPv4-only. Empty first line + populated second line = the bug.&lt;/span&gt;
dig +short A    your-server.example.com
dig +short AAAA your-server.example.com

&lt;span class="c"&gt;# A 301/302/307/308 to a different host strips the Authorization header&lt;/span&gt;
&lt;span class="c"&gt;# (RFC 9110 §15.4). The target answers 401 and Claude reports an auth failure.&lt;/span&gt;
curl &lt;span class="nt"&gt;-sSI&lt;/span&gt; https://your-server.example.com/mcp | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s1"&gt;'^location:'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Checks:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] DNS answer contains only public addresses, from outside your network&lt;/li&gt;
&lt;li&gt;[ ] An A record exists, not just AAAA&lt;/li&gt;
&lt;li&gt;[ ] The MCP URL does not cross-host redirect&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your access log is empty while Claude says &lt;em&gt;Couldn't reach the MCP server&lt;/em&gt;, one of those three is why. Full teardown of all four documented causes: &lt;a href="https://www.nihardaily.com/posts/claude-cannot-reach-your-mcp-server-but-curl-can" rel="noopener noreferrer"&gt;Claude cannot reach your MCP server, but curl can&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For local development, tunnel instead of fighting this: &lt;code&gt;cloudflared tunnel --url http://localhost:3000&lt;/code&gt; or &lt;code&gt;ngrok http 3000&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gate 2 — Can Claude get an OAuth client ID?
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Incompatible auth server: does not support dynamic client registration
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The obvious fix is the wrong one for most public connectors. Dynamic Client Registration mints a fresh OAuth client on &lt;strong&gt;every new connection&lt;/strong&gt; — that is a row per connection, not per customer, so a busy connector slowly fills your identity provider with junk clients.&lt;/p&gt;

&lt;p&gt;Claude accepts three ways of getting an identity:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;What you host&lt;/th&gt;
&lt;th&gt;Good fit for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;oauth_dcr&lt;/code&gt; (RFC 7591)&lt;/td&gt;
&lt;td&gt;a &lt;code&gt;POST /register&lt;/code&gt; endpoint&lt;/td&gt;
&lt;td&gt;internal servers, few users&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;oauth_cimd&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;a static JSON document at an HTTPS URL&lt;/td&gt;
&lt;td&gt;public connectors, high traffic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;oauth_anthropic_creds&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;nothing new — you mail Anthropic a client ID and secret&lt;/td&gt;
&lt;td&gt;teams who cannot change their IdP&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The CIMD trap is worth memorising, because it fails silently. Claude picks CIMD only when your metadata says &lt;strong&gt;both&lt;/strong&gt; of these:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"client_id_metadata_document_supported"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"token_endpoint_auth_methods_supported"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"none"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Miss the second and Claude falls back to dynamic registration, and then fails with the error above even though your CIMD is fine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Checks:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Metadata advertises both CIMD fields, if you are using CIMD&lt;/li&gt;
&lt;li&gt;[ ] &lt;code&gt;registration_endpoint&lt;/code&gt; is &lt;em&gt;omitted&lt;/em&gt;, not set to &lt;code&gt;null&lt;/code&gt; — &lt;code&gt;null&lt;/code&gt; fails schema validation rather than being ignored&lt;/li&gt;
&lt;li&gt;[ ] You have decided DCR vs CIMD on expected connection volume, not on which error message you saw first&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Comparison of the three methods and when each one is right: &lt;a href="https://www.nihardaily.com/posts/claude-cannot-register-with-your-oauth-server-now-what" rel="noopener noreferrer"&gt;Claude cannot register with your OAuth server. Now what?&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gate 3 — Will directory review reject your tool design?
&lt;/h3&gt;

&lt;p&gt;This one has an automatic-fail that a lot of servers ship on day one:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json-doc"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Rejected. One tool, safe and unsafe methods in the same surface.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"api_request"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"inputSchema"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"properties"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"method"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"enum"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"GET"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"POST"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"DELETE"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Read and write must be separate tools, and writes should be split further by action where you can — create, update, delete. No description text saves the combined version.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Checks:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] You are on a Team or Enterprise plan (the portal is in Claude.ai org settings; individual plans cannot submit at all)&lt;/li&gt;
&lt;li&gt;[ ] No tool accepts both safe and unsafe HTTP methods&lt;/li&gt;
&lt;li&gt;[ ] Freeform query tools name or link the target API in their description — "Queries the Slack Web API" passes, "Makes a request to the API" fails&lt;/li&gt;
&lt;li&gt;[ ] Every tool has a title plus &lt;code&gt;readOnlyHint: true&lt;/code&gt; or &lt;code&gt;destructiveHint: true&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;[ ] Every tool name is 64 characters or fewer&lt;/li&gt;
&lt;li&gt;[ ] No description tells Claude what to do, calls other software, or embeds hidden or encoded text&lt;/li&gt;
&lt;li&gt;[ ] Privacy policy is real, not a stub — a thin one is an instant fail for local connectors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those hints are not paperwork. They drive auto-permissions, so read-only tools can run without prompting each time. Skip them and your connector is both non-compliant and slower to use. The rest of the rejection triggers: &lt;a href="https://www.nihardaily.com/posts/what-gets-a-claude-connector-rejected-from-the-directory" rel="noopener noreferrer"&gt;What gets a Claude connector rejected from the directory&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gate 4 — What does your connector cost the context window?
&lt;/h3&gt;

&lt;p&gt;Stop splitting servers to save context. Tool search ships on by default in Claude Code: only tool names and server instructions load at session start, and full schemas arrive on demand. Anthropic's reference says adding more servers has minimal impact on the window, with no fixed per-server tool cap.&lt;/p&gt;

&lt;p&gt;What still costs you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Each tool description and each server instructions block is truncated at 2KB&lt;/li&gt;
&lt;li&gt;Tool output warns above 10,000 tokens and is capped at 25,000 by default (raise with &lt;code&gt;MAX_MCP_OUTPUT_TOKENS&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Deferral turns off entirely under several conditions, including &lt;code&gt;ANTHROPIC_BASE_URL&lt;/code&gt; on a non-first-party host — so a team gateway silently restores the old up-front cost&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can also opt one server out on purpose:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"core-tools"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://mcp.example.com/mcp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"alwaysLoad"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Checks:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Descriptions and instructions fit in 2KB, before truncation picks the cut for you&lt;/li&gt;
&lt;li&gt;[ ] Large tool results are paginated or filtered server-side, not dumped&lt;/li&gt;
&lt;li&gt;[ ] You know whether your org's gateway config is disabling tool search&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The full table of conditions that keep tools loading up front: &lt;a href="https://www.nihardaily.com/posts/your-mcp-connector-spends-context-before-you-type" rel="noopener noreferrer"&gt;Your MCP connector spends context before you type&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Optional gate — should it draw a UI at all?
&lt;/h3&gt;

&lt;p&gt;MCP Apps is the first official MCP extension: your server returns interactive HTML, the client renders it in a sandboxed iframe, and the page talks back over JSON-RPC on &lt;code&gt;postMessage&lt;/code&gt;. Claude, ChatGPT, VS Code and Goose all render it, so it is portable rather than a single-vendor bet.&lt;/p&gt;

&lt;p&gt;Worth it when the result is genuinely visual — a brushable scatter chart, a map, compiled shader output. Not worth it when your tool returns three fields. Directory submission for an MCP App also wants 3 to 5 PNG screenshots at 1000px or wider, and any link destination missing from your allowed link URIs makes the user confirm every click.&lt;/p&gt;

&lt;p&gt;Run an example server locally first; it takes about five minutes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"qr"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@modelcontextprotocol/qr-server"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"--stdio"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The build-vs-skip trade-off in full: &lt;a href="https://www.nihardaily.com/posts/should-your-claude-connector-draw-its-own-ui" rel="noopener noreferrer"&gt;Should your Claude connector draw its own UI?&lt;/a&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  TL;DR
&lt;/h3&gt;

&lt;p&gt;Four of the five ways a connector fails are environmental, not logical — network reachability, client identity, review criteria, and client-side budget. Your code being correct is exactly what makes them hard to find. Run the &lt;code&gt;dig&lt;/code&gt; checks from outside your network, choose CIMD if you expect volume, split read from write before you submit, and stop hand-optimising a context cost the client already handles.&lt;/p&gt;

&lt;p&gt;What has bitten you shipping an MCP server? The redirect-strips-the-token one cost me the most time.&lt;/p&gt;

</description>
      <category>api</category>
      <category>claude</category>
      <category>llm</category>
      <category>mcp</category>
    </item>
    <item>
      <title>Five agent engineering problems, with the numbers behind them</title>
      <dc:creator>Akash Das</dc:creator>
      <pubDate>Wed, 19 Aug 2026 19:52:00 +0000</pubDate>
      <link>https://dev.to/akashdas/five-agent-engineering-problems-with-the-numbers-behind-them-3ol7</link>
      <guid>https://dev.to/akashdas/five-agent-engineering-problems-with-the-numbers-behind-them-3ol7</guid>
      <description>&lt;p&gt;The agent conversation on Reddit and in GitHub issues has moved. A year ago it was "what can agents do". Now it is "why does mine call the same tool nineteen times", and "what happens to my threads on August 26".&lt;/p&gt;

&lt;p&gt;Here are five problems that keep coming up, each with the specific fact I had to dig out to answer it. Every one of them has a number attached, because "it depends" is not an answer you can ship.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Your agent loops because &lt;code&gt;tool_choice&lt;/code&gt; sticks
&lt;/h2&gt;

&lt;p&gt;The advice everyone gives is to set &lt;code&gt;max_iterations&lt;/code&gt;. That caps your bill. It does not fix the bug.&lt;/p&gt;

&lt;p&gt;When you set &lt;code&gt;tool_choice&lt;/code&gt; to &lt;code&gt;required&lt;/code&gt; or to a named function, that setting &lt;strong&gt;persists across model calls&lt;/strong&gt;. Your framework runs the tool, sends the result back, and the same forced setting rides along. The model is told again that it must call a tool. It obeys. That is the loop.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://github.com/openai/openai-agents-python/pull/263" rel="noopener noreferrer"&gt;merged fix in openai-agents-python&lt;/a&gt; resets &lt;code&gt;tool_choice&lt;/code&gt; to &lt;code&gt;auto&lt;/code&gt; after tool execution. So step one is upgrade, not guardrail code.&lt;/p&gt;

&lt;p&gt;Step two is the part almost nobody does. A loop is not "many calls" — it is &lt;strong&gt;the same call&lt;/strong&gt;. &lt;a href="https://github.com/oracle/langchain-oracle/pull/50" rel="noopener noreferrer"&gt;Oracle's langchain-oracle patch&lt;/a&gt; detects repeats by matching the tool name &lt;em&gt;and identical arguments&lt;/em&gt; in succession, with a &lt;code&gt;max_sequential_tool_calls&lt;/code&gt; backstop defaulting to 8. Their earlier fix had set &lt;code&gt;tool_choice&lt;/code&gt; to &lt;code&gt;none&lt;/code&gt; after any tool result, which stopped loops and also broke a four-step diagnostic agent after its first call.&lt;/p&gt;

&lt;p&gt;An iteration counter cannot tell a six-step workflow from a six-step loop. Argument identity can.&lt;/p&gt;

&lt;p&gt;Full breakdown: &lt;a href="https://www.nihardaily.com/posts/your-agent-loops-forever-it-is-probably-toolchoice" rel="noopener noreferrer"&gt;Your agent loops forever. It is probably tool_choice.&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. The Assistants API shuts down on August 26, and your threads do not move
&lt;/h2&gt;

&lt;p&gt;If you are still on &lt;code&gt;/v1/threads&lt;/code&gt;, you have days, not months. &lt;a href="https://developers.openai.com/api/docs/deprecations" rel="noopener noreferrer"&gt;OpenAI's deprecations page&lt;/a&gt; sets removal at &lt;strong&gt;August 26, 2026&lt;/strong&gt;, one year after the notice. No degraded mode, no grace period.&lt;/p&gt;

&lt;p&gt;The migration itself is small. Assistant becomes Prompt, Thread becomes Conversation, Run becomes Response, Run step becomes Item, and the create-then-poll loop collapses into a single &lt;code&gt;responses.create&lt;/code&gt; call.&lt;/p&gt;

&lt;p&gt;The part that bites is one sentence in &lt;a href="https://developers.openai.com/api/docs/assistants/migration" rel="noopener noreferrer"&gt;the migration guide&lt;/a&gt;: OpenAI &lt;strong&gt;will not provide an automated tool&lt;/strong&gt; for migrating Threads to Conversations. If your product shows chat history, that history is user-visible data sitting on someone else's server behind an endpoint that stops answering.&lt;/p&gt;

&lt;p&gt;Export the raw JSON this week even if you have not chosen a target format. Exported data can wait; deleted data cannot.&lt;/p&gt;

&lt;p&gt;Two things that surprised me: vector stores and files survive the cutover and just need &lt;code&gt;vector_store_ids&lt;/code&gt; passed to the file search tool — but thread-created stores expire &lt;strong&gt;seven days&lt;/strong&gt; after last use, so half of them are already gone. And Azure lands on the same date with a &lt;em&gt;different&lt;/em&gt; destination: &lt;a href="https://learn.microsoft.com/en-us/azure/foundry-classic/openai/how-to/file-search" rel="noopener noreferrer"&gt;Microsoft's docs&lt;/a&gt; point Azure users to Foundry Agents, not to the Responses API.&lt;/p&gt;

&lt;p&gt;Full breakdown: &lt;a href="https://www.nihardaily.com/posts/the-assistants-api-shuts-down-august-26-port-it-now" rel="noopener noreferrer"&gt;The Assistants API shuts down August 26. Port it now.&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. AutoGen is in maintenance mode, and the port is a redesign
&lt;/h2&gt;

&lt;p&gt;Straight from &lt;a href="https://github.com/microsoft/autogen" rel="noopener noreferrer"&gt;the AutoGen README&lt;/a&gt;: "AutoGen is now in maintenance mode. It will not receive new features or enhancements and is community managed going forward."&lt;/p&gt;

&lt;p&gt;Microsoft Agent Framework is the successor, built by the same teams as a merge of AutoGen and Semantic Kernel. Single agents port in an afternoon. Multi-agent teams do not, because AutoGen's event-driven &lt;code&gt;Team&lt;/code&gt; becomes a typed, graph-based &lt;code&gt;Workflow&lt;/code&gt; with edges you declare. You redraw the flow rather than translating it.&lt;/p&gt;

&lt;p&gt;Two changes throw no errors at all. &lt;code&gt;Agent&lt;/code&gt; is stateless and keeps no history between calls, unlike &lt;code&gt;AssistantAgent&lt;/code&gt; — your code runs, your agent forgets the last turn, and you attach &lt;code&gt;AgentSession&lt;/code&gt; to fix it. And agents now keep calling tools until the job is done rather than stopping at a count you set, which is friendlier for simple tasks and harder to price.&lt;/p&gt;

&lt;p&gt;Check your model providers before planning anything. Microsoft's own pages disagree: &lt;a href="https://learn.microsoft.com/en-us/agent-framework/migration-guide/from-autogen/" rel="noopener noreferrer"&gt;the migration guide&lt;/a&gt; lists Anthropic and Ollama clients as planned, while &lt;a href="https://learn.microsoft.com/en-us/agent-framework/overview/" rel="noopener noreferrer"&gt;the newer overview page&lt;/a&gt; lists both as supported. Run a spike against your actual provider before you commit a sprint.&lt;/p&gt;

&lt;p&gt;Full breakdown: &lt;a href="https://www.nihardaily.com/posts/autogen-is-in-maintenance-mode-where-to-migrate-now" rel="noopener noreferrer"&gt;AutoGen is in maintenance mode. Where to migrate now.&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Memory and prompt caching pull against each other
&lt;/h2&gt;

&lt;p&gt;Agent memory gets treated as a storage question — pick a vector store, summarize when the window fills. That misses the bill.&lt;/p&gt;

&lt;p&gt;Caching is a &lt;strong&gt;prefix match&lt;/strong&gt;. Memory wants to live high in the prompt, next to the system instructions, which is the most expensive place in the request to edit. &lt;a href="https://platform.claude.com/docs/en/build-with-claude/prompt-caching" rel="noopener noreferrer"&gt;Anthropic's caching reference&lt;/a&gt; puts numbers on it: cache reads cost 0.1x base input, five-minute writes 1.25x, one-hour writes 2x. Swapping a read for a five-minute write is &lt;strong&gt;12.5x the cost for the same tokens&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;There is also a floor nobody mentions. The minimum cacheable prefix is 512 tokens on Opus 5, 1,024 on Sonnet 5, and 4,096 on Haiku 4.5. Fall short and nothing errors — the request just is not cached, and you learn about it from the invoice. That is exactly why routing cheap background summarization to a small model so often fails to help.&lt;/p&gt;

&lt;p&gt;The other useful distinction: clearing is not summarizing. &lt;a href="https://platform.claude.com/docs/en/build-with-claude/context-editing" rel="noopener noreferrer"&gt;Context editing&lt;/a&gt; drops old tool results in order and swaps in placeholders, defaulting to a 100,000-token trigger while keeping the last three tool uses. It costs no extra model call and keeps the conversation shape. Compaction spends a call, rewrites history into prose, and permanently loses whatever the summarizer judged unimportant. For a tool-heavy agent, the bulk is old tool output — clear that first.&lt;/p&gt;

&lt;p&gt;Full breakdown: &lt;a href="https://www.nihardaily.com/posts/agent-memory-that-does-not-wreck-your-prompt-cache" rel="noopener noreferrer"&gt;Agent memory that does not wreck your prompt cache&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Your end-to-end eval hides the regression
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.langchain.com/state-of-agent-engineering" rel="noopener noreferrer"&gt;LangChain's State of Agent Engineering survey&lt;/a&gt; (1,340 responses, late 2025) found 89% of organizations have agent observability and 52.4% run offline evals. Most teams can watch the failure and cannot catch it first.&lt;/p&gt;

&lt;p&gt;The interesting part is &lt;em&gt;why&lt;/em&gt; the teams with a gate still miss things. A &lt;a href="https://arxiv.org/abs/2606.11686" rel="noopener noreferrer"&gt;June 2026 paper on layer-isolated evaluation&lt;/a&gt; broke one agent layer at a time and watched the metrics. The aggregate pass rate moved &lt;strong&gt;1.7 to 5.9 percentage points&lt;/strong&gt;. The test slice matching the broken layer moved &lt;strong&gt;25 to 91 points&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Read that as a release gate. Break your routing layer and an end-to-end suite reports a couple of points of noise — you would approve that ship. Sliced by layer, it screams.&lt;/p&gt;

&lt;p&gt;The cheap fix is that much of an agent is ordinary software. Routing rules, schema validation, escalation thresholds, memory writes: none of it is non-deterministic. The same paper's suite is 238 cases across 23 slices, 225 of them running in &lt;strong&gt;2.39 seconds&lt;/strong&gt; with no model calls at all. Build that layer first and save the judge for what needs it.&lt;/p&gt;

&lt;p&gt;And if you do use a judge, calibrate per comparison. &lt;a href="https://arxiv.org/abs/2605.06939" rel="noopener noreferrer"&gt;A May 2026 study&lt;/a&gt; shows that sharing one calibration across the models you are comparing can reverse the sign of the result — you ship the worse agent while the report says you shipped the better one.&lt;/p&gt;

&lt;p&gt;Full breakdown: &lt;a href="https://www.nihardaily.com/posts/89-watch-agents-fail-only-half-test-before-shipping" rel="noopener noreferrer"&gt;89% watch agents fail. Only half test before shipping.&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The thread that connects them
&lt;/h2&gt;

&lt;p&gt;Four of these five are the same shape: a default changed, or a setting persisted, and nothing threw an error. Sticky &lt;code&gt;tool_choice&lt;/code&gt;, a stateless &lt;code&gt;Agent&lt;/code&gt;, an uncached prefix, an averaged-away regression. Agents fail quietly far more often than they crash, which is why the fixes are mostly about making the failure visible rather than making the model smarter.&lt;/p&gt;

&lt;p&gt;If you have hit one of these and solved it differently, I would genuinely like to hear it — the argument-identity loop check in particular feels like something more frameworks should ship by default.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>programming</category>
      <category>devops</category>
    </item>
    <item>
      <title>Five developer deadlines in August 2026: Copilot credits, Rust 1.98, TypeScript 7</title>
      <dc:creator>Akash Das</dc:creator>
      <pubDate>Tue, 18 Aug 2026 02:40:45 +0000</pubDate>
      <link>https://dev.to/akashdas/five-developer-deadlines-in-august-2026-copilot-credits-rust-198-typescript-7-1pbh</link>
      <guid>https://dev.to/akashdas/five-developer-deadlines-in-august-2026-copilot-credits-rust-198-typescript-7-1pbh</guid>
      <description>&lt;p&gt;Five things changed for developers in the last two weeks, and four of them have a date attached. Here is the short version of each, with the full write-up linked.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Stripe is buying OpenRouter for more than $7 billion
&lt;/h2&gt;

&lt;p&gt;Bloomberg reported the finalized deal on August 16, 2026 — roughly 5.4x the $1.3 billion valuation OpenRouter carried in May. The gateway adds no markup to inference; it charges 5.5% on card credit purchases and 5% on BYOK usage above the monthly allowance. So the question is not "is it expensive", it is "who owns the meter now".&lt;/p&gt;

&lt;p&gt;Full breakdown, including when a direct provider key beats the gateway: &lt;a href="https://www.nihardaily.com/posts/stripe-bought-openrouter-should-you-still-route-through-it" rel="noopener noreferrer"&gt;Stripe bought OpenRouter. Should you still route through it?&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. GitHub Copilot's promotional credits end August 31
&lt;/h2&gt;

&lt;p&gt;Business pools drop from 3,000 credits per user to 1,900. Enterprise drops from 7,000 to 3,900. One credit is $0.01, so a 50-seat Business org loses $550 a month of included usage and a 200-seat Enterprise org loses $6,200 — with no change in how anyone works.&lt;/p&gt;

&lt;p&gt;Worked numbers plus the budget controls that are off by default: &lt;a href="https://www.nihardaily.com/posts/copilots-bonus-credits-end-august-31-what-breaks-then" rel="noopener noreferrer"&gt;Copilot's bonus credits end August 31. What breaks then?&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. TypeScript 7 is fast, but half the ecosystem cannot use it
&lt;/h2&gt;

&lt;p&gt;The Go compiler landed on July 8, 2026 with 8x to 12x faster full builds — VS Code went from 125.7s to 10.6s. There is no stable programmatic API in 7.0, so typescript-eslint, ts-jest, ts-morph and the template checkers behind Vue, Svelte, Astro and Angular are stuck on TypeScript 6 until 7.1.&lt;/p&gt;

&lt;p&gt;The staged upgrade that works today: &lt;a href="https://www.nihardaily.com/posts/typescript-7-is-10x-faster-can-your-project-use-it" rel="noopener noreferrer"&gt;TypeScript 7 is 10x faster. Can your project use it?&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Python 3.15 hit rc1, and free-threading finally has a stable ABI
&lt;/h2&gt;

&lt;p&gt;3.15.0rc1 shipped August 4, 2026, with no further ABI changes before the October 1 final. PEP 803 gives free-threaded builds a stable ABI, which is what makes C extension wheels practical. It still costs 1% to 8% of single-threaded performance, and it is still not the default build.&lt;/p&gt;

&lt;p&gt;Which workloads actually gain, and how to test it in an afternoon: &lt;a href="https://www.nihardaily.com/posts/python-315-hits-rc1-is-free-threading-ready-yet" rel="noopener noreferrer"&gt;Python 3.15 hits rc1. Is free-threading ready yet?&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Rust 1.98 lands August 20, and one change can break crates
&lt;/h2&gt;

&lt;p&gt;The new fast path for &lt;code&gt;derive(PartialOrd)&lt;/code&gt; when &lt;code&gt;Ord&lt;/code&gt; is derived can change behaviour for types whose two ordering implementations disagree. Nothing fails to compile; your sort order moves.&lt;/p&gt;

&lt;p&gt;Also worth correcting: several write-ups claim &lt;code&gt;c_variadic&lt;/code&gt; ships in 1.98. The stabilization PR carries the &lt;strong&gt;1.99.0&lt;/strong&gt; milestone and was merged after 1.98 branched, so it is the release after this one.&lt;/p&gt;

&lt;p&gt;Ten-minute check for your workspace: &lt;a href="https://www.nihardaily.com/posts/rust-198-lands-august-20-one-change-can-break-crates" rel="noopener noreferrer"&gt;Rust 1.98 lands August 20. One change can break crates.&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Two of these have hard deadlines this month — Copilot on August 31 and Rust on August 20. The other three are decisions you can take at your own pace, as long as you take them deliberately.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>news</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Your AI Agent Bought the Wrong Thing. Who Pays?</title>
      <dc:creator>Akash Das</dc:creator>
      <pubDate>Sun, 16 Aug 2026 09:54:23 +0000</pubDate>
      <link>https://dev.to/akashdas/your-ai-agent-bought-the-wrong-thing-who-pays-2jkn</link>
      <guid>https://dev.to/akashdas/your-ai-agent-bought-the-wrong-thing-who-pays-2jkn</guid>
      <description>&lt;p&gt;Browsers and chat apps are now happy to hand an AI agent your payment details and let it check out on your behalf. Nobody has told you what happens when the agent buys the wrong running shoes, buys two of them, or misses a price that changed between the search and the purchase. Regulators have not answered that question either — but the payments rules that already exist answer a narrower and more useful one: your protection depends almost entirely on which card you attached. Debit falls under a rule written on the assumption a human pressed the button. Credit falls under a rule with a broader definition of authority and a dispute right that survives an agent's mistake. Attach the credit card.&lt;/p&gt;

&lt;h2&gt;
  
  
  The rule everyone is arguing about was written for humans
&lt;/h2&gt;

&lt;p&gt;In the US, debit and bank-account transfers fall under Regulation E, which implements the Electronic Fund Transfer Act. Regulation E hangs everything on one distinction: was the transfer &lt;em&gt;authorized&lt;/em&gt; or &lt;em&gt;unauthorized&lt;/em&gt;? An unauthorized electronic fund transfer is one initiated by a person other than the consumer without actual authority to initiate it, which in practice turns on demonstrable consent.&lt;/p&gt;

&lt;p&gt;Now run an agent through that definition. You told an agent to find and buy the best deal on running shoes. It bought a pair you did not want, at a price you would not have accepted. You consented to the shopping. You did not consent to that purchase. Is it authorized?&lt;/p&gt;

&lt;p&gt;Nobody knows. Legal analyses through 2026 keep landing on the same word — unresolved — because Regulation E never contemplated a consumer delegating open-ended purchasing authority to software. The Consumer Bankers Association asked regulators in January 2026 to work through exactly this with the industry, covering dispute resolution and liability where agent-driven transactions cause financial harm. As of August 2026 no rule has arrived.&lt;/p&gt;

&lt;p&gt;That uncertainty is not neutral. When a consumer protection rule is ambiguous, the consumer is the party who finds out how it resolves by spending months arguing with a bank.&lt;/p&gt;

&lt;h2&gt;
  
  
  Credit cards sit under a friendlier rule
&lt;/h2&gt;

&lt;p&gt;Consumer credit cards fall under the Truth in Lending Act and Regulation Z, and the standard there is different in two ways that both help you.&lt;/p&gt;

&lt;p&gt;First, authority is defined broadly. Card use is authorized when the person who initiated it had actual, implied or &lt;strong&gt;apparent&lt;/strong&gt; authority. That is a wider net than Regulation E's, and it arguably covers an agent acting outside the precise scope you had in mind — which sounds like bad news, and is, for the narrow question of whether you can call the charge fraud.&lt;/p&gt;

&lt;p&gt;Second, and more important: TILA gives you a dispute right that does not depend on calling anything fraud. You can dispute a purchase of goods or services that you did not accept or that was not delivered as agreed. An agent that bought the wrong item, ordered a duplicate, or bought something never delivered runs straight into that provision.&lt;/p&gt;

&lt;p&gt;The practical consequence is that on a credit card you have a route to your money back that does not require winning the "was this authorized?" argument at all. On a debit card, that argument is the whole case.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who actually absorbs the loss
&lt;/h2&gt;

&lt;p&gt;Follow the money one step further and the answer is blunt: in most agent-purchase disputes, the loss lands on the merchant, not the bank and not the card network.&lt;/p&gt;

&lt;p&gt;Chargeback monitoring programs — Visa's VAMP, Mastercard's ECM — do not care how a transaction was initiated. A merchant's chargeback ratio is a chargeback ratio whether a human clicked buy or an agent did. Merchants are being told, correctly, to start capturing evidence trails now: which agent acted, under what instruction, with what spending limit, and what confirmation the consumer saw.&lt;/p&gt;

&lt;p&gt;That matters to you as a shopper for one non-obvious reason. Merchants who cannot defend agent transactions will start refusing them, or will require confirmation steps that defeat the point of the agent. The friction you meet at checkout over the next year is a direct readout of this unresolved liability question.&lt;/p&gt;

&lt;h2&gt;
  
  
  Europe is not filling the gap either
&lt;/h2&gt;

&lt;p&gt;The natural assumption is that the EU AI Act covers this. It does not — not yet.&lt;/p&gt;

&lt;p&gt;AI systems making autonomous financial decisions can fall into the AI Act's high-risk tier, which carries human-oversight, transparency and documentation duties. But the Digital Omnibus, in force since 27 July 2026, postponed the Annex III standalone high-risk obligations from 2 August 2026 to &lt;strong&gt;2 December 2027&lt;/strong&gt;, and high-risk AI embedded in regulated products to 2 August 2028. The transparency rules in Article 50 kept their August 2026 date, but they oblige disclosure, not a refund.&lt;/p&gt;

&lt;p&gt;European consumers still have the strong existing framework — PSD2 strong customer authentication, distance-selling withdrawal rights, chargeback rights through the card scheme. Those are real, and in the case of the EU's 14-day withdrawal right for most online purchases, they are considerably better than anything a US shopper has. But none of them were written with a delegated agent in mind either.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to actually do before you let an agent spend
&lt;/h2&gt;

&lt;p&gt;Five things, in order of how much they protect you:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Give the agent a credit card, never a debit card or direct bank access.&lt;/strong&gt; This is the single decision that determines which rulebook you are under.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use a virtual card number with a hard limit.&lt;/strong&gt; Most major US issuers and every European neobank worth using can mint a card locked to one merchant with a spending cap. An agent cannot exceed a limit that does not exist.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep the transcript.&lt;/strong&gt; The instruction you gave the agent is your evidence of what you did and did not authorize. If the tool does not retain a durable log of agent actions, treat that as a reason not to give it a card.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set the confirmation threshold low.&lt;/strong&gt; Tools that support "ask before spending over X" should be set to a number that is annoying, not comfortable. The friction is the protection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dispute fast and use the right words.&lt;/strong&gt; For a wrong or undelivered item on a credit card, the framing is a billing dispute over goods not accepted or not as agreed — not fraud. Fraud invites an investigation into whether you authorized the agent, which is the argument you want to avoid having.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;None of this is exotic. It is the same logic that has always made a credit card the correct instrument for internet purchases, applied to a new class of buyer that happens not to be a person. The regulators will get to agentic payments eventually; the card you attached today decides how much that delay costs you.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://www.nihardaily.com/posts/your-ai-agent-bought-the-wrong-thing-who-pays" rel="noopener noreferrer"&gt;www.nihardaily.com&lt;/a&gt;. For more articles like this one, visit &lt;a href="https://www.nihardaily.com" rel="noopener noreferrer"&gt;www.nihardaily.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>fintech</category>
      <category>security</category>
    </item>
    <item>
      <title>Do You Have to Label AI Content? The Aug 2 Rules</title>
      <dc:creator>Akash Das</dc:creator>
      <pubDate>Sun, 16 Aug 2026 09:53:48 +0000</pubDate>
      <link>https://dev.to/akashdas/do-you-have-to-label-ai-content-the-aug-2-rules-409l</link>
      <guid>https://dev.to/akashdas/do-you-have-to-label-ai-content-the-aug-2-rules-409l</guid>
      <description>&lt;p&gt;Two AI labelling laws switched on together on August 2, 2026 — Article 50 of the EU AI Act and California's AI Transparency Act — and almost every explainer written about them is aimed at compliance officers at model companies. If you are a freelancer, a marketer, a small publisher or anyone who just puts AI-made images and text on the internet, the useful question is narrower: which of these duties is actually yours, and which belong to OpenAI, Google and Adobe whether you think about them or not? The honest answer is that most of the machinery lands on the model providers, and your own obligations are few, specific, and easy to satisfy — if you know which three they are.&lt;/p&gt;

&lt;h2&gt;
  
  
  The rule that decides everything: are you a provider or a deployer?
&lt;/h2&gt;

&lt;p&gt;The EU AI Act splits obligations between the &lt;em&gt;provider&lt;/em&gt; — whoever puts the generative AI system on the market — and the &lt;em&gt;deployer&lt;/em&gt;, meaning whoever uses it. Nearly all the engineering-heavy requirements sit with the provider.&lt;/p&gt;

&lt;p&gt;Under Article 50(2), providers must design their systems so that synthetic image, audio, video and text output carries a machine-readable mark that identifies it as AI-generated. That is watermarking, C2PA-style content credentials, cryptographic signing — provider work, not yours. If you generate an image in a mainstream tool, that marking is the tool's job.&lt;/p&gt;

&lt;p&gt;The deployer duties in Article 50 are the ones that can attach to an individual, and there are three:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Chatbot disclosure.&lt;/strong&gt; If you deploy an AI system that interacts with people, those people must be told they are dealing with AI — unless it is obvious from context.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deepfake disclosure.&lt;/strong&gt; If you publish AI-generated or manipulated image, audio or video that resembles real people, places or events, you must disclose it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI-written text on matters of public interest.&lt;/strong&gt; If you publish AI-authored text intended to inform the public on matters of public interest, you must disclose that too — with a carve-out that matters enormously to bloggers, covered below.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Everything else in the transparency article is provider machinery.&lt;/p&gt;

&lt;h2&gt;
  
  
  The editorial-responsibility carve-out most write-ups skip
&lt;/h2&gt;

&lt;p&gt;The text obligation has an exception written into it: the disclosure duty does not apply where the AI-generated text has undergone &lt;strong&gt;human review or editorial control&lt;/strong&gt; and a natural or legal person &lt;strong&gt;holds editorial responsibility&lt;/strong&gt; for its publication.&lt;/p&gt;

&lt;p&gt;Read plainly, that is the difference between a site that pipes model output straight to publication and a site where a named human reads, edits and stands behind the piece. The second case is outside the labelling duty for text — not because the AI involvement is hidden, but because a person has taken responsibility for the claims. It is worth noting how neatly this rewards the editorial workflow that helpful-content ranking already rewards.&lt;/p&gt;

&lt;p&gt;The image, audio and video duty has no equivalent human-review escape. A deepfake stays a deepfake after you edit it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dates: what actually applies today
&lt;/h2&gt;

&lt;p&gt;Article 50 applied from &lt;strong&gt;2 August 2026&lt;/strong&gt;. It kept its date when everything around it moved.&lt;/p&gt;

&lt;p&gt;The Digital Omnibus — the EU's amending package, which entered into force on &lt;strong&gt;27 July 2026&lt;/strong&gt; — postponed the high-risk obligations that were supposed to arrive on the same day: Annex III standalone high-risk systems (recruitment, credit scoring, education, law enforcement, border control) now bite on &lt;strong&gt;2 December 2027&lt;/strong&gt;, and high-risk AI embedded in regulated products under Annex I on &lt;strong&gt;2 August 2028&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The one concession Article 50 received is narrow: generative systems already placed on the EU market before 2 August 2026 have until &lt;strong&gt;2 December 2026&lt;/strong&gt; to bring their machine-readable marking into conformity under Article 50(2). Systems launched on or after 2 August 2026 get no grace period at all. Note again who that helps — it is a provider grace period. Your deepfake and chatbot disclosures were due on 2 August.&lt;/p&gt;

&lt;p&gt;Penalties for breaching Article 50 fall in the AI Act's middle tier: up to &lt;strong&gt;€15 million or 3% of worldwide annual turnover&lt;/strong&gt;, whichever is higher, rather than the headline €35 million / 7% reserved for prohibited-practice violations. And the Act reaches non-EU businesses whose AI output is used in the EU, so a US freelancer serving European clients is in scope.&lt;/p&gt;

&lt;h2&gt;
  
  
  California: same date, entirely different mechanism
&lt;/h2&gt;

&lt;p&gt;California's AI Transparency Act (SB 942, amended by AB 853) became operative on &lt;strong&gt;2 August 2026&lt;/strong&gt; — a date deliberately aligned with the EU. Its structure, though, is nothing like Article 50's.&lt;/p&gt;

&lt;p&gt;CAITA regulates &lt;strong&gt;covered providers&lt;/strong&gt; only: generative AI systems with more than &lt;strong&gt;one million monthly visitors or users&lt;/strong&gt; that are publicly accessible in California. If you are reading this wondering whether it applies to you, it does not. There is no CAITA duty on ordinary users, and — a detail that surprises people — &lt;strong&gt;it does not cover AI-generated text at all&lt;/strong&gt;. Images, video and audio only.&lt;/p&gt;

&lt;p&gt;What covered providers owe as of 2 August:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Latent disclosure&lt;/strong&gt;: machine-readable provenance metadata embedded in generated image, video and audio, identifying the system, its version, and the date of creation or alteration, in a form durable and consistent with industry standards.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Manifest disclosure&lt;/strong&gt;: an &lt;em&gt;option&lt;/em&gt; for the user to add a visible AI marking, made permanent or extraordinarily difficult to remove where technically feasible. Note it is an option offered to you, not a label forced onto your output.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A free public detection tool&lt;/strong&gt; that accepts uploads, URLs and API calls and reports whether the content came from that provider's system.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Two later phases matter for planning: from &lt;strong&gt;1 January 2027&lt;/strong&gt;, large online platforms must detect and surface embedded provenance data, and AI hosting platforms may not knowingly offer non-compliant systems; from &lt;strong&gt;1 January 2028&lt;/strong&gt;, capture-device manufacturers must support the disclosures by default. Enforcement is &lt;strong&gt;$5,000 per violation, per day&lt;/strong&gt;, by state authorities, with no private right of action.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this means in practice
&lt;/h2&gt;

&lt;p&gt;Put the two regimes side by side and the practical picture for an individual is short.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You must&lt;/strong&gt;, if you publish into the EU: label deepfake-style synthetic media, tell people when they are talking to your chatbot, and either disclose AI-written public-interest text or take genuine editorial responsibility for it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You do not have to&lt;/strong&gt;: watermark every AI-assisted image you post, add a badge to AI-assisted copywriting, or run detection tooling. Those are provider duties, and in California they are provider duties that only bind services above a million monthly users.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Worth doing anyway&lt;/strong&gt;: keep the provenance metadata intact. Latent marks travel in file metadata, and re-exporting, screenshotting or stripping EXIF removes them. Nothing in either law obliges you to preserve a mark someone else embedded — but a 2027 platform rule that surfaces provenance is coming, and content that arrives with credentials intact will read as more trustworthy than content that arrives bare. That is a reputational argument, not a legal one, and it is the right way to think about most of this: the legal minimum for an individual is genuinely small, and the disclosure habit is worth more than the compliance box.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://www.nihardaily.com/posts/do-you-have-to-label-ai-content-the-aug-2-rules" rel="noopener noreferrer"&gt;www.nihardaily.com&lt;/a&gt;. For more articles like this one, visit &lt;a href="https://www.nihardaily.com" rel="noopener noreferrer"&gt;www.nihardaily.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>freelance</category>
      <category>writing</category>
    </item>
    <item>
      <title>Claude Code Auto Mode Goes Default August 14</title>
      <dc:creator>Akash Das</dc:creator>
      <pubDate>Sun, 16 Aug 2026 09:43:09 +0000</pubDate>
      <link>https://dev.to/akashdas/claude-code-auto-mode-goes-default-august-14-8f2</link>
      <guid>https://dev.to/akashdas/claude-code-auto-mode-goes-default-august-14-8f2</guid>
      <description>&lt;p&gt;On August 14, 2026, auto mode becomes the default permission mode for new Claude Code sessions on Pro, Max and Team plans. The agent stops asking before each step and simply proceeds, unless the action it wants to take is judged irreversible, destructive, or aimed outside your environment. Anthropic's argument for the change is a number from its own testing: in a 1,053-action study, auto mode blocked 89% of harmful actions, while humans clicking through approval prompts caught 13.6%. The uncomfortable half of that finding is why — users habitually approved 97% of the prompts they were shown.&lt;/p&gt;

&lt;p&gt;If you have used a coding agent for more than a week, you already know the feeling being described. The prompt stops being a decision and becomes a keystroke. Anthropic calls this permission fatigue, and it is making the case that a model checking each action against a policy is a better guard than a human who has stopped reading.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changes on August 14, and what does not
&lt;/h2&gt;

&lt;p&gt;Three things are true at once, and they get mixed up in most of the coverage.&lt;/p&gt;

&lt;p&gt;First, the default flips only for &lt;strong&gt;new sessions&lt;/strong&gt; on &lt;strong&gt;Pro, Max and Team&lt;/strong&gt;. Existing sessions keep the mode they are running in.&lt;/p&gt;

&lt;p&gt;Second, auto mode is not "approve everything." Actions classified as irreversible, destructive, or targeting something outside your environment still stop and wait for you. Deleting data, force-pushing over history, and reaching for a remote system you did not point the agent at are the shapes of action that still surface a prompt.&lt;/p&gt;

&lt;p&gt;Third, the rollout ships with two controls that matter more than the default itself: prompt-injection screening on incoming content, and hard deny rules you configure so that certain actions can never be taken regardless of what the model concludes. Deny rules are the part worth your afternoon. They are the only control in the list whose behaviour does not depend on a model's judgement.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 89% number cuts both ways
&lt;/h2&gt;

&lt;p&gt;Eighty-nine percent blocked means eleven percent not blocked. On a single action that is a good trade against a human's 13.6%. Across a long-running agent session that takes hundreds of actions, an 11% miss rate on the harmful subset is not a rounding error, and independent commentary made that point immediately.&lt;/p&gt;

&lt;p&gt;The prompt-injection result is stronger and deserves to be quoted precisely: none of 720 attack attempts succeeded against Claude Fable 5, Opus 5, or Sonnet 5 running auto mode. That is a real result on a real threat model. It is also a result against a fixed attack set, which is a different claim from "prompt injection is solved."&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this specifically matters after the last year of agent attacks
&lt;/h2&gt;

&lt;p&gt;Here is the part the announcement coverage skipped. The two most widely reported attacks on coding agents in the past year both routed through content the agent read, not code the user wrote.&lt;/p&gt;

&lt;p&gt;In one, text inside a GitHub issue was enough to steer Claude Code and Gemini CLI into actions their operator never asked for. In another, a compromised npm package in the dependency chain reached developer machines through the editor. In both cases, the last thing standing between the agent and the damage was a human looking at a prompt and deciding whether the action made sense.&lt;/p&gt;

&lt;p&gt;Anthropic's data says that last line of defence was mostly theatre — 97% approval rates are not review. That is a fair reading. But it means the correct response to auto mode is not "trust it" or "turn it off." It is to move the control you were relying on from the prompt into the deny rules, where it does not depend on anyone reading anything.&lt;/p&gt;

&lt;h2&gt;
  
  
  A ten-minute checklist before Thursday
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Decide the default per surface, not per person.&lt;/strong&gt; A laptop that holds production credentials and a scratch container running throwaway branches do not deserve the same default. Auto mode is far easier to accept when the environment itself is cheap to destroy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Write hard deny rules for the things you would never approve.&lt;/strong&gt; Credential files and secret stores. Anything that pushes to a remote or a package registry. Network calls to hosts outside your allowlist. Deletion of anything outside the working tree. These are static rules; write them once.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check what the agent can reach, not just what it can do.&lt;/strong&gt; Prompt-injection screening reduces the odds that hostile text steers the agent. Scoping the environment reduces the damage if it does. The second is under your control and does not degrade.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pin the default centrally if you run a team.&lt;/strong&gt; Administrators can set a different default or disable auto mode through managed settings, which is the mechanism that matters for a Team plan. Doing nothing is also a choice, and on Thursday it is a choice with a new meaning.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Know how to switch mid-session.&lt;/strong&gt; You can change permission mode inside a session at any time. Knowing the switch exists is what makes a default tolerable — you can drop to a stricter mode for the fifteen minutes where the agent is touching something you care about.&lt;/p&gt;

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

&lt;p&gt;Auto mode is a bet that a model applying a policy consistently beats a human applying judgement inconsistently. Anthropic's own numbers support the bet, and the 97% approval statistic is the strongest evidence in the whole announcement — not because it flatters auto mode, but because it tells you the control you thought you had was already gone.&lt;/p&gt;

&lt;p&gt;What you should not do is read "89% blocked" as a security guarantee, because the same sentence contains "11% not blocked." Treat auto mode as what it is: a better default than a prompt nobody reads, sitting on top of an environment you are still responsible for scoping.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://www.nihardaily.com/posts/claude-code-auto-mode-goes-default-august-14" rel="noopener noreferrer"&gt;www.nihardaily.com&lt;/a&gt;. For more articles like this one, visit &lt;a href="https://www.nihardaily.com" rel="noopener noreferrer"&gt;www.nihardaily.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>claude</category>
      <category>llm</category>
    </item>
  </channel>
</rss>
