<?xml version="1.0" encoding="utf-8" standalone="yes"?><?xml-stylesheet type="text/xsl" href="/rss.xsl"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Python Developer Tooling Handbook – Ai-Assistants</title>
    <link>https://pydevtools.com/tags/ai-assistants/</link>
    <description>The Python Developer Tooling Handbook is a comprehensive guide to Python development tools including uv, ruff, pytest, mypy, ty, and more.</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <lastBuildDate>Tue, 14 Apr 2026 09:00:00 -0400</lastBuildDate>
    
	  <atom:link href="https://pydevtools.com/tags/ai-assistants/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>uv won developer hearts. Now it has to win READMEs.</title>
      <link>https://pydevtools.com/blog/uv-admired-but-not-adopted/</link>
      <pubDate>Tue, 14 Apr 2026 09:00:00 -0400</pubDate>
      <author>Tim Hopper</author>
      <guid>https://pydevtools.com/blog/uv-admired-but-not-adopted/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://pydevtools.com/handbook/reference/uv/&#34;&gt;uv&lt;/a&gt; ranked as the &lt;a href=&#34;https://survey.stackoverflow.co/2025/technology#admired-and-desired&#34;target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;most admired technology&lt;/a&gt; in Stack Overflow&amp;rsquo;s 2025 Developer Survey at 74%. A recent &lt;a href=&#34;https://aleyan.com/blog/2026-why-arent-we-uv-yet/&#34;target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;analysis by Andrey Aleyan&lt;/a&gt; of the top 100,000 Python repositories on GitHub put uv adoption (measured by the presence of &lt;code&gt;uv.lock&lt;/code&gt;) at roughly 10%. The gap between &amp;ldquo;developers love this&amp;rdquo; and &amp;ldquo;developers ship this&amp;rdquo; is wider than any tooling story in recent memory.&lt;/p&gt;
&lt;p&gt;Aleyan&amp;rsquo;s diagnosis is that AI coding agents are the bottleneck: their training data is overwhelmingly &lt;code&gt;pip install -r requirements.txt&lt;/code&gt;, so they emit &lt;code&gt;pip install -r requirements.txt&lt;/code&gt;. That diagnosis is correct but incomplete. Adoption is bottlenecked by three reinforcing forces, and the AI-agent story is only one of them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenAI to Acquire Astral</title>
      <link>https://pydevtools.com/blog/openai-acquires-astral/</link>
      <pubDate>Thu, 19 Mar 2026 00:00:00 +0000</pubDate>
      <author>Tim Hopper</author>
      <guid>https://pydevtools.com/blog/openai-acquires-astral/</guid>
      <description>&lt;p&gt;OpenAI &lt;a href=&#34;https://openai.com/index/openai-to-acquire-astral/&#34;target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;announced today&lt;/a&gt; that it will acquire &lt;a href=&#34;https://astral.sh/&#34;target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Astral&lt;/a&gt;, the company behind &lt;a href=&#34;https://pydevtools.com/handbook/reference/uv/&#34;&gt;uv&lt;/a&gt;, &lt;a href=&#34;https://pydevtools.com/handbook/reference/ruff/&#34;&gt;Ruff&lt;/a&gt;, and &lt;a href=&#34;https://pydevtools.com/handbook/reference/ty/&#34;&gt;ty&lt;/a&gt;. The Astral team will join OpenAI&amp;rsquo;s Codex group after the deal closes, subject to regulatory approval.&lt;/p&gt;
