ff9b86d5be feat: add background lifecycle and cancellation to external agents (#10905)
## Summary

External agents now support durable-queue run IDs, detached background
execution, resumable indexed SSE and cancellation. Polling sees PENDING,
RUNNING and the terminal run. Claude uses a per-run SDK client; Codex
retains turn handles so the owning process can interrupt either SDK
through direct calls or shared cancellation intent.

Native agents and external agents share the background task/slot/SSE
infrastructure. Queue preparation, error/shutdown persistence, retry
fencing and scoped A2A polling/cancellation dispatch to external-agent
helpers. A cancelled row is preserved if its durable ticket remains
queued after a crash, including on adapters without atomic run
primitives.

## Type of change

- [x] Bug fix
- [x] New feature
- [ ] Breaking change
- [x] Improvement
- [ ] Model update
- [ ] Other:

---

## Checklist

- [x] Code complies with style guidelines
- [x] Ran format/validation scripts (`./scripts/format.sh` and
`./scripts/validate.sh`)
- [x] Self-review completed
- [x] Documentation updated (comments, docstrings)
- [x] Examples and guides: Relevant cookbook examples have been included
or updated (if applicable)
- [x] Tested in clean environment
- [x] Tests added/updated (if applicable)

### Duplicate and AI-Generated PR Check

- [x] I have searched existing [open pull
requests](https://github.com/agno-agi/agno/pulls) and confirmed that no
other PR already addresses this issue
- [ ] If a similar PR exists, I have explained below why this PR is a
better approach
- [x] Check if this PR was entirely AI-generated (by Copilot, Claude
Code, Cursor, etc.)

---

## Additional Notes

Depends on #10904 (transcripts and tool persistence), which depends on
#10903. Merge in that order before this PR. This PR targets main and
currently includes both dependencies. Review the phase 2 changes with
the comparison
`feat/harness-agents-phase1-astra..feat/harness-agents-phase2-astra`.
Refresh the branch onto main after the dependencies land so the final
diff contains only lifecycle changes.

Validation: 736 unit/regression tests, including the native background
tests unchanged; 5 enabled integration cases with no skips. Real Claude
and Codex turns were cancelled after content arrived and stored
CANCELLED. SQLite and AsyncSQLite exercise status fallbacks, retries,
cancellation, SSE replay and user scoping. Guard mutation results are
retained locally. Required formatting and validation passed.

Codex's cookbook explicitly sets `approval_mode="deny_all"`.
Multi-replica cancellation and replay need shared
cancellation/event-stream backends. Redis multi-replica deployment was
not exercised. Database-stored events after the event-stream TTL, team
background factoring, step replay/HITL and workspace persistence are
follow-ups.

SQLAlchemy 2.0.52 matches the demo environment and passes typing; the
unchanged base has six mypy errors with the freshly resolved 2.1.4.


### Review fixes

Worker-owned terminal persistence failures now propagate so durable
tickets retry instead of
completing over RUNNING rows. PostgreSQL writes SDK session metadata and
the fenced run in one
transaction; stale attempts change neither, and session-write failures
roll back the run update.
Missing prepared worker rows fail closed. Async lookups on sync
in-memory SQLite retain the same
connection thread as persistence. Includes the phase 1 warning and CI
dependency fixes.

Fresh validation: 751 unit/regression tests; 12 external-agent
PostgreSQL integration cases;
13 existing native PostgreSQL fencing/status tests (temporary copies
pointed at the disposable
database port); 13 lifecycle/storage mutations killed. Required format
and validation pass.
One pre-existing native AsyncMock warning remains. The SDK
mirror-failure reproduction passed;
live provider cancellation/resume was not rerun for these fixes.

---------

Co-authored-by: ysolanky <[email protected]>
Co-authored-by: kausmeows <[email protected]>
Co-authored-by: Claude Fable 5.1 <[email protected]>
Co-authored-by: Yash Pratap Solanky <[email protected]>
2026-10-09 18:32:02 +05:30
2026-08-24 18:19:42 +05:30
2024-02-12 21:05:49 +00:00
2026-08-24 18:19:42 +05:30
2025-09-09 15:39:09 +02:00
2025-01-30 20:50:59 +05:30
2026-07-14 22:55:34 +01:00

Build, run, and manage agent platforms.

Introduction

Agno is a framework and runtime for agent platforms. Build agents, run them as a service, manage your platform using a web UI.

  • Build your agent platform using the Agno SDK.
  • Run your agent platform using the AgentOS runtime.
  • Manage everything using the AgentOS UI.

Agno allows you to own your agent stack. Maintain control of your data, memory, and security posture (JWT-based RBAC), and turn your agent platform into a learning loop with simulations and usage data.

demo-os

Get started

Hand this prompt to your coding agent (Claude Code, Cursor, Codex):

Help me set up my agent platform.

Clone https://github.com/agno-agi/agentos-railway into a folder called
agent-platform, cd in, read the README, and follow the get started guide.

Your coding agent will set up your agent platform and run it locally using Docker, giving you a REST API for serving your agents, a Postgres database for storing your data and traces, an MCP server, and a control plane.

Deploying somewhere else? Use the same prompt but point it to a different repo. The starter templates are identical except for the deploy scripts: swap agentos-railway for agentos-docker, agentos-aws, agentos-gcp, agentos-azure, agentos-fly, agentos-render, agentos-modal, or agentos-helm.

Prefer to code by hand?

Features

  • Production API. 50+ endpoints with SSE and websockets to build a product on top.
  • Storage. Store sessions, memory, knowledge, and traces in your own database.
  • 100+ integrations. Connect to GitHub, Slack, Postgres, and more using pre-built toolkits.
  • Context Providers. Access live data from Slack, Drive, wikis, MCP, and custom sources.
  • Human approval. Pause runs for user confirmation. Block tools that require admin approval.
  • Observability. Monitor with OpenTelemetry tracing, run history, and audit logs.
  • Security. Get JWT-based RBAC and multi-user, multi-tenant isolation out of the box.
  • Interfaces. Expose your agents via Slack, Telegram, WhatsApp, Discord, AG-UI, A2A.
  • Scheduling. Cron-based scheduling and background jobs with no external infrastructure.
  • Deploy anywhere. Run on any cloud platform that runs containers. Docker, Railway, AWS, GCP.

Use Agno with your coding agent

Two options:

  1. Recommended: Add Agno docs as an MCP server. Add docs.agno.com/mcp to your favourite coding agent.
  2. Add Agno docs as an indexed source. In Cursor: Settings → Indexing & Docs → Add https://docs.agno.com/llms-full.txt. Also works in VSCode, Windsurf, and similar tools.

Read the full guide here.

Community

Contributing

See the contributing guide.

License

Agno is distributed under the Apache-2.0 license.

Telemetry

Agno sends a telemetry event per agent run so we know which model providers to prioritize. Prompts, messages, and outputs are never sent. Disable by setting AGNO_TELEMETRY=false.

↑ Back to top

S
Description
Build, run, and manage agent platforms.
Readme Apache-2.0
706 MiB
Languages
Python 99.7%
HTML 0.1%
Shell 0.1%