Skip to main content
skill CX Codex

grepai-trace-callers — Claude Code skill: find function callers

A skill that teaches the agent to list every place a function is called from. Useful before a rename or a signature change.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add yoanbernabeu/grepai-skills --skill grepai-trace-callers -a claude-code
Open on GitHub

What grepai-trace-callers does

The skill covers grepai trace callers and tells the agent when to reach for it: before refactoring, when mapping dependencies, when you need to know the blast radius of an edit. You pass a function name and get back the call sites with file, line and context.

Output can be machine-readable. --json suits scripts, --json --compact trims the payload, and --toon cuts token count further. The --json and --toon flags are mutually exclusive. Two extraction modes exist: fast runs on regex and pulls in no dependencies, while precise parses with tree-sitter and needs it installed.

Settings sit in .grepai/config.yaml — mode, the list of extensions, and exclude patterns such as *_test.go. Common names like get return a lot of noise, so pick something specific or filter the JSON with jq. An empty result usually means the symbol index is stale; run grepai watch first.

What it helps with

  • list every call site before renaming a function
  • check what breaks when a signature changes
  • map dependencies of an unfamiliar function
  • spot remaining calls to a deprecated method in review
  • pipe caller names into a script

Example prompts for the agent

  • find everyone who calls Login
  • show callers of processPayment as JSON, keep only files under auth
  • who calls validateToken? check before I refactor

How to install grepai-trace-callers

1Skills CLI (Vercel)

npx skills add yoanbernabeu/grepai-skills --skill grepai-trace-callers -a claude-code

2Manually: put the files in place

~/.claude/skills/grepai-trace-callers/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/grepai-trace-callers/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about grepai-trace-callers

How do I install grepai-trace-callers in Claude?

Run npx skills add yoanbernabeu/grepai-skills --skill grepai-trace-callers -a claude-code. The skill lands in ~/.claude/skills/grepai-trace-callers/SKILL.md.

What does grepai-trace-callers do?

It returns the code that calls a given function or method, with file, line and context. The agent uses that for navigation and impact analysis.

Why does the command find no callers?

Check the spelling — names are case-sensitive. Make sure the file extension is listed in enabled_languages, and refresh the symbol index with grepai watch.

Source text

SKILL.md · MIT
---
name: grepai-trace-callers
description: Find function callers with GrepAI trace. Use this skill to discover what code calls a specific function.
---

# GrepAI Trace Callers

This skill covers using `grepai trace callers` to find all code locations that call a specific function or method.

## When to Use This Skill

- Finding all usages of a function before refactoring
- Understanding function dependencies
- Impact analysis before changes
- Code navigation and exploration

## What is Trace Callers?

`grepai trace callers` answers: **"Who calls this function?"**

```
func Login(user, pass) {...}
        ↑
        │
┌───────┴───────────────────┐
│   Who calls Login()?      │
├───────────────────────────┤
│ • HandleAuth (auth.go:42) │
│ • TestLogin (test.go:15)  │
│ • CLI (main.go:88)        │
└───────────────────────────┘
```

## Basic Usage

```bash
grepai trace callers "FunctionName"
```

### Example

```bash
grepai trace callers "Login"
```

Output:
```
🔍 Callers of "Login"

Found 3 callers:

1. HandleAuth
   File: handlers/auth.go:42
   Context: user.Login(ctx, credentials)

2. TestLoginSuccess
   File: handlers/auth_test.go:15
   Context: result := Login(testUser, testPass)

3. RunCLI
   File: cmd/main.go:88
   Context: err := auth.Login(username, password)
```

## JSON Output

For programmatic use:

```bash
grepai trace callers "Login" --json
```

Output:
```json
{
  "query": "Login",
  "mode": "callers",
  "count": 3,
  "results": [
    {
      "file": "handlers/auth.go",
      "line": 42,
      "caller": "HandleAuth",
      "context": "user.Login(ctx, credentials)"
    },
    {
      "file": "handlers/auth_test.go",
      "line": 15,
      "caller": "TestLoginSuccess",
      "context": "result := Login(testUser, testPass)"
    },
    {
      "file": "cmd/main.go",
      "line": 88,
      "caller": "RunCLI",
      "context": "err := auth.Login(username, password)"
    }
  ]
}
```

## Compact JSON (AI Optimized)

```bash
grepai trace callers "Login" --json --compact
```

Output:
```json
{
  "q": "Login",
  "m": "callers",
  "c": 3,
  "r": [
    {"f": "handlers/auth.go", "l": 42, "fn": "HandleAuth"},
    {"f": "handlers/auth_test.go", "l": 15, "fn": "TestLoginSuccess"},
    {"f": "cmd/main.go", "l": 88, "fn": "RunCLI"}
  ]
}
```

## TOON Output (v0.26.0+)

TOON format offers ~50% fewer tokens than JSON:

```bash
grepai trace callers "Login" --toon
```

