Claude Code Plugins

Community-maintained marketplace

Feedback
5
22

Use ast-grep for structural code search and refactoring when editing code structure with ambiguity in text matching, handling "old_string not unique" problems, or performing formatting-independent pattern matching across function signatures, method calls, and class structures

Install Skill

Shared

Installs to .agents/skills, used by Codex, Amp, Warp, Cursor, OpenCode, and more.

CodexAmp
Warp
CursorOpenCode
Cline
Gemini CLI
GitHub Copilot
Personal

Available across projects.

$npx skills-installer add @xdg/xdg-claude/ast-grep --client shared
Project

Writes to .agents/skills.

$npx skills-installer add @xdg/xdg-claude/ast-grep -p --client shared
Note: Review the skill instructions before using it.

SKILL.md

name ast-grep
description Structural code search and refactoring via ast-grep. Reach for this when Edit fails with "old_string not unique", when refactoring across formatting variations, or when matching code shape rather than text.

ast-grep

Default invocation:

ast-grep -l LANG -p 'PATTERN'                      # search
ast-grep -l LANG -p 'OLD' -r 'NEW'                 # preview rewrite
ast-grep -l LANG -p 'OLD' -r 'NEW' --update-all    # apply

-l is required -- auto-detect is unreliable. Interactive mode (-i) does not work from this harness.

Metavariables

  • $VAR -- one AST node (an expression, an identifier, ...)
  • $$$ARGS -- zero or more items in a list (function args, statement bodies)
  • $$STMT -- multiple statements

Canonical patterns

# Rename a function across all call sites
ast-grep -l typescript -p 'oldFn($$$ARGS)' -r 'newFn($$$ARGS)'

# Rename a method on any receiver
ast-grep -l javascript -p '$OBJ.oldMethod($$$ARGS)' -r '$OBJ.newMethod($$$ARGS)'

# Rewrite imports
ast-grep -l typescript -p 'import $WHAT from "old-pkg"' -r 'import $WHAT from "new-pkg"'

Workflow: run without -r to see matches, run with -r to preview the diff, then add --update-all. For surgical per-site control, use ast-grep to find locations and Edit to apply.

To list a file's or package's structure (functions, types, imports/exports) rather than match a pattern, use the outline subcommand -- see the code-structure skill.