Command Discipline 是一套关于如何执行 shell 命令的规范,目标是让命令调用更干净、更易被权限规则自动批准。
用途:约束 AI 或开发者运行 shell 命令时的写法,避免在真实命令前后添加装饰性 echo。
主要能力与规则:
- 不要写装饰性头部,如 echo "=== running tests ===" && planemo test workflow.ga。
- 不要写 echo 叙述,如 echo "Checking workflow lint" && planemo workflow_lint --iwc .。
- 不要写结尾状态 echo,如 planemo test workflow.ga && echo "tests passed"。
- 不要用分号变体,如 echo "=== before ===" ; ls test-data/。
- 正确做法:直接运行裸命令,把说明文本放进 Bash 工具的 description 参数,用户会在工具调用面板看到。示例:planemo test workflow.ga、planemo workflow_lint --iwc .、ls test-data/。
理由:用户已经能在工具调用面板和 description 字段看到命令,前置 echo 是多余噪音,会把真实命令推到行尾;还会破坏权限规则的自动批准,因为权限规则通常按第一个命令段匹配(如 Bash(planemo workflow_lint *)),前缀 echo 后第一段变成 echo,往往不在允许规则内,导致多余提示;结尾 echo done 没有意义,Bash 工具本身会报告退出码;这种写法像教程博客,而实际是每个工具调用执行一条命令。
仍属合法的 echo 用法(不要避免):echo "$VAR" 打印值、echo "$(date -u +%Y-%m-%d)" 捕获值、echo "line of data" >> log.txt 生成内容、echo "stdin payload" | python - 把数据管道给程序;规则只限制 echo 作为叙述,不限制 echo 作为数据流。
边界情况:[ -f file ] && echo "exists" 作为快速存在性探测可行,前提是 echo 就是你想看的结果;如果确实需要退出码,可优先用 ls file 2>/dev/null; echo "rc=$?"。既非 echo 的 cmd1 && cmd2 链完全没问题,规则只针对 echo 装饰。
判断标准:如果去掉这个 echo,用户是否会失去他们本来看不到的信息?如果不会,就去掉。
限制:资料仅给出上述规则与示例,未提供安装方式、平台支持、收费和价格信息。