Privacy Policy
July 29, 2026 · View on GitHub
Last updated: 2026-07-27
The short version
trigger-tree sends no data off your machine. Its local telemetry stays in your project directory, under your control. There are no network calls, external services, analytics vendors, or runtime dependencies.
What the plugin records, and where
trigger-tree's hooks write a local event log to $PROJECT/.trigger-tree/history.jsonl
inside the project you use it in:
- Documentation activity: relative paths read by Read, targeted by Glob/Grep,
explicitly passed as existing doc paths to Bash
rg/grep/findcommands, or consumed by successful Bashcat/head/tail/non-mutatingsed/awkcalls. Bash reader arguments are checked after shell variables, substitutions, loops, and globs resolve; only matching normalized paths are retained, with event metadata. - Skill invocations: the name of invoked skills.
- Optional bounded topics: with
TT_LOG_TOPICS='on', at most eight case-insensitive whole-word labels selected from the repository's own router and directive-manifest vocabulary. No prompt-derived free text is stored, and this works independently of the prompt mode. - Optional edits: paths matching
TT_EDIT_REGEX, normalized relative to the project, plus tool name and event metadata. External paths, file content, arguments, diffs, and patches are not stored. - Optional agent names:
TT_LOG_AGENTS='on'stores the persona name of a launched subagent (for examplebackend-engineer). The launch payload also carries the task prompt and description; trigger-tree never reads either. - Optional commands:
TT_LOG_COMMANDS='classified'stores only stable IDs of user-confirmed manifest patterns that matched.fulladditionally stores a bounded command line. Command output is never stored. Missing configuration means off. - Test and commit boundaries: test pass/fail status and an observable local
git commitcommand, used only to order deterministic probes; no test output or commit message is retained by those events. - Prompt markers: before a project runs setup, only a short hash is stored —
plugin installs are user-wide, and no repository records prompt text without
its own explicit choice. Configurable via
TT_LOG_PROMPTSin.trigger-tree/config.sh:hash(the fallback before setup) — a SHA-1 digest only, no text; a user-wide~/.trigger-tree/config.shcan setoffas the pre-setup default for every repository, and the project's own choice always winstruncate(recommended during setup) — first 200 characters, local and gitignoredoff— a bare marker, nothing else
- Notes: text you explicitly add with
/tt note.
The committed .trigger-tree/directives.json is not telemetry. It is
human-readable configuration containing instruction file paths and SHA-256 hashes,
source line references, optional directive text, and user-confirmed deterministic
probes. A model may propose this file only at authoring time; the user confirms it and
measurement thereafter uses no model tokens.
The optional HTML report (/tt insights) is generated locally to
.trigger-tree/report.html. If you choose to publish it as a Claude Artifact, that
is an explicit action you take through Claude Code — the plugin itself never uploads
anything.
What the plugin does NOT do
- No network requests of any kind (the code is python3 standard library only — you can audit every line in this repository).
- No telemetry to the plugin author, Anthropic, or anyone else.
- Telemetry hooks store paths and event metadata, never documentation file contents. Local analysis commands read selected documentation and instruction content to derive routing, import, protection, and maintenance signals; that content is never copied into telemetry or uploaded.
- With command capture off or classified, no shell command line is logged. Explicit
fullmode stores a bounded command line locally; command output, search output, and MCP responses are never logged. Runtime wrappers pass stdout, stderr, and exit status through unchanged. - No data leaves your machine.
Retention and deletion
You own the data. Delete .trigger-tree/ in your project at any time to remove all
recorded history. The directory is gitignored by the recommended setup, so it is not
committed or shared through version control.
Changes and contact
Changes to this policy are recorded in this file's git history. Questions: me@heddevanderheide.nl.