Jan Agent 如何用 Safe 模式与 Shell 沙箱限制写入和命令权限?
Jan Agent 如何用 Safe 模式与 Shell 沙箱限制写入和命令权限【免费下载链接】janJan is an open source alternative to ChatGPT that runs 100% offline on your computer.项目地址: https://gitcode.com/GitHub_Trending/ja/janJan Agent 的janCLI 默认行为比较宽松写入和 shell 命令自动批准且不启用沙箱——你批准过的命令会直接以你自己的权限运行。如果项目目录里保存着无法重建的工作就需要用Safe 模式让 Agent 在每次写入和执行命令前停下来征求批准再用Shell 沙箱--sandbox把命令限制在项目目录内。本文基于 Run Modes 和 Tool Permissions 两份文档给出开启、配置与验证这两道防线的完整路径。适用对象是janCLI 和交互控制台console。桌面版聊天 Agent 的沙箱是始终开启且不可关闭的不属于本文的配置范围。准备条件装好 jan 并接入一个 provider按 QuickStart 安装并验证# macOS / Linux curl -fsSL https://delta.jan.ai/jan-cli/install-jan-agent.sh | bash # 验证安装 jan --version默认安装到~/.local/bin如提示jan: command not found说明该目录不在PATH中。然后接入一个模型 providerJan Agent 不自带推理引擎必须调用远端 providerjan config set --provider anthropic --api-key sk-ant-... # 换成你自己的 key # 或 jan login # 登录 Tokamak不需要自己的 key jan config list # 确认配置key 会被打码如果已经在用 Jan DesktopAgent 会直接继承那里的 provider 配置可以跳过这一步。用 Safe 模式让每次写入和命令先征求批准在项目根目录启动会话时加上--safejan --safeAgent 读取文件不受限但任何会改变机器的操作都会停下来询问write src/cli.rs y yes, once a yes, and dont ask again this session n no三个选项的含义y只批准这一次a批准并在此会话内不再询问同类型调用n拒绝。批准前你能看到具体内容write和edit会先展示 diffbash会展示将要执行的完整命令。注意a的授权按能力capability而非单个工具生效——对一条 shell 命令选了a之后所有 shell 命令都免询问这正是文档建议只在确实需要连续放行时用a、其余情况用y的原因。授权不会写盘新会话重新开始时又是谨慎的默认状态。两点限制需要记住--safe在启动时决定无法在会话中途开关。谨慎启动的会话会一直保持谨慎。无头环境CI、stdin 没有 TTY不要传--safe提示无法被回答所有写入提示都会被拒绝运行会卡死在第一次写入上。无脚本场景下jan cli agent run也支持同样的旗标例如jan cli agent run --safe run the migration表示逐步批准。开启 Shell 沙箱把命令限制在项目目录内Safe 模式解决的是要不要问你沙箱解决的是命令能碰到多大范围。文档明确警告沙箱关闭时你批准的 shell 命令就运行在完全属于你自己的权限之下没有任何东西把它限制在项目内。Jan 用操作系统级的隔离机制实现沙箱Linux 上 bubblewrap、macOS 上 Seatbelt、Windows 上 AppContainer。沙箱开启后命令只能写入项目目录及其 scratch 目录读取稍宽松——CLI 默认保持$HOME可读以便git和ssh的 credential helper 正常工作。沙箱有三个配置层级从最具体到最宽泛# 1. 仅当前会话 jan --sandbox # 仅当前会话关闭可覆盖下面的持久设置 jan --no-sandbox# 2. .jan/agent/agent.toml —— 对该项目的所有检出者生效 [tools] sandbox true# 3. ~/.jan/config.toml —— 对你工作过的所有项目生效 sandbox true优先级是命令行旗标 项目文件 全局配置 默认值CLI 上默认关闭。--no-sandbox的存在就是为了让持久开启沙箱后仍能临时运行某一条不受限的命令。写入限制之外还可以收紧读取和网络# .jan/agent/agent.toml [tools] sandbox true # 关闭 $HOME 读取默认开着供 git/ssh 凭证助手使用 allow_home_read false # 让 CLI Agent 的 shell 命令离线。注意沙箱开启时网络默认是放开的 allow_network false网络访问是沙箱的属性只在沙箱开启时才生效沙箱关闭时命令拥有你本机的全部网络权限。CLI 代码屏 Agent 的网络默认开启文档理由是编码 Agent 需要curl、git fetch、安装依赖桌面聊天 Agent 默认关闭两者默认值不同。如果系统无法建立任何沙箱后端行为是拒绝运行而不是降级bash工具直接不可用Agent 不会在不受限状态下执行命令。验证沙箱实际生效状态用jan cli agent status打印解析后的项目配置JSON其中包含沙箱状态jan cli agent status jan cli agent status --project ~/code/app输出中的沙箱字段形如文档示例sandbox: { enabled: false, backend: bubblewrap }enabled本次运行是否会启用沙箱backend将使用的隔离后端。出现none表示这台机器上没有任何可用后端此时若enabled为true组合效果就是bash被整体扣留。检查顺序先确认enabled是否符合预期再看backend是否为none。同时jan cli agent status --project .还可以用来在首次使用前脚手架出.jan/agent/目录。边界与仍然存在的风险即使同时开启 Safe 模式和沙箱以下事实来自文档写操作前值得确认bash没有路径参数在项目根目录执行。受路径检查约束的是带路径的工具写入项目外的路径会被拒绝指向项目外的符号链接也会被拒绝但你批准过的命令在沙箱关闭时仍可触达项目之外——文档因此把 plan 模式jan --plan所有写入和命令被硬阻断称为硬边界。沙箱开启后这一风险被 OS 级隔离覆盖。无论什么模式都有不可解除的拒绝项.jan/agent/内部Agent 无法改写自己的权限配置、agent.toml中[tools] deny列出的工具以及 plan 模式期间的一切写入和命令。项目策略文件也能收紧工具面.jan/agent/agent.toml的[tools]支持default read-only | deny | allow以及allow/deny/allow_write列表deny永远优先于allow同一个工具出现在两个列表里会被拒绝。子 Agent 的工具集只能收窄、不能放大委派不能用来绕过上述策略。无头运行CI 场景依赖的是默认自动批准没有人回答提示文档明确不要在 CI 里传--safe此时若希望保留 OS 级隔离应使用--sandbox或项目级sandbox true。下一步文档给出的延伸方向用 project-config.mdx 中介绍的agent.toml/AGENT.md固定项目级工具策略提交进版本库让整个团队得到同一套约束threads/则建议加入.gitignore需要只读调研时使用 run-modes.mdx 中的 plan 模式jan --plan启动会话内用/plan切换、/plan exit退出完整参数与无头运行含--output-format json、CI 用法见 CLI Reference权限模型细节见 Tool Permissions。【免费下载链接】janJan is an open source alternative to ChatGPT that runs 100% offline on your computer.项目地址: https://gitcode.com/GitHub_Trending/ja/jan创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考