Files
gh-seangsisg-crispy-claude-cc/skills/using-serena-for-exploration/SKILL.md
2025-11-30 08:54:38 +08:00

4.6 KiB

name, description
name description
using-serena-for-exploration Use when exploring codebases with Serena MCP tools for architectural understanding and pattern discovery - guides efficient symbolic exploration workflow minimizing token usage through targeted symbol reads, overview tools, and progressive narrowing

Using Serena for Exploration

Use this skill when exploring codebases with Serena MCP tools for architectural understanding and pattern discovery.

Core Principles

  • Start broad, narrow progressively
  • Use symbolic tools before reading full files
  • Always provide file:line references
  • Minimize token usage through targeted reads

Workflow

1. Initial Discovery

Use list_dir and find_file to understand project structure:

# Get repository overview
list_dir(relative_path=".", recursive=false)

# Find specific file types
find_file(file_mask="*auth*.py", relative_path="src")

2. Symbol Overview

Use get_symbols_overview before reading full files:

# Get top-level symbols in a file
get_symbols_overview(relative_path="src/auth/handler.py")

Returns classes, functions, imports - understand structure without reading bodies.

3. Targeted Symbol Reading

Use find_symbol for specific code:

# Read a specific class without body
find_symbol(
    name_path_pattern="AuthHandler",
    relative_path="src/auth/handler.py",
    include_body=false,
    depth=1  # Include methods list
)

# Read specific method with body
find_symbol(
    name_path_pattern="AuthHandler/login",
    relative_path="src/auth/handler.py",
    include_body=true
)

Name path patterns:

  • Simple name: "login" - matches any symbol named "login"
  • Relative path: "AuthHandler/login" - matches method in class
  • Absolute path: "/AuthHandler/login" - exact match within file
  • With index: "AuthHandler/login[0]" - specific overload

4. Pattern Searching

Use search_for_pattern when you don't know symbol names:

# Find all JWT usage
search_for_pattern(
    substring_pattern="jwt\\.encode",
    relative_path="src",
    restrict_search_to_code_files=true,
    context_lines_before=2,
    context_lines_after=2,
    output_mode="content"
)

Pattern matching:

  • Uses regex with DOTALL flag (. matches newlines)
  • Non-greedy quantifiers preferred: .*? not .*
  • Escape special chars: \\{\\} for literal braces

5. Relationship Discovery

Use find_referencing_symbols to understand dependencies:

# Who calls this function?
find_referencing_symbols(
    name_path="authenticate_user",
    relative_path="src/auth/handler.py"
)

Returns code snippets around references with symbolic info.

Reporting Format

Always structure findings as:

## Codebase Findings

### Current Architecture
- **Authentication:** `src/auth/handler.py:45-120`
  - JWT-based auth with refresh tokens
  - Session storage in Redis

### Similar Implementations
- **User management:** `src/users/controller.py:200-250`
  - Uses similar validation pattern
  - Can reuse `validate_credentials()` helper

### Integration Points
- **Middleware:** `src/middleware/auth.py:30`
  - Hook new auth method here
  - Follows pattern: check → validate → attach user

Anti-Patterns

Don't: Read entire files before understanding structure Do: Use get_symbols_overview first

Don't: Use full file reads for symbol searches Do: Use find_symbol with targeted name paths

Don't: Search without context limits Do: Use relative_path to restrict search scope

Don't: Return findings without file:line references Do: Always include exact locations: file.py:123-145

Token Efficiency

  • Overview tools use ~500 tokens vs. ~5000 for full file
  • Targeted symbol reads use ~200 tokens per symbol
  • Pattern search with head_limit=20 caps results
  • Use depth=0 if you don't need child symbols

Example Session

# 1. Find auth-related files
files = find_file(file_mask="*auth*.py", relative_path="src")
# → Found: src/auth/handler.py, src/auth/middleware.py

# 2. Get overview of main handler
overview = get_symbols_overview(relative_path="src/auth/handler.py")
# → Classes: AuthHandler
# → Functions: authenticate_user, validate_token

# 3. Read specific method
method = find_symbol(
    name_path_pattern="AuthHandler/authenticate_user",
    relative_path="src/auth/handler.py",
    include_body=true
)
# → Got full implementation of authenticate_user

# 4. Find who calls this
refs = find_referencing_symbols(
    name_path="authenticate_user",
    relative_path="src/auth/handler.py"
)
# → Called from: middleware.py:67, api/routes.py:123