<< All versions

Skill v1.0.3

currentAutomated scan100/100
cranot/roam-code/roam

~2 modified

──Details
PublishedOctober 28, 2026 at 01:41 PM
Content Hashsha256:ccc01fb57f0b62be...
Git SHA0b1fe52eb7ac
Bump Typepatch
Compare with v1.0.2
──Files
Files (1 file, 9.4 KB)
SKILL.md9.4 KBactive
SKILL.md · 278 lines · 9.4 KB

name: roam description: > Codebase comprehension via roam-code CLI. Use when exploring codebases, planning modifications, debugging failures, assessing PR risk, or checking architecture health. Triggers on: understanding project structure, pre-change safety checks, finding symbols/files, blast radius analysis, affected tests, health scoring, refactoring guidance, code review. Requires roam-code installed (pip install roam-code) and an indexed project (roam init). metadata: version: "1.0.3"


Roam — Codebase Comprehension Skill

Repository: <https://github.com/Cranot/roam-code>

Roam pre-indexes codebases into a semantic graph (symbols, dependencies, call graphs, architecture layers, git history) stored in a local SQLite DB. Query it via CLI instead of repeatedly grepping files and guessing structure.

Setup

Ensure roam-code is installed and the project is indexed:

bash
pip install roam-code # or: pipx install roam-code
cd <project-root>
roam init # indexes codebase, creates .roam/index.db

After git pull or major changes, run roam index to refresh (incremental, near-instant if few files changed). After large refactors: roam index --force.

Command Decision Table

Use this table to pick the right command for the situation:

SituationCommand
First time in a reporoam understand then roam tour
Need a compact codebase overviewroam map or roam minimap
Find a symbol by nameroam search <pattern>
Need files to read for a symbolroam context <symbol>
Inspect a file's structureroam file <path>
Inspect a directoryroam module <path>
Before modifying a symbolroam preflight <symbol>
What breaks if I change X?roam impact <symbol>
Blast radius of uncommitted changesroam diff
Debugging a failureroam diagnose <symbol>
Which tests cover a symbol?roam affected-tests <symbol>
Check codebase healthroam health
Find hotspots (churn x complexity)roam weather
Detect dead/unused coderoam dead
PR risk assessmentroam pr-risk
Find dependency pathsroam trace <source> <target>
Who calls/imports this?roam uses <symbol> (alias: roam refs)
Find every reference to X (replaces multi-shape grep)roam refs <symbol>
Algorithm anti-patternsroam algo
Side effects of a functionroam effects <symbol>
Safe to delete?roam safe-delete <symbol>
Simulate a refactor`roam simulate moveextractmergedelete`

Core Workflow

1. Orientation (first time in a repo)

bash
roam understand # tech stack, architecture, health, conventions
roam tour # onboarding: key symbols, reading order, entry points
roam map # project skeleton with top symbols by PageRank

2. Before Making Changes

Always run roam preflight <symbol> before modifying code. It combines blast radius + affected tests + complexity + coupling + fitness into one check:

bash
roam preflight MyClass
# Output: blast radius, affected tests, complexity, coupling, fitness verdict

If you only need files to read:

bash
roam context MyClass
# Output: definition file + callers + callees with exact line ranges

3. After Making Changes

bash
roam diff # blast radius of uncommitted changes
roam diff --staged # blast radius of staged changes
roam pr-risk # risk score (0-100) + suggested reviewers

4. Debugging

bash
roam diagnose <symbol> # root cause ranking by z-score risk
roam trace <A> <B> # dependency path between two symbols
roam effects <symbol> # DB writes, network I/O, filesystem, global mutation

Output Modes

  • Default: Human-readable text (also optimized for LLM consumption)
  • `roam --json <cmd>`: Structured JSON with consistent envelope
  • `roam --budget N <cmd>`: Token-capped output (N = max tokens)
  • `roam complexity --select '.symbols[:5]'`: Project one bounded JSON field without shell parsing (--select is repeatable)
  • `roam grep <pattern> -C 5`: Search source and return bounded live code packets in one call
  • `roam grep <pattern> --whole-symbol --max-packets 3`: Deduplicate hits into enclosing functions/classes; stale spans fall back safely
  • `roam --sarif <cmd>`: SARIF 2.1.0 for CI integration

Prefer --json when you need to parse output programmatically. Prefer --budget 2000 when context window is tight. Prefer --select '.summary' or a bounded list slice when only one envelope section is needed.

Key Commands Reference

