You'll noticeTier: how much it should matter to you
2Useful: my rating, 1 to 5
2Signal: worth watching, 1 to 5
Self-Hosted RunnersArea: what it touches
ImprovementsKind: in v2.1.309,
ImprovementsSection of the release
What
The self-hosted runner now recognises when a session child, the separate Claude Code process it starts for each session, begins a turn (a round of work) before it has finished initializing. It picks this up from either of two signals:
a message on the activity channel, the line of communication between the child and the runner
a startup marker the child prints to its error output
Before, the runner only treated startup as done once the child reported it had initialized.
Until the child has initialized, the --startup-timeout-min timer now counts from the child's last line on the activity channel. How the runner handles an idle session was also reworked: when no turn is open, it sends a turn-end or a deferred end. Setting the environment variable CLAUDE_RUNNER_DISABLE_TURN_BEGAN_BEFORE_INIT turns the new detection off.
Why
This changes when a self-hosted runner considers a session busy or stuck while it is starting, so a session that starts working early is less likely to be treated as hung.
What the documentation says
--startup-timeout-minSelf-hosted environments referencemodified, high confidence| `--startup-timeout-min <n>` | `SELF_HOSTED_RUNNER_STARTUP_TIMEOUT_MS` | `15` | Release a session slot if the child hasn't signaled on the [activity channel](/docs/en/self-hosted-environments-configuration.md#keep-stdin-and-file-descripto…see the edit
How sure we are
Two sources agreeTwo things we can check say the same as this entry.
Anthropic's documentation agrees--startup-timeout-min on Self-hosted environments reference
Anthropic's release notes agreeSelf-hosted runner: Fixed --startup-timeout-min stopping a session whose first prompt, such as /code-review, was still working in a…