Yash Pratap Solankyandkausmeows 78fa25982e fix: persist ClaudeAgent SDK session id across restarts (#10903)
## Summary

`ClaudeAgent` kept the Agno `session_id` -> Claude SDK session id
mapping only in memory (`self._sdk_session_ids`). After a process
restart, or on a different AgentOS worker, the same Agno session
silently started a fresh Claude conversation. The AgentOS UI still
showed the full history from the DB, so it looked as if the session had
continued.

- **Persist the mapping:** the SDK session id is now stored in
`session.session_data["claude_sdk_session_id"]`, which the base class
already upserts after each run. The in-memory map stays as the fallback
when no `db` is configured. This matches what `CodexAgent` and
`AntigravityAgent` already do.
- **Fall back when a stored id can't be resumed:** the SDK keeps its
transcript on local disk under the agent's `cwd`, so a stored id may
point at a transcript that isn't there (another host, changed `cwd`,
deleted transcript). In that case the CLI exits 1 before yielding any
message, and without a fallback the session would fail on every run from
then on. If a resume fails before the first message, the adapter forgets
the id and starts a fresh SDK session, with the Agno history added to
the start of the prompt. Errors after messages have started streaming
are still raised, so output is never duplicated.
- **Share the prompt builder:** `_build_prompt` moved from `CodexAgent`
to `BaseExternalAgent` so both adapters use it. Codex behavior is
unchanged.
- **Simpler adapter hooks:** both hooks now go through a single
`_aquery` helper, which removes the duplicated session-id capture code
in the streaming and non-streaming paths.

## Type of change

- [x] Bug fix
- [ ] New feature
- [ ] Breaking change
- [ ] 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)
- [ ] Examples and guides: Relevant cookbook examples have been included
or updated (if applicable)
- [ ] 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

**Tests:** new file `libs/agno/tests/unit/agents/test_claude.py`, using
a fake `claude_agent_sdk`. It covers:
- persistence and resume across a fresh agent instance (streaming and
non-streaming)
- the stale-id fallback, including the history added to the prompt
- the in-memory mapping when no db is configured
- no retry when the run wasn't resuming

The 3 persistence and fallback tests fail on `main`; the other 3 are
regression guards. All 58 tests in `tests/unit/agents/` pass.

**End-to-end check with the real SDK (0.2.95):** each turn ran in a
separate Python process against a shared SQLite db.
1. Turn 1 stored the SDK session id.
2. Turn 2, in the same `cwd`, resumed that session and recalled a fact
from turn 1.
3. Turn 3, in a different `cwd`, logged the resume warning, fell back to
a fresh SDK session, still recalled the fact from the added history, and
stored the new id.

**validate.sh:** ruff passes. mypy reports 0 errors in `agno/agents`.
The 36 mypy errors it does report are in modules that wrap third-party
SDKs (`tools/mcp`, `utils/models/_genai_compat`, `models/google`,
`models/anthropic`). They come from SDK-version drift in my local venv
and are not touched by this PR.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: kausmeows <[email protected]>
2026-10-09 11:26:38 +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
693 MiB
Languages
Python 99.7%
HTML 0.1%
Shell 0.1%