<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Pycon on BlueberryPy</title><link>https://blueberry-py.github.io/blog/tags/pycon/</link><description>Recent content in Pycon on BlueberryPy</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Sun, 31 May 2026 21:00:00 +0800</lastBuildDate><atom:link href="https://blueberry-py.github.io/blog/tags/pycon/index.xml" rel="self" type="application/rss+xml"/><item><title>This Month for Pythonistas - May 2026</title><link>https://blueberry-py.github.io/blog/post/this-month-for-pythonistas-2026-05/</link><pubDate>Sun, 31 May 2026 21:00:00 +0800</pubDate><guid>https://blueberry-py.github.io/blog/post/this-month-for-pythonistas-2026-05/</guid><description>&lt;img src="https://blueberry-py.github.io/blog/post/this-month-for-pythonistas-2026-05/title.jpg" alt="Featured image of post This Month for Pythonistas - May 2026" /&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;from&lt;/span&gt; datetime &lt;span style="color:#f92672"&gt;import&lt;/span&gt; date
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;print(date&lt;span style="color:#f92672"&gt;.&lt;/span&gt;today()&lt;span style="color:#f92672"&gt;.&lt;/span&gt;year, date&lt;span style="color:#f92672"&gt;.&lt;/span&gt;today()&lt;span style="color:#f92672"&gt;.&lt;/span&gt;month)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 2026 5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src="https://blueberry-py.github.io/blog/post/this-month-for-pythonistas-2026-05/splash.jpg"
width="1280"
height="720"
srcset="https://blueberry-py.github.io/blog/post/this-month-for-pythonistas-2026-05/splash_hu_b7878c860f864c7.jpg 480w, https://blueberry-py.github.io/blog/post/this-month-for-pythonistas-2026-05/splash_hu_8d41c3bc9051d327.jpg 1024w"
loading="lazy"
alt="issue-2026-05"
class="gallery-image"
data-flex-grow="177"
data-flex-basis="426px"
&gt;&lt;/p&gt;
&lt;p&gt;Welcome back Pythonistas! This is the May 2026 issue of &amp;ldquo;This Month for Pythonistas&amp;rdquo;, bringing you curated Python news, tutorials, articles, podcasts and community highlights.&lt;/p&gt;
&lt;p&gt;Before we continue, please note that this blog is synced across the following platforms:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blueberry-py.github.io/blog/post/this-month-for-pythonistas-2026-05/" target="_blank" rel="noopener"
&gt;Github Pages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blueberrypy.netlify.app/post/this-month-for-pythonistas-2026-05/" target="_blank" rel="noopener"
&gt;Netlify&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blueberrypy.onrender.com/post/this-month-for-pythonistas-2026-05/" target="_blank" rel="noopener"
&gt;Render&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blueberrypy-blog.vercel.app/post/this-month-for-pythonistas-2026-05/" target="_blank" rel="noopener"
&gt;Vercel&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ready? Let&amp;rsquo;s get started!&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="events--social"&gt;Events &amp;amp; Social
&lt;/h2&gt;&lt;h3 id="pycon-us-2026"&gt;PyCon US 2026
&lt;/h3&gt;&lt;p&gt;PyCon US was held in Long Beach, California this May with 2000+ total attendees, 57% of which were first-time. It was a great success - thanks to PSF and the whole community - and I look forward to PyCon US 2027 already (still in Long Beach)! You can check out social media (X, Mastodon, BlueSky, etc.) for highlights.&lt;/p&gt;
&lt;p&gt;The recordings of the conference would be published to PyCon US Youtube channel later this year.&lt;/p&gt;
&lt;h3 id="introducing-claude-opus-48"&gt;&lt;a class="link" href="https://www.anthropic.com/news/claude-opus-4-8" target="_blank" rel="noopener"
&gt;Introducing Claude Opus 4.8&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;&lt;img src="https://www.anthropic.com/_next/image?url=https%3A%2F%2Fwww-cdn.anthropic.com%2Fimages%2F4zrzovbb%2Fwebsite%2F0eaa0ed2dce9810169112e1c77de2585fcf1f5c2-2880x1620.jpg&amp;amp;w=3840&amp;amp;q=75"
loading="lazy"
alt="claude-opus-4.8"
&gt;&lt;/p&gt;
&lt;p&gt;Anthropic introduced &lt;strong&gt;Claude Opus 4.8&lt;/strong&gt;, an upgrade over Opus 4.7 with improved benchmark performance across coding, agentic skills, reasoning, and knowledge work, at the same price. Key improvements include greater honesty — Opus 4.8 is roughly four times less likely to let code flaws pass unremarked — and lower misaligned behavior rates. Launching alongside it are: &lt;strong&gt;dynamic workflows&lt;/strong&gt; in Claude Code (enabling massive parallel subagent tasks like codebase-scale migrations), &lt;strong&gt;effort control&lt;/strong&gt; on claude.ai (letting users adjust how deeply Claude thinks), and &lt;strong&gt;system entries inside the messages array&lt;/strong&gt; via the API. Opus 4.8 defaults to high effort, with &amp;ldquo;extra&amp;rdquo; and &amp;ldquo;max&amp;rdquo; options for harder tasks. Anthropic also teased upcoming cheaper Opus-class models and a more intelligent &amp;ldquo;Mythos&amp;rdquo;-class model pending stronger safety safeguards.&lt;/p&gt;
&lt;h2 id="new-versions"&gt;New Versions
&lt;/h2&gt;&lt;h3 id="python-3150-beta-1-is-here"&gt;&lt;a class="link" href="https://blog.python.org/2026/05/python-3150-beta-1/" target="_blank" rel="noopener"
&gt;Python 3.15.0 beta 1 is here!&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;Python 3.15.0 beta 1 was released on May 7, 2026, marking the first beta and feature freeze. Developers encourage third-party projects to test the preview and report bugs, though it is not recommended for production. Major features include explicit lazy imports, new built-in types like &lt;code&gt;frozendict&lt;/code&gt; and &lt;code&gt;sentinel&lt;/code&gt;, a dedicated profiling package, default &lt;em&gt;UTF-8&lt;/em&gt; encoding, &lt;code&gt;TypedDict&lt;/code&gt; improvements, and an upgraded JIT compiler delivering 8–13% performance gains. Other changes include frame pointers by default, unpacking in comprehensions, and stable ABI for free-threaded builds.&lt;/p&gt;
&lt;p&gt;The tarball and binary distributions for beta 1 can be downloaded &lt;a class="link" href="https://www.python.org/downloads/release/python-3150b1/" target="_blank" rel="noopener"
&gt;here&lt;/a&gt;. The next pre-release, 3.15.0b2, is scheduled for June 2, 2026.&lt;/p&gt;
&lt;h3 id="python-3145-is-out"&gt;&lt;a class="link" href="https://blog.python.org/2026/05/python-3145-is-out/" target="_blank" rel="noopener"
&gt;Python 3.14.5 is out!&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;This is a very rare patch release due to a release candidate being released several days before the final release.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The incremental garbage collector shipped in Python 3.14.0 - 3.14.4 has been reverted back to the generational garbage collector from 3.13, due to a number of reports of significant memory pressure in production environments.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="what"&gt;&lt;a class="link" href="https://ichard26.github.io/blog/2026/04/whats-new-in-pip-26.1/" target="_blank" rel="noopener"
&gt;What&amp;rsquo;s new in pip 26.1 - lockfiles and dependency cooldowns!&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;pip 26.1, released April 2026, drops Python 3.9 support and introduces key features: experimental lockfile support via &lt;code&gt;-r pylock.toml&lt;/code&gt; (PEP 751), dependency cooldowns with &lt;code&gt;--uploaded-prior-to=P3D&lt;/code&gt;, and fixes to the 2020 resolver. Security updates patch archive handling vulnerabilities and upgrade &lt;code&gt;urllib3&lt;/code&gt; to 2.x. The legacy resolver moves closer to removal (planned 2027), and &lt;code&gt;PIP_CONSTRAINT&lt;/code&gt; for build dependencies is deprecated for pip 26.2. A future &lt;code&gt;pip sync&lt;/code&gt; command is planned to complete lockfile support.&lt;/p&gt;
&lt;h3 id="pyrefly-v10-is-here"&gt;&lt;a class="link" href="https://pyrefly.org/blog/v1.0/" target="_blank" rel="noopener"
&gt;Pyrefly v1.0 is here!&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;&lt;img src="https://pyrefly.org/assets/images/v1.0-53562449e846074eba274828c237e963.jpg"
loading="lazy"
alt="pyrefly-1.0-release"
&gt;&lt;/p&gt;
&lt;p&gt;Pyrefly, Meta&amp;rsquo;s open-source Python type checker and language server, has reached its stable v1.0 release, marking it as production-ready after over 60 minor releases since its alpha launch in mid-2025. Already used at scale by Instagram, PyTorch, NumPy, Pandas, and JAX, Pyrefly delivers significant performance improvements — up to 125x faster incremental editor updates and 34% faster full type checks on large codebases. It offers both CLI and IDE extension support for consistent results across environments, with built-in support for Pydantic and Django, and an upcoming integration with Microsoft&amp;rsquo;s Pylance via a new Type Server Protocol. The tool supports gradual adoption through configurable presets, migration from Mypy/Pyright, and incremental type annotation via &lt;code&gt;pyrefly infer&lt;/code&gt;. Looking ahead, Pyrefly is developing experimental tensor shape checking for ML frameworks and exploring integration into AI-assisted coding workflows.&lt;/p&gt;
&lt;h3 id="pytorch-212-release-blog"&gt;&lt;a class="link" href="https://pytorch.org/blog/pytorch-2-12-release-blog/" target="_blank" rel="noopener"
&gt;PyTorch 2.12 Release Blog&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;PyTorch 2.12 has been released with 2,926 commits from 457 contributors. Key highlights include: batched &lt;code&gt;linalg.eigh&lt;/code&gt; on CUDA is up to 100x faster; a new device-agnostic &lt;code&gt;torch.accelerator.Graph&lt;/code&gt; API unifies graph capture across CUDA, XPU, and other backends; &lt;code&gt;torch.export.save&lt;/code&gt; now supports Microscaling (MX) quantization formats for deploying compressed models; fused Adagrad optimizer joins Adam, AdamW, and SGD; and &lt;code&gt;torch.cond&lt;/code&gt; control flow can now be captured within CUDA Graphs. ROCm users gain expandable memory segments, rocSHMEM symmetric memory collectives, and FlexAttention pipelining. TorchScript is now deprecated, with &lt;code&gt;torch.export&lt;/code&gt; as its replacement.&lt;/p&gt;
&lt;h2 id="tutorials"&gt;Tutorials
&lt;/h2&gt;&lt;h3 id="deeplearningais-build-interactive-agents-with-generative-ui-from-copilotkit"&gt;DeepLearning.ai&amp;rsquo;s &lt;a class="link" href="https://www.deeplearning.ai/short-courses/build-interactive-agents-with-generative-ui/" target="_blank" rel="noopener"
&gt;Build Interactive Agents with Generative UI&lt;/a&gt; from CopilotKit
&lt;/h3&gt;&lt;blockquote&gt;
&lt;p&gt;You&amp;rsquo;ll work across the full Generative UI Spectrum, from hand-crafted components you control precisely, to declarative layouts the agent assembles from building blocks, all the way to open-ended experiences powered by MCP Apps. You&amp;rsquo;ll finish by building a canvas application where the agent works alongside the user on shared data. By the end, you&amp;rsquo;ll have a production-ready fullstack agent built on CopilotKit and AG-UI, an open protocol with first-party integrations across LangGraph, Google, AWS, Microsoft, and more.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="deeplearningais-ai-agents-for-image-and-video-generation-from-google"&gt;DeepLearning.ai&amp;rsquo;s &lt;a class="link" href="https://www.deeplearning.ai/courses/ai-agents-for-image-and-video-generation" target="_blank" rel="noopener"
&gt;AI Agents for Image and Video Generation&lt;/a&gt; from Google
&lt;/h3&gt;&lt;blockquote&gt;
&lt;p&gt;In this course, you’ll learn three complementary evaluation techniques, then combine them with image and video generation to build autonomous media agents. You’ll build an image agent that turns brand guidelines into UI mockups, and a video agent that plans multi-scene explainers, animates reference frames with synchronized audio, and checks consistency across scenes. In the final lesson, you’ll use Gemini CLI to build a generative media agent in natural language, packaging what you’ve learned into reusable agent skills.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="articles"&gt;Articles
&lt;/h2&gt;&lt;h3 id="pep-661--sentinel-values"&gt;&lt;a class="link" href="https://peps.python.org/pep-0661/" target="_blank" rel="noopener"
&gt;PEP 661 – Sentinel Values&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;PEP 661 is &lt;strong&gt;accepted&lt;/strong&gt;. It introduces a new built-in &lt;code&gt;sentinel()&lt;/code&gt; class for creating unique sentinel values in Python. Sentinel values are special placeholder objects used when a distinct sentinel is needed that&amp;rsquo;s different from None. The new builtin addresses issues with common sentinel idioms like &lt;code&gt;object()&lt;/code&gt; which have uninformative reprs, lack distinct types, and behave unexpectedly after copying or pickling. The &lt;code&gt;sentinel(name)&lt;/code&gt; call creates a sentinel with a readable repr, proper identity preservation, pickling support, and type-checking integration. Sentinels are truthy and should be checked with &lt;code&gt;is&lt;/code&gt; operator. The feature targets Python 3.15+ with both Python and C API implementations, providing a standardized way to define sentinels throughout the standard library and user code.&lt;/p&gt;
&lt;h3 id="python-315-features-that-didn"&gt;&lt;a class="link" href="https://blog.changs.co.uk/python-315-features-that-didnt-make-the-headlines.html" target="_blank" rel="noopener"
&gt;Python 3.15: features that didn&amp;rsquo;t make the headlines&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;This blog post covers lesser-known Python 3.15 features including: (1) &lt;strong&gt;asyncio TaskGroup cancellation&lt;/strong&gt; — a new &lt;code&gt;tg.cancel()&lt;/code&gt; method that simplifies graceful task group termination, replacing the awkward workaround of raising custom exceptions; (2) &lt;strong&gt;Context Manager Improvements&lt;/strong&gt; — &lt;code&gt;ContextDecorator&lt;/code&gt; now properly wraps the full lifecycle of async functions, generators, and async iterators, making context managers an ideal way to create decorators; and (3) &lt;strong&gt;Thread Safe Iterators&lt;/strong&gt; — new &lt;code&gt;threading.serialize_iterator&lt;/code&gt; and &lt;code&gt;threading.synchronized_iterator&lt;/code&gt; functions that enable safe shared iteration across threads, solving issues with skipped values or broken iterator state when using threading or free-threading.&lt;/p&gt;
&lt;h3 id="pycon-us-2026-typing-summit-recap"&gt;&lt;a class="link" href="https://bernat.tech/posts/pycon-us-2026-typing-summit-recap/" target="_blank" rel="noopener"
&gt;PyCon US 2026 Typing Summit Recap&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;The PyCon US 2026 Typing Summit featured eight talks and a Typing Council Q&amp;amp;A. Key highlights: &lt;em&gt;Guido van Rossum&lt;/em&gt; argued PEP 484&amp;rsquo;s &lt;em&gt;no-new-syntax&lt;/em&gt; rule is already broken and urged prioritizing user pain over power features, citing the 2025 Typing Survey. &lt;em&gt;Jelle Zijlstra&lt;/em&gt; proposed intersection and negation types for the spec. &lt;em&gt;Michael Sullivan&lt;/em&gt; presented PEP 827 for type manipulation (conditional/mapped types). &lt;em&gt;Douglas Creager&lt;/em&gt; showed how ty&amp;rsquo;s constraint-set solver fixes a &lt;code&gt;partial(choose, None)&lt;/code&gt; example all current checkers get wrong. &lt;em&gt;Conner Nilsen&lt;/em&gt; found type-checker feedback helps AI agents on well-typed code but not lightly-typed codebases. &lt;em&gt;Jia Chen&lt;/em&gt; formalized Python typing in Lean 4, and &lt;em&gt;Avik Chaudhuri&lt;/em&gt; demoed tensor-shape types in Pyrefly. The council panel updated on checker landscape (Pyre and pytype winding down) and open spec issues.&lt;/p&gt;
&lt;h3 id="i-spent-2-years-building-the-async-python-task-queue-i-wished-existed"&gt;&lt;a class="link" href="https://aleksul.space/posts/i-spent-2-years-building-repid/" target="_blank" rel="noopener"
&gt;I spent 2 years building the async Python task queue I wished existed&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;The author spent two years developing Repid v2, an async Python task queue that solves the lack of modern async background processing tools. The Python web ecosystem excels with frameworks like FastAPI, but task queues remained antiquated, requiring separate sync contexts and lacking automatic documentation. Repid v1 showed promise but had fundamental design flaws: it was too opinionated about broker capabilities and assumed features like delayed messaging were universal. Production issues with AMQP 0.9.1 prompted the author to write a custom AMQP 1.0 implementation. The v2 redesign embraces simplicity: user-defined message types, broker-agnostic AsyncAPI documentation, and support for multiple brokers including AMQP 1.0, SQS, Kafka, and Redis Streams. Despite modest adoption, the project represents the exact library the author wanted—a self-documenting, truly async message consumer that gets out of the developer&amp;rsquo;s way.&lt;/p&gt;
&lt;h3 id="learn-concurrency---a-deep-dive-into-multithreading-with-python"&gt;&lt;a class="link" href="https://blog.geekuni.com/2026/04/python-concurrency.html" target="_blank" rel="noopener"
&gt;Learn concurrency - a deep dive into multithreading with Python&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;This blog post provides a comprehensive overview of concurrency in Python, covering key concepts like multithreading, multiprocessing, race conditions, and synchronization mechanisms such as locks. It explains the differences between sequential, concurrent, and parallel execution, with practical examples. The Global Interpreter Lock (GIL) is discussed as a major limitation preventing true CPU-bound multithreading in Python, though it doesn&amp;rsquo;t hinder I/O-bound tasks. The article highlights the drawbacks of GIL — such as inability to leverage modern multi-core hardware and the complexity of multiprocessing — and introduces the emerging &amp;ldquo;free-threaded&amp;rdquo; build (PEP 703) starting in Python 3.13, which allows developers to disable the GIL and achieve true parallel multithreading.&lt;/p&gt;
&lt;h3 id="behavior-oriented-concurrency-in-python"&gt;&lt;a class="link" href="https://microsoft.github.io/bocpy/" target="_blank" rel="noopener"
&gt;Behavior-Oriented Concurrency in Python&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;&lt;img src="https://microsoft.github.io/bocpy/images/logo.svg"
loading="lazy"
alt="behavior-oriented concurrency"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;bocpy&lt;/code&gt; is a Python library implementing Behavior-Oriented Concurrency (BOC), a lock-less, deadlock-free paradigm for parallel programming. It uses &amp;ldquo;cowns&amp;rdquo; (concurrent-owned variables) to ensure temporal data ownership across sub-interpreters, eliminating traditional locks. Behaviors — decorated functions — declare required cowns and are automatically scheduled for parallel execution, simplifying concurrent code. The library includes a noticeboard for eventually-consistent state sharing and a &lt;code&gt;Matrix&lt;/code&gt; class for high-performance numerical operations. &lt;code&gt;bocpy&lt;/code&gt; achieves near-linear multi-core scaling via lock-free scheduling and zero-copy data transfer, offering an intuitive alternative to thread-based concurrency.&lt;/p&gt;
&lt;h3 id="the-simplest-mcp-example-possible-in-python"&gt;&lt;a class="link" href="https://inventwithpython.com/blog/basic-mcp-python-example.html" target="_blank" rel="noopener"
&gt;The Simplest MCP Example Possible in Python&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;This blog post by &lt;em&gt;Al Sweigart&lt;/em&gt; demonstrates the simplest possible MCP (Model Context Protocol) example in Python, showing how to give a local LLM access to external tools. Using FastMCP and Ollama, the author creates an MCP server with two tools — &lt;code&gt;get_current_time&lt;/code&gt; and &lt;code&gt;get_current_date&lt;/code&gt; — that return the current time and date as formatted strings. A client script connects the Llama 3.2 model to these tools, allowing it to answer time-related questions. The post includes complete code for both the server and client, along with a sample conversation showing the model&amp;rsquo;s mixed results — correctly answering some questions but also exhibiting common LLM hallucinations, such as incorrectly converting 24-hour time and confidently stating the wrong day of the week.&lt;/p&gt;
&lt;h3 id="using-llms-to-find-python-c-extension-bugs"&gt;&lt;a class="link" href="https://lwn.net/Articles/1067234/" target="_blank" rel="noopener"
&gt;Using LLMs to find Python C-extension bugs&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;The article describes how hobbyist Daniel Diniz used Claude Code to systematically discover 575+ bugs in 44 Python C-extensions covering nearly a million lines of code. His cext-review-toolkit employs 13 specialized agents targeting reference-counting, GIL handling, and exception state issues. The approach emphasizes maintainer control, providing high-quality reports with reproducers via secret GitHub gists and adapting based on feedback to minimize false positives. While the reaction has been positive, maintainers note concerns about bug severity and prioritization, suggesting improvements. The article presents this as a responsible example of LLM-assisted bug finding that avoids overwhelming maintainers.&lt;/p&gt;
&lt;h3 id="uv-is-fantastic-but-its-package-management-ux-is-a-mess"&gt;&lt;a class="link" href="https://www.loopwerk.io/articles/2026/uv-ux-mess/" target="_blank" rel="noopener"
&gt;uv is fantastic, but its package management UX is a mess&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;Astral&amp;rsquo;s &lt;strong&gt;uv&lt;/strong&gt; is praised for its speed and ability to replace multiple Python tools with one binary, but the author argues its package management UX lags behind peers like &lt;code&gt;pnpm&lt;/code&gt; and &lt;code&gt;poetry&lt;/code&gt;. Key complaints include: no simple &lt;code&gt;uv outdated&lt;/code&gt; command (only &lt;code&gt;uv tree --outdated --depth 1&lt;/code&gt; which displays a cluttered 50-line tree), unsafe default version constraints without upper bounds unlike pnpm&amp;rsquo;s caret syntax, and awkward upgrade commands requiring repeated &lt;code&gt;--upgrade-package&lt;/code&gt; flags. The author welcomes the new &lt;code&gt;--bounds&lt;/code&gt; option but notes it&amp;rsquo;s opt-in and a preview feature. Post-HN reader clarifications noted that &lt;code&gt;uv pip list --outdated&lt;/code&gt; exists, &lt;code&gt;--bounds&lt;/code&gt; can be set globally in pyproject.toml, and the no-upper-bounds default makes sense for libraries (to avoid dependency resolution issues) but not for applications.&lt;/p&gt;
&lt;h3 id="stop-writing-edge-case-tests-let-hypothesis-find-them-instead"&gt;&lt;a class="link" href="https://dev.to/peytongreen_dev/stop-writing-edge-case-tests-let-hypothesis-find-them-instead-5hl0" target="_blank" rel="noopener"
&gt;Stop writing edge case tests. Let Hypothesis find them instead.&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;The author shares how they wrote 47 edge case tests for a URL normalizer, but when they used &lt;code&gt;Hypothesis&lt;/code&gt;, it generated 10,000 test cases in 30 seconds and found a critical bug — an all-whitespace URL silently returned an empty string. Unlike conventional tests that check specific inputs, property-based tests define invariants that should hold for any input. Hypothesis generates diverse inputs, shrinks failures to minimal examples, and stores failing cases in a local database for regression testing. The author recommends adding one or two &lt;code&gt;@given&lt;/code&gt; tests per function to catch bugs you didn&amp;rsquo;t know to look for, and provides examples of useful properties like round-trip invariants, idempotency, and monotonicity.&lt;/p&gt;
&lt;h3 id="announcing-genkit-middleware-intercept-extend-and-harden-your-agentic-apps"&gt;&lt;a class="link" href="https://developers.googleblog.com/announcing-genkit-middleware-intercept-extend-and-harden-your-agentic-apps/" target="_blank" rel="noopener"
&gt;Announcing Genkit Middleware: Intercept, extend, and harden your agentic apps&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;Genkit&lt;/code&gt;, Google&amp;rsquo;s open-source framework for building AI-powered agentic applications, has introduced a middleware system to enhance reliability, security, and observability. Available in TypeScript, Go, Dart and Python, middleware allows developers to intercept generation calls and tool execution loops to inject custom behaviors. The system offers pre-built solutions including Retry for handling transient errors with exponential backoff, Fallback for switching to alternative models during failures, Tool Approval for human-in-the-loop confirmation of sensitive actions, Skills for dynamically loading contextual knowledge, and Filesystem for scoped file access. Developers can also create custom middleware to enforce specific business rules, such as preventing models from mentioning competitor products, providing a composable way to harden production-ready AI applications.&lt;/p&gt;
&lt;h3 id="inside-the-microsoft-agent-framework-how-we-designed-a-layered-sdk"&gt;&lt;a class="link" href="https://commandline.microsoft.com/agent-framework-layered-sdk-loops-workflows-harnesses/" target="_blank" rel="noopener"
&gt;Inside the Microsoft Agent Framework: How we designed a layered SDK&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;&lt;img src="https://commandline.microsoft.com/wp-content/uploads/2026/05/AgentHarness-1536x833.png"
loading="lazy"
alt="microsoft-agent-framework-harness"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Microsoft Agent Framework (MAF)&lt;/strong&gt; is Microsoft&amp;rsquo;s layered SDK for building production-ready AI agents, which is organized around three core concepts. &lt;strong&gt;Agent loops&lt;/strong&gt; are the fundamental execution cycle where an agent receives input, reasons, calls tools, and iterates until done. &lt;strong&gt;Workflows&lt;/strong&gt; provide structured orchestration for multi-step, multi-agent, or business-critical processes, supporting patterns like sequential flows, handoffs, and author/critic loops. &lt;strong&gt;Harnesses&lt;/strong&gt; supply reusable runtime capabilities — tools, context, memory, planning, permissions, and middleware — that surround the agent and make it practical for real-world use. The framework is provider-agnostic, working across models from Microsoft, OpenAI, Anthropic, and others, and is available for .NET and Python.&lt;/p&gt;
&lt;h3 id="the-anatomy-of-an-agent-harness"&gt;&lt;a class="link" href="https://langchain.com/blog/the-anatomy-of-an-agent-harness" target="_blank" rel="noopener"
&gt;The Anatomy of an Agent Harness&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;This Langchain blog explains that an agent is composed of two parts: a model containing the intelligence and a harness that makes that intelligence useful. A harness includes all the code, configuration, and execution logic around the model. Key harness components include filesystems for durable storage and context management, bash/code execution for autonomous problem-solving, sandboxes for secure isolated execution, memory systems for continual learning, context compaction strategies to prevent context rot, and long-horizon execution features like planning and self-verification loops. The author argues that harness engineering will remain valuable even as models become more capable, as well-designed harnesses optimize model performance for specific tasks. The field continues evolving with active research into multi-agent orchestration, dynamic tool assembly, and self-improving systems.&lt;/p&gt;
&lt;h3 id="agent-skills"&gt;&lt;a class="link" href="https://addyosmani.com/blog/agent-skills/" target="_blank" rel="noopener"
&gt;Agent Skills&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;This article explores how AI coding agents skip essential senior-engineer practices — specs, tests, reviews, scope discipline — because they optimize for speed, not reliability. The project packages “skills” as workflow-driven markdown files injected into agent context, encoding six lifecycle phases (define, plan, build, verify, review, ship) with concrete exit criteria. Five principles guide design: process over prose, anti-rationalization tables rebutting plausible shortcuts, non-negotiable verification, progressive disclosure to limit context, and strict scope discipline. Skills embed Google-scale practices (Hyrum&amp;rsquo;s Law, test pyramids, DAMP tests, small PRs, trunk-based development) that agents otherwise ignore. Used as installed slash commands or lightweight runbooks, they force the scaffolding senior engineers provide, turning optional polish into mandatory guardrails for safe, reviewable, ship-worthy code.&lt;/p&gt;
&lt;h3 id="how-to-work-and-compound-with-ai"&gt;&lt;a class="link" href="https://eugeneyan.com//writing/working-with-ai/" target="_blank" rel="noopener"
&gt;How to Work and Compound with AI&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;The article outlines practical principles for working effectively with AI so that collaboration compounds over time. It argues that every finished artifact — code, docs, analysis, decisions — should become reusable context, while corrections update configurations that reduce future errors. Key practices include organizing work into clear directory structures so models can retrieve relevant context, maintaining annotated indexes and per-project onboarding docs (like &lt;code&gt;CLAUDE.md&lt;/code&gt; and &lt;code&gt;INDEX.md&lt;/code&gt;) so each session starts with the right knowledge, and separating persistent memory (project state) from personal preferences and workflows. Taste and behavior should be encoded as configuration (global, repo, and project-level &lt;code&gt;CLAUDE.md&lt;/code&gt; files), split into lazy‑loaded guides and skills to avoid context bloat. Skills capture repeatable weekly tasks as markdown workflows, bootstrapped by doing a task once and refining it through session transcripts rather than direct edits. Verification is shifted left with deterministic checks, automated tests, and model‑run evals before human review, and long‑running tasks use a “pair programmer” session to detect execution and direction drift. To scale, delegate larger end‑to‑end tasks with clear success criteria and parallel sessions, and make work observable with status signals and remote‑control options. Finally, close the loop by sharing openly, mining transcripts for missing steps or corrections, and periodically refactoring configs to avoid contradictions—the same principles that apply to managing human teams.&lt;/p&gt;
&lt;h3 id="vibe-coding-and-agentic-engineering-are-getting-closer-than-id-like"&gt;&lt;a class="link" href="https://simonwillison.net/2026/May/6/vibe-coding-and-agentic-engineering/" target="_blank" rel="noopener"
&gt;Vibe coding and agentic engineering are getting closer than I’d like&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;Simon Willison distinguishes &amp;ldquo;vibe coding&amp;rdquo; — accepting AI‑generated code without review — from &amp;ldquo;agentic engineering&amp;rdquo;, where professionals use AI tools to build high-quality systems while maintaining security and maintainability. In this post he observes that the two practices are increasingly overlapping: because AI agents are becoming highly reliable, he now routinely ships production code he hasn&amp;rsquo;t reviewed, feeling uncomfortable about accountability. He also notes that AI makes it trivially easy to produce polished repos with tests and docs, so real evidence of value now comes from whether software has been actively used. Although AI has shifted bottlenecks from coding to design and evaluation, he believes the core difficulty of software engineering remains, and he doubts a widespread threat to enterprise SaaS since companies generally prefer proven, professionally managed solutions over DIY vibecoded projects.&lt;/p&gt;
&lt;h3 id="how-i-use-llms-as-a-staff-engineer-in-2026"&gt;&lt;a class="link" href="https://www.seangoedecke.com/how-i-use-llms-in-2026/" target="_blank" rel="noopener"
&gt;How I use LLMs as a staff engineer in 2026&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;In 2026, the author has significantly expanded his use of LLMs compared to 2025. The biggest shift is that AI agents are now reliable enough to produce entire pull requests in areas he&amp;rsquo;s familiar with, and he uses them constantly for bug investigation (correctly diagnosing ~80% of issues), codebase research, testing, and local setup tasks. He still writes his own PR descriptions and all public communications by hand, believing humans better convey core ideas and signal genuine review. He also avoids using LLMs for UI testing or writing blog posts, though he uses them for draft feedback. His core job — shipping projects, exercising judgment, and navigating politics — remains unchanged, but agents have expanded his capacity to take on small tasks. He warns that many people either under-utilize agents (not delegating enough) or over-utilize them (trusting them with unreviewed sweeping changes), and finding the right balance remains key.&lt;/p&gt;
&lt;h3 id="the-bottleneck-was-never-the-code"&gt;&lt;a class="link" href="https://www.thetypicalset.com/blog/thoughts-on-coding-agents" target="_blank" rel="noopener"
&gt;The bottleneck was never the code&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;The article argues that coding agents shift the bottleneck in software development from writing code to collaboration, decision-making, and context-sharing. While agents dramatically boost individual productivity, the real challenge for organizations is producing precise specifications and maintaining shared context — something humans acquire informally but agents require explicitly. The author emphasizes that focus (saying no to unnecessary features) and organizational coherence become more critical as code becomes cheaper to produce. Agents can help by reading exhaustively to extract implicit knowledge, but some tacit context remains unrecoverable. Ultimately, the companies that thrive will be those that treat coherence and context as maintainable artifacts, not just those with the best technical tools.&lt;/p&gt;
&lt;h3 id="agentic-coding-is-a-trap"&gt;&lt;a class="link" href="https://larsfaye.com/articles/agentic-coding-is-a-trap" target="_blank" rel="noopener"
&gt;Agentic Coding is a Trap&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;The article argues that over-reliance on AI coding agents is a trap that erodes developers’ critical thinking and debugging skills while creating costly dependencies. It warns that &amp;ldquo;agentic coding&amp;rdquo; distances engineers from implementation, causing cognitive atrophy, vendor lock-in, unpredictable token costs, and fragile systems that must manage AI’s non-determinism. Junior and senior developers alike lose the friction essential for deep learning and ownership. Drawing parallels to past tech shifts, the author insists the risk is real and immediate. He advocates using LLMs as secondary aids for planning and research—not as autonomous orchestrators—while keeping hands-on coding central, ensuring competence, quality, and long-term value over short-term speed.&lt;/p&gt;
&lt;h2 id="podcasts"&gt;Podcasts
&lt;/h2&gt;&lt;h3 id="-realpython-podcast"&gt;🐍 RealPython Podcast
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://realpython.com/podcasts/rpp/293/" target="_blank" rel="noopener"
&gt;Episode 293: Agentic Data Science Pair Programming With marimo pair&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://realpython.com/podcasts/rpp/294/" target="_blank" rel="noopener"
&gt;Episode 294: Declarative Charts in Python &amp;amp; Discerning Iterators vs Iterables&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://realpython.com/podcasts/rpp/295/" target="_blank" rel="noopener"
&gt;Episode 295: Agentic Architecture: Why Files Aren&amp;rsquo;t Always Enough&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://realpython.com/podcasts/rpp/296/" target="_blank" rel="noopener"
&gt;Episode 296: Managing Polars Schema Issues &amp;amp; Profiling GitHub Users&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://realpython.com/podcasts/rpp/297/" target="_blank" rel="noopener"
&gt;Episode 297: Improving Python Through PEPs and Protocols&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="-python-bytes-podcast"&gt;🍕 Python Bytes Podcast
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://pythonbytes.fm/episodes/show/478/iodine-tablets-and-potable-water" target="_blank" rel="noopener"
&gt;#478 Iodine tablets and potable water&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://pythonbytes.fm/episodes/show/479/talking-about-types" target="_blank" rel="noopener"
&gt;#479 Talking About Types&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://pythonbytes.fm/episodes/show/480/proud-parents" target="_blank" rel="noopener"
&gt;#480 Proud Parents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://pythonbytes.fm/episodes/show/481/ways-to-die" target="_blank" rel="noopener"
&gt;#481 Ways to die&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="-talk-python-to-me"&gt;📣 Talk Python to me
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://talkpython.fm/episodes/show/547/parallel-python-at-anyscale-with-ray" target="_blank" rel="noopener"
&gt;#547: Parallel Python at Anyscale with Ray&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://talkpython.fm/episodes/show/548/event-sourcing-design-pattern" target="_blank" rel="noopener"
&gt;#548: Event Sourcing Design Pattern&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://talkpython.fm/episodes/show/549/great-docs" target="_blank" rel="noopener"
&gt;#549: Great Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://talkpython.fm/episodes/show/550/ai-contributions-and-maintainer-load-in-open-source" target="_blank" rel="noopener"
&gt;#550: AI Contributions and Maintainer Load in Open Source&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="-vs-code-insiders-podcast"&gt;🚀 VS Code Insiders Podcast
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://www.vscodepodcast.com/22" target="_blank" rel="noopener"
&gt;Episode 22: Agent-First Development Workflows in VS Code with Brigit Murtaugh&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="repositories"&gt;Repositories
&lt;/h2&gt;&lt;h3 id="pydantichttpx2-bsd-3-clause"&gt;&lt;a class="link" href="https://github.com/pydantic/httpx2" target="_blank" rel="noopener"
&gt;pydantic/httpx2&lt;/a&gt; (BSD-3-Clause)
&lt;/h3&gt;&lt;blockquote&gt;
&lt;p&gt;With HTTPX itself seeing limited activity recently, Pydantic is picking up stewardship under the &lt;code&gt;HTTPX2&lt;/code&gt; name so that users have a reliably maintained path forward - including timely security updates for a library that sits in the critical path of so many production systems.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="minishlabsemble-mit"&gt;&lt;a class="link" href="https://github.com/MinishLab/semble" target="_blank" rel="noopener"
&gt;MinishLab/semble&lt;/a&gt; (MIT)
&lt;/h3&gt;&lt;blockquote&gt;
&lt;p&gt;Semble is a code search library built for agents. It returns the exact code snippets they need instantly, using ~98% fewer tokens than grep+read. Indexing and searching a full codebase end-to-end takes under a second, with ~200x faster indexing and ~10x faster queries than a code-specialized transformer, at 99% of its retrieval quality.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="microsoftwebwright-mit"&gt;&lt;a class="link" href="https://github.com/microsoft/Webwright" target="_blank" rel="noopener"
&gt;microsoft/Webwright&lt;/a&gt; (MIT)
&lt;/h3&gt;&lt;blockquote&gt;
&lt;p&gt;Webwright gives LLM a terminal where it can launch multiple browser sessions to inspect the page and complete a web task. It captures and inspects page screenshots/states only when needed. It enforces each web task to be completed end-to-end within a re-runnable Python script, i.e. your web agent browsing history is a single code file. No multi-agent system, no graph engine, no plugin layer, no hidden orchestration — just a terminal, a browser, and a model.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;As we wrap up this journey together, I want to take a moment to express my gratitude for your reading. If you&amp;rsquo;ve enjoyed what you just read and would like to help sustain this blog, consider &lt;a class="link" href="https://github.com/blueberry-py/blog/stargazers" target="_blank" rel="noopener"
&gt;starring this blog on github&lt;/a&gt;, it would be great motivation for me to keep updating the blogs!&lt;/p&gt;
&lt;p&gt;Alright, that concludes the May Edition of &amp;ldquo;This Month for Pythonistas&amp;rdquo;. Thank you again for reading my post. I hope you enjoy it or find something useful. Happy coding and see you in June! 👋&lt;/p&gt;</description></item></channel></rss>