自定义命令参数
区分正文替换、Shell 参数转义和完整命令追加,避免误解参数解析。
{{args}} 接收命令名之后的输入文本。它是提示模板的占位符,不是声明式参数 Schema,也不自动把输入拆成具名字段。
提示正文中的原样替换
description = "Explain the requested issue."
prompt = "Explain this issue and suggest a minimal fix: {{args}}"调用 /explain "Button is misaligned" 时,正文中的替换文本仍包含用户输入的双引号。可以在 prompt 中要求模型识别版本、类别和说明,但这属于模型解释提示的过程,不能当成确定性的命令行参数校验。
Shell 块中的转义
prompt = """
Summarize matches for {{args}}.
!{grep -r {{args}} .}
"""同一次调用中,正文里的 {{args}} 原样替换,!{...} 内的占位符先做 Shell 转义。CLI 在替换完成后检查并展示将执行的命令,请用户确认。
转义适用于这个占位符的 Shell 使用位置;固定命令文本、脚本本身和命令的实际作用仍需审阅。不同平台的 Shell 引号形式不同,以确认框中解析后的命令为准,不手工假定会得到某一种引号序列。
没有占位符时
如果 prompt 不包含 {{args}},CLI 根据是否提供参数处理:
| 调用方式 | 发给模型的提示 |
|---|---|
/review | 原始 prompt |
/review src/parser.ts | 原始 prompt,两个换行,再加完整的 /review src/parser.ts |
可以在模板中说明“用户调用的完整命令附在下方”,让模型知道如何利用输入。追加的并非只有参数子串。
与文件注入的顺序
@{...} 的文件注入先于 !{...} 和 {{args}} 处理。不要依赖 @{ {{args}} } 来动态生成文件路径;官方示例使用固定的 @{docs/best-practices.md},再把 {{args}} 作为独立任务说明。完整流程见文件注入。