Source Intelligence

DisclaimerUnofficial, and not affiliated with Anthropic. Nearly all of this is read straight out of what ships: npm bundles, captured prompts, published docs. Anthropic's own notes go in verbatim, marked as theirs. The rest is my reading, and every entry carries the strings behind it. If one looks wrong, vote it down and say why.

All of v2.1.213 Home All releases olderv2.1.212 v2.1.214newer
Claude Code v2.1.213

SessionStart Hook: fork Source Value

Feature flag
tengu_copper_fox Off in both readings

The flag server returned off for the account this site reads and for the anonymous baseline. A reading of off cannot rule out a rollout these two readings sit outside of.

This account: off · anonymous baseline: off · compiled default in v2.1.213: not a boolean we can read

These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release.

Read once, for one account on one subscription tier, against v2.1.213. It isn't a statement about your account. What a flag value here can and cannot tell you

What

The source field on SessionStart hook events now accepts a new "fork" value, in addition to the existing "startup", "resume", "clear", and "compact".

Details
  • Fires when a session is loaded with forkSession: true — the code path activated when a skill carries context: "fork" or when the fork-subagent experiment (tengu_copper_fox / tengu_fork_subagent_enabled) spawns a subagent by resuming an existing conversation under a new session ID
  • The hook JSON payload is { hook_event_name: "SessionStart", source: "fork", agent_type: <string>, model: <string>, session_title: <string> } — same fields as "resume" events
  • Unlike "clear" and "compact", a "fork" event does propagate the session title returned by the hook (same behaviour as "startup" and "resume"): the title is stored so the forked session can be labelled distinctly
  • The new session ID passed in the hook is the forked child's fresh ID (not the parent's); the hook fires after the fork's conversation history is loaded but before the first turn runs
  • Skills with context: "fork" are excluded from being re-dispatched inside the fork they created, preventing recursive expansion
  • Hook output (additional context messages, reloadSkills, watchPaths) works identically to other SessionStart sources — hooks can inject context or block the fork by returning a blocking error
Evidence

Schema enum (search for "fork" in SessionStart hook schema alongside "startup", "resume", "clear", "compact"); fork dispatch (search for forkSession, x$e("fork", "fork" : "resume", aye = "fork", tengu_copper_fox)

Strings lifted out of the shipped bundle, so the claim above can be checked against them.

See this entry in the whole of v2.1.213 →