Sereno
See which session is working, waiting or stuck

In one line
Sereno is a single-file Python terminal UI that reads the local histories of Claude Code, Codex, Gemini, Kilo and Antigravity. It separates sessions that are writing, running a command, waiting for a reply or already stopped, without sending data off the machine.
The problem
Sereno started with the problem of following several agent sessions at once. A live process does not tell you whether it is writing, inside a command, waiting for a reply or stopped.
The five CLIs record their activity in different formats. Sereno reads those local histories and returns comparable states without copying real prompts or depending on a remote service.
How it works
Histories stay where the tools wrote them
Sereno reads the local transcript queues of Claude Code, Codex, Gemini, Kilo and Antigravity. Each reader maps its format to the same states without uploading the content elsewhere.
The last useful event determines the state
A tool_use without its tool_result means the session is in a command. The stop_reason and later events separate writing, waiting and stopped.
The cache follows mtime
A transcript is only parsed again when its modification time changes. Refreshing stays cheap even with many sessions open.
No networking is enforced by a test
The application opens no connections. An AST test rejects imports from networking modules, so that guarantee does not rely on someone remembering a rule while editing the file.
The demo never touches real sessions
Demo mode uses synthetic histories in an isolated environment. The public capture shows the states without client names, prompts or machine data.
Where the bar sits
- 1 file Python 3.8+
- 0 dependencies outside the standard library
- 5 CLIs with comparable states
macOS and Linux. Python 3.8+, curses and tmux. MIT licence; installable via Homebrew. 100 merged PRs with CI on six combinations, 78 tests and 176 monitored mutants. The demo uses synthetic data.