sigrank 0.19.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/CHANGELOG.md +158 -0
  2. package/MCP_SERVER_DESCRIPTION.md +172 -0
  3. package/README.md +89 -41
  4. package/adapters/index.mjs +1100 -0
  5. package/adapters/tokenpull.mjs +568 -0
  6. package/adapters.mjs +1 -865
  7. package/analytics/cascade.mjs +338 -0
  8. package/bin/sigrank.mjs +137 -0
  9. package/cascade.mjs +1 -274
  10. package/cli.mjs +1 -1853
  11. package/connect.mjs +1 -13
  12. package/identity/connect.mjs +13 -0
  13. package/identity/keystore.mjs +231 -0
  14. package/identity/sign.mjs +106 -0
  15. package/index.mjs +47 -162
  16. package/keystore.mjs +1 -242
  17. package/lib/constants.mjs +137 -0
  18. package/lib/pkg-version.mjs +59 -0
  19. package/manifest.json +46 -0
  20. package/narrate.mjs +1 -77
  21. package/package.json +44 -18
  22. package/preflight.mjs +1 -191
  23. package/presentation/cli.mjs +1926 -0
  24. package/presentation/narrate.mjs +219 -0
  25. package/presentation/tui-themes.mjs +189 -0
  26. package/presentation/tui.mjs +3316 -0
  27. package/prompts/check-my-efficiency.md +1 -0
  28. package/prompts/compare-with-leader.md +1 -0
  29. package/prompts/simulate-improvement.md +1 -0
  30. package/proxy.mjs +492 -0
  31. package/resources/class-tiers.md +81 -0
  32. package/resources/data-policy.md +31 -0
  33. package/resources/install-guide.md +59 -0
  34. package/resources/privacy-model.md +44 -0
  35. package/resources/scoring-formula.md +24 -0
  36. package/review.mjs +263 -0
  37. package/sign.mjs +1 -106
  38. package/submit/index.mjs +297 -0
  39. package/submit/preflight.mjs +191 -0
  40. package/submit.mjs +1 -303
  41. package/tokenpull.mjs +1 -576
  42. package/tokscale_analytics.mjs +864 -0
  43. package/tools/_framing.mjs +217 -0
  44. package/tools/_helpers.mjs +253 -0
  45. package/tools/_peer-matching.mjs +361 -0
  46. package/tools/_report.mjs +262 -0
  47. package/tools/_schemas.mjs +492 -0
  48. package/tools/_verifiers.mjs +148 -0
  49. package/tools/compare-operators.mjs +80 -0
  50. package/tools/compare-self.mjs +124 -0
  51. package/tools/describe-power-user.mjs +78 -0
  52. package/tools/diagnose-cascade.mjs +192 -0
  53. package/tools/discover-peers.mjs +198 -0
  54. package/tools/enroll.mjs +119 -0
  55. package/tools/get-best-operator.mjs +59 -0
  56. package/tools/get-leaderboard.mjs +27 -0
  57. package/tools/get-operator.mjs +33 -0
  58. package/tools/index.mjs +233 -0
  59. package/tools/optimize-efficiency.mjs +170 -0
  60. package/tools/rank-paste.mjs +51 -0
  61. package/tools/rank-windows.mjs +120 -0
  62. package/tools/self-improve.mjs +423 -0
  63. package/tools/simulate-change.mjs +207 -0
  64. package/tools/standard-record.mjs +108 -0
  65. package/tools/submit-paste.mjs +121 -0
  66. package/tools/submit-verified.mjs +153 -0
  67. package/tools/suggest-improvements.mjs +168 -0
  68. package/tools/tokenpull-compare.mjs +123 -0
  69. package/tools/tokenpull-submit.mjs +235 -0
  70. package/tools/tokenpull.mjs +113 -0
  71. package/tools/tokscale-breakdown.mjs +119 -0
  72. package/tools/tokscale-competitive-intel.mjs +45 -0
  73. package/tools/tokscale-cost-analysis.mjs +31 -0
  74. package/tools/tokscale-developer-profile.mjs +36 -0
  75. package/tools/tokscale-device-profile.mjs +35 -0
  76. package/tools/tokscale-market-share.mjs +38 -0
  77. package/tools/tokscale-mcp-usage.mjs +33 -0
  78. package/tools/tokscale-model-trends.mjs +32 -0
  79. package/tools/watch-tokenpull.mjs +134 -0
  80. package/tools.mjs +1 -3897
  81. package/tui.mjs +4 -2650
  82. package/banner.svg +0 -7