&lt;h2&gt;What this means for Codex&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;what-this-means-for-codex&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#what-this-means-for-codex&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://openai.com/index/codex/&#34;target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Codex&lt;/a&gt;, OpenAI&amp;rsquo;s coding agent, has grown to over 2 million weekly active users, with 3x user growth and 5x usage increase since the start of 2026. Acquiring Astral gives OpenAI direct ownership of tools that millions of Python developers already depend on. OpenAI plans to integrate Astral&amp;rsquo;s tools more deeply into Codex so the agent can interact with the toolchain developers already use.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Charlie Marsh on uv, Coding Agents, and the Changing Open Source Contract</title>
      <link>https://pydevtools.com/blog/charlie-marsh-test-set-interview/</link>
      <pubDate>Tue, 24 Feb 2026 12:00:00 -0500</pubDate>
      <author>Tim Hopper</author>
      <guid>https://pydevtools.com/blog/charlie-marsh-test-set-interview/</guid>
      <description>&lt;p&gt;Charlie Marsh (founder of &lt;a href=&#34;https://astral.sh/&#34;target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Astral&lt;/a&gt;, creator of &lt;a href=&#34;https://pydevtools.com/handbook/reference/ruff/&#34;&gt;ruff&lt;/a&gt;, &lt;a href=&#34;https://pydevtools.com/handbook/reference/uv/&#34;&gt;uv&lt;/a&gt;, and &lt;a href=&#34;https://pydevtools.com/handbook/reference/ty/&#34;&gt;ty&lt;/a&gt;) joined Michael Chow and Wes McKinney on &lt;a href=&#34;https://posit.co/thetestset/episode/charlie-marsh-more-productive-but-a-lot-less-fun/&#34;target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;The Test Set&lt;/a&gt;. They covered uv&amp;rsquo;s adoption strategy, how coding agents are changing Astral&amp;rsquo;s development process, and what&amp;rsquo;s happening to open source when writing code becomes cheap.&lt;/p&gt;
&lt;h2&gt;uv&amp;rsquo;s compatibility layer was the point&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;uvs-compatibility-layer-was-the-point&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#uvs-compatibility-layer-was-the-point&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;When uv first shipped, it only had &lt;code&gt;uv pip install&lt;/code&gt; and &lt;code&gt;uv venv&lt;/code&gt;. Some people found this odd. Charlie says it was deliberate:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Seven Claude Code Skills for Python from the Creator of spaCy</title>
      <link>https://pydevtools.com/blog/matthew-honnibal-claude-skills-for-python/</link>
      <pubDate>Mon, 16 Feb 2026 08:00:00 -0500</pubDate>
      <author>Tim Hopper</author>
      <guid>https://pydevtools.com/blog/matthew-honnibal-claude-skills-for-python/</guid>
      <description>&lt;p&gt;atthew Honnibal, co-founder of &lt;a href=&#34;https://explosion.ai/&#34;target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Explosion&lt;/a&gt; and creator of &lt;a href=&#34;https://spacy.io/&#34;target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;spaCy&lt;/a&gt;, has published &lt;a href=&#34;https://github.com/honnibal/claude-skills&#34;target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;a collection of Claude Code skills&lt;/a&gt; for Python development. It&amp;rsquo;s one of the more thoughtful skill collections I&amp;rsquo;ve seen.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://code.claude.com/docs/en/skills&#34;target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Claude Code skills&lt;/a&gt; are markdown files you place in &lt;code&gt;~/.claude/commands/&lt;/code&gt;. When you type &lt;code&gt;/&amp;lt;skill-name&amp;gt;&lt;/code&gt; in Claude Code, the file&amp;rsquo;s contents are injected as instructions. Think of them as reusable prompts that give Claude a specific methodology for a task, rather than leaving it to improvise.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pydantic Monty: A Secure Python Interpreter for AI Agents</title>
      <link>https://pydevtools.com/blog/pydantic-monty-secure-python-interpreter-for-ai-agents/</link>
      <pubDate>Fri, 06 Feb 2026 10:00:00 -0500</pubDate>
      <author>Tim Hopper</author>
      <guid>https://pydevtools.com/blog/pydantic-monty-secure-python-interpreter-for-ai-agents/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://pydantic.dev/&#34;target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Pydantic&lt;/a&gt; has released &lt;a href=&#34;https://github.com/pydantic/monty&#34;target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Monty&lt;/a&gt;, a minimal Python interpreter written in Rust for safely executing LLM-generated code.&lt;/p&gt;
&lt;p&gt;AI agents that generate code face a tradeoff: trust the generated code completely, or spin up containers for isolation. Containers are slow and resource-intensive. Trusting arbitrary code is risky. Monty sidesteps both by sandboxing execution at the interpreter level, blocking dangerous operations while running Python in microseconds.&lt;/p&gt;
&lt;h2&gt;How It Works&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;how-it-works&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#how-it-works&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Monty provides a straightforward API:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Teaching Claude Code Quality Patterns with a Custom Skill</title>
      <link>https://pydevtools.com/blog/dignified-python-313-claude-skill/</link>
      <pubDate>Fri, 09 Jan 2026 09:00:00 -0500</pubDate>
      <author>Tim Hopper</author>
      <guid>https://pydevtools.com/blog/dignified-python-313-claude-skill/</guid>
      <description>&lt;p&gt;Dagster&amp;rsquo;s &lt;a href=&#34;https://github.com/dagster-io/erk/tree/d0e3c177edc5f5013d149794f5cbee459c7b9ccd/.claude/skills/dignified-python-313&#34;target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;dignified-python-313 skill&lt;/a&gt; guides Claude Code to write Python 3.13 code that matches their project conventions.&lt;/p&gt;
&lt;h2&gt;What It Covers&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;what-it-covers&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#what-it-covers&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Modern Python 3.13 Patterns: Use native type syntax (&lt;code&gt;list[str]&lt;/code&gt;, &lt;code&gt;str | None&lt;/code&gt;) instead of older alternatives. Skip &lt;code&gt;from __future__ import annotations&lt;/code&gt; since Python 3.13 doesn&amp;rsquo;t need it.&lt;/p&gt;
&lt;p&gt;CLI Development: Build Click interfaces with proper error handling. Use &lt;code&gt;click.echo()&lt;/code&gt; for output, direct errors to stderr, and treat CLI commands as error boundaries that catch exceptions and exit with &lt;code&gt;SystemExit(1)&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ty is Built with AI</title>
      <link>https://pydevtools.com/blog/ai-driven-software-development/</link>
      <pubDate>Fri, 02 Jan 2026 08:00:00 -0500</pubDate>
      <author>Tim Hopper</author>
      <guid>https://pydevtools.com/blog/ai-driven-software-development/</guid>
      <description>&lt;p&gt;Tool creators are building their tools with AI coding assistants.&lt;/p&gt;
&lt;p&gt;Boris Cherny, creator of &lt;a href=&#34;https://code.claude.com/&#34;target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Claude Code&lt;/a&gt;, &lt;a href=&#34;https://x.com/bcherny/status/2004626064187031831&#34;target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;didn&amp;rsquo;t open an IDE in December but wrote 200 PRs with Claude Code&lt;/a&gt;. Charlie Marsh, creator of &lt;a href=&#34;https://pydevtools.com/handbook/reference/ruff/&#34;&gt;ruff&lt;/a&gt;, &lt;a href=&#34;https://pydevtools.com/handbook/reference/uv/&#34;&gt;uv&lt;/a&gt;, and &lt;a href=&#34;https://pydevtools.com/handbook/reference/ty/&#34;&gt;ty&lt;/a&gt;, &lt;a href=&#34;https://x.com/charliermarsh/status/2006792788369965393&#34;target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;noted&lt;/a&gt; that all &lt;a href=&#34;https://github.com/astral-sh/ruff/pulls?q=is%3Apr&amp;#43;author%3Acharliermarsh&amp;#43;label%3Aty&#34;target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;his PRs&lt;/a&gt; to ty were created with Claude Code. The tools building themselves.&lt;/p&gt;
&lt;h2&gt;Integration with Python Tooling&lt;span class=&#34;hx:absolute hx:-mt-20&#34; id=&#34;integration-with-python-tooling&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#integration-with-python-tooling&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The handbook&amp;rsquo;s &lt;a href=&#34;https://pydevtools.com/handbook/explanation/modern-python-project-setup-guide-for-ai-assistants/&#34;&gt;Modern Python Project Setup Guide for AI Assistants&lt;/a&gt; provides structured guidance so AI tools default to &lt;a href=&#34;https://pydevtools.com/handbook/reference/uv/&#34;&gt;uv&lt;/a&gt; and modern patterns rather than falling back to &lt;code&gt;pip&lt;/code&gt; commands.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Teaching LLMs Python Best Practices</title>
      <link>https://pydevtools.com/blog/teaching-llms-python-best-practices/</link>
      <pubDate>Fri, 21 Nov 2025 09:00:00 -0500</pubDate>
      <author>Tim Hopper</author>
      <guid>https://pydevtools.com/blog/teaching-llms-python-best-practices/</guid>
      <description>&lt;p&gt;Large language models possess extensive Python knowledge from training data, yet they consistently struggle with modern tooling practices. Despite being trained on massive amounts of Python code, frontier models often default to outdated patterns like direct &lt;code&gt;python&lt;/code&gt; or &lt;code&gt;pip&lt;/code&gt; commands instead of using virtual environments and modern tools like &lt;a href=&#34;https://pydevtools.com/handbook/reference/uv/&#34;&gt;uv&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote class=&#34;twitter-tweet&#34;&gt;&lt;p lang=&#34;en&#34; dir=&#34;ltr&#34;&gt;how is it, that despite every frontier LLM being insanely python maxxed they rarely use virtural envs, and even adding rules like &amp;quot;we are using uv, do everything with uv&amp;quot; they ignore it and think the system python is broken. like, every time. that&amp;#39;s actually an accomplishment&lt;/p&gt;</description>
    </item>
    <item>
      <title>Claude Code Hooks for uv Projects</title>
      <link>https://pydevtools.com/blog/claude-code-hooks-for-uv/</link>
      <pubDate>Tue, 11 Nov 2025 06:00:00 -0500</pubDate>
      <author>Tim Hopper</author>
      <guid>https://pydevtools.com/blog/claude-code-hooks-for-uv/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://code.claude.com/docs/en/overview&#34;target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Claude Code&lt;/a&gt; supports &lt;a href=&#34;https://code.claude.com/docs/en/hooks-guide&#34;target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;custom hooks&lt;/a&gt; that guide the AI agent toward project-specific workflows. For Python projects using &lt;a href=&#34;https://pydevtools.com/handbook/reference/uv/&#34;&gt;uv&lt;/a&gt;, hooks can prevent Claude from falling back to &lt;code&gt;pip&lt;/code&gt; and &lt;code&gt;python&lt;/code&gt; commands.&lt;/p&gt;
&lt;div class=&#34;hx:overflow-x-auto hx:mt-6 hx:flex hx:flex-col hx:rounded-lg hx:border hx:py-4 hx:px-4 hx:border-gray-200 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-blue-200 hx:bg-blue-100 hx:text-blue-900 hx:dark:border-blue-200/30 hx:dark:bg-blue-900/30 hx:dark:text-blue-200&#34;&gt;
  &lt;p class=&#34;hx:flex hx:items-center hx:font-medium&#34;&gt;&lt;svg height=16px class=&#34;hx:inline-block hx:align-middle hx:mr-2&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34; fill=&#34;none&#34; viewBox=&#34;0 0 24 24&#34; stroke-width=&#34;2&#34; stroke=&#34;currentColor&#34; aria-hidden=&#34;true&#34;&gt;&lt;path stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34; d=&#34;M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z&#34;/&gt;&lt;/svg&gt;Note&lt;/p&gt;

  &lt;div class=&#34;hx:w-full hx:min-w-0 hx:leading-7&#34;&gt;
    &lt;div class=&#34;hx:mt-6 hx:leading-7 hx:first:mt-0&#34;&gt;&lt;p&gt;This post builds on the &lt;a href=&#34;https://pydevtools.com/blog/interceptors/&#34;&gt;interceptor approach&lt;/a&gt; for teaching AI agents about uv. Interceptors provide runtime feedback; hooks prevent problematic commands before execution.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Use Interceptors to teach Claude Code to use uv</title>
      <link>https://pydevtools.com/blog/interceptors/</link>
      <pubDate>Mon, 28 Jul 2025 09:34:00 -0400</pubDate>
      <author>Tim Hopper</author>
      <guid>https://pydevtools.com/blog/interceptors/</guid>
      <description>&lt;p&gt;AI coding agents like Claude Code, Cursor, or GitHub Copilot often default to using system Python interpreters instead of using &lt;a href=&#34;https://pydevtools.com/handbook/reference/uv/&#34;&gt;uv&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://x.com/mitsuhiko/status/1949093355373142400&#34;target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Armin Ronacher, creator of Flask and Jinja, shared an elegant solution to this problem&lt;/a&gt;: creating dummy Python interpreter that actively redirect AI agents toward better tooling choices.&lt;/p&gt;
&lt;div class=&#34;hx:overflow-x-auto hx:mt-6 hx:flex hx:flex-col hx:rounded-lg hx:border hx:py-4 hx:px-4 hx:border-gray-200 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-green-200 hx:bg-green-100 hx:text-green-900 hx:dark:border-green-200/30 hx:dark:bg-green-900/30 hx:dark:text-green-200&#34;&gt;
  &lt;p class=&#34;hx:flex hx:items-center hx:font-medium&#34;&gt;&lt;svg height=16px class=&#34;hx:inline-block hx:align-middle hx:mr-2&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34; fill=&#34;none&#34; viewBox=&#34;0 0 24 24&#34; stroke-width=&#34;2&#34; stroke=&#34;currentColor&#34; aria-hidden=&#34;true&#34;&gt;&lt;path stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34; d=&#34;M9.663 17h4.673M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z&#34;/&gt;&lt;/svg&gt;Tip&lt;/p&gt;</description>
    </item>
    
  </channel>
</rss>
