Trails is designed around metadata over transcripts. Each stage derives the smallest bounded representation needed by the next stage.
Always stays on the originating Mac
- Raw coding-agent transcript bodies.
- Local transcript file paths.
- The original session files owned by Claude Code, Codex, omp, or pi.
- Parsing of those files.
Trails never sends transcript bodies or transcript paths to the hub.
One-Mac mode
The default installation keeps the complete application on one Mac. Its collector and canonical SQLite service communicate over loopback. No trails data needs to cross the network.
The service always binds to 127.0.0.1:7412. It does not listen on the LAN.
Optional multi-Mac mode
Each spoke sends normalized observations over a private Tailscale connection to the hub:
- source type;
- a session identifier used for idempotent ingestion;
- working directory and branch context;
- timestamps and event counts;
- the first prompt;
- minute-level activity;
- a bounded digest used for optional summarization.
The hub stores these observations in its local SQLite database. Tailscale transports the encrypted connection; it does not run trails or store trails data.
Tailscale Serve exposes the hub’s loopback service privately to authorized devices on the tailnet. Trails still does not open a LAN listener or public endpoint.
Reaches the browser
The web app receives the information needed to render the timeline and save your organization. It does not receive source-local session identifiers or bounded digests.
In local mode the browser connects to http://127.0.0.1:7412/. In multi-Mac mode an authorized tailnet device can use the private HTTPS URL configured by Tailscale Serve.
May reach the inference relay
Generated summaries are optional. When enabled, the hub sends bounded summary input through an authenticated Cloudflare Worker. Cloudflare does not hold canonical trails state and does not receive complete transcripts.
Current limits are:
- up to 9,000 characters for a session summary input;
- up to 12,000 characters for a day summary input.
If the relay is unavailable, timeline collection continues. Trails uses the session’s first prompt as fallback copy.