安全
你的任务只属于你
Done 为 AI 智能体与你共用任务清单的时代而建,所以隔离、限定范围的访问和人工审批不是附加功能,而是地基。
账户隔离
- 每个任务、项目和标签都限定在你所属的工作区内。一次查询只可能返回你的账户有权查看的数据,不存在任何跨账户读取的路径。
- 内部的创建者/归属字段会在数据离开数据层之前被剔除,因此它从不出现在 API 中。
- 共享工作区和按项目共享都需要你主动开启:队友只能看到你邀请他们加入的内容,仅此而已。
身份验证
- 密码使用 argon2id 哈希处理,绝不明文存储。认证按账户进行,而不是依靠某个共享的环境密钥。
- 开启双重验证(TOTP)后,光有被盗的密码不足以登录。重置密码时同样强制验证,所以仅凭邮箱访问权限无法接管账户;你还会得到十个一次性恢复码,以备设备丢失时使用。
- 会话按账户划分,基于 Cookie;每个会话只对应一个用户,每个请求都限定在该用户范围内。
- 整个站点同源,并通过 HTTPS 提供,配有严格的 Content-Security-Policy:内联脚本只能在每次请求新生成的 nonce 下运行,因此被注入的脚本无法执行。
智能体访问与令牌
- 每个账户都有自己的 MCP 端点和自己的令牌。不存在共享或全局令牌,一个令牌只能看到它所属账户的数据。
- 在 Pro 和 Teams 套餐中,可以把令牌的范围缩小到只读或单个项目,让智能体只拿到它需要的权限,不多一分。
- 可通过 OAuth 2.1(Done 是其 MCP 端点的完整授权服务器)或 bearer 令牌连接。重新生成或撤销令牌会让它立即失效。
- 修改或重置密码也会撤销所有 API 凭证,包括 MCP 令牌和已连接的应用。这样在怀疑账户被盗后恢复时,不会有智能体访问权限悄悄留存。
每个结果都由你批准
- 设有关卡的任务无法自行关闭。智能体在开始大量工作前先提出计划,在完成前先提交总结;没有你在“待你处理”中的批准,什么都不会变成已完成。
- 只有人才能把任务设为可自动批准,智能体无法自己解除关卡。
- 每次智能体会话都会记录为一次运行,并带有工具调用和时间预算,所以你能清楚看到运行了什么,并限制它能走多远。
你的数据
- 数据存放在 Cloudflare D1(边缘 SQLite)中,任务附件存放在 Cloudflare R2 中,两者都由同一个 Worker 提供服务,没有另外的后端来回传递你的数据。
- 删除任务会把它移入回收站,30 天内可恢复,而不是立刻彻底删除。
- 随时可以把任务导出为 CSV 或 Markdown,也可以在应用内自行删除账户(及其全部数据)。
Slack 与第三方连接
- Slack 应用按用户关联,并且只有在你登录 Done 并确认之后才会生效。未经账户所有者同意,Slack 身份无法绑定到账户。
- 每个来自 Slack 的请求都会用 Slack 的签名密钥验证签名,重放的(过期)请求会被拒绝。
- Google Calendar 和订阅的 ICS 日历都只做只读的忙碌时段同步,从不读取日程标题或详情,而且完全可选:你不连接,就什么都不会连接。
发现了问题?
请私下把安全问题报告给 security [at] trydone.app,我们会回复你。任何可被利用的问题,请不要公开提交 issue。