Changelog
0.4.3 (2026-09-09)
- ci: publish to PyPI, and add jaato-eval to the release set (#923)
- feat(media): deliver binary media chunks, and know when a spoken turn ended (#824)
- chore: normalise line endings to LF, once, in one commit (#794) (#807)
- fix(tui,permission): make a permission prompt readable, and answerable only as chosen (#796)
- fix(tui,clarification): answer a batched clarification instead of hanging (#704) (#783)
- fix(providers): one prompt-token convention, converted at the seam (#758) (#763)
- fix(security): close the symlink escapes in file tools and search (#669) (#746)
- fix(daemon): refuse a relative path at the process boundary (#742) (#744)
- test(guards): a guard that cannot detect its own reversion now fails the build (#665)
- fix(memory): list_memory_tags reported an empty store while holding a raw queue (#664)
- fix(sdk): the breaking change needs a version that says so (#636)
- feat(sdk)!: create_session says which failure happened (#635)
- Thread spend_total_tokens to the client (UsageBreakdown)
- telemetry: emit user.id for Langfuse User Tracking
- telemetry: propagate session.id to child spans for Langfuse best practices
- telemetry: pricing-table cost on spans + dedicated Langfuse backend
- telemetry: stamp provider cost on LLM spans + OTLP protocol selection for Langfuse
- feat(reliability): compute is_error_result on tool.call_completed
- feat(tui): render human template names in tool tree (post-#136 follow-up) (#137)
- tui 0.4.2: pass client_type through to IPCRecoveryClient (SDK 0.12.0 compat)
- tui 0.4.1: restore Ctrl+B (toggle budget panel) keybinding
- tui 0.4.0: minor bump for reconnect helper print
- tui: print reconnect helper to terminal after detach
- tui: fix crash on multi-wave tool finalization (TypeError None - int)
- release: coordinated bump for gap 1-5 SDK release
- sdks: protocol-version compat (gap 5)
- sdks: subscribe API, profile picker, inline session spec, cost/usage refactor
- openers: action-dict shape with raw/diff actions and fallthrough
- Fix TUI startup crash: invalid 's-h' keybinding rejected by prompt_toolkit
- SDK + TUI parity: end_session / delete_session typed methods
- Add hide / show-hidden / gitignore-toggle bindings to the workspace panel
- SDK helpers: compute_cache_hit_percent + TUI adoption
- Add workspace panel keybinding to paste selection as @reference
- Add per-extension openers for workspace panel "open file" action
- TUI j-table: render at OutputBuffer width, not Rich's default 80
- Render / in the TUI; drop per-client branching on the server
- References: knowledge bundles with per-bundle sidecars + reconcile
- References: move sidecar row ordering to embedding_config.json
- Cache hit rate: divide by total input, not just new (uncached) input
- signal_completion: typed payloads from profile-declared schema
- template: rename writeFileFromTemplate → renderTemplateToFile
- Fix: remove stale icon_lines reference that crashed TUI event handler
- Bundle tool_id_mappings in SessionInfoEvent for guaranteed delivery
- ToolIdRegistryEvent: server pushes ID→name mapping to clients
- TUI: resolve hash-derived tool/category IDs in argument display
- Complete agent/profile split: SDK, TUI, and deprecation warning
- Remove gen-references profile from example directory
- Remove gen-references prompt template
- Rewrite gen-references profile and prompt for full catalog generation
- Add gen-references profile and prompt template
- Fix completed step results lost on plan structural changes
- Unify EventBus as single internal event backbone
Rich Client
Interactive TUI client for jaato with multi-agent support, streaming output, and rich formatting.
Installation
pip install jaato-tui
Overview
The rich client provides:
- Multi-agent conversation view with agent cycling
- Streaming output with real-time rendering
- Permission prompts for tool execution
- Plan panel for tracking agent plans
- Customizable keybindings and themes
Running
# Start server daemon first
.venv/bin/python -m server --ipc-socket /tmp/jaato.sock --daemon
# Connect TUI to running server
.venv/bin/python jaato-tui/rich_client.py --connect /tmp/jaato.sock
Commands
General
| Command | Description |
|---|---|
help |
Show help message and available commands |
reset |
Clear conversation history |
history |
Show full conversation history |
context |
Show context window usage |
export [file] |
Export session to YAML |
clear |
Clear output panel |
quit / exit |
Exit the client |
Model
| Command | Description |
|---|---|
model <name> |
Switch to a different model |
Tools
| Command | Description |
|---|---|
tools |
Manage tools available to the model |
tools list |
List all tools with enabled/disabled status |
tools enable <name> |
Enable a tool (or all) |
tools disable <name> |
Disable a tool (or all) |
Plugins
| Command | Description |
|---|---|
plugins |
List available plugins with status |
Sessions
| Command | Description |
|---|---|
save [name] |
Save current session |
resume [name] |
Resume a saved session |
sessions |
List saved sessions |
Plan
| Command | Description |
|---|---|
plan |
Show current plan status |
Screenshot
Capture TUI state as images. The command is intercepted client-side. By default, a system hint is sent to the model with the capture path.
| Command | Description |
|---|---|
screenshot |
Capture and send hint to model |
screenshot nosend |
Capture only, no hint to model |
screenshot format F |
Set output format (svg, png, html) |
screenshot auto |
Toggle auto-capture on turn end |
screenshot interval N |
Capture every N ms during streaming (0=off) |
screenshot help |
Show help |
Captures are saved to /tmp/jaato_vision/ by default. SVG is the default format. PNG requires cairosvg package.
Keybindings
| Command | Description |
|---|---|
keybindings |
Manage keyboard shortcuts |
keybindings list |
Show current keybinding configuration |
keybindings set <action> <key> |
Set a keybinding |
keybindings profile |
Show/switch terminal-specific profiles |
keybindings reload |
Reload keybindings from config files |
Authentication
Anthropic Claude:
| Command | Description |
|---|---|
anthropic-auth login |
Open browser for OAuth authentication |
anthropic-auth code <code> |
Complete login with authorization code |
anthropic-auth logout |
Clear stored OAuth tokens |
anthropic-auth status |
Show current authentication status |
Antigravity (Google IDE Backend):
| Command | Description |
|---|---|
antigravity-auth login |
Open browser for Google OAuth |
antigravity-auth code <code> |
Complete login with authorization code |
antigravity-auth logout |
Clear stored accounts |
antigravity-auth status |
Show current authentication status |
antigravity-auth accounts |
List all authenticated accounts |
Theme
| Command | Description |
|---|---|
theme |
Show current theme info |
theme <name> |
Switch theme (dark, light, high-contrast, dracula, or custom) |
theme reload |
Reload from config files |
Default Keybindings
| Action | Key | Description |
|---|---|---|
| Submit | Enter |
Send message |
| Newline | Escape Enter |
Insert newline |
| Clear input | Escape Escape |
Clear input buffer |
| Cancel | Ctrl-C |
Cancel current operation |
| Exit | Ctrl-D |
Exit the client |
| Scroll up | PageUp |
Scroll output up |
| Scroll down | PageDown |
Scroll output down |
| Scroll top | Home |
Scroll to top |
| Scroll bottom | End |
Scroll to bottom |
| Toggle plan | Ctrl-P |
Show/hide plan panel |
| Toggle tools | Ctrl-T |
Show/hide tools panel |
| Cycle agents | Ctrl-A |
Cycle through agents |
| Yank/copy | Ctrl-Y |
Copy to clipboard |
| View full | V |
View full content in pager |
Configuration
Keybindings
Keybindings can be configured via:
- Project config:
.jaato/keybindings.json - User config:
~/.jaato/keybindings.json - Environment variables:
JAATO_KEY_<ACTION>=<key>
Priority: Environment variables > Project config > User config > Defaults
Themes
The rich client supports customizable themes with automatic persistence.
Built-in Themes:
| Theme | Description |
|---|---|
dark |
Dark background with cyan/green accents (default) |
light |
Light background for bright terminals |
high-contrast |
High contrast for accessibility |
Custom themes can be defined in:
- Project:
.jaato/theme.json - User:
~/.jaato/theme.json
Theme selection is persisted to ~/.jaato/preferences.json.
Custom Theme Example:
{
"name": "my-theme",
"version": "1.0",
"colors": {
"primary": "#5fd7ff",
"secondary": "#87d787",
"success": "#5fd75f",
"warning": "#ffff5f",
"error": "#ff5f5f",
"muted": "#808080",
"background": "#1a1a1a",
"surface": "#333333",
"text": "#ffffff",
"text_muted": "#aaaaaa"
}
}
Environment Variables
| Variable | Purpose |
|---|---|
JAATO_THEME |
Override theme (temporary) |
JAATO_VISION_DIR |
Screenshot output directory (default: /tmp/jaato_vision) |
JAATO_VISION_FORMAT |
Screenshot format: svg (default), png, html |
JAATO_COPY_MECHANISM |
Clipboard provider: osc52 (default) |
JAATO_COPY_SOURCES |
Sources to copy: model (default), or model&user&tool |
File References
Reference files in prompts with @ prefix:
What's in @screenshot.png?
Review @src/main.py
Related
- Vision Capture Plugin - Screenshot implementation
- Architecture - Framework architecture
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file jaato_tui-0.4.3.tar.gz.
File metadata
- Download URL: jaato_tui-0.4.3.tar.gz
- Upload date:
- Size: 358.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e29ee38236319ef9f7221a6f86eed7eed16adce4c19ff03761e5bdb633fad6a6
|
|
| MD5 |
90234974ebcbf2acfee56afd7d95c0aa
|
|
| BLAKE2b-256 |
5f70c52757179eaf58cb9d99dd9f44dc1ada1771af3ca99e5facee092e260e8f
|
Provenance
The following attestation bundles were made for jaato_tui-0.4.3.tar.gz:
Publisher:
publish-pypi-tui.yml on Jaato-framework-and-examples/jaato
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
jaato_tui-0.4.3.tar.gz -
Subject digest:
e29ee38236319ef9f7221a6f86eed7eed16adce4c19ff03761e5bdb633fad6a6 - Sigstore transparency entry: 2772890460
- Sigstore integration time:
-
Permalink:
Jaato-framework-and-examples/jaato@16f999d93ef61b3b756f10ada8c613a2d81214db -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Jaato-framework-and-examples
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi-tui.yml@16f999d93ef61b3b756f10ada8c613a2d81214db -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file jaato_tui-0.4.3-py3-none-any.whl.
File metadata
- Download URL: jaato_tui-0.4.3-py3-none-any.whl
- Upload date:
- Size: 358.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c3cada21b04a3558c7e4aff3d2165b60131387e9ad654f3c3f56df7287a5ad74
|
|
| MD5 |
3d55a24fb1b635c9c7cc6b3a953f31e2
|
|
| BLAKE2b-256 |
5fcc979e139d0ec0e84c0fa28a74b863652affa9818535f7bb3a10dc89f68e18
|
Provenance
The following attestation bundles were made for jaato_tui-0.4.3-py3-none-any.whl:
Publisher:
publish-pypi-tui.yml on Jaato-framework-and-examples/jaato
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
jaato_tui-0.4.3-py3-none-any.whl -
Subject digest:
c3cada21b04a3558c7e4aff3d2165b60131387e9ad654f3c3f56df7287a5ad74 - Sigstore transparency entry: 2772890496
- Sigstore integration time:
-
Permalink:
Jaato-framework-and-examples/jaato@16f999d93ef61b3b756f10ada8c613a2d81214db -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Jaato-framework-and-examples
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi-tui.yml@16f999d93ef61b3b756f10ada8c613a2d81214db -
Trigger Event:
workflow_dispatch
-
Statement type: