前言
前面对Claude Code CLI有了基本了解,对MCP配置做了详细探索,今天继续对Claude Code CLI 自定义命令配置做下深度探索和使用。对往期内容感兴趣的小伙伴也可以看往期内容:
- Claude Code CLI初体验
- 不习惯终端黑窗口?Claude Code Chat可视化插件猜你会喜欢
- Claude Code CLI平台与中转站接入汇总及避坑
- 使用Claude Code Router轻松切换各种高性价比模型
- Claude Code CLI MCP配置很难?三种方式轻松掌握
当前使用版本
1.0.128 (Claude Code)
自定义命令类型
在前面我们知道,自定义命令也是分 项目命令 和 个人(全局)命令 2种的,对自定义命令范围还不了解的小伙伴可以看往期内容:Claude Code CLI初体验
- 项目命令:作用于指定项目,需要在 项目根目录/.claude/commands/ 目录下创建以 .md 结尾的Markdown文件
- 个人(全局)命令:作用于所有项目,需要在 ~/.claude/commands/ 目录下创建以 .md 结尾的Markdown文件
创建全局自定义命令文件 ~/.claude/commands/todo-list.md,提示词内容如下:
css
查看@todo.md中的任务
进入其它工作区,启动Claude Code CLI,输入 /todo-list 可以看到定义的全局自定义命令

创建项目自定义文件 /Users/claude-code-cli/.claude/commands/todo-list1.md 输入相同提示词,重启Claude Code CLI,在 claude-code-cli 工作区可以查看自定义命令

在 gemini-cli 工作区是无法查看的

普通命令
首先在项目根目录创建 .claude/commands 文件夹,在文件夹中创建一个 project-info.md 文件,输入如下提示词:
分模块输出当前项目信息
带参数命令
单参数
除了可以自定义纯文本提示词命令,我们也可以自定义接收参数的自定义命令,通过 $ARGUMENTS 参数占位符可以将动态值传递给命令。
首先看一个简单的例子,通过"今天、明天"等参数获取日期信息,我们可以这么写:
bash
$ARGUMENTS 是几月几号,星期几

重启Claude Code CLI,在Claude Code CLI中输入 / 就可以看到刚刚定义的date-info 命令

输入 /data-info 今天/明天 可以看到 $ARGUMENTS 参数占位符将我们输入的日期代词传递给了自定义命令并为我们准确输出了日期信息
bash
/data-info 今天
/data-info 明天

多参数
$ARGUMENTS 参数占位符也可以动态接收多个参数,我们定义一个查询天气的自定义命令,提示词内容如下:
bash
输出 $ARGUMENTS 的 $ARGUMENTS 信息

重启Claude Code CLI,使用 /weather-info 命令并传入对应参数

目前使用的模型不支持联网,没有拿到天气信息,但是可以看到AI准确得到了我们想要查询的是 今天的天气信息 内容

位置参数
除了使用 <math xmlns="http://www.w3.org/1998/Math/MathML"> A R G U M E N T S 参数占位符, C l a u d e C o d e C L I 中也支持通过 ARGUMENTS 参数占位符,Claude Code CLI中也支持通过 </math>ARGUMENTS参数占位符,ClaudeCodeCLI中也支持通过1、$2 等位置参数占位符类似Shell脚本等参数取值方式。
以上面的天气示例为例,也可以写成以下方式:
bash
输出 $1 的 $2 信息

重启Claude Code CLI,使用 /weather-info 命令并传入对应参数

可以看到AI最终得到的上下文信息也是准确的,是我们想要表达的 明天的天气信息 内容

Bash命令
Claude Code CLI自定义命令中允许我们在执行自定义命令前执行Bash命令,输出包含在自定义命令上下文中,前提是我们需要包含Bash命令执行的权限。
创建 commands/cmd-shell.md 文件,实现一个简单的文件内容输出功能,输入提示词:
markdown
## 任务
- 执行`!ls`查看文件列表
- 输出文件名包含`todo`文件的内容

重启Claude Code CLI,使用 /cmd-shell 调用自定义命令,可以看到自定义命令输出了文件列表并输出了todo.md文件的内容

创建 commands/git-commit.md 文件,输入如下提示词:
yaml
---
allowed-tools: Bash(git add:*), Bash(git status:*), Bash(git commit:*)
description: 创建git提交
---
## 上下文
- 当前git状态:!`git status`
- 当前git差异(已暂存和未暂存的更改):!`git diff HEAD`
- 当前分支:!`git branch --show-current`
- 最近的提交:!`git log --oneline -10`
## 您的任务
基于上述更改,创建一个git提交。

重启Claude Code CLI,使用 /git-commit 调用自定义命令

执行完成后,我们将得到一个根据修改自动提交的commit

文件引用
使用 @ 前缀引用文件,引用文件路径以当前执行自定义命令的路径为起始,即使自定义命令定义在全局,依然可以查看调用命令路径下的todo.md任务
创建 项目根目录/.claude/commands/todo-list.md 文件,输入如下提示词:
css
查看@todo.md中的任务

在项目根目录创建 todo.md 文件,随便写点任务列表

重启Claude Code CLI,使用 /todo-list 调用自定义命令

可以看到准确读取并输出了工作区下的 todo.md 的任务待办内容

嵌套命令
Claude Code CLI自定义命令也支持自定义嵌套命令,即可以为自定义命令添加分组,以上面git commit为例,将git-commit.md移动到 项目根目录/.claude/commands/git/git-commit.md

重启Claude Code CLI,输入 / 即可看到git-commit命令

通过 /git:git-commit 调用嵌套命令

思考模式
斜杠命令可以通过包含 扩展思考关键词 来触发扩展思考,在Claude Code CLI中有4种思考预算级别:think < think hard< think harder < ultrathink
使用也很简单,只需要在提示词后加入 think hard 等思考等级

重启Claude Code CLI,输入 /think-hard 9.11和9.9在不同场景大小比较 调用自定义命令

Frontmatter
Claude Code CLI的自定义命令使用Markdown文件后缀和语法定义,也同样支持frontmatter,除了上面看到的 allowed-tools 和 description,还有 argument-hint 和 model 属性
- allowed-tools:命令可以使用的工具列表
- argument-hint:命令的预期参数示例,例如:argument-hint: add [tagId]
- description:命令简要说明
- model:命令执行使用的模型,不配置使用默认模型
比如我们实现一个根据输入内容创建git commit的自定义命令,首先创建一个 git-commit-message.md 文件,输入如下内容:
yaml
---
allowed-tools: Bash(git add:*), Bash(git status:*), Bash(git commit:*)
argument-hint: [message]
description: 创建一个git commit
model: glm-4.5
---
使用$ARGUMENTS创建一个git commit

重启Claude Code CLI,输入 /git-commit-message 查看命令信息

我们也可以将 argument-hint 中的内容换成任意我们需要的内容

调用Agent
创建 commands/code-reviewer.md 文件,输入提示词内容:
css
使用`code-reviewer`agent review我最近修改的内容

重启Claude Code CLI,输入 /code-reviewer 执行命令

就可以看到在执行自定义命令过程中调用了 code-reviewer agent来完成code reviewer

友情提示
本文同步自微信公众号 "程序员小溪" ,这里只是同步,想看及时消息请移步我的公众号,不定时更新我的学习经验。友情提示友情提示