安全与权限
hara 如何做到默认安全 —— 批准模式、shell 沙箱、命令规则,以及不可信内容的处理。
hara 在你的机器上、用你的工具运行,因此它从设计上就 默认安全,并始终让人保持在回路中。
批准模式
| 模式 | 行为 |
|---|---|
suggest (默认) | 在编辑文件或运行命令前询问 |
auto-edit | 自由编辑文件,但运行 shell 命令前仍会询问 |
full-auto | 无需询问直接运行(-y、cron 和网关会用到) |
plan | 只读调研——模型先提出完整计划,经你批准后才动手 |
用 --approval、/approval 或 hara config set approval <mode> 设置它——在 TUI 里也可以按
shift+tab 循环切换。
计划模式(plan)
plan 模式下 agent 只拿到只读工具(read / grep / glob / web),外加一个 exit_plan。
它可以自由调研;你提问,它就像平常一样回答。当且仅当它形成了一份完整可执行的计划时,
由模型自己调用 exit_plan:计划渲染成带边框的 ╭─ Plan 块,并弹出选择器——
- Yes, and auto-apply edits —— 切到
auto-edit,自动执行计划 - Yes, approve each edit —— 切到
suggest,逐步确认执行 - No, keep planning —— 留在计划模式继续打磨
没产出计划的调研回合会安静地回到输入框,仍处于计划模式——不会反复追问。
(这套握手对齐 Claude Code 的 ExitPlanMode 与 codex 的 proposed-plan cell。)
命令规则
用一个 permissions.json 精确锁定哪些 shell 命令可无人值守运行(allow / deny,
外加即使在 suggest 模式下也会自动运行的只读命令):
hara permissions --init # 脚手架生成全局 ~/.hara/permissions.json
hara permissions --init --project # 脚手架生成 .hara/permissions.json(项目范围)项目规则默认不受信任:可以增加 deny 或关闭只读自动运行,但不能新增 allow、也不能开启
自动运行。只有设置 HARA_TRUST_PROJECT_CONFIG=1,审查过的仓库才可授予权限。
Shell 沙箱(macOS)
限制 shell 能触及的范围:
hara --sandbox workspace-write # 写入限制在工作目录内
hara --sandbox read-only # 完全不允许写不可信内容
hara 从外部世界拉取的输出 —— 网页抓取、文件内容 —— 会被包裹并 去毒化,
这样被注入的"忽略你的指令"之类文本就无法劫持 agent。子 agent 默认只读运行,
堵住了绕过批准关卡的路径;computer(屏幕控制)工具永远不会被自动批准。
密钥
API key 和 token 以 0600 权限存储(~/.hara/config.json、OAuth token 文件)。
在进入普通文件工具批准前,敏感路径就会被拒绝:.env/.env.*、凭据库、私钥和 Hara 私有
状态不能被读取、搜索、编辑、通过 @文件 注入、索引、checkpoint 或作为网关附件发送;
.env.example、.env.sample 和 .env.template 仍可读取。
子进程环境默认清理,疑似秘密的输出会脱敏。在 macOS 上,Hara 还使用 Seatbelt 阻止任意 shell
读取已经存在的受保护路径。Linux/Windows 仍有静态准入和内置工具检查,但任意 shell 代码并非
内核级安全沙箱。HARA_ALLOW_SENSITIVE_FILES=1 是只对本次启动生效的显式逃生开关。MCP server
和外部 coding agent 位于该边界之外,属于可信扩展,因此每次需要确认;审查过的自动化可显式设置
HARA_ALLOW_TRUSTED_EXTENSIONS=1。
上报漏洞
安全问题在仓库的 SECURITY.md 里跟踪 —— 请在那里私下上报,而不是提一个公开 issue。