blemees-tui
Multi-session terminal chat for blemees-agentd — Claude Code + Codex agents,
side-by-side, in one process. Watch a session running in another terminal,
take ownership when you need to type, and never lose a transcript across
restarts.
Status: v0.1 alpha. The core loop is complete; see
docs/IMPLEMENTATION.mdfor what's done and what's next, anddocs/PARITY_BACKLOG.mdfor the curated parity backlog.
Why
Claude Code and Codex are great in their own terminal, but bouncing between
sessions, recovering from a closed shell, or watching a long-running
agent from a second machine all leave you stitching tabs together by hand.
blemees-tui is a thin presentation layer over blemees-agentd
that keeps every session live in one window:
- Multi-session sidebar with keyboard navigation (
Ctrl+1..0,Ctrl+Tab,:select N). - Watch mode — observe a session running anywhere
(
blemees-agentdis a Unix-socket daemon; SSH-forward it across machines) and take ownership with one click. - Streaming Markdown transcript with collapsible reasoning, syntax-highlighted Edit diffs, Write previews per language, and live token estimates.
- Persistent across restarts — sessions snapshot to disk after every turn; cold start paints from cache and only replays new daemon frames.
- Per-session drafts — typed text travels with the session, not the composer.
- First-class observability — footer chip, event-log overlay
(
Ctrl+E), raw-frame debug pane (Ctrl+D), persistent log file.
Install
# PyPI (when published)
pip install blemees-tui
# uv tool
uv tool install blemees-tui
# pipx
pipx install blemees-tui
# Homebrew (planned)
brew install blemees/tap/blemees-tui
Requires Python ≥ 3.11 and a running blemees-agentd ≥ 0.9.0 Unix socket.
Quickstart
# Auto-resolve the daemon socket (uses $BLEMEES_AGENTD_SOCKET, then
# $XDG_RUNTIME_DIR/blemees/agentd.sock, then /tmp/blemees-agentd-<uid>.sock)
blemees
# Or point explicitly:
blemees --socket /path/to/agentd.sock
| Action | Keys |
|---|---|
| New session | Ctrl+N |
| Attach to existing (watch) | Ctrl+T |
| Switch session | F1–F12, Ctrl+Tab |
| Switch to session ≥ 13 | :select 13 |
| Close current session | Ctrl+W |
| Delete current session | Ctrl+Shift+W |
| Interrupt turn | Ctrl+C |
| Force reconnect | Ctrl+R |
| Event log overlay | Ctrl+E |
| Debug pane (raw frames) | Ctrl+D |
| Save transcript (Markdown) | Ctrl+S |
| Toggle reasoning visibility | t |
| Help overlay | ? |
| Quit | q |
/foo slash commands forward verbatim to the active backend (so Claude
Code skills and Codex slash commands stay reachable). :foo is reserved
for TUI commands — see :help.
Configuration
$XDG_CONFIG_HOME/blemees/tui.toml (or ~/.config/blemees/tui.toml):
[connection]
socket = "" # empty = auto-resolve
[defaults]
backend = "" # empty = first advertised by hello_ack
claude_model = "sonnet"
codex_model = "gpt-5.2-codex"
claude_permission_mode = "default"
codex_sandbox = "workspace-write"
[ui]
theme = "dark" # dark | light
sidebar_width = 28
show_thinking = false
markdown_code_theme = "monokai"
[logging]
level = "info" # debug | info | warn | error
keep_days = 7
CLI overrides:
blemees --socket /tmp/blemees-agentd.sock --log-level debug
Env-var overrides: BLEMEES_AGENTD_SOCKET, BLEMEES_TUI_THEME,
BLEMEES_TUI_LOG_LEVEL, BLEMEES_TUI_BACKEND.
Persistence
Files under $XDG_STATE_HOME/blemees/tui/:
sessions.json— index of live + watching sessions.history.json— bounded ring (200 entries) of closed-but-remembered sessions.snapshots/<id>.json— full per-session in-memory state cached to disk so a TUI restart skips the full daemon replay.transcripts/—Ctrl+SMarkdown exports.tui.log— rotating log (weekly, 7 keep).
Develop
pip install -e '.[dev]'
pytest # 85 tests
ruff check .
ruff format --check .
See CONTRIBUTING.md for the workflow.
Docs
docs/SPEC.md— full v0.1 contract (state model, protocol, persistence, observability).docs/IMPLEMENTATION.md— milestone plan and what's shipped.docs/PARITY_BACKLOG.md— curated Claude Code feature backlog with priorities.
License
MIT — see LICENSE.
Metadata
Release files for blemees-tui 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| blemees_tui-0.1.0.tar.gz | 79.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| blemees_tui-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 151.2 kB
Release files / blemees_tui-0.1.0.tar.gz
| Download URL | blemees_tui-0.1.0.tar.gz |
|---|---|
| Size | 79.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
48088b35ab4ed44c7600777e552c8dc5fda9569d8cefb3a54a71e6092e998df0
|
|
BLAKE2b-256 checksum How to use checksums |
0b4d567bcfc789e150c5daef8026566439b824a39be478db71dcc81773b86380
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 6, 2026.
Transparency logRelease files / blemees_tui-0.1.0-py3-none-any.whl
| Download URL | blemees_tui-0.1.0-py3-none-any.whl |
|---|---|
| Size | 71.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4441d74c857c1c8091f3a31b55762e13d6e88337c6f4fc4c680fef3ee141d5ed
|
|
BLAKE2b-256 checksum How to use checksums |
56d5a4e229305cba80895b071647e4ddb73d060144c344f2ab9efc1bb61ef7dc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 6, 2026.
Transparency log