turn.complete
A Claude Code settings key, read out of the shipped bundle. No mined inventory carries it: everything below comes from what this site has written about it.
Plugin hooks are limited in what they may rewrite, and cannot take over question prompts.
Not Anthropic's. This is the line from the earliest changelog entry here that named it, v2.1.242.
In the changelogs
16Releases whose published page names turn.complete.
-
v2.1.318
Some mod calls are refused in a
classic.SessionStarthook on pre-started sessionsIf a host started the session early, some mod calls made from a
classic.SessionStarthook are now refused instead of hangingfound in this entry's text, named in this entry
-
v2.1.299
Plugin hooks on turn start now count when Claude Code checks for turn hooks
A plugin hook listening for the start of a turn now counts as an active turn hook, alongside the step and complete hooks
found in this entry's text
-
v2.1.292
Plugin hook engine handles cancellation and partly applied answers differently
Plugin hook modules now report when their answer was only partly applied, and pass cancellation on to the work they do for a caller
found in this entry's text
-
v2.1.271
Turn-scoped tracking for plugin-originated prompt submissions
Prompts submitted by plugins are now tracked against the current conversation turn
found in this entry's text
-
v2.1.271
turn.complete now uses the actual turnId instead of generating a new one
Turn-completion reporting now uses the real turn ID instead of generating a new one
found in this entry's text
-
v2.1.269
Plugin hooks engine gains new event types: tool.check, config.set, config.describe, session.attach, session.detach, plugin.register
Plugin hooks can now react to tool-call dry-runs, config changes, and session attach/detach events.
found in this entry's text
-
v2.1.269
turn.complete telemetry only fires when a hook wants it
A new
turn.completehook reports a turn's final answer, refusal, usage and error state, but only when a plugin listens for itfound in this entry's text, named in this entry
-
v2.1.267
Compaction request now stamps usage onto turn.complete when available
The turn-complete event now includes a computed usage figure whenever one is available
found in this entry's text
-
v2.1.267
Plugin event schema gains a
usagefield on turn.step and turn.completePlugin turn.step and turn.complete events now include token usage details
found in this entry's text
-
v2.1.267
turn.step and turn.complete telemetry events now include usage data
Two internal telemetry events now include usage data like token counts when available
found in this entry's text
-
v2.1.265
New hook-timing guard message for classic hooks calling turn.complete-style APIs
New warning explains why calling certain APIs from most hooks would freeze, and tells you to use turn.complete instead
found in this entry's text, named in this entry
-
v2.1.265
Hook registry gains command.describe as a core hook event
Claude Code adds a new internal hook event called command.describe
found in this entry's text
-
v2.1.265
New
classic.*hook turn-block guidance distinguishes SessionStart/Setup/SessionEnd from other classic hooksClearer error guidance when a classic hook other than SessionStart/Setup/SessionEnd tries to block the turn
found in this entry's text, named in this entry
-
v2.1.242
Each hook event enforces what a plugin is allowed to change
Plugin hooks are limited in what they may rewrite, and cannot take over question prompts.
found in this entry's text
-
v2.1.242
Plugin modules with a
$API that can hook events and redraw the terminal UIPlugins can install code that intercepts tool calls and repaints parts of the terminal interface.
found in this entry's text
-
v2.1.242
Turns emit start and complete events, and a plugin can append to the final answer
Each turn now emits start and complete events a plugin module can hook and append text to.
found in this entry's text
First cited
4The earliest release whose published evidence quoted turn.complete was v2.1.265, 8 Sep 2026. That is the oldest release this project wrote about it, so it is a floor on the name's age and not the release that introduced it. It is not a presence reading: which builds carried the name is the table below.
Presence across releases
0The miner has never read a build containing this name. It is here because a changelog entry of ours names it, which is evidence that it existed and not evidence of which releases carried it. The inventory starts at v2.1.138 and everything older than that was never mined.
Read out of the published npm bundle release by release, and out of Anthropic's own documentation as this site captured it. Nothing on this page is a description anybody here wrote about what the settings key does. All settings keys.