Skip to main content
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, @cognition-ai/ai-sdk, @cognition-ai/cloudflare-agents, @cognition-ai/harness-devin. The examples repository is tagged v<version> for each release.
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.
  • 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 is at v0.0.1-beta.7.Published packages: @cognition-ai/sdk, @cognition-ai/ai-sdk, @cognition-ai/cloudflare-agents, @cognition-ai/harness-devin.
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 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.
  • 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 programs accept --acp-v1. The other examples need no code changes; the examples repository is at v0.0.1-beta.6.Published packages: @cognition-ai/sdk, @cognition-ai/ai-sdk, @cognition-ai/cloudflare-agents, @cognition-ai/harness-devin.
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 and cloud MCP configuration. Cloud tool availability depends on the ACP endpoint.Published packages: @cognition-ai/sdk, @cognition-ai/ai-sdk, @cognition-ai/cloudflare-agents, @cognition-ai/harness-devin.
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.
  • 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 is at v0.0.1-beta.4. The examples need no code changes for this release.
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.
  • 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.
  • 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.
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, 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.New: @cognition-ai/cloudflare-agents — a Devin cloud session behind a Cloudflare 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 and the Cloudflare Agents chat example.@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.
  • 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.
  • ToolCall.detail gains computer_use — Devin’s browser and desktop automation on the cloud, with typed actions — which was other before. See Streaming events.
  • 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.
@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 is at v0.0.1-beta.2 with a new Cloudflare Agents chat; the quickstart prints computer_use tool calls; session-board no longer needs ws. See which examples need beta.2.
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.@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.
  • 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.
  • 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 SessionEvents (status, activity, lifecycle, typing, pull_request, …). session.meta exposes the latest session snapshot, and listSessions() results carry typed _meta. See Watching sessions.
  • 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.
  • 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.