Early access — cascade metrics are real (derived from canonical token telemetry); the operator field is a curated seed. Learn more about the data
← Wiki

The local agent (MCP)

The SigRank local agent is an MCP that reads your token counts straight from local session logs — 15+ platforms supported, including Claude Code, Codex, Amp, Gemini CLI, GitHub Copilot CLI, Goose, Kilo, and more — and keeps your live cascade in sync with the board and your operator profile. You never touch a number; the agent is the verifier. It counts tokens; it never reads the content of your prompts or replies.

What it does

Zero-paste, on-device readtokenpull reads local session logs from 15+ platforms and counts the four token pillars across 7d / 30d / 90d / all-time — no copy-paste, nothing to assemble by hand.
Publishes in one calltokenpull_submit posts each window's pillars; the server re-scores authoritatively, so your Υ Yield, Leverage, SNR & 10xDEV land on the board and profile and update live.
Stays strictly passiveRead-only against telemetry, emits no prompt of its own. It measures without disturbing what it measures — only the four counts ever leave your machine.

Supported platforms

tokenpull reads local session logs from 15+ AI coding platforms. Each adapter reads that platform's own log format — you don't reconfigure anything.

Claude Code~/.claude/projects/Full 4-pillar
Codex CLI~/.codex/sessions/Full 4-pillar
Amp~/.local/share/amp/Full 4-pillar
Kimi~/.kimi/sessions/Full 4-pillar
pi-agent~/.pi/agent/Full 4-pillar
OpenClaw / ClawdBot~/.openclaw/Full 4-pillar
Droid / Factory~/.factory/sessions/Full 4-pillar
Codebuff~/.config/manicode/Full 4-pillar
Kilo~/.local/share/kilo/Full 4-pillar
Hermes Agent~/.hermes/state.dbFull 4-pillar
Gemini CLI~/.gemini/tmp/Estimated cache-write
GitHub Copilot CLI~/.copilot/otel/Needs COPILOT_OTEL_ENABLED=true
Qwen~/.qwen/projects/Estimated cache-write
Goosesessions.dbEstimated cache-write
OpenCode~/.local/share/opencode/No raw token fields in logs

“Estimated cache-write” means that platform's log format doesn't expose cache-creation tokens; the other three pillars are exact. Env-var overrides let you point any adapter at a custom log path.

Install

# install globally (recommended)
npm install -g sigrank

# or run without installing
npx sigrank

# wire into Claude Code — .mcp.json
{
  "mcpServers": {
    "sigrank": { "command": "npx", "args": ["sigrank"] }
  }
}

In a terminal it opens the TUI. Wired into your AI client it starts the MCP stdio server automatically — no extra config. Verified on Node ≥18, macOS + Linux.

CLI commands

sigrankFull tabbed TUI — Dashboard / Trends / Compare / Board / Watch / Connect. Default in a terminal.
sigranktuiSame as above — explicit launch. Keys: 1–6 or ← → switch, R refresh, Q quit.
sigrankenrollSign in: paste a key from signalaf.com → Settings → "New key". (Or in the TUI: Connect tab, key 6.)
sigranksubmitPublish your verified runs to the board. (Or press [S] from any read tab in the TUI.)
sigrankboardLive leaderboard from signalaf.com — auto-refreshes every 30s.
sigrankcompareSource audit — tokenpull vs ccusage vs token-dash vs tokscale, with delta %.
sigrankwatchLive cascade meter — re-reads logs on every poll, shows what moved.
sigrank--helpFull command reference with all flags and platform options.

MCP tools — callable by your AI client

When wired into Claude Code or Cursor, your AI agent can call these tools directly — no paste, no copy-out.

tokenpullOn-device read → 4-window cascade. Zero paste, token-only.
tokenpull_submitRead + publish to the board in one call. Server re-scores authoritatively.
tokenpull_compareAll four sources side-by-side: tokenpull / ccusage / token-dash / tokscale with delta % per pillar.
rank_pasteScore a ccusage / tokscale paste locally. Returns Υ + narration card.
rank_windowsScore all four windows from a dashboard paste at once.
submit_pasteRank a paste AND publish it to the board in one call.
submit_verifiedSign + POST the verified cascade to /api/v1/snapshots (the ranked path).
enrollPaste a key from Settings → "New key" → bind this device (signed submit).
get_leaderboardLive leaderboard from signalaf.com, any window.
get_operatorOne operator's live profile by codename.
watch_tokenpullStreaming cascade snapshot — diffs on each poll.

Open by design — the cascade math is public; proprietary threshold cuts stay server-side. Canonical anchor: rank_paste reproduces MO§ES Υ 18,436.98 exactly.

How the MCP feeds your operator profile

The agent is the data pipeline between your local session logs and your public operator profile at signalaf.com. Here is the exact path, step by step.

01Agent reads your local logstokenpull reads local session logs from 15+ platforms — Claude Code, Codex, Amp, Kimi, Gemini CLI, GitHub Copilot CLI, Goose, Kilo, Hermes, and more — and counts the four token pillars across each window. Never prompt content; only the four integers.
02Cascade derived on-deviceThe cascade math runs locally: Υ Yield, SNR, Leverage, Velocity, 10xDEV, and your class tier. You see your full cascade before anything leaves your machine.
03Pillars submitted to the board APItokenpull_submit posts the four canonical pillars per window. The server re-scores them authoritatively (proprietary threshold cuts apply server-side). Only the four integers are transmitted.
04Your operator profile updates liveThe board entry links to your operator profile at signalaf.com/user/[codename]. All cascade metrics — Υ Yield, SNR, Leverage, 10xDEV, class tier, per-window history — render on your profile card. The profile is the public face of your cascade.

The profile is not separate from the MCP. The MCP is the write path. Every cascade metric your profile displays — Υ Yield, SNR, Leverage, 10xDEV, class tier, per-window history — originates from a tokenpull_submit call (or a manual paste through the calculator). The profile is the read surface; the agent is the write path.

The contamination constraint (non-negotiable)

Any live observer that prompts generates the tokens it measures. We learned this directly: a memory observer that auto-prompts (low-input / high-output) inflated a real operator's output by ~25% — visible openly on the live board as the inflated-vs-clean pair (rows 2 and 3). So every SigRank instrument that touches a live session is read-only against telemetry and emits no prompt — no auto-memory, no keep-alive, no self-query. Verified-passive, or it re-contaminates every operator running it. This is a hard requirement, not a caution — and it is the moat: the instrument that doesn't disturb what it measures.

This is the same rule that governs signature drift: the agent is the live reader the drift instrument runs on, and because it never prompts, the drift it reports is the operator's own — not the observer's. A live observer that prompted would inflate the very numbers it reports; this one cannot.

Status

The agent is how board entries become exact and live — vs. the manual paste calculator, which runs your numbers but does not save to the board or update your profile. Account + review still gate the board so it stays honest.

Token counts only — never prompt content. Verified-passive by design.