roam search <pattern>

Find symbols by name (regex). Results ranked by PageRank.

bash
roam search "Auth.*Service"
roam search "handle_request" --kind fn

roam context <symbol>

AI-optimized file list with line ranges for reading. Supports --task modify|debug|review for context tuning.

bash
roam context Flask
roam context myfile:MyFunction # disambiguate with file prefix

roam preflight <symbol|file>

Compound pre-change check. Run this before every modification.

bash
roam preflight UserController
roam preflight src/auth/login.py

roam health

Composite score (0-100). Use --gate for CI (reads .roam-gates.yml).

bash
roam health
roam health --gate # exit 5 on failure

roam diff

Blast radius of uncommitted or committed changes.

bash
roam diff # uncommitted
roam diff --staged # staged only
roam diff HEAD~3..HEAD # commit range

roam algo

Detect algorithm anti-patterns (23 patterns: O(n^2) loops, N+1 queries, quadratic string building, etc.) with confidence levels and fix suggestions.

bash
roam algo
roam algo --confidence high # high-confidence only
roam algo --task nested-lookup # specific pattern

roam impact <symbol>

Full blast radius using Personalized PageRank.

bash
roam impact Flask

roam symbol <name>

Symbol definition + callers + callees + metrics.

bash
roam symbol open_db
roam symbol --full open_db # include source code

roam affected-tests <symbol|file>

Trace reverse call graph to find covering tests.

bash
roam affected-tests UserService

roam agent-export --write

Auto-generate agent instructions for the project. Detects CLAUDE.md, AGENTS.md, .cursor/rules, etc.

bash
roam agent-export --write
roam agent-export --brief # compact top-level summary

roam minimap --update

Inject/refresh annotated codebase snapshot in CLAUDE.md.

bash
roam minimap --update # update sentinel block in CLAUDE.md

Discovering More Commands

This skill covers the most common commands, but roam has 288 commands. To explore what's available:

bash
roam --help # list all available commands
roam <command> --help # detailed usage for a specific command

For full documentation, examples, and the latest features, see the roam-code repository.

Tips

  • One roam command replaces 5-10 grep/read cycles. Always try roam first.
  • Use roam search instead of grep/glob for finding symbols — it understands

definitions vs. usage and ranks by importance.

  • roam context gives exact line ranges — more precise than reading whole files.
  • After git pull, run roam index to keep the graph fresh.
  • For disambiguation, use file:symbol syntax: roam symbol myfile:MyClass.

"Find every reference to X" — prefer roam refs over multi-shape grep

A common agent pattern is:

Grep(pattern: "->ekfpa|\.ekfpa\b|'ekfpa'|\"ekfpa\"")

The intent is "find all references to symbol ekfpa". The multi-shape regex tries to catch function calls (->ekfpa), attribute access (.ekfpa), and string literal mentions ('ekfpa', "ekfpa"). It works, but:

  • False positives. Matches comments, docstrings, and unrelated string

literals — the agent must filter those out manually.

  • Unstructured. Returns raw line text; the agent has to parse to learn

which symbol owns each match.

  • Misses one-off shapes. Ruby obj.ekfpa!, Python f-string f"{ekfpa}",

decorator @ekfpa, etc. each need another regex shape.

roam refs <symbol> (alias for roam uses) walks the indexed call/import/ inherit graph and returns only real references — every result is a named symbol with kind/file/line, grouped by edge type:

$ roam refs find_symbol
VERDICT: 'find_symbol': 50 production consumers, 7 test consumers in 27 files
-- Called by (30) --
fn affected_tests src/roam/commands/cmd_affected_tests.py:230 production
fn annotate src/roam/commands/cmd_annotate.py:21 production
…
-- Imported by (20) --
…

Latency on this repo: ~700ms via subprocess, sub-100ms via the MCP server (`roam_uses` tool, which agents in MCP-enabled clients should prefer because the import-cost is paid once at server start). 2-5× slower than ripgrep in raw wall-time, but the result is already usable — there's no follow-up "now read the matching files and figure out the structure" step.

Use roam refs when:

  • Finding every caller / importer / inheritor of a symbol.
  • Planning an API change ("what would break if I rename X").
  • Sweeping for usages before a deletion.

Stay with grep / Grep when:

  • The target is a literal string, not a symbol (e.g. an error message,

a translation key, a SQL fragment).

  • The codebase isn't indexed yet (roam init first if you'll be doing

many of these queries).

← v1.0.2All versions