Debugging a long-running process usually means one of two things: scrolling through a terminal that has already lost the output, or adding ad-hoc logging to a script and cleaning it up later. Neither is great. tull is a small Rust CLI that sits between your command and your terminal, capturing everything transparently.
The name stands for Teleport Your Logs with Love. The idea is simple - pipe anything into tull and it assigns the session a unique UUID, stores the stream locally under ~/.tull, and makes it browsable via a local Flask web server. Your stdout still works exactly as before - tull passes the stream through without interruption.
# install cargo install tull-rust # capture output of any command ps ax | tull # start the web server to browse logs tull web # follow a live log session tull follow <uuid> # list all saved sessions tull list
How it works
Pipe interception
Any data piped into tull is read from stdin. A unique UUID is generated for the session.
Local storage
The stream is written to a file under ~/.tull/ keyed by the UUID, while simultaneously being forwarded to stdout - so your terminal output is unchanged.
Background web server
A Flask server starts as a background process (if not already running), exposing simple REST endpoints to list and retrieve sessions by UUID.
Browse & follow
Open the TULL_WEB_URL in your browser to browse all sessions. Use tull follow for live tailing of an active session.
Sharing outside LAN
Since tull exposes a local web server, you can use ngrok or localtunnel to share a session URL with teammates - useful for quickly sharing long build or deployment logs without pasting walls of text.
Why Rust
The original motivation for writing this in Rust was to have a near-zero overhead pipe interceptor. A tool that sits in the middle of every command's output stream should not itself be a bottleneck. Rust's ownership model also makes the concurrent read-write to both stdout and the local file clean to reason about without reaching for locks or async runtimes.
The project is published on crates.io with over 2,600 downloads across two versions. It is a small tool, but one that reflects a recurring frustration turned into something reusable - which is the best reason to build anything.