MCPInstall

token-coach

Coaches a token-efficient Claude Code or Codex setup from the user's own usage data. Use when planning a build, fixing a slow or costly setup, or deciding which workflow steps need a model.

Installs
396
Last 24h
—
Trending rank
—
Security
Not audited

Install

Works with every agent the skills CLI supports.

npx skills add https://github.com/alexgreensh/token-optimizer --skill token-coach
  1. 01

    Install

    Run the command in your project. The CLI asks which agents to install for.

  2. 02

    Describe the task

    Ask your agent for something this skill covers. It loads token-coach automatically when relevant.

  3. 03

    Review the result

    The agent follows the SKILL.md steps, scripts and references bundled with the skill.

SKILL.md

The instructions your agent reads when the skill is triggered.

Token Coach

A coaching conversation about where the user's tokens go and what to change, grounded in numbers measured on their machine. The deliverable is a short, prioritised action plan the user agrees with. For a full audit that edits their setup, hand over to token-optimizer.

Token Optimizer's own skills (token-optimizer, token-coach, token-dashboard, fleet-auditor, resume-checkpoint) are the measurement layer, so leave them out of every unused-skill, archive or consolidation suggestion, however rarely they run.

1. Collect the data

Run exactly this first. It finds the newest installed copy, so a stale plugin cache never answers:

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" ] || [ ! -f "$MEASURE_PY" ]; then echo "[Error] measure.py not found. Is Token Optimizer installed?"; exit 1; fi
export TOKEN_OPTIMIZER_RUNTIME="$RUNTIME"
# The coach files ship beside measure.py, so they are always the same version.
COACH_DIR="$(cd -P -- "$(dirname -- "$MEASURE_PY")/../../token-coach" 2>/dev/null && pwd)"
[ -d "$COACH_DIR/references" ] || echo "[Error] token-coach references not found beside $MEASURE_PY. Reinstall Token Optimizer."

Then gather, skipping any command that fails (older installs lack some):

python3 "$MEASURE_PY" coach --json                      # snapshot, patterns, history, questions
python3 "$MEASURE_PY" quality current --json            # this session's quality score and issues
python3 "$MEASURE_PY" subagent-cache status --json      # Claude Code: subagent cache lifetime and its payoff
python3 "$MEASURE_PY" compact-advice --json             # Claude Code: would an earlier compact window pay off
python3 "$MEASURE_PY" recommendations --json            # Claude Code: the daily usage-recommendations record
[ "$RUNTIME" = "codex" ] && python3 "$MEASURE_PY" codex-doctor --project "$PWD" --json

What the coach JSON holds: snapshot (current overhead), patterns_good and patterns_bad (named patterns with detail and fix), history (7-day against earlier: quality, session length, cache hit rate, grade spread, cost per session, short against long sessions, compression gap, share of sessions that switched model), deterministic_candidates when present (work the user repeats that a script could do), and usage_recommendations on Claude Code (the daily-measured record: one item each for the compact window and the subagent cache lifetime, plus wins once the user acted on an earlier recommendation and the numbers moved). Field-by-field meaning and the numbers to quote: references/quick-reference.md.

Every number you quote comes from these outputs or from the quick reference. When the data is thin or a command returned nothing, say so and coach from what the user tells you; an invented figure costs the user's trust in every real one.

2. Ask what they want

Ask one question and wait for the answer before showing findings:

What's your goal today? a) Building something new and want it token-efficient from the start b) An existing setup feels slow or context fills too fast c) Designing a multi-agent system d) Quick health check e) Review a workflow or automation: which steps need a model at all

Skip the question when the request already answers it.

3. Load what that goal needs

GoalReadExample to follow
a, breferences/coach-patterns.md, quick referenceexamples/coaching-session-new-project.md (a), examples/coaching-session-heavy-setup.md (b)
creferences/agentic-systems.md, quick referenceexamples/coaching-session-agentic.md
dquick reference onlynone, keep it fast
ereferences/deterministic-stages.mdnone

For a, b and c also read references/coaching-scripts.md for how each conversation tends to run. All paths are under $COACH_DIR. The examples show tone and pacing; the user's data decides the content.

4. Coach

This is a conversation. One or two findings, then a question; the user steers the rest.

  • Open with what hurts most. A session quality score under 70 comes first ("quality is 58 of 100, and stale tool results are holding 40K tokens"). Otherwise a worsening trend beats a static number: falling quality, growing session length, a dropping cache hit rate.
  • Use their numbers and name the pattern. "47 skills cost about 4,700 tokens at every start, the 50-Skill Trap" lands; "skills cost tokens" does not.
  • Explain the mechanism in a sentence so the advice survives cases this skill never listed. Example: switching model mid-session throws away the prompt cache, so pick the model at the start; a cheaper model inside a subagent is fine because it has its own context.
  • Subagent cache. Subagents get a 5-minute cache even on a subscription. Token Optimizer measures whether 1 hour pays on this user's transcripts and recommends it (it never sets the key for them); report what subagent-cache status measured and its advice: line, including when the payoff is negative for this user's pattern. The same verdict also sits in the daily usage_recommendations record the dashboard's "From your own usage" section reads.
  • Compaction window. Present compact-advice as an estimate from their own history with cost and quality side by side, and give the command it printed. Earlier compaction saves cache-read tokens on every later turn and risks losing early instructions, so the user decides. The daily usage_recommendations record carries the distilled recommend/keep verdict too.
  • Usage recommendations. When usage_recommendations carries a recommend item, lead with it: it is today's measured answer, already gated on enough data. When wins is non-empty, name the measured change "since you changed it" and quote both numbers; never claim the change caused it.
  • Goal e, or any time deterministic_candidates is non-empty: walk the workflow step by step and sort each step into "inputs decide the output, so plain code" and "needs judgement, so a model", following the deterministic-stages reference.
  • Codex users hear Codex terms only: AGENTS.md, Codex memories, balanced Codex hooks, reasoning effort and the model picker, compact prompt guidance. Claude model names and CLAUDE.md mean nothing to them.

Sound like a knowledgeable friend. Two to four exchanges is typical; follow the user's questions over any script.

5. Agree the action plan

Close with three to five actions ordered by impact. Each has a bold name, one line on what to do, the estimated saving and where that estimate comes from, and whether it is a quick win or a deeper change. Include, when they apply:

  • Quality under 70 on Claude Code: python3 "$MEASURE_PY" setup-smart-compact. On Codex: TOKEN_OPTIMIZER_RUNTIME=codex python3 "$MEASURE_PY" codex-install --project .
  • Quality under 50: /compact or /clear before more work.
  • Steps to move from a model to a script, each with the mechanism (hook, script, scheduled job).

Then check the plan against the data: every figure traces to a command output or the quick reference, and no action touches Token Optimizer's own skills. Fix what fails and check again before sending.

Offer /token-optimizer when they want the changes made for them, and the dashboard (python3 "$MEASURE_PY" dashboard; on Codex quote the Dashboard: line it prints, never a remembered path) when they want to watch the trend.

Keep-Warm (Claude Code, asked once)

After the plan, run python3 "$MEASURE_PY" keepwarm-consent-status. Only when should_ask is true, follow references/keepwarm-consent.md exactly: it spends the user's money, so the wording and the order of commands are fixed.

Written for and checked on Claude Opus 5.5 and Sonnet 5.5, and GPT-5.6 on Codex.

FAQ

What does the token-coach skill do?

Coaches a token-efficient Claude Code or Codex setup from the user's own usage data. Use when planning a build, fixing a slow or costly setup, or deciding which workflow steps need a model.

How do I install token-coach?

Run npx skills add https://github.com/alexgreensh/token-optimizer --skill token-coach in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/token-coach/ (personal) or .claude/skills/token-coach/ (project).

Which AI agents can use token-coach?

Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.

Is token-coach safe to install?

No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.

Who maintains token-coach?

It is published by alexgreensh in alexgreensh/token-optimizer. It has 396 recorded installs.

More from alexgreensh/token-optimizer

View all →

token-optimizer

alexgreensh/token-optimizer

Audits a Claude Code or Codex setup for context-window waste, fixes it with the user's approval, and measures the saving. Use when context feels tight, sessions degrade, or costs climb.

986 installs

token-dashboard

alexgreensh/token-optimizer

Open the skill to read its SKILL.md instructions.

Data & Databases441 installs

fleet-auditor

alexgreensh/token-optimizer

Audits token waste and cost across Claude Code, Codex, OpenClaw, Hermes and OpenCode, with dollar savings. Use when running several agent systems or suspecting idle heartbeats burn tokens.

372 installs

resume-checkpoint

alexgreensh/token-optimizer

Open the skill to read its SKILL.md instructions.

102 installs

Popular code quality & workflow skills

View category →

grill-me

mattpocock/skills

A relentless interview to sharpen a plan or design.

Scan a codebase for deepening opportunities, present them as a visual HTML report, then grill through whichever one you pick.

handoff

mattpocock/skills

Compact the current conversation into a handoff document for another agent to pick up.

domain-modeling

mattpocock/skills

Build and sharpen a project's domain model. Use when discussing codebase terminology, writing or editing a GLOSSARY.md, or recording or editing an ADR.

codebase-design

mattpocock/skills

Shared vocabulary for designing deep modules. Use when the user wants to design or improve a module's interface, find deepening opportunities, decide where a seam goes, make code more testable or AI-navigable, or when another skill needs the deep-module vocabulary.

diagnosing-bugs

mattpocock/skills

Diagnosis loop for hard bugs and performance regressions. Use when the user says "diagnose"/"debug this", or reports something broken/throwing/failing/slow.