Skip to main content

thunc-watch

A live dashboard in the terminal for a program's thunc calls and agent runs. It shows:

  • calls in flight
  • retries, and why each reply was rejected
  • timings for each function
  • each agent's steps as they happen
  • the --profile report when the program ends

It's a compiled binary in its own package, so thunc itself stays pure Python with no dependencies. Install it as an extra:

pip install "thunc[watch]"

Then run your program through it:

thunc watch app.py                 # run a script and watch it
thunc watch -m examples.hello      # a module, as python -m does
thunc watch -- uv run app.py       # any command
thunc watch --agents               # agent runs in ./.thunc_agents, from any process
thunc watch --events events.jsonl  # a file another process writes with THUNC_EVENTS=events.jsonl
thunc watch --replay events.jsonl  # play back a saved events file, or one agent's session record
thunc watch --plain app.py         # one line per event, for CI logs and pipes

thunc watch runs scripts with the Python that thunc is installed in. The binary is also on your PATH as thunc-watch, which takes the same arguments. thunc watch --help lists the options.

Using it

Everything works with the mouse or the keyboard. Click a tab, or press 1–5 or ← →. Click a row to select it (or use ↑ ↓), and click it again (or press ⏎) to open it. esc goes back to where you opened it from. ? shows every key.

Screen What's on it Opening a row shows
Overview calls in flight, a table per function, running agents, results per second, recent events a function's calls, one call, or an agent run
Agents every run, and the selected run's steps, time split, changed files and denials
Calls recent calls, and each attempt of the selected one: the reply and why it was rejected
Summary the same tables as thunc run --profile. It opens by itself when the program ends a function's calls, or an agent run
Output what the program printed (while it runs, the dashboard owns the terminal)

The buttons at the bottom also have keys:

  • p Pause freezes the display. The program keeps running, and its events wait until you resume.
  • f Failures shows only retries, failures and denials. Filters show as tags at the top right; click a tag's ✕ to clear it.
  • ? Help lists every key.
  • q Quit asks first if the program is still running, because quitting stops it.

Ctrl+C stops the program, as it would in its own terminal.

When the dashboard closes, it prints the program's output and then the report. It exits with the program's exit code.

While the dashboard has the mouse, select text by holding Shift (Option on macOS) as you drag. Start it with --no-mouse to leave the mouse to the terminal.

Which agents it sees

Mode Agents shown
thunc watch app.py the program's own agent runs, from its events
thunc watch --agents [DIR] runs recorded in DIR, by default THUNC_AGENTS_DIR or ./.thunc_agents in the directory you start it in

Agent folders are found the same way thunc finds them, so a configure(agents_dir=...) in your code isn't visible here: pass the same folder as DIR.

In --agents mode, a run is live while its session record has no end and the process holding the agent's .lock is alive. A record whose process died partway through shows as interrupted. Session records are written to the second and don't time the model, so in this mode a step's time is the time between its line and the one before, and model and tool time aren't split.

How it gets its data

thunc writes events when THUNC_EVENTS names a file (see thunc/events.py). There's one JSON line per call start, model reply, call end, agent step and agent end. When thunc-watch runs a program, it sets THUNC_EVENTS to a temporary file and reads that file as it grows. Each line carries a format version, so a dashboard and a thunc of different releases notice if they don't match.

Inputs, replies and values are cut to 120-character previews. --capture sends them whole. They can contain personal data, as a trace can.

Developing

cargo test
cargo clippy --all-targets -- -D warnings
cargo fmt --check

thunc watch runs the binary named by THUNC_WATCH_BIN when that's set, so you can try a build from this folder with the thunc in your checkout:

cargo build && THUNC_WATCH_BIN=watch/target/debug/thunc-watch .venv/bin/python -m thunc watch app.py

To build the wheel that goes to PyPI: uvx maturin build --release (it lands in target/wheels/).

demo/demo_app.py runs the support-inbox functions and an agent against a scripted fake backend, with delays and some bad replies. It makes no model calls. Run it from the repository root:

cargo run --manifest-path watch/Cargo.toml -- --python .venv/bin/python watch/demo/demo_app.py

To see a screen as text (useful in bug reports and tests), record the events and draw every screen at a moment in the run:

watch/target/debug/thunc-watch --plain --save-events /tmp/e.jsonl --python .venv/bin/python watch/demo/demo_app.py
watch/target/debug/thunc-watch --replay /tmp/e.jsonl --dump-screens 110x34 --at 9

Releasing

thunc-watch has its own version (in Cargo.toml) and its own releases. Publishing a GitHub release tagged watch-vX.Y.Z runs .github/workflows/publish-watch.yml. It builds wheels for macOS, Linux (glibc and musl) and Windows, checks that the tag matches Cargo.toml, and publishes them to PyPI. thunc's own vX.Y.Z releases skip it. The extra in thunc's pyproject.toml pins the versions that speak the same events format, so release a new thunc-watch before a thunc that needs it.

Not in this version

  • Controls beyond watching. Stopping a single agent run, holding new calls, re-running a call, and approving agent actions live (ask: permissions) all need changes in thunc first.
  • --all. Agent runs from every project on the machine would need a registry of running runs.
  • Stopping on Windows. Ctrl+C and quitting end the program at once there, without the KeyboardInterrupt it gets on macOS and Linux.

Metadata

