Ground rules first
This course is independent of Anthropic. Anthropic did not write, sponsor or review it, and it reproduces none of Anthropic's course or documentation text. You get a practitioner's explanation in our own words, plus pointers to the primary pages so you can read the source yourself.
That second half matters more than it sounds. Claude's agent surfaces change monthly. Anything you read about them, this course included, is a snapshot. So the first skill is not an API call. It is a habit: verify before you depend.
The four ways to build on Claude
You already know the first one. The question that separates all four is: who runs the loop, and where?
| Surface | Who runs the agent loop | What you get |
|---|---|---|
| Client SDK (Messages API) | You, in your code | Direct model access. You write the tool loop yourself; a tool-runner helper exists but is beta. |
| Claude Code CLI | The CLI, in a terminal | An interactive tool for a person at a keyboard. |
| Claude Agent SDK | The library, in a process you operate | Claude Code's loop, built-in tools, permissions, sessions and hooks, callable from Python or TypeScript. |
| Managed Agents | Anthropic, behind the API | A hosted harness. You configure an agent, start sessions and exchange events. |
An analogy: the Client SDK is buying an engine and building the car. The Agent SDK is buying the car and driving it yourself. Managed Agents is hiring a car with a driver. The CLI is the same car, already set up for one person's daily use.
Two things that are easy to get wrong:
- The Agent SDK is not a thin API wrapper. It runs the Claude Code binary, normally bundled with the package. It was called the Claude Code SDK before a rename, so older posts use the old package names.
- With Managed Agents, the tools can execute in Anthropic's cloud sandbox or in a self-hosted sandbox on your own infrastructure. Anthropic runs the loop either way.
Why memory and blog posts fail you
Here is a real trap. When the Agent SDK was renamed at v0.1.0, it briefly stopped loading filesystem settings (your .claude/ config and CLAUDE.md files) by default. Plenty of posts recorded that behaviour. The change was later reverted: omit the option today and user, project and local settings load, as they do in the CLI.
If you trust the old post, you ship an agent to CI believing it is isolated, and it quietly picks up whatever config sits on the build machine. Nothing errors. This is the kind of bug that verification prevents.
A repeatable verification routine
Run these four steps for any feature, option name, limit or version requirement.
1. Find the primary page. Agent SDK and CLI docs live on code.claude.com/docs. API and Managed Agents docs live on platform.claude.com/docs. A blog post only tells you what to look for.
2. Read the status on that page. Is the feature marked beta? Does it name a beta header? Is part of it a research preview that needs an access request?
3. Check the changelog for the version you actually run. The Python and TypeScript Agent SDKs each have a CHANGELOG.md on GitHub, and they are versioned separately.
# What do I really have installed? Never guess.
pip show claude-agent-sdk # Python: prints Version: ...
npm ls @anthropic-ai/claude-agent-sdk # TypeScript: prints the resolved version
# Now open that package's CHANGELOG.md and search for the option name.
# Look for: when it was added, renamed, or had its default changed.
4. Write down what you found, with the date.
Applying this to the trap above: the migration guide states the current default, and it adds that Python SDK 0.1.59 and earlier treated an empty list the same as leaving the option out. So "pass an empty list to isolate" is only true above a certain version. That version detail is what makes a production agent behave as you expect.
Gotcha: Python and TypeScript version numbers do not match. On 2026-10-10 the Python changelog topped out at 0.2.165 and the TypeScript one at 0.3.296. "I'm on the latest" means nothing without the language.
Label what you depend on
Give every capability one of three labels:
- stable: documented with no beta marker.
- beta: documented, but marked beta or gated by a beta header. Anthropic warns that betas can change in breaking ways, be removed, or carry different rate limits and pricing.
- unconfirmed: you cannot find it on a primary page. Treat it as not existing until you can.
Keep the labels in a small file beside your code:
# capabilities.yaml: what this agent depends on, and when we last looked
- capability: Managed Agents (agents, environments, sessions, events)
status: beta # every endpoint needs a beta header
detail: "anthropic-beta: managed-agents-2026-04-01 (client SDKs add it for you)"
source: platform.claude.com/docs/en/managed-agents/overview
checked: 2026-10-10
- capability: MCP tunnels (private MCP servers for Managed Agents)
status: beta # narrower: research preview, access on request
source: platform.claude.com/docs/en/managed-agents/overview
checked: 2026-10-10
- capability: setting_sources=[] isolates the agent from filesystem settings
status: stable
detail: "needs Python SDK newer than 0.1.59"
source: code.claude.com/docs/en/agent-sdk/migration-guide
checked: 2026-10-10
- capability: "a colleague says there is a per-tool retry option"
status: unconfirmed # not found in docs or changelog
checked: 2026-10-10
The checked date is the important field. A label without a date goes stale and nobody can tell. A dated label shows a reviewer how old the knowledge is.
Best practice: re-check the register whenever you bump an SDK version, and before any launch. It takes ten minutes and it catches renamed options and changed defaults before your users do.
Trade-off: depending on a beta is often the right call, because much of the useful agent tooling is beta. The label is there so you make that choice knowingly, pin versions and plan for change.
This course follows the same rule. When a later lesson names a feature, it says whether it is beta or unconfirmed.
Key takeaways
- This course is independent of Anthropic and reproduces none of its course or documentation text.
- There are four surfaces: the Client SDK (you write the loop), the Claude Code CLI (interactive terminal), the Claude Agent SDK (Claude Code's loop as a library in your process) and Managed Agents (Anthropic hosts the loop).
- Verify in order: primary docs page, status on that page, changelog for your installed version, then record it.
- Label each dependency stable, beta or unconfirmed, and date the check.
- Blog posts and memory tell you what to look up. They do not settle it.