# Choose a harness

Claude Agent SDK or Deep Agents. What each one is good at, what your entrypoint returns, and what stays the same whichever you pick.

A harness is the agent framework your code runs inside. Tanomis supports two Python harnesses, and
they share everything that is not your code: the manifest, the build, versions, tenant enablement,
the session runtime, governed tools, and evidence. Pick by how you want to express the agent.

- **Claude Agent SDK**: your entrypoint returns a prompt and options. The smallest entrypoint,
  Claude's tools, hooks, subagents, and permission callbacks.
- **Deep Agents**: your entrypoint returns a compiled LangGraph graph. Typed LangChain tools,
  middleware, structured output, checkpoint-aware state.
- Both are declared with one line in `agent.yaml`, `framework`, and scaffolded by `tanomis agent new`.
- Switching harness is a new agent, not a new version; `framework` is part of the contract.

## The choice

| | `claude-agents-sdk` | `deepagents` |
|---|---|---|
| Best fit | A system prompt plus tools, or an existing Claude Agent SDK agent | Tool-heavy or graph-shaped work, or existing LangGraph code |
| Entrypoint returns | `(prompt, options)` | A graph from `create_deep_agent` |
| Tools | Claude Agent SDK tools, hooks, subagents | Typed LangChain tools and middleware |
| State between turns | Claude SDK session continuity | LangGraph checkpoints in the session workspace |
| Approvals and questions | `permission_mode: "default"` plus the manifest's list | Manifest list composed with author `interrupt_on` |

Choose Claude Agent SDK when the behaviour is naturally a prompt with options and you want the
least code. Choose Deep Agents when the agent is a graph of typed tools, needs structured output
or middleware, or already exists as LangGraph code.

## What does not change

The runtime owns tenant isolation, the working directory, the resolved model and provider
credentials, session identifiers, governed connectors, and persistence. You own the instructions,
the tool implementations, and the behaviour the manifest permits. The
[entrypoint contract](/guides/build/write-your-agent) is the same shape for both.

List the harnesses your installed CLI supports rather than copying a value from memory:

```bash title="Terminal"
tanomis agent harnesses
```

## Where to go next

- [Claude Agent SDK](/guides/build/claude-agent-sdk): the entrypoint, the ownership boundary,
  approvals.
- [Deep Agents](/guides/build/deep-agents): the graph entrypoint, dependencies, tool interrupts.
- [Write your agent](/guides/build/write-your-agent): what comes in and what you return.
