agentmap
Prepare codebases for AI agents by generating structured documentation that helps AI assistants understand and navigate your code effectively.
What It Does
agentmap scans your codebase and generates a hierarchical documentation structure organized by modules:
.agentmap/
βββ INDEX.md # L0: Global routing table
βββ modules/
β βββ {module-slug}/
β βββ MODULE.md # L1: Module summary
β βββ outline.md # L1: Symbol maps for this module
β βββ memory.md # L1: Warnings/TODOs for this module
β βββ imports.md # L1: Dependencies for this module
βββ files/
βββ {file-slug}.md # L2: Deep docs for complex files (optional)
Content Hierarchy
| Level | File | Purpose | Size |
|---|---|---|---|
| L0 | INDEX.md |
Global routing table with module overview | O(modules) |
| L1 | MODULE.md |
Module summary, file list, entry points | O(files in module) |
| L1 | outline.md |
Symbol maps for large files in module | O(large files) |
| L1 | memory.md |
Warnings and TODOs scoped to module | O(markers) |
| L1 | imports.md |
Intra/inter-module dependencies | O(imports) |
| L2 | files/*.md |
Deep documentation for complex files | O(symbols) |
Why?
AI coding assistants struggle with large codebases because they can't see the full picture. agentmap provides:
- Hierarchical navigation so AI loads only what it needs (not entire codebase docs)
- Module detection that groups files into semantic units automatically
- Symbol maps so AI knows what's in large files without reading them entirely
- Scoped context so each module's docs contain only relevant information
Installation
Homebrew (macOS) β Recommended
npm / pnpm / yarn / bun
Quick Install Script
|
From crates.io
From Source
Manual Download
Download prebuilt binaries from GitHub Releases.
Usage
Basic
# Generate docs for current directory (hierarchical mode - default)
# Output to custom directory
# Preview without writing files
# Verbose output
Remote Repositories
# Analyze a GitHub repository directly
# With depth limiting for large repos
Git Diff Mode
# Show only files changed since a branch
# Compare against a specific commit
JSON Output
# Output analysis as JSON (for tooling integration)
# Combine with other flags
Options
Usage: agentmap [OPTIONS] [PATH]
Arguments:
[PATH] Target directory or GitHub URL [default: .]
Options:
-o, --output <OUTPUT> Output directory [default: .agentmap]
-t, --threshold <THRESHOLD> Line threshold for "large" files [default: 500]
-c, --complex-threshold <COMPLEX> Symbol threshold for L2 file docs [default: 30]
-d, --depth <DEPTH> Max directory depth (0 = unlimited) [default: 0]
--diff <REF> Compare against git branch/commit
--json Output JSON to stdout instead of markdown files
--check Check if docs are stale (exit 1 if regeneration needed)
--config <FILE> Path to config file
--force Force regenerate all modules (ignore cache)
-i, --ignore <IGNORE> Additional patterns to ignore
-l, --lang <LANG> Filter by language
--no-gitignore Don't respect .gitignore
--dry-run Preview output without writing
-v, --verbose... Increase verbosity (-v, -vv, -vvv)
-q, --quiet Suppress all output
-h, --help Print help
-V, --version Print version
Commands:
watch Watch for file changes and regenerate docs automatically
hooks Manage git hooks for automatic regeneration
init Initialize agentmap configuration
update Update agentmap to the latest version
Watch Mode
Keep documentation in sync automatically during development:
# Start watching for changes (regenerates on file save)
# Custom debounce delay (default: 300ms)
Watch mode leverages the incremental manifest system, so only changed modules are regenerated.
Git Hooks
Automate documentation regeneration at key git events:
# Install hooks (auto-detects Husky, Lefthook, pre-commit, or native git)
# Force specific hook manager
# Remove hooks
# Skip hooks temporarily
AGENTMAP_SKIP=1
Supported Hook Managers
| Manager | Detection | Hooks Supported |
|---|---|---|
| Native git | Fallback | pre-commit, post-checkout, post-merge |
| Husky | .husky/ directory |
pre-commit, post-checkout, post-merge |
| Lefthook | lefthook.yml |
pre-commit, post-checkout, post-merge |
| pre-commit | .pre-commit-config.yaml |
pre-commit only |
Installed hooks:
- pre-commit: Regenerates docs and stages
.agentmap/ - post-checkout: Regenerates after branch switch (background)
- post-merge: Regenerates after pull/merge (background)
Best Practices
Should I commit .agentmap/?
| Team Size | Branches | Recommendation |
|---|---|---|
| Solo / Small (1-5) | Few | Commit - docs available immediately on clone |
| Medium (5-15) | Many | Ignore - avoid merge conflicts |
| Large (15+) | Many | Ignore - use CI to validate freshness |
| Open Source Library | Any | Commit - showcase output for contributors |
Approach A: Commit .agentmap/ (Small teams / OSS)
Best when you want docs available immediately after git clone.
# Install hooks to keep docs synced across branches
Add to .gitattributes to reduce merge conflicts:
.agentmap/**
Approach B: Ignore .agentmap/ (Larger teams)
Best when multiple developers work on many branches.
# .gitignore
.agentmap/
Each developer runs once after cloning:
Docs auto-regenerate on git checkout, git pull, and git commit.
Approach C: CI-only (Strict freshness)
Generate docs in CI, never commit locally:
# .gitignore
.agentmap/
# .github/workflows/docs.yml
- name: Generate agentmap docs
run: agentmap
- name: Upload as artifact
uses: actions/upload-artifact@v4
with:
name: agentmap-docs
path: .agentmap/
Configuration File
Create agentmap.toml for project-specific settings:
# Generate default config file
# Use custom config location
Example agentmap.toml:
= ".agentmap"
= 500
= 1000
= ["*.test.ts", "fixtures/", "__mocks__/"]
[]
= 300
CLI flags override config file values.
AI Tool Templates
Generate ready-to-use configuration templates for popular AI coding tools:
# Generate all templates (.cursorrules, CLAUDE.md, AGENTS.md)
# Generate specific templates only
Supported tools:
- Cursor (
.cursorrules) - Instructions for Cursor IDE - Claude Code (
CLAUDE.md) - Instructions for Claude Code - OpenCode (
AGENTS.md) - Instructions for OpenCode
Templates are non-destructive: they append to existing files and skip if agentmap section already exists.
MCP Server
agentmap can run as an MCP server for AI tools like Claude Desktop and Cursor:
# Using npx (no install required)
# Or if installed globally
Available tools:
| Tool | Description |
|---|---|
regenerate |
Regenerate documentation |
get_module |
Get module docs by slug |
check_stale |
Check if docs need update |
get_outline |
Get symbol outline for a file |
Example MCP config (Claude Desktop, Cursor, etc.):
See MCP Server Documentation for setup instructions and integration guides.
CI Integration
Validate documentation freshness in CI pipelines:
# Check if docs are stale (exit 0 = fresh, exit 1 = stale)
# Combine with diff mode
Example GitHub Actions workflow:
name: Check Agentmap
on:
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install agentmap
run: cargo install agentmap
- name: Check docs freshness
run: agentmap --check
Module Detection
agentmap automatically detects module boundaries using language-specific conventions:
| Language | Explicit Boundary | Example |
|---|---|---|
| Rust | mod.rs, lib.rs |
src/analyze/mod.rs β module src-analyze |
| Python | __init__.py |
src/utils/__init__.py β module src-utils |
| JavaScript/TypeScript | index.{js,ts,tsx} |
src/components/index.ts β module src-components |
| Any | 5+ source files in directory | src/helpers/ with 5+ files β implicit module |
Module Slug Naming
Directory paths are converted to slugs using hyphens:
src/analyze/langβsrc-analyze-langlib/utilsβlib-utils
Example Output
INDEX.md (L0 Global)
**Start here**, then navigate to specific modules.
1. 2.3.4.
- -
MODULE.md (L1 Module)
[β Back to INDEX](../../INDEX.md)
-
- --
outline.md (L1 Module-Scoped)
memory.md (L1 Module-Scoped)
Supported Languages
| Language | Symbol Extraction | Import Graph | Memory Markers | Module Detection |
|---|---|---|---|---|
| Rust | β Functions, structs, enums, traits, impls | β | β | β
mod.rs |
| Python | β Functions, classes, methods | β | β | β
__init__.py |
| JavaScript/TypeScript | β Functions, classes, arrow functions | β | β | β
index.{js,ts} |
| Go | β Functions, structs, interfaces, methods | β | β | β implicit |
| Swift | β Functions, classes, structs, enums, protocols | β | β | β implicit |
| Dart | β Functions, classes, mixins, extensions | β | β | β implicit |
| Ruby | β Methods, classes, modules | β | β | β implicit |
| C# | β Methods, classes, structs, interfaces | β | β | β implicit |
| Java | β Methods, classes, interfaces, enums | β | β | β implicit |
Memory Markers
agentmap extracts these comment patterns:
| Pattern | Category | Priority |
|---|---|---|
TODO, FIXME, XXX, BUG, HACK |
Technical Debt | Medium |
WARNING, WARN |
Warnings | High |
SAFETY, INVARIANT |
Safety | High |
RULE, POLICY |
Business Rules | High |
DEPRECATED |
Technical Debt | High |
NOTE |
Notes | Low |
Integration with AI Tools
Claude Code / Cursor
Add to your project's AI instructions:
Before working on this codebase, read:
1. .agentmap/INDEX.md - for project overview and module routing
2. Navigate to relevant module's MODULE.md for details
3. Check module's memory.md for warnings before editing
4. Consult module's outline.md for large file navigation
GitHub Copilot
Include .agentmap/ in your workspace context.
JSON Integration
For programmatic access:
|
JSON output includes:
modules[]- Array of module metadata (slug, path, file_count, warning_count, symbol_count, is_hub)files[]- All scanned files with metadatamemory[]- All memory markers with locationsentry_points[]- Detected entry pointshub_files[]- Files imported by 3+ others
Development
# Run tests
# Run with verbose output
# Check for issues
License
MIT License - see LICENSE for details.