agentsclimarketplace

Fetch

Skill benmarte/codemunch/skills/fetch

Zero-config, token-efficient code exploration for Claude Code — no MCP server, no Python, no database

Install
npx -y skills add benmarte/codemunch --skill fetch

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing 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.

What its author says it does

Copied from the file, not written here

Fetch the exact source code of a named symbol (function, class, method, type) from the codebase using the codemunch index. Reads only the lines for that symbol — not the whole file. Uses LSP for hover docs and type info when available. This is the core token-saving operation.

SKILL.md

3.5 KB, as published. Nobody here has run it

Fetch Skill

Retrieve the exact source of a named symbol. Read 20 lines instead of 800.

Usage

Called with a symbol name, e.g.: validateToken, AuthService, getUserById, Invoice

Step 1 — Look up in index

# Read the index
cat .claude/codemunch/index.json | python3 -c "
import json, sys
idx = json.load(sys.stdin)
name = '$SYMBOL_NAME'
matches = [s for s in idx['symbols'] if s['name'].lower() == name.lower()]
print(json.dumps(matches, indent=2))
" 2>/dev/null

# Or with jq if available
jq --arg n "$SYMBOL_NAME" '[.symbols[] | select(.name | ascii_downcase == ($n | ascii_downcase))]' \
  .claude/codemunch/index.json 2>/dev/null

If no index exists: the staleness-gate skill will have already built it before this skill runs.

If multiple matches (e.g. overloaded methods or same name in different files), show a disambiguation list and ask which one.

Step 2 — Extract the symbol source

Use the start_line and end_line from the index entry to read only those lines:

FILE="src/auth/tokens.ts"
START=142
END=163

# Add a few lines of context before (for decorators, comments, annotations)
CONTEXT_BEFORE=3
ACTUAL_START=$((START - CONTEXT_BEFORE))
[ $ACTUAL_START -lt 1 ] && ACTUAL_START=1

sed -n "${ACTUAL_START},${END}p" "$FILE"

Token count for this operation: ~20-40 tokens Token count for reading the full file: ~5,000-15,000 tokens

Step 3 — Enrich with LSP (when available)

If LSP is configured for this language, additionally fetch:

Hover information — type signature, documentation:

Use Claude Code's /lsp tool:
  textDocument/hover
  position: { line: START_LINE, character: 0 }

Type signature — already in index if built with LSP, but refresh if stale

Find references count — how many places call this symbol:

Use /lsp:
  textDocument/references (just count, don't fetch all)

Step 4 — Display

Show the symbol in this format:

📍 validateToken  [function]  src/auth/tokens.ts:142-163
   Engine: LSP  |  Signature: validateToken(token: string): Promise<User | null>
   Container: AuthService  |  References: 14
   ─────────────────────────────────────────
   [source code lines 139-163]
   ─────────────────────────────────────────
   Tokens used: ~35  (vs ~8,400 to read full file — 99.6% savings)

Step 5 — Update usage stats

Append to .claude/codemunch/session.log:

fetch|validateToken|src/auth/tokens.ts:142-163|35 tokens|lsp

Fallback for missing end_line (rg-indexed symbols)

If end_line is null (rg fallback didn't have it), use a smart heuristic:

# Read from start_line until we find the closing brace at the same indent level
# or until the next function/class declaration
# Max 60 lines to avoid reading too much
awk -v start=$START_LINE -v max=60 '
  NR==start { depth=0; capture=1 }
  capture {
    print
    # Count opening and closing braces/blocks
    for(i=1;i<=length($0);i++) {
      c=substr($0,i,1)
      if(c=="{" || c=="(" || c=="[") depth++
      if(c=="}" || c==")" || c=="]") depth--
    }
    if(NR>start && depth<=0) exit
    if(NR>start+max) exit
  }
' "$FILE"

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.