🐜 trailant
Ants don't remember paths. They lay a trail as they move, and follow the strongest trail back.
trailant does the same for your work. It doesn't hold state of its own — it reads the trails
your tools already leave behind (Claude Code, Codex CLI, and other AI coding sessions) and
reconstructs where you were, so you can answer:
- "Where was I?" — resume the right session, in the right project, without hunting through directories or scrollback.
- "What did I actually do today / this week?" — a reconstructed activity view, useful for timesheets, standups, or just your own sanity.
- "Am I pacing myself sustainably?" — a cadence view of your own velocity over time, so a burnout trajectory shows up as data instead of only as hindsight.
No cloud, no telemetry, no account. Everything lives in plain, append-only JSONL files on your own
machine, so you can cat them, grep them, or check them into your own private git repo if you
want history on your history.
Why not just use claude --resume / codex resume?
Those work fine within one vendor. trailant exists for the parts they don't cover: a single view
across multiple AI coding tools, a way to reconstruct what a session or day was actually about
after the fact, and a lightweight trend view over weeks — none of which any single vendor's CLI is
trying to solve.
Design principles
- Transparent over opaque. The source of truth is plain JSONL — the same format Claude Code and Codex already use for their own session logs. No database holds unique data.
- Cache, never store, derived state. Any local index (e.g. SQLite) is a disposable accelerator, rebuildable at any time from the JSONL. Delete it whenever — nothing is lost.
- Supervised, not autonomous.
trailantnever sends anything (a log, an email) without showing you the draft first. It's meant to make a human-in-the-loop workflow faster, not to replace the human in the loop. - Vendor-agnostic via adapters. Each AI coding tool gets a small adapter that normalizes its session format into one internal shape. Adding a new vendor is a self-contained addition.
See docs/technical-overview.md for the full design spec.
Mascot: the Trail Ant 🐜 — doesn't remember, just reads the trail.
Install
git clone https://github.com/semanticintent/trailant.git
cd trailant
pip install -e .
Quickstart
trailant reindex # walk configured source directories, build the trail index
trailant resume # list recent sessions across all vendors, ranked by recency
trailant today # reconstructed view of today's activity
trailant log "debugging the retry logic in the ingest job" # manual entry, no editor needed
trailant cadence # velocity trend vs. your own baseline
Configuration lives at ~/.trailant/config.yaml and is created with sane defaults on first run.
See config.example.yaml in this repo for the full set of options.
Status
Early / pre-alpha. The Claude Code and Codex adapters are functional against the documented
session formats; other vendors are not yet implemented. Interfaces may change. Contributions and
adapters for other tools (Cursor, Gemini CLI, etc.) are very welcome — see
CONTRIBUTING.md.
License
MIT — see LICENSE.
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 trailant-0.1.1.tar.gz.
File metadata
- Download URL: trailant-0.1.1.tar.gz
- Upload date:
- Size: 18.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
188980c4682625e9a44ec219c83f14107f896d3f0d741872377c76331e54ea82
|
|
| MD5 |
c201c637cadc14b90e337b8f671a2ac9
|
|
| BLAKE2b-256 |
3778f63a9186f378b686bac45e954c532ff1844d2248fa649d81d0dcfb3d68d1
|
Provenance
The following attestation bundles were made for trailant-0.1.1.tar.gz:
Publisher:
publish.yml on semanticintent/trailant
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
trailant-0.1.1.tar.gz -
Subject digest:
188980c4682625e9a44ec219c83f14107f896d3f0d741872377c76331e54ea82 - Sigstore transparency entry: 2567901813
- Sigstore integration time:
-
Permalink:
semanticintent/trailant@75ffaacd0544c6fa299df13bb7e9af1c1584e6df -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/semanticintent
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@75ffaacd0544c6fa299df13bb7e9af1c1584e6df -
Trigger Event:
release
-
Statement type:
File details
Details for the file trailant-0.1.1-py3-none-any.whl.
File metadata
- Download URL: trailant-0.1.1-py3-none-any.whl
- Upload date:
- Size: 18.0 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 |
5b3fe844f5b5a9a9e20753333cc17b37d100cb68472e24fbd76f163ccfb80c4c
|
|
| MD5 |
6f864e5507418ee4b2001825826cded1
|
|
| BLAKE2b-256 |
7c9786c24980e31e66baf6fc3d30fa66d4fb014f0f2c2aa1a4d0ed74caf1bc20
|
Provenance
The following attestation bundles were made for trailant-0.1.1-py3-none-any.whl:
Publisher:
publish.yml on semanticintent/trailant
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
trailant-0.1.1-py3-none-any.whl -
Subject digest:
5b3fe844f5b5a9a9e20753333cc17b37d100cb68472e24fbd76f163ccfb80c4c - Sigstore transparency entry: 2567901815
- Sigstore integration time:
-
Permalink:
semanticintent/trailant@75ffaacd0544c6fa299df13bb7e9af1c1584e6df -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/semanticintent
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@75ffaacd0544c6fa299df13bb7e9af1c1584e6df -
Trigger Event:
release
-
Statement type: