<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:media="http://search.yahoo.com/mrss/">
  <channel>
    <title>AI News · CloudCodeTree</title>
    <link>https://cloudcodetree.com/ai-news/</link>
    <atom:link href="https://cloudcodetree.com/ai-news/feed.xml" rel="self" type="application/rss+xml" />
    <description>Daily field notes on AI-assisted engineering.</description>
    <language>en-us</language>
    <generator>cloudcodetree generate-feeds.mjs</generator>
    <lastBuildDate>Sun, 26 Jul 2026 20:21:13 GMT</lastBuildDate>
  <item>
    <title><![CDATA[Route Agent Tool Calls to Fireworks When You Need Speed Without Frontier Cost]]></title>
    <link>https://cloudcodetree.com/ai-news/2026-07-26-08-fireworks-ai-function-calling-agent-routing/</link>
    <guid isPermaLink="false">2026-07-26-08-fireworks-ai-function-calling-agent-routing</guid>
    <pubDate>Sun, 26 Jul 2026 20:09:00 GMT</pubDate>
    <dc:creator><![CDATA[Chris Harper]]></dc:creator>
    <category><![CDATA[AI]]></category>
    <category><![CDATA[Workflow]]></category>
    <category><![CDATA[Agents]]></category>
    <category><![CDATA[Developer Tools]]></category>
    <category><![CDATA[Best Practices]]></category>
    <description><![CDATA[Fireworks AI serves FireFunction-v2 at roughly 4x GPT-4 speed with an OpenAI-compatible API -- two lines of code to add a fast, cheap open-model tier to your multi-agent stack.]]></description>
    <content:encoded><![CDATA[<p><img src="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-26-08-fireworks-ai-function-calling-agent-routing.jpg" alt="" /></p>
<p><strong>Fireworks AI's OpenAI-compatible API serves open models at 4x GPT-4 speed -- swapping it in for non-critical agent tool calls takes two lines: change the base URL and the model name.</strong></p>
<p>Multi-agent systems often fan out the same tool call to dozens of tasks: extract entities from documents, classify a category, parse a structured payload. These don't need frontier intelligence -- they need speed and low cost. Fireworks is built for exactly this routing slot.</p>
<p>## The two-line swap</p>
<p>If you already use the OpenAI Python SDK (or any OpenAI-compatible client), pointing it at Fireworks is a drop-in change:</p>
<p>```python
from openai import OpenAI</p>
<p>client = OpenAI(
    api_key=&quot;fw_...&quot;,                         # your Fireworks API key
    base_url=&quot;https://api.fireworks.ai/inference/v1&quot;,
)</p>
<p>response = client.chat.completions.create(
    model=&quot;accounts/fireworks/models/firefunction-v2&quot;,
    messages=[{&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: &quot;Extract the JSON fields from this receipt: ...&quot;}],
    response_format={&quot;type&quot;: &quot;json_object&quot;},
)
```</p>
<p>That's it. The same <code>tools=</code> list, <code>tool_choice=</code>, and <code>response_format=</code> parameters work identically.</p>
<p>## What Fireworks is fast at</p>
<p>- <strong>FireFunction-v2</strong>: structured outputs and function calling at ~4x GPT-4 speed on the Artificial Analysis benchmark -- the go-to model for tool-calling subagents
- <strong>Open weights at low latency</strong>: Llama 3.3, Qwen 2.5, DeepSeek V3.2, Kimi K2.5 -- all served on dedicated kernels optimized for throughput
- <strong>Serverless pricing</strong>: pay per token, no reservation; Priority tier for lowest latency, Standard for cost</p>
<p>## When to route here vs Claude</p>
<p>The pattern is simple: if the task needs reasoning or synthesis, use Claude. If it's extraction, classification, or structured parsing, route to Fireworks FireFunction-v2. The difference in cost and speed justifies the split even for modest workloads.</p>
<p>``<code>python
def call_agent(task_type: str, prompt: str) -&gt; str:
    if task_type in (&quot;extract&quot;, &quot;classify&quot;, &quot;parse&quot;):
        return fireworks_client.chat.completions.create(
            model=&quot;accounts/fireworks/models/firefunction-v2&quot;,
            messages=[{&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: prompt}],
        ).choices[0].message.content
    else:
        return anthropic_client.messages.create(
            model=&quot;claude-sonnet-5-20251022&quot;,
            max_tokens=1024,
            messages=[{&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: prompt}],
        ).content[0].text
</code>``</p>
<p><strong>Sources:</strong> <a href="https://fireworks.ai/inference">Fireworks AI inference platform</a> · <a href="https://huggingface.co/fireworks-ai/firefunction-v1">FireFunction on HuggingFace</a> · <a href="https://docs.fireworks.ai/getting-started/introduction">Fireworks AI docs</a> · <a href="https://fireworks.ai/blog/blazing-fast-inference-on-top-oss-models">Blazing-fast inference on open models</a></p>]]></content:encoded>
    <media:content url="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-26-08-fireworks-ai-function-calling-agent-routing.jpg" medium="image" type="image/jpeg" />
    <media:thumbnail url="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-26-08-fireworks-ai-function-calling-agent-routing.jpg" />
  </item>
  <item>
    <title><![CDATA[Two August API Deadlines: Opus 4.1 Retires on the 5th, Workbench Prompt Tools Go Dark on the 17th]]></title>
    <link>https://cloudcodetree.com/ai-news/2026-07-26-07-claude-api-august-deadlines-opus41-workbench/</link>
    <guid isPermaLink="false">2026-07-26-07-claude-api-august-deadlines-opus41-workbench</guid>
    <pubDate>Sun, 26 Jul 2026 20:08:00 GMT</pubDate>
    <dc:creator><![CDATA[Chris Harper]]></dc:creator>
    <category><![CDATA[AI]]></category>
    <category><![CDATA[News]]></category>
    <category><![CDATA[Developer Tools]]></category>
    <category><![CDATA[LLM]]></category>
    <description><![CDATA[Anthropic has two August breaking-change deadlines: claude-opus-4-1-20250805 errors after August 5, and the legacy /v1/experimental prompt generation APIs shut off August 17.]]></description>
    <content:encoded><![CDATA[<p><img src="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-26-07-claude-api-august-deadlines-opus41-workbench.jpg" alt="" /></p>
<p><strong>Anthropic has two hard August deadlines: claude-opus-4-1-20250805 returns errors after August 5, and three /v1/experimental prompt-tools endpoints shut off August 17.</strong></p>
<p><strong>August 5 -- Opus 4.1 retirement.</strong> If any of your production code still hardcodes <code>claude-opus-4-1-20250805</code>, it breaks in 10 days. Swap to <code>claude-opus-4-8-20260507</code> (or just <code>claude-opus-4-8</code>). One gotcha: Opus 4.7 and later dropped the <code>temperature</code>, <code>top_p</code>, and <code>top_k</code> parameters -- passing non-default values now returns HTTP 400, so strip those fields in the same migration pass.</p>
<p><strong>August 17 -- Legacy Workbench and Prompt APIs.</strong> The three <code>/v1/experimental/</code> endpoints (<code>generate_prompt</code>, <code>improve_prompt</code>, <code>templatize_prompt</code>) and the legacy Workbench (platform.claude.com/workbench) are being retired together. If you use these to automate prompt generation or testing, export your saved prompts now from Organizational Settings -- the new Workbench is stateless and does not import old data.</p>
<p><strong>Why it matters:</strong> A quiet prod service that's been calling Opus 4.1 for a year will silently break on August 5. Run a quick grep for <code>opus-4-1</code> in your codebase, CI secrets, and config files before next week.</p>
<p><strong>Sources:</strong> <a href="https://platform.claude.com/docs/en/about-claude/model-deprecations">Claude model deprecations</a> · <a href="https://platform.claude.com/docs/en/release-notes/overview">Claude Platform release notes</a> · <a href="https://therouter.ai/news/anthropic-deprecates-claude-opus-4-1-august-5-migration-guide/">Opus 4.1 migration guide</a></p>]]></content:encoded>
    <media:content url="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-26-07-claude-api-august-deadlines-opus41-workbench.jpg" medium="image" type="image/jpeg" />
    <media:thumbnail url="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-26-07-claude-api-august-deadlines-opus41-workbench.jpg" />
  </item>
  <item>
    <title><![CDATA[Your Fine-Tune's Report Card: Catch Catastrophic Forgetting with lm-evaluation-harness in 5 Commands]]></title>
    <link>https://cloudcodetree.com/ai-news/2026-07-26-06-lm-eval-harness-finetune-benchmark/</link>
    <guid isPermaLink="false">2026-07-26-06-lm-eval-harness-finetune-benchmark</guid>
    <pubDate>Sun, 26 Jul 2026 20:07:00 GMT</pubDate>
    <dc:creator><![CDATA[Chris Harper]]></dc:creator>
    <category><![CDATA[AI]]></category>
    <category><![CDATA[Tutorial]]></category>
    <category><![CDATA[Fine-Tuning]]></category>
    <category><![CDATA[HuggingFace]]></category>
    <category><![CDATA[Best Practices]]></category>
    <description><![CDATA[Run MMLU and GSM8K on both your base and fine-tuned checkpoints -- the delta is what matters. Five commands catch catastrophic forgetting before you ship.]]></description>
    <content:encoded><![CDATA[<p><img src="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-26-06-lm-eval-harness-finetune-benchmark.jpg" alt="" /></p>
<p>**Fine-tuning without evaluation is flying blind -- lm-evaluation-harness runs MMLU, GSM8K, and 200+ other benchmarks on your base <em>and</em> fine-tuned model in minutes so you see what got better and what broke.**</p>
<p><strong>What you'll be able to do after this:</strong>
- Run standardized benchmarks on any HuggingFace checkpoint in under 10 minutes using the same tool that powers the Open LLM Leaderboard
- Spot catastrophic forgetting before it breaks your fine-tune in production
- Generate a base-to-fine-tune score delta that makes model quality reviewable by your whole team</p>
<p><strong>Resource:</strong> <a href="https://github.com/EleutherAI/lm-evaluation-harness">EleutherAI lm-evaluation-harness</a> -- the open-source evaluation framework behind the HuggingFace Open LLM Leaderboard</p>
<p>## Why this step gets skipped</p>
<p>Most developers fine-tune a model, try a few prompts, see plausible outputs, and ship. The hidden risk is <em>catastrophic forgetting</em>: your model gets 15% better at your task and quietly loses 8% on everything else. lm-evaluation-harness makes this visible in 5 commands.</p>
<p>## Install</p>
<p>``<code>bash
pip install lm-eval
</code>``</p>
<p>No dataset downloads upfront -- task configs are pulled from YAML files managed by the project.</p>
<p>## Step 1: Baseline the base model</p>
<p>``<code>bash
lm_eval \
  --model hf \
  --model_args pretrained=meta-llama/Llama-3.2-3B-Instruct \
  --tasks mmlu,gsm8k \
  --num_fewshot 5 \
  --device cuda:0 \
  --batch_size 8 \
  --output_path ./results/base/
</code>``</p>
<p>The <code>--num_fewshot 5</code> flag is critical: it matches how the Open LLM Leaderboard scores MMLU. Without it your scores are 3-8 points lower and incomparable to any published number.</p>
<p>## Step 2: Run the same eval on your fine-tune</p>
<p>``<code>bash
lm_eval \
  --model hf \
  --model_args pretrained=./checkpoints/my-fine-tune \
  --tasks mmlu,gsm8k \
  --num_fewshot 5 \
  --device cuda:0 \
  --batch_size 8 \
  --output_path ./results/finetuned/
</code>``</p>
<p>## Step 3: Compare the delta</p>
<p>``<code>python
import json
base = json.load(open(&quot;results/base/results.json&quot;))
ft   = json.load(open(&quot;results/finetuned/results.json&quot;))
for task in [&quot;mmlu&quot;, &quot;gsm8k&quot;]:
    b = base[&quot;results&quot;][task][&quot;acc,none&quot;]
    f = ft[&quot;results&quot;][task][&quot;acc,none&quot;]
    print(f&quot;{task}: {b:.3f} -&gt; {f:.3f}  (delta {f-b:+.3f})&quot;)
</code>``</p>
<p>A healthy fine-tune holds MMLU within ~2 points of the base while improving on your target task. A drop of more than 3 points on MMLU or more than 4 points on GSM8K is a red flag for catastrophic forgetting -- the dataset is too narrow or the learning rate is too high.</p>
<p>## Faster eval with the vLLM backend</p>
<p>Add <code>--model vllm</code> instead of <code>--model hf</code> for 3-5x faster evaluation on a Colab T4 or A100:</p>
<p>``<code>bash
lm_eval \
  --model vllm \
  --model_args pretrained=./checkpoints/my-fine-tune,dtype=float16 \
  --tasks mmlu,gsm8k \
  --num_fewshot 5 \
  --batch_size auto \
  --output_path ./results/finetuned/
</code>``</p>
<p>## Add it to CI</p>
<p>Once you have a baseline, a simple pass/fail check prevents regressions automatically:</p>
<p>``<code>bash
python -c &quot;
import json, sys
b = json.load(open('results/base/results.json'))['results']['mmlu']['acc,none']
f = json.load(open('results/finetuned/results.json'))['results']['mmlu']['acc,none']
if (f - b) &lt; -0.02:
    print(f'FAIL: MMLU dropped {f-b:+.3f}', file=sys.stderr); sys.exit(1)
print(f'PASS: MMLU delta {f-b:+.3f}')
&quot;
</code>``</p>
<p><strong>Sources:</strong> <a href="https://github.com/EleutherAI/lm-evaluation-harness">EleutherAI lm-evaluation-harness</a> · <a href="https://huggingface.co/spaces/HuggingFaceH4/open_llm_leaderboard">HuggingFace Open LLM Leaderboard</a> · <a href="https://machinelearningplus.com/nlp/llm-evaluation-benchmark-model/">Evaluating fine-tuned LLMs guide</a> · <a href="https://qaskills.sh/blog/lm-evaluation-harness-tutorial-2026">lm-eval-harness 2026 tutorial</a></p>]]></content:encoded>
    <media:content url="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-26-06-lm-eval-harness-finetune-benchmark.jpg" medium="image" type="image/jpeg" />
    <media:thumbnail url="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-26-06-lm-eval-harness-finetune-benchmark.jpg" />
  </item>
  <item>
    <title><![CDATA[Swap Claude's Tools Mid-Conversation Without Busting the Cache]]></title>
    <link>https://cloudcodetree.com/ai-news/2026-07-26-05-claude-mid-conversation-tool-changes-beta/</link>
    <guid isPermaLink="false">2026-07-26-05-claude-mid-conversation-tool-changes-beta</guid>
    <pubDate>Sun, 26 Jul 2026 12:07:00 GMT</pubDate>
    <dc:creator><![CDATA[Chris Harper]]></dc:creator>
    <category><![CDATA[AI]]></category>
    <category><![CDATA[Workflow]]></category>
    <category><![CDATA[Claude Code]]></category>
    <category><![CDATA[Agents]]></category>
    <category><![CDATA[Best Practices]]></category>
    <description><![CDATA[Add or remove Claude tools between conversation turns without invalidating the prompt cache — using one beta header. A new pattern for progressive agentic tool access, shipping with Opus 5.]]></description>
    <content:encoded><![CDATA[<p><img src="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-26-05-claude-mid-conversation-tool-changes-beta.jpg" alt="" /></p>
<p><strong>Add or remove Claude's tools between turns — without re-billing the entire cached prefix — using one beta header: a new pattern for agentic workloads that progressively expose or retire tools.</strong></p>
<p>Every production agent faces a tension: give Claude a small, safe toolbox and you limit capability; give it the full toolbox upfront and you expose write surfaces before you need them. The <code>mid-conversation-tool-changes-2026-07-01</code> beta, introduced with Claude Opus 5, resolves this.</p>
<p>## The problem</p>
<p>Before this beta, changing the tool list invalidated the cached prefix — meaning a large system prompt or long conversation history was re-billed at full price on every tool-set change.</p>
<p>## The fix: one beta header</p>
<p>Include the header on every request in the session:</p>
<p>```python
import anthropic</p>
<p>client = anthropic.Anthropic()</p>
<p># Turn 1 — read-only exploration
r1 = client.messages.create(
    model=&quot;claude-opus-5-20260724&quot;,
    max_tokens=1024,
    betas=[&quot;mid-conversation-tool-changes-2026-07-01&quot;],
    tools=[search_tool, read_file_tool],
    messages=[{&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: &quot;Explore the codebase and draft a plan.&quot;}],
)</p>
<p># Turn 2 — user approves; add write access
r2 = client.messages.create(
    model=&quot;claude-opus-5-20260724&quot;,
    max_tokens=1024,
    betas=[&quot;mid-conversation-tool-changes-2026-07-01&quot;],
    tools=[search_tool, read_file_tool, edit_file_tool],  # unlocked
    messages=[
        *prior_messages,
        {&quot;role&quot;: &quot;assistant&quot;, &quot;content&quot;: r1.content},
        {&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: &quot;Looks good — go ahead.&quot;},
    ],
)
```</p>
<p>The system prompt and prior turns stay cached across both calls. Only the delta (the changed tool definition) is re-billed.</p>
<p>## Progressive access pattern</p>
<p>A clean four-phase flow for multi-step agentic tasks:</p>
<p>1. <strong>Explore</strong> — read-only tools (search, grep, read)
2. <strong>Plan and approve</strong> — same tools; user confirms before anything mutates
3. <strong>Execute</strong> — narrow write tools added (edit, create, run)
4. <strong>Verify</strong> — write tools retired; test and lint tools take over</p>
<p>This keeps Claude's exposure minimal at every stage, which matters for both cost (smaller tool definitions = cheaper cached prefix) and safety (no write surface during exploration).</p>
<p>Available on Fable 5, Mythos 5, Opus 4.8, and Opus 5. Mid-conversation <strong>system message</strong> changes (GA, no beta header needed) work the same way and also preserve the cache.</p>
<p><strong>Sources:</strong> <a href="https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages">Mid-conversation system messages and tool changes</a> · <a href="https://platform.claude.com/docs/en/about-claude/models/whats-new-opus-5">What's new in Claude Opus 5</a> · <a href="https://www.anthropic.com/news/claude-opus-5">Introducing Claude Opus 5</a></p>]]></content:encoded>
    <media:content url="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-26-05-claude-mid-conversation-tool-changes-beta.jpg" medium="image" type="image/jpeg" />
    <media:thumbnail url="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-26-05-claude-mid-conversation-tool-changes-beta.jpg" />
  </item>
  <item>
    <title><![CDATA[The Algorithm Inside Every Vector Database: Understand and Tune HNSW in 20 Minutes]]></title>
    <link>https://cloudcodetree.com/ai-news/2026-07-26-04-hnsw-vector-index-tuning-qdrant-course/</link>
    <guid isPermaLink="false">2026-07-26-04-hnsw-vector-index-tuning-qdrant-course</guid>
    <pubDate>Sun, 26 Jul 2026 12:06:00 GMT</pubDate>
    <dc:creator><![CDATA[Chris Harper]]></dc:creator>
    <category><![CDATA[AI]]></category>
    <category><![CDATA[Tutorial]]></category>
    <category><![CDATA[Embeddings]]></category>
    <category><![CDATA[Vectors]]></category>
    <category><![CDATA[Best Practices]]></category>
    <description><![CDATA[HNSW powers pgvector, Qdrant, Weaviate, ChromaDB, and FAISS. Learn what m, ef_construction, and ef do — then tune them on a 100K dataset with Qdrant's free hands-on course.]]></description>
    <content:encoded><![CDATA[<p><img src="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-26-04-hnsw-vector-index-tuning-qdrant-course.jpg" alt="" /></p>
<p><strong>HNSW is the graph index inside pgvector, Qdrant, Weaviate, ChromaDB, and FAISS — three knobs control all of them: m (connectivity), ef_construction (build quality), and ef (query depth).</strong></p>
<p><strong>What you'll be able to do after this:</strong>
- Explain why HNSW finds approximate nearest neighbors in sub-millisecond time across millions of vectors — and why brute-force can't
- Tune <code>m</code>, <code>ef_construction</code>, and <code>ef</code> for the right recall/latency tradeoff in any vector database
- Benchmark your own collection and find the performance knee that fits your workload</p>
<p><strong>Resource:</strong> <a href="https://qdrant.tech/course/essentials/day-2/what-is-hnsw/">Qdrant Essentials Course, Day 2: HNSW Indexing</a> + <a href="https://www.youtube.com/watch?v=-q-pLgGDYr4">YouTube walkthrough</a></p>
<p>## How HNSW works</p>
<p>HNSW builds a multi-layer graph. Higher layers contain fewer nodes connected by long-range &quot;highway&quot; edges — they let a search jump quickly across the vector space. Lower layers are dense with local connections for fine-grained lookup.</p>
<p>At query time, search enters at the top (coarsest) layer, follows the closest edges downward through increasingly dense layers, and returns approximate nearest neighbors. This is typically 10–100× faster than brute-force scan, with 95–99% recall — which is why every major vector database uses it as the default index.</p>
<p>All the databases covered in this learning track use HNSW: pgvector, Qdrant, Weaviate, ChromaDB, and FAISS (<code>IndexHNSWFlat</code>).</p>
<p>## The three parameters you control</p>
<p>| Parameter | Controls | When set |
|---|---|---|
| <code>m</code> | Edges per node per layer — higher = better recall, more memory and build time | Index creation |
| <code>ef_construction</code> | Candidates explored during build — higher = better index quality, slower build | Index creation |
| <code>ef</code> (or <code>ef_search</code>) | Candidates explored per query — higher = better recall, slower queries | Query time (tunable live) |</p>
<p><strong>Starting values:</strong> <code>m=16</code>, <code>ef_construction=200</code>, <code>ef=128</code>. Raise <code>m</code> when recall matters more than memory. Raise <code>ef</code> at query time for a recall boost without rebuilding the index.</p>
<p>## Hands-on walk-through (Qdrant course)</p>
<p>The <a href="https://qdrant.tech/course/essentials/day-2/what-is-hnsw/">Qdrant Essentials Day 2 course</a> runs you through a 100K-vector benchmark:</p>
<p>1. Upload vectors with HNSW disabled — measure brute-force baseline latency
2. Enable HNSW with default params — observe the latency drop
3. Tune <code>m</code> and <code>ef_construction</code>, rebuild — measure recall against a ground-truth set
4. Use the <a href="https://qdrant.tech/course/essentials/day-2/pitstop-project/">HNSW Performance Benchmarking project</a> to find the recall/latency knee for your collection</p>
<p>The <a href="https://www.youtube.com/watch?v=-q-pLgGDYr4">YouTube video</a> is the clearest visual walkthrough of the layer traversal before you run the code.</p>
<p>The same parameters exist in every major vector DB — they just use different names:</p>
<p>| Database | m | ef_construction | ef at query time |
|---|---|---|---|
| Qdrant | <code>m</code> | <code>ef_construct</code> | <code>ef</code> |
| pgvector | <code>m</code> | <code>ef_construction</code> | <code>hnsw.ef_search</code> |
| Weaviate | <code>maxConnections</code> | <code>efConstruction</code> | <code>ef</code> |
| ChromaDB | <code>M</code> | <code>ef_construction</code> | <code>ef</code> |</p>
<p>Once you understand the three knobs, you're fluent across all of them.</p>
<p><strong>Sources:</strong> <a href="https://qdrant.tech/course/essentials/day-2/what-is-hnsw/">HNSW Indexing Fundamentals — Qdrant</a> · <a href="https://qdrant.tech/course/essentials/day-2/collection-tuning-demo/">HNSW Performance Tuning Demo</a> · <a href="https://www.youtube.com/watch?v=-q-pLgGDYr4">YouTube: Fast Vector Search with HNSW Indexing</a></p>]]></content:encoded>
    <media:content url="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-26-04-hnsw-vector-index-tuning-qdrant-course.jpg" medium="image" type="image/jpeg" />
    <media:thumbnail url="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-26-04-hnsw-vector-index-tuning-qdrant-course.jpg" />
  </item>
  <item>
    <title><![CDATA[Lock Down Which Hosts Your Claude Code Agents Can Reach: sandbox.network.strictAllowlist]]></title>
    <link>https://cloudcodetree.com/ai-news/2026-07-26-03-claude-code-sandbox-network-strict-allowlist/</link>
    <guid isPermaLink="false">2026-07-26-03-claude-code-sandbox-network-strict-allowlist</guid>
    <pubDate>Sun, 26 Jul 2026 04:05:00 GMT</pubDate>
    <dc:creator><![CDATA[Chris Harper]]></dc:creator>
    <category><![CDATA[AI]]></category>
    <category><![CDATA[Workflow]]></category>
    <category><![CDATA[Claude Code]]></category>
    <category><![CDATA[Security]]></category>
    <category><![CDATA[Best Practices]]></category>
    <description><![CDATA[Claude Code v2.1.219 added sandbox.network.strictAllowlist: true — a single setting that silently hard-blocks any non-allowlisted host in sandboxed bash. Essential for CI pipelines and automated ag…]]></description>
    <content:encoded><![CDATA[<p><img src="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-26-03-claude-code-sandbox-network-strict-allowlist.jpg" alt="" /></p>
<p><strong>TL;DR: Set <code>sandbox.network.strictAllowlist: true</code> in settings.json and sandboxed bash will silently deny any non-allowlisted host — no prompt, no approval loop, just a hard block at the network layer.</strong></p>
<p>Shipped in Claude Code v2.1.219 (July 24), this setting closes a gap that's been quietly painful for teams running agents in CI: unexpected outbound connections either blocked the pipeline on a confirmation prompt or slipped through undetected. Now there's a third option — fail fast, silently, at the network layer.</p>
<p>## The problem it solves</p>
<p>When <code>strictAllowlist</code> is off (the default), a sandboxed <code>curl</code>, <code>pip install</code>, or <code>npm install</code> to an unlisted host either:
- Prompts the user to approve — which hangs an unattended agent
- Succeeds, because the sandbox uses a soft allowlist by default</p>
<p>Neither is what you want in a CI pipeline or a fully autonomous agent run.</p>
<p>## Configure it in 60 seconds</p>
<p>``<code>json
// .claude/settings.json
{
  &quot;sandbox&quot;: {
    &quot;network&quot;: {
      &quot;strictAllowlist&quot;: true,
      &quot;allowedDomains&quot;: [
        &quot;api.github.com&quot;,
        &quot;registry.npmjs.org&quot;,
        &quot;files.pythonhosted.org&quot;,
        &quot;pypi.org&quot;,
        &quot;<em>.anthropic.com&quot;,
        &quot;</em>.amazonaws.com&quot;
      ]
    }
  }
}
</code>``</p>
<p>What changes immediately:
- Any host not in <code>allowedDomains</code> → immediate connection refusal (no prompt, no log noise)
- The agent sees <code>ECONNREFUSED</code> or DNS failure, handles it as a tool error, and moves on
- CI pipelines no longer hang waiting for an approval that will never come</p>
<p>## Build your allowlist</p>
<p>Start with the minimal set your workflows need, then expand as the agent hits blocks. Common additions:</p>
<p>| Purpose | Domain |
|---|---|
| npm packages | <code>registry.npmjs.org</code> |
| PyPI packages | <code>pypi.org</code>, <code>files.pythonhosted.org</code> |
| GitHub API | <code>api.github.com</code> |
| Maven / Gradle | <code>repo1.maven.org</code>, <code>plugins.gradle.org</code> |
| Docker Hub | <code>registry-1.docker.io</code> |
| Your artifact store | <code>*.s3.amazonaws.com</code> or your CDN |</p>
<p>## When to keep it off</p>
<p>In local interactive sessions where you want Claude to pull documentation or hit arbitrary APIs, leave <code>strictAllowlist: false</code> (the default). Turn it on project-wide for CI deployments, or in an org-level settings.json to enforce egress control across all agents in your organization.</p>
<p><strong>Sources:</strong> <a href="https://code.claude.com/docs/en/changelog">Claude Code changelog v2.1.219</a> · <a href="https://code.claude.com/docs/en/sandboxing">Claude Code sandboxing docs</a> · <a href="https://code.claude.com/docs/en/security">Claude Code security docs</a></p>]]></content:encoded>
    <media:content url="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-26-03-claude-code-sandbox-network-strict-allowlist.jpg" medium="image" type="image/jpeg" />
    <media:thumbnail url="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-26-03-claude-code-sandbox-network-strict-allowlist.jpg" />
  </item>
  <item>
    <title><![CDATA[$5B and 2 Gigawatts: AMD Joins Claude's Compute Stack — What the MI450 Deal Changes for AI Developers]]></title>
    <link>https://cloudcodetree.com/ai-news/2026-07-26-02-amd-anthropic-mi450-compute-partnership/</link>
    <guid isPermaLink="false">2026-07-26-02-amd-anthropic-mi450-compute-partnership</guid>
    <pubDate>Sun, 26 Jul 2026 04:04:00 GMT</pubDate>
    <dc:creator><![CDATA[Chris Harper]]></dc:creator>
    <category><![CDATA[AI]]></category>
    <category><![CDATA[News]]></category>
    <category><![CDATA[LLM]]></category>
    <category><![CDATA[Developer Tools]]></category>
    <description><![CDATA[Anthropic and AMD announced a strategic partnership to deploy up to 2GW of AMD Instinct MI450 GPUs, with AMD committing $5B as equity investor. Claude's compute stack is now quad-vendor.]]></description>
    <content:encoded><![CDATA[<p><img src="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-26-02-amd-anthropic-mi450-compute-partnership.jpg" alt="" /></p>
<p><strong>TL;DR: Anthropic and AMD signed a 2GW MI450 GPU deal with AMD investing up to $5B — making Claude's training and serving stack explicitly quad-vendor and signaling serious ROCm investment ahead.</strong></p>
<p>On July 22, AMD and Anthropic announced a strategic partnership to deploy up to 2 gigawatts of AMD Instinct MI450 Series GPUs in AMD Helios rack-scale systems, with deployment of the first gigawatt beginning H1 2027. AMD also committed a strategic equity investment of up to $5 billion in Anthropic.</p>
<p>Anthropic's compute is now running across four hardware vendors: NVIDIA (existing), Google TPUs (AWS/Google Cloud), AWS Trainium, and now AMD Instinct. When one supply chain tightens, Claude has hardware to route around it.</p>
<p><strong>The developer angle:</strong> the deal includes a software collaboration clause — Anthropic will use Claude to optimize workloads for AMD Instinct GPUs and accelerate AMD ROCm development. That's the number that matters most for engineers running open-weight models on AMD hardware. ROCm has been 5–15% slower than CUDA on equivalent inference tasks; with Anthropic's engineering resources pointed at it, that gap should narrow over the next 12–18 months. AMD is also adopting Claude broadly across its engineering and product teams, creating a direct feedback loop between frontier-model usage and hardware design decisions.</p>
<p><strong>Why it matters:</strong> for self-hosted ML engineers, AMD MI300X (available now, predecessor to MI450) is already a viable alternative to H100 for inference. As ROCm tooling improves — particularly vLLM and SGLang ROCm backends, which the partnership will accelerate — AMD becomes a stronger option for cost-sensitive inference deployments.</p>
<p><strong>Sources:</strong> <a href="https://ir.amd.com/news-events/press-releases/detail/1292/amd-and-anthropic-announce-strategic-partnership-to-deploy-up-to-2-gigawatts-of-amd-instinct-mi450-series-gpus">AMD press release</a> · <a href="https://newsroom.amd.com/news/amd-anthropic-strategic-partnership/">AMD newsroom</a> · <a href="https://www.cnbc.com/2026/07/22/amd-anthropic-ai-chip-investment.html">CNBC</a></p>]]></content:encoded>
    <media:content url="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-26-02-amd-anthropic-mi450-compute-partnership.jpg" medium="image" type="image/jpeg" />
    <media:thumbnail url="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-26-02-amd-anthropic-mi450-compute-partnership.jpg" />
  </item>
  <item>
    <title><![CDATA[From stdio to the Internet: Deploy a Stateless MCP Server on Cloudflare Workers in 3 Commands]]></title>
    <link>https://cloudcodetree.com/ai-news/2026-07-26-01-mcp-cloudflare-workers-remote-deploy/</link>
    <guid isPermaLink="false">2026-07-26-01-mcp-cloudflare-workers-remote-deploy</guid>
    <pubDate>Sun, 26 Jul 2026 04:03:00 GMT</pubDate>
    <dc:creator><![CDATA[Chris Harper]]></dc:creator>
    <category><![CDATA[AI]]></category>
    <category><![CDATA[Tutorial]]></category>
    <category><![CDATA[MCP]]></category>
    <category><![CDATA[Agents]]></category>
    <description><![CDATA[Three commands to move your MCP server from localhost to a globally distributed HTTPS endpoint on Cloudflare Workers, using Streamable HTTP — the new mandatory production transport as of July 28.]]></description>
    <content:encoded><![CDATA[<p><img src="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-26-01-mcp-cloudflare-workers-remote-deploy.jpg" alt="" /></p>
<p><strong>TL;DR: Three commands move your MCP server from localhost to a public HTTPS endpoint on Cloudflare Workers using Streamable HTTP — the transport that replaces SSE as the July 28 spec locks in.</strong></p>
<p><strong>What you'll be able to do after this:</strong>
- Deploy an MCP server with a live public <code>/mcp</code> HTTPS endpoint in under 5 minutes, no infrastructure provisioned
- Understand why Streamable HTTP (not stdio, not SSE) is the transport for multi-client, production MCP
- Optionally add Cloudflare Access auth so only your team or specific services can connect</p>
<p>## Why Cloudflare Workers?</p>
<p>stdio MCP servers run in the same process as the client — Claude Desktop, a local script. That works for personal tools but breaks the moment you want to share a server across teams, connect from CI, or expose a tool to multiple agents simultaneously. The July 28 MCP spec update finalizes Streamable HTTP as the only supported remote transport; SSE is sunset.</p>
<p>Cloudflare Workers is the fastest path to a compliant remote MCP endpoint: globally distributed edge runtime, serverless, free tier available, and Anthropic has published a first-class template for it.</p>
<p>## The three commands</p>
<p><strong>Step 1 — Scaffold from the official template:</strong>
``<code>bash
npm create cloudflare@latest -- my-mcp-server \
  --template=cloudflare/ai/demos/remote-mcp-authless
cd my-mcp-server
</code>``</p>
<p>This creates a TypeScript Workers project with <code>McpAgent</code> pre-wired. The generated <code>src/index.ts</code> is small — about 30 lines:</p>
<p>```typescript
import { McpAgent } from &quot;agents/mcp&quot;;
import { McpServer } from &quot;@modelcontextprotocol/sdk/server/mcp.js&quot;;
import { z } from &quot;zod&quot;;</p>
<p>export class MyMCP extends McpAgent {
  server = new McpServer({ name: &quot;demo&quot;, version: &quot;1.0.0&quot; });</p>
<p>async init() {
    this.server.tool(
      &quot;add&quot;,
      { a: z.number(), b: z.number() },
      async ({ a, b }) =&gt; ({
        content: [{ type: &quot;text&quot;, text: String(a + b) }],
      })
    );
  }
}</p>
<p>export default { fetch: MyMCP.serve(&quot;/mcp&quot;).fetch };
```</p>
<p><strong>Step 2 — Add your tools.</strong> Every tool is a <code>this.server.tool()</code> call inside <code>init()</code>. The <code>McpAgent</code> class handles session state via Durable Objects, transport negotiation (SSE and Streamable HTTP), and the <code>/mcp</code> route.</p>
<p><strong>Step 3 — Deploy:</strong>
``<code>bash
npx wrangler login   # one-time auth
npm run deploy
# Deployed to: my-mcp-server.your-account.workers.dev/mcp
</code>``</p>
<p>Your MCP endpoint is live. The <code>/mcp</code> path accepts both <code>POST</code> (Streamable HTTP) and the legacy <code>GET</code> (SSE) requests — clients choose automatically.</p>
<p>## Test it without a client</p>
<p>``<code>bash
npx @modelcontextprotocol/inspector@latest \
  https://my-mcp-server.your-account.workers.dev/mcp
</code>``</p>
<p>The MCP inspector runs in your browser and lets you invoke tools interactively.</p>
<p>## Connect it to Claude</p>
<p>In Claude Desktop's <code>claude_desktop_config.json</code>:
``<code>json
{
  &quot;mcpServers&quot;: {
    &quot;my-server&quot;: {
      &quot;url&quot;: &quot;https://my-mcp-server.your-account.workers.dev/mcp&quot;
    }
  }
}
</code>``</p>
<p>## Optional: lock it down with Cloudflare Access</p>
<p>Follow the <a href="https://developers.cloudflare.com/cloudflare-one/access-controls/ai-controls/secure-mcp-servers/">Cloudflare One → Secure MCP servers</a> guide to put a zero-trust auth layer in front. Users authenticate with your IdP; unauthenticated requests get a 403 before reaching the Worker. This is the pattern for team-shared or production MCP servers.</p>
<p><strong>Sources:</strong> <a href="https://developers.cloudflare.com/agents/model-context-protocol/guides/remote-mcp-server/">Cloudflare: Build a Remote MCP server</a> · <a href="https://developers.cloudflare.com/agents/model-context-protocol/transport/">MCP transport docs</a> · <a href="https://developers.cloudflare.com/cloudflare-one/access-controls/ai-controls/secure-mcp-servers/">Secure MCP servers with Cloudflare One</a></p>]]></content:encoded>
    <media:content url="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-26-01-mcp-cloudflare-workers-remote-deploy.jpg" medium="image" type="image/jpeg" />
    <media:thumbnail url="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-26-01-mcp-cloudflare-workers-remote-deploy.jpg" />
  </item>
  <item>
    <title><![CDATA[Two-Stage, 50-Agent Security Scanner: Scale Claude Code for Large Codebase Reviews]]></title>
    <link>https://cloudcodetree.com/ai-news/2026-07-25-07-two-stage-agent-security-scanner/</link>
    <guid isPermaLink="false">2026-07-25-07-two-stage-agent-security-scanner</guid>
    <pubDate>Sat, 25 Jul 2026 20:07:00 GMT</pubDate>
    <dc:creator><![CDATA[Chris Harper]]></dc:creator>
    <category><![CDATA[AI]]></category>
    <category><![CDATA[Workflow]]></category>
    <category><![CDATA[Claude Code]]></category>
    <category><![CDATA[Agents]]></category>
    <category><![CDATA[Security]]></category>
    <description><![CDATA[The two-stage pattern — rules engine flags candidates, parallel agents review + fix — that scanned 466M lines in 20 hours with 50 Claude Code agents. Replicate it in your own CI.]]></description>
    <content:encoded><![CDATA[<p><img src="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-25-07-two-stage-agent-security-scanner.jpg" alt="" /></p>
<p><strong>TL;DR: Fan out 50 parallel Claude Code agents across your repositories using a two-stage pattern — fast rules scan first, then targeted agent review — to audit millions of lines in hours, not weeks.</strong></p>
<p>Alberta's Ministry of Technology and Innovation scanned 466 million lines of code in 20 hours using this approach. The pattern is repeatable with standard Claude Code.</p>
<p>## Stage 1 — Fast pattern scan (cheap)</p>
<p>Run semgrep, CodeQL, or a simple grep sweep against your repos. The goal is to flag candidate locations — not to reason about them yet. This phase is fast and inexpensive because it doesn't need code understanding, just signature matching.</p>
<p>``<code>bash
semgrep --json --config=auto ./src &gt; findings.json
</code>``</p>
<p>## Stage 2 — Agent review (targeted, deep)</p>
<p>For each flagged location, a Claude Code subagent receives the file + surrounding context (50–100 lines) and answers three questions:</p>
<p>1. Is this actually exploitable in context?
2. What's the minimal fix?
3. Does a test exist to verify the fix?</p>
<p>If no test exists, Claude writes one first, then patches. Run 20–50 subagents in parallel — one per finding batch — to fan out across repos simultaneously.</p>
<p>## Optional: red/blue team agents</p>
<p>Add two specialized agents for comprehensive coverage:</p>
<p>- <strong>Red team</strong>: probes the application from the outside, mapping the attack surface and tracing how findings could chain into larger exploits
- <strong>Blue team</strong>: checks defenses against a controls checklist (OWASP Top 10, CIS, ISO 27001) and writes a remediation plan with exact file references</p>
<p>Alberta runs 95 security controls per application per pass with this setup. Applications originally built in the 1990s were rebuilt in modern, safer languages in 4–5 days (versus 5 months the first time).</p>
<p>## Where to start</p>
<p>The <a href="https://code.claude.com/docs/en/code-review">Claude Code Review docs</a> walk through setting up a review workflow. The <a href="https://www.anthropic.com/news/alberta-government-claude-cybersecurity">Alberta case study</a> (with published technical white papers) shows what this looks like at government scale — and what to expect as Claude writes tests, patches, and occasionally rebuilds whole modules.</p>
<p><strong>Sources:</strong> <a href="https://www.anthropic.com/news/alberta-government-claude-cybersecurity">Alberta government case study — Anthropic</a> · <a href="https://code.claude.com/docs/en/code-review">Claude Code Review docs</a> · <a href="https://www.anthropic.com/news/automate-security-reviews-with-claude-code">Automate security reviews with Claude Code</a></p>]]></content:encoded>
    <media:content url="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-25-07-two-stage-agent-security-scanner.jpg" medium="image" type="image/jpeg" />
    <media:thumbnail url="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-25-07-two-stage-agent-security-scanner.jpg" />
  </item>
  <item>
    <title><![CDATA[Fine-Tune a 7B LLM in 30 Minutes on a Free GPU: QLoRA + Unsloth on Google Colab]]></title>
    <link>https://cloudcodetree.com/ai-news/2026-07-25-06-qlora-unsloth-colab-free-gpu/</link>
    <guid isPermaLink="false">2026-07-25-06-qlora-unsloth-colab-free-gpu</guid>
    <pubDate>Sat, 25 Jul 2026 20:06:00 GMT</pubDate>
    <dc:creator><![CDATA[Chris Harper]]></dc:creator>
    <category><![CDATA[AI]]></category>
    <category><![CDATA[Tutorial]]></category>
    <category><![CDATA[Fine-Tuning]]></category>
    <category><![CDATA[HuggingFace]]></category>
    <description><![CDATA[QLoRA + Unsloth lets you fine-tune Llama 3.1 8B on a free Colab T4 GPU — 2x faster training, 70% less VRAM, working model in under an hour. Step-by-step walkthrough.]]></description>
    <content:encoded><![CDATA[<p><img src="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-25-06-qlora-unsloth-colab-free-gpu.jpg" alt="" /></p>
<p><strong>TL;DR: QLoRA + Unsloth lets you fine-tune an 8B-parameter LLM on Google Colab's free T4 GPU — 2× faster training, 70% less VRAM, and a working model in under an hour.</strong></p>
<p><strong>What you'll be able to do after this:</strong>
- Fine-tune Llama 3.1 8B on your own instruction dataset using a free Colab GPU
- Understand why QLoRA (4-bit quantization + LoRA adapters) makes large models trainable on consumer hardware
- Export a merged model or GGUF file ready for Ollama or HuggingFace upload</p>
<p>## Why this matters</p>
<p>Most fine-tuning guides assume A100s or H100s. <strong>Unsloth</strong> makes that assumption obsolete. The library — built by Daniel and Michael Han — replaces key HuggingFace Trainer internals with hand-written CUDA kernels optimized for the LoRA backward pass. Result: 2× faster training and 60–70% less VRAM with mathematically identical outputs.</p>
<p>Paired with <strong>QLoRA</strong> (load the frozen base model in 4-bit NF4, train small LoRA adapters at bf16), you can fine-tune Llama 3.1 8B on a free Colab T4 (16 GB VRAM) in 30–60 minutes on a small dataset.</p>
<p>## Four concepts powering this</p>
<p>1. <strong>LoRA</strong>: Freeze all base weights; insert small trainable matrices at target layers (Q, K, V, O, gate/up/down projections). You train millions of adapter params, not billions — adapters are the only thing saved.
2. <strong>QLoRA</strong>: Quantize the frozen base model to 4-bit (NF4) via bitsandbytes. Adapters train at bf16. ~4× less memory for the base; negligible accuracy loss on instruction-following tasks.
3. <strong>Unsloth kernels</strong>: Fused triton kernels for attention and the LoRA backward pass. Standard PEFT computes this inefficiently; Unsloth rewrites it. Most gains come from the backward pass on the T4.
4. <strong>Gradient checkpointing</strong>: Recomputes intermediate activations during the backward pass instead of caching them — trades a bit of compute for a lot of memory, making 16 GB enough for an 8B model.</p>
<p>## Run it now — free Colab T4</p>
<p>Open the official <a href="https://unsloth.ai/blog/llama3-1">Llama 3.1 Unsloth notebook</a>, which handles GPU detection and a sample dataset. The key code:</p>
<p>```python
# Install
!pip install unsloth</p>
<p># Load the 4-bit quantized model
from unsloth import FastLanguageModel</p>
<p>model, tokenizer = FastLanguageModel.from_pretrained(
    model_name=&quot;unsloth/Meta-Llama-3.1-8B-Instruct-bnb-4bit&quot;,
    max_seq_length=2048,
    load_in_4bit=True,
)</p>
<p># Attach LoRA adapters
model = FastLanguageModel.get_peft_model(
    model,
    r=16,                   # rank — higher = more params, more capacity
    target_modules=[&quot;q_proj&quot;,&quot;k_proj&quot;,&quot;v_proj&quot;,&quot;o_proj&quot;,
                    &quot;gate_proj&quot;,&quot;up_proj&quot;,&quot;down_proj&quot;],
    lora_alpha=16,
    lora_dropout=0,
    bias=&quot;none&quot;,
    use_gradient_checkpointing=&quot;unsloth&quot;,
)</p>
<p># Fine-tune with TRL's SFTTrainer on your Alpaca-format dataset
from trl import SFTTrainer
from transformers import TrainingArguments</p>
<p>trainer = SFTTrainer(
    model=model,
    tokenizer=tokenizer,
    train_dataset=dataset,          # HuggingFace dataset in {&quot;text&quot;: &quot;...&quot;} format
    dataset_text_field=&quot;text&quot;,
    args=TrainingArguments(
        output_dir=&quot;outputs&quot;,
        num_train_epochs=1,
        per_device_train_batch_size=2,
        gradient_accumulation_steps=4,
        learning_rate=2e-4,
        fp16=True,
    ),
)
trainer.train()</p>
<p># Export merged model (16-bit) or GGUF for Ollama
model.save_pretrained_merged(&quot;my-model&quot;, tokenizer, save_method=&quot;merged_16bit&quot;)
# model.save_pretrained_gguf(&quot;my-model&quot;, tokenizer, quantization_method=&quot;q4_k_m&quot;)
```</p>
<p><strong>Practical notes:</strong>
- Use <code>r=8</code> to save memory on the T4 at the cost of a little capacity; <code>r=32</code> if you have more VRAM
- Dataset format: any Alpaca JSON (<code>instruction</code>, <code>input</code>, <code>output</code>) or a HuggingFace dataset with a <code>text</code> field
- The free T4 supports context lengths up to ~2K comfortably; for longer sequences, use Colab Pro</p>
<p><strong>Sources:</strong> <a href="https://unsloth.ai/blog/llama3-1">Official Unsloth Llama 3.1 notebook</a> · <a href="https://unsloth.ai/docs/get-started/unsloth-notebooks">Unsloth Notebooks page</a> · <a href="https://huggingface.co/blog/unsloth-trl">HuggingFace + TRL + Unsloth guide</a> · <a href="https://www.youtube.com/watch?v=2yZUOeIA7gE">YouTube: Unsloth Full Guide (Dec 2025)</a></p>]]></content:encoded>
    <media:content url="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-25-06-qlora-unsloth-colab-free-gpu.jpg" medium="image" type="image/jpeg" />
    <media:thumbnail url="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-25-06-qlora-unsloth-colab-free-gpu.jpg" />
  </item>
  <item>
    <title><![CDATA[Tighten Claude Code in Your Repo: workflowSizeGuideline and the DirectoryAdded Hook]]></title>
    <link>https://cloudcodetree.com/ai-news/2026-07-25-05-claude-code-workflow-size-directory-hook/</link>
    <guid isPermaLink="false">2026-07-25-05-claude-code-workflow-size-directory-hook</guid>
    <pubDate>Sat, 25 Jul 2026 12:04:00 GMT</pubDate>
    <dc:creator><![CDATA[Chris Harper]]></dc:creator>
    <category><![CDATA[AI]]></category>
    <category><![CDATA[Workflow]]></category>
    <category><![CDATA[Claude Code]]></category>
    <category><![CDATA[Best Practices]]></category>
    <description><![CDATA[Two new Claude Code v2.1.219 settings: workflowSizeGuideline locks multi-agent fleet size from any settings file; DirectoryAdded hook triggers setup scripts when a new directory enters a session.]]></description>
    <content:encoded><![CDATA[<p><img src="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-25-05-claude-code-workflow-size-directory-hook.jpg" alt="" /></p>
<p><strong>TL;DR: Claude Code v2.1.219 adds two settings that give your team finer control — <code>workflowSizeGuideline</code> caps multi-agent fleet size project-wide, and the <code>DirectoryAdded</code> hook auto-runs setup scripts whenever a new workspace directory joins a session.</strong></p>
<hr />
<p>## <code>workflowSizeGuideline</code>: right-size workflows for your project</p>
<p>Claude Code's dynamic workflow system picks a fleet size for multi-agent tasks automatically. By default it uses the session's advisory guideline (configurable in <code>/config</code>), but that setting isn't committed to your repo — every developer can silently drift.</p>
<p>The new <code>workflowSizeGuideline</code> key fixes that. Set it in <code>.claude/settings.json</code> and it overrides the user-level <code>/config</code> value for anyone working in that repo:</p>
<p>``<code>json
{
  &quot;workflowSizeGuideline&quot;: &quot;small&quot;
}
</code>``</p>
<p>Valid values: <code>&quot;small&quot;</code> · <code>&quot;medium&quot;</code> · <code>&quot;large&quot;</code>. When a project-level value is set, the <code>/config</code> row for this setting is hidden so no one accidentally overrides it locally.</p>
<p><strong>When to use each:</strong></p>
<p>| Value | Best for |
|---|---|
| <code>&quot;small&quot;</code> | Cost-sensitive projects, focused CI tasks, repos where most work is single-file |
| <code>&quot;medium&quot;</code> | General development — the default if unset |
| <code>&quot;large&quot;</code> | Monorepo refactors, multi-service migrations, comprehensive audits |</p>
<p>For most teams, commit <code>&quot;small&quot;</code> or <code>&quot;medium&quot;</code> to start, then bump up per-project when you have a legitimate use for larger fleets. This keeps token spend predictable across your whole engineering org.</p>
<hr />
<p>## <code>DirectoryAdded</code> hook: per-workspace setup in monorepos</p>
<p>The <code>DirectoryAdded</code> lifecycle hook fires whenever <code>/add-dir</code> or the SDK <code>register_repo_root</code> call brings a new directory into the active session. It's the missing piece for monorepo setups where each workspace has its own deps or linting config.</p>
<p>Add it alongside your other hooks in <code>.claude/settings.json</code>:</p>
<p>``<code>json
{
  &quot;hooks&quot;: {
    &quot;DirectoryAdded&quot;: [
      {
        &quot;matcher&quot;: &quot;&quot;,
        &quot;hooks&quot;: [
          {
            &quot;type&quot;: &quot;command&quot;,
            &quot;command&quot;: &quot;bash .claude/hooks/on-dir-added.sh \&quot;$CLAUDE_ADDED_DIR\&quot;&quot;
          }
        ]
      }
    ]
  }
}
</code>``</p>
<p>Example <code>.claude/hooks/on-dir-added.sh</code>:</p>
<p>```bash
#!/usr/bin/env bash
# Runs when a new directory is registered in a Claude Code session
DIR=&quot;$1&quot;
cd &quot;$DIR&quot; || exit 0</p>
<p># Install workspace deps if a package file exists
if [ -f package.json ]; then
  echo &quot;Installing node deps for $DIR...&quot;
  pnpm install --frozen-lockfile --silent
fi</p>
<p>if [ -f pyproject.toml ] || [ -f requirements.txt ]; then
  echo &quot;Setting up Python env for $DIR...&quot;
  uv sync --quiet 2&gt;/dev/null || pip install -r requirements.txt -q
fi
```</p>
<p>The hook receives the added directory path as <code>$CLAUDE_ADDED_DIR</code>. Keep the script fast — it runs synchronously before Claude gets context from the new directory.</p>
<p><strong>Why it matters:</strong> without this hook, Claude enters a new workspace cold. With it, deps are already installed, linters are configured, and any per-workspace validation you care about has already run — Claude's first action in that directory is never &quot;install deps.&quot;</p>
<p><strong>Sources:</strong> <a href="https://code.claude.com/docs/en/changelog">Claude Code Changelog</a> · <a href="https://www.datacamp.com/tutorial/claude-code-hooks">Claude Code Hooks guide — DataCamp</a> · <a href="https://claudefa.st/blog/tools/hooks/hooks-guide">Complete Hooks Guide — claudefa.st</a></p>]]></content:encoded>
    <media:content url="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-25-05-claude-code-workflow-size-directory-hook.jpg" medium="image" type="image/jpeg" />
    <media:thumbnail url="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-25-05-claude-code-workflow-size-directory-hook.jpg" />
  </item>
  <item>
    <title><![CDATA[One Container, Production-Grade Inference: Get Started with NVIDIA NIM]]></title>
    <link>https://cloudcodetree.com/ai-news/2026-07-25-04-nvidia-nim-container-inference-quickstart/</link>
    <guid isPermaLink="false">2026-07-25-04-nvidia-nim-container-inference-quickstart</guid>
    <pubDate>Sat, 25 Jul 2026 12:02:00 GMT</pubDate>
    <dc:creator><![CDATA[Chris Harper]]></dc:creator>
    <category><![CDATA[AI]]></category>
    <category><![CDATA[Tutorial]]></category>
    <category><![CDATA[Self-Hosting]]></category>
    <category><![CDATA[LLM]]></category>
    <description><![CDATA[NVIDIA NIM wraps an optimized model, the right inference backend, and an OpenAI-compatible API into a single Docker container. Pull it, run it, serve Llama 3.1 8B in under 5 minutes.]]></description>
    <content:encoded><![CDATA[<p><img src="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-25-04-nvidia-nim-container-inference-quickstart.jpg" alt="" /></p>
<p><strong>TL;DR: NVIDIA NIM wraps an optimized model, the right inference backend, and an OpenAI-compatible API into one Docker container — pull it, start it, and you're serving a real model in under 5 minutes on any NVIDIA GPU.</strong></p>
<p><strong>Resource:</strong> <a href="https://www.youtube.com/watch?v=P4xfQ54gn4M">NVIDIA NIM — Deploy Accelerated AI in 5 Minutes</a> (YouTube, 16 min, All About AI) — covers the full deployment flow from API Catalog to self-hosted GPU container. Pair it with the official <a href="https://docs.nvidia.com/nim/large-language-models/latest/get-started/quickstart.html">NIM LLM quickstart docs</a>.</p>
<p><strong>What you'll be able to do after this:</strong>
- Pull a NIM container and start serving Llama 3.1 8B locally with one <code>docker run</code> command
- Query it from any OpenAI-compatible client by changing only <code>base_url</code> — no new SDK needed
- Prototype against NVIDIA's hosted API Catalog for free, then self-host with identical code</p>
<hr />
<p>## What NIM is — and what it saves you</p>
<p>Running an open model yourself normally means: picking an inference backend (vLLM, SGLang, TRT-LLM), downloading or compiling the right weights, wiring an API server, tuning memory settings per GPU. NIM does all of that inside one container. On startup it detects your GPU, picks the fastest compatible backend, and loads pre-built TensorRT-LLM profiles when available — no compile step, no framework decisions.</p>
<p>## Step 1: Get an NGC API key (free)</p>
<p>Sign up at <a href="https://developer.nvidia.com">developer.nvidia.com</a> and create a key at <a href="https://build.nvidia.com/settings/api-keys">build.nvidia.com/settings/api-keys</a>. You'll use it for both the hosted API Catalog and the private container registry.</p>
<p>## Step 2: Prototype against NVIDIA's hosted endpoints (no GPU required)</p>
<p>```python
from openai import OpenAI</p>
<p>client = OpenAI(
    base_url=&quot;https://integrate.api.nvidia.com/v1&quot;,
    api_key=&quot;&lt;your-ngc-api-key&gt;&quot;,
)
response = client.chat.completions.create(
    model=&quot;meta/llama-3.1-8b-instruct&quot;,
    messages=[{&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: &quot;Explain KV-cache in two sentences.&quot;}],
    max_tokens=200,
)
print(response.choices[0].message.content)
```</p>
<p>This hits NVIDIA's cloud-hosted NIM. It's the same API schema you'll point at your own GPU later — the only change is <code>base_url</code>.</p>
<p>## Step 3: Run a NIM container on your own GPU</p>
<p>GPU requirement: ≥24GB VRAM for Llama 3.1 8B (A100 40GB, RTX 4090, or similar).</p>
<p>```bash
export NGC_API_KEY=&lt;your-key&gt;</p>
<p># Log in to the NVIDIA container registry
echo &quot;$NGC_API_KEY&quot; | docker login nvcr.io --username '$oauthtoken' --password-stdin</p>
<p># Pull and run (first run takes 5-15 min — downloads weights + caches backend profiles)
docker run --rm -it \
  --gpus all \
  -e NGC_API_KEY=$NGC_API_KEY \
  -v ~/.cache/nim:/opt/nim/.cache \
  -p 8000:8000 \
  nvcr.io/nim/meta/llama-3.1-8b-instruct:latest
```</p>
<p>The <code>-v ~/.cache/nim</code> mount persists the compiled model profiles — subsequent restarts load in seconds.</p>
<p>## Step 4: Point your client at localhost</p>
<p>``<code>python
client = OpenAI(
    base_url=&quot;http://localhost:8000/v1&quot;,
    api_key=&quot;ignored&quot;,     # NIM doesn't validate this locally
)
# Model name, parameters, and response format are identical
</code>``</p>
<p>Wait for the container to be ready before sending requests:</p>
<p>``<code>bash
curl -s http://localhost:8000/v1/health/ready
# returns {&quot;status&quot;:&quot;ready&quot;} once the model is loaded
</code>``</p>
<p>## What NIM handles vs. a manual vLLM setup</p>
<p>| Manual vLLM/SGLang | NVIDIA NIM |
|---|---|
| Choose backend, install, configure | Auto-selected based on your GPU |
| Compile TRT-LLM profiles yourself | Pre-built, cached on first run |
| Wire API server + routes | OpenAI-compatible API included |
| Health + metrics endpoints | Built in (<code>/health/ready</code>, <code>/metrics</code>) |
| Re-run setup for each new model | Pull a different NIM image |</p>
<p>NIM trades flexibility for speed-to-production. For standard models (Llama, Mistral, Qwen, Gemma) where you want reliable throughput and don't need a custom engine configuration, it's the fastest path from &quot;I have a GPU&quot; to &quot;I have a production endpoint.&quot;</p>
<p><strong>Sources:</strong> <a href="https://www.youtube.com/watch?v=P4xfQ54gn4M">NVIDIA NIM — Deploy Accelerated AI in 5 Minutes (YouTube)</a> · <a href="https://docs.nvidia.com/nim/large-language-models/latest/get-started/quickstart.html">NIM LLM Quickstart (official docs)</a> · <a href="https://developer.nvidia.com/blog/a-simple-guide-to-deploying-generative-ai-with-nvidia-nim/">Simple Guide to Deploying GenAI with NIM — NVIDIA Technical Blog</a> · <a href="https://docs.api.nvidia.com/nim/docs/api-quickstart">API Catalog Quickstart</a></p>]]></content:encoded>
    <media:content url="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-25-04-nvidia-nim-container-inference-quickstart.jpg" medium="image" type="image/jpeg" />
    <media:thumbnail url="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-25-04-nvidia-nim-container-inference-quickstart.jpg" />
  </item>
  <item>
    <title><![CDATA[Your MCP Server Has Three Days: What the July 28 Spec Breaks and How to Test Today]]></title>
    <link>https://cloudcodetree.com/ai-news/2026-07-25-03-mcp-2026-07-28-spec-stateless-migration/</link>
    <guid isPermaLink="false">2026-07-25-03-mcp-2026-07-28-spec-stateless-migration</guid>
    <pubDate>Sat, 25 Jul 2026 04:08:00 GMT</pubDate>
    <dc:creator><![CDATA[Chris Harper]]></dc:creator>
    <category><![CDATA[AI]]></category>
    <category><![CDATA[Workflow]]></category>
    <category><![CDATA[MCP]]></category>
    <category><![CDATA[Best Practices]]></category>
    <description><![CDATA[The MCP spec publishes July 28 with a major breaking change: the protocol goes stateless, dropping session IDs and the initialization handshake. Beta SDKs are available to test your server today.]]></description>
    <content:encoded><![CDATA[<p><img src="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-25-03-mcp-2026-07-28-spec-stateless-migration.jpg" alt="" /></p>
<p><strong>TL;DR: The MCP specification publishes July 28 — protocol goes stateless (no sessions, no init handshake), OAuth 2.1 auth replaces custom flows, and beta SDKs are available to test your server today.</strong></p>
<p>The July 28 MCP spec isn't a minor version bump. Six Specification Enhancement Proposals ship together, restructuring how every MCP server and client communicate. If your server uses session IDs, the initialization round-trip, or sampling, this affects you.</p>
<p>## What changes</p>
<p>| Pattern | After July 28 |
|---|---|
| Session IDs across calls | Sessions removed — design for stateless |
| <code>initialize</code> / <code>initialized</code> handshake | Dropped — clients skip this entirely |
| Sampling (server → host LLM calls) | Deprecated — 12-month runway |
| Roots (filesystem boundary declarations) | Deprecated — 12-month runway |
| Tools-list responses | Now cacheable — add <code>Cache-Control</code> headers |</p>
<p>The biggest practical win: MCP servers can now sit behind a round-robin load balancer without sticky sessions. No more &quot;pin this client to this server process&quot; complexity.</p>
<p>## Test your server today</p>
<p>The beta SDKs for the new spec are already out:</p>
<p>```bash
# Python
pip install mcp==1.11.0b1</p>
<p># TypeScript / Node
npm install @modelcontextprotocol/sdk@1.11.0-beta.0
```</p>
<p>Swap in the beta SDK and run your existing test suite. Anything that references <code>session_id</code>, calls <code>initialize</code>, or depends on sampling will surface immediately. Most servers need minor changes — the main surgery is removing initialization handshake code and ensuring handlers don't read from a session context object.</p>
<p>## The auth rewrite</p>
<p>The spec now aligns MCP authorization with OAuth 2.1 and OpenID Connect, which makes enterprise integration significantly easier. If your server's current auth was hand-rolled for the draft spec, expect to update it — the new flow follows standard OIDC patterns rather than MCP-specific conventions. The WorkOS guide linked below covers the new auth flow in detail.</p>
<p><strong>Sources:</strong> <a href="https://blog.modelcontextprotocol.io/posts/2026-07-28-release-candidate/">MCP 2026-07-28 Release Candidate</a> · <a href="https://blog.modelcontextprotocol.io/posts/sdk-betas-2026-07-28/">Beta SDKs Available</a> · <a href="https://workos.com/blog/mcp-2026-spec-agent-authentication">MCP Auth Changes (WorkOS)</a> · <a href="https://aaif.io/blog/mcp-2026-07-28-whats-changing-and-how-to-migrate">Migration Guide (AAIF)</a></p>]]></content:encoded>
    <media:content url="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-25-03-mcp-2026-07-28-spec-stateless-migration.jpg" medium="image" type="image/jpeg" />
    <media:thumbnail url="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-25-03-mcp-2026-07-28-spec-stateless-migration.jpg" />
  </item>
  <item>
    <title><![CDATA[MCP Lands in Blender, Unreal Engine, Adobe, and Houdini at SIGGRAPH 2026]]></title>
    <link>https://cloudcodetree.com/ai-news/2026-07-25-02-nvidia-siggraph-mcp-creative-tools/</link>
    <guid isPermaLink="false">2026-07-25-02-nvidia-siggraph-mcp-creative-tools</guid>
    <pubDate>Sat, 25 Jul 2026 04:07:00 GMT</pubDate>
    <dc:creator><![CDATA[Chris Harper]]></dc:creator>
    <category><![CDATA[AI]]></category>
    <category><![CDATA[News]]></category>
    <category><![CDATA[MCP]]></category>
    <category><![CDATA[Developer Tools]]></category>
    <description><![CDATA[At SIGGRAPH 2026, Blender, Unreal Engine, Adobe Creative Cloud, and Houdini 22 all demonstrated MCP server integrations, making AI agents first-class operators inside professional creative tools.]]></description>
    <content:encoded><![CDATA[<p><img src="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-25-02-nvidia-siggraph-mcp-creative-tools.jpg" alt="" /></p>
<p><strong>TL;DR: SIGGRAPH 2026 marked the moment MCP stopped being an experiment in creative software — Blender, Unreal Engine, Adobe Creative Cloud, SideFX Houdini 22, and others all shipped or demonstrated live MCP integrations.</strong></p>
<p>NVIDIA used SIGGRAPH 2026 to showcase that Model Context Protocol has crossed into standard infrastructure for professional creative tooling. Blender, Unreal Engine, Adobe Creative Cloud, SideFX Houdini 22, Boris FX Silhouette, and Foundry Griptape each announced or demonstrated MCP server integrations. An AI agent running on local hardware can now inspect a Houdini scene for missing textures, generate procedural character rigs from a prompt, or prepare Blender export variants — while the artist retains final approval.</p>
<p>NVIDIA also released <strong>Cosmos 3 Edge</strong>, a 4B-parameter open world model for physical AI and robotics, deployable on Jetson and RTX hardware for on-device inference without a cloud dependency.</p>
<p><strong>Why it matters:</strong> If your team uses any of these tools in its content pipeline, you can now build an agent that works inside them using the same MCP client-server pattern you'd use to connect Claude to a database. MCP is no longer just a way to give AI access to data — it's becoming the standard agentic interface across the tooling stack.</p>
<p><strong>Sources:</strong> <a href="https://blogs.nvidia.com/blog/siggraph-news-2026/">NVIDIA Blog — SIGGRAPH 2026</a> · <a href="https://www.techtimes.com/articles/321401/20260723/nvidia-siggraph-cosmos-3-edge-brings-physical-ai-pipeline-single-gpu.htm">Cosmos 3 Edge — TechTimes</a></p>]]></content:encoded>
    <media:content url="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-25-02-nvidia-siggraph-mcp-creative-tools.jpg" medium="image" type="image/jpeg" />
    <media:thumbnail url="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-25-02-nvidia-siggraph-mcp-creative-tools.jpg" />
  </item>
  <item>
    <title><![CDATA[The Cut That Breaks Your RAG: A Beginner's Guide to Chunking Strategies]]></title>
    <link>https://cloudcodetree.com/ai-news/2026-07-25-01-rag-document-chunking-strategies/</link>
    <guid isPermaLink="false">2026-07-25-01-rag-document-chunking-strategies</guid>
    <pubDate>Sat, 25 Jul 2026 04:06:00 GMT</pubDate>
    <dc:creator><![CDATA[Chris Harper]]></dc:creator>
    <category><![CDATA[AI]]></category>
    <category><![CDATA[Tutorial]]></category>
    <category><![CDATA[RAG]]></category>
    <category><![CDATA[Embeddings]]></category>
    <description><![CDATA[Document chunking is the most-overlooked RAG variable — the wrong split size or strategy silently tanks retrieval quality. Three strategies, the two numbers that matter, and the silent killer expla…]]></description>
    <content:encoded><![CDATA[<p><img src="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-25-01-rag-document-chunking-strategies.jpg" alt="" /></p>
<p><strong>TL;DR: Document chunking is the most-overlooked RAG variable — the wrong split size or strategy silently tanks retrieval quality before the LLM ever runs. Here's how to get it right from the start.</strong></p>
<p><strong>What you'll be able to do after this:</strong>
- Pick the right splitting strategy (fixed-size, recursive, semantic) for your document type and query mix
- Configure <code>chunk_size</code> and <code>chunk_overlap</code> with numbers that actually work for your use case
- Avoid the three most common chunking mistakes that silently lower retrieval recall by 20–30%</p>
<p><strong>Resource:</strong> <a href="https://www.youtube.com/watch?v=Lk6D1huUK0s">Why Your RAG Gives Wrong Answers (And 4 Chunking Strategies to Fix It)</a> — YouTube. Covers the strategies below in video form with live demos; pair it with this walkthrough.</p>
<hr />
<p>## The three strategies</p>
<p>### 1. CharacterTextSplitter (fixed-size baseline)</p>
<p>Split every N characters regardless of content. Fast and deterministic, but splits mid-sentence and destroys semantic context at boundaries.</p>
<p>```python
from langchain_text_splitters import CharacterTextSplitter</p>
<p>splitter = CharacterTextSplitter(chunk_size=512, chunk_overlap=64)
chunks = splitter.split_text(raw_text)
```</p>
<p>Use this only as a baseline to verify your pipeline end-to-end; don't ship it.</p>
<p>### 2. RecursiveCharacterTextSplitter (the production default)</p>
<p>Tries separators in priority order: `</p>
<p><code> → </code>
<code> → </code>. <code> → </code> ` → character. Steps down only when the current separator doesn't fit the budget. Respects natural document boundaries while still hitting your size limit.</p>
<p>```python
from langchain_text_splitters import RecursiveCharacterTextSplitter</p>
<p>splitter = RecursiveCharacterTextSplitter(
    chunk_size=512,
    chunk_overlap=64,
    separators=[&quot;</p>
<p>&quot;, &quot;
&quot;, &quot;. &quot;, &quot; &quot;, &quot;&quot;]
)
docs = splitter.create_documents([raw_text])
```</p>
<p>This is the right default for most corpora. Start here.</p>
<p>### 3. SemanticChunker (embedding-based grouping)</p>
<p>Embeds each sentence and groups adjacent sentences whose cosine similarity passes a threshold. Produces semantically coherent chunks — ideal for technical reports and research papers where topics shift gradually.</p>
<p>```python
from langchain_experimental.text_splitter import SemanticChunker
from langchain_huggingface import HuggingFaceEmbeddings</p>
<p>embeddings = HuggingFaceEmbeddings(model_name=&quot;sentence-transformers/all-MiniLM-L6-v2&quot;)
chunker = SemanticChunker(embeddings, breakpoint_threshold_type=&quot;percentile&quot;)
docs = chunker.create_documents([raw_text])
```</p>
<p>Cost: one embedding call per sentence. Worth it for long-form structured documents; overkill for short mixed corpora.</p>
<hr />
<p>## The two numbers that matter</p>
<p>- <strong><code>chunk_size</code></strong>: 256–512 tokens for factoid/lookup queries; 1024–2048 for analytical queries that need surrounding context. Start at 512 and tune by measuring retrieval recall on 20–30 representative questions.
- <strong><code>chunk_overlap</code></strong>: 10–20% of <code>chunk_size</code>. Overlap prevents a key sentence from spanning two chunks and appearing in neither. At 512 chunks, 64 characters of overlap is a solid starting point.</p>
<p>## The silent killer</p>
<p>Splitting code or Markdown at fixed character boundaries. Use structure-aware splitters for these:</p>
<p>```python
from langchain_text_splitters import MarkdownTextSplitter, PythonCodeTextSplitter</p>
<p>md_splitter = MarkdownTextSplitter(chunk_size=1000)
py_splitter = PythonCodeTextSplitter(chunk_size=1000)
```</p>
<p>These preserve headings and function boundaries so a chunk never starts mid-code-block or mid-header.</p>
<p><strong>Sources:</strong> <a href="https://www.youtube.com/watch?v=Lk6D1huUK0s">Why Your RAG Gives Wrong Answers (YouTube)</a> · <a href="https://python.langchain.com/api_reference/text_splitters/index.html">LangChain Text Splitters Reference</a> · <a href="https://www.firecrawl.dev/blog/best-chunking-strategies-rag">Best Chunking Strategies for RAG 2026 — Firecrawl</a></p>]]></content:encoded>
    <media:content url="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-25-01-rag-document-chunking-strategies.jpg" medium="image" type="image/jpeg" />
    <media:thumbnail url="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-25-01-rag-document-chunking-strategies.jpg" />
  </item>
  <item>
    <title><![CDATA[Claude Opus 5 Is Here: Near-Fable-5 Capability at Half the Cost]]></title>
    <link>https://cloudcodetree.com/ai-news/2026-07-24-09-claude-opus-5-launch/</link>
    <guid isPermaLink="false">2026-07-24-09-claude-opus-5-launch</guid>
    <pubDate>Fri, 24 Jul 2026 20:05:00 GMT</pubDate>
    <dc:creator><![CDATA[Chris Harper]]></dc:creator>
    <category><![CDATA[AI]]></category>
    <category><![CDATA[Workflow]]></category>
    <category><![CDATA[Claude Code]]></category>
    <category><![CDATA[Agents]]></category>
    <category><![CDATA[Best Practices]]></category>
    <description><![CDATA[Anthropic launched Claude Opus 5 today — near-Fable-5 capability at $5/$25 per million tokens (same price as Opus 4.8), with a 1M token context window and an effort slider for trading intelligence…]]></description>
    <content:encoded><![CDATA[<p><img src="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-24-09-claude-opus-5-launch.jpg" alt="" /></p>
<p><strong>TL;DR: Claude Opus 5 ships today — near-Fable-5 performance at half the cost, same price as Opus 4.8, model ID <code>claude-opus-5</code>, 1M token context, effort slider, and 4x better code verification.</strong></p>
<p>Anthropic released Claude Opus 5 on July 24, 2026. It's the new default on Claude Max and the strongest model on Claude Pro. The one-sentence case for upgrading: you get significantly better agentic coding, computer use, and long-horizon knowledge work at exactly what you were already paying.</p>
<p>## What changed vs Opus 4.8</p>
<p>| | Opus 4.8 | Opus 5 |
|---|---|---|
| Context window | 200K tokens | <strong>1M tokens</strong> |
| Coding reliability | baseline | 4× fewer unremarked code flaws |
| Effort slider | no | <strong>yes</strong> (low / medium / high) |
| Price | $5/$25/M tokens | $5/$25/M tokens (same) |
| Default on Max | yes | yes |</p>
<p>Opus 5 is state-of-the-art on Anthropic's Frontier-Bench and GDPval-AA evals. Fable 5 remains ahead on cybersecurity-specific tasks.</p>
<p>## API migration — one line</p>
<p>```python
# Before
model = &quot;claude-opus-4-8&quot;</p>
<p># After
model = &quot;claude-opus-5&quot;
```</p>
<p>No other changes required. Context window, pricing, and tool-use API are unchanged.</p>
<p>## The effort slider</p>
<p>Opus 5 adds a three-level effort control — low, medium, high — accessible from the Claude.ai UI and through the API <code>effort</code> parameter. Use <code>&quot;low&quot;</code> for fast summarization or classification tasks where deep reasoning isn't needed; save <code>&quot;high&quot;</code> for multi-step planning or complex debugging. This replaces the separate Fast-mode approach (Opus 4.7 fast mode was deprecated today; migrate to Opus 4.8 or skip ahead to Opus 5).</p>
<p>## When to use which model</p>
<p>| Task | Model | Price/M tokens |
|---|---|---|
| Day-to-day coding, PR review, Q&amp;A | Sonnet 5 | $3 / $15 |
| Complex agentic tasks, long-horizon work, knowledge Q&amp;A | <strong>Opus 5</strong> | $5 / $25 |
| Frontier cybersecurity, hardest research | Fable 5 | $10 / $50 |</p>
<p>For most Claude Code sessions and agent workflows, Opus 5 is now the obvious default: it closes most of the gap with Fable 5 at half the API price, and the 1M token context window removes nearly all forced-summarization workarounds.</p>
<p><strong>Sources:</strong> <a href="https://www.anthropic.com/news/claude-opus-5">Introducing Claude Opus 5 — Anthropic</a> · <a href="https://aws.amazon.com/blogs/machine-learning/introducing-claude-opus-5-on-aws-anthropics-most-capable-opus-model/">Claude Opus 5 on AWS — AWS Machine Learning Blog</a> · <a href="https://venturebeat.com/orchestration/anthropic-launches-claude-opus-5-a-cheaper-ai-model-for-coding-agents-and-enterprise-workflows/">VentureBeat</a> · <a href="https://www.bloomberg.com/news/articles/2026-07-24/anthropic-unveils-more-cost-efficient-model-for-affordable-workplace-tasks">Bloomberg</a></p>]]></content:encoded>
    <media:content url="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-24-09-claude-opus-5-launch.jpg" medium="image" type="image/jpeg" />
    <media:thumbnail url="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-24-09-claude-opus-5-launch.jpg" />
  </item>
  <item>
    <title><![CDATA[deepseek-chat and deepseek-reasoner Are Gone — What to Fix Right Now]]></title>
    <link>https://cloudcodetree.com/ai-news/2026-07-24-08-deepseek-api-aliases-retired/</link>
    <guid isPermaLink="false">2026-07-24-08-deepseek-api-aliases-retired</guid>
    <pubDate>Fri, 24 Jul 2026 20:04:00 GMT</pubDate>
    <dc:creator><![CDATA[Chris Harper]]></dc:creator>
    <category><![CDATA[AI]]></category>
    <category><![CDATA[News]]></category>
    <category><![CDATA[Developer Tools]]></category>
    <category><![CDATA[LLM]]></category>
    <description><![CDATA[DeepSeek retired its deepseek-chat and deepseek-reasoner aliases at 15:59 UTC today — any integration still using them gets errors. Migrate to deepseek-v4-flash, but disable thinking mode or you wi…]]></description>
    <content:encoded><![CDATA[<p><img src="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-24-08-deepseek-api-aliases-retired.jpg" alt="" /></p>
<p><strong>TL;DR: The <code>deepseek-chat</code> and <code>deepseek-reasoner</code> API aliases retired at 15:59 UTC today — if your integration is broken right now, that's why. Migrate to <code>deepseek-v4-flash</code> with one non-obvious fix.</strong></p>
<p>DeepSeek's backward-compatibility shim for <code>deepseek-chat</code> and <code>deepseek-reasoner</code> expired at 15:59 UTC on July 24. Both aliases had been pointing at <code>deepseek-v4-flash</code> under the hood since the V4 line shipped in April, kept alive purely for existing integrations. That shim is now gone.</p>
<p>## The one-line fix</p>
<p>```python
# Before
model = &quot;deepseek-chat&quot;     # or &quot;deepseek-reasoner&quot;</p>
<p># After
model = &quot;deepseek-v4-flash&quot; # non-thinking path (see below)
# or
model = &quot;deepseek-v4-pro&quot;   # higher capability
```</p>
<p>## The non-obvious catch: thinking mode</p>
<p><code>deepseek-v4-flash</code> <strong>defaults to thinking enabled</strong>. If you swap <code>deepseek-chat</code> → <code>deepseek-v4-flash</code> without disabling it, you'll get reasoning output you never asked for: more tokens, higher latency, a bigger bill, and different downstream behavior in any system that parsed the old format.</p>
<p>To match the previous <code>deepseek-chat</code> behavior:</p>
<p>``<code>python
# OpenAI-compatible client
response = client.chat.completions.create(
    model=&quot;deepseek-v4-flash&quot;,
    extra_body={&quot;thinking_enabled&quot;: False},   # suppress reasoning mode
    messages=[...]
)
</code>``</p>
<p><strong>Why it matters:</strong> If you route through OpenRouter, Together, or a local proxy that aliased <code>deepseek-chat</code>, check whether your routing layer failed hard or soft — and whether <code>thinking_enabled</code> passes through to the underlying model.</p>
<p><strong>Sources:</strong> <a href="https://api-docs.deepseek.com/updates/">DeepSeek API changelog</a> · <a href="https://www.digitalapplied.com/blog/deepseek-api-alias-retirement-july-24-migration-2026">Migration guide — Digital Applied</a> · <a href="https://www.developersdigest.tech/blog/deepseek-chat-to-v4-migration-guide">Developers Digest: migrate to V4</a></p>]]></content:encoded>
    <media:content url="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-24-08-deepseek-api-aliases-retired.jpg" medium="image" type="image/jpeg" />
    <media:thumbnail url="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-24-08-deepseek-api-aliases-retired.jpg" />
  </item>
  <item>
    <title><![CDATA[Grade Your Agent's Output Automatically: The LLM-as-Judge Pattern with Claude]]></title>
    <link>https://cloudcodetree.com/ai-news/2026-07-24-07-llm-as-judge-evals-agents/</link>
    <guid isPermaLink="false">2026-07-24-07-llm-as-judge-evals-agents</guid>
    <pubDate>Fri, 24 Jul 2026 20:03:00 GMT</pubDate>
    <dc:creator><![CDATA[Chris Harper]]></dc:creator>
    <category><![CDATA[AI]]></category>
    <category><![CDATA[Tutorial]]></category>
    <category><![CDATA[Agents]]></category>
    <category><![CDATA[Best Practices]]></category>
    <description><![CDATA[Use Claude as an automated rubric-based grader — one judge call per dimension, temperature zero, structured JSON verdict — to evaluate agent outputs and fine-tune checkpoints at scale without human…]]></description>
    <content:encoded><![CDATA[<p><img src="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-24-07-llm-as-judge-evals-agents.jpg" alt="" /></p>
<p><strong>TL;DR: Call Claude with a rubric prompt, temperature=0, and a required JSON output to get consistent, dimension-by-dimension scores for any agent or fine-tune output — at the speed of an API call, not a human review queue.</strong></p>
<p><strong>What you'll be able to do after this:</strong>
- Build a rubric-based judge that scores agent outputs on custom dimensions (relevance, groundedness, conciseness) with a single API call each
- Run 50 agent outputs through the judge and get a structured CSV of scores to compare model checkpoints
- Wire the judge into a fine-tuning feedback loop: identify low-scoring examples, use them as hard training cases in the next run</p>
<p><strong>Resource:</strong> <a href="https://www.anthropic.com/engineering/demystifying-evals-for-ai-agents">Demystifying Evals for AI Agents</a> — Anthropic Engineering Blog. This is how Anthropic's own team builds evaluation pipelines for long-horizon agents; the pattern transfers directly to evaluating any fine-tuned model or multi-step workflow.</p>
<p>## Why LLM-as-judge</p>
<p>After fine-tuning or building an agent, you face a hard question: how do you know it's actually better? Human evaluation is slow and expensive. Automatic metrics like ROUGE and BLEU miss hallucinations and tone. LLM-as-judge bridges the gap: you define what &quot;good&quot; means, Claude grades it consistently, and the whole pipeline runs in seconds.</p>
<p>## The pattern — one judge per dimension</p>
<p>```python
import anthropic, json</p>
<p>client = anthropic.Anthropic()</p>
<p>RUBRIC = &quot;&quot;&quot;You are a strict evaluator. Score ONLY the dimension you are asked about.
Output JSON: {&quot;score&quot;: 1-5, &quot;reason&quot;: &quot;one sentence&quot;}</p>
<p>Dimension: {dimension}
Definition: {definition}
&quot;&quot;&quot;</p>
<p>def judge_dimension(question, context, response, dimension, definition):
    msg = client.messages.create(
        model=&quot;claude-opus-5&quot;,
        max_tokens=128,
        temperature=0,          # deterministic — critical for reproducibility
        system=RUBRIC.format(dimension=dimension, definition=definition),
        messages=[{
            &quot;role&quot;: &quot;user&quot;,
            &quot;content&quot;: f&quot;Question: {question}\nContext: {context}\nResponse: {response}&quot;
        }]
    )
    return json.loads(msg.content[0].text)</p>
<p># Run three isolated judges on the same output
output = &quot;The contract renews annually at the rate locked in at signing.&quot;
scores = {}
for dim, defn in [
    (&quot;relevance&quot;, &quot;Does the response directly answer the question?&quot;),
    (&quot;groundedness&quot;, &quot;Are all facts supported by the provided context?&quot;),
    (&quot;conciseness&quot;, &quot;Does the response avoid filler and repetition?&quot;),
]:
    scores[dim] = judge_dimension(&quot;When does the contract renew?&quot;, context_doc, output, dim, defn)</p>
<p>print(scores)
# {&quot;relevance&quot;: {&quot;score&quot;: 5, &quot;reason&quot;: &quot;...&quot;}, &quot;groundedness&quot;: {&quot;score&quot;: 3, &quot;reason&quot;: &quot;says annually but context says every 18 months&quot;}, ...}
```</p>
<p>## Key design decisions</p>
<p><strong>Temperature=0.</strong> You need reproducible scores. A judge that gives the same response a 3 one run and a 5 the next is useless for regression testing.</p>
<p><strong>One criterion per call.</strong> Anthropic's engineering guidance is clear: grade dimensions in isolation. A single &quot;grade everything&quot; prompt produces correlated scores that hide individual failures. Separate calls reveal which specific dimension regressed between model versions.</p>
<p><strong>Chain-of-thought inside the verdict.</strong> The <code>reason</code> field is not optional. A numeric score alone never tells you <em>why</em> — the reasoning surfaces specifics like &quot;response says 2024 but context shows 2026&quot; that let you fix the exact training example.</p>
<p>## Validate before you trust</p>
<p>Label 30–50 examples by hand, run them through your judge, and compare. Target 75–90% agreement with human labels. Below 60%? Your rubric is ambiguous — clarify the definition of each dimension before scaling.</p>
<p>## Closing the loop with fine-tuning</p>
<p>Once you have a judge harness, wire it to your training pipeline:
1. Score outputs from the baseline and from each checkpoint with the judge
2. Sort by lowest score per dimension
3. Use the lowest-scoring examples as hard negatives in your next DPO or SFT round (mistake amplification)
4. Re-score after each run to track per-dimension improvement over time</p>
<p>This turns LLM-as-judge from a one-off tool into a continuous quality feedback loop.</p>
<p><strong>Sources:</strong> <a href="https://www.anthropic.com/engineering/demystifying-evals-for-ai-agents">Demystifying Evals for AI Agents — Anthropic Engineering</a> · <a href="https://qaskills.sh/blog/llm-as-judge-evaluation-guide-2026">LLM-as-Judge Evaluation Guide 2026 — Qaskills</a> · <a href="https://langfuse.com/docs/evaluation/evaluation-methods/llm-as-judge">LLM-as-Judge docs — Langfuse</a></p>]]></content:encoded>
    <media:content url="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-24-07-llm-as-judge-evals-agents.jpg" medium="image" type="image/jpeg" />
    <media:thumbnail url="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-24-07-llm-as-judge-evals-agents.jpg" />
  </item>
  <item>
    <title><![CDATA[Show, Don't Tell: Teach Claude a Workflow by Recording Your Screen Once]]></title>
    <link>https://cloudcodetree.com/ai-news/2026-07-24-06-cowork-record-a-skill-workflow-teaching/</link>
    <guid isPermaLink="false">2026-07-24-06-cowork-record-a-skill-workflow-teaching</guid>
    <pubDate>Fri, 24 Jul 2026 12:04:00 GMT</pubDate>
    <dc:creator><![CDATA[Chris Harper]]></dc:creator>
    <category><![CDATA[AI]]></category>
    <category><![CDATA[Workflow]]></category>
    <category><![CDATA[Claude Code]]></category>
    <category><![CDATA[Best Practices]]></category>
    <description><![CDATA[Claude Cowork's "Record a Skill" feature (July 21) converts a single screen-recording walkthrough into a reusable, rerunnable Skill — no prompt engineering required.]]></description>
    <content:encoded><![CDATA[<p><img src="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-24-06-cowork-record-a-skill-workflow-teaching.jpg" alt="" /></p>
<p><strong>TL;DR: Claude Cowork's &quot;Record a Skill&quot; converts a single screen-recording walkthrough into a reusable, rerunnable Skill — narrate your workflow once and Claude writes the automation for you, no prompts needed.</strong></p>
<p>The hardest part of automating a workflow with Claude isn't running the automation — it's translating what you know about a task into a clear prompt. &quot;Record a Skill&quot;, released July 21 in Claude Cowork for the desktop app, removes that barrier entirely.</p>
<p>## How it works</p>
<p>1. Open the <strong>+</strong> menu in Claude Cowork (desktop app — Pro, Max, or Team plan)
2. Start recording and complete the workflow at your normal pace: drag files, click buttons, fill in forms
3. Narrate as you go: <em>&quot;now I'm checking the PR status, then copying the review URL and posting it to Slack&quot;</em>
4. Stop the recording — Claude processes the screen activity, clicks, keystrokes, and voice commentary together and generates a structured Skill file
5. The Skill appears in your library; invoke it the next time without repeating the walkthrough</p>
<p>## Why narration outperforms prompts</p>
<p>When you write a prompt to describe a workflow, you have to anticipate every step, exception, and decision point in advance and express them in prose. Screen recording captures your actual behavior — including the implicit checks you perform and the edge cases you handle instinctively. Claude can observe those decision moments directly (&quot;user paused here to check the ticket due date before moving on&quot;) rather than inferring them from your written description.</p>
<p>## Good candidates for your first recording</p>
<p>- Repetitive reporting workflows: pull status from Jira, format it, post to a Slack channel
- Code review checklists you run across multiple PRs in the same way
- Internal tool navigation that isn't documented anywhere but you do daily
- Onboarding tasks you want to standardize for your team</p>
<p><strong>Limitation to know:</strong> Currently desktop-only inside Claude Cowork. Screen recordings can capture sensitive information — review what was recorded before sharing or team-deploying a Skill.</p>
<p><strong>Sources:</strong> <a href="https://www.androidheadlines.com/2026/07/claude-cowork-record-a-skill-screen-recording-feature.html">Show, Don't Tell: Claude Cowork Now Learns Skills from Your Screen Recordings — Android Headlines</a> · <a href="https://www.androidauthority.com/claude-cowork-record-skills-feature-3689919/">Forget prompts: Claude can now learn your workflow by watching your screen — Android Authority</a> · <a href="https://aiweekly.co/alerts/anthropic-ships-record-a-skill-in-claude-cowork-desktop-app">Anthropic Ships &quot;Record a Skill&quot; in Claude Cowork — AI Weekly</a></p>]]></content:encoded>
    <media:content url="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-24-06-cowork-record-a-skill-workflow-teaching.jpg" medium="image" type="image/jpeg" />
    <media:thumbnail url="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-24-06-cowork-record-a-skill-workflow-teaching.jpg" />
  </item>
  <item>
    <title><![CDATA[Claude Voice Mode Gains Opus/Sonnet Model Choice and Cross-App Voice Automation]]></title>
    <link>https://cloudcodetree.com/ai-news/2026-07-24-05-claude-voice-opus-cross-app-automation/</link>
    <guid isPermaLink="false">2026-07-24-05-claude-voice-opus-cross-app-automation</guid>
    <pubDate>Fri, 24 Jul 2026 12:03:00 GMT</pubDate>
    <dc:creator><![CDATA[Chris Harper]]></dc:creator>
    <category><![CDATA[AI]]></category>
    <category><![CDATA[News]]></category>
    <category><![CDATA[Claude Code]]></category>
    <category><![CDATA[Agents]]></category>
    <description><![CDATA[Claude voice mode now supports Opus, Sonnet, and Haiku model choice mid-conversation, and can trigger actions in Gmail, Slack, Calendar, Canva, and Notion via voice commands in ten languages.]]></description>
    <content:encoded><![CDATA[<p><img src="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-24-05-claude-voice-opus-cross-app-automation.jpg" alt="" /></p>
<p><strong>TL;DR: Claude voice mode (July 23) expands from Haiku-only to full Opus/Sonnet/Haiku model choice with a mid-conversation picker, and adds cross-app automation that triggers actions in Gmail, Slack, Calendar, Canva, and Notion via voice.</strong></p>
<p>Anthropic shipped a significant voice mode update on July 23. Previously limited to Haiku, voice mode now opens with whichever model you last used in text chat and lets you switch between Haiku, Sonnet, and Opus mid-call. Paid plans unlock Opus and Sonnet; free plans get Haiku and one connected app.</p>
<p>The more developer-relevant piece: cross-app automation via voice is live in ten languages. Users can now trigger structured actions — compose and send an email, add a calendar event, post to Slack, update a Canva canvas — through voice commands routed through Claude's existing tool-use machinery.</p>
<p><strong>Why it matters:</strong> The &quot;voice → intent → tool call → external service&quot; pattern is exactly what agentic voice interfaces need. Anthropic is validating this architecture at scale with a consumer product before it reaches the API. Developers building voice-controlled Claude workflows should watch the connected-app tooling patterns that emerge from this rollout.</p>
<p><strong>Sources:</strong> <a href="https://techcrunch.com/2026/07/23/anthropic-updates-claude-voice-mode-with-more-capable-models/">Anthropic updates Claude voice mode with more capable models — TechCrunch</a> · <a href="https://www.unite.ai/anthropic-brings-opus-and-sonnet-to-claude-voice-mode/">Anthropic Brings Opus and Sonnet to Claude Voice Mode — Unite.AI</a></p>]]></content:encoded>
    <media:content url="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-24-05-claude-voice-opus-cross-app-automation.jpg" medium="image" type="image/jpeg" />
    <media:thumbnail url="https://github.com/cloudcodetree/cloudcodetree.github.io/releases/download/blog-images/2026-07-24-05-claude-voice-opus-cross-app-automation.jpg" />
  </item>
  </channel>
</rss>
