Desktop GUI for opentine — browse, inspect, compare and fork agent runs
Project description
opentine-gui
Desktop GUI for opentine — visual management console built with Dear PyGui.
Install
pip install opentine-gui
tine-gui
Or from source with uv:
uv sync
uv run tine-gui
Requires Python 3.11+ and opentine 0.4.0
or newer (tested against 0.5.0), which pip installs for you.
Runs on Windows, macOS and Linux — lint and the whole test suite run on all three in CI.
Usage
tine-gui # reads last used dir, then ./.tine_runs
tine-gui path/to/runs # point at a different runs directory
Keyboard
| Key | Action |
|---|---|
Up / Down |
Move through the visible run list |
Esc |
Close a dialog, else clear the DAG filter, else clear the run search |
Ctrl+F |
Focus the run search box |
Ctrl+C |
Copy the selected run id |
Ctrl+R |
Force a reload of the runs directory |
Navigation keys stay out of the way while a text field has focus or a dialog is open.
Environment
| Variable | Effect |
|---|---|
OPENTINE_GUI_PREFS |
Preferences file location (default: the platform config dir, below) |
OPENTINE_GUI_SCALE |
UI scale factor, 0.5–3.0. Overrides DPI auto-detection |
OPENTINE_GUI_FONT |
Path to a .ttf/.ttc to render with. Set this for CJK text |
Preferences live in %APPDATA%\opentine-gui\ on Windows,
~/Library/Application Support/opentine-gui/ on macOS and
~/.config/opentine-gui/ on Linux; an explicit XDG_CONFIG_HOME wins on every
platform, matching opentine's own pricing-overlay convention.
The console picks up the display scale automatically (per-monitor DPI on
Windows, GDK_SCALE/QT_SCALE_FACTOR on Linux) and loads a system monospace
font so accented text, symbols and arrows in recorded output render properly.
CJK glyphs need a font that has them — point OPENTINE_GUI_FONT at e.g.
Noto Sans Mono CJK.
Features
- Run list with status colors (running / paused / completed / failed)
- Step DAG rendered as a real node editor (full multi-parent ancestry, per-kind colors, minimap)
- Run detail: model, status, cost (with per-model / per-kind attribution), tokens, budget vs incurred, duration, tags, refs/branches, format + migration provenance, integrity and signature status, prompt + system prompt, and fork lineage — origin, fork point, branch, and whether the fork act was unique or reproducible
- Step detail: inputs, outputs, tool info, error payloads, usage, billing, timestamp, cost
- Compare any two runs — common ancestor, steps only on each side, and per-field before/after deltas including cost, model and token usage
- DAG search with visual highlight over ids, kinds, tool names, payloads, and error text
- Live auto-refresh — picks up new
.tinefiles while agents run - Export a run as OpenTelemetry GenAI (OTLP/JSON) to ship a verified trace to whatever observability backend runs beside it — needs opentine 0.5.0+, and never touches the artifact
- Run actions: Pause / Resume / Fork-from-step / Fork-to-branch / Compare (writes back to the file each run was loaded from; pause and resume reload disk state first so a stale GUI snapshot cannot truncate or clobber what an agent wrote since — a small write race remains without file locking)
- File menu: Refresh, Change runs dir, Quit
- Corrupt
.tinefiles surfaced as load errors, not silently dropped; integrity-digest mismatches are flagged in the error panel and the run inspector - Lightweight local preferences for the last runs directory and run search filter
Reads the current open-source opentine .tine format
(format_version == 2, opentine ≥ 0.4.0, tested against 0.5.0) — the same content-addressed, integrity-checked
artifacts agents and CLI harnesses produce. Legacy format_version == 1 files are
auto-migrated on load (pause/resume re-save the file as v2; fork writes its new
artifact as v2 and leaves the source untouched). Try it with bundled
demo runs:
uv run python demo/seed.py # writes valid .tine fixtures into ./.tine_runs
uv run tine-gui
Layout
┌─ File Run ─────────────────────────────────────────────────────┐
│ ┌── Runs ──────┐ ┌── Run ──────────┐ ┌── Step DAG ────────────┐ │
│ │ a3f8 complete│ │ id, model, cost │ │ ┌─think─┐ ┌─tool──┐ │ │
│ │ b7c1 complete│ │ steps, duration │ │ │ plan │──▶│search │ │ │
│ │ c9d2 running │ │ prompt │ │ └───────┘ └───────┘ │ │
│ │ │ │ ── Step ── │ │ │ │
│ │ │ │ inputs/outputs │ │ │ │
│ └──────────────┘ └─────────────────┘ └────────────────────────┘ │
└──────────────────────────────────────────────────────────────────┘
Development
uv sync --extra dev
uv run pytest
uvx ruff check opentine_gui tests
Manual GUI QA coverage lives in docs/gui-qa.md.
License
Apache 2.0
Project details
Release history Release notifications | RSS feed
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 opentine_gui-0.2.0.tar.gz.
File metadata
- Download URL: opentine_gui-0.2.0.tar.gz
- Upload date:
- Size: 99.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
960c75d6383aaeb727fea8391015a64f89a22e1928487ccec81f342962d61b14
|
|
| MD5 |
48b4a0296e00f1ceb7f63b244aa79988
|
|
| BLAKE2b-256 |
5e690cbe2613607c7e2338bc8c436e2cd081a5f3160ef5285b79b9f0210c1752
|
Provenance
The following attestation bundles were made for opentine_gui-0.2.0.tar.gz:
Publisher:
publish.yml on 0xcircuitbreaker/opentine-gui
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
opentine_gui-0.2.0.tar.gz -
Subject digest:
960c75d6383aaeb727fea8391015a64f89a22e1928487ccec81f342962d61b14 - Sigstore transparency entry: 2314265794
- Sigstore integration time:
-
Permalink:
0xcircuitbreaker/opentine-gui@b26ded207822f31ea0e2178c75f0f956dab7dcbf -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/0xcircuitbreaker
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b26ded207822f31ea0e2178c75f0f956dab7dcbf -
Trigger Event:
push
-
Statement type:
File details
Details for the file opentine_gui-0.2.0-py3-none-any.whl.
File metadata
- Download URL: opentine_gui-0.2.0-py3-none-any.whl
- Upload date:
- Size: 37.6 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 |
8044817e213496acb79a39f92efca699ec7edd388d2c25d81021b9b67428ffdd
|
|
| MD5 |
87cb2d48d9bc7e2942977735140b4104
|
|
| BLAKE2b-256 |
65898853762397dd12540baf5d0c750b8b583155c14a6d231e8e1652ee2d1170
|
Provenance
The following attestation bundles were made for opentine_gui-0.2.0-py3-none-any.whl:
Publisher:
publish.yml on 0xcircuitbreaker/opentine-gui
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
opentine_gui-0.2.0-py3-none-any.whl -
Subject digest:
8044817e213496acb79a39f92efca699ec7edd388d2c25d81021b9b67428ffdd - Sigstore transparency entry: 2314265833
- Sigstore integration time:
-
Permalink:
0xcircuitbreaker/opentine-gui@b26ded207822f31ea0e2178c75f0f956dab7dcbf -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/0xcircuitbreaker
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b26ded207822f31ea0e2178c75f0f956dab7dcbf -
Trigger Event:
push
-
Statement type: