carrier¶
carrier is a local command logger for developers. It records what you ran, where you ran it, when it started and finished, how long it took, whether it failed, captured output, and useful Git context.
It is designed for normal terminal work: local projects, long-running build/test commands, deploys, migrations, Docker tasks, zsh/bash, tmux, and terminal emulators such as Ghostty.
New here?
Start with Getting started. It walks through install, first run, inspection, and cleanup.
Try it in one command
Already installed?
Then inspect it:
Shell mode is alpha
carrier run is the stable path for precise stdout/stderr capture. carrier shell is useful for experiments and long interactive sessions, but depends on PTY output and shell hooks.
Common tasks¶
- Install carrier: Installation
- Record your first command: Getting started
- Learn every command and flag: Commands
- Build daily workflows with history, labels, export, rerun, and search: Workflows
- Script against JSON output and log paths: Power-user workflows
- Understand alpha shell mode: Shell mode
- Configure storage, redaction, notifications, and shell behavior: Configuration reference
- Check environment variables: Environment variables
- Understand SQLite and log files: Storage and state
- Debug local setup: run
carrier doctoror read Troubleshooting
Why use carrier?¶
- command history includes stdout, stderr, duration, exit code, cwd, Git branch, and Git dirty state
- child process exit codes are preserved, so
carrier runworks in scripts - search covers commands, cwd, and stored output snippets
- failed runs can be exported as Markdown or JSON for issues, pull requests, and chat threads
- original argv is stored separately from the display string, so
rerundoes not parse shell-looking text - logs stay local on disk and are redacted before persistence by default
- optional notifications help with slow builds without making every command noisy
Core concepts¶
A run is one recorded command¶
Every recorded command gets an integer ID. Use that ID with show, tail, export, label, and rerun.
Metadata lives in SQLite¶
Run metadata is stored in:
Output lives in log files¶
Command output is stored under:
carrier run stores stdout and stderr separately. carrier shell stores terminal output.
Logs are protected¶
Persisted logs are:
- redacted before writing to disk
- capped by
storage.max_output_mb - left on disk until you clean them
Terminal output still streams normally. Redaction and truncation only affect persisted logs.
Search is local¶
carrier search uses SQLite FTS for command/cwd/output matches, then falls back to substring matching for command and cwd text. No hosted service is involved.