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
The phone terminal is the weakest part of flue's mobile story. Forty columns, TUI redraws, a keyboard that fights the viewport, and a key bar standing in for Esc and arrows. It works, and it is the wrong shape: an agent session is a conversation, and a conversation on a phone wants to look like one.
Half of this exists. The agent transcripts are on disk, internal/agentstore indexes all three tools, and the agent viewer (#74) already renders a transcript as messages with paging and a follow mode. What is missing is the other half: knowing which transcript a live session is writing, and a way to reply. flue does not need a vendor API for any of it, because the pty is the input channel.
Happy Coder and Claude Code's own remote control show the shape that wins on a phone: messages, a composer, approve buttons. flue can have it across every machine and every agent, with the real terminal one tap away.
A view toggle on the session screen: Chat | Terminal. Mobile defaults to Chat when the session has an agent, desktop defaults to Terminal. The mobile tab strip from Multiplex inside a session: splits on desktop, tabs on mobile, and a double-Ctrl scratch terminal #73 is the natural home. Remember the choice per device. The terminal is never more than one tap away, and anything the chat view cannot render says so and offers the terminal.
Read. Reuse the viewer's paging and virtualized list. Follow needs to be faster than the viewer's 5 second poll: the daemon watches the transcript file and pushes new messages over the existing wire. Transcripts only land on completed messages, so "agent is working" comes from terminal activity and the hooks state, not from the file.
Why
The phone terminal is the weakest part of flue's mobile story. Forty columns, TUI redraws, a keyboard that fights the viewport, and a key bar standing in for Esc and arrows. It works, and it is the wrong shape: an agent session is a conversation, and a conversation on a phone wants to look like one.
Half of this exists. The agent transcripts are on disk,
internal/agentstoreindexes all three tools, and the agent viewer (#74) already renders a transcript as messages with paging and a follow mode. What is missing is the other half: knowing which transcript a live session is writing, and a way to reply. flue does not need a vendor API for any of it, because the pty is the input channel.Happy Coder and Claude Code's own remote control show the shape that wins on a phone: messages, a composer, approve buttons. flue can have it across every machine and every agent, with the real terminal one tap away.
Rough scope
internal/session/snapshot.go. It needs to be live:InfogainsagentandagentSession, kept current by the agent hooks issue (Agent hooks: let Claude Code, Codex and Pi tell flue when a session needs you, finished, or wants a permission #132) when hooks are installed and by cwd plus newest-transcript matching otherwise.AskUserQuestion, and plan approval render as tappable options. Two sources: the permission relay in the agent hooks issue (Agent hooks: let Claude Code, Codex and Pi tell flue when a session needs you, finished, or wants a permission #132) (exact, Claude first) and, as a fallback, the options parsed off the terminal screen. When neither can render a prompt, the view shows a "needs the terminal" chip that opens it.Notes
Where to look
web/src/routes/agent-viewer.tsx(paging, follow, virtualization, resume),web/src/agents/view.tsinternal/agentstore/read.go(pages),internal/agentstore/types.go(Message,Page)web/src/components/terminal.tsxandweb/src/components/key-bar.tsx(the input path and the mobile affordances this view replaces)web/src/sessions/pane-tree.tsand the Multiplex inside a session: splits on desktop, tabs on mobile, and a double-Ctrl scratch terminal #73 tab strip (where the toggle lives)internal/session/snapshot.go:215(SnapshotForShutdown, the one-shot agent guess)