news 2026/9/20 6:30:05

Grok Skills 技能系统完全指南:SKILL.md 编写、自动触发与分发实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Grok Skills 技能系统完全指南:SKILL.md 编写、自动触发与分发实战

Grok Skills 技能系统完全指南:SKILL.md 编写、自动触发与分发实战

【免费下载链接】grok-buildSpaceXAI's coding agent harness and TUI. Fullscreen, mouse interactive, extensible.项目地址: https://gitcode.com/gh_mirrors/gr/grok-build

Skills 是 Grok(本仓库 xai-grok-pager / xai-grok-shell 所实现的编码 Agent 与 TUI)提供的可复用提示包机制,把重复性任务流程固化成一份带元数据的 Markdown 文件,一次编写、反复触发。本文以官方用户指南 08-skills.md 为骨架,结合仓库内技能发现、解析、注入与检查的真实实现,系统讲解技能目录的优先级规则、SKILL.md 的 frontmatter 编写、/create-skill交互式创建、斜杠命令调用、自动触发判定、grok inspect排查,以及插件分发技能的最佳实践。读完你就能在项目或用户级目录里落地一套属于自己的技能库。


什么是 Skills

技能(Skill)本质上是一个包含SKILL.md文件的目录。这个 Markdown 文件的正文告诉 Grok 如何处理某一类任务:分步操作说明、项目约定、工具使用模式等,统统可以固化进去。

它与AGENTS.md的分工是:

  • AGENTS.md:面向整个仓库的常驻规则,任何会话都会加载;
  • Skill:面向"过于具体、写进 AGENTS.md 太重,但又太长、每次会话重新打一遍不划算"的可重复流程;
  • 触发方式:Grok 只在技能与当前任务匹配时才激活它——可以是你主动敲/skill-name,也可以是模型根据描述自动调用。

从源码结构看,这套机制贯穿两层:发现与解析位于 xai-grok-tools 的 skills 实现(SKILL.md 文件系统扫描与 frontmatter 解析),注入与排序位于 xai-grok-agent 的 prompt/skills.rs(按优先级汇聚各来源、过滤、标记禁用并写入系统提示)。


Skill 的发现位置与优先级

Grok 按下列目录发现技能,优先级从高到低:

位置作用域优先级说明
./.grok/skills/./.grok/commands/本地(CWD)最高当前目录技能 / 遗留命令 Markdown
<repo_root>/.grok/skills/…/commands/仓库整个仓库共享
~/.grok/skills/~/.grok/commands/用户最低跨项目个人技能
~/.claude/skills/~/.claude/commands/用户最低Claude Code 兼容(可配置)
./.claude/skills/./.claude/commands/本地 / 仓库项目 Claude 技能与旧式自定义斜杠命令
~/.cursor/skills/用户最低Cursor 兼容(可配置)
./.cursor/skills/本地 / 仓库项目 Cursor 技能(启用 cursor 兼容技能时)

