Token导航 LogoToken导航

Agent Skill · 开发

ast-grep(搜索结果 grep)

ast-grep 用于处理 GitHub 仓库、Issue、Pull Request 和代码协作信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要围绕仓库状态、代码变更或协作事项进行整理时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

ast-grep 是开发类 Agent Skill,可用宿主为 Codex、Claude、Cursor、Gemini CLI,通过GitHub 仓库获取,权限为调用外部服务;许可证信息还不明确,第三方扫描已通过,按安装量在开发类的 21,744 个 Skill 里排第 18,732。

总安装 318周安装 13GitHub Stars 11下载 103核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
unknown

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:ast-grep(搜索结果 grep)
来源仓库:https://github.com/dwsy/agent
仓库路径:skills/ast-grep
安装命令:
npx skills add https://github.com/dwsy/agent --skill ast-grep
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/dwsy/agent --skill ast-grep

这个 Skill 是做什么的

开发类 Skill 面向写代码、改代码和排查问题,一般会读写仓库文件,部分还会执行构建或测试命令。

ast-grep 基于 AST 进行语法感知代码搜索与重构。适用于大规模代码库的模式匹配与批量修改任务。ast-grep 属于开发类 Skill,可作为该场景下的辅助能力补充。支持多语言与自定义规则配置,比文本 grep 更精确。使用前需安装 CLI 工具并在项目根目录执行扫描。

建议先用 -p 参数测试模式有效性,避免误改关键逻辑。

来源仓库内路径:skills/ast-grep

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 Codex、Claude、Cursor、Gemini CLI;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 npx skills add https://github.com/dwsy/agent --skill ast-grep;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它需要调用外部服务,先在测试目录或测试账号里跑,确认没问题再放到正式项目。

常见问题

6 条

ast-grep 怎么安装?

在终端执行 npx skills add https://github.com/dwsy/agent --skill ast-grep。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

ast-grep 支持哪些 AI 工具?

公开资料标注支持 Codex、Claude、Cursor、Gemini CLI。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

ast-grep 需要什么权限?

权限级别是调用外部服务。该 Skill 可能调用第三方服务、云服务或外部模型 API,使用前需要确认账号、额度、数据发送范围和服务条款。

ast-grep 是免费的吗?

公开资料没有标注明确许可证,收费和商用限制都无法确认。正式使用前请到来源仓库核对授权说明。

ast-grep 用的人多吗?

公开数据是累计安装 318 次,近一周安装 13 次,下载 103 次,GitHub 11 星。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

ast-grep 安全吗?

第三方扫描结果为通过,但这只覆盖已知的静态检查项,不能替代自己读一遍源码和安装命令。

值得选的地方和要先想清楚的地方

值得选的地方

  • 同时适配 4 种工具,换客户端不用重新找替代品。
  • 第三方扫描已通过,常见的高风险行为没有命中。

先想清楚的地方

  • 许可证没有明确标注,能不能商用、能不能再分发都不确定。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 Codex,想直接扩展它能力的人。
  • 需要处理开发类任务、又不想每次都手写提示词的人。

不太适合

  • 需要明确授权才能用到公司项目里的场景。
  • 需要厂商级技术支持和 SLA 的生产系统。

开发类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
skill-vetter

技能审查员 · OpenClaw

8,779,018986操作浏览器MIT-0通过
ontology

本体论 · OpenClaw

6,636,960576只读MIT-0通过
entra-app-registration

内部应用程序注册 · Codex、Claude

6,631,872764接触敏感数据未明确通过
entra-app-registration

内部应用程序注册 · Codex、Claude

3,757,680201接触敏感数据未明确通过
nano-banana-pro

纳米香蕉专业版 · OpenClaw

3,526,898364接触敏感数据MIT-0有提醒
ast-grep

搜索结果 grep · 本页

31811调用外部服务未明确通过

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

AST-Grep

AST-Grep (ast-grep/sg) 是一个快速且用户友好的工具,用于代码搜索、linting 和大规模代码重写。

执行环境

路径类型说明
使用方式命令行工具,需要安装 ast-grep
调用场景语法感知的代码搜索、结构化代码分析、批量代码转换
工作目录项目根目录

安装

# macOS
brew install ast-grep

# Linux
cargo install ast-grep

# 验证安装
ast-grep --version

核心功能

1. 语法感知搜索

使用 AST(抽象语法树)进行代码搜索,而非简单的文本匹配。

# 搜索特定模式
ast-grep --lang python -p "def $FUNC($$$ARGS):"

# 搜索函数调用
ast-grep --lang ts -p "console.log($$$MSG)"

# 搜索条件语句
ast-grep --lang ts -p "if ($$COND) { $$$BODY }"

2. 代码 Linting

基于 AST 的代码检查,比传统 linter 更精确。

# 扫描项目
ast-grep scan -r sgconfig.yml

# 扫描特定目录
ast-grep scan src/

# 扫描特定文件
ast-grep scan src/main.ts

3. 代码重写

批量转换代码模式。

# 简单替换
ast-grep run -p "oldFunction($$$ARGS)" -r "newFunction($$ARGS)" --lang ts

# 复杂转换(使用 YAML 规则)
ast-grep run -r rule.yml

4. 规则测试

测试 ast-grep 规则是否正确。

# 测试规则
ast-grep test -r rule.yml

# 测试特定模式
ast-grep test -p "pattern" --lang ts

规则开发流程

通用流程

  1. 理解查询:明确用户需求,必要时询问更多细节
  2. 编写示例:编写匹配查询的简单代码示例
  3. 编写规则:编写匹配示例的 ast-grep 规则
  4. 测试规则:使用 test_match_code_rule 验证规则

- 如果不匹配,移除部分子规则并调试 - 如果使用 inside 或 has,确保使用 stopBy: end

  1. 搜索代码:使用规则搜索代码库

规则开发步骤

  1. 分解查询:将用户查询分解为更小的部分
  2. 识别子规则:识别可用于匹配代码的子规则
  3. 组合规则:使用关系规则或组合规则组合子规则
  4. 调试规则:如果规则不匹配示例代码,移除部分子规则并调试不匹配的部分
  5. 使用工具:使用 ast-grep mcp 工具转储 AST 或转储模式查询
  6. 测试规则:使用 ast-grep mcp 工具针对示例代码片段测试规则

规则类型

1. 原子规则

匹配单个 AST 节点,基于内在属性。

pattern - 模式匹配
# 字符串模式
pattern: console.log($ARG)

# 对象模式(更精细的控制)
pattern:
  selector: field_definition
  context: class { $F }
  strictness: relaxed
kind - 节点类型匹配
kind: call_expression
regex - 正则表达式匹配
regex: ^[a-z]+$
nthChild - 位置匹配
# 数字
nthChild: 1

# An+B 公式
nthChild: 2n+1

# 对象形式
nthChild:
  position: 1
  reverse: true
  ofRule:
    kind: function_declaration
range - 范围匹配
range:
  start:
    line: 0
    column: 0
  end:
    line: 0
    column: 10

2. 关系规则

基于目标节点与其他节点的关系过滤目标。

inside - 在父节点内
inside:
  pattern: class $C { $$$ }
  stopBy: end
has - 包含子节点
has:
  pattern: await $EXPR
  stopBy: end
precedes - 在节点之前
precedes:
  pattern: return $VAL
follows - 在节点之后
follows:
  pattern: import $M from '$P'
stopBy - 搜索终止控制
# neighbor(默认):在直接周围节点不匹配时停止
stopBy: neighbor

# end:搜索到方向末尾(inside 为根,has 为叶子)
stopBy: end

# 规则对象:在周围节点匹配提供的规则时停止(包含)
stopBy:
  pattern: class $END
field - 字段匹配
has:
  field: operator
  pattern: $$OP

3. 组合规则

使用逻辑操作组合其他规则。

all - 逻辑与(AND)
all:
  - kind: call_expression
  - pattern: console.log($ARG)
any - 逻辑或(OR)
any:
  - pattern: console.log($ARG)
  - pattern: console.warn($ARG)
  - pattern: console.error($ARG)
not - 逻辑非(NOT)
not:
  pattern: console.log($ARG)
matches - 规则重用
matches: my-utility-rule-id

元变量

$VAR - 单个命名节点捕获

# 有效
pattern: console.log($GREETING)

# 匹配
console.log('Hello World')

$$VAR - 单个未命名节点捕获

# 匹配操作符
rule:
  kind: binary_expression
  has:
    field: operator
    pattern: $$OP

$$$VAR - 多节点捕获

