🌏 中文版
Release Info
| Item | Value |
|---|---|
| Framework | Agno |
| Version | v3.1.12 |
| Previous version | v3.1.11 |
| Release date | 2026-10-29 |
| Release Notes | v3.1.12 |
| GitHub | agno-agi/agno |
| Stars | 43k |
Why this release matters
The previous release (v3.1.11, Oct 27) had just made ClaudeAgent/CodexAgent first-class Team members and Workflow steps. This one closes a very practical gap: Claude Code and Codex already have their own permission mechanisms — Claude's permission_mode and permission callbacks, Codex's approval_policy — but until now those requests only lived inside the harness's own world; AgentOS couldn't see or govern them at all. This release wires both mechanisms straight into AgentOS's existing Approval UI. A permission request raised by the harness now becomes a persisted PAUSED run that shows up in the same Chat and Approvals screens users already use; a human resolves it, and Continue Run sends the decision back into the same native execution without replaying the prompt. Even Docker/AgentCore sandboxed environments keep this ability, including capability negotiation, a decision RPC, durable persistence, and reattachment after a worker disconnect. One behavior change worth flagging: a CodexAgent with no approval settings now defaults to the on-request policy, so a request that previously went nowhere now pauses and waits instead, bounded by hitl_timeout (default 900 seconds).
Simplified: sandbox-specific capability negotiation and reattachment-after-disconnect details are omitted.
Key changes
- Native Approvals for Harness Agents: Claude's and Codex's own permission requests now reach AgentOS's Approval UI directly, persisted as a
PAUSEDrun; Resolve plus Continue Run sends the decision back into the same native execution. Decisions are validated against the exact action requested, with sync/async continuation, cancellation, expiry, and storage-failure handling; sandboxed agents (Docker/AgentCore) keep capability negotiation, a decision RPC, and reattachment after a worker loss → reviewing permission requests no longer means switching to the harness's own interface, it's all unified in AgentOS. One behavior change to note: aCodexAgentwith no approval settings now defaults toon-request, so a request that previously went nowhere now pauses and waits (hitl_timeoutdefaults to 900s) - Initially Disabled Company Routines:
Routine(enabled=False)lets a template ship a Routine in a disabled state that a user later turns on from the UI; disabled Routines are still created atomically, stay linked to their Product, and remain visible in listings — only the scheduler skips them, and the user's choice survives a restart → templates can ship a whole pipeline without forcing every user to run all of it from day one - Headline Numbers on Charts:
ChartTools.create_chart()now takes an optional preformattedvalue(like"$22.3K"or"94%") shown next to the chart title; the docstring tells the model to fill it in only when a single number genuinely summarizes the chart, so averages and rates don't get wrongly summed → adding a headline figure to a chart no longer needs a separate drawing step
Breaking Changes
None, but there's one behavior change worth flagging:
- A
CodexAgentwith no approval options configured now automatically applies the nativeon-requestpolicy; a request that previously went nowhere when unhandled now explicitly pauses and waits (hitl_timeoutdefaults to 900 seconds) - Affected: existing code that creates a
CodexAgentwithout approval-related settings, and any flow relying on "an unhandled request just continues"
Migration Guide
Upgrade directly, no code changes required; extra setup is only needed to use the new approval feature:
pip install --upgrade agno==3.1.12
from agno.agent import ClaudeAgent
from agno.os import AgentOS
# ClaudeAgent's permission requests are automatically wired into AgentOS's Approval UI
# as long as this agent has a database (including the one AgentOS supplies)
claude_agent = ClaudeAgent(permission_mode="default")
agent_os = AgentOS(agents=[claude_agent])
# After a human resolves it in the Approvals view, Continue Run sends the
# decision back into the same native execution.
# See cookbook/frameworks/human_in_the_loop/
Compared to other frameworks
In the same week (Oct 27–29), Mastra's @mastra/core@1.80.0 added per-resource OAuth connection isolation — solving "which user does this connection represent." Agno's release solves a different problem — "should this one tool call run" — through a consent mechanism. Both are pulling authorization logic that used to be scattered across the application layer, or even inside the harness's own interface, up into the framework itself. This also continues the direction set by the previous release (v3.1.11): first make Harness Agents first-class citizens that can be orchestrated into a team, then make their permission mechanisms visible to the framework's own review surface.
Today's takeaway
I used to assume that a permission prompt from Claude Code or Codex could only be handled inside their own CLI or interface. Seeing Agno turn that request into a PAUSED run sitting in AgentOS's database made it clear: as long as a state can be persisted, read by another system, and written back to with a decision, "review" doesn't have to happen in the same interface that produced the request — it can be moved to any review screen that can reach the same database.