It doesn't, actually. Paneflow keeps only the current declaration and overwrites it on every change, and done or error go away once you type in the pane. There's no history of states. To rebuild what an agent did hours later, the agent's own transcript is the place to look, and Paneflow gets its path from the hooks.
Paneflow used to guess what each agent was doing by reading its screen. Since 0.17.7, the agent declares its own state in its terminal, through one escape sequence: OSC 7501.
The full story, with the code and the numbers: https://t.co/0NHhIvuOM5
Yes, it's the same check. With submit: true, write_pane confirms the turn started the same way paneflow send --submit does, so an agent that declares nothing gets started: null and reason: "no_signal". Without submit it doesn't wait for a turn. And if the target is waiting on a human, it won't write at all.
For a dead agent I don't need a timer: when the process exits or the shell prompt comes back, Paneflow drops working and blocked. An agent that hangs while still alive is the case I don't cover. OSC 7501 has no heartbeat, and I removed my own inactivity timer because a long turn isn't a fault. So an outside watchdog makes sense for that, with a timeout you pick per task.
@cloneisjun Exactly. An agent's state comes only from what it declares over OSC 7501; nothing is guessed from the screen. Until it declares something, Paneflow shows "No status" after 3 seconds rather than "Idle", so a silent agent doesn't pass for a completed turn.
@aakashH242 Depends on the id. The root status (no id) wins whenever there is one, so a child that sets its own id can't override the agent. A child that writes without an id shares the agent's slot, and the last write wins.
Paneflow already knows when an agent is working, waiting on you, or done. Under the hood, that's an integration for each agent, plus a system that reads the screen when an agent doesn't have one.
It works, but it's fragile. One Claude Code or Codex update can break detection. And for anything that isn't an agent, Paneflow can't let you know when a build fails or a deploy is waiting on a confirmation.
So I'm adding support for OSC 7501, a brand new spec from @mitchellh. With it, the program itself tells the terminal what it's doing.
The current integrations aren't going anywhere. But any tool that adopts the spec will show up in Paneflow without me writing a single line of code for it.
I'd rather bet on an open standard than keep piling up integrations. As a solo dev, that gets hard to maintain fast, and in the end it's my users who get a less stable app.
It's coming along great. Should ship in the next few days.
His full post if you're curious: https://t.co/PPSbfQiAJy
I love the idea of complementing the user's shell. Augmenting their experience rather than attempting to hijack it.
Paneflow 0.17.5 lets you insert a path to ✨anything, anywhere✨ with Ctrl+Shift+I: instant fuzzy matching, or plain old path navigation when you'd rather type it out.
Relative when it can be, quoted for whatever shell you're in.
As useful for your cat as your claude.
You can now close Paneflow without stopping your agents.
New in Paneflow: persistent sessions.
Your agents keep working in a dedicated host, separate from the UI. When you reopen the app, everything is exactly where you left it: every pane, its screen, its scrollback, your workspaces, and each agent's state.
And if the app crashes, your agents keep running.
It took several releases and dozens of tests on Linux, macOS, and Windows to get here. It's a major step in Paneflow's architecture, and it opens up new possibilities I can't wait to share.
Available now
Paneflow passed 10,000 downloads this weekend. I did not expect to get here this fast.
Thanks to everyone running their agents in parallel with it every day. And a special thanks to the people I talk with regularly about the project. Your feedback and ideas directly shape what I build, and they let me iterate fast and ship updates on a regular basis.
Lots more coming.
When I worked in Paneflow I usually had Zed open next to it, just to read code and move around the repo. Two apps open for that always felt wrong to me, both for the ergonomics and for the extra processes sitting there.
So I built an editor straight into Paneflow. I wanted something ultra minimal and fast, able to show files of several thousand lines without flinching. To give an order of magnitude: a 115,000-line file opens in 3ms, and a keystroke costs 0.5ms on the render thread. And on top of being fast, its genuinely nice to use: you see your additions and your edits, and you can even write code in it.
I'm not trying to replace Zed, JetBrains or VS Code, thats not the target. When you work intensively with coding agents you don't need a full IDE. You need something light to read the code and make small fixes.
Try it and tell me what you think. The GitHub is open if you want to contribute to where Paneflow goes next with your ideas. Link in the reply.
@mitchellh This is exactly what building Paneflow has been.
I picked the hardest version on purpose: native Rust, GPUI, three platforms, libghostty-vt, no team.
It can be daunting on day one, but with every commit the path looks less impossible.