{"_id":"@_mergescout/token-tracker","_rev":"3-8166af871bd70c5a74eeab3e854d7eee","name":"@_mergescout/token-tracker","dist-tags":{"latest":"1.3.0"},"versions":{"1.2.2":{"name":"@_mergescout/token-tracker","version":"1.2.2","keywords":["claude","claude-code","llm","tokens","usage","tracking","mergescout","anthropic"],"license":"MIT","_id":"@_mergescout/token-tracker@1.2.2","maintainers":[{"name":"mergescout","email":"msniff16@gmail.com"}],"homepage":"https://github.com/msniff16/MergeScout#readme","bugs":{"url":"https://github.com/msniff16/MergeScout/issues"},"bin":{"mergescout-token-tracker":"bin/llm-token-tracker.js"},"dist":{"shasum":"dbcc1960b3a8aafc211ca43b570a823f9f50f6aa","tarball":"https://registry.npmjs.org/@_mergescout/token-tracker/-/token-tracker-1.2.2.tgz","fileCount":9,"integrity":"sha512-vsdwydt86kMzUYd6HDHrTekEO5TBNPi1cPmZg6K3bCGS67xz1xZqysdIL3xzAV7ct9cpu99tk2qvvjJvTXEuaw==","signatures":[{"sig":"MEYCIQCY9kQurj3PEC7yHZIXYqf6Oum7rnC3lUEdhKk9u937cQIhAOBG2FhbvAbxe3Zg1fEjoCwzXhxBP3XwrGRIz6OvhEVB","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20487},"engines":{"node":">=18"},"gitHead":"863e631e976cb6fa614e914a4969bcd9d6ddacd8","_npmUser":{"name":"mergescout","email":"msniff16@gmail.com"},"repository":{"url":"git+https://github.com/msniff16/MergeScout.git","type":"git","directory":"packages/token-tracker"},"_npmVersion":"10.8.2","description":"Track Claude Code token usage per developer and per model. Reports locally or to a Merge Scout dashboard.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/token-tracker_1.2.2_1776272148550_0.3870590440500936","host":"s3://npm-registry-packages-npm-production"}},"1.2.3":{"name":"@_mergescout/token-tracker","version":"1.2.3","keywords":["claude","claude-code","llm","tokens","usage","tracking","mergescout","anthropic"],"license":"MIT","_id":"@_mergescout/token-tracker@1.2.3","maintainers":[{"name":"mergescout","email":"msniff16@gmail.com"}],"homepage":"https://github.com/msniff16/MergeScout#readme","bugs":{"url":"https://github.com/msniff16/MergeScout/issues"},"bin":{"mergescout-token-tracker":"bin/llm-token-tracker.js"},"dist":{"shasum":"4bf12a95393c13d319278bf9275e26767e646d5c","tarball":"https://registry.npmjs.org/@_mergescout/token-tracker/-/token-tracker-1.2.3.tgz","fileCount":10,"integrity":"sha512-h0+H9ovWSTkNUrQD6bE7mE0f/cVy6Ku1SbKraPC0MhjIvef9NLH5XxIwcd4rwCiOfCzk9zLZqAIofcbFE83INg==","signatures":[{"sig":"MEUCIQD6SXZ2yA6I23pJ2XfxvggFA+VSOjRbpDSz8l3rqa7gPQIgT+StD8OQePOwJ64IPHm3/J4XnKDmnAfJI/+vEoN+zi8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":28733},"engines":{"node":">=18"},"gitHead":"973f44a4733fde45a3ea9f406db6475d8b211971","_npmUser":{"name":"mergescout","email":"msniff16@gmail.com"},"repository":{"url":"git+https://github.com/msniff16/MergeScout.git","type":"git","directory":"packages/token-tracker"},"_npmVersion":"10.8.2","description":"Track Claude Code token usage per developer and per model. Reports locally or to a Merge Scout dashboard.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/token-tracker_1.2.3_1776274284714_0.49778527685957186","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@_mergescout/token-tracker","version":"1.3.0","description":"Track Claude Code token usage per developer and per model. Reports locally or to a Merge Scout dashboard.","bin":{"mergescout-token-tracker":"bin/llm-token-tracker.js"},"publishConfig":{"access":"public"},"engines":{"node":">=18"},"repository":{"type":"git","url":"git+https://github.com/msniff16/MergeScout.git","directory":"packages/token-tracker"},"keywords":["claude","claude-code","llm","tokens","usage","tracking","mergescout","anthropic"],"license":"MIT","_id":"@_mergescout/token-tracker@1.3.0","gitHead":"84cb56a76f551773b35691831f95f47428004f49","bugs":{"url":"https://github.com/msniff16/MergeScout/issues"},"homepage":"https://github.com/msniff16/MergeScout#readme","_nodeVersion":"22.22.0","_npmVersion":"10.9.4","dist":{"integrity":"sha512-n/8djFKuOScFzCCHbVKV0NhxUHwDLXpFq5Zbko5EReiKPwofeil9NUcynj+wClCaL0b2zvTmPqbziXZ1U9MS2A==","shasum":"8cccafdd58629faeda6733795ecddb78e779ba1e","tarball":"https://registry.npmjs.org/@_mergescout/token-tracker/-/token-tracker-1.3.0.tgz","fileCount":10,"unpackedSize":30970,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBP8NkYP/MruAoOZ2rPo3G6iHuW1/FjG/NFYlCOiyIFkAiB6ghKntrWbzEX+BV4ItSanyHbrSz42+pOrLhKuoburEg=="}]},"_npmUser":{"name":"mergescout","email":"msniff16@gmail.com"},"directories":{},"maintainers":[{"name":"mergescout","email":"msniff16@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/token-tracker_1.3.0_1777041057076_0.11308431337682046"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-15T16:55:48.443Z","modified":"2026-04-24T14:30:57.403Z","1.2.2":"2026-04-15T16:55:48.693Z","1.2.3":"2026-04-15T17:31:24.863Z","1.3.0":"2026-04-24T14:30:57.240Z"},"bugs":{"url":"https://github.com/msniff16/MergeScout/issues"},"license":"MIT","homepage":"https://github.com/msniff16/MergeScout#readme","keywords":["claude","claude-code","llm","tokens","usage","tracking","mergescout","anthropic"],"repository":{"type":"git","url":"git+https://github.com/msniff16/MergeScout.git","directory":"packages/token-tracker"},"description":"Track Claude Code token usage per developer and per model. Reports locally or to a Merge Scout dashboard.","maintainers":[{"name":"mergescout","email":"msniff16@gmail.com"}],"readme":"# @_mergescout/token-tracker\n\nCLI that tracks Claude Code token usage per developer and reports it to a Merge Scout org.\n\nInstalled as a Claude Code `Stop` hook — parses the session transcript when Claude Code exits and POSTs token counts (input, output, cache read, cache create) to Merge Scout. Also keeps a local JSONL log so `summary` works offline.\n\n> Previously published under the name `llm-token-tracker`. That name is now taken by an unrelated MCP-server package; this one moved to `@_mergescout/token-tracker` and the executable renamed to `mergescout-token-tracker`. If you had the old version installed, uninstall it first: `npm uninstall -g llm-token-tracker`.\n\n## Prerequisite — set your git identity globally\n\nThe CLI uses `git config --global user.email` to attribute each Claude Code session to a Merge Scout user. Set this **before** running `setup` or the hook silently drops every record. Use the email you sign into Merge Scout with.\n\n```bash\ngit config --global user.email \"you@example.com\"\ngit config --global user.name  \"Your Name\"\n```\n\n`setup` hard-fails with clear instructions if this isn't set. `setup --remote <KEY>` and the standalone `diagnose` command verify that the email resolves to an actual Merge Scout user.\n\n## Install\n\n```bash\n# Using bun (recommended)\nbun install -g @_mergescout/token-tracker\n\n# Or using npm\nnpm install -g @_mergescout/token-tracker\n```\n\n## Setup (one-time)\n\n```bash\n# Install the Claude Code hook (fails fast if git email isn't set globally)\nmergescout-token-tracker setup\n\n# Connect to Merge Scout (admin issues the key in Settings → Token Tracker)\n# Also auto-runs an end-to-end check reporting auth, email attribution, and repo scope\nmergescout-token-tracker setup --remote ms_abc123...\n```\n\nAfter that, every Claude Code session reports token usage automatically.\n\n> **Scope:** only sessions whose working directory is a clone of one of the org's selected GitHub repos are recorded in the Merge Scout dashboard. Sessions in other directories (side projects, personal repos, non-git dirs) are kept in the local log but dropped by the server. Adjust the selected set under **Settings → GitHub Connection**.\n\n## Commands\n\n```text\nmergescout-token-tracker setup              Install the Claude Code Stop hook (requires global git email set)\nmergescout-token-tracker setup --remote <KEY>   Connect to Merge Scout with an org API key + auto-diagnose\nmergescout-token-tracker diagnose           Full end-to-end check (hook, auth, email, repo scope)\nmergescout-token-tracker track              (internal — invoked by the hook)\nmergescout-token-tracker summary            Show local usage summary (today)\nmergescout-token-tracker summary --week     Last 7 days\nmergescout-token-tracker summary --month    Last 30 days\nmergescout-token-tracker summary --all      All time\nmergescout-token-tracker summary --project <name>  Filter by project\n```\n\n### Troubleshooting\n\nIf sessions aren't showing up in the Merge Scout dashboard, run `mergescout-token-tracker diagnose` from inside the repo where you work. It reports each link in the chain (hook installed, API key saved, git email set, email mapped to a Merge Scout user, repo in the selected-repos list) and prints a fix for any that fail.\n\n## Configuration\n\n| File | Purpose |\n|------|---------|\n| `~/.claude/settings.json` | Claude Code hook registration |\n| `~/.claude/token-tracker-config.json` | Merge Scout API key |\n| `~/.claude/token-usage/usage.jsonl` | Local usage log (offline backup) |\n\n### Environment variables\n\n- `LLM_TOKEN_TRACKER_URL` — override the Merge Scout server URL (default: `https://mergescout.com`). Useful for local development.\n\n## Privacy\n\nOnly token counts and session metadata (model, turns, git email, project basename, git remote owner/repo) are sent to Merge Scout. No prompt or response content ever leaves the machine.\n\n## Publishing\n\nPublished automatically by the `publish-cli.yml` GitHub Actions workflow whenever `packages/token-tracker/**` changes on the `production` branch and the version in `package.json` differs from the latest version on npm.\n\nTo cut a release: bump `version` in `package.json`, commit, push to `production`. The workflow handles the rest.\n\n## Development\n\nRuntime dependencies: none (pure Node 18+).\n\nThe CLI is CommonJS JavaScript. No build step — what you see is what ships.\n","readmeFilename":"README.md"}