--- name: claude-code-changelog-2-1-293 description: "Claude Code changelog 2.1.285–2.1.295 (to 2026-10-08) — items that touch AgentHub's hooks, plugins, resume, MCP, CLI, Workflow" metadata: node_type: memory type: reference originSessionId: f2f2cbeb-6ac1-4876-8b8a-f8dc6cd3a17b modified: 2026-10-09T03:58:51.151Z --- Source: https://code.claude.com/docs/en/changelog (re-read 2026-10-09). Installed on this box: 2.1.295 = latest (auto-updated). The local ~/.claude/cache/changelog.md is stale (stops at 2.1.139); always read the web page. AgentHub-relevant changes: - **2.1.295**: - Hooks get `onFailure: "block"` for command/HTTP hooks: a hook that fails, times out or exits oddly BLOCKS the action. AgentHub's own hooks must keep the default (fail-open), per CLAUDE.md "Hooks: keep fail-safe and non-blocking". Never set it in plugin.json or the installer. - **Program Status Protocol (OSC 7501)**: Claude Code reports working / waiting / done to the terminal. TESTED 2026-10-09: it cannot replace hooks and does not work through tmux; see [[osc7501-vs-hooks]]. - `claude -p` prints on stderr what it is waiting for when it stays open. - Subagents preload at most 32 skills. - claude.ai connectors default to MCP protocol 2026-07-28 (`MCP_PROTOCOL_NEGOTIATION=legacy` opts out). - Fixes: - Background sessions no longer inherit `FORCE_COLOR=3`. - Subagents in a linked worktree no longer see the parent's git branch/status. - An async SessionStart hook's context is no longer re-added on every resume. - `CLAUDE_ENV_FILE` vars now survive `/resume` and `/branch`. - `--tools`/`--restricted` now cover late-registered tools. - An Edit is no longer treated as a full read when the file changed without its mtime advancing. - Grep accepts `-l`/`-c`/`-r`. - **2.1.294**: `prompt`/`agent` hooks written as instructions ("Block commands that…") no longer let through what they should block, and Stop/SubagentStop prompt hooks are judged better. - **2.1.293**: `subagentStatusLine` payload gains `agentType`; mods' `classic.*` hooks no longer skipped during plugin-hooks-worker restart; `claude plugin test` gets `mock.session`. - **2.1.292**: `claude plugin install --marketplace ` (adds marketplace + installs in one step — could simplify the manual install command); stdio MCP negotiates protocol 2026-07-28 by default (`MCP_PROTOCOL_NEGOTIATION=legacy` opts out — relevant to `agenthub mcp`); `/loop` wakeups survive process restart. - **2.1.290**: `claude attach ` / `claude logs ` accept partial session names; plugin hook `tool.check` has `agentId`; permission rules re-applied after a PreToolUse hook rewrites input; `CLAUDE_CODE_DISABLE_ATTACHMENTS` no longer settable from repo `.claude/settings*.json`. - **2.1.289**: `agent.spawn` for teammates, one agent id across plugin hook events, idle/waiting in `$.agent.list()`; fixed stale local-folder-marketplace plugin copies and mods not loading in first session after upgrade. - **2.1.288**: resume/transcript-loss fixes; InstructionsLoaded hook now carries `agent_id`/`agent_type`; PreToolUse/PermissionRequest now BLOCK the call if matching fails or input isn't JSON-serializable; `claude project purge` → `claude purge` (old name still works). - **2.1.287**: **Claude Mods** (plugins modifying deeper behavior, function hooks); OTel `user_prompt` gains `prompt_text` (mask like `prompt`); MCP `alwaysLoad: false` defers all that server's tools behind tool search; "N hooks ran" no longer double-counts internal callbacks; SessionStart from synced plugins runs in cloud sessions. - **2.1.286**: `--bare` connects only CLI-named MCP servers, no system reminders, no background tasks; `/hooks` is one grouped list; plugin installs refuse npm sources that are git repos/folders. - **2.1.285**: `claude --desktop`; `claude plugin configure ` (+ `--values-stdin`); `claude plugin install --config .=`; managed `allowedProviders`; `CLAUDE_CODE_NONSTREAMING_TIMEOUT_RETRIES`. Nothing in this range changes `--session-id`, `--worktree`, `/reload-plugins` or tmux behavior that AgentHub relies on (see [[update-never-kills-panes]]). Useful for the user's own workflow (beyond AgentHub): - Skill evals (`learned:writing-agent-context` → `claude plugin eval`): 2.1.292 makes a failed `expect` in a test-registered hook, or a refused stub answer, FAIL `claude plugin test` instead of passing silently, so a suite that was green before may now go red for a real reason. - `claude purge` is the new name of `claude project purge`. - `/loop` and scheduled tasks now survive resume, compaction and process restart (2.1.290/2.1.292). - `claude --desktop` opens the current dir/session in the desktop app. - Workflow tool (2.1.295): - `scriptPath` is only accepted for a path the tool returned or a readable dir. The refusal now says to pass the script inline via `script`. - Workflow scripts are persisted under ~/.claude/projects//…; copy one into an added dir (not /tmp, see [[tmp-wiped-on-reboot]]) to resume it. - "May have been stopped by TaskStop" on resume was a false notice and is fixed. - Forked skills inside workflow subagents now return to the invoking agent. - `CLAUDE_CODE_RETRY_WATCHDOG_MAX_WAIT_MS` caps unattended 429/529 retry waits.