严格按以下方式运行——参数放在 heredoc 的第二行,永远不要放在命令本身;一行内,仅允许使用单词 quiet normal loud mute unmute --global approve on off:
bash "${CLAUDE_PLUGIN_ROOT}/scripts/hwip-mode.sh" <<'HWIP_MODE_INPUT'
${CLAUDE_PROJECT_DIR}
$ARGUMENTS
HWIP_MODE_INPUT
退出码 2 表示参数错误——向用户显示它打印的使用说明行。否则用自己的话报告状态行:
NOTIFICATIONS: muted—— 在此项目中,Stop 和 Ask hooks 处于静默状态;hwip_*工具仍然可用,但除非用户主动请求,否则不会被调用。静音覆盖所有其他设置。PUSH MODE: quiet—— 仅当用户在终端时推送高优先级通知(阻塞、highPush Signal),并在用户离开一定时间(HWIP_AWAY_SEC,默认 300 秒)或此会话的 tmux 窗格不在屏幕上时发送一次完成推送。这是默认配置。PUSH MODE: normal—— 每次执行实际工作时推送,只读操作时不推送;Push Signal 标记决定边界情况。PUSH MODE: loud—— 每次操作都推送,覆盖skip设置。- 括号内说明设置的来源:
this project(项目级别)、global default(使用--global设置,没有单独设置的项目继承此值)或内置默认值。项目级别设置始终覆盖全局设置。 APPROVAL GATE: on|off—— 是否对难以撤销的 Bash 命令(如rm -rf、强制推送、生产环境部署、破坏性 SQL)在本项目中要求审批。在终端时,Claude Code 自身的权限提示会询问;离开终端、处于 REMOTE 模式或无法读取用户存在状态时,用户的手机会处理。on, but inactive while muted—— 静音项目无法询问任何人,因此不会阻止任何操作。SCOPE: …—— 设置(包括推送级别、静音、审批门和自动模式)属于项目目录,而不是会话:同一目录中的第二个 Claude 会话共享这些设置。当用户更改设置时,请告知这一点。AUTO MODE: …—— 正在运行一个/hwip-auto会话,剩余预算为指定值。off (an expired … session left its state behind — cleared)表示上一个会话崩溃。LAST PUSH: …—— CLI 记录的上一次失败推送(hwip notify写入成功推送会删除此记录)。Hooks 会隐藏 notify 的错误,因此此行用于区分“静默,无内容可发送”和“每次推送都失败”。向用户解释失败原因及修复方法(例如密钥被拒绝 →hwip login,未登录应用 → 在 iPhone 或 Android 手机上登录 Hwip 应用);更多信息请运行hwip verify。Hwip: <device> changed its encryption key — …—— 不是失败:用户的某个设备现在列出的加密密钥与此机器之前固定的密钥不同,且新密钥已被信任。仅显示一次,然后清除。向用户解释此情况——可能是重新安装应用或更换手机;如果不是,使用hwip trust查看指纹,并与应用中的指纹对比。
问题(hwip_ask,AskUserQuestion 的镜像)在除静音外的所有推送级别下都会推送。
问题携带的上下文(会话的脱敏 git diff 和最后几行终端输出)不在此级别设置范围内。如果用户要求停止发送上下文,请告知他们使用 hwip ask-context off(当前项目)或 hwip ask-context off --global(所有项目);hwip ask-context 可显示当前生效的设置。
如果输出以 === Hwip rules — replace the Hwip rules from session start === 代码块结尾,则表示状态已更改,SessionStart hook 提供给此会话的规则已过时:在会话剩余时间内(包括压缩后),请遵循此代码块中的规则。Session rules unchanged 表示更改未影响规则(例如 normal ↔ loud);保留现有规则。approve 永远不会更改规则。could not refresh 表示更改已应用但规则未更新——告知用户新会话会生效。