Repository navigation
Description
Before submitting
- I searched existing issues and did not find a duplicate.
- I included enough detail to reproduce or investigate the problem.
Area
apps/server
Steps to reproduce
Seen three times on 2026-10-27, plus one deliberate repro, on a Linux container whose cgroup caps tasks at 1000 (pids.max, threads included):
- Run T3 with the Claude provider in a container with a low task limit (ours:
pids.max1000, 48 visible CPUs). - Use a project whose
.claude/settings.jsonhas a heavyStophook (ours ran a monorepo-wideturbo run lintandturbo run typecheckin parallel, several hundred threads). - Start a Claude thread or a Claude
delegate_taskchild and let a turn finish. The Stop hook pushes the cgroup to its limit. Forks fail withEAGAIN, and the Claude Code process aborts. - Look at the thread.
The deliberate repro was a trivial claude-haiku-5-5 child task. Its reply arrived, and 14 s later, during the Stop hook, the run failed the same way.
I expect any abnormal Claude Code exit (for example kill -ABRT <claude pid> during a turn) to take the same path, but I haven't verified that shortcut.
Expected behavior
The thread's error item names the cause the server already has: Claude Code process terminated by signal SIGABRT.
When T3's own process spawns fail with EAGAIN at the same moment, a hint that the host ran out of process slots would point users to the real problem. T3 already runs t3-resource-monitor.
Actual behavior
The thread shows only Provider error: Provider turn failed. The cause appears only in ~/.t3/userdata/logs/boot-service.log.
In one thread the run also stayed running for about 6 minutes after the model's end_turn. Claude Code was blocked in the Stop hook, and nothing in the UI said so; then the turn failed with the same bare message.
On the next notification turn, T3 resumed the session into a new Claude Code process. That process aborted within about 3 ms of query.open, again shown only as "Provider turn failed."
Impact
Minor bug or occasional failure
Version or commit
0.1.4-nightly.20261027.3770 (service launcher 0.1.3-nightly.20261027.3754)
Environment
Linux 6.18 container (Railway), cgroup v2 pids.max 1000, Node 24, Claude Code 2.1.311 through the Claude Agent SDK, model claude-opus-5-5 (also claude-haiku-5-5)
Logs or stack traces
[17:19:49.612] WARN (#1142505): orchestration-v2.claude-query-stream-failed
cause: 'ClaudeAgentSdkQueryRunnerError: Claude Agent SDK query failed.
at ClaudeAdapterV2.startTurn (…/0.1.4-nightly.20261027.3770/t3:360437:171)
…
[cause]: Error: Claude Code process terminated by signal SIGABRT
at OR.getProcessExitError (…/t3:261049:15)'
[17:19:55.640] WARN (#1510541): thread branch pull request lookup failed
… [cause]: Error: spawn git EAGAIN
[17:19:57.297] WARN (#1510517): orchestration-v2.claude-mcp-servers-unavailable { servers: [ 't3-code' ] }
[17:19:57.300] WARN (#1510993): orchestration-v2.claude-query-stream-failed
… [cause]: Error: Claude Code process terminated by signal SIGABRTThe thread item at the same time:
type: error, title: "Provider error", text: "Provider turn failed."boot-service.log holds 11 terminated by signal SIGABRT failures across several days on this host. Each one showed only "Provider turn failed." in its thread.
Workaround
Grep boot-service.log for claude-query-stream-failed and check /sys/fs/cgroup/pids.events. We cut our Stop hook's thread use so the host stays under its limit.
Activity