DORA(1)

NAME

doraCLI built for AI agents to help navigate codebases better. An alternative to grep/find/glob

SYNOPSIS

$npm install -g @sourcegraph/scip-typescript

INFO

99 stars
4 forks
0 views

DESCRIPTION

CLI built for AI agents to help navigate codebases better. An alternative to grep/find/glob

README

dora - Code Context CLI for AI Agents

Stop wasting tokens on grep/find/glob. Give your AI agent fast, structured code intelligence.

Features

  • Instant answers - Pre-computed aggregates mean no waiting for grep/find/glob to finish or tokens wasted on file reads
  • Understand relationships - See what depends on what without reading import statements or parsing code
  • Find issues fast - Detect circular dependencies, coupling, and complexity hotspots with pre-indexed data
  • Track usage - Know where every symbol is used across your codebase in milliseconds, not minutes
  • Language-agnostic - Works with any SCIP-compatible indexer (TypeScript, Java, Rust, Python, etc.)

See It In Action

Typical Workflow Without dora

Baseline CLI workflow showing grep/find approach

With dora CLI

dora CLI workflow showing fast structured queries

System Requirements

  • Binary users: No dependencies - standalone executable
  • From source: Bun 1.0+ required
  • SCIP indexer: Language-specific (e.g., scip-typescript for TS/JS)
  • Supported OS: macOS, Linux, Windows
  • Disk space: ~5-50MB for index (varies by codebase size)

Installation

Option 1: Download Pre-built Binary (Recommended)

Download the latest binary for your platform from the releases page:

# macOS (ARM64)
curl -L https://github.com/butttons/dora/releases/latest/download/dora-darwin-arm64 -o dora
chmod +x dora
sudo mv dora /usr/local/bin/

macOS (Intel)

curl -L https://github.com/butttons/dora/releases/latest/download/dora-darwin-x64 -o dora chmod +x dora sudo mv dora /usr/local/bin/

Linux

curl -L https://github.com/butttons/dora/releases/latest/download/dora-linux-x64 -o dora chmod +x dora sudo mv dora /usr/local/bin/

Windows

Download dora-windows-x64.exe and add to PATH

Option 2: Install via npm

Requires Bun runtime installed.

bun install -g @butttons/dora

Or run without installing:

bunx @butttons/dora

Option 3: Build from Source

# Install Bun (if not already installed)
curl -fsSL https://bun.sh/install | bash

Clone the repository

git clone https://github.com/butttons/dora.git cd dora

Install dependencies

bun install

Build the binary

bun run build

The binary will be at dist/dora

Move it to your PATH

sudo mv dist/dora /usr/local/bin/

Install SCIP Indexer

You'll need a SCIP indexer for your language. For TypeScript/JavaScript:

# Install scip-typescript globally
npm install -g @sourcegraph/scip-typescript

Verify installation

scip-typescript --help

For other languages, see SCIP Indexers.

AI Agent Integration

→ See AGENTS.README.md for complete integration guides for:

  • Claude Code - Skills, hooks, auto-indexing
  • OpenCode - Agent system integration
  • Cursor - Custom commands and rules
  • Windsurf - Skills, AGENTS.md, and rules
  • Other AI agents - Generic integration using SKILL.md and SNIPPET.md

Quick start for any agent:

dora init && dora index    # Initialize and index your codebase
dora cookbook show agent-setup --format markdown  # Get setup instructions for your agent
dora status                # Verify index is ready

Claude Code Integration

dora integrates with Claude Code via settings and optional skill configuration. Just add these files to your project:

1. Add to .claude/settings.json (enables auto-indexing and permissions):

{
  "permissions": {
    "allow": ["Bash(dora:*)", "Skill(dora)"]
  },
  "hooks": {
    "SessionStart": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "dora status 2>/dev/null && (dora index > /tmp/dora-index.log 2>&1 &) || echo 'dora not initialized. Run: dora init && dora index'"
          }
        ]
      }
    ],
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "(dora index > /tmp/dora-index.log 2>&1 &) || true"
          }
        ]
      }
    ]
  }
}

2. (Optional) Add the dora skill at .claude/skills/dora/SKILL.md:

After running dora init, create a symlink:

mkdir -p .claude/skills/dora
ln -s ../../../.dora/docs/SKILL.md .claude/skills/dora/SKILL.md

This enables the /dora command in Claude Code. View the skill file.

3. Add to CLAUDE.md (after running dora init):

cat .dora/docs/SNIPPET.md >> CLAUDE.md

