You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[Bug]: Shells launched with run_in_background:true are invisible — no timeline row, excluded from task panel (agentKind filter) #9107
When a Claude Code session starts a shell command with run_in_background: true from the first moment (as opposed to a foreground command that T3 auto-moves to background at its timeout), the running process has no visible representation anywhere in the UI — no live shell row in the thread timeline and no entry in the task panel — even while the process is alive and the backend has recorded it.
The two launch shapes end up with very different visibility:
Foreground → auto-backgrounded at timeout: the timeline keeps a live "running" shell row. Visible. ✓
Backgrounded from the start: the tool call completes in ~0.1 s (it just returns the task id), so the timeline row finishes immediately, and the task panel never shows it either — from reading the bundled client code, the panel's task tracker skips activities whose agentKind is not agent, which excludes local_bash background tasks.
So a long-running background watcher/monitor process is effectively invisible. In our case the human operator concluded a PR watcher wasn't running (and lost trust in the agent's "watcher armed" claims) while the process was provably alive — the DB had the task.started activity with no completion, but nothing on screen reflected it.
Steps to reproduce
In a T3 thread, have the agent run any long-lived command via the Bash tool with run_in_background: true (e.g. sleep 600).
Observe: the tool call returns immediately with a task id; after that there is no UI element showing a running background shell.
Compare: run the same command foreground with a 150 s timeout; when T3 moves it to background, a live row remains visible until it exits.
Expected
Both launch shapes should produce the same live "background shell running" indicator (timeline row and/or task panel entry) until the process exits.
Version
T3 Code desktop 0.0.37 (macOS, Apple Silicon), Claude Code provider.
Adding to this now that the Monitoring status exists. It answers "is anything still running?" but not "what is it?"
When a thread settles and only watch loops are left, the composer banner shows Monitoring and a Stop button, with no title. Monitors are kept off the Agents panel, so the only way to see what's being watched is to scroll back to the turn that launched it. With more than one watcher running, there's no way to tell them apart.
The client already has this data. The watcher's description is persisted as title on its task.started activity (ProviderRuntimeIngestion.ts#L676-L699). Real rows look like "title": "Watch v0.12.0 release deploy" or "title": "Wait for Deploy Backend run". It just never reaches the banner:
Ask: show the active watcher titles in the banner, e.g. "Monitoring · Watch v0.12.0 release deploy", with a count and a list when there are several. Mobile is already getting the Monitoring status (#10372, #13803) and could show the same titles.
+1 to @carTloyal123's ask (titles + count + list — and #13949 looks like it covers that part). Two things beyond it, which the Claude Code CLI already has and which I miss most after moving to T3 Code:
In the CLI, the status line shows · 3 shells ·; selecting it opens:
Background
3 active shells
❯ python server.py --port 8770 (running)
jupyter lab --port 8888 (running)
gh pr checks --watch (running)
↑/↓ to select · Enter to view · x to stop · Esc to close
Read-only output view (Enter) — the tail of that shell's output, so I can check a dev server or watcher is healthy without asking the agent.
Stop a single shell (x) — today the composer's Stop is all-or-nothing, and with several watchers per thread I usually want to kill just one.
Hoping the new orchestrator (#2829) can expose per-task output and per-task stop, even if the UI comes later.
Activity
carTloyal123 commentedon Sep 27, 2026
Adding to this now that the Monitoring status exists. It answers "is anything still running?" but not "what is it?"
When a thread settles and only watch loops are left, the composer banner shows Monitoring and a Stop button, with no title. Monitors are kept off the Agents panel, so the only way to see what's being watched is to scroll back to the turn that launched it. With more than one watcher running, there's no way to tell them apart.
The client already has this data. The watcher's description is persisted as
titleon itstask.startedactivity (ProviderRuntimeIngestion.ts#L676-L699). Real rows look like"title": "Watch v0.12.0 release deploy"or"title": "Wait for Deploy Backend run". It just never reaches the banner:backgroundLiveness: "working" | "monitoring"(orchestration.ts#L928)."Monitoring"(ChatView.tsx#L6295-L6300).Ask: show the active watcher titles in the banner, e.g. "Monitoring · Watch v0.12.0 release deploy", with a count and a list when there are several. Mobile is already getting the Monitoring status (#10372, #13803) and could show the same titles.
drnoar commentedon Sep 28, 2026
+1 to @carTloyal123's ask (titles + count + list — and #13949 looks like it covers that part). Two things beyond it, which the Claude Code CLI already has and which I miss most after moving to T3 Code:
In the CLI, the status line shows
· 3 shells ·; selecting it opens:Enter) — the tail of that shell's output, so I can check a dev server or watcher is healthy without asking the agent.x) — today the composer's Stop is all-or-nothing, and with several watchers per thread I usually want to kill just one.Hoping the new orchestrator (#2829) can expose per-task output and per-task stop, even if the UI comes later.
juliusmarminge commentedon Sep 29, 2026
Fixed by #14191 — closing as leftover.