name: 健康检查 description: 用于 Otto 部署的主机安全硬化和风险容忍度配置。当用户请求安全审计、防火墙/SSH/更新硬化、风险姿态、暴露审查、Otto 定时任务调度用于定期检查,或在运行 Otto 的机器(笔记本电脑、工作站、Pi、VPS)上进行版本状态检查时使用。
Otto 主机硬化
概述
评估并硬化运行 Otto 的主机,然后将其与用户定义的风险容忍度对齐,而不断开访问。使用 Otto 安全工具作为首要信号,但将操作系统硬化视为一组独立的、明确的步骤。
核心规则
- 推荐使用最先进的模型(例如 Opus 4.5、GPT 5.2+)运行此技能。代理应自检当前模型,如果低于该级别,建议切换;不要阻止执行。
- 在任何状态更改操作前需要明确批准。
- 未经确认用户连接方式,不要修改远程访问设置。
- 优先使用可逆的、分阶段的更改,并附带回滚计划。
- 绝不声称 Otto 更改主机防火墙、SSH 或操作系统更新;它不这样做。
- 如果角色/身份未知,仅提供推荐。
- 格式化:每组用户选择必须编号,以便用户可以用单个数字回复。
- 推荐系统级备份;尝试验证状态。
工作流程(按顺序遵循)
0) 模型自检(非阻塞)
在开始之前,检查当前模型。如果它低于最先进水平(例如 Opus 4.5、GPT 5.2+),建议切换。不要阻止执行。
1) 建立上下文(只读)
在询问前尝试从环境中推断 1-5。如果需要确认,优先使用简单、非技术性问题。
确定(按顺序):
- 操作系统和版本(Linux/macOS/Windows),容器 vs 主机。
- 权限级别(root/admin vs 用户)。
- 访问路径(本地控制台、SSH、RDP、tailnet)。
- 网络暴露(公共 IP、反向代理、隧道)。
- Otto 网关状态和绑定地址。
- 备份系统和状态(例如 Time Machine、系统映像、快照)。
- 部署上下文(本地 Mac 应用、无头网关主机、远程网关、容器/CI)。
- 磁盘加密状态(FileVault/LUKS/BitLocker)。
- 操作系统自动安全更新状态。 注意:这些不是阻塞项,但强烈推荐,尤其是如果 Otto 可以访问敏感数据。
- 使用模式,用于具有完全访问权限的个人助理(本地工作站 vs 无头/远程 vs 其他)。
首先询问一次运行只读检查的权限。如果授予,默认运行它们,并仅对无法推断或验证的项提问。不要询问运行时或命令输出中已可见的信息。保持权限询问为单个句子,并将后续所需信息列为无序列表(不编号),除非您正在呈现可选择的选项。
如果必须询问,使用非技术性提示:
- “您在使用 Mac、Windows PC 还是 Linux?”
- “您是直接登录机器,还是从另一台计算机连接?”
- “这台机器可以从公共互联网访问,还是仅在您的家庭/网络中?”
- “您启用了备份吗(例如 Time Machine),并且它们是最新的吗?”
- “磁盘加密是否开启(FileVault/BitLocker/LUKS)?”
- “自动安全更新是否启用?”
- “您如何使用这台机器?”
示例:
- 与助理共享的个人机器
- 为助理专用的本地机器
- 远程访问的专用远程机器/服务器(始终在线)
- 其他?
只有在系统上下文已知后才询问风险概况。
如果用户授予只读权限,默认运行适用于操作系统的检查。如果没有,提供它们(编号)。示例:
- 操作系统:
uname -a,sw_vers,cat /etc/os-release。 - 监听端口:
- Linux:
ss -ltnup(或ss -ltnp,如果-u不支持)。 - macOS:
lsof -nP -iTCP -sTCP:LISTEN。
- Linux:
- 防火墙状态:
- Linux:
ufw status,firewall-cmd --state,nft list ruleset(选择已安装的)。 - macOS:
/usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate和pfctl -s info。
- Linux:
- 备份(macOS):
tmutil status(如果使用 Time Machine)。
2) 运行 Otto 安全审计(只读)
作为默认只读检查的一部分,运行 otto security audit --deep。仅当用户请求时才提供替代方案:
otto security audit(更快,非探测)otto security audit --json(结构化输出)
提供应用 Otto 安全默认值(编号):
otto security audit --fix
明确说明 --fix 仅收紧 Otto 默认值和文件权限。它不更改主机防火墙、SSH 或操作系统更新策略。
如果浏览器控制启用,推荐在所有重要账户上启用 2FA,优先硬件密钥,SMS 不足够。
3) 检查 Otto 版本/更新状态(只读)
作为默认只读检查的一部分,运行 otto update status。
报告当前通道和是否有更新可用。
4) 确定风险容忍度(在系统上下文后)
请用户选择或确认风险姿态和任何必需的开放服务/端口(以下编号选项)。 不要固定到固定配置文件;如果用户偏好,捕获要求而不是选择配置文件。 提供建议配置文件作为可选默认值(编号)。注意大多数用户选择家庭/工作站平衡:
- 家庭/工作站平衡(最常见):防火墙开启,具有合理的默认值,远程访问限制到 LAN 或 tailnet。
- VPS 硬化:默认拒绝入站防火墙,最小化开放端口,仅密钥 SSH,无 root 登录,自动安全更新。
- 开发人员便利性:允许更多本地服务,明确暴露警告,仍进行审计。
- 自定义:用户定义的约束(服务、暴露、更新频率、访问方法)。
5) 制定补救计划
提供一个包括以下内容的计划:
- 目标配置文件
- 当前姿态摘要
- 与目标的差距
- 逐步补救与确切命令
- 访问保留策略和回滚
- 风险和潜在锁定场景
- 最少权限说明(例如,避免管理员使用,在安全处收紧所有权/权限)
- 凭证卫生说明(Otto 凭证位置,优先磁盘加密)
始终在更改前显示计划。
6) 提供执行选项
提供以下选择之一(编号以便用户可以用单个数字回复):
- 为我做(引导式,逐步批准)
- 仅显示计划
- 仅修复关键问题
- 导出命令供以后使用
7) 执行并确认
对于每个步骤:
- 显示确切命令
- 解释影响和回滚
- 确认访问将保持可用
- 在意外输出时停止并请求指导
8) 验证和报告
重新检查:
- 防火墙状态
- 监听端口
- 远程访问仍然有效
- Otto 安全审计(重新运行)
提供最终姿态报告并注意任何延迟项。
必需确认(始终)
需要明确批准:
- 防火墙规则更改
- 打开/关闭端口
- SSH/RDP 配置更改
- 安装/移除软件包
- 启用/禁用服务
- 用户/组修改
- 调度任务或启动持久性
- 更新策略更改
- 访问敏感文件或凭证
如果不确定,询问。
定期检查
在 Otto 安装或首次硬化后,运行至少一次基线审计和版本检查:
otto security auditotto security audit --deepotto update status
推荐持续监控。使用 Otto cron 工具/CLI 调度定期审计(网关调度器)。未经明确批准,不要创建调度任务。将输出存储在用户批准的位置,并避免日志中的秘密。
当调度无头 cron 运行时,在输出中包含一个说明,指示用户调用 healthcheck,以便可以修复问题。
调度必需提示(始终)
在任何审计或硬化后,明确提供调度并要求直接响应。使用短提示如(编号):
- “您希望我通过
otto cron add调度定期审计(例如每日/每周)吗?”
如果用户说是,询问:
- 频率(每日/每周)、首选时间窗口和输出位置
- 是否也调度
otto update status
使用稳定的 cron 作业名称,以便更新是确定性的。优先使用确切名称:
healthcheck:security-audithealthcheck:update-status
在创建前,otto cron list 并匹配确切的 name。如果找到,otto cron edit <id> ...。
如果未找到,otto cron add --name <name> ...。
还提供定期版本检查,以便用户可以决定何时更新(编号):
otto update status(推荐用于源签出和通道)npm view otto version(发布的 npm 版本)
Otto 命令准确性
仅使用支持的命令和标志:
otto security audit [--deep] [--fix] [--json]otto status/otto status --deepotto health --jsonotto update statusotto cron add|list|runs|run
不要发明 CLI 标志或暗示 Otto 强制执行主机防火墙/SSH 策略。
日志记录和审计追踪
记录:
- 网关身份和角色
- 计划 ID 和时间戳
- 批准的步骤和确切命令
- 退出代码和修改的文件(尽力而为)
编辑秘密。绝不记录令牌或完整凭证内容。
内存写入(条件性)
仅当用户明确选择加入且会话是私有/本地工作空间时才写入内存文件
(根据 docs/reference/templates/AGENTS.md)。否则提供编辑的、可粘贴的摘要,用户可以决定保存到其他地方。
遵循 Otto 压缩使用的持久内存提示格式:
- 将持久笔记写入
memory/YYYY-MM-DD.md。
在每次审计/硬化运行后,如果选择加入,将短的、日期的摘要追加到 memory/YYYY-MM-DD.md
(检查了什么、关键发现、采取的行动、任何调度的 cron 作业、关键决策,以及所有执行的命令)。仅追加:绝不覆盖现有条目。
编辑敏感主机详细信息(用户名、主机名、IP、序列号、服务名称、令牌)。
如果有持久偏好或决策(风险姿态、允许的端口、更新策略),也更新 MEMORY.md(长期内存是可选的,仅在私有会话中使用)。
如果会话无法写入工作空间,请求权限或提供确切的条目,用户可以粘贴到内存文件中。