From tinyhat
Open the most recent Tinyhat skill-audit report (HTML) in the user's default browser, or answer a specific question about it from the persisted JSON — does NOT regenerate. Triggers on "open my latest skill audit", "show my latest tinyhat report", "open the last skill audit", "what did the skill audit say", "remind me what the audit said about X", "which skills are dormant", "open the skill audit report", "open tinyhat", or explicit /tinyhat:open invocations. If no report exists yet, hand off to /tinyhat:audit to create the first one.
How this skill is triggered — by the user, by Claude, or both
Slash command
/tinyhat:openThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Two jobs, decided by what the user actually asked for:
Two jobs, decided by what the user actually asked for:
${CLAUDE_PLUGIN_DATA}/latest/{snapshot,analysis}.json
and reply in chat. No browser.Never regenerate. That's /tinyhat:audit's job. The agent analysis
step is non-trivial and the user may not want to spend the turns.
Tinyhat writes under ${CLAUDE_PLUGIN_DATA} (the Claude-Code-sanctioned
per-plugin data directory). Older installs may still have artefacts
under the legacy ~/.claude/tinyhat/ — fall back to it only if the new
path is empty. The next write-capable Tinyhat command will migrate the
legacy directory forward.
Read the user's message. If it contains a specific question — "what did the audit say about dormant skills?", "which skills did I use this week?", "remind me what you recommended" — it's job 1: answer from JSON. The phrasing is asking for a fact, not a viewing experience.
If the message is vague-open — "open tinyhat", "show me the report", "/tinyhat:open" — it's job 2: open the HTML.
When in doubt, prefer job 1. Reading from JSON and answering inline keeps the user's attention in the terminal; opening a browser tab moves it away.
${CLAUDE_PLUGIN_DATA}/latest/,
fall back to ~/.claude/tinyhat/latest/ only if the first is empty.analysis.json and snapshot.json both exist in that
directory.
/tinyhat:audit. Stop.analysis.json
for editorial questions ("what stood out?", "what did you
recommend?") and snapshot.json for factual questions ("which
skills did I use?", "how many sessions?").run-stamp.txt). End with one line the
user can act on — usually a file:// link to the full HTML if
they want more detail.From your 2026-04-23 audit: 107 of 121 installed skills were dormant — the bulk (82) are plugin-bundled skills that came with marketplaces you installed. Open the full report at
file://${CLAUDE_PLUGIN_DATA}/latest/report.htmlto see them grouped by origin.
gather_snapshot.py. The JSONs on disk are the
source of truth for this skill.snapshot.inventory.${CLAUDE_PLUGIN_DATA}/latest/report.html exists.
~/.claude/tinyhat/latest/report.html./tinyhat:audit.
Stop here; don't try to open nothing.open "${CLAUDE_PLUGIN_DATA}/latest/report.html" # macOS
xdg-open "${CLAUDE_PLUGIN_DATA}/latest/report.html" # Linux
start "${CLAUDE_PLUGIN_DATA}/latest/report.html" # Windows
If unsure which OS, use Python's webbrowser module (cross-platform).
Pass the scripts dir as argv so the helper imports from the same
bundled tinyhat_paths as the rest of the plugin:
python3 -c 'import sys, webbrowser; sys.path.insert(0, sys.argv[1]); from tinyhat_paths import default_home_root; webbrowser.open((default_home_root() / "latest" / "report.html").as_uri())' "${CLAUDE_SKILL_DIR}/../../scripts"
${CLAUDE_PLUGIN_DATA}/latest/run-stamp.txt is enough:
"Opened your most recent skill-audit report from 2026-04-23. Use
/tinyhat:audit to refresh."Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub tinyhat-ai/tinyhat --plugin tinyhat