This gives Claude quick access to dora commands and guidance on when to use dora for code exploration. The snippet includes command reference and best practices.

4. Initialize dora:

dora init
dora index

What this gives you:

  • Auto-indexing after each Claude turn
  • Pre-approved permissions (no prompts for dora commands)
  • Session startup checks
  • CLAUDE.md context for better code exploration

Troubleshooting:

  • Index not updating? Check /tmp/dora-index.log for errors
  • dora not found? Ensure dora is in PATH: which dora

MCP Server

dora can run as an MCP (Model Context Protocol) server.

Quick Start

# Start MCP server (runs in foreground)
dora mcp

Claude Code

Add the MCP server with one command:

claude mcp add --transport stdio dora -- dora mcp

Other MCP Clients

Add to your MCP client configuration:

{
  "mcpServers": {
    "dora": {
      "type": "stdio",
      "command": "dora",
      "args": ["mcp"]
    }
  }
}

What You Get

All dora commands are available as MCP tools:

  • dora_status - Check index health
  • dora_map - Get codebase overview
  • dora_symbol - Search for symbols
  • dora_file - Analyze files with dependencies
  • dora_deps / dora_rdeps - Explore dependencies
  • And all other dora commands

Quick Start

1. Initialize

dora init

This creates a .dora/ directory with a default config.

2. Configure Commands

Edit .dora/config.json to configure your SCIP indexer:

For TypeScript/JavaScript:

{
  "commands": {
    "index": "scip-typescript index --output .dora/index.scip"
  }
}

For Rust:

{
  "commands": {
    "index": "rust-analyzer scip . --output .dora/index.scip"
  }
}

3. Index Your Codebase

# If commands are configured:
dora index

Or manually:

scip-typescript index --output .dora/index.scip

4. Try It Out

# Check index status
dora status

Get codebase overview

dora map

Find a symbol

dora symbol Logger

5. Example Workflow

# Find a class definition
dora symbol AuthService

Explore the file

dora file src/auth/service.ts

See what depends on it

dora rdeps src/auth/service.ts --depth 2

Check for circular dependencies

dora cycles

6. Learn Custom Queries

New to dora? The cookbook has recipes with real examples:

# Start here - complete walkthrough
dora cookbook show quickstart

Find class methods

dora cookbook show methods

Track symbol references

dora cookbook show references

Find exported APIs

dora cookbook show exports

All recipes include tested SQL patterns from real codebases.

Commands Overview

Setup & Status

dora init                    # Initialize in repo
dora index                   # Index codebase
dora status                  # Show index health
dora map                     # High-level statistics

Code Navigation

dora ls [directory]          # List files in directory with metadata
dora symbol <query>          # Find symbols by name
dora file <path>             # File info with dependencies
dora refs <symbol>           # Find all references
dora deps <path> --depth 2   # Show dependencies
dora rdeps <path> --depth 2  # Show dependents
dora adventure <from> <to>   # Find shortest path

Documentation

dora docs                    # List all documentation files
dora docs --type md          # Filter by document type
dora docs search <query>     # Search documentation content
dora docs show <path>        # Show document details

Architecture Analysis

dora cycles                  # Find bidirectional dependencies
dora coupling --threshold 5  # Find tightly coupled files
dora complexity --sort complexity  # High-impact files
dora treasure --limit 20     # Most referenced files
dora lost --limit 50       # Potentially dead code
dora leaves --max-dependents 3  # Leaf nodes

Advanced Queries

dora schema                  # Show database schema
dora cookbook show [recipe]  # Show query pattern examples
dora query "<sql>"           # Execute raw SQL (read-only)
dora changes <ref>           # Changed/impacted files
dora exports <path|package>  # List exports
dora imports <path>          # Show imports
dora graph <path>            # Dependency graph

Command Reference

Quick reference for all commands with common flags:

Setup Commands

CommandDescriptionCommon Flags
dora initInitialize dora in repository-
dora indexBuild/update index--full, --skip-scip, --ignore <pattern>
dora statusCheck index status-
dora mapHigh-level statistics-

Code Navigation

CommandDescriptionCommon Flags
dora ls [directory]List files in directory--limit N, --sort <field>
dora file <path>Analyze file with dependencies-
dora symbol <query>Search for symbols--kind <type>, --limit N
dora refs <symbol>Find all references-
dora deps <path>Show dependencies--depth N (default: 1)
dora rdeps <path>Show reverse dependencies--depth N (default: 1)
dora adventure <from> <to>Find dependency path-

