> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devin.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Devin SDK changelog

> Release notes for each Devin SDK beta: @cognition-ai/sdk, ai-sdk, cloudflare-agents and harness-devin, with links to the published versions on npm.

The packages release together on the `beta` dist-tag and should be kept on the same version.
Published versions are listed on npm:
[`@cognition-ai/sdk`](https://www.npmjs.com/package/@cognition-ai/sdk?activeTab=versions),
[`@cognition-ai/ai-sdk`](https://www.npmjs.com/package/@cognition-ai/ai-sdk?activeTab=versions),
[`@cognition-ai/cloudflare-agents`](https://www.npmjs.com/package/@cognition-ai/cloudflare-agents?activeTab=versions),
[`@cognition-ai/harness-devin`](https://www.npmjs.com/package/@cognition-ai/harness-devin?activeTab=versions).
The [examples repository](https://github.com/COG-GTM/devin-sdk-examples) is tagged `v<version>`
for each release.

**0.0.1-beta.7**

September 29, 2026

Model discovery for local sessions. Install with `npm install @cognition-ai/sdk@beta`; all four
packages are at `0.0.1-beta.7`.

**`@cognition-ai/sdk`**

* New `LocalSession.models()` returns the models and Fusion pairings the CLI accepts for the
  session (`options`, each with an `id`, display `name` and `supportsImages` when the CLI reports
  it) and the model in effect (`current`). It reads the `model` config option the CLI already
  returns on `session/new`, `session/load` and `session/set_config_option`, so it tracks the CLI
  version and account without a separate call, and replaces `devin models list` as the way to
  find valid `Fusion({ leader, sidekick })` inputs. See
  [Models and Fusion](https://docs.devin.ai/sdk/guides/local-sessions.md#models-and-fusion).
* New `session.configOptions` on every session exposes the raw ACP config options the agent
  last reported, typed as `SessionConfigOption[]` (with `SessionConfigSelectOption` values).
* `setModel` rejects a model or pairing the CLI does not advertise with a new
  `ModelRejectedError` carrying the id (`model`) and the CLI's explanation (`reason`), and leaves
  the current model in place. Previously the call failed with a bare `Invalid params`
  JSON-RPC error whose reason was only in `error.data`. `SessionStartupError` from a
  `createSession({ model })` that fails the same way now has the `ModelRejectedError` as its
  `cause`. `setModel` also refreshes `models().current` from the CLI's response.

**`@cognition-ai/ai-sdk`**, **`@cognition-ai/cloudflare-agents`**,
**`@cognition-ai/harness-devin`**: no changes beyond the SDK dependency.

**Examples**: no code changes; the
[examples repository](https://github.com/COG-GTM/devin-sdk-examples) is at `v0.0.1-beta.7`.

Published packages:
[`@cognition-ai/sdk`](https://www.npmjs.com/package/@cognition-ai/sdk/v/0.0.1-beta.7),
[`@cognition-ai/ai-sdk`](https://www.npmjs.com/package/@cognition-ai/ai-sdk/v/0.0.1-beta.7),
[`@cognition-ai/cloudflare-agents`](https://www.npmjs.com/package/@cognition-ai/cloudflare-agents/v/0.0.1-beta.7),
[`@cognition-ai/harness-devin`](https://www.npmjs.com/package/@cognition-ai/harness-devin/v/0.0.1-beta.7).

**0.0.1-beta.6**

September 22, 2026

ACP version selection. Install with `npm install @cognition-ai/sdk@beta`; all four packages are
at `0.0.1-beta.6`.

**`@cognition-ai/sdk`**

* New `acpVersion` option on `createDevin`, `CloudDevin.connect` and `LocalDevin.start`, typed
  as `AcpProtocolVersion` (`1 | 2`). Pass `acpVersion: 1` to require
  [ACP v1](https://agentclientprotocol.com/protocol/initialization) on either transport; the SDK
  then sends only v1 `initialize` fields and rejects an agent that selects v2. The default,
  `acpVersion: 2`, is unchanged: it offers v2 and still accepts an agent that selects v1. The
  selected version is exposed as `devin.protocolVersion`. See
  [Choosing the ACP version](https://docs.devin.ai/sdk/how-it-works.md#choosing-the-acp-version).
* Session methods follow the negotiated version, so application code does not change:
  `loadSession` uses `session/load` on v1 and `session/resume` on v2, and `await turn` completes
  from the prompt result on v1 and the idle `state_update` on v2. `turn_state` events and the
  cloud `replay: "tail"` / `"none"` load options remain v2-only.
* Fixed: a local connection whose ACP negotiation was rejected kept its stdio listeners and
  JSON-RPC responders. `LocalDevin.start` and `LocalDevin.connect` now close the connection
  before rethrowing, and `CloudDevin.connect` closes its socket on handshake errors. Custom
  `LocalDevin.connect` streams should expose `off()` alongside `on()` so the SDK can detach
  its listeners; streams with only `on()` still work, but keep inert listeners attached.

**`@cognition-ai/ai-sdk`**, **`@cognition-ai/cloudflare-agents`**,
**`@cognition-ai/harness-devin`**: no changes beyond the SDK dependency.

**Examples**: the [quickstart](https://docs.devin.ai/sdk/examples/quickstart.md) programs accept `--acp-v1`. The other
examples need no code changes; the [examples repository](https://github.com/COG-GTM/devin-sdk-examples)
is at `v0.0.1-beta.6`.

Published packages:
[`@cognition-ai/sdk`](https://www.npmjs.com/package/@cognition-ai/sdk/v/0.0.1-beta.6),
[`@cognition-ai/ai-sdk`](https://www.npmjs.com/package/@cognition-ai/ai-sdk/v/0.0.1-beta.6),
[`@cognition-ai/cloudflare-agents`](https://www.npmjs.com/package/@cognition-ai/cloudflare-agents/v/0.0.1-beta.6),
[`@cognition-ai/harness-devin`](https://www.npmjs.com/package/@cognition-ai/harness-devin/v/0.0.1-beta.6).

**0.0.1-beta.5**

September 22, 2026

Install with `npm install @cognition-ai/sdk@beta`; all four packages are at `0.0.1-beta.5`.

**Fix: session MCP servers**

* `@cognition-ai/sdk` accepts `mcpServers` on `createSession`, `loadSession`, and `attach`
  for local and cloud sessions. These methods previously sent an empty MCP server list.
* The public `McpServer` type describes stdio, HTTP, and SSE configurations.
  The SDK adds `type: "stdio"` to untagged stdio servers for ACP v2 without changing caller input.
* The SDK and `@cognition-ai/harness-devin` update their CLI dependency to `3000.11.1`.
  This CLI build registers the MCP servers supplied through ACP.

See [local MCP configuration](https://docs.devin.ai/sdk/guides/local-sessions.md#mcp-servers) and
[cloud MCP configuration](https://docs.devin.ai/sdk/guides/cloud-sessions.md#mcp-servers).
Cloud tool availability depends on the ACP endpoint.

Published packages:
[`@cognition-ai/sdk`](https://www.npmjs.com/package/@cognition-ai/sdk/v/0.0.1-beta.5),
[`@cognition-ai/ai-sdk`](https://www.npmjs.com/package/@cognition-ai/ai-sdk/v/0.0.1-beta.5),
[`@cognition-ai/cloudflare-agents`](https://www.npmjs.com/package/@cognition-ai/cloudflare-agents/v/0.0.1-beta.5),
[`@cognition-ai/harness-devin`](https://www.npmjs.com/package/@cognition-ai/harness-devin/v/0.0.1-beta.5).

**0.0.1-beta.4**

September 19, 2026

Client-level tracing and a public API cleanup. Install with `npm install @cognition-ai/sdk@beta`;
every package is at `0.0.1-beta.4`.

**`@cognition-ai/sdk`**

* Tracing is now set once on the client: pass `tracing: traceSessions({ tracer })` from
  `@cognition-ai/sdk/tracing` to `createDevin`, `LocalDevin.start`, `LocalDevin.connect` or
  `CloudDevin.connect`. Every session the client creates, loads, attaches or launches is traced,
  and prompts are recorded from every prompt method (`send`, `run`, `stream`, `streamUpdates`,
  `postMessage`), so `recordPrompt` is no longer needed. Cloud messages sent from other clients,
  such as the web app, are traced as their own turns. History replayed on load or attach is not
  exported again. A session can add metadata and tags with its own `tracing` option, or opt out
  with `tracing: false`. `traceSession` keeps its API for tracing a single session. See
  [Tracing](https://docs.devin.ai/sdk/guides/tracing.md).
* Fixed: a cloud turn's final reply, which can arrive after the turn goes idle, was added to the
  next turn's trace output.
* Fixed: when the agent connection drops, sessions now get the same `ConnectionClosedError` as
  pending requests, with the specific reason (for example
  `Connection to the agent closed: read ECONNRESET`).
* `OutputNotification`, `ShowModalNotification`, `RevertStepInfo`,
  `RevertStepsUpdatedNotification` and `RevertHistoryRewoundNotification` are now generated from
  the ACP schema. `RevertStepInfo` gains `stepId`, its optional id fields and
  `firstRemovedUserMessageId` accept `null`, and `OutputNotification.level` is optional.
* New `LocalDevin.spawn(cliPath, options?, env?)` starts a given CLI binary with the given
  environment, without `start()`'s API key and state directory handling.
* New `toolCallText(call)` and `isToolCallInputFinal(call)` helpers.
* `bundledCliPath` and `cliPackageName` are no longer exported. Use `resolveCliPath()`.

**`@cognition-ai/ai-sdk`**

* The `devin-status` and `devin-lifecycle` data part types are derived from the SDK's
  `StatusEvent` and `LifecycleEvent`.

**`@cognition-ai/harness-devin`**

* Fixed: a tool call first announced by a permission request now streams like any other tool
  call, and keeps `nativeName` for mapped tools (`exec` shown as `bash`, `find_file_by_name`
  shown as `glob`).
* The bridge starts the CLI with `LocalDevin.spawn`, so spawn failures get the SDK's clearer
  error messages.

**`@cognition-ai/cloudflare-agents`**: no changes beyond the SDK dependency.

**Examples**: the [examples repository](https://github.com/COG-GTM/devin-sdk-examples) is at
`v0.0.1-beta.4`. The examples need no code changes for this release.

**0.0.1-beta.3**

September 18, 2026

Tracing and Fusion models. Install with `npm install @cognition-ai/sdk@beta`; every package is
at `0.0.1-beta.3`.

**`@cognition-ai/sdk`**

* New `traceSession(session)` at `@cognition-ai/sdk/tracing` records a session as
  OpenTelemetry spans: one `agent` span per turn, one `generation` span per model request
  (tokens, cache reads and writes, request id, time to first token, cost when the agent reports
  it) and one `tool` span per tool call. It uses `@opentelemetry/api` (an optional peer
  dependency), so your application configures the provider and exporter, for example Langfuse's
  `LangfuseSpanProcessor`. See [Tracing](https://docs.devin.ai/sdk/guides/tracing.md).
* New `Fusion({ leader, sidekick })` for local sessions:
  `createSession({ model: Fusion({ leader: "claude-opus-5-max", sidekick: "swe-2-high" }) })`,
  and the same on `LocalDevin.start` and `session.setModel`. Plain model ids such as
  `"fusion-adaptive"` still work, and the CLI rejects pairings it doesn't list. See
  [Models and Fusion](https://docs.devin.ai/sdk/guides/local-sessions.md#models-and-fusion).
* The generated Cognition ACP schema is refreshed from the CLI. The CLI no longer sends the
  `restart` stop cause, so `AgentStopCause.Restart` and `AgentStoppedNotification.restartReason`
  are removed; code that checks `cause === "restart"` can drop that branch.

**`@cognition-ai/ai-sdk`**, **`@cognition-ai/cloudflare-agents`**, **`@cognition-ai/harness-devin`**:
no changes beyond the SDK dependency.

**0.0.1-beta.2**

September 14, 2026

Two new packages, cloud sessions on edge runtimes, and cancellable turns. Install with
`npm install @cognition-ai/sdk@beta`; every package is at `0.0.1-beta.2`.

**New: `@cognition-ai/ai-sdk`** — Devin session events as
[AI SDK UI message streams](https://ai-sdk.dev/docs/ai-sdk-ui/stream-protocol), so a `useChat`
route is `createUIMessageStreamResponse({ stream: toUIMessageStream(session.stream(toPromptInput(messages))) })`.
Messages and thoughts become text and reasoning parts, tool calls `dynamic-tool` parts carrying
the SDK's `ToolCallDetail`, plans and pull requests `data-devin-*` parts. Also `toUIMessages(replay)`
for reloading history, `endWhenIdle` for `resumeStream()`, `devinSessionMetadata()`, and
`ToolApprovals` for answering permission requests as AI SDK tool approvals. Runs on every runtime
the SDK does. See [AI SDK UI](https://docs.devin.ai/sdk/ai-sdk/overview.md).

**New: `@cognition-ai/cloudflare-agents`** — a Devin cloud session behind a
[Cloudflare Agents](https://developers.cloudflare.com/agents/) `AIChatAgent`:
`export class DevinChat extends DevinChatAgent<Env> {}` gives one Devin session per chat Durable
Object, with one queued turn per message, stop, permission requests as tool approvals,
`startOver()`, `importSession(id)` to continue a session from the Devin app, and recovery across
Durable Object restarts. Agent state carries the session id and URL, status, activity, plan and
pull requests. See [Cloudflare Agents](https://docs.devin.ai/sdk/cloudflare-agents/overview.md) and the
[Cloudflare Agents chat example](https://docs.devin.ai/sdk/examples/cloudflare-agents.md).

**`@cognition-ai/sdk`**

* Cloud sessions run on edge runtimes: Cloudflare Workers and Deno 2.5+. The ACP socket uses the
  runtime's built-in `WebSocket` (a `fetch` upgrade on Workers) and the `ws` dependency is gone;
  runtimes whose `WebSocket` can't send headers (browsers, Vercel Edge, older Deno) get a
  `DevinError` from `connect()`. `CloudDevin.attachTo()` now takes a WHATWG-style socket. See
  [Where it runs](https://docs.devin.ai/sdk/guides/cloud-sessions.md#where-it-runs).
* `session.stream()`, `streamUpdates()`, `send()`, `postMessage()` and `run()` accept
  `{ signal }`. Aborting cancels the Devin turn right away (`stopReason: "cancelled"`); pass a
  route's `request.signal` so a client stop cancels the turn. See
  [Cancelling a turn](https://docs.devin.ai/sdk/guides/cloud-sessions.md#cancelling-a-turn).
* `ToolCall.detail` gains `computer_use` — Devin's browser and desktop automation on the cloud,
  with typed `actions` — which was `other` before. See
  [Streaming events](https://docs.devin.ai/sdk/guides/streaming-events.md#tool-calls-the-same-on-both-agents).
* A structured `run()` whose turn stops without finishing (cancelled, refusal, max tokens)
  resolves with that `stopReason` instead of rejecting with "The turn produced no JSON to
  validate"; reading `outcome.output` on such an outcome throws. See
  [Structured output](https://docs.devin.ai/sdk/guides/launch-and-structured-output.md#structured-output).

**`@cognition-ai/ai-sdk`** (first release; fixes found while building the Cloudflare example)

* `toUIMessageStream` no longer opens a second reasoning part when the cloud restates a finished
  thought with only whitespace changes, which showed every thought twice.
* `ToolApprovals.respond()` also answers denials stored as `output-denied`, as Cloudflare's
  `AIChatAgent` records them.

**`@cognition-ai/cloudflare-agents`** (first release)

* A turn drops updates for tool calls that belong to an earlier message: stopping a turn does
  not stop the command Devin was running, and its late completion used to fold the stopped reply
  into the next one.

**`@cognition-ai/harness-devin`** — no changes beyond the SDK dependency.

**Examples** — the [examples repository](https://github.com/COG-GTM/devin-sdk-examples) is at
`v0.0.1-beta.2` with a new [Cloudflare Agents chat](https://docs.devin.ai/sdk/examples/cloudflare-agents.md); the
quickstart prints `computer_use` tool calls; session-board no longer needs `ws`. See
[which examples need beta.2](https://docs.devin.ai/sdk/examples/overview.md#running-any-of-them).

**0.0.1-beta.1**

September 11, 2026

The first public beta of `@cognition-ai/sdk` and `@cognition-ai/harness-devin`. Install with
`npm install @cognition-ai/sdk@beta`; see [Quickstart](https://docs.devin.ai/sdk/quickstart.md).

**`@cognition-ai/sdk`**

* `createDevin()` connects to the cloud unless `cwd` is passed; nothing else in the environment
  picks the mode. Local sessions require an API key (`apiKey` or `DEVIN_API_KEY`) and fail before
  spawning the CLI without one. See [How it works](https://docs.devin.ai/sdk/how-it-works.md).
* Local sessions run the bundled CLI with their own config, session store and cache under
  `~/.devin-sdk` (`stateDir`), isolated from an interactive Devin CLI on the same machine. The
  bundled CLI platform packages are pinned to `3000.6.11`.
* Cloud sessions can be scoped to repositories: `createSession({ repos })`, or `session.setRepos()`
  before the first prompt. Repositories the organization cannot access reject with a `DevinError`.
* `launchSession(prompt, { session, turn })` on cloud and local clients returns `{ session, turn }`
  once the first prompt is accepted. See
  [Launch and structured output](https://docs.devin.ai/sdk/guides/launch-and-structured-output.md).
* Session-wide events: `session.events()` and `session.updates()` deliver every live update for a
  session — including turns started from the web app or another process — as typed `SessionEvent`s
  (`status`, `activity`, `lifecycle`, `typing`, `pull_request`, …). `session.meta` exposes the
  latest session snapshot, and `listSessions()` results carry typed `_meta`. See
  [Watching sessions](https://docs.devin.ai/sdk/guides/watching-sessions.md).
* `ToolCall.detail` normalizes what each tool call is and what it was given (`exec`, `read`,
  `write`, `edit`, `mcp`, `permission_request`, `ask_user_question`, …) across local and cloud
  agents.
* `attach()` is available on every client; `LoadedSession<S>` is the shared result type and every
  session option type extends `SessionOptions`. The ACP `state_update` surfaces as a typed
  `turn_state` event.
* Structured output parsing no longer fails on ` ```json ` blocks whose string values contain
  fenced code, and `thought_delta` events no longer repeat reasoning already streamed.
* The `CognitionAcp` escape hatch exports every Cognition ACP method constant, params/response type
  and error code, for `session.extRequest()` / `devin.extRequest()`.

**`@cognition-ai/harness-devin`**

* `createDevin({ baseUrl })` (default `DEVIN_API_URL`) selects the Devin deployment the in-sandbox
  CLI talks to.
* Setup phases are reported as `info` diagnostics (`devin.bridge.attach|spawn|ready`, `devin.cli`,
  `devin.session`, `devin.session.ready`, `devin.prompt`) so hosts can show progress before the
  first token. See [Diagnostics](https://docs.devin.ai/sdk/harness/diagnostics.md).
* The bridge holds back a `tool-call` part until the CLI has finished streaming the call's input,
  fixing `AI_InvalidToolInputError` on builtin tool calls.
* Aborting a turn (`abortSignal`) leaves the session cleanly promptable, and a parked bridge that
  cannot be reattached is reported as a `warn` diagnostic and replaced instead of colliding on the
  port.
* The sandbox bootstrap assets are embedded in the module, so the adapter works when a bundler
  (a Next.js server bundle, a Vercel deployment) inlines it.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.