package/CHANGELOG.md ADDED
@@ -0,0 +1,158 @@
1
+ # Changelog
2
+
3
+ ## [0.0.203](https://github.com/SunrisesIllNeverSee/sigrank-mcp/compare/v0.0.202...v0.0.203) (2026-08-12)
4
+
5
+ ### Chores
6
+
7
+ * auto-publish version bump (github-actions bot)
8
+
9
+ ## [0.0.202](https://github.com/SunrisesIllNeverSee/sigrank-mcp/compare/v0.0.201...v0.0.202) (2026-08-12)
10
+
11
+ ### Docs
12
+
13
+ * add bestuser-router-mcp + sigarena to ecosystem table in README — all 4 repos now have identical 7-repo ecosystem tables
14
+
15
+ ## [0.0.201](https://github.com/SunrisesIllNeverSee/sigrank-mcp/compare/v0.0.200...v0.0.201) (2026-08-12)
16
+
17
+ ### Chores
18
+
19
+ * sync package.json + server.json + manifest.json to 0.0.201 (match npm published version)
20
+
21
+ ## [0.0.200](https://github.com/SunrisesIllNeverSee/sigrank-mcp/compare/v0.0.179...v0.0.200) (2026-07-27 — 2026-08-10)
22
+
23
+ ### Features
24
+
25
+ * 24-sub-stage experience ladder — mirror server's RS05_CLASS_THRESHOLDS ([adbd6e2](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/adbd6e2))
26
+ * oh-my-pi (omp) added as a native 4-pillar platform adapter (#32) ([c7ddb78](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/c7ddb78))
27
+ * opt-in provider usage proxy for capturing real token counts from API responses ([410113f](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/410113f))
28
+ * omp dashboard loading is now opt-in in the TUI ([23613ed](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/23613ed))
29
+ * omp Stage 2 — incremental SQLite cache for omp scans ([ffdf67c](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/ffdf67c))
30
+ * sync 10 build archetypes — new names, families, construction-before-reuse precedence ([120be0b](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/120be0b))
31
+
32
+ ### Bug Fixes
33
+
34
+ * resolve 8-pass review + privacy — single source of truth for version, tiers, cascade, constants ([56653ab](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/56653ab))
35
+ * npm audit fix — resolve 3 transitive dependency vulnerabilities ([3bb7a11](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/3bb7a11))
36
+ * resolve package.json path in cli.mjs (./ → ../) ([4fe94cd](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/4fe94cd))
37
+ * ARCH+ sub-stage thresholds — 7T/3T/1T split (was all 7T) ([da0f12e](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/da0f12e))
38
+ * add 9router to TOKSCALE_CLIENT_MAP — closes platform sync gap ([d4b35ad](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/d4b35ad))
39
+ * dedup duplicate messages + estimate cacheCreate when NULL ([ff60117](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/ff60117))
40
+ * read native cache_creation_tokens instead of estimating, then reverted back to ioRatio estimation ([fc83512](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/fc83512), [f310f49](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/f310f49))
41
+ * replace legacy 3-tier references with canonical 8-tier ladder ([f37701b](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/f37701b))
42
+ * harden publish push-back + wire 3 missing contract tests into CI ([cdaa511](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/cdaa511))
43
+ * publish to npm BEFORE git commit (prevents drift on failed publish) ([083b066](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/083b066))
44
+
45
+ ### Performance
46
+
47
+ * omp Stage 1 — bounded concurrency (c=8) + line guard ([9643c91](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/9643c91))
48
+
49
+ ### CI/Chores
50
+
51
+ * auto-publish to npm on push to main + dispatch version-sync to app ([f6ebc35](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/f6ebc35))
52
+ * remove cross-repo dispatch — app auto-syncs from npm directly ([d590885](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/d590885))
53
+ * full repo cleanup — organize, dedupe, sync versions ([9992127](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/9992127))
54
+ * add workflow_dispatch trigger to publish.yml ([6ec383b](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/6ec383b))
55
+ * add .DS_Store to .gitignore ([fa78f50](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/fa78f50))
56
+ * gitignore bun.lock ([adee455](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/adee455))
57
+ * add bunx sigrank to README quickstart ([977b92e](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/977b92e))
58
+ * add Bun/bunx quick reference to AGENTS.md ([2c73d0c](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/2c73d0c))
59
+ * sync server.json to 0.0.200 + publish to MCP Registry ([9c97b5f](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/9c97b5f))
60
+
61
+ ## [0.0.179](https://github.com/SunrisesIllNeverSee/sigrank-mcp/compare/v0.0.178...v0.0.179) (2026-07-27)
62
+
63
+ ### Features
64
+
65
+ * consent acknowledgment in enroll + submit flows (D1) — `tools/enroll.mjs` sends `consent_acknowledged=true` + `terms_version` + `privacy_version`; `presentation/cli.mjs` prompts for explicit TTY consent; `submit/index.mjs` embeds consent fields in Schema 1.0 payloads; new `resources/data-policy.md` registered as `sigrank://data-policy` MCP resource ([6789952](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/6789952))
66
+
67
+ ### Bug Fixes
68
+
69
+ * TUI input during startup — navigation/quit now accepted while startup data is still loading ([d2078ab](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/d2078ab))
70
+ * CI failures — `client_rollup: []` + `detected_clients: []` added to empty-data early returns in `tokscale_analytics.mjs`; contract test pointed at `submit/index.mjs` (was `submit.mjs` re-export); `@hono/node-server ^2.0.5` override for fast-uri vuln GHSA-v2hh-gcrm-f6hx ([6b56419](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/6b56419), [a2ebe8e](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/a2ebe8e))
71
+ * regenerate `package-lock.json` from scratch — previous lock file had invalid package tree (`npm ci` failed in CI) ([81781ec](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/81781ec))
72
+
73
+ ### Refactor
74
+
75
+ * observatory-spine restructure — `tools.mjs` split into 28 individual tool files under `tools/`; files moved to domain dirs (`adapters/`, `analytics/`, `identity/`, `presentation/`, `prompts/`, `resources/`, `submit/`); inline resources/prompts extracted; root `.mjs` files are now 1-line re-export shims; observatory spine synced from sigrank-app ([6c06fee](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/6c06fee), [dc66eff](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/dc66eff), [9c92223](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/9c92223))
76
+
77
+ ### Chores
78
+
79
+ * remove release-please workflow — versioning is now manual per VERSIONING_RULESET.md; release-please was causing version jumps (0.0.178 → 0.11.4 → 0.19.0) despite `bump-patch-only` ([adeeb65](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/adeeb65))
80
+ * owner-only tools (ops-review + retire-operator) moved to sigadmin MCP ([0c9564b](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/0c9564b))
81
+ * add OKF frontmatter to all spine docs (30 files) ([a6c722e](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/a6c722e))
82
+ * remove fake DRS environment.yaml ([71d3d60](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/71d3d60))
83
+ * remove restructure planning docs (restructure complete) ([a8ae8cc](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/a8ae8cc))
84
+ * CI: bump actions/checkout 4→7, setup-node 4→7, upload-artifact 4→7, github-script 7→9 ([9063b5e](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/9063b5e), [e7f5039](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/e7f5039), [e897921](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/e897921), [c4dcf16](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/c4dcf16))
85
+ * deps: bump tokscale in the patch-updates group ([b204b40](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/b204b40))
86
+
87
+ ## [0.19.1](https://github.com/SunrisesIllNeverSee/sigrank-mcp/compare/v0.19.0...v0.19.1) (2026-07-17)
88
+
89
+
90
+ ### Bug Fixes
91
+
92
+ * revert to 3-digit versioning (0.0.178) + enforce in CI ([40aa9a6](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/40aa9a6d1c51ca299974e6fdfc4b36f24369635f))
93
+
94
+ ## [0.19.0](https://github.com/SunrisesIllNeverSee/sigrank-mcp/compare/v0.18.1...v0.19.0) (2026-07-14)
95
+
96
+
97
+ ### Features
98
+
99
+ * add 'other' platform adapter for user-supplied token data ([0e6af8e](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/0e6af8e36620df88c13822e292499b003442f645))
100
+ * auto-detect platforms via tokscale instead of brute-force all adapters ([e72d2d9](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/e72d2d9f5615832cd58eaeff7e17ab961dc6fa49))
101
+ * complete tokscale client map (40 clients) + model breakdown tool ([657b87a](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/657b87a690576ad81396e219c61447198ada67d8))
102
+ * platform sync automation script + weekly CI check ([29096aa](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/29096aad1b2f3c0bce6dad15d8c4fa59871793e4))
103
+
104
+
105
+ ### Bug Fixes
106
+
107
+ * unescaped backticks in index.mjs template literal + add devin/opencode to CLI platform list ([24cfdfe](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/24cfdfe956f4776fe8d88f2108a6dd644f7269d8))
108
+
109
+ ## [0.18.1](https://github.com/SunrisesIllNeverSee/sigrank-mcp/compare/v0.18.0...v0.18.1) (2026-07-14)
110
+
111
+
112
+ ### Bug Fixes
113
+
114
+ * **test:** ALL_PLATFORMS count 15→16 + accept records() for devin adapter ([8d7f0f5](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/8d7f0f56cea3686e046a407732233f9bbd7d4916))
115
+
116
+ ## [0.18.0](https://github.com/SunrisesIllNeverSee/sigrank-mcp/compare/v0.17.2...v0.18.0) (2026-07-14)
117
+
118
+
119
+ ### Features
120
+
121
+ * Lane 3 — intent schema files + competitive layer + eval benchmark ([42b9607](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/42b9607ba4cec8aa5f169b1caf74aa05017c4856))
122
+ * multi-platform support in tokenpull + tokenpull_submit ([c2d1458](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/c2d1458d1f899034e9826d2100b8ec60b421ddd4))
123
+
124
+
125
+ ### Bug Fixes
126
+
127
+ * align manifest.json version to 0.17.2 (matches package.json + server.json) ([30c3a37](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/30c3a372b3ac212bc99fd64535687cf6789922f2))
128
+ * auto-clear code buffer on sign-in failure (0.17.5) ([72caa9a](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/72caa9a246c85e38663989981cd233ae98c3b03f))
129
+ * curl fallback for Vercel bot protection 403 (0.0.177) ([abc8610](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/abc861041a3db14497383caecb39550667ec3b93))
130
+ * Devin adapter reads from sessions.db (real per-message telemetry) ([a5aaaf2](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/a5aaaf275516e793aec0e58c13c09d985e68d05c))
131
+ * Devin tokens now readable via tokenpull (tokscale fallback) ([abfb1eb](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/abfb1eb93fd92f669d742ce8b383dffc35ef094f))
132
+ * Esc/arrow-key race condition in TUI (0.17.4) ([555e6bd](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/555e6bd3dd5e45963eff2ff95d85b02955d40e2b))
133
+ * resolve CodeQL url-substring-sanitization alert (0.0.176) ([babf863](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/babf86379a2d97869738a1c8b01269c1d8c149bf))
134
+ * route Devin through Codex-style ioRatio split ([08d4441](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/08d4441437ce38bdfacc8936d1771d654999ac28))
135
+ * unblock sign-in deadlock + keystore resilience (0.17.3) ([569fc94](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/569fc948cd0f74fdf930113074c562724927ffe8))
136
+
137
+ ## [0.17.0](https://github.com/SunrisesIllNeverSee/sigrank-mcp/compare/v0.16.1...v0.17.0) (2026-07-10)
138
+
139
+
140
+ ### Features
141
+
142
+ * add 4 MCP resources (scoring formula, class tiers, install guide, privacy model) ([1227828](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/1227828159c299bd1a5e0ebf3bb47aece3d3583d))
143
+
144
+
145
+ ### Bug Fixes
146
+
147
+ * add .mcpbignore + fix manifest.json repository object for MCPB bundle ([eb1046f](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/eb1046f6e291db8681e01aa06593091a9b94447d))
148
+ * add title annotations to all 15 MCP tools (Anthropic directory requirement E) ([36e7d5d](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/36e7d5d793fe25d4dd9d780422309594a4118311))
149
+ * bump manifest.json to 0.16.1 + update description ([abd19b0](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/abd19b0a6a713389c1f0b4eb6b17ccc41c9825bd))
150
+ * Smithery bundle + metadata fixes ([d2a3a10](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/d2a3a10d5106c506ea2a57ac3f6ccc36ee9a55f6))
151
+ * update server.json — add registryBaseUrl, _meta, better description ([a929a6e](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/a929a6e4052b9edb9d549434f803a85f5d4fc572))
152
+
153
+ ## [0.16.1](https://github.com/SunrisesIllNeverSee/sigrank-mcp/compare/v0.16.0...v0.16.1) (2026-07-09)
154
+
155
+
156
+ ### Bug Fixes
157
+
158
+ * remove readOnlyHint from watch_tokenpull ([c867eed](https://github.com/SunrisesIllNeverSee/sigrank-mcp/commit/c867eedc9de1f4f37e0a9db08bc41aa0d426be33))
@@ -0,0 +1,172 @@
1
+ # SigRank MCP Server
2
+
3
+ > Operator leaderboard measuring users, not models — 24 tools, TUI, signed submit, privacy-first.
4
+
5
+ SigRank is the first leaderboard that ranks **AI operators** — the humans — by token cascade efficiency, not the models. The yield metric (Υ = cache_read × output / input²) turns raw token telemetry into a competitive ranking on [signalaf.com](https://signalaf.com).
6
+
7
+ ## Install
8
+
9
+ ```bash
10
+ npx sigrank
11
+ ```
12
+
13
+ Or add to your MCP client config:
14
+
15
+ ```json
16
+ {
17
+ "mcpServers": {
18
+ "sigrank": {
19
+ "command": "npx",
20
+ "args": ["sigrank"],
21
+ "env": {
22
+ "SIGRANK_API_BASE": "https://signalaf.com"
23
+ }
24
+ }
25
+ }
26
+ }
27
+ ```
28
+
29
+ **No API key required** for read tools (leaderboard, operator profiles, ranking). Submit tools need a Supabase anon key (free, set during `sigrank enroll`).
30
+
31
+ ## Privacy
32
+
33
+ The scanner runs **locally**. Only four token counts leave the machine:
34
+ - `input` — tokens sent to the model
35
+ - `output` — tokens generated by the model
36
+ - `cacheCreate` — tokens written to cache
37
+ - `cacheRead` — tokens read from cache
38
+
39
+ **Never** prompts. **Never** code. **Never** outputs. Submissions are ed25519-signed and server-verifiable.
40
+
41
+ ## TUI
42
+
43
+ SigRank ships with a full terminal UI (`sigrank tui`) — a live dashboard for your token cascade:
44
+
45
+ ```bash
46
+ npx sigrank tui
47
+ ```
48
+
49
+ Features:
50
+ - Live cascade metrics (Υ Yield, SNR, Leverage, Velocity, 10xDEV)
51
+ - Real-time leaderboard feed from signalaf.com
52
+ - Operator class tier display (8-tier experience ladder: ARCH+ to IGNITER)
53
+ - Per-window breakdowns (7d / 30d / 90d / all-time)
54
+ - Keyboard-driven — no mouse needed
55
+
56
+ ## CLI Commands
57
+
58
+ ```bash
59
+ npx sigrank enroll # Register as an operator (generates ed25519 keypair)
60
+ npx sigrank submit # Submit token telemetry to the board
61
+ npx sigrank tui # Launch the terminal UI dashboard
62
+ npx sigrank rank # Quick local rank check (no submit)
63
+ npx sigrank diagnose # Diagnose cascade inefficiencies
64
+ npx sigrank improve # Get improvement suggestions
65
+ ```
66
+
67
+ ## The 24 MCP Tools
68
+
69
+ ### Read-only — pure math (no auth, no filesystem)
70
+
71
+ | # | Tool | What it does |
72
+ |---|------|-------------|
73
+ | 1 | `rank_paste` | Paste token counts, get projected SigRank rank instantly. Computes the full yield cascade locally (Υ, SNR, Leverage, Velocity, 10xDEV, class tier). No network calls. |
74
+ | 2 | `rank_windows` | Rank all four time windows (7d/30d/90d/all-time) in one call from a dashboard paste. Paste the full table from ccusage, tokscale, or Claude Max dashboard. |
75
+ | 3 | `simulate_change` | "What if I changed my token mix?" — takes your current pillars + proposed changes, runs the cascade on both, returns exact Υ delta, class change, and per-metric diffs. Pure local math. |
76
+ | 4 | `diagnose_cascade` | Analyzes your token cascade and diagnoses where you're leaking efficiency. Returns ranked list of leaks with severity, findings, recommendations, and estimated Υ impact per fix. |
77
+ | 5 | `suggest_improvements` | Generates ranked, simulated improvement suggestions. Tests multiple strategies (increase cache reads, reduce input, increase output, optimize cache creation), simulates each, returns ranked by Υ impact. |
78
+ | 6 | `self_improve` | One-click optimize — runs the full cycle in one call: tokenpull → diagnose → suggest → simulate. Returns diagnosis + suggestions + simulated impact of the best change. Supports scope modes (daily/weekly/trend). |
79
+
80
+ ### Read-only — calls signalaf.com API (no auth)
81
+
82
+ | # | Tool | What it does |
83
+ |---|------|-------------|
84
+ | 7 | `get_leaderboard` | Fetch the live public leaderboard from signalaf.com. Returns all ranked operators sorted by yield, with codename, Υ, leverage, velocity, class, and rank position. |
85
+ | 8 | `get_operator` | Get any operator's full profile by codename. Returns detailed metrics + per-window breakdowns (7d/30d/90d/all-time) with the four token pillars per window. |
86
+ | 9 | `discover_peers` | Find mentors, peers, and complementary operators for your operator on the leaderboard. |
87
+
88
+ ### Read-only — local filesystem (no auth, no network)
89
+
90
+ | # | Tool | What it does |
91
+ |---|------|-------------|
92
+ | 10 | `tokenpull` | Pull your LOCAL token usage from session logs and rank it across all four windows — zero paste. Reads token counts, not message content. Numbers stay on your machine. 17 platform adapters. |
93
+ | 11 | `tokenpull_compare` | Pull token usage from ALL four local sources in parallel (JSONL canon, ccusage CLI, token-dashboard SQLite, tokscale) and compare side-by-side with delta % vs baseline. |
94
+ | 12 | `watch_tokenpull` | One poll per call — pulls local token logs and returns current cascade for the watched window. Re-call at your desired cadence to monitor. With `submit:true`, signs + publishes (rate-limited to once per 5 min). |
95
+
96
+ ### Write — submit to board (needs enrolled identity)
97
+
98
+ | # | Tool | What it does |
99
+ |---|------|-------------|
100
+ | 13 | `submit_paste` | Ranks a paste of token counts AND publishes to the live board in one call. Computes local preview, then submits to server for authoritative scoring. Returns both local + server results. |
101
+ | 14 | `tokenpull_submit` | Pull your LOCAL token usage AND publish to the board in one call — the zero-paste flow. Reads pillars per window, computes cascade, submits each window server-side. Token-only, no prompt content. |
102
+ | 15 | `submit_verified` | Publish your LOCAL token runs as a VERIFIED operator — the enrolled, signed path. Reads pillars, builds Schema 1.0 snapshot, ed25519-signs with your device key, POSTs to board. Requires `enroll` first. |
103
+ | 16 | `enroll` | Bind THIS device to your SigRank operator. Paste the key from signalaf.com → Settings → "New key". Generates + stores a local ed25519 keypair. Only the PUBLIC key is ever sent. |
104
+
105
+ ### Tokscale analytics — local tokscale data (no auth, no network)
106
+
107
+ | # | Tool | What it does |
108
+ |---|------|-------------|
109
+ | 17 | `tokscale_breakdown` | Per-model token breakdown across platforms (models under threshold → "other"). |
110
+ | 18 | `tokscale_market_share` | AI tool market share: each tool's % of tokens/cost/messages, ranked. From local tokscale data. |
111
+ | 19 | `tokscale_developer_profile` | Per-developer usage profile across all detected tools: model mix, pillars, sessions, workspaces. Paths redacted. |
112
+ | 20 | `tokscale_model_trends` | Model adoption over time: per-model first/last seen, active days, month-by-month adoption curve. |
113
+ | 21 | `tokscale_cost_analysis` | Cost per developer per model: cost_per_million_tokens, cost_per_message, share_cost, client rollup. |
114
+ | 22 | `tokscale_device_profile` | Device fingerprinting: installed tools, session counts, active days, day-of-week distribution, concurrency. Paths redacted. |
115
+ | 23 | `tokscale_mcp_usage` | MCP server usage: detected servers, detection window, active days. |
116
+ | 24 | `tokscale_competitive_intel` | Competitive intelligence for any AI tool: rank, model mix, cost efficiency, share vs all competitors. |
117
+
118
+ ### Moved to bestuser-router-mcp (5 intent tools)
119
+
120
+ The following 5 tools were moved to [bestuser-router-mcp](https://github.com/SunrisesIllNeverSee/bestuser-router-mcp) to keep sigrank-mcp focused as a measurement instrument. They are available as a separate npm package (`npx bestuser-router-mcp`):
121
+
122
+ | Tool | Intent | Trigger |
123
+ |------|--------|---------|
124
+ | `get_best_operator` | BEST_OPERATOR | "who is the best AI user?" |
125
+ | `compare_self` | COMPARE_SELF | "how do I measure up?" |
126
+ | `compare_operators` | COMPARE_OPERATORS | "compare X vs Y" |
127
+ | `describe_power_user` | DESCRIBE_POWER_USER | "what is a power user?" |
128
+ | `optimize_efficiency` | OPTIMIZE_EFFICIENCY | "how can I use AI more efficiently?" |
129
+
130
+ ## Intent Taxonomy
131
+
132
+ The intent-based tools (in bestuser-router-mcp) are designed to map natural-language queries to the right MCP call. Calling agents and LLMs can use these intent mappings to route user questions:
133
+
134
+ | Intent | Trigger phrases | Tool |
135
+ |--------|----------------|------|
136
+ | `BEST_OPERATOR` | "who is the best AI user?", "AI user leaderboard", "AI champions", "top AI operator" | `get_best_operator` |
137
+ | `COMPARE_SELF` | "how do I measure up?", "am I a power user?", "compare me to others", "am I using AI well?" | `compare_self` |
138
+ | `COMPARE_OPERATORS` | "compare operator X vs Y", "who is more efficient?", "how do two AI users compare?" | `compare_operators` |
139
+ | `DESCRIBE_POWER_USER` | "what is an AI power user?", "what makes a good AI user?", "describe advanced AI user behavior" | `describe_power_user` |
140
+ | `OPTIMIZE_EFFICIENCY` | "optimize token usage", "reduce token burn", "use AI efficiently", "stop tokenmaxxing" | `optimize_efficiency` |
141
+
142
+ ### Example prompt → tool mappings
143
+
144
+ - "Who is the best AI user right now?" → `get_best_operator`
145
+ - "How do I measure up to other AI users?" → `compare_self`
146
+ - "Am I an AI power user?" → `compare_self`
147
+ - "Compare operator X vs Y" → `compare_operators`
148
+ - "What is an AI power user?" → `describe_power_user`
149
+ - "How can I use AI more efficiently?" → `optimize_efficiency`
150
+ - "Show me the AI user leaderboard" → `get_best_operator` (or `get_leaderboard` for raw data)
151
+
152
+ ## Key Facts
153
+
154
+ | Field | Value |
155
+ |-------|-------|
156
+ | npm package | `sigrank` |
157
+ | GitHub | https://github.com/SunrisesIllNeverSee/sigrank-mcp |
158
+ | Website | https://signalaf.com |
159
+ | License | MIT |
160
+ | Transport | stdio |
161
+ | Platform | Cross-platform (Node.js) |
162
+ | Language | JavaScript |
163
+ | Tools | 24 |
164
+ | Auth | None for reads; Supabase anon key for submits |
165
+ | Category | Developer Tools |
166
+
167
+ ## Registries
168
+
169
+ - [Official MCP Registry](https://registry.modelcontextprotocol.io)
170
+ - [Smithery](https://smithery.ai)
171
+ - [Glama](https://glama.ai)
172
+ - [npm](https://www.npmjs.com/package/sigrank)
package/README.md CHANGED
@@ -1,16 +1,17 @@
1
- # SigRank MCP
1
+ # SigRank SignalAF MCP
2
2
 
3
- > **🏆 SigRank is live: [signalaf.com](https://signalaf.com)** — the leaderboard for how
4
- > efficiently you use AI, not how much. Run `npx sigrank` to see your cascade now.
5
- > _Token counts only. Never your prompts._
3
+ > **🏆 SigRank SignalAF is live: [signalaf.com](https://signalaf.com)** — the AI operator
4
+ > evaluation leaderboard. Ranks how efficiently you use AI by token cascade
5
+ > efficiency (Υ = cache_read × output / input²), not how much. Run `npx sigrank`
6
+ > to see your cascade now. _Token counts only. Never your prompts._
6
7
 
7
8
  <div align="center">
8
9
 
9
- <p><img src="./.github/assets/og-card.png" alt="SigRank — the new standard in AI evaluation &amp; benchmarks" width="800"></p>
10
+ <p><img src="./.github/assets/og-card.png" alt="SigRank SignalAF — AI operator evaluation and token cascade efficiency leaderboard" width="800"></p>
10
11
 
11
12
  **The yield cascade + live leaderboard as MCP tools any agent can call.**
12
13
 
13
- For all builders, burners and 10xers.
14
+ SigRank evaluates the human using the AI — not the AI model itself.
14
15
 
15
16
  [![npm version](https://img.shields.io/npm/v/sigrank.svg?style=flat-square&color=gold)](https://www.npmjs.com/package/sigrank)
16
17
  [![CI](https://github.com/SunrisesIllNeverSee/sigrank-mcp/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/SunrisesIllNeverSee/sigrank-mcp/actions/workflows/ci.yml)
@@ -31,7 +32,7 @@ For all builders, burners and 10xers.
31
32
 
32
33
  ## Table of Contents
33
34
 
34
- - [The SigRank ecosystem](#the-sigrank-ecosystem)
35
+ - [The SigRank SignalAF ecosystem](#the-sigrank-signalaf-ecosystem)
35
36
  - [Quickstart](#quickstart--3-steps-to-the-board)
36
37
  - [Install from GitHub](#install-from-github)
37
38
  - [Install via Smithery](#install-via-smithery)
@@ -49,19 +50,21 @@ For all builders, burners and 10xers.
49
50
 
50
51
  | The board | Your operator profile |
51
52
  | :-----------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------: |
52
- | [![SigRank leaderboard](./.github/assets/board.png)](https://signalaf.com/board/all) | [![SigRank operator profile](./.github/assets/profile.png)](https://signalaf.com) |
53
+ | [![SigRank SignalAF leaderboard](./.github/assets/board.png)](https://signalaf.com/board/all) | [![SigRank SignalAF operator profile](./.github/assets/profile.png)](https://signalaf.com) |
53
54
  | Every operator ranked by **Υ Yield** — the architecture of the cascade, not raw spend | Cascade layer, class, and fingerprint — derived from four token counts |
54
55
 
55
56
  > **Run [`sigrank enroll`](#sign-in--submit) then [`sigrank submit`](#sign-in--submit) to get ranked and claim your public profile at [signalaf.com](https://signalaf.com).**
56
57
 
57
58
  ---
58
59
 
59
- ## The SigRank ecosystem
60
+ ## The SigRank SignalAF ecosystem
60
61
 
61
62
  | Repo | What it is | Install |
62
63
  |------|-----------|---------|
63
64
  | **[sigrank-mcp](https://github.com/SunrisesIllNeverSee/sigrank-mcp)** (this repo) | The instrument — extracts 4 token pillars, computes the cascade, submits to the leaderboard. MCP server + TUI dashboard. | `npx sigrank` |
64
65
  | **[sigrank-app](https://github.com/SunrisesIllNeverSee/sigrank-app)** | The leaderboard — signalaf.com. Privacy-preserving operator profiles, class tiers, board rankings. | [signalaf.com](https://signalaf.com) |
66
+ | **[bestuser-router-mcp](https://github.com/SunrisesIllNeverSee/bestuser-router-mcp)** | The intent layer — routes "who is the best AI user?" queries to SigRank SignalAF's leaderboard. MCP server for AI assistants. | `npx bestuser-router-mcp` |
67
+ | **[sigarena](https://github.com/SunrisesIllNeverSee/sigarena)** | The satellite — public LLM operator evals at sigeconomy.com. Read-only leaderboard, SEO/AEO surface. | [sigeconomy.com](https://sigeconomy.com) |
65
68
  | **[signaf](https://github.com/SunrisesIllNeverSee/signa)** | The coach — reads your session logs, builds a taste profile, measures ASI, coaches you on token efficiency. | `npx @burnmydays/signaf` |
66
69
  | **[sigrank-vscode](https://github.com/SunrisesIllNeverSee/sigrank-vscode)** | The IDE extension — see your cascade metrics inline in VS Code. | `code --install-extension sigrank.sigrank` |
67
70
  | **[fundscore](https://github.com/SunrisesIllNeverSee/fundscore)** | The repo scorer — investor-readiness scoring for GitHub repos. CLI + MCP server. | `npx fundscore` |
@@ -71,7 +74,7 @@ For all builders, burners and 10xers.
71
74
  | Site | What it is |
72
75
  | ---- | ---------- |
73
76
  | **[SIGNOMY](https://signomy.xyz)** | Governed AI agent marketplace where ranked agents form teams, fill slots, run missions, and earn revenue under constitutional protocol. Agents are free. Operators pay. |
74
- | **[MO§ES](https://mos2es.com)** | The governance framework that underpins SigRank, SIGNOMY, and all governed agent operations. Structural accountability for agentic systems. |
77
+ | **[MO§ES](https://mos2es.com)** | The governance framework that underpins SigRank SignalAF, SIGNOMY, and all governed agent operations. Structural accountability for agentic systems. |
75
78
 
76
79
  ## Quickstart — 3 steps to the board
77
80
 
@@ -96,6 +99,7 @@ Or just explore without signing in:
96
99
  ```bash
97
100
  sigrank # launches the full tabbed TUI (dashboard, compare, board, watch)
98
101
  npx sigrank board --once # print the live leaderboard once
102
+ bunx sigrank board --once # same, via Bun (faster startup if you have it)
99
103
  ```
100
104
 
101
105
  ## Install from GitHub
@@ -124,7 +128,7 @@ sigrank
124
128
 
125
129
  ## Install via Smithery
126
130
 
127
- SigRank is available on [Smithery](https://smithery.ai/servers/burnmydays/sigrank) as a stdio MCP bundle — one-click install for Claude Desktop, Cursor, and other MCP clients.
131
+ SigRank SignalAF is available on [Smithery](https://smithery.ai/servers/burnmydays/sigrank) as a stdio MCP bundle — one-click install for Claude Desktop, Cursor, and other MCP clients.
128
132
 
129
133
  ### Smithery CLI
130
134
 
@@ -132,7 +136,7 @@ SigRank is available on [Smithery](https://smithery.ai/servers/burnmydays/sigran
132
136
  # Install Smithery CLI
133
137
  npm install -g smithery
134
138
 
135
- # Connect to SigRank (downloads the MCPB bundle locally)
139
+ # Connect to SigRank SignalAF (downloads the MCPB bundle locally)
136
140
  smithery mcp add burnmydays/sigrank --id sigrank
137
141
 
138
142
  # List available tools
@@ -154,7 +158,7 @@ smithery tool call sigrank rank_paste '{"text": "1000000 500000 50000 800000"}'
154
158
  ## Commands
155
159
 
156
160
  ```
157
- ⊙ SigRank CLI v0.0.177
161
+ ⊙ SigRank SignalAF CLI v0.0.177
158
162
 
159
163
  Default (no args)
160
164
  sigrank unified dashboard: cascade + token pillars + board
@@ -172,12 +176,15 @@ Commands
172
176
  watch live tune meter — ALL active platforms × all windows, every 30s
173
177
  watch --platform codex watch only one platform (optional filter)
174
178
  watch --window 7d watch only one window (optional filter)
179
+ proxy opt-in local Anthropic/OpenAI usage proxy
180
+ proxy --port 9000 run the proxy on a custom loopback port
175
181
 
176
182
  Options
177
183
  --window 7d · 30d · 90d · all (default: 30d for board; all windows for watch)
178
184
  --platform claude · codex · amp · gemini · opencode · goose · …
179
185
  --refresh poll interval in seconds (default: 30)
180
186
  --once print once and exit (board only)
187
+ --port proxy port (default: 8787)
181
188
 
182
189
  For AI clients (not typeable)
183
190
  In a piped/non-TTY context, sigrank is an MCP stdio server.
@@ -193,6 +200,34 @@ Examples
193
200
  sigrank board --window all --once
194
201
  ```
195
202
 
203
+ ### Optional API usage proxy
204
+
205
+ Some desktop coding agents receive provider usage in API responses but do not
206
+ persist it in their local session files. SigRank SignalAF can capture those
207
+ provider-reported counts through a manually started loopback proxy:
208
+
209
+ ```bash
210
+ sigrank proxy # http://localhost:8787
211
+ sigrank proxy --port 9000 # custom port
212
+ ```
213
+
214
+ Then point a compatible tool's API base URL at the displayed local URL. The
215
+ first release supports Anthropic Messages (`/v1/messages`), OpenAI Chat
216
+ Completions (`/v1/chat/completions`), and OpenAI Responses (`/v1/responses`).
217
+ The tool must support a custom API base URL; this is not guaranteed for every
218
+ desktop client.
219
+
220
+ The proxy is **off by default**: it opens no port and observes no traffic unless
221
+ you explicitly run `sigrank proxy`. It binds only to loopback and stops when the
222
+ command exits. Request and response content, API keys, and tool calls are
223
+ forwarded transiently but never written to disk. Only usage metadata is appended
224
+ to `~/.sigrank-mcp/proxy-sessions.jsonl` (directory `0700`, file `0600`).
225
+
226
+ Anthropic and OpenAI calls are currently grouped under one `proxy` platform row.
227
+ For streamed Chat Completions, SigRank SignalAF sets OpenAI's
228
+ `stream_options.include_usage=true` so the provider includes the final usage
229
+ chunk; response chunks are still forwarded immediately.
230
+
196
231
  ### The TUI is the whole app
197
232
 
198
233
  Launch it and sign in inside it:
@@ -277,6 +312,14 @@ Or if installed globally:
277
312
  | `compare_operators(a, b)` | `{codename_a, codename_b}` | Side-by-side comparison with behavioral verdict. Intent: "compare operator X vs Y" |
278
313
  | `describe_power_user()` | `{}` | Static explanation of AI power user archetype + metrics explained. Intent: "what is an AI power user?" |
279
314
  | `optimize_efficiency(codename? \| text?)` | `{codename?}` or `{text?}` | Ranked efficiency suggestions tied to your cascade shape. Intent: "how can I use AI more efficiently?" |
315
+ | `tokscale_breakdown(threshold?)` | `{threshold?}` | Per-model token breakdown across platforms (models under threshold → "other") |
316
+ | `tokscale_market_share()` | `{}` | AI tool market share: each tool's % of tokens/cost/messages, ranked. From local tokscale data |
317
+ | `tokscale_developer_profile()` | `{}` | Per-developer usage profile across all detected tools: model mix, pillars, sessions, workspaces. Paths redacted |
318
+ | `tokscale_model_trends()` | `{}` | Model adoption over time: per-model first/last seen, active days, month-by-month adoption curve |
319
+ | `tokscale_cost_analysis()` | `{}` | Cost per developer per model: cost_per_million_tokens, cost_per_message, share_cost, client rollup |
320
+ | `tokscale_device_profile()` | `{}` | Device fingerprinting: installed tools, session counts, active days, day-of-week distribution, concurrency. Paths redacted |
321
+ | `tokscale_mcp_usage()` | `{}` | MCP server usage: detected servers, detection window, active days |
322
+ | `tokscale_competitive_intel(target)` | `{target}` | Competitive intelligence for any AI tool: rank, model mix, cost efficiency, share vs all competitors |
280
323
 
281
324
  ---
282
325
 
@@ -324,28 +367,31 @@ Verifier numbers (ccusage/tokscale for codex) show **raw uncached input** (`inpu
324
367
 
325
368
  ## Platform adapters
326
369
 
327
- All adapters are token-only (no message content, no cost fields, no credentials).
328
-
329
- | Platform | Path | Notes |
330
- | ------------------ | ---------------------------------------------- | --------------------------------------------------------------- |
331
- | Claude Code | ✅ `~/.claude/projects` | Native; dedup by `(session_id, message_id)`; subagents included |
332
- | Codex | ✅ `~/.codex/sessions` | Estimated input via `io_ratio`; verified vs ccusage |
333
- | Devin CLI | ✅ `~/.local/share/devin/cli/sessions.db` | Estimated input via `io_ratio`; SQLite; same split as Codex |
334
- | Amp | ✅ `~/.local/share/amp/threads` | Full 4-pillar; per-message |
335
- | Kimi | ✅ `~/.kimi/sessions` | Full 4-pillar; `StatusUpdate` lines only |
336
- | pi-agent | ✅ `~/.pi/agent/sessions` | Full 4-pillar; per-message JSONL |
337
- | OpenClaw | ✅ `~/.openclaw` | Full 4-pillar; per-message JSONL |
338
- | Droid | ✅ `~/.factory/sessions/*.settings.json` | Full 4-pillar; thinking→output |
339
- | Codebuff | ✅ `~/.config/manicode` | Full 4-pillar; `chat-messages.json` |
340
- | Hermes | ✅ `~/.hermes/state.db` | Full 4-pillar; SQLite; reasoning→output |
341
- | Kilo | ✅ `~/.local/share/kilo/kilo.db` | Full 4-pillar; SQLite |
342
- | Qwen | ✅ `~/.qwen/projects` | `cacheCreate=0` estimated; thought→output |
343
- | Goose | ✅ `~/.local/share/goose/sessions/sessions.db` | `cacheCreate=cacheRead=0` estimated; SQLite |
344
- | Gemini CLI | ✅ `~/.gemini/tmp` | `cacheCreate=0` estimated; cache extracted from input field |
345
- | GitHub Copilot CLI | ✅ `~/.copilot/otel` | OTel JSONL; requires `COPILOT_OTEL_ENABLED=true` |
346
- | OpenCode | ⚠️ `~/.local/share/opencode` | Raw token counts not persisted in log format |
347
- | Cursor | 🔜 | Chat log path TBD |
348
- | Windsurf | 🔜 | Session logs at `~/.codeium/windsurf/` |
370
+ All adapters are token-only (no message content, no cost fields, no credentials). The table below is regenerated from the adapter file headers in `adapters/index.mjs` + `adapters/tokenpull.mjs` so the path, pillar shape, and notes match the actual code (a prior revision had drifted on Qwen/Codex/Copilot).
371
+
372
+ | Platform | Path | Pillar shape & notes |
373
+ | ------------------ | ---------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
374
+ | Claude Code | ✅ `~/.claude/projects` (recursive, incl. `subagents/`) | Native 4-pillar; dedup by `(session_id, message_id)` — final snapshot wins |
375
+ | Codex | ✅ `~/.codex/sessions` (+ `archived_sessions`) | `input_tokens` incl. cached → `input` + `cacheCreate` split window-level via `io_ratio`; `cacheRead` native (`cached_input_tokens`); `reasoning_output`→output; verified vs ccusage (~1%) |
376
+ | Devin CLI | ✅ `~/.local/share/devin/cli/sessions.db` | SQLite; native 4-pillar from `metadata.metrics` (`input_tokens`, `output_tokens`, `cache_read_tokens`, `cache_creation_tokens`); `input_tokens` is fresh (excludes cache) |
377
+ | Amp | ✅ `~/.local/share/amp/threads` | Native 4-pillar; per-message |
378
+ | Kimi | ✅ `~/.kimi/sessions` | Native 4-pillar; `StatusUpdate` lines only |
379
+ | pi-agent | ✅ `~/.pi/agent/sessions` | Native 4-pillar; per-message JSONL |
380
+ | oh-my-pi (`omp`) | ✅ `~/.omp/agent/sessions` (recursive, incl. nested subagent transcripts) | Native 4-pillar from `.message.usage` on `type:"message"` entries (`cacheWrite`→`cacheCreate`); **`reasoningTokens` is already inside `output`** — never added, or it double-counts; `usage.cost` reuses the same four key names for USD floats and is dropped; dedup by (session header `id`, entry `id`). Separate harness from pi-agent |
381
+ | OpenClaw | ✅ `~/.openclaw` | Native 4-pillar; per-message JSONL |
382
+ | Droid | ✅ `~/.factory/sessions/*.settings.json` | Native 4-pillar; `thinking_tokens`→output |
383
+ | Codebuff | ✅ `~/.config/manicode` | Native 4-pillar; `chat-messages.json` |
384
+ | Hermes | ✅ `~/.hermes/state.db` | Native 4-pillar; SQLite; `reasoning_tokens`→output |
385
+ | Kilo | ✅ `~/.local/share/kilo/kilo.db` | Native 4-pillar; SQLite |
386
+ | Qwen | ✅ `~/.qwen/projects` | Estimated (`cacheCreate=0` — no field in logs); `cacheRead` from `cachedContentTokenCount`; `thoughtsTokenCount`→output |
387
+ | Goose | ✅ `~/.local/share/goose/sessions/sessions.db` (or `$GOOSE_PATH_ROOT/data/sessions/sessions.db`) | Estimated (`cacheCreate=cacheRead=0` — no cache fields); reasoning = `total−input−output`→output; cumulative-column dedup by session id |
388
+ | Gemini CLI | ✅ `~/.gemini/tmp` | Estimated (`cacheCreate=0`); `cacheRead` from `cached` field; `thought`→output; `input` = `input−cached` (fresh) |
389
+ | GitHub Copilot CLI | ✅ `~/.copilot/otel` | Native 4-pillar (OTel spans: `llm.token_count.{prompt,completion,cache_creation,cache_read}`); requires `COPILOT_OTEL_ENABLED=true` + `COPILOT_OTEL_EXPORTER_TYPE=file` set **before** session start |
390
+ | OpenCode | ⚠️ `~/.local/share/opencode` | Data gap — logs store `cost:0` and derive tokens via LiteLLM at runtime; raw token counts not persisted. No pillars readable with current format |
391
+ | SigRank SignalAF proxy | ✅ `~/.sigrank-mcp/proxy-sessions.jsonl` | Opt-in native 4-pillar usage reported by Anthropic/OpenAI; same-timestamp records keep the last call; OpenAI cached input is separated from fresh input |
392
+ | Other (user JSON) | ✅ `$SIGRANK_OTHER_PATH` | User-supplied JSON `{ "windows": { "all": {input,output,cacheCreate,cacheRead} } }`; all-time only (no timestamps) |
393
+ | Cursor | 🔜 | Chat log path TBD |
394
+ | Windsurf | 🔜 | Session logs at `~/.codeium/windsurf/` |
349
395
 
350
396
  `estimated=true` means one or more pillars are derived, not native. The server re-scores all submitted pillars authoritatively; local preview Υ is indicative only.
351
397
 
@@ -353,7 +399,7 @@ All adapters are token-only (no message content, no cost fields, no credentials)
353
399
 
354
400
  ## Privacy
355
401
 
356
- - **Token-only, always.** No message content is ever read, logged, or transmitted — only token counts (`input`, `output`, `cache_creation`, `cache_read`), message IDs, and timestamps.
402
+ - **Token-only persistence and submission.** Local-log adapters read usage metadata only. The optional proxy necessarily handles provider-bound request and response bytes in memory, but never persists their content; it writes only token counts, model/backend metadata, and timestamps. Only token telemetry is submitted to SigRank SignalAF.
357
403
  - **Local by default.** `tokenpull` reads only `~/.claude/projects` (Claude) or `~/.codex` (Codex) on your device. Numbers stay on your machine unless you explicitly submit with a codename.
358
404
  - **Background tooling excluded.** Memory plugins, observers, summarizers (e.g. `claude-mem`, `mem0`, `observer-sessions`) are filtered from both Claude and Codex reads. `subagents/` are kept — they represent real operator work.
359
405
  - **Board reads are anonymous.** No account needed to browse, compare, or watch.
@@ -373,19 +419,20 @@ All adapters are token-only (no message content, no cost fields, no credentials)
373
419
  ## Dev / test
374
420
 
375
421
  ```bash
376
- node test.mjs # 13 test groups, 200 assertions (no network, no fs writes)
422
+ node test.mjs # 313-assertion baseline + proxy tests (local mocks only; temp filesystem)
377
423
  node sign.test.mjs # ed25519 signing + canon parity
378
424
  node index.mjs # stdio MCP server directly (pipe to MCP client)
379
425
  ```
380
426
 
381
- Tests verify (13 groups, 200 assertions):
427
+ Tests verify (14 groups, 313 assertions):
382
428
 
383
429
  - `rank_paste` canon: MO§ES `(1251211, 11296121, 128196310, 2555179769)` → Υ 18436.98 · TRANSMITTER
384
430
  - `submit_paste` preview (no codename) + POST shape (injected fetch, no live writes)
385
431
  - `tokenpull` dedup, window slicing, 4-window pillars (mock adapter)
386
432
  - `tokenpull_submit` all 4 windows POST, sha256 hash, ddmmyy stamp
387
433
  - `tokenpullCodex` io_ratio conversion per-window
388
- - Adapter registry (15 platforms) + per-adapter shape contracts
434
+ - Adapter registry (17 platforms) + per-adapter shape contracts
435
+ - Local proxy: Anthropic/OpenAI JSON + fragmented SSE, live pass-through, secure JSONL, error forwarding
389
436
  - `rank_windows` 4-window paste scoring, partial input, no-network
390
437
  - `watch_tokenpull` cascade snapshot, interval_s, submit path
391
438
  - `enroll` posts identity (public key only), maps 201 enrolled + 410 code_invalid
@@ -401,11 +448,12 @@ Tests verify (13 groups, 200 assertions):
401
448
  | File | Responsibility |
402
449
  | --------------- | ----------------------------------------------------------------------- |
403
450
  | `index.mjs` | Entry point — TTY detection, routes to CLI or MCP server |
451
+ | `proxy.mjs` | Opt-in loopback Anthropic/OpenAI proxy and usage capture |
404
452
  | `cli.mjs` | CLI commands: board, compare, watch, enroll, submit, help |
405
453
  | `tui.mjs` | Full tabbed TUI: Dashboard / Trends / Compare / Board / Watch / Connect |
406
454
  | `cascade.mjs` | Pure cascade math (Υ, SNR, leverage, velocity, 10xDEV, class) |
407
455
  | `tokenpull.mjs` | On-device log scanner — Claude, Codex, multi-platform |
408
- | `adapters.mjs` | Platform adapter registry (15+ platforms) |
456
+ | `adapters.mjs` | Platform adapter registry (16+ platforms) |
409
457
  | `tools.mjs` | MCP tool table + dispatcher |
410
458
  | `connect.mjs` | Connect-code enrollment + device identity |
411
459
  | `keystore.mjs` | Local key management (paste-keys, not API keys) |
@@ -420,7 +468,7 @@ Tests verify (13 groups, 200 assertions):
420
468
 
421
469
  ## Contributing
422
470
 
423
- Contributions welcome. SigRank MCP is built in the open.
471
+ Contributions welcome. SigRank SignalAF MCP is built in the open.
424
472
 
425
473
  - [Contributing guide](./.github/CONTRIBUTING.md)
426
474
  - [Security policy](https://github.com/SunrisesIllNeverSee/sigrank-mcp/security/policy)