Output:
```
callers[3]:
  - call_site:
      context: "user.Login(ctx, credentials)"
      file: handlers/auth.go
      line: 42
    symbol:
      name: HandleAuth
      ...
```

> **Note:** `--json` and `--toon` are mutually exclusive.

## Extraction Modes

GrepAI offers two extraction modes:

### Fast Mode (Default)

Uses regex patterns. Fast and dependency-free.

```bash
grepai trace callers "Login" --mode fast
```

### Precise Mode

Uses tree-sitter AST parsing. More accurate but requires tree-sitter.

```bash
grepai trace callers "Login" --mode precise
```

### Comparison

| Mode | Speed | Accuracy | Dependencies |
|------|-------|----------|--------------|
| `fast` | ⚡⚡⚡ | Good | None |
| `precise` | ⚡⚡ | Excellent | tree-sitter |

## Configuration

Configure trace in `.grepai/config.yaml`:

```yaml
trace:
  mode: fast  # fast or precise

  enabled_languages:
    - .go
    - .js
    - .ts
    - .py
    - .php
    - .rs

  exclude_patterns:
    - "*_test.go"
    - "*.spec.ts"
```

## Supported Languages

| Language | Extensions |
|----------|------------|
| Go | `.go` |
| JavaScript | `.js`, `.jsx` |
| TypeScript | `.ts`, `.tsx` |
| Python | `.py` |
| PHP | `.php` |
| C/C++ | `.c`, `.h`, `.cpp`, `.hpp`, `.cc`, `.cxx` |
| Rust | `.rs` |
| Zig | `.zig` |
| C# | `.cs` |
| Java | `.java` |
| Pascal/Delphi | `.pas`, `.dpr` |

## Use Cases

### Before Refactoring

```bash
# Find all usages before renaming
grepai trace callers "getUserById"

# Check impact of changing signature
grepai trace callers "processPayment"
```

### Understanding Codebase

```bash
# Who uses this core function?
grepai trace callers "validateToken"

# Find entry points to a module
grepai trace callers "initialize"
```

### Debugging

```bash
# Where is this function called from?
grepai trace callers "problematicFunction"
```

### Code Review

```bash
# Verify function usage before approving changes
grepai trace callers "deprecatedMethod"
```

## Handling Common Names

If your function name is common, results may include unrelated code:

### Problem

```bash
grepai trace callers "get"  # Too common, many false positives
```

### Solutions

1. Use more specific name:
```bash
grepai trace callers "getUserProfile"
```

2. Filter results by path:
```bash
grepai trace callers "get" --json | jq '.results[] | select(.file | contains("auth"))'
```

## Combining with Semantic Search

Use together for comprehensive understanding:

```bash
# Find what Login does (semantic)
grepai search "user login authentication"

# Find who uses Login (trace)
grepai trace callers "Login"
```

## Scripting Examples

### Bash

```bash
# Count callers
grepai trace callers "MyFunction" --json | jq '.count'

# Get caller function names
grepai trace callers "MyFunction" --json | jq -r '.results[].caller'

# Get file paths only
grepai trace callers "MyFunction" --json | jq -r '.results[].file' | sort -u
```

### Python

```python
import subprocess
import json

result = subprocess.run(
    ['grepai', 'trace', 'callers', 'Login', '--json'],
    capture_output=True,
    text=True
)

data = json.loads(result.stdout)
print(f"Found {data['count']} callers of Login:")
for r in data['results']:
    print(f"  - {r['caller']} in {r['file']}:{r['line']}")
```

## Common Issues

❌ **Problem:** No callers found
✅ **Solutions:**
- Check function name spelling (case-sensitive)
- Ensure file type is in `enabled_languages`
- Run `grepai watch` to update symbol index

❌ **Problem:** Too many false positives
✅ **Solutions:**
- Use more specific function name
- Add exclude patterns in config
- Filter results with `jq`

❌ **Problem:** Missing some callers
✅ **Solutions:**
- Try `--mode precise` for better accuracy
- Check if files are in ignore patterns

## Best Practices

1. **Use exact function name:** Case matters
2. **Check symbol index:** Run `grepai watch` first
3. **Use JSON for scripts:** Easier to parse
4. **Combine with search:** Semantic + trace = full picture
5. **Filter large results:** Use `jq` or grep

## Output Format

Trace callers result:

```
🔍 Callers of "Login"

Mode: fast
Language files scanned: 245

Found 3 callers:

1. HandleAuth
   File: handlers/auth.go:42
   Context: user.Login(ctx, credentials)

2. TestLoginSuccess
   File: handlers/auth_test.go:15
   Context: result := Login(testUser, testPass)

3. RunCLI
   File: cmd/main.go:88
   Context: err := auth.Login(username, password)

Tip: Use --json for machine-readable output
     Use --mode precise for more accurate results
```

© yoanbernabeu · MIT · yoanbernabeu/grepai-skills

Similar skills

All skills for Agent setup: memory, context, orchestration →

From the same set12

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor