Sprout is a tree command that understands projects. It respects your .gitignore, marks changes and hotspots in place, shows a pull request as a tree, and hands your agent a compact map with real signatures.
Also on Scoop, apt, dnf and apk, curl | sh and go install.
Real output of sprout on a sample Go and React project, partway through a feature branch.
Context that fits the window
sprout --ai writes a plain-text map for a prompt or an agent. It covers what the project is, its stack, entry points, CI and config, uncommitted work, recent hotspots and the layout. Then come the key files: the code everything else uses most, with real function and type signatures.
It never includes file contents. You set a token budget; folders open breadth-first while the map still fits, and your own code opens before tests and fixtures.
Drag the slider. Lines that change light up.
Know where to start reading
sprout --entry gives a new teammate a reading order: what the project is, where execution starts, then the files the rest of the code depends on most.
The ranking comes from real imports and references in Go, TypeScript, JavaScript, Python, Rust, Java and Kotlin. Tests don't vote. It works on repositories you haven't cloned, too.
sprout github.com/owner/repo --entry- 1README.mdwhat the project is
- 2cmd/api/main.goentry point
- 3cmd/seed/main.goentry point
- 4web/src/main.tsxentry point
- 5web/src/lib/types.tsused by 5 files
- 6web/src/lib/api.tsused by 4 files
- 7internal/trails/model.goused by 3 files
- 8internal/trails/store.goused by 3 files
- 9internal/conditions/feed.goused by 2 files
- 10internal/tiles/cache.goused by 2 files
- 11internal/trails/handler.goused by 2 files
- 12web/src/components/ConditionBadge.tsxused by 2 files
- 13internal/auth/middleware.goused by 1 file
- 14internal/auth/session.goused by 1 file
- 15internal/tiles/prefetch.goused by 1 file
Give your coding agent the map
Agents burn a large share of their context finding their way around, one ls, grep and file read at a time. Sprout runs as an MCP server, so they get oriented in a single call.
Or add { "command": "sprout", "args": ["mcp"] } to any MCP client.
project_mapThe --ai map with key signatures. Agents are told to call it first.reading_orderWhere to start, and why.treeAny folder, optionally with git status or churn.diff_treeWhat a branch changed, as a tree.
Read-only. Paths stay inside the project, symlinks included, and the server never clones.Setup and safety
# trailhead
Trail maps and conditions for hikers, online and off.
stack: Go (go.mod)
languages: TypeScript 35%, Go 33%, SQL 9%, Markdown 7%, YAML 7%, JSON 5%
size: 90 files, 22 directories
git: on feature/offline-maps, uncommitted: ? TODO.md, D docs/api.md, M internal/tiles/prefetch.go, M web/src/components/DownloadButton.tsx
most changed (90d, commits): web/src/styles/app.css (18), web/src/components/TrailMap.tsx (14), internal/trails/handler.go (10), internal/trails/store.go (7), web/src/lib/api.ts (6)
entry points: cmd/api/main.go, cmd/seed/main.go, web/src/main.tsx
… 1. README.md what the project is
2. cmd/api/main.go entry point
3. cmd/seed/main.go entry point
4. web/src/main.tsx entry point
5. web/src/lib/types.ts used by 5 files
…Fits the way you already work
Plain sprout is usually enough. When it isn’t, the flags follow conventions you already know, and your defaults live in a config file.
- .gitignore
- Git decides what’s shown. Anything hidden is counted on the last line.
sprout -a - --only --ignore
- gitignore patterns, anchored or with **, plus a .sproutignore.
sprout --only 'src/**/*.ts' - --size --sort
- True folder totals, even past --depth. Largest or newest first.
sprout --size --sort size -L 2 - --diff
- A pull request as a tree, with +/- lines rolled up per folder.
sprout --diff main...HEAD - --changed-within
- Only what you touched recently, without git.
sprout --changed-within 7d - github.com/…
- Map a repository you haven’t cloned. Private ones too.
sprout github.com/owner/repo --ai - .sproutrc
- Your defaults, per project or in ~/.config/sprout/config.
echo --hyperlink >> .sproutrc - --json
- A versioned schema for scripts, CI and PR bots.
sprout --diff main...HEAD --json
Fast on big repositories
Sprout reads only what the output needs and parses source files in parallel. A full tree of Kubernetes, all 31,412 files, takes under a quarter of a second.
Apple M4, warm filesystem cache, Sprout at 636d292. Medians from a controlled, interleaved run.
Controlled before/after measurements, and what didn't improve
sproutsprout --jsonsprout --entrysprout --aiInstall in one line
A single binary with no dependencies. git is only needed for git features.
Includes shell completions and man sprout.
Checks the SHA-256 and never uses sudo. Homebrew works too, and .deb, .rpm, .apk and Arch packages are on every release.
amd64 and arm64. Zips are on every release too.
Needs Go 1.22 or newer. Add completions with sprout --completion zsh (or bash, fish, powershell).
- 1Run it in a project
sprout - 2Find your way in
sprout --entry - 3Hand it to your agent
claude mcp add sprout -- sprout mcp