3be277189d feat: continue ClaudeAgent runs from a step (#10917)
## Summary

Adds step replay to `ClaudeAgent` using the same API as native
`Agent.continue_run`. Stacked on #10905
(`feat/harness-agents-phase2-astra`); it needs #10904's database-backed
Claude SDK transcript store.

- **`ClaudeAgent.continue_run` / `acontinue_run`**: accept
`continue_from` (`"end"`, `"last_user"` or a message index), `fork` and
`input`, and support `stream=True` and `background=True`. Continuing
forks the stored SDK transcript at the chosen message
(`fork_session_via_store(..., up_to_message_id=...)`) and resumes the
fork, so the model only remembers what happened up to that point.
- `fork=True` writes a sibling run with `forked_from_run_id` /
`forked_from_message_index`; `fork=False` replaces the source run in
place and keeps its fork lineage.
- `continue_from="last_user"` without `input` replays the whole turn: it
forks just before the prompt (or starts a fresh SDK session for the
session's first turn) and re-sends the original input.
- A mid-turn continue without `input` sends "Continue from where you
left off."
- Later turns in the session continue from the replayed branch, because
the session's SDK pointer moves to the fork.
- **Transcript positions on runs**: the adapter enables the SDK's
`replay-user-messages` so the prompt arrives with its transcript uuid.
It records the SDK session id and uuid for each top-level prompt, tool
call, tool result and final reply in
`Message.provider_data["claude_sdk"]`. Tool results are marked as
checkpoints, so `GET /agents/{id}/runs/{run_id}/checkpoints` lists each
step.
- **AgentOS**: no router changes. `/continue` and `/checkpoints` already
dispatch on `acontinue_run` / `aget_run_output`, so `ClaudeAgent` moves
from 501 to supported. Unsupported options (`regenerate`,
`replace_original`, `additional_instructions`, HITL `tools`) return 400.
- **`BaseExternalAgent`**: generic plumbing only. `ExternalContinuation`
carries the kept transcript into `_arun_non_stream` / `_arun_stream`, a
per-run `run_state` dict reaches the adapter, and an
`_annotate_run_output` hook (no-op by default) lets an adapter attach
per-message data. Other adapters are unaffected: none forwards run
kwargs to its framework.
- **Resume fallback unchanged for normal runs**: the echoed prompt is
not counted as a received message, so #10903's "stored session cannot be
resumed, start fresh with history" fallback still works. Continuations
never fall back; a failed fork resume errors instead of silently
replaying the full history.

## Type of change

- [ ] Bug fix
- [x] 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)
- [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

Base is `feat/harness-agents-phase2-astra` (#10905), not `main`. Merge
after #10903, #10904 and #10905.

Limits:
- Only runs recorded with transcript storage (PostgresDb,
AsyncPostgresDb, SqliteDb, AsyncSqliteDb) can be continued; older runs
and other databases raise a clear error.
- Files and other side effects after the checkpoint are not rewound. The
SDK's file checkpointing does not carry over to forked sessions.
- Steps inside subagents (`parent_tool_use_id`) are not checkpoints;
they live in subagent transcripts.
- `regenerate` / `replace_original` and Codex are follow-ups.

Verification:
- Confirmed against the real SDK (0.2.95) that streamed message uuids
equal stored transcript uuids, and that forks cut at a tool result or
before the prompt only remember up to that point.
- Live end-to-end on SQLite: fork from a tool result, replay of a first
and a later turn, in-place streamed continue, follow-up turn on the
branch, and AgentOS `/checkpoints` + `/continue` (non-stream and SSE).
`cookbook/frameworks/claude-agent-sdk/continue_from.py` passes with
`claude-sonnet-4-6`.
- New unit tests against the fake SDK: transcript positions and
checkpoints (stream and non-stream), fork from a tool result, in-place
continue lineage (sync API), turn replay with and without a parent
entry, no fallback on a failed continuation, rejected options, and
prompt echo not blocking the resume fallback. Each guard was
mutation-checked: breaking lineage, allowing fallback, or counting the
echo as received makes a test fail.
- `validate.sh`: no ruff or mypy findings in touched files; the
remaining mypy errors are pre-existing model/MCP SDK typing issues from
local dependency versions. Postgres integration tests were not run
locally.

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

---------

Co-authored-by: Ashpreet <[email protected]>
Co-authored-by: Ashpreet <[email protected]>
Co-authored-by: kausmeows <[email protected]>
Co-authored-by: Claude Fable 5.1 <[email protected]>
2026-10-09 21:39:26 -04:00
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%