Skip to content
Canopy is in pre-release. These docs describe the product at its public launch — commands, tool names, and integration examples reflect what you'll see once binaries ship. Join the waitlist →

Index Your First Repo

If you ran canopy setup inside your repo, it already indexed it — this page explains what got built and how to re-index. If you skipped setup, indexing is one command.

Terminal window
cd ~/path/to/your/repo
canopy index

Expected output:

canopy: indexing /path/to/your/repo (incremental)
canopy: AST index done — 2104 files indexed, 12 skipped, 0 errors (2631 ms)
canopy: building full-text search index...
canopy: search index done — 2104 files, 46210 chunks, 46210 indexed (5892 ms)
canopy: generating vector embeddings...
canopy: embeddings done — 46210 vectors (local provider)

Everything is on by default: the AST index, the full-text search index, vector embeddings for semantic search — and git history is ingested automatically whenever a .git/ directory is present. The first run is the slow one; subsequent runs process only changed files.

FlagWhat it does
--fullWipe and re-index from scratch
--no-searchSkip the full-text index (AST-only — keyword/pattern/semantic recipes unavailable)
--no-embeddingsSkip vector embeddings (keyword-only index)
--with-git / --no-gitForce or skip git-history ingestion (auto by default)
--with-summariesBuild Tier-A file summaries on top — richer file-level answers
--list-ignoredShow what the ignore rules exclude, without indexing

Canopy respects .gitignore, ships sensible bundled defaults (lockfiles, build output, vendored code), and reads a .canopyignore file for anything repo-specific:

# .canopyignore — same syntax as .gitignore
generated/
*.snap
docs/internal/

Run canopy index --list-ignored to audit what’s being excluded.

Terminal window
canopy doctor
Index
status: indexed
database: ~/.canopy/<repo-id>/forge.db

canopy doctor is the one-stop readiness view — index status, license tier, active summary backend, and the data-flow line showing what (if anything) leaves your machine.

Everything is stored locally under ~/.canopy/<repo-id>/ — one directory per repo, holding the SQLite AST database, the Tantivy search index, and the vector store. To reset a repo completely:

Terminal window
canopy index --full

Canopy indexes 55+ languages and formats — symbols and import edges — from TypeScript, Python, Rust, Go, Java, Kotlin, C/C++, C#, Swift, Ruby, and PHP through build files (CMake, Gradle, Make), config formats (YAML, TOML, INI), Dockerfiles, GraphQL, Protobuf, and more. Files Canopy can’t parse structurally are still indexed for full-text search.

See Concepts: AST Parsing for how parsing works and its tradeoffs.

Connect to Claude Code — or just start asking: canopy answer "architecture overview".