# 匹配零个或多个节点(非贪婪)
pattern: console.log($$$)

# 匹配可变参数
pattern: function $FUNC($$$ARGS) { $$$ }

_VAR - 非捕获元变量

# 不捕获,可以匹配不同内容
pattern: $_FUNC($_FUNC)

# 匹配
test(a)
testFunc(1 + 1)

编写规则的最佳实践

  1. 始终使用 stopBy: end:对于关系规则,确保搜索到方向末尾
has:
  pattern: await $EXPR
  stopBy: end
  1. 简单结构使用 pattern:代码结构简单时直接使用模式
pattern: console.log($ARG)
  1. 复杂结构使用 rule:代码结构复杂时使用规则分解
rule:
  kind: function_declaration
  has:
    pattern: await $EXPR
  1. 使用 kind 调试:如果 pattern 不工作,先用 kind 匹配节点类型
# 先确认节点类型
kind: call_expression

# 再使用 has 或 inside
has:
  pattern: console.log($ARG)
  1. 关系规则无匹配时添加 stopBy:确保搜索到末尾
inside:
  pattern: class $C { $$$ }
  stopBy: end

YAML 规则配置

简单规则

# rule.yml
id: no-console-log
language: ts
rule:
  pattern: console.log($$$MSG)

复杂规则

# complex-rule.yml
id: prefer-const
language: ts
rule:
  all:
    - pattern: let $VAR = $INIT
    - not:
        pattern: $VAR = $EXPR

带修复的规则

# fix-rule.yml
id: no-var
language: ts
rule:
  pattern: var $VAR = $INIT
fix: const $VAR = $INIT

使用关系规则

# async-without-await.yml
id: async-without-await
language: ts
rule:
  all:
    - pattern: async function $FUNC($$$ARGS) { $$$BODY }
    - not:
        has:
          pattern: await
          stopBy: end

常用场景

1. 查找特定代码模式

# 查找所有 console.log
ast-grep -p "console.log($$$MSG)" --lang ts

# 查找所有未使用的变量
ast-grep -p "let $VAR = $INIT" --lang ts | grep -v "$VAR ="

2. 重构代码

# 替换 var 为 const
ast-grep run -p "var $VAR = $INIT" -r "const $VAR = $INIT" --lang ts

# 重命名函数
ast-grep run -p "oldFunc($$$ARGS)" -r "newFunc($$ARGS)" --lang ts

3. 代码审计

# 查找潜在的安全问题
ast-grep -p "eval($$$EXPR)" --lang js

# 查找 SQL 注入风险
ast-grep -p "query('$$SQL')" --lang py

4. API 迁移

# 迁移旧 API 到新 API
ast-grep run -p "oldApi($$$ARGS)" -r "newApi($$ARGS)" --lang ts

# 批量更新导入
ast-grep run -p "from 'old-lib' import $$IMPORT" -r "from 'new-lib' import $$IMPORT" --lang ts

与其他工具对比

特性ast-grepgrepripgrep
语法感知是否否
代码结构理解是否否
跨语言支持是否否
性能快快最快
重写功能是否否

参考资源

集成 Pi 工作流

Phase 1: 上下文检索

当需要理解代码结构时,使用 ast-grep 进行语法感知搜索:

# 查找特定模式
ast-grep -p "pattern" --lang <language>

Phase 4: 编码实施

使用 ast-grep 进行批量代码转换:

# 应用重构规则
ast-grep run -r rule.yml

Phase 5: 审计

使用 ast-grep 验证代码质量:

# 扫描潜在问题
ast-grep scan -r sgconfig.yml

注意事项

  • ast-grep 需要安装才能使用
  • 模式语法需要熟悉 AST 结构
  • 复杂规则建议先测试再应用
  • 大规模重构前建议备份代码
  • 使用 stopBy: end 确保关系规则搜索完整
  • 元变量必须符合语法要求($VAR, $$VAR, $$$VAR)

平台分布

Codex

34.99%
按下载量换算36

Claude

29.52%
按下载量换算30

Cursor

19.35%
按下载量换算20

Gemini CLI

10.96%
按下载量换算11

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

调用外部服务

该 Skill 可能调用第三方服务、云服务或外部模型 API,使用前需要确认账号、额度、数据发送范围和服务条款。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。目前只有一个公开来源,建议同时核对源仓库。

继续浏览同类 Skills