Skip to content
Agentmart
Submit a tool

codemap

Map a codebase and drill into it — ranked overview, callers, blast radius, module, import and call graphs.

Skill by kronael

IndexedUnlicense★ 6
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/kronael-codemap

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Map a codebase and drill into it — ranked overview, callers, blast radius, module, import and call graphs. NOT for hand-drawn diagrams (use diagrams), a quick sketch (use show-me) or structural rewrite (use astgrep).

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md and code. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/codemap

What's inside

Skill name
codemap
Description
Map a codebase and drill into it — ranked overview, callers, blast radius, module, import and call graphs. NOT for hand-drawn diagrams (use diagrams), a quick sketch (use show-me) or structural rewrite (use astgrep).
License
Unlicense
Instructions
66 lines in SKILL.md · view on GitHub

Files (1)

  • SKILL.md

SKILL.md (first lines)

# Codemap

Views of a codebase generated from its source, run on demand: one `ripwire`
binary for Python, TypeScript, Go and Rust, plus one graph tool each for Go
packages and Python imports. Nothing here runs as a server or loads at
session start.

`ripwire` missing from PATH: ALWAYS stop and ask the owner to run the
binary-only install, `kronael/sync/reference.md` § ripwire in the bundle
source repo (`~/.claude/LOCAL.md` names its path). NEVER substitute a grep
tour and call it a map.

## Orient, then drill down

| Question | Command |
|---|---|
| What is in this repo | `ripwire <dir> --tree` (each file's top symbols), then `ripwire <dir> --max-tokens=3000` (ranked signatures with resolved callees) |
| Which code a task touches | `ripwire <dir> --for="<the task in plain words>"` |
| One symbol's body | `--expand=<file>:<name>` (body plus the signatures it calls); `--outline=<file>:<name> --top-k=0` (control-flow skeleton; without `--top-k=0` the ranked top-200 map follows it) |
| Who calls it | `--callers=<file>:<name>` |
| Every use — reads, imports, trait or interface dispatch | `--uses=<name>` |
| What breaks if it changes | `--impact=<file>:<name>` (the blast radius, split into tested and untested) |
| God files and import cycles | `--deps` |

- ALWAYS take the `next=` attribute when present — `--callers`, `--impact`
  and `--for` end with one; it is the pasteable follow-up call.
- ALWAYS qualify a name that more than one file defines as `<file>:<name>`. A
  bare common name merges every definition: in a Go repo `--callers=Close`
  gave 5 defs and 218 callers, `--callers=store/store.go:Close` 172. The
  not-found error lists the defining files.
- NEVER read `count="0"` from `--callers` on a trait or interface method as
  "unused". ripwire declines a call it cannot bind to one definition
  (`declined_calls=`), so dispatch through a trait reads as no callers: 0
  callers and 10 uses for one Rust trait method. ALWAYS run `--uses` there, or
  the LSP tool's findReferences and goToImplementation.
- `--max-tokens` shapes the default map and `--for --detail=N`; plain `--for`
  ignores it.
- `--json` mirrors the XML keys for the map, `--for`, `--callers`,
  `--callees` and `--impact`; `--tree` has no JSON form.
- NEVER treat a map as the reference set for a rename or signature change —
  the language skill's rename tool and the LSP tool own that (`software` →
  `lsp.md`).

## Diagrams from the code

ALWAYS write output under the project's gitignored `./tmp/` (`mkdir -p tmp`
first) — NEVER a tracked path.

| Picture | Command |
|---|---|
| Module (directory) flowchart, any language | `ripwire <dir> --mermaid > tmp/modules.mmd` — Mermaid text; an edge is 3 or more inter-module calls, not imports (file imports: `--deps`); show it inline, or hand it to `show-me` |
| Interactive call graph the owner opens in a browser | `ripwire <dir> --html=tmp/callgraph.html`, colour with `--color-by=lang`, `community`, `cx` (complexity), `churn` or `tested` |
| Go package graph | `go run github.com/loov/goda@v0.10.1 graph -short ./... \| dot -Tsvg -o tmp/packages.svg` |
| Python import graph | `uvx pydeps <pkg> --noshow --show-dot --no-output > tmp/imports.dot`, then `dot -Tsvg` |

- ALWAYS draw a single-package Python repo's imports with pydeps: its
  `--mermaid` has one directory and next to no edges (1 edge against
  pydeps' 53 on one repo).
- NEVER install mermaid-cli to render — it pulls in Chromium. ALWAYS render
  DOT with the installed `dot` and leave Mermaid as text.
- NEVER dependency-cruiser or madge for a TypeScript graph — without a
  per-repo config the first refuses to run and with `--no-config` crawls
  `node_modules` and `dist`, and the second draws edges into `dist/*.d.ts`.
  ALWAYS `ripwire --deps` for TypeScript imports instead.

From kronael/tools, Unlicense.

More from kronael/tools

Signals

Stars
6
Forks
3
Open issues
0
Last commit (this folder)
Oct 22, 2026 (6 days ago)

From GitHub (fetched Oct 24, 2026).

Details

License
Unlicense
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from kronael

Cite this page

codemap skill. Agent Mart. https://agentmart.dev/skills/kronael-codemap (last updated 2026-10-24)