Skip to main content

Local, token-efficient cross-repo context for LLMs. CLI + MCP server.

Project description

crumbs

Local, token-efficient cross-repo context for LLMs.

crumbs indexes your repositories into compact context crumbs — file maps and symbol signatures (typed function/class/type declarations + one-line docs + line ranges), never the full file bodies. An assistant like Claude can then understand many repos at once by reading a tiny map instead of paying tokens to read the entire source tree.

Indexing this very tool produces a map of ~1,200 tokens standing in for ~8,400 tokens of source — an ~86% reduction — while still naming every file and symbol. Each symbol carries its full type signature and a source line range (e.g. def build_parser() -> ArgumentParser [L125-168]), so the assistant can open just that slice of a file rather than the whole thing.

  • 🪶 Zero dependencies. Pure Python 3.8+ stdlib. Runs on any device.
  • 🔒 Fully local. Crumbs live in ~/.crumbs. Nothing leaves your machine.
  • 🧠 Cross-repo. Search and pull context across every repo you've indexed.
  • 🎯 High signal. Python is parsed via ast; JS/TS/Go/Rust/etc. via fast regex. Skips node_modules, .git, build dirs, lockfiles, and binaries.

Install

The distribution is named crumbs-cli; it provides the crumbs command.

pipx install crumbs-cli       # isolated, on your PATH (recommended)
# or, no install at all:
uvx --from crumbs-cli crumbs --help
# or, from a clone:
pip install -e .              # dev install
python3 -m crumbs --help      # run without installing

Usage

crumbs index ~/code/my-api ~/code/my-web   # index one or more repos
crumbs list                                # show indexed repos + stats
crumbs map my-api --stats                  # compact map of one repo (+ token estimate)
crumbs search "auth token"                 # rank matching symbols across all repos
crumbs context "rate limiting" --repo my-api   # LLM-ready context slice
crumbs refresh                             # re-index everything
crumbs remove my-web                       # drop a repo from the index

A repo can be referenced by name, id, or path.

Use with Claude Code (MCP)

crumbs ships an MCP server (crumbs mcp) so an MCP host — Claude Code, Claude Desktop, or any MCP client — can call it as native tools. It speaks the MCP wire protocol over stdio with zero dependencies (no SDK).

One-command install (Claude Code plugin):

/plugin marketplace add crumbs1505/crumbs
/plugin install crumbs@crumbs

This bundles the MCP server and a skill; repo paths are auto-indexed on first use. See plugin/ for details.

Manual registration (e.g. in a project .mcp.json or your Claude Code config):

{
  "mcpServers": {
    "crumbs": { "command": "uvx", "args": ["--from", "crumbs-cli", "crumbs", "mcp"] }
  }
}

uvx fetches and runs crumbs on demand, so nothing needs to be installed first. (If you installed via pipx, use "command": "crumbs", "args": ["mcp"] instead.)

The server exposes five model-controlled tools — crumbs_map, crumbs_search, crumbs_context, crumbs_index, crumbs_list — and auto-indexes a repo path on first use, so there is no manual setup step.

Workflow with Claude

  1. crumbs index the repos you work across (once, or on a crumbs refresh cron).
  2. Ask Claude to run crumbs map <repo> or crumbs context "<topic>" instead of reading whole files. It gets the structure and the relevant symbols for a fraction of the tokens, then reads full files only where it actually needs to.

How it stays cheap

Full repo read crumbs map
What every byte of every file file tree + typed signatures + 1-line docs + line ranges
Bodies yes no
Cost grows with codebase grows with interface size

Because every symbol records its line range, the follow-up step is cheap too: the assistant reads path:start-end for the one function it needs instead of opening the entire file.

Storage layout (~/.crumbs, override with CRUMBS_HOME):

registry.json        # id -> {name, path, indexed_at, stats}
repos/<id>.json      # full crumb data for one repo

Supported languages

Python (AST), JavaScript/TypeScript, Go, Rust, and a generic declaration matcher for Java, Ruby, PHP, C/C++, C#, Swift, Kotlin. Markdown is indexed by heading. Anything else is skipped from symbol extraction but still ignored safely.

Tests

python3 -m unittest discover -s tests -v

Releasing

Releases are published to PyPI automatically by CI (.github/workflows/publish.yml) whenever a version tag is pushed. To cut a release:

  1. Bump the version in all three places: pyproject.toml, crumbs/__init__.py, and plugin/.claude-plugin/plugin.json (keep them in sync).

  2. Commit the bump and push to main.

  3. Tag and push it:

    git tag v0.3.1 && git push origin v0.3.1
    

CI then builds the sdist + wheel, runs twine check, and publishes to PyPI via Trusted Publishing (OIDC — no token stored in the repo). PyPI versions are immutable, so every release needs a new version number.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

crumbs_cli-0.3.2.tar.gz (21.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

crumbs_cli-0.3.2-py3-none-any.whl (20.1 kB view details)

Uploaded Python 3

File details

Details for the file crumbs_cli-0.3.2.tar.gz.

File metadata

  • Download URL: crumbs_cli-0.3.2.tar.gz
  • Upload date:
  • Size: 21.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for crumbs_cli-0.3.2.tar.gz
Algorithm Hash digest
SHA256 c5b4f10f99eba43c65ba6ee8952924d7ddc952fcdad5b7ac6d4133a11ab93db7
MD5 6275fdf74f154b042e7e2a8dda89aae2
BLAKE2b-256 0b6663c705b2480629f8ed1dc94c211e00271e2832dbcff89afc5e3938c18c17

See more details on using hashes here.

Provenance

The following attestation bundles were made for crumbs_cli-0.3.2.tar.gz:

Publisher: publish.yml on crumbs1505/crumbs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file crumbs_cli-0.3.2-py3-none-any.whl.

File metadata

  • Download URL: crumbs_cli-0.3.2-py3-none-any.whl
  • Upload date:
  • Size: 20.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for crumbs_cli-0.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 2c8c9e25622bf4666bde5a06ded9aab1b0176dd6505e60e87b4bf64dde5e6cd7
MD5 a13a5cd3a39bbfde81dd98daa7e93cb2
BLAKE2b-256 a8ed9926d263e088b942d45056d97f976f7dab64b6f1d908ab86b345f4c11508

See more details on using hashes here.

Provenance

The following attestation bundles were made for crumbs_cli-0.3.2-py3-none-any.whl:

Publisher: publish.yml on crumbs1505/crumbs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page