几点关键行为(源码均能印证):

  • 按名称去重:Grok 按技能名去重,高优先级位置的同名技能覆盖低优先级位置。
  • 多前缀目录:除了.grok/,还会在每一层同时扫描.agents/skills/(以及commands/);并且会沿着工作目录到仓库根之间的每一级目录逐层向上走查。在 prompt/skills.rs 中,完整优先级被描述为:Local(cwd 下的.grok/.agents/.claude)→ 中间层级目录 → Repo(git 根下的.grok/.agents/.claude)→ User(~/.grok~/.agents~/.claude)→config.paths附加路径 → Server(注入的服务端同步目录)→ Bundled(内置打包目录,优先级最低)。
  • commands/ 目录的扁平规则commands/目录下扁平的*.md文件会成为可由用户调用的斜杠命令(文件名主干 = 命令名),与 Claude Code 的旧式自定义命令布局一致。对应实现见 discovery.rs:find_command_paths只做commands/下的非递归扫描,而find_skill_pathsskills/做递归遍历(walk_for_skill_md最多下探 5 层,即MAX_SKILL_WALK_DEPTH = 5)。
  • 不遵循.gitignore:技能与命令的发现不使用.gitignore。处于已知技能根(.grok/.agents/.claude/.cursor/)下的路径只要在磁盘上存在就会加载——团队经常把.claude/**当作仅本地的配置忽略掉,却仍期望/frontend这类项目命令可用。要隐藏技能,请用配置里的[skills] ignore,而不是仓库忽略规则。prompt/skills.rs 的注释明确写着:AGENTS.md 的发现仍遵循 gitignore(那属于仓库内容),而技能根目录不是。
  • 供应商默认技能的过滤:Grok 默认会扫描 Claude 与 Cursor 的技能目录。若想停掉某个厂商,可在~/.grok/config.toml[compat.cursor][compat.claude]下把对应skills单元置为false,或把环境变量GROK_CURSOR_SKILLS_ENABLEDGROK_CLAUDE_SKILLS_ENABLED设为false。详见 Configuration。无论这些开关如何设置,Grok始终过滤掉已知的厂商预置技能,例如 Cursor 的shellcanvasstatusline。这一点在 discovery.rs 中有一份完整 denylist:Cursor 侧是babysitcanvascreate-hookcreate-rulecreate-skillcreate-subagentloopmigrate-to-skillssdkshellsplit-to-prsstatuslineupdate-cli-configupdate-cursor-settings;Claude 侧是pdfdocxxlsxpptxskill-creator。注意过滤是按路径判定的——只有物理上位于/.cursor//.claude/目录下的同名技能才会被丢弃,你自己在~/.grok/skills/shell里写的技能不受影响。

附加技能目录

通过~/.grok/config.toml[skills]段,可以追加目录、排除路径或单独禁用技能:

[skills] paths = ["~/my-team-skills"] # 额外扫描的目录 ignore = ["~/my-team-skills/wip"] # 排除的路径(完全隐藏) disabled = ["wip-skill"] # 保留列表但停用的技能名
  • paths中每一项可以是一个SKILL.md文件,也可以是一个会被递归遍历的目录;
  • ignore完全隐藏技能;
  • disabled让技能留在列表里,但既不进系统提示,也不允许调用;
  • pathsignore接受文件系统路径并支持~展开;disabled接受技能名。

这些字段与源码中SkillsConfig一一对应:见 prompt/skills.rs,其中还额外包含由启动器注入的server_skill_dirs(Server 作用域)与bundled_skill_dirs(Bundled 作用域)。ignore的匹配是前缀匹配:在list_skills_with_plugins中,任何解析路径以 ignore 条目开头的技能都会被整体过滤掉。

补充:shell 侧还支持[paths] extra_skill_dirs数组作为[skills].paths的补充来源,见 extensions/skills.rs;在grok inspect的输出中会被标记为config来源。


创建 Skill

目录结构

每个技能拥有自己的目录,内含一个SKILL.md

~/.grok/skills/ commit/ SKILL.md review-pr/ SKILL.md deploy/ SKILL.md

SKILL.md 格式

技能文件 = YAML frontmatter + Markdown 正文:

--- name: commit description: Create well-formatted git commits following conventional commit standards. Use when the user wants to commit changes or asks for /commit. --- # Git Commit Skill Review staged changes and create a commit with a clear, conventional message. ## Steps 1. Run `git diff --staged` to see changes 2. Summarize what changed and why 3. Create commit message following conventional commits format 4. Run `git commit -m "..."` with the message

核心 frontmatter 字段

字段说明
name技能标识。使用小写字母、数字和连字符,最长 64 字符。Grok 会把空格和下划线规范化为连字符。省略时使用技能目录名。
description技能做什么、何时使用。Grok 依据它决定是否自动调用技能。省略时使用正文第一段。

description必须写得具体——它直接决定技能的自动触发时机。把触发短语和使用场景都写进去。

可选 frontmatter 字段

多词键使用 kebab-case(单词键如model原样书写)。

字段说明
when-to-use自动调用的触发短语,与description分离维护。
allowed-tools技能用到的工具,YAML 列表或逗号/空格分隔的字符串。
argument-hint斜杠命令自动补全中显示的提示文本(例如commit message)。
user-invocable是否可当作斜杠命令运行。默认true;设为false从斜杠命令中隐藏。(要禁止模型调用,用disable-model-invocation。)
disable-model-invocationtrue时只有你的斜杠命令能运行该技能——模型不能自动调用。默认false
model运行该技能时的模型覆盖。
effort推理强度(reasoning-effort)覆盖。
license许可证标识(例如Apache-2.0)。
compatibility环境要求(例如Requires git, docker, jq)。
metadata任意字符串键值对。metadata.authormetadata.short-description会被 Grok 提升用于展示。

解析器的容错与约束(源码级细节)

discovery.rs 是技能解析的单一汇聚点,有几个值得注意的实现细节:

  • 命名规范化normalize_skill_name会把名字转小写,把任何非[a-z0-9]字符(空格、下划线、点号等)替换为连字符,折叠连续连字符并去掉首尾连字符,例如tool-v1.2会被规范化为tool-v1-2,而不是直接丢弃该技能(discovery.rs)。is_valid_skill_name校验:非空、不超过 64 字符、不以连字符开头/结尾、不含--、只含小写字母数字与连字符。
  • 描述兜底策略description缺失时,解析器用 pulldown-cmark 解析正文,优先取第一个散文段落;只有没有散文段落时才退回标题,最后退回技能名。表格、列表、代码块和引用块会被跳过,避免把结构内容误当描述(discovery.rs)。
  • YAML 容错三级恢复:frontmatter 解析失败时,先尝试给含 YAML 指示符的值加引号重试,仍失败则对namedescriptionwhen-to-use做逐行标量恢复,绝不因为一个字段写坏就丢掉整个 frontmatter(discovery.rs)。
  • 工具列表解析allowed-tools支持字符串或 YAML 列表,且会保留括号内的整体,例如Bash(git diff:*)不会被拆分(discovery.rs)。
  • paths门控:frontmatter 还支持一个原文档未展开的paths字段——glob 模式列表,用来限制技能在哪些路径下才会被 surface;**或空值表示总是出现。解析时{a,b}花括号组会保持完整交给 gitignore 匹配器展开(discovery.rs)。
  • 体积上限MAX_NAME_LEN = 64MAX_DESCRIPTION_LEN = 1024MAX_FRONTMATTER_BYTES = 4096MAX_BODY_PEEK_BYTES = 2048(discovery.rs)。

用 /create-skill 创建技能

/create-skill命令会以交互方式引导你完成新技能的创建:Grok 询问你的需求、起草文件并写入磁盘。

工作流程

运行/create-skill后,Grok 依次:

  1. 收集需求:询问技能名、保存的作用域、以及你想固化的工作流描述。名字用 2–64 字符的小写字母、数字和连字符,且以字母或数字开头和结尾。
  2. 起草描述:写出description,包含技能做什么、触发短语、斜杠命令名。你批准或编辑草稿后继续。
  3. 创建技能目录:创建<scope>/.grok/skills/<name>/目录,需要时还会创建scripts/references/子目录。
  4. 写入 SKILL.md:写入 frontmatter(namedescription)以及 Markdown 正文,连同所需的辅助文件。
  5. 校验并确认:回读文件、确认写入正确,并告诉你如何运行该技能。

选择作用域

Grok 会询问把技能保存到哪里:

  • Project(项目)<repo_root>/.grok/skills/<name>/—— 仅当前仓库可用,可通过版本控制与队友共享。在 git 仓库内 Grok 推荐此作用域。
  • User(用户)~/.grok/skills/<name>/—— 所有项目可用。

若要把技能分发给整个团队或组织,可以打包进插件并通过市场发布。参见 Create your own marketplace 与 Distribute across an organization。

新技能会在几秒内出现在斜杠菜单中——因为 Grok 会在磁盘文件变化时自动重载技能。仓库为此实现了文件监听:技能目录的集合由 collect_skill_config_dirs 统一提供给发现逻辑与文件 watcher,保证二者对"哪些目录重要"的认知一致。


使用 Skills

按名称运行

每个技能都是一个以技能名命名的斜杠命令,直接输入名字即可:

/commit # 运行 "commit" 技能 /review-pr # 运行 "review-pr" 技能

运行技能会把其指令载入当前对话,并引导模型遵循。要传参数,在名字后追加即可:

/commit fix the build

浏览技能:输入/打开斜杠命令菜单,Grok 会列出所有内置命令和技能并随输入过滤。命令行查看则用grok inspect(见下文"查看技能详情")。

限定名称(Qualified Names)

当技能名与另一技能或内置命令冲突时,Grok 让两者都可调用:内置命令保留裸名(/login/compact等),技能则以作用域前缀的限定名呈现——local:repo:user:或插件名:

/local:commit # 来自 ./.grok/skills/ 的 "commit" 技能 /user:commit # 来自 ~/.grok/skills/ 的 "commit" 技能 /acme:login # 名为 "login" 的插件技能(内置 /login 不受影响)

在斜杠菜单中输入/login会同时显示两行,右侧有右对齐的built-inskill · plugin-name徽标便于区分。想要裸名/name,就重命名技能(或它的目录)。

grok inspect会给冲突技能打上[collides with /login → /acme:login]标签。该逻辑实现在 inspect/mod.rs:通过统计斜杠名出现次数与内置命令集比对,得出collides_with(被争夺的名字)与invocable_as(应输入的限定命令)。

自动触发

当识别到相关任务时,Grok 可以自行调用技能:它会拿你的提示与技能的descriptionwhen-to-use字段做匹配,所以两者都要写清楚触发情境。

例如,某技能 description 写的是 "Use when the user wants to commit changes",那么你说 "commit my changes" 就可能自动触发该技能。若想强制显式斜杠命令、禁止自动触发,在 frontmatter 中设置:

disable-model-invocation: true

从实现看,自动触发与系统提示注入是同一链路:list_skills_with_plugins把各来源技能合并、应用ignore过滤、处理插件技能合并,最后把disabled名单中的技能标记enabled = false,排除出系统提示与技能工具调用(prompt/skills.rs)。优先级合并遵循"本地 > 仓库 > 用户 > 附加路径 > Server > Bundled",同名技能高优先级覆盖低优先级,而插件技能即使与原生技能同名也不会覆盖原生技能,只会保留在plugin:name限定形式下。


查看技能详情

运行grok inspect查看 Grok 发现的所有技能以及其余配置:

grok inspect # 人类可读摘要 grok inspect --json # 机器可读报告

人类可读输出中,Skills 一节会列出每个技能的名称与来源——projectuserbundledconfig[skills].paths条目)、server(托管工作区中从技能商店同步来的)、或plugin: <name>。经[skills].disabled禁用或来自被禁供应商面的技能会打上[disabled]标记。

该报告与真实会话遵守同样的[skills]配置规则:paths中的技能被列出,ignore前缀下的技能被隐藏,disabled名单中的技能保留但标记为[disabled]

--json报告包含每个技能的完整细节:namedescriptionsource(含 SKILL.md 路径)以及userInvocable标志。裸斜杠名被内置命令或其他技能争夺的技能,还会包含collidesWith(被争夺的名字)与invocableAs(要输入的限定命令)——对应 inspect/mod.rs 中的SkillEntry字段。


内置技能与插件技能

Grok 把平台技能与个人技能分开分发:

  • 内置技能缓存在~/.grok/bundled/skills/下,Grok 从不把它们写入~/.grok/skills/;同名的本地、仓库或用户技能会覆盖内置副本。grok inspect会按实际来源标注每个定义。
  • 插件技能:安装带技能的插件后,它们与用户、项目技能并列出现。grok inspect会把每个插件技能标注为plugin: <name>
  • 同名插件技能不会覆盖原生技能,它保持在plugin:name限定形式下可用。

关于安装提供技能的插件,详见 Plugins guide。

从实现看,插件技能的收集走独立路径:collect_plugin_skills遍历插件注册表(prompt/skills.rs),插件的作用域(CliOverride→ Local、Project→ Repo)会决定技能的 scope 归类,plugin_nameplugin_version会被记录在SkillInfo中。

此外,Grok 还提供了一套 ACP 扩展方法用于在会话中动态管理技能配置(extensions/skills.rs):

  • x.ai/skills/add/x.ai/skills/remove:把路径加入/移出[skills].paths,路径支持~展开与相对 cwd 解析,随后以 5 秒超时重载全部技能并返回新增/剩余数量;
  • x.ai/skills/reset:把技能配置恢复为默认;
  • x.ai/skills/list/x.ai/skills/config:列出全部技能与当前发现源摘要(自动发现目录、自定义路径、忽略项、加载总数);
  • x.ai/skills/toggle:按名字启用/禁用技能(即[skills].disabled名单的增删)。

其中resolve_skill_path(extensions/skills.rs)负责把~/...、相对路径、..统统解析成绝对路径再写入配置,保证从任何 cwd 都生效。


最佳实践

  1. 写具体的 description。description 驱动自动触发。"Create git commits" 太笼统;"Create well-formatted git commits following conventional commit standards. Use when the user wants to commit changes or asks for /commit." 要好得多。
  2. 包含具体步骤。给 Grok 一条清晰有序的流程,技能才最好用。
  3. 按名字引用工具。技能依赖特定工具(如run_terminal_commandsearch_replace)时,直接点名,模型才知道该用什么。别忘了在allowed-tools里声明。
  4. 保持技能聚焦。一个工作流一个技能。"deploy" 和 "rollback" 两个技能,好过一个 "deploy-and-rollback"。
  5. 项目技能纳入版本控制。把.grok/skills/提交进仓库,全团队受益;~/.grok/skills/里的用户技能保持个人私有、不共享。
  6. 先跑再依赖。在依赖自动触发之前,先手动/name调用一次确认技能工作正常。

小结

Grok 的 Skills 机制可以概括为三句话:一个目录 + 一份 SKILL.md(带 frontmatter 元数据与 Markdown 步骤正文);一套按优先级排布的发现位置(CWD 本地 > 仓库 > 用户 > 附加路径 > 内置,同名高优先级覆盖低优先级);两种触发方式(用户斜杠命令/name与模型按 description/when-to-use 自动调用)。配合/create-skill交互式创建、grok inspect排查、[skills]配置精细管控,以及插件/市场分发,它可以成为团队沉淀工程流程的标准化载体。深入阅读推荐:发现与解析实现见 discovery.rs,优先级汇聚与系统提示注入见 prompt/skills.rs,会话内动态管理见 extensions/skills.rs,grok inspect报告见 inspect/mod.rs。

【免费下载链接】grok-buildSpaceXAI's coding agent harness and TUI. Fullscreen, mouse interactive, extensible.项目地址: https://gitcode.com/gh_mirrors/gr/grok-build

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/20 6:28:25

管理员阻止你运行此应用?UAC、SmartScreen、AppLocker排查指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/20 6:28:05

自托管LibreChat:多AI模型聚合部署与运维实战

1. 为什么我最终选择了自托管LibreChat1.1 从“多平台切换”到“一个入口”的真实痛点我日常的工作流里&#xff0c;AI对话工具的使用频率非常高。写代码时需要模型帮忙审查逻辑&#xff0c;写文档时需要模型润色措辞&#xff0c;查资料时需要模型快速总结长文&#xff0c;偶尔…

作者头像 李华
网站建设 2026/9/20 6:27:56

LibreChat完全指南:自托管多模型AI对话平台部署与深度实践

1. 项目概述与定位1.1 为什么我会盯上LibreChat先说说我自己的经历。去年以来我一直在各种自托管AI应用之间反复横跳&#xff0c;用过ChatGPT网页版、OpenAI的API、Claude、Gemini&#xff0c;也折腾过Open WebUI、LobeChat这类开源项目。说实话&#xff0c;每次换工具都要重新…

作者头像 李华
网站建设 2026/9/20 6:27:49

大模型Token成本治理:从计费原理到降本实战与认证令牌排查

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/20 6:27:20

把背句子变成游戏:游戏化连词成句工具 Earthworm 完整指南

把背句子变成游戏&#xff1a;游戏化连词成句工具 Earthworm 完整指南 【免费下载链接】earthworm Learning English through the method of constructing sentences with conjunctions 项目地址: https://gitcode.com/GitHub_Trending/ea/earthworm "I"、&qu…

作者头像 李华
网站建设 2026/9/20 6:27:13

Lada v0.11.0老视频修复实测:N卡与Intel Arc本地部署全攻略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华