Ctags
Index the codebase using Universal ctags when LSP is unavailable for a language. Generates a JSON symbol table with name, kind, file, line, and end line for all detected symbols. Supports 40+ languages natively.From its SKILL.md
npx -y skills add benmarte/codemunch --skill ctagsAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- 6 stars6 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
- runs commandsInstructs the agent to run 3 commands, including `ctags --version 2>&1 | grep -i universal` and 2 more.
SKILL.md
2.4 KB, 615 tokens by cl100k_base, as published. Nobody here has run it
ctags Indexing Skill
Use Universal ctags to build a symbol index when LSP is not available.
Check ctags version
# Universal ctags has --output-format=json — we need this
ctags --version 2>&1 | grep -i universal
# If not universal ctags, basic ctags won't have JSON output
# Fall back to parsing classic ctags format instead
Run ctags
universal-ctags \
--recurse=yes \
--output-format=json \
--fields=+n+e+K+S+Z \
--extras=+q+r \
--exclude=node_modules \
--exclude=.git \
--exclude=target \
--exclude=__pycache__ \
--exclude=.claude/codemunch \
--exclude=dist \
--exclude=build \
--exclude=vendor \
-f - \
. 2>/dev/null
Field reference
n— line numbere— end lineK— kind (long form: "function", "class", etc.)S— signatureZ— scope (container class/module)
Parse output into codemunch format
ctags JSON output per line:
{"_type":"tag","name":"validateToken","path":"src/auth/tokens.ts","pattern":"/^async function validateToken/","kind":"function","line":142,"end":163,"signature":"(token: string): Promise<User | null>","scope":"AuthService","scopeKind":"class"}
Filter noise kinds: Skip noise kinds: constant, property, variable, enumerator. These inflate the index 15x without adding useful navigation value. Only keep symbols where kind is one of: function, method, class, interface, type, enum, namespace.
Map each kept symbol to codemunch format:
{
"name": "validateToken",
"kind": "function",
"file": "src/auth/tokens.ts",
"start_line": 142,
"end_line": 163,
"signature": "(token: string): Promise<User | null>",
"container": "AuthService",
"engine": "ctags"
}
Classic ctags fallback (non-universal)
If only basic/exuberant ctags is available (no JSON support):
ctags -R --fields=+iaS --extra=+q -f .claude/codemunch/tags .
Parse the tab-separated .claude/codemunch/tags file:
# format: name TAB file TAB pattern TAB kind TAB extensions...
validateToken src/auth/tokens.ts /^async function validateToken/ f line:142
End line is not available in classic ctags — use the rg-fallback skill's brace-counting heuristic.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.