← 2.1.2 Release

Claude Code 2.1.2 Feature Testing (2.1.2)

| # | Feature | Status | Key Finding |

Claude Code 2.1.2 is a plumbing release that adds agent_type propagation to SessionStart hooks, large-tool-output persistence to disk, and a FORCE_AUTOUPDATE_PLUGINS environment variable for decoupling plugin update cadence from core updates.

"2.1.2 is the 'no more excuses' release. large outputs don't truncate anymore - they persist. agents can know what kind of agent they are. small things, but they remove friction that was genuinely blocking workflows." -- OPUS-THOUGHTS.md

Epistemic status: changelog-derived and partially runtime-verified. Features 1 and 2 carry PASS status from automated tests run 2026-01-16 on version 2.1.9. Feature 3 (FORCE_AUTOUPDATE_PLUGINS) received CODE REVIEW status only -- runtime behavior was not directly exercised. Features 4-6 (Shift+Tab in plan mode, clickable file paths via OSC 8, image source path metadata) were queued for manual testing and remain unverified.

How It Works

agent_type in SessionStart: When a session is started with --agent <name>, the hook payload now includes an agent_type field set to the agent name. Without --agent, or when an invalid agent name is supplied, the field is silently absent. This enables hook scripts to branch on agent identity at session open.

Large tool outputs to disk: Any tool result exceeding roughly 900 KB (threshold is fuzzy, not a hard limit) is written to ~/.claude/projects/{project}/{session}/tool-results/toolu_XXXX.txt. The model receives a <persisted-output> wrapper containing the file path and a 2 KB inline preview. Files persist after session end with no automatic cleanup, functioning as an implicit cross-invocation cache. Estimated context savings: ~90% for large outputs.

FORCE_AUTOUPDATE_PLUGINS: An environment variable that decouples plugin update checks from core Claude Code auto-updates. Behavior was code-reviewed but not runtime-tested.

What the Tests Found

The agent_type test exposed two sharp edges: claude -p --agent produces inconsistent SessionStart hook firing (the hook fires in plain -p mode but not when --agent is also present), and invalid agent names fail silently rather than emitting an error.

The validated combo test (combo-01-large-output-fork) confirmed the primary intended pattern: a main session runs a command producing ~1 MB of output, the output is persisted automatically, a forked Explore-agent skill reads the file and returns a ~500-byte structured summary, and the main context remains lean.

Testing session-start hooks from within a running session requires spawning child processes and inspecting their artifacts -- you cannot observe your own SessionStart event.

Why It Matters

agent_type is load-bearing infrastructure for environment-aware agent personas: a SessionStart hook can now configure log level, set CI=true, or load specialized tool sets based solely on which named agent was invoked. Combined with custom agent definitions, this enables agents that self-configure at birth without manual flags. Large-output persistence removes a hard ceiling on data-heavy workflows (log analysis, large grep results, build artifacts) that previously forced repeated truncated re-queries.

Caveats

Silent validation on agent_type violates fail-fast discipline: a typo in --agent produces no warning and an absent field in the hook, making misconfiguration hard to diagnose. The claude -p --agent interaction is a confirmed rough edge. The large-output threshold (~900 KB in practice) is not documented as a precise byte boundary. Persisted files accumulate indefinitely; operators must manage disk hygiene manually.

4features tested
    Evidence & receipt
    • file2.1.2/SUMMARY.md
    ◇ ed25519 receipt
    idrelease_08f60a2bd217992f2bc4ea47
    alged25519
    pubkey9b87705613b1e2fd064d57fa75a6b679d2856ceafad6b1daa8f982493871b6dd
    siga954da930e9ba7d5ddc44aad9930a943027ca887959e44b7bd1fd846dbf3fe0b866c903e5eb735538a1ce309d96767451ebd329d5d37098764e06716502ef90c

    Signed with an ed25519 key held off the repo. Anyone can verify against the published public key; nobody without the secret key can forge it. Click verify: it recomputes the signature in your browser. The signature proves integrity and authorship of this exact content — not a third-party timestamp or that the underlying claim is objectively true. signedAt is when the @f3/attest pipeline ran, not when the work happened; the evidence refs carry the source dates.

    Connected