diff --git a/skills/auto-tmux/AGENTS.md b/skills/auto-tmux/AGENTS.md index 6a3ca55..49e7d3d 100644 --- a/skills/auto-tmux/AGENTS.md +++ b/skills/auto-tmux/AGENTS.md @@ -40,6 +40,8 @@ skills/auto-tmux/ ├── getting_started.md ├── api.md ├── automation.md + ├── safety-policy.md + ├── session-safety.md ├── swarm-state.md ├── prompt-templates.md ├── ai-swarm-collaboration.md @@ -73,6 +75,7 @@ skills/auto-tmux/ - `scripts/validate-auto-tmux.sh` 是技能专属质量门禁,覆盖脚本、文档索引和 smoke test。 - 技能文档可以引用软链接入口;更新上游内容必须通过 `tools/external/` 下的 submodule 指针完成。 - 不在本目录直接修改 submodule 内容;如需改造,先 fork 上游并更新 submodule 来源。 +- SSH/远程 session 的默认边界写在 `references/session-safety.md`;不得把 `remote-readonly.sh` 扩展成远程写操作入口。 ## 依赖关系 diff --git a/skills/auto-tmux/README.md b/skills/auto-tmux/README.md index 9239f84..84fb8f0 100644 --- a/skills/auto-tmux/README.md +++ b/skills/auto-tmux/README.md @@ -54,6 +54,7 @@ skills/auto-skill/scripts/validate-skill.sh skills/auto-tmux --strict - 优先使用 `scripts/auto-tmux.sh`,需要低层调试时再直接使用 tmux 原生命令。 - 发送按键前必须先 `capture-pane` 复核目标上下文;脚本会默认打印最近上下文。 - 发送长文本、粘贴文件或下发 prompt 前先运行 `scripts/safety-check.sh`。 +- SSH/远程场景默认只读,先用 `scripts/remote-readonly.sh` 采集证据,再按 `references/session-safety.md` 判断是否需要人工确认升级。 - 批量操作前必须先列出 session/window/pane 白名单。 - 多 worker 并发前用 `swarm-state.sh` 管理任务、锁和状态,避免重复修改同一资源。 - 不在未知 pane 中发送破坏性命令。 diff --git a/skills/auto-tmux/SKILL.md b/skills/auto-tmux/SKILL.md index a9cd5fc..a6dc1b2 100644 --- a/skills/auto-tmux/SKILL.md +++ b/skills/auto-tmux/SKILL.md @@ -212,6 +212,7 @@ skills/auto-tmux/scripts/swarm-dispatch.sh --role worker --target ::.` 绝对定位。 - MUST:遵循 oh-my-tmux 约定,不修改主配置文件;自定义写入 `~/.tmux.conf.local`。 - MUST:批量操作前先 `list-windows`/`list-panes` 建立白名单,避免误控用户窗口。 +- MUST:SSH/远程场景默认只读,先用 `scripts/remote-readonly.sh` 采集证据;远程控制必须另行确认,不从只读脚本升级。 - SHOULD:救援/确认前先 grep 关键词(如 `(y/n)`、`password`),只对匹配目标发送。 - SHOULD:发送完整命令行时避免先发 `Escape`;先 `C-c` 中断、`C-u` 清行,再用 `send-keys -l` 逐字发送完整命令。 - SHOULD:长 prompt、文件粘贴、跨 worker 分发前运行 `scripts/safety-check.sh`,批量发送先 `--dry-run`。 @@ -270,6 +271,7 @@ skills/auto-tmux/scripts/swarm-dispatch.sh --role worker --target ::.` 绝对定位。 +2. 先通过 `inspect` 或 `capture` 查看最近输出。 +3. 对长文本、文件和 prompt 运行 `scripts/safety-check.sh`。 +4. 批量发送先 `--dry-run`,确认目标集合后再执行。 +5. 发送后立刻 capture 保存结果,不能只相信命令返回值。 + +推荐流程: + +```bash +target="ai-hub:1.0" +skills/auto-tmux/scripts/auto-tmux.sh inspect -t "$target" -n 40 +skills/auto-tmux/scripts/safety-check.sh --text "make test" +skills/auto-tmux/scripts/auto-tmux.sh send -t "$target" --text "make test" --enter +skills/auto-tmux/scripts/auto-tmux.sh capture -t "$target" -n 80 +``` + +## 敏感信息处理 + +- 输出证据默认脱敏;发现 token、API key、password、Bearer、`sk-` 等内容时不在报告中原样保留。 +- 远程采集结果写入显式输出目录,避免混入仓库。 +- 不把 `/tmp/auto-tmux-*` 证据包直接提交到 Git。 +- 需要分享证据时,优先分享摘要、状态、错误类型和可复现命令,不分享完整 pane 历史。 + +## 多 Agent 协作边界 + +多 Agent 共用 tmux 时,安全问题通常来自“误控”和“重复写”。执行前必须先区分: + +- commander:分配任务、巡检、验收、归档。 +- worker:只处理分配给自己的任务。 +- reviewer:只读审查 worker 产出。 + +并发写同一文件、目录或服务前,必须使用 `swarm-state.sh lock-acquire` 声明锁;发现锁冲突时不继续发送任务。 + +## 回滚与复盘 + +出现误发送、误广播或错误清理风险时: + +1. 立即停止继续发送。 +2. `capture` 保存目标 pane 的当前输出。 +3. `swarm-blockers.sh` 记录阻塞或失败。 +4. `swarm-archive.sh` 打包证据。 +5. 在任务记录中写明误操作范围、已执行命令、影响对象、修复动作和防复发规则。 + +## 验收 + +```bash +skills/auto-tmux/scripts/remote-readonly.sh --host example.com --session ai-hub --dry-run +skills/auto-tmux/scripts/safety-check.sh --text "make test" +skills/auto-tmux/scripts/validate-auto-tmux.sh +``` diff --git a/skills/auto-tmux/scripts/validate-auto-tmux.sh b/skills/auto-tmux/scripts/validate-auto-tmux.sh index 9e482e9..3763027 100755 --- a/skills/auto-tmux/scripts/validate-auto-tmux.sh +++ b/skills/auto-tmux/scripts/validate-auto-tmux.sh @@ -151,8 +151,12 @@ require_contains "$skill_dir/SKILL.md" "scripts/safety-check.sh" require_contains "$skill_dir/SKILL.md" "scripts/swarm-dispatch.sh" require_contains "$skill_dir/references/index.md" "automation.md" require_contains "$skill_dir/references/index.md" "safety-policy.md" +require_contains "$skill_dir/references/index.md" "session-safety.md" require_contains "$skill_dir/references/README.md" "swarm-state.md" require_contains "$skill_dir/references/README.md" "safety-policy.md" +require_contains "$skill_dir/references/README.md" "session-safety.md" +require_contains "$skill_dir/references/session-safety.md" "remote-readonly.sh" +require_contains "$skill_dir/references/session-safety.md" "远程默认只读" require_contains "$script_dir/README.md" "validate-auto-tmux.sh" require_contains "$script_dir/README.md" "swarm-dispatch.sh" require_contains "$script_dir/README.md" "swarm-watch.sh"