Documentation

CommandDescriptionCommon Flags
dora docsList all documentation files--type <type> (md, txt)
dora docs search <query>Search documentation content--limit N (default: 20)
dora docs show <path>Show document metadata--content (include full content)

Architecture Analysis

CommandDescriptionCommon Flags
dora cyclesFind bidirectional dependencies--limit N (default: 50)
dora couplingFind tightly coupled files--threshold N (default: 5)
dora complexityShow complexity metrics--sort <metric>
dora treasureMost referenced files--limit N (default: 10)
dora lostFind unused symbols--limit N (default: 50)
dora leavesFind leaf nodes--max-dependents N

Advanced Commands

CommandDescriptionCommon Flags
dora schemaShow database schema-
dora cookbook show [recipe]Query pattern cookbookquickstart, methods, refs, exports
dora query "<sql>"Execute raw SQL (read-only)-
dora changes <ref>Git impact analysis-
dora exports <target>List exported symbols-
dora imports <path>Show file imports-
dora graph <path>Dependency graph--depth N, --direction

SCIP Indexers

Output Format

All commands output TOON (Token-Oriented Object Notation) by default. TOON is a compact, human-readable encoding of JSON that minimizes tokens for LLM consumption. Pass --json to any command for JSON output.

# Default: TOON output
dora status

JSON output

dora --json status dora status --json

Errors always go to stderr as JSON with exit code 1.

TOON vs JSON size comparison

Measured on dora's own codebase (79 files, 3167 symbols):

CommandJSONTOONSavings
status206 B176 B15%
map68 B62 B9%
ls src/commands2,258 B975 B57%
ls (all files)6,324 B2,644 B58%
file src/index.ts6,486 B6,799 B-5%
symbol setupCommand130 B130 B0%
refs wrapCommand510 B549 B-8%
deps (depth 2)2,158 B1,332 B38%
rdeps (depth 2)1,254 B802 B36%
adventure110 B97 B12%
leaves142 B129 B9%
exports488 B511 B-5%
imports1,978 B1,998 B-1%
lost1,876 B1,987 B-6%
treasure893 B577 B35%
cycles14 B11 B21%
coupling35 B31 B11%
complexity2,716 B932 B66%
schema6,267 B4,389 B30%
query692 B464 B33%
docs1,840 B745 B60%
docs search277 B171 B38%
docs show820 B870 B-6%
graph2,434 B1,894 B22%
changes1,112 B1,026 B8%

Commands with uniform arrays of objects (ls, complexity, docs, treasure) see 35-66% reduction. Nested or non-uniform outputs (file, refs, exports) are roughly equal or slightly larger.

Debug Logging

For debug logging, testing, building, and development instructions, see CONTRIBUTING.md.

Troubleshooting

Common Issues

IssueSolution
Database not foundRun dora index to create the database
File not in indexCheck if file is in .gitignore, run dora index
Stale resultsRun dora index to rebuild
Slow queriesUse --depth 1 when possible, reduce --limit
Symbol not foundEnsure index is up to date: dora status, then dora index
dora command not foundEnsure dora is in PATH: which dora, reinstall if needed

Integration Issues

Claude Code index not updating:

  • Check /tmp/dora-index.log for errors
  • Verify dora is in PATH: which dora
  • Test manually: dora index
  • Ensure dora index is in the allow permissions list in .claude/settings.json

Stop hook not firing:

  • Verify .claude/settings.json syntax is correct (valid JSON)
  • Check that the hook runs by viewing verbose logs
  • Try manually running the hook command

Want to see indexing progress:

  • Edit .claude/settings.json Stop hook
  • Change command to: "DEBUG=dora:* dora index 2>&1 || true" (removes background &)
  • You'll see progress after each turn, but will wait 15-30s

Performance Issues

Index takes too long:

  • Run SCIP indexer separately if it supports caching
  • Use background indexing mode in Claude Code integration
  • Check if your SCIP indexer can be optimized

Queries are slow:

  • Use --depth 1 instead of deep traversals
  • Reduce --limit for large result sets
  • Ensure database indexes are created (automatic)
  • Run dora index if database is corrupted

Contributing

Contributions are welcome! For development setup, testing, building binaries, and code style guidelines, see CONTRIBUTING.md.

Quick start:

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes with tests (bun test)
  4. Submit a pull request

For detailed architecture and development guidelines, see CLAUDE.md.

License

MIT

Links

SEE ALSO

clihub3/4/2026DORA(1)