/tt
See which docs your AI actually discovers with local, zero-token telemetry. Subcommands; /tt status, /tt watch [demo|replay], /tt insights, /tt instructions, /tt suggestions, /tt badge, /tt gate, /tt note <text>, /tt doctor, /tt setup, /tt uninstall, /tt help.
Claude Code
$ npx -y skills add Hedde/trigger_tree --skill tt --agent claude-code
Codex
$ npx skills add Hedde/trigger_tree --skill tt -a codex -y
Cursor
$ npx skills add Hedde/trigger_tree --skill tt -a cursor -y
Gemini CLI
$ npx skills add Hedde/trigger_tree --skill tt -a gemini-cli -y
GitHub Copilot
$ npx skills add Hedde/trigger_tree --skill tt -a github-copilot -y
OpenCode
$ npx skills add Hedde/trigger_tree --skill tt -a opencode -y
Windsurf
$ npx skills add Hedde/trigger_tree --skill tt -a windsurf -y
SKILL.md
tt.SKILL.mdname: tt
description: See which docs your AI actually discovers with local, zero-token telemetry. Subcommands; /tt status, /tt watch [demo|replay], /tt insights, /tt instructions, /tt suggestions, /tt badge, /tt gate, /tt note <text>, /tt doctor, /tt setup, /tt uninstall, /tt help.
disable-model-invocation: true
allowed-tools: Bash, Read, Write, Artifact
arguments:
- subcommand
- option
/tt — trigger-tree
Execute the subcommand in `$1` (option/text in `$2` and beyond; `$ARGUMENTS` holds everything).
**Output discipline — the most important rule:** work silently. No plan up front, no intermediate status lines, no explanation of what you are about to do or just did. Execute the steps and show only the end result in the format specified per subcommand below. Report an error in exactly one line.
**Terminology — maturity model:** a file with zero reads is **untouched**, never "dead". Only when the stats JSON reports `maturity: "mature"` may untouched files be presented as **dead-path candidates**. During `cold-start` and `warming` the measurement is simply too young to judge.
Scripts live in `${CLAUDE_PLUGIN_ROOT}/scripts/`. Project data lives in `${CLAUDE_PROJECT_DIR}/.trigger-tree/`.
`$1` = "help" or empty
Show exactly this, nothing above or below it:
> **🌳 trigger-tree** — measures which documentation your agents actually use > > | Command | Does | > |---------|------| > | `/tt status` | Snapshot: current heat, lifetime reads, untouched paths | > | `/tt watch` | Live dashboard; recency colors, heat bars, injected context, privacy settings, and focus/hot/cold/A–Z/Z–A sorting | > | `/tt watch demo` | Dashboard with synthetic events (writes nothing) | > | `/tt watch replay` | Dashboard replaying the real history, accelerated | > | `/tt insights` | Analysis report: heat/cold map, untouched paths, hunting, trend + HTML | > | `/tt instructions` | Per-directive adherence, observability, and always-loaded cost | > | `/tt suggestions` | Max 5 prioritized, concrete router fixes — apply after confirmation | > | `/tt badge` | Write `.trigger-tree/badge.json`; immature data publishes only `measuring…` | > | `/tt note <text>` | Annotate the timeline (e.g. "sharpened UX router") — shows up in the trend | > | `/tt doctor` | Verify hooks, privacy, statusline, and telemetry with actionable fixes | > | `/tt setup [truncate\|hash\|off]` | Wire the project; choose recognizable previews or privacy-first prompt markers | > | `/tt gate` | Deterministic discoverability score; CI-ready gate with committed baseline | > | `/tt uninstall` | Remove statusline wiring; keep local telemetry for explicit deletion | > | `/tt help` | This overview | > > Telemetry runs automatically via hooks; the statusline shows the live session counter.
`$1` = "status"
1. Silently run `python3 "${CLAUDE_PLUGIN_ROOT}/scripts/tt-stats.py" --client claude` and read the JSON. 2. Show only this block:
> **🌳 trigger-tree status** _(period: <observed_from> → <observed_to>, <sessions> sessions)_ > <reads> reads · <scans> searches · <skill_uses> skill uses · <touched_current_files>/<evaluable_files> current files touched > **Health:** <health.grade> (<health.score>/100) — append "(provisional)" unless maturity is `mature` > > **Current heat:** exclude `state != "current"`, then sort `files` by `heat` descending and show the top 5 as > `path (h<heat>, <reads>× lifetime)`, comma-separated. > **Untouched:** <count of untouched> — followed by the maturity suffix: > - `cold-start`: "(measurement just started — nothing can be called dead yet)" > - `warming`: "(early signal — more sessions needed before judging)" > - `mature`: "(dead-path candidates — see /tt insights)"
`$1` = "watch"
1. Silently run `TT_CLIENT=claude "${CLAUDE_PLUGIN_ROOT}/scripts/tt-open.sh" $2` (`$2` empty, `demo` or `replay`). The explicit client marker is required so the detached dashboard can load Claude-specific maintenance tips. 2. Answer with exactly the confirmation line the script prints (it reports tmux split / new window / used terminal). If the script fails, report the cause in one line (on first use macOS may ask for Automation permission; mention that if the error points to it).
`$1` = "insights"
1. Silently run `python3 "${CLAUDE_PLUGIN_ROOT}/scripts/tt-stats.py" --client claude` and read the JSON. 2. If `maturity` is `cold-start`: answer in one line — `🌳 Not enough data yet (<reads> reads, <sessions> sessions) — check back after a few working sessions.` Stop. 3. Silently run `python3 "${CLAUDE_PLUGIN_ROOT}/scripts/tt-report.py" --client claude` — it writes `.trigger-tree/report.html` and prints the path. 4. Publish that file with the Artifact tool (favicon `🌳`, description "trigger-tree documentation telemetry report"). No Artifact tool available → use the local path as the link. 5. Show only the final report, with a hard maximum of 15 lines:
> **🌳 trigger-tree insights** _(period, #sessions, maturity)_ > > **Health** — grade + score with its three drivers, one line ("(provisional)" unless mature). > **Key figures** — reads, searches, skill uses, touched current files / evaluable files; > mention always-loaded files separately so the inventory equation reconciles. > **Agent personas** — when `agents.capture` is `on` and `agents.usage` is non-empty: > name the most and least used persona with counts. List `agents.never_invoked` as a > review prompt, never a removal recommendation, and say nothing about never-invoked when > `agents.never_invoked_status` is `awaiting-capture`. When `agents.capture` is `off` and > `agents.defined` is above zero, say instead that N personas are defined but usage is not > being recorded, and that `/tt setup` enables it; do not imply they are unused. > **Folder heat/cold map** — from `folders`: name the hottest folder by current > decayed `heat` (also state 30-day and lifetime reads) and the least-covered folder, > one line each. Cold means inactive now, not obsolete. > **Un
Read more
name: tt description: See which docs your AI actually discovers with local, zero-token telemetry. Subcommands; /tt status, /tt watch [demo|replay], /tt insights, /tt instructions, /tt suggestions, /tt badge, /tt gate, /tt note <text>, /tt doctor, /tt setup, /tt uninstall, /tt help. disable-model-invocation: true allowed-tools: Bash, Read, Write, Artifact arguments: - subcommand - option
/tt — trigger-tree
Execute the subcommand in `$1` (option/text in `$2` and beyond; `$ARGUMENTS` holds everything).
**Output discipline — the most important rule:** work silently. No plan up front, no intermediate status lines, no explanation of what you are about to do or just did. Execute the steps and show only the end result in the format specified per subcommand below. Report an error in exactly one line.
**Terminology — maturity model:** a file with zero reads is **untouched**, never "dead". Only when the stats JSON reports `maturity: "mature"` may untouched files be presented as **dead-path candidates**. During `cold-start` and `warming` the measurement is simply too young to judge.
Scripts live in `${CLAUDE_PLUGIN_ROOT}/scripts/`. Project data lives in `${CLAUDE_PROJECT_DIR}/.trigger-tree/`.
`$1` = "help" or empty
Show exactly this, nothing above or below it:
> **🌳 trigger-tree** — measures which documentation your agents actually use > > | Command | Does | > |---------|------| > | `/tt status` | Snapshot: current heat, lifetime reads, untouched paths | > | `/tt watch` | Live dashboard; recency colors, heat bars, injected context, privacy settings, and focus/hot/cold/A–Z/Z–A sorting | > | `/tt watch demo` | Dashboard with synthetic events (writes nothing) | > | `/tt watch replay` | Dashboard replaying the real history, accelerated | > | `/tt insights` | Analysis report: heat/cold map, untouched paths, hunting, trend + HTML | > | `/tt instructions` | Per-directive adherence, observability, and always-loaded cost | > | `/tt suggestions` | Max 5 prioritized, concrete router fixes — apply after confirmation | > | `/tt badge` | Write `.trigger-tree/badge.json`; immature data publishes only `measuring…` | > | `/tt note <text>` | Annotate the timeline (e.g. "sharpened UX router") — shows up in the trend | > | `/tt doctor` | Verify hooks, privacy, statusline, and telemetry with actionable fixes | > | `/tt setup [truncate\|hash\|off]` | Wire the project; choose recognizable previews or privacy-first prompt markers | > | `/tt gate` | Deterministic discoverability score; CI-ready gate with committed baseline | > | `/tt uninstall` | Remove statusline wiring; keep local telemetry for explicit deletion | > | `/tt help` | This overview | > > Telemetry runs automatically via hooks; the statusline shows the live session counter.
`$1` = "status"
1. Silently run `python3 "${CLAUDE_PLUGIN_ROOT}/scripts/tt-stats.py" --client claude` and read the JSON. 2. Show only this block:
> **🌳 trigger-tree status** _(period: <observed_from> → <observed_to>, <sessions> sessions)_ > <reads> reads · <scans> searches · <skill_uses> skill uses · <touched_current_files>/<evaluable_files> current files touched > **Health:** <health.grade> (<health.score>/100) — append "(provisional)" unless maturity is `mature` > > **Current heat:** exclude `state != "current"`, then sort `files` by `heat` descending and show the top 5 as > `path (h<heat>, <reads>× lifetime)`, comma-separated. > **Untouched:** <count of untouched> — followed by the maturity suffix: > - `cold-start`: "(measurement just started — nothing can be called dead yet)" > - `warming`: "(early signal — more sessions needed before judging)" > - `mature`: "(dead-path candidates — see /tt insights)"
`$1` = "watch"
1. Silently run `TT_CLIENT=claude "${CLAUDE_PLUGIN_ROOT}/scripts/tt-open.sh" $2` (`$2` empty, `demo` or `replay`). The explicit client marker is required so the detached dashboard can load Claude-specific maintenance tips. 2. Answer with exactly the confirmation line the script prints (it reports tmux split / new window / used terminal). If the script fails, report the cause in one line (on first use macOS may ask for Automation permission; mention that if the error points to it).
`$1` = "insights"
1. Silently run `python3 "${CLAUDE_PLUGIN_ROOT}/scripts/tt-stats.py" --client claude` and read the JSON. 2. If `maturity` is `cold-start`: answer in one line — `🌳 Not enough data yet (<reads> reads, <sessions> sessions) — check back after a few working sessions.` Stop. 3. Silently run `python3 "${CLAUDE_PLUGIN_ROOT}/scripts/tt-report.py" --client claude` — it writes `.trigger-tree/report.html` and prints the path. 4. Publish that file with the Artifact tool (favicon `🌳`, description "trigger-tree documentation telemetry report"). No Artifact tool available → use the local path as the link. 5. Show only the final report, with a hard maximum of 15 lines:
> **🌳 trigger-tree insights** _(period, #sessions, maturity)_ > > **Health** — grade + score with its three drivers, one line ("(provisional)" unless mature). > **Key figures** — reads, searches, skill uses, touched current files / evaluable files; > mention always-loaded files separately so the inventory equation reconciles. > **Agent personas** — when `agents.capture` is `on` and `agents.usage` is non-empty: > name the most and least used persona with counts. List `agents.never_invoked` as a > review prompt, never a removal recommendation, and say nothing about never-invoked when > `agents.never_invoked_status` is `awaiting-capture`. When `agents.capture` is `off` and > `agents.defined` is above zero, say instead that N personas are defined but usage is not > being recorded, and that `/tt setup` enables it; do not imply they are unused. > **Folder heat/cold map** — from `folders`: name the hottest folder by current > decayed `heat` (also state 30-day and lifetime reads) and the least-covered folder, > one line each. Cold means inactive now, not obsolete. > **Un
Gate documentation discovery in CI. Measure whether your project instructions change what agents do. Two concrete offers: CI gate — immediate. A deterministic, telemetry-free structural check fails a PR with the affected file and a suggested fix.
More skills from other plugins.
codebase-wiki
How to work in a Codebase Wiki project (the `codebase-wiki` starter pack): an agent-authored, source-grounded wiki of the…
academic-paper-reviewe…
Simulates academic peer review, evaluating papers across Originality, Methodology, Results, and Writing to provide Major/Minor…
Questions about tt.
- Which coding agents can use tt?
- tt installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.

