{"id":48976019,"url":"https://github.com/digital-threads/token-pilot","last_synced_at":"2026-04-18T09:02:14.160Z","repository":{"id":341363858,"uuid":"1169850493","full_name":"Digital-Threads/token-pilot","owner":"Digital-Threads","description":"Save 60-80% tokens when AI reads code — MCP server for token-efficient code navigation with AST-aware structural reading","archived":false,"fork":false,"pushed_at":"2026-04-18T08:14:37.000Z","size":1008,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-04-18T08:36:36.472Z","etag":null,"topics":["ai-coding","ast","claude","claude-code","code-navigation","context-window","cursor","developer-tools","llm","mcp","mcp-server","model-context-protocol","token-optimization","tree-sitter"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/token-pilot","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Digital-Threads.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-03-01T10:15:33.000Z","updated_at":"2026-04-15T15:46:06.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Digital-Threads/token-pilot","commit_stats":null,"previous_names":["digital-threads/token-pilot"],"tags_count":23,"template":false,"template_full_name":null,"purl":"pkg:github/Digital-Threads/token-pilot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Digital-Threads%2Ftoken-pilot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Digital-Threads%2Ftoken-pilot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Digital-Threads%2Ftoken-pilot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Digital-Threads%2Ftoken-pilot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Digital-Threads","download_url":"https://codeload.github.com/Digital-Threads/token-pilot/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Digital-Threads%2Ftoken-pilot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31962889,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T00:39:45.007Z","status":"online","status_checked_at":"2026-04-18T02:00:07.018Z","response_time":103,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-coding","ast","claude","claude-code","code-navigation","context-window","cursor","developer-tools","llm","mcp","mcp-server","model-context-protocol","token-optimization","tree-sitter"],"created_at":"2026-04-18T09:02:12.824Z","updated_at":"2026-04-18T09:02:14.153Z","avatar_url":"https://github.com/Digital-Threads.png","language":"TypeScript","readme":"# Token Pilot\n\nMCP server that reduces token consumption in AI coding assistants by **up to 90%** via AST-aware lazy file reading.\n\nInstead of dumping entire files into the LLM context, Token Pilot returns structural overviews (classes, functions, signatures, line ranges) and lets the AI load only the specific symbols it needs.\n\n## How It Works\n\n```\nTraditional:  Read(\"user-service.ts\")  →  500 lines  →  ~3000 tokens\nToken Pilot:  smart_read(\"user-service.ts\")  →  15-line outline  →  ~200 tokens\n              read_symbol(\"UserService.updateUser\")  →  45 lines  →  ~350 tokens\n              After edit: read_diff(\"user-service.ts\")  →  ~20 tokens\n```\n\n**Up to 90% reduction** on large files. Files under 200 lines are returned in full automatically (zero overhead for small files).\n\n### Benchmarks (real data)\n\nMeasured on public open-source repos using the regex fallback parser (no ast-index binary). Files ≥50 lines only:\n\n| Repo | Files | Raw Tokens | Outline Tokens | Savings |\n|------|------:|----------:|--------------:|--------:|\n| [token-pilot](https://github.com/Digital-Threads/token-pilot) (TS) | 55 | 102,086 | 8,992 | **91%** |\n| [express](https://github.com/expressjs/express) (JS) | 6 | 14,421 | 193 | **99%** |\n| [fastify](https://github.com/fastify/fastify) (JS) | 23 | 50,000 | 3,161 | **94%** |\n| [flask](https://github.com/pallets/flask) (Python) | 20 | 78,236 | 7,418 | **91%** |\n| **Total** | **104** | **244,743** | **19,764** | **92%** |\n\n\u003e This measures `smart_read` structural outline savings only. Real sessions also benefit from session cache, dedup reminders, `read_symbol` targeted loading, and `read_for_edit` minimal context.\n\u003e\n\u003e Run the benchmark yourself: `npx tsx scripts/benchmark.ts`\n\n## Why This Approach Works\n\nThe biggest source of token waste in AI coding sessions isn't verbose prompts — it's **redundant context**. Every time a model re-reads a file, re-sends conversation history, or loads code it doesn't need, you pay for tokens that add no value.\n\nToken Pilot attacks this at three levels:\n\n1. **Symbol-first reading** — load outlines instead of full files, drill into specific functions on demand. This alone saves 60-90% on most reads.\n2. **Context budget control** — `max_tokens` parameter on `smart_read` auto-downgrades output (full → outline → compact) to fit within a token budget per step.\n3. **Session state management** — `session_snapshot` captures session state as a compact markdown block (\u003c200 tokens), enabling clean context compaction without losing track of what you're doing.\n\nThese aren't theoretical gains. In real sessions, the combination of structural reading + targeted symbol access + session snapshots consistently reduces token usage by 80-90% compared to raw file reads.\n\n## Installation\n\n### Quick Start (recommended)\n\nOne command creates `.mcp.json` with token-pilot + context-mode:\n\n```bash\nnpx -y token-pilot init\n```\n\nSafe to run in any project — if `.mcp.json` already exists, only adds missing servers without overwriting existing config.\n\nThis generates:\n\n```json\n{\n  \"mcpServers\": {\n    \"token-pilot\": { \"command\": \"npx\", \"args\": [\"-y\", \"token-pilot\"] },\n    \"context-mode\": { \"command\": \"npx\", \"args\": [\"-y\", \"claude-context-mode\"] }\n  }\n}\n```\n\n**That's it.** Restart your AI assistant. Both packages are downloaded automatically, ast-index binary is fetched on first run. No Rust, no Cargo, no manual setup.\n\n### Manual Setup\n\nAdd to your `.mcp.json` (project-level or `~/.mcp.json` for global):\n\n```json\n{\n  \"mcpServers\": {\n    \"token-pilot\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"token-pilot\"]\n    }\n  }\n}\n```\n\nWorks with: **Claude Code**, **Cursor**, **Codex**, **Antigravity**, **Cline**, and any MCP-compatible client.\n\n#### Cursor\n\nSettings → MCP Servers → Add:\n- Command: `npx`\n- Args: `-y token-pilot`\n\n#### Claude Code\n\n```bash\n# Current project only\nclaude mcp add token-pilot -- npx -y token-pilot\n\n# All projects (global)\nclaude mcp add --scope user token-pilot -- npx -y token-pilot\n\n# Shared via git (adds to .mcp.json)\nclaude mcp add --scope project token-pilot -- npx -y token-pilot\n```\n\n### From Source\n\n```bash\ngit clone https://github.com/Digital-Threads/token-pilot.git\ncd token-pilot\nnpm install \u0026\u0026 npm run build\n```\n\n```json\n{\n  \"mcpServers\": {\n    \"token-pilot\": {\n      \"command\": \"node\",\n      \"args\": [\"/path/to/token-pilot/dist/index.js\"]\n    }\n  }\n}\n```\n\n### ast-index (auto-installed)\n\nast-index is downloaded automatically on first run. If you prefer manual install:\n\n```bash\n# Homebrew (macOS / Linux)\nbrew tap defendend/ast-index \u0026\u0026 brew install ast-index\n\n# Or via Token Pilot CLI\nnpx token-pilot install-ast-index\n```\n\n### ast-grep (bundled)\n\n[ast-grep](https://ast-grep.github.io/) (`sg`) is included as optional dependency for structural code pattern search via `code_audit(check=\"pattern\")`. Installs automatically with `npm i -g token-pilot`.\n\n### PreToolUse Hook (Claude Code only)\n\nOptional Claude Code hook support:\n\n- blocks unbounded `Read` on large code files (\u003e500 lines) and points the agent to `smart_read`\n- adds `read_for_edit` guidance before `Edit`\n\n```bash\nnpx token-pilot install-hook            # Install\nnpx token-pilot uninstall-hook          # Remove\n```\n\n\u003e **Note:** With v0.7.4+ MCP instructions, the hook is less critical — AI agents already know to prefer Token Pilot tools.\n\n## How AI Agents Know to Use Token Pilot\n\n**No configuration needed.** Token Pilot uses the MCP protocol's `instructions` field to automatically tell AI agents when to use its tools instead of built-in defaults (Read, cat, Grep).\n\nWhen connected, every MCP client receives rules like:\n\n```\nWHEN TO USE TOKEN PILOT (saves up to 80% tokens):\n• Reading code files → smart_read (returns structure, not raw content)\n• Need one function/class → read_symbol (loads only that symbol)\n• Exploring a directory → outline (all symbols in one call)\n• Long session? → session_snapshot (capture state before compaction)\n...\nWHEN TO USE DEFAULT TOOLS (Token Pilot adds no value):\n• Regex/pattern search → use Grep/ripgrep, NOT find_usages\n• You need exact raw content for copy-paste → use Read\n```\n\nThis works on **Claude Code, Cursor, Codex, Antigravity**, and any MCP-compatible client — no project-level rules files needed.\n\n### Optional: Project-Level Rules\n\nFor more control, you can add rules to your project:\n\n- **Claude Code** → `CLAUDE.md` in project root\n- **Cursor** → `.cursorrules` in project root\n- **Codex** → `AGENTS.md` in project root\n\n## MCP Tools (21)\n\n### Core Reading\n\n| Tool | Instead of | Description |\n|------|-----------|-------------|\n| `smart_read` | `Read` | AST structural overview: classes, functions, methods with signatures. Up to 90% savings on large files. Framework-aware: shows HTTP routes, column types, validation rules. `max_tokens` param for budget-constrained sessions. |\n| `read_symbol` | `Read` + scroll | Load source of a specific symbol. Supports `Class.method`. `show` param: full/head/tail/outline. |\n| `read_symbols` | N x `read_symbol` | Batch read multiple symbols from one file in a single call (max 10). One round-trip instead of N. |\n| `read_for_edit` | `Read` before `Edit` | Minimal RAW code around a symbol — copy directly as `old_string` for Edit tool. Batch mode: pass `symbols` array for multiple edit contexts. |\n| `read_range` | `Read` offset | Read a specific line range from a file. |\n| `read_diff` | re-`Read` | Show only changed hunks since last smart_read. Requires smart_read before editing (for baseline). Works with any edit tool. |\n| `smart_read_many` | multiple `Read` | Batch smart_read for up to 20 files in one call. |\n\n### Search \u0026 Navigation\n\n| Tool | Instead of | Description |\n|------|-----------|-------------|\n| `find_usages` | `Grep` (refs) | All usages of a symbol: definitions, imports, references. Filters: `scope`, `kind`, `lang`, `limit`. Use `context_lines` to include surrounding source code. |\n| `project_overview` | `ls` + explore | Dual-detection (ast-index + config files) with confidence scoring. Project type, frameworks, quality tools, CI, architecture, directory map. Filter sections with `include`. |\n| `related_files` | manual explore | Import graph: what a file imports, what imports it, test files. |\n| `outline` | multiple `smart_read` | Compact overview of all code files in a directory. One call instead of 5-6. Supports `recursive` mode with `max_depth` for deep exploration. |\n| `find_unused` | manual | Detect dead code — unused functions, classes, variables. |\n| `code_audit` | multiple `Grep` | Code quality issues in one call: TODO/FIXME comments, deprecated symbols, structural code patterns (via ast-grep), decorator search. |\n| `module_info` | manual analysis | Module dependency analysis: dependencies, dependents, public API, unused deps. Use for architecture understanding and dependency cleanup. |\n| `smart_diff` | raw `git diff` | Structural diff with AST symbol mapping — shows which functions/classes changed instead of raw patch. Affected symbols summary at top. Scopes: unstaged, staged, commit, branch. |\n| `explore_area` | outline + related_files + git log | One-call directory exploration: structure, imports, tests, recent changes. Replaces 3-5 separate calls. |\n| `smart_log` | raw `git log` | Structured commit history with category detection (feat/fix/refactor/docs), file stats, author breakdown. Filters by path and ref. |\n| `test_summary` | raw test output | Run tests and get structured summary: total/passed/failed + failure details. Supports vitest, jest, pytest, phpunit, go, cargo, rspec, mocha. |\n\n### Session \u0026 Analytics\n\n| Tool | Description |\n|------|-------------|\n| `session_snapshot` | Capture session state as a compact markdown block (\u003c200 tokens): goal, decisions (with reasoning), confirmed facts, relevant files, blockers, next step. Decisions field prevents revisiting rejected approaches after compaction. |\n| `session_analytics` | Token savings report: total saved, per-tool breakdown, top files, per-intent breakdown, decision insights, policy advisories. |\n\n## CLI Commands\n\n```bash\ntoken-pilot                      # Start MCP server (uses cwd as project root)\ntoken-pilot /path/to/project     # Start with specific project root\ntoken-pilot init [dir]           # Create/update .mcp.json (token-pilot + context-mode)\ntoken-pilot install-ast-index    # Download ast-index binary (auto on first run)\ntoken-pilot install-hook [root]  # Install PreToolUse hook\ntoken-pilot uninstall-hook       # Remove hook\ntoken-pilot hook-read \u003cfile\u003e     # Hook handler (called by Claude Code)\ntoken-pilot hook-edit            # Edit hook handler (called by Claude Code)\ntoken-pilot doctor               # Run diagnostics (ast-index, config, updates)\ntoken-pilot --version            # Show version\ntoken-pilot --help               # Show help\n```\n\n## Configuration\n\nCreate `.token-pilot.json` in your project root to customize behavior:\n\n```json\n{\n  \"smartRead\": {\n    \"smallFileThreshold\": 200,\n    \"advisoryReminders\": true\n  },\n  \"cache\": {\n    \"maxSizeMB\": 100,\n    \"watchFiles\": true\n  },\n  \"git\": {\n    \"watchHead\": true,\n    \"selectiveInvalidation\": true\n  },\n  \"contextMode\": {\n    \"enabled\": \"auto\",\n    \"adviseDelegation\": true,\n    \"largeNonCodeThreshold\": 200\n  },\n  \"policies\": {\n    \"preferCheapReads\": true,\n    \"maxFullFileReads\": 10,\n    \"warnOnLargeReads\": true,\n    \"largeReadThreshold\": 2000,\n    \"requireReadForEditBeforeEdit\": true\n  },\n  \"display\": {\n    \"showImports\": true,\n    \"showDocs\": true,\n    \"maxDepth\": 2,\n    \"showTokenSavings\": true\n  },\n  \"ignore\": [\n    \"node_modules/**\",\n    \"dist/**\",\n    \".git/**\"\n  ]\n}\n```\n\nAll fields are optional — sensible defaults are used for anything not specified.\n\n### Key Config Options\n\n| Option | Default | Description |\n|--------|---------|-------------|\n| `smartRead.smallFileThreshold` | `200` | Files with fewer lines are returned in full (no AST overhead). |\n| `cache.maxSizeMB` | `100` | Max memory for file cache. LRU eviction when exceeded. |\n| `cache.watchFiles` | `true` | Auto-invalidate cache on file changes (chokidar). |\n| `git.watchHead` | `true` | Watch `.git/HEAD` for branch switches, invalidate changed files. |\n| `contextMode.enabled` | `\"auto\"` | Detect context-mode plugin. `true`/`false` to force. |\n| `contextMode.adviseDelegation` | `true` | Suggest context-mode for large non-code files. |\n| `policies.preferCheapReads` | `true` | Advisory hints when expensive tool used where cheaper exists. |\n| `policies.maxFullFileReads` | `10` | Warn after N full-file reads in session. |\n| `policies.warnOnLargeReads` | `true` | Warn when single response exceeds threshold. |\n| `policies.largeReadThreshold` | `2000` | Token threshold for large read warning. |\n\n## Integration with context-mode\n\nToken Pilot is **complementary** to [claude-context-mode](https://github.com/mksglu/claude-context-mode):\n\n| Responsibility | Token Pilot | context-mode |\n|----------------|-------------|--------------|\n| Code files (.ts, .py, .rs, ...) | AST-level structural reading | - |\n| Shell output (npm test, git log) | - | Sandbox + BM25 |\n| Large data files (JSON, CSV, logs) | Structural summary | Deep BM25-indexed analysis |\n| Re-reads of unchanged files | Compact reminders (~20 tokens) | - |\n\nWhen both are configured, Token Pilot automatically:\n- Detects context-mode via `.mcp.json`\n- Suggests context-mode for large non-code files\n- Shows combined architecture info in `session_analytics`\n\n**Combined savings: up to 90%** in a typical coding session.\n\n## Supported Languages\n\nToken Pilot supports all 29 languages that [ast-index](https://github.com/defendend/Claude-ast-index-search) supports:\n\nTypeScript, JavaScript, Python, Rust, Go, Java, Kotlin, Swift, Objective-C, C#, C++, C, PHP, Ruby, Scala, Dart, Lua, Shell/Bash, SQL, R, Vue, Svelte, Perl, Groovy, Elixir, Common Lisp, Matlab, Protocol Buffers, BSL (1C:Enterprise)\n\nPlus structural summaries for non-code files: JSON, YAML, Markdown, TOML, XML, CSV.\n\n## Troubleshooting\n\n### Verify installation\n\n```bash\nnpx token-pilot --help          # Should print CLI help\nnpx token-pilot --version       # Should print current version\nnpx token-pilot doctor          # Run diagnostics (checks ast-index, config, etc.)\n```\n\n### Common issues\n\n| Problem | Fix |\n|---------|-----|\n| `smart_read` returns full file content (no savings) | ast-index not found. Run `npx token-pilot install-ast-index` |\n| `command not found: token-pilot` | Use `npx -y token-pilot` (npx downloads automatically) |\n| MCP server doesn't start in Claude Code | Check `claude mcp list` — server should be listed. Restart Claude Code after adding. |\n| ast-index binary not found | Run `npx token-pilot doctor` to diagnose. Try `npx token-pilot install-ast-index` to re-download. |\n\n### Updating\n\n`npx -y token-pilot` always fetches the latest version from npm. To force a clean update:\n\n```bash\nnpx clear-npx-cache              # Clear npx cache\nnpx -y token-pilot --version     # Verify new version\n```\n\nToken Pilot also checks for updates on startup and logs a notice to stderr if a newer version is available.\n\n## Development\n\n```bash\nnpm install          # Install dependencies\nnpm run build        # Compile TypeScript\nnpm test             # Run tests\nnpm run test:watch   # Run tests in watch mode\nnpm run dev          # TypeScript watch mode\n```\n\n## Architecture\n\n```\nsrc/\n  index.ts              — CLI entry point and server bootstrap\n  server.ts             — MCP server setup, tool definitions, instructions\n  types.ts              — Core domain types\n  ast-index/\n    client.ts           — ast-index CLI wrapper (22+ methods)\n    binary-manager.ts   — Auto-download \u0026 manage ast-index binary\n    tar-extract.ts      — Minimal tar extractor (zero deps)\n    types.ts            — ast-index response types (20+ interfaces)\n  core/\n    file-cache.ts       — LRU file cache with staleness detection\n    context-registry.ts — Advisory context tracking + compact reminders\n    symbol-resolver.ts  — Qualified symbol resolution\n    token-estimator.ts  — Token count estimation\n    session-analytics.ts — Token savings tracking with intent + decision trace\n    validation.ts       — Input validators for all tools\n    format-duration.ts  — Shared duration formatter\n    project-detector.ts — Config-based project detection (frameworks, CI, quality tools)\n    confidence.ts       — Confidence metadata for response completeness\n    intent-classifier.ts — Tool → intent mapping (edit/debug/explore/review/analyze/search/read)\n    budget-planner.ts   — Advisory: suggests cheaper tool alternatives\n    decision-trace.ts   — Per-call instrumentation (cost, context state, alternatives)\n    session-cache.ts    — Tool-result-level caching with invalidation\n    architecture-fingerprint.ts — Cross-session architecture caching\n    policy-engine.ts    — Configurable team policies for consistent savings\n  config/\n    loader.ts           — Config loading + deep merge\n    defaults.ts         — Default config values\n  formatters/\n    structure.ts        — AST outline → text formatter\n  handlers/\n    smart-read.ts       — smart_read handler\n    read-symbol.ts      — read_symbol handler\n    read-range.ts       — read_range handler\n    read-diff.ts        — read_diff handler (O(n) diff)\n    smart-read-many.ts  — Batch smart_read\n    find-usages.ts      — find_usages handler (scope/kind/lang/limit filters)\n    read-for-edit.ts    — read_for_edit handler (minimal edit context)\n    related-files.ts    — related_files handler (import graph)\n    outline.ts          — outline handler (recursive directory overview)\n    find-unused.ts      — find_unused handler\n    code-audit.ts       — code_audit handler (TODOs, deprecated, patterns)\n    project-overview.ts — project_overview (dual-detection + confidence)\n    module-info.ts      — module_info handler (deps, dependents, API, unused)\n    smart-diff.ts       — smart_diff handler (structural git diff + symbol mapping)\n    explore-area.ts     — explore_area handler (outline + imports + tests + changes)\n    smart-log.ts        — smart_log handler (structured git log + category detection)\n    test-summary.ts     — test_summary handler (run tests + parse output)\n    non-code.ts         — JSON/YAML/MD/TOML structural summaries\n  git/\n    watcher.ts          — Git HEAD watcher (branch switch detection)\n    file-watcher.ts     — File system watcher (cache invalidation)\n  hooks/\n    installer.ts        — Hook install/uninstall for Claude Code\n  integration/\n    context-mode-detector.ts — context-mode presence detection\n```\n\n## Credits\n\nToken Pilot is built on top of these excellent open-source projects:\n\n- **[ast-index](https://github.com/defendend/Claude-ast-index-search)** by [@defendend](https://github.com/defendend) — Rust-based AST indexing engine with tree-sitter, SQLite FTS5, and support for 29 programming languages. Token Pilot uses it as the backend for all code analysis.\n- **[claude-context-mode](https://github.com/mksglu/claude-context-mode)** by [@mksglu](https://github.com/mksglu) — Complementary MCP plugin for shell output and data file processing via sandbox + BM25. Token Pilot integrates with it for maximum combined savings.\n- **[Model Context Protocol](https://modelcontextprotocol.io/)** by Anthropic — The protocol that makes all of this possible.\n\n## License\n\nMIT\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdigital-threads%2Ftoken-pilot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdigital-threads%2Ftoken-pilot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdigital-threads%2Ftoken-pilot/lists"}