关于 token-dashboard
token-dashboard 是用于查询会话成本并打开 Token Optimizer 仪表板的 Skill。它从会话记录读取成本数据,并在生成的仪表板中呈现上下文用量、质量、历史记录和技能。
主要功能
- 01按用户描述查询会话成本
- 02说明成本依据及部分结果
- 03收集会话数据
- 04生成并打开用量仪表板
适用场景
- 01查询指定会话的估算成本
- 02可视化查看上下文用量和会话历史
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ alexgreensh/ token-optimizer --skill token-dashboard安装后在 Claude Code 中输入/token-dashboard确认已加载。
详细介绍
Token Optimizer Dashboard
根据用户自己的说法,回答一次会话的费用,并打开一个最新的仪表板,显示上下文用量、质量、会话历史记录和技能。只有当用户要求查看仪表板时才打开它;询问费用绝不会打开浏览器。
Instructions
- 解析运行环境和 measure.py 路径:
RUNTIME="${TOKEN_OPTIMIZER_RUNTIME:-}"
if [ -z "$RUNTIME" ]; then
if [ -n "$CLAUDE_PLUGIN_ROOT" ] || [ -n "$CLAUDE_PLUGIN_DATA" ]; then
RUNTIME="claude"
elif [ -n "$OPENCODE" ] || [ -n "$OPENCODE_BIN" ] || [ -n "$OPENCODE_CONFIG_DIR" ] || [ -n "$OPENCODE_CONFIG" ]; then
RUNTIME="opencode"
elif [ -n "$CODEX_HOME" ]; then
RUNTIME="codex"
# Explicit config-dir env of another harness: same tier as Python's
# detect_runtime() (above CLAUDECODE, which every Claude Code child inherits).
elif [ -n "$HERMES_HOME" ]; then
RUNTIME="hermes"
elif [ -n "$COPILOT_HOME" ] || [ -n "$TOKEN_OPTIMIZER_COPILOT_HOME" ]; then
RUNTIME="copilot"
elif [ -n "$TOKEN_OPTIMIZER_CURSOR_HOME" ]; then
RUNTIME="cursor"
elif [ -n "$TOKEN_OPTIMIZER_ANTIGRAVITY_HOME" ]; then
RUNTIME="antigravity"
elif [ -n "$GROK_HOME" ] || [ -n "$TOKEN_OPTIMIZER_GROK_HOME" ]; then
RUNTIME="grok"
elif [ -n "$CLAUDECODE" ] || [ -n "$CLAUDE_CODE_ENTRYPOINT" ] || [ -n "$CLAUDE_CODE_SESSION_ID" ]; then
RUNTIME="claude"
elif [ -d "$HOME/.config/opencode" ] && [ ! -d "$HOME/.codex" ]; then
RUNTIME="opencode"
elif [ -d "$HOME/.codex" ]; then
RUNTIME="codex"
else
RUNTIME="claude"
fi
fi
# Resolve measure.py to the NEWEST installed copy across channels so a stale
# plugin-cache copy never shadows a fresh install. find -L follows the
# install.sh symlink under ~/.claude/skills; cd -P resolves it before reading each
# copy's plugin.json for its version. find (not bare globs) never errors under zsh.
MEASURE_PY=""; _best_ver=""
while IFS= read -r _cand; do
[ -f "$_cand" ] || continue
_root="$(cd -P -- "$(dirname -- "$_cand")/../../.." 2>/dev/null && pwd)"
_ver="$(sed -n 's/.*"version"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p' "$_root/.claude-plugin/plugin.json" 2>/dev/null | head -1)"
[ -n "$_ver" ] || _ver="0.0.0"
if [ -z "$_best_ver" ] || [ "$(printf '%s\n%s\n' "$_ver" "$_best_ver" | sort -t. -k1,1n -k2,2n -k3,3n -k4,4n | tail -n1)" = "$_ver" ]; then
_best_ver="$_ver"; MEASURE_PY="$_cand"
fi
done <<EOF
$(find -L "$HOME/.claude/skills" "$HOME/.claude/plugins/cache" "$HOME/.claude/token-optimizer" "$HOME/.codex/skills" "$HOME/.codex/plugins/cache" "$HOME/.config/opencode/plugins/cache" "$HOME/.config/opencode/plugins" -type f -name measure.py -path '*token-optimizer*/scripts/measure.py' 2>/dev/null)
EOF
if [ -z "$MEASURE_PY" ]; then echo "[Error] measure.py not found. Is Token Optimizer installed?"; exit 1; fi
export TOKEN_OPTIMIZER_RUNTIME="$RUNTIME"
- 费用问题(“昨天的 Garden 会话花了多少钱?”、“我的 TR sync 会话花了多少钱?”、“会话 的费用”):运行以下内容,而非步骤 3-4。
python3 "$MEASURE_PY" session-cost <the user's words> --json
- 传入用户自己的说法(
garden yesterday、tr sync、ID 或其前 8 个字符)。名称会与主题、slug 和项目匹配,且不区分大小写;所有字段都必须匹配;today、yesterday和YYYY-MM-DD用于指定日期。询问“本周”时添加--days N(默认值为 30),要列出更多结果时添加--limit N。 - 根据
sessions[]回答:日期、主题、cost_usd.total、运行过子 Agent 时主线程与子 Agent 的费用拆分、指定日期且会话跨越多天时的cost_usd.on_date,以及设置了partial_reason时的该字段。若有多个匹配项:给出total_cost_usd并列出这些会话;只有答案会因此改变时才询问用户要看哪一个。 - 用一行说明
basis:基于 API 标价,因此对于订阅用户而言,这是这项工作本应产生的费用,并非账单金额。 - 没有匹配项:说明未找到,展示
closest[],并转述note(会话结束后才会收集)。 - 绝不要查询 trends.db,也不要自行计算 token 费用:这是仪表板自身的数字,只读,不写入。
- 收集数据并打开仪表板:
# TOKEN_OPTIMIZER_INTERACTIVE=1 marks this as a user-initiated open, so the 20s
# hook budget does not cut off a heavy rebuild on a large history. The user is
# waiting for this open, so it runs unbounded.
TOKEN_OPTIMIZER_INTERACTIVE=1 python3 "$MEASURE_PY" collect --quiet && \
TOKEN_OPTIMIZER_INTERACTIVE=1 python3 "$MEASURE_PY" dashboard
此步骤会将最新会话数据收集到趋势数据库中,重新生成仪表板 HTML,并在默认浏览器中打开。
- 告知用户仪表板已打开。提及任何 URL 前先探测守护进程:
- 探测守护进程:
python3 "$MEASURE_PY" daemon-status 2>/dev/null - 如果 DAEMON_RUNNING:先给出
URL: http://localhost:24842/token-optimizer(可加入书签,会自动更新),然后再提及文件备用方案。 - 如果 DAEMON_NOT_RUNNING:不要打印
localhost:24842URL。告知用户仪表板已作为文件打开;如果用户想要可加入书签的 URL,建议运行python3 $MEASURE_PY setup-daemon(适用于 macOS 和 Windows)。 - 文件路径:绝不要写死。该路径取决于安装方式。引用步骤 3 输出中的
Dashboard:行。 - 对于 DAEMON_NOT_RUNNING 时的 Codex:不要暗示必须运行 Claude 守护进程;生成的文件可以正常使用,并且安装了平衡型钩子后,Stop 钩子会刷新该文件。
- 探测守护进程:
已针对 Claude Opus 5.5、Sonnet 5.5 和 Codex 上的 GPT-5.6 编写并验证。
评论
支持 Markdown