AutoGen's README now opens with "Project archived and no longer maintained", and says "Microsoft is not providing bug fixes, security fixes, new features, or support for this project." Every signal your tooling reads still says the project is fine. GitHub doesn't show the repository as archived, and the PyPI packages carry the default status of "active". End of life was announced in prose, and dependency tooling doesn't read prose.
What Happened
AutoGen is Microsoft's multi-agent framework, around 60,000 stars. The notice went into the README on October 16, in PR #8366 ("docs: clarify AutoGen is archived and no longer maintained"). It points to Microsoft Agent Framework as the successor and still advises against production use. On November 6, John Langford, of the Microsoft research lab whose agent work included AutoGen, wrote that AI Frontiers is over (write-up here). By then the notice had been in the README for three weeks.
Here's the part the notice doesn't say. The last release of the core packages was 0.7.5, on September 30, 2025. Two hardening fixes landed on main after it:
$ git log --oneline python-v0.7.5..main | grep -E 'harden|trusted'
8544314 fix: restrict importlib provider loading to trusted namespaces (#7463)
b047730 fix: Improve AutoGen Studio: deprecate FunctionTool, harden MCP WebSocket endpoint (#7362)
The first one limits which Python modules a component config is allowed to import. Install autogen-core from PyPI and you get 0.7.5, which has no such limit: the trusted-namespace list exists only in the repo. The fix exists, and it never shipped. Microsoft says it isn't providing security fixes, so a 0.7.6 isn't coming.
b047730 belongs to AutoGen Studio, a separate package: it's the hardening behind the AutoGen Studio code-execution issue Microsoft disclosed in June. That one, per the disclosure, affected builds from main, not the released package. The point isn't that either is an open hole in your install. It's that this is a framework whose job is to run agents that call tools and execute code, its maintainers were still finding things to harden this spring, and the people who would ship the next fix have said they won't.
And the machine-readable side:
- GitHub: as of November 9, the repository isn't archived. The word "archived" exists only in the README text.
- PyPI:
autogen-agentchat,autogen-coreandautogen-extall report status "active". - Advisories: feeds list known bugs. They don't say who will fix the next one.
The Check
Python packaging has a field for this. Project status markers (active, archived, quarantined, deprecated) are served by PyPI's Simple API. Nobody set one here. So read both: the marker, and the age of the latest release.
=
return
=
=
=
= .
=
=
$ python3 stale.py autogen-agentchat autogen-core autogen-ext
autogen-agentchat 0.7.5 405d active
autogen-core 0.7.5 405d active
autogen-ext 0.7.5 405d active
The marker says active. The age says over a year. When the two disagree, believe the age, then go read the README.
Own the Decision
My take on supply chain failures: what's missing is rarely a tool, it's agency. The README notice had been there for three weeks before the lab news, and the unreleased fixes for months. No scanner was going to raise either, because the flag a scanner reads was never flipped.
So make it someone's job:
- Release age in CI, next to your vulnerability scan. Anything past a year with no release gets a human look.
- An owner and a date for every agent framework you depend on. If it's AutoGen, the migration to Agent Framework is a planned piece of work, not something you do the day a CVE lands with no patch.
- Compare the last tag to
mainfor the frameworks that matter. Fixes sitting unreleased are the earliest sign that nobody is cutting releases anymore.
The Tradeoff
Release age is a blunt instrument. A small library that's simply done looks exactly like an abandoned one, and a year-old release is normal for plenty of good code. Expect false positives, and expect to keep an allowlist of finished packages you've decided to trust as they are.
That's fine. The alternative is waiting for a flag that the maintainer, by definition, is no longer around to flip.