Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add commands/jeongph/claude-telemetry/setupgit clone --depth 1 https://github.com/jeongph/claude-telemetryWhat it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00007 | $0.02783 |
| Opus 5 | $0.00003 | $0.01392 |
| Sonnet 5 | $0.00001 | $0.00557 |
| Haiku 4.5 | $0.00001 | $0.00278 |
Grade B, and why
setup scanned grade B with 2 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Reads agent configuration directoriesmediumAgent snooping
.claude/, .codex/, .gemini/ hold keys, settings and other credentials a mod has no legitimate need for.
1. Read `~/.claude/settings.json` and check the `language` field. Makes network callslowCapability
Not a fault in itself. Listed so you know the mod talks to something, and to what.
if curl -fsSL "${BASE}/${NAME}" -o "$TMP"; then How it starts
The opening of the file, as written. The whole thing — 285 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Status Line Interactive Setup
You are helping the user configure their Claude Code status line.
Execution Flow
Execute steps 1 → 2 → 3 → 4 → 5 → 6 → 7 sequentially. Do NOT skip steps. Do NOT combine steps.
Step 1: Detect & Confirm Language
-
Read
~/.claude/settings.jsonand check thelanguagefield. -
Map it to a code:
"한국어"→ ko,"English"→ en,"日本語"→ ja,"中文"→ zh. If the field is missing or does not match any mapping, treat the language as not detected. -
ALWAYS confirm with the user via AskUserQuestion — never silently auto-apply the detected value. Present the detected value so the user can keep it or pick another.
If a language was detected, list it FIRST with a
(detected)suffix, then the remaining three (substitute<detected>and the others accordingly):
{
"questions": [{
"question": "Detected language: <detected>. Keep it, or choose another for the status line?",
"header": "Language",
"multiSelect": false,
"options": [
{"label": "<detected> (detected)"},
{"label": "<other language 1>"},
{"label": "<other language 2>"},
{"label": "<other language 3>"}
]
}]
}
If nothing was detected, list all four in default order:
{
"questions": [{
"question": "Select your preferred language for the status line",
"header": "Language",
"multiSelect": false,
"options": [
{"label": "English"},
{"label": "한국어"},
{"label": "日本語"},
{"label": "中文"}
]
}]
}
- Map the selection to its code: "English" → en, "한국어" → ko, "日本語" → ja, "中文" → zh (ignore the
(detected)suffix when mapping). - Use this language for ALL user-facing text in the remaining steps. Do NOT infer language from conversation context.
Step 2: Download Go Binary
Run this EXACT script as a single Bash command. Do NOT split it into multiple commands:
PLUGIN_VER=$(sed -n 's/.*"version"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p' "${CLAUDE_PLUGIN_ROOT}/.claude-plugin/plugin.json" | head -1)
EXISTING_VER=$(~/.claude/statusline/bin/claude-telemetry --version 2>/dev/null | sed 's/^claude-telemetry v\{0,1\}//')
if [ "$EXISTING_VER" = "$PLUGIN_VER" ]; then
echo "UP_TO_DATE: v$EXISTING_VER"
else
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
ARCH=$(uname -m)
case "$ARCH" in
x86_64) ARCH="amd64" ;;
aarch64|arm64) ARCH="arm64" ;;
esac
NAME="claude-telemetry-${OS}-${ARCH}"
BASE="https://github.com/jeongph/claude-telemetry/releases/download/v${PLUGIN_VER}"
mkdir -p ~/.claude/statusline/bin
TMP=$(mktemp -p ~/.claude/statusline/bin)
echo "Downloading: ${BASE}/${NAME}"
if curl -fsSL "${BASE}/${NAME}" -o "$TMP"; then
SUM=$(curl -fsSL "${BASE}/checksums.txt" | awk -v n="$NAME" '$2 == n {print $1}')
if command -v sha256sum >/dev/null 2>&1; then ACTUAL=$(sha256sum "$TMP" | awk '{print $1}'); else ACTUAL=$(shasum -a 256 "$TMP" | awk '{print $1}'); fi
if [ -n "$SUM" ] && [ "$ACTUAL" = "$SUM" ]; then
chmod +x "$TMP" && mv -f "$TMP" ~/.claude/statusline/bin/claude-telemetry && \
~/.claude/statusline/bin/claude-telemetry --version && echo "SUCCESS"
else
rm -f "$TMP"; echo "CHECKSUM_FAILED"
fi
else
rm -f "$TMP"; echo "DOWNLOAD_FAILED"
fi
fi
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 2d ago First seen · 285 lines · 7 tokens per session scan B 55ca0b66e80d
setup is a command published in the GitHub repository jeongph/claude-telemetry (5 stars, last pushed 1mo ago), licensed MIT. It adds 7 tokens to every session and 2,783 once invoked, about $0.0000 per session on Opus 5. A static security scan graded it B with 2 findings (reads agent configuration directories, makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other commands, from other repositories
a11y-scan
Scan web application components for accessibility violations against WCAG guidelines.
aria-fix
Fix ARIA attributes and accessibility issues in web components.
report
Generate a project analytics report covering code quality, velocity, and health metrics.
test-endpoint
Test an API endpoint with various request scenarios and validate responses.
generate-changelog
Generate a changelog from git history, grouping commits by type and version.
annotate
Add inline documentation (JSDoc, docstrings, comments) to under-documented code.