DSH入门

第 4 章 工作区、文件与权限

约 4 分钟 · 2,111 字 · 12 个小节

本章你会学会

  • 理解工作区为什么是“安全边界”;
  • 知道 Agent 能读什么、写什么;
  • 分清 workspace-write 和 danger-full-access;
  • 避免删除、覆盖、密钥泄漏这类真实事故;
  • 用 AGENTS.md 给项目立规矩。

4.1 Workspace 到底是什么

Workspace 是一个文件夹。

Agent 的“当前目录”通常就是它。你让它读 notes/a.md,它会在工作区里找 notes/a.md。

工作区有三个作用:

  1. 范围:Agent 默认只在这里工作;
  2. 上下文:这里的文件、目录结构、AGENTS.md 会影响它的判断;
  3. 权限:很多安全策略以工作区为边界。

所以,工作区不是“随便选一个文件夹”,而是你给 Agent 划定的工作范围。[1]

建议

  • 一个项目一个工作区;
  • 不要让工作区包含整个用户目录;
  • 重要项目先 git init,有版本可回滚;
  • 测试任务用 dsh-test 这类临时目录。

4.2 Agent 能读什么、写什么

Agent 通过工具操作文件,常见的是:

工具 作用 风险
读文件 查看内容 低;但可能读到敏感信息
列目录/搜索 找文件 低
写文件 新建或覆盖 高;可能覆盖原文件
编辑文件 局部替换 中;可能改错位置
执行命令 运行任意程序 很高;可能删除/重置/上传

注意:“读”也可能有风险。如果工作区里有 .env、密钥、客户资料,Agent 读到后会进入上下文,甚至出现在回复里。

最小权限原则

  • 只给它完成当前任务需要的目录;
  • 不要把整个家目录、整个代码仓库根目录随便给它;
  • 处理敏感数据时,先脱敏或复制到隔离目录。

4.3 两种常见权限模式

DSH 中常见的文件策略:

workspace-write

  • 可以读写工作区内的文件;
  • 工作区外通常只读或需要审批;
  • 适合绝大多数日常任务。

danger-full-access

  • 可以访问更大范围;
  • 能执行更高风险的操作;
  • 适合你明确知道自己在做什么的场景,例如安装插件、系统级调试。

不要因为“省事”就长期开 full access。 权限越大,一次误操作的后果越大。

审批提示

当 Agent 要执行敏感操作时,界面可能会问:

允许这次操作吗?

你有三个选择:

  • 允许一次:只放行这一次;
  • 拒绝:不让它做;
  • 停止任务:直接中断。

看到“删除”“覆盖”“reset”“push”“上传”“安装”这些词,先读清楚再点。


4.4 破坏性操作:先备份,再确认

Agent 可能做的危险动作包括:

  • 删除文件/目录;
  • 覆盖已有文件;
  • git reset --hard;
  • git push --force;
  • 修改系统配置;
  • 安装/卸载软件;
  • 上传文件到外部服务。

三条规则

  1. 重要文件先备份;
  2. 能用 git 就用 git,提交后再让它改;
  3. 让它先说明影响范围,再批准。

可以这样说:

在执行删除/覆盖之前,先列出会被影响的文件,并告诉我怎么回滚。
没有我的确认,不要执行。

git 是你的后悔药

如果项目在 git 里:

git add -A
git commit -m "before agent changes"

Agent 改坏了,你可以:[2]

git diff
git restore .

不要在没有版本控制的情况下,让 Agent 大范围改重要文件。


4.5 密钥、密码、截图

这是最容易出事的地方。

不要做

  • 不要把 API Key、密码、Token 贴进对话;
  • 不要把 .env 内容复制给 Agent;
  • 不要让它把含密钥的文件上传/发送;
  • 不要截含密钥的屏幕给它看。

应该做

  • 密钥放环境变量或密钥管理工具;
  • 需要配置时,让 Agent 改“变量名”,不要改“值”;
  • 给它看脱敏后的样例;
  • 发现它读到了密钥,立即停止,轮换密钥。

Agent 的上下文可能被记录、被回放、被展示。贴进去的秘密,就当作已经泄露。


4.6 AGENTS.md:给项目立规矩

AGENTS.md 是放在工作区里的“项目规则”。Agent 会读它,并尽量遵守。

一个简单的例子:

# 项目约定

- 所有回复用中文。
- 不要修改 `dist/` 和 `node_modules/`。
- 修改代码前先读相关文件。
- 提交前运行 `pnpm test`。
- 删除文件前必须先问我。
- 不要读取 `.env`。

它适合放:

  • 代码风格;
  • 目录规则;
  • 禁止事项;
  • 测试命令;
  • 交付格式;
  • 团队约定。

注意:AGENTS.md 是“指令”,不是“强制沙箱”。它降低误操作概率,但不能替代权限控制。


4.7 工作区卫生

  • 一个任务一个目录;
  • 输入、输出、临时文件分开;
  • 处理完删除临时文件;
  • 不要把测试数据和个人资料混在一起;
  • 大文件先确认是否需要读。

马上试试

  1. 建一个 dsh-test 工作区;
  2. 在里面放一个 AGENTS.md,写三条规则;
  3. 让 Agent 读一遍,并复述它会遵守什么;
  4. 故意让它改一个文件,观察审批提示;
  5. 拒绝一次,看看它是否能停下来。

常见坑

  • 工作区选太大:误操作范围变大。
  • 长期开 full access:风险累积。
  • 不备份就让它删/改:没有回滚。
  • 把 Key 贴进对话:直接泄露。
  • 以为 AGENTS.md 是沙箱:它只是指令。

小结

  • 工作区是范围、上下文和权限边界。
  • 读也有风险;密钥不要进对话。
  • workspace-write 是日常默认;danger-full-access 要克制。
  • 破坏性操作先备份、先确认。
  • AGENTS.md 用来立规矩,但不能替代权限控制。

参考

  1. DeepSeek Harness GitHub 仓库
  2. Git 文档

链接均为公开来源;产品行为可能随版本变化。


↑