diff --git a/docs/ai-chat/changelog.mdx b/docs/ai-chat/changelog.mdx
index 6a88697e33..52fed7c214 100644
--- a/docs/ai-chat/changelog.mdx
+++ b/docs/ai-chat/changelog.mdx
@@ -4,6 +4,72 @@ sidebarTitle: "Changelog"
description: "Pre-release updates for AI chat agents."
---
+
+
+## chat.agent reliability fixes
+
+A batch of fixes for edge cases around message delivery, stopping, and error handling:
+
+- **No more duplicate turns from mid-stream sends.** A user message sent while the agent was streaming could be delivered twice — once via steering and again on the next turn — running a duplicate turn. Delivery is now deduplicated.
+- **Idempotent input appends.** Sends to `session.in` carry an idempotency key, so a client retry after a network blip can't append the same message twice.
+- **Stop clears streaming state.** Stopping a generation now clears the session's streaming snapshot, so a page reload right after a stop no longer replays the stopped turn.
+- **`onTurnComplete` fires on errored turns.** When `run()` or a lifecycle hook throws, `onTurnComplete` now runs with `error` carrying the thrown value and `finishReason: "error"`, and the failed turn's user message is persisted so it isn't lost on the next run. Use this to mark the turn failed in your own storage. See [error handling](/ai-chat/error-handling#using-onturncomplete).
+
+ ```ts
+ onTurnComplete: async ({ chatId, uiMessages, stopped, error }) => {
+ await db.chat.update({
+ where: { id: chatId },
+ data: {
+ messages: uiMessages,
+ lastTurnStatus: error ? "errored" : stopped ? "stopped" : "ok",
+ },
+ });
+ },
+ ```
+- **Full tag sets on chat runs.** Runs triggered by chat sessions can now carry the full set of dashboard tags instead of being silently truncated.
+- **Stream hygiene for custom agents.** Manual `chat.writeTurnComplete()` callers now trim the output stream the way `chat.agent` does, sending a custom action no longer leaves a second stream reader running, and a long-lived `watch` subscription no longer grows its dedupe set without bound.
+
+## Continuation boots no longer stall
+
+Continuation runs (after a cancel, crash, or version upgrade) used to stall around 10 seconds before the first turn: finding the `session.in` resume cursor drained an SSE long-poll that always waited out its full 5 second inactivity window, twice per boot. The cursor is now found with a non-blocking records read, the boot reads run concurrently, and chat snapshots carry the cursor so subsequent boots skip the scan entirely.
+
+## chat.headStart: hydration and reasoning fixes
+
+Two fixes for the [Head Start](/ai-chat/fast-starts) handover:
+
+- With `hydrateMessages` registered, the warm route's step-1 partial now reaches the agent's accumulator, so `onTurnComplete` carries the full first turn, tool-call handovers resume from step 2 instead of re-running step 1, and the assistant `messageId` stays stable across the handover.
+- Extended-thinking models' step-1 reasoning now lands in the durable session history (and `onTurnComplete`) under the same assistant `messageId`, with provider metadata intact so Anthropic thinking signatures survive replays.
+
+## chat.createSession: stop and continuation fixes
+
+Stopping a generation no longer wedges the run: `turn.complete()` bare-awaited the AI SDK's `totalUsage` promise, which never settles after a stop-abort, so the loop hung inside the stopped turn and the chat couldn't take another message. It's now raced with a timeout, the same guard `chat.agent`'s turn loop uses.
+
+Continuation runs also no longer invoke the model with an empty prompt: a message-less continuation boot now waits for the next session input, and `turn.continuation` is preserved so your loop can seed stored history on the first turn:
+
+```ts
+for await (const turn of session) {
+ if (turn.continuation && turn.number === 0) {
+ const stored = await loadMessages(turn.chatId);
+ const incoming = turn.uiMessages.filter((m) => !stored.some((s) => s.id === m.id));
+ await turn.setMessages([...stored, ...incoming]);
+ }
+
+ // ... streamText + turn.complete as usual
+}
+```
+
+See [chat.createSession](/ai-chat/backend#chat-createsession).
+
+## trigger skills: agent skills for your coding assistant
+
+The CLI's new `trigger skills` command installs Trigger.dev agent skills — including the chat.agent authoring skill — into your coding assistant's native skills directory (Claude Code, Cursor, GitHub Copilot, and AGENTS-compatible tools such as Codex). The skills ship inside the CLI, versioned with it, and `trigger dev` offers to install them on first run. `trigger init` can now also set up the MCP server and skills as part of project scaffolding.
+
+```bash
+npx trigger.dev@4.5.0-rc.6 skills
+```
+
+
+
## AI SDK 7 support