Grepai Trace Callers

yoanbernabeu/grepai-skills/skills/trace/grepai-trace-callers

by yoanbernabeu382d40261c0d41109c6e11872574ba0be9b064d0No licenseListed Oct 9, 2026Updated Oct 9, 2026

Find function callers with GrepAI trace. Use this skill to discover what code calls a specific function.

Instructions onlySoftware Development
AI-generated overview

Guides use of the grepai trace callers command to find code locations that call a given function.

What it does
Explains how to run grepai trace callers to locate call sites of a function or method, covering basic usage, JSON, compact JSON and TOON output formats, and fast versus precise extraction modes. It also documents configuration in .grepai/config.yaml, supported languages, scripting examples with jq and Python, and troubleshooting for missing or excessive results. The deliverable is guidance and command examples rather than generated files.
When to use it
Use it before refactoring or renaming a function, when assessing the impact of a signature change, or when exploring and debugging a codebase to see who calls a particular function.
Requirements
Requires the grepai command-line tool with its symbol index updated, for example via grepai watch. Precise mode additionally requires tree-sitter. No scripts are shipped; the skill is instructions only.

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

ModeSpeedAccuracyDependencies
fast⚡⚡⚡GoodNone
precise⚡⚡Excellenttree-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

LanguageExtensions
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 renaminggrepai trace callers "getUserById"
# Check impact of changing signaturegrepai trace callers "processPayment"

Understanding Codebase

bash
# Who uses this core function?grepai trace callers "validateToken"
# Find entry points to a modulegrepai trace callers "initialize"

Debugging

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

Code Review

bash
# Verify function usage before approving changesgrepai 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"
  1. 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 callersgrepai trace callers "MyFunction" --json | jq '.count'
# Get caller function namesgrepai trace callers "MyFunction" --json | jq -r '.results[].caller'
# Get file paths onlygrepai trace callers "MyFunction" --json | jq -r '.results[].file' | sort -u

Python

python
import subprocessimport 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: fastLanguage 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

Source and attribution

Source:yoanbernabeu/grepai-skillsinskills/trace/grepai-trace-callersat commit382d402

License: No license

Content belongs to its original authors. SourceWeft indexes it from a public repository.

Report or request removal