From payoff
Use when the user wants to install, uninstall, configure, or troubleshoot the payoff tracker — "set up payoff", "is payoff installed?", "payoff isn't capturing my sessions", "/doctor flags hook errors", "change my hourly rate", "where does payoff store data?". Covers the binary-on-PATH requirement, the wrapped-hook settings.json shape, legacy migration, and config.toml.
How this skill is triggered — by the user, by Claude, or both
Slash command
/payoff:payoff-setupThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Owns the install / health / troubleshoot lifecycle. For reading a report use
Owns the install / health / troubleshoot lifecycle. For reading a report use
payoff-report; for diagnosing wasted edits use payoff-waste-triage.
payoff is a binary and a pair of hooks. The plugin ships the hooks; the
binary must be on $PATH separately.
cargo install payoff # Rust users
# or the curl installer (see README) for non-Rust users
payoff install # patches ~/.claude/settings.json
or via the plugin:
/plugin marketplace add ayodm/payoff
/plugin install payoff@payoff
Confirm both with:
payoff status
Healthy output shows hooks installed: 2 / 2 and a sessions dir path. If
hooks installed: 0 / 2, run payoff install. If the command isn't found,
the binary isn't on $PATH — fix step 1.
"payoff not found" — binary isn't installed or not on $PATH. See step 1.
The plugin alone does NOT install the binary.
/doctor says Expected array, but received undefined — legacy v0.1.x
wrote a flat {type, command} hook entry; Claude Code now requires the
wrapped {hooks: [{type, command}]} shape. Fix is idempotent:
payoff install # self-heals: rewrites flat entries to wrapped, no dupes
Sessions dir empty after working a while — hooks aren't firing. Check
payoff status; if 2 / 2 but still empty, confirm the hook command in
~/.claude/settings.json points at the same binary which payoff resolves
to (a stale install elsewhere on $PATH is the usual culprit).
Want to back out — payoff uninstall removes our hooks (flat or wrapped)
and leaves the data dir alone. A pre-install backup may exist at
~/.claude/settings.json.before-payoff.bak.
Edit ~/.claude/payoff/config.toml (created on first edit):
[report]
retention_window_days = 7 # days before a session's retention is scored
hourly_rate_usd = 0.0 # 0.0 = report only Claude $ cost; set to include your time
default_period = "7d" # default --since when the CLI omits it
[exclude]
# Path fragments skipped when counting session lines (generated output).
paths = [".git", "node_modules", "target", "dist", ".next", "_build", "deps"]
Add a build/output directory to exclude.paths if generated files are
inflating line counts and skewing retention.
~/.claude/payoff/sessions/*.json (hot path)~/.claude/payoff/archive.jsonl (run payoff archive
to roll closed sessions older than the retention window into it)~/.claude/payoff/last-report.html~/.claude/payoff/config.toml~/.claude/projects/<project>/<session-id>.jsonlProvides behavioral guidelines to reduce common LLM coding mistakes, focusing on simplicity, surgical changes, assumption surfacing, and verifiable success criteria.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
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 ayodm/payoff --plugin payoff