Release files for thunc-watch 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for thunc-watch 0.1.0
File Size Uploaded
thunc_watch-0.1.0.tar.gz 60.8 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for thunc-watch 0.1.0
File
thunc_watch-0.1.0-py3-none-win_amd64.whl Python 3 none Windows x86-64 Details
thunc_watch-0.1.0-py3-none-musllinux_1_2_x86_64.whl Python 3 none Linux musl 1.2+ x86-64 Details
thunc_watch-0.1.0-py3-none-musllinux_1_2_aarch64.whl Python 3 none Linux musl 1.2+ ARM64 Details
thunc_watch-0.1.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl Python 3 none Linux glibc 2.17+ x86-64 Details
thunc_watch-0.1.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl Python 3 none Linux glibc 2.17+ ARM64 Details
thunc_watch-0.1.0-py3-none-macosx_11_0_arm64.whl Python 3 none macOS 11.0+ ARM64 Details
thunc_watch-0.1.0-py3-none-macosx_10_12_x86_64.whl Python 3 none macOS 10.12+ x86-64 Details

Total release size: 4.4 MB

Release files / thunc_watch-0.1.0.tar.gz

Download URL thunc_watch-0.1.0.tar.gz
Size 60.8 kB
Tags Source
SHA-256 checksum
How to use checksums
83f042d08fa34ce948178eb99372f58e857277c8dba45257d5090d290516e5c3
BLAKE2b-256 checksum
How to use checksums
995e6ca7a50d98626829e576c01780e68571d7674300daac96d6c207bf354d93
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 7, 2026.

Transparency log

Release files / thunc_watch-0.1.0-py3-none-win_amd64.whl

Download URL thunc_watch-0.1.0-py3-none-win_amd64.whl
Size 575.5 kB
Tags Python 3 Windows x86-64
SHA-256 checksum
How to use checksums
bc6f75e8f9f880284a5e8cf769c6f916a1bcd6c40f83c03890a3fe5fea22f83b
BLAKE2b-256 checksum
How to use checksums
05ff951a8273844a9b170116eee9fed32c07a5f673c4c8c0d4ac401c2b1b3a42
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 7, 2026.

Transparency log

Release files / thunc_watch-0.1.0-py3-none-musllinux_1_2_x86_64.whl

Download URL thunc_watch-0.1.0-py3-none-musllinux_1_2_x86_64.whl
Size 695.2 kB
Tags Linux musl 1.2+ x86-64 Python 3
SHA-256 checksum
How to use checksums
9b30e24925011c42be7dcb6dea47f417132d18bbe931ad1fd526366253e6297c
BLAKE2b-256 checksum
How to use checksums
5e6ffb6e5b9b724bc9c3fa1233765cb616557c0ec6a145c3f5d14e9aab8ddcdf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 7, 2026.

Transparency log

Release files / thunc_watch-0.1.0-py3-none-musllinux_1_2_aarch64.whl

Download URL thunc_watch-0.1.0-py3-none-musllinux_1_2_aarch64.whl
Size 644.4 kB
Tags Linux musl 1.2+ ARM64 Python 3
SHA-256 checksum
How to use checksums
5a63c610d14fa3b300a61d161fd60b5bde8fffaacc7891377e9af254a30d2419
BLAKE2b-256 checksum
How to use checksums
eab47f9e5a5abb825899dcd260ad8492777b92e09db255036f7793871a4bfb05
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 7, 2026.

Transparency log

Release files / thunc_watch-0.1.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL thunc_watch-0.1.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 635.8 kB
Tags Linux glibc 2.17+ x86-64 Python 3
SHA-256 checksum
How to use checksums
e387f4c3b2adb0b09f3e214064296ee8125a052ff35f4c7ceedb5d30c4c6a788
BLAKE2b-256 checksum
How to use checksums
bce53de70be79f25988b8bdddeb91ffb05df56c8597b477775aef2ad251c9d15
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 7, 2026.

Transparency log

Release files / thunc_watch-0.1.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL thunc_watch-0.1.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 590.1 kB
Tags Linux glibc 2.17+ ARM64 Python 3
SHA-256 checksum
How to use checksums
e84d9fcecfb766981d861df25d4d82659ffc501b9ab560e69bd0d2b6c24f88de
BLAKE2b-256 checksum
How to use checksums
06521415fdd60bd65773b9f1bc48f5618df88f71eb29ede24c24736b2f4f07da
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 7, 2026.

Transparency log

Release files / thunc_watch-0.1.0-py3-none-macosx_11_0_arm64.whl

Download URL thunc_watch-0.1.0-py3-none-macosx_11_0_arm64.whl
Size 568.8 kB
Tags Python 3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
ededbf25707b1a4c2fc96ff5c337206d85d4e982707ef05d9adc6d7c139b13fa
BLAKE2b-256 checksum
How to use checksums
2129ea48d285c53867d95ce12610ff7472966365f5861044ceb0c0bc2100c08f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 7, 2026.

Transparency log

Release files / thunc_watch-0.1.0-py3-none-macosx_10_12_x86_64.whl

Download URL thunc_watch-0.1.0-py3-none-macosx_10_12_x86_64.whl
Size 615.6 kB
Tags Python 3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
59c7c9580d487eff317cdea5e5c0e8b6cd2a0dab095c004a45d49848af0ee8f6
BLAKE2b-256 checksum
How to use checksums
5479acd535aaf68561f0b70d00466ce3d36a8b17e586cf8e55ea104cb8d7a426
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 7, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

8 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page