← 关联知识节点:Headless、CI/CD 与 Agent SDK
交互工具 · 直觉

Headless 权限矩阵

定时任务和 CI 里跑 claude -p,没人坐在终端前点「允许」——权限全靠三条旗标提前谈好。拧白名单、档位、prompts 三旋钮,看每张工具请求卡落哪格:白名单预批的直接过,dontAsk 没预批的一律拒,落到弹窗的要么被「无人可批」拒绝、要么卡死在等一个不会来的人。再把白名单写成 git diff*,看前缀匹配怎么把 git diff-index 一起放走。

纯前端确定性模拟:旗标语义与知识库《Headless、CI/CD 与 Agent SDK》权限三件套逐字对齐(前缀坑原文、dontAsk 严锁、prompts none 无人可批),零 API、零随机。与「权限裁决漏斗」分工:那边是交互会话的裁决漏斗(弹窗有人点),这边是无人值守的旗标组合决策矩阵(没人能批,卡死是交互模式里不存在的第三终局)。

定时任务、CI 里跑 claude -p,没人坐在终端前点「允许」——权限全靠三条旗标提前谈好。 拧下面三旋钮,看一排工具请求各落放行 / 拒绝 / 卡死哪格。 与「权限裁决漏斗」分工:那边管交互会话(弹窗有人点),这边管无人值守(没人能批,提问类只有卡死或被拒)。

当前旗标组合 · 拼回一条 CI 命令

claude -p "任务" \
--allowedTools "git diff*,Read(*)" \
--permission-mode manual
--allowedTools 白名单每行一条 · 前缀匹配
前缀坑演示:前缀坑命中 1 张卡
--permission-mode 档位-p 起始档是 Manual,档位必须显式传
--permission-prompts只管「落到弹窗的请求」——白名单预批过的它管不到

请求卡矩阵 · 每张卡落哪格

放行 3 · 拒绝 0 · 卡死 3
git diff放行

白名单「git diff*」预批过——不落弹窗直接执行

落格依据:--allowedTools

git diff --stat放行

白名单「git diff*」预批过——不落弹窗直接执行

落格依据:--allowedTools

git diff-index放行

「git diff*」前缀吃进了命令名中间——本不想放它,被连坐误放(前缀坑)

落格依据:--allowedTools

前缀坑:git diff* 吃进命令名中间

git push卡死

落到弹窗等一个人点「允许」——可这是 headless,没人坐在终端前(等批准的无人值守死法)

落格依据:弹窗等批准

Write(/tmp/x)卡死

落到弹窗等一个人点「允许」——可这是 headless,没人坐在终端前(等批准的无人值守死法)

落格依据:弹窗等批准

AskUserQuestion卡死

落到弹窗等一个人点「允许」——可这是 headless,没人坐在终端前(等批准的无人值守死法)

落格依据:弹窗等批准

只读统计:git diff* 与 git diff * 两种写法都放行它——预期内命中

ask 类没有放行headless 的特殊性是「没人能批」:AskUserQuestion 白名单能给它执行权,但答案还得人给——终局只有卡死(弹窗挂着没人点)或被拒(dontAsk 直接拒),没有第三种。
prompts none 是生死线落到弹窗的请求:不传 --permission-prompts 就挂起等批准(卡死);传 none 则声明「无人可批」,直接拒绝并告知模型别重试——杜绝任务吊死在等批准上。
通配符前要有空格写成 git diff* 会连 git diff-index 一起放行;写成 git diff *(通配符前有空格)才只放带参数的真 git diff——白名单前缀匹配的坑,切上面演示开关亲手试。
与裁决漏斗分工「权限裁决漏斗」看交互会话:规则、Hook、模式层层过,弹窗有人点,deny 才是法律;本工具看无人值守:只有白名单 × 档位 × prompts 三旗标,卡死(stuck)是交互模式里不存在的第三终局。