[FEATURE] Let Workflow (dynamic workflow) subagents render in tmux panes, like teammateMode: "tmux" does for agent teams
Status Open
Reported on v2.1.170
Maintainer reply None cached
Workaround ✓ Mentioned in thread ↓
Activity 4 comments · opened Jun 9, 2026
Problem
Agent teams already have first-class tmux visibility: with teammateMode: "tmux", every TeamCreate teammate gets its own visible pane — you can watch each agent think and intervene. This is excellent.
Workflow subagents (the dynamic-workflow orchestration engine) have no equivalent. They run as headless API loops with no TTY. The only views are the /workflows progress tree in the launching session and the raw per-agent agent-*.jsonl transcripts on disk.
Why it matters
- Large fan-outs are exactly where visibility matters most. Today I ran a ~70-agent repo review workflow; a network blip silently killed 26 agents (including 10 of 12 finders). Diagnosing that required manually grepping
agent-*.jsonlfiles forisApiErrorMessage. In a pane view the carnage would have been visible at a glance. - Users who built tmux-based multi-agent setups (iTerm2
tmux -CC+ agent teams in panes) get a confusing asymmetry: TeamCreate members are watchable, Workflow agents are invisible — even though workflows are the recommended tool for big orchestration. - Headless/VM use (systemd-managed tmux sessions running autonomous Claude) has no
/workflowsTUI at all; transcript files are the only signal.
Ask
Any of these would help, in descending order of preference:
- A
workflowAgentMode: "tmux"setting mirroringteammateMode: each running workflow agent gets a (read-only is fine) pane showing its streaming activity, panes opening/closing as agents spawn/finish. - A supported CLI command to live-tail a workflow agent's activity in human-readable form (e.g.
claude workflow tail <runId> [agentId]), so users can wire their own pane layouts. - At minimum: document the
agent-*.jsonltranscript layout as a stable interface for external watchers.
Environment
- Claude Code 2.1.170, macOS (darwin 25.2.0), iTerm2 + tmux -CC
- Also relevant on Linux/systemd headless setups
🤖 Filed via Claude Code on behalf of the user after a live debugging session of exactly this gap.
4 Comments
The gap between team agents (tmux pane visibility) and workflow subagents (headless API loops) is a real UX discontinuity. You get full observability when running agent teams, then lose it entirely the moment you switch to dynamic workflows — which is exactly the context where fan-out counts and silent failures matter most.
The 70-agent case you described illustrates the core problem: with team agents you would have seen 26 panes go dark. With workflow subagents you're grepping jsonl files after the fact.
One partial workaround some people use while waiting for first-class support: spawn workflow subagents in a separate tmux session explicitly via a
PreToolUsehook that intercepts theWorkflowtool call and passesteammateMode: "tmux"equivalent config before each agent() invocation. Brittle, but it does give you pane visibility. The real ask — letting the Workflow engine inherit the same tmux rendering path team agents use — is the right fix and worth the team's attention.If you're running this scale of workflow regularly, session management across that many concurrent agents is the kind of coordination problem that benefits from tooling built specifically for it. Worth keeping an eye on what's coming in the orchestration-layer space.
I also would like the option to view what the agent is doing in the workflow view for an agent. Kind of expected it to work that way... being able to talk to the agent would also be nice.
Supporting this, with a data point that widens it slightly and a finding that I think narrows the design space usefully.
The same gap exists for
Agent-tool subagents, not just Workflow agents. #34468 is that ask — it was closedNOT_PLANNED, but by the stale bot for inactivity rather than on merit, so this thread is the live one.Asks 2 and 3 are much closer than ask 1
I went looking for an interception point for subagent spawns and found there isn't one — but the data those two asks need already exists today.
SubagentStart/SubagentStophook payloads carry, per agent:Verified on 2.1.220 (Linux x86_64, native) against my own hook log —
agent_idis stable per agent across start and stop, andtranscript_pathpoints at the liveagent-*.jsonl. So aclaude workflow tail(ask 2), or documenting the transcript layout as a stable interface (ask 3), is largely a matter of blessing something already emitted. Anyone can build an external watcher on it right now; the reason to make it official is exactly the stability point in ask 3.Ask 1 can't reuse the
teammateModepath, and it's worth being explicit about whyTeammates get panes because a teammate is a separate OS process: Claude Code splits a pane and execs a new
claudebinary into it. That spawn is interceptable — there's an (undocumented)CLAUDE_CODE_TEAMMATE_COMMANDenv var that Claude Code execs in place of the binary, which is how tmux-based setups relocate the pane afterwards.Workflow agents and
Agent-tool subagents are in-process API loops. No binary invocation, no PTY, no pane. This matches the docs' own framing — teammates are "separate Claude Code instances", subagents "run within a single session" — and theagent-viewdocs say background agents "do not create tmux panes, windows, or pseudo-terminals".So ask 1 isn't "let workflow agents inherit the tmux rendering path"; that path doesn't apply to a thing with no PTY. It's either giving subagents real PTYs, or synthesising a pane and streaming into it — a genuinely bigger change than 2 or 3. Not an argument against it, just against the estimate.
One caveat for ask 3
agent_typeis not consistent across interfaces. An agent spawned assubagent_type: "fork"reportsagent_type: "fork"in hook payloads, but the same agent reportsagent_type: "general-purpose"in the statusline payload — so a watcher keyed on one can't be cross-referenced against the other. If transcripts and identifiers are going to be documented as a stable interface, that's worth reconciling first, otherwise ask 3 documents an inconsistency.This is exactly one of the problems I ran into when building Hackeroom.
I wanted multi-agent workflows to be observable without having to jump between individual Claude Code sessions or inspect JSONL transcripts after the fact.
My approach was to make the orchestration layer itself visual. Each team member is a real, independently running Claude Code session, and the UI represents the members/workflow state rather than trying to render the internal Agent/Workflow TUI.
For example:
Planner → Coder → Reviewer → Tester → Auditor
I can see which member is running, what role it's performing, its current state, and the handoffs between members from one place.
hacker room
I think there's an interesting distinction here between:
The second option seems particularly useful for external tooling because you don't necessarily need to reproduce the Claude Code TUI — you just need a stable stream of agent lifecycle/activity events.
I'd love to see an official
workflow tail/agent event stream API. That would make building external visualizers much less dependent on transcript internals.