[开源]谁在读取你的 .env?先过 Touch ID:一个完全本地的 macOS 文件系统

ratazzi 2026-09-17 10:01 1

我受不了那种在命令前套一层 wrapper:


secret-tool run -- psql ...

# .envrc
export DATABASE_URL="$(op read 'op://Private/dev/DATABASE_URL')"

这种方式在终端里能用,但每个入口都必须主动配合。换成 IDE 、GUI 数据库客户端、后台服务或者 AI Agent ,又要重新想怎么注入;原本能直接运行的命令,也都变成了某个工具的子命令。


我想要的体验更简单:


Secret 就是普通文件。原来的工具和命令完全不改,直接打开就能用。


所以做了 Floria ,一个用于密钥和配置的 macOS 本地文件系统。


工具看到的仍然是普通文件或 SSH Agent ; Floria 在文件被读取时动态生成内容。


大致原理


Floria 通过 macFUSE 挂载一个文件系统。Secret 平时以密文保存,不存在于项目目录,也不会预先导出成环境变量。
当程序打开文件时,Floria 才识别当前 App 、项目和 Git worktree ;必要时弹出 Touch ID ,在内存中生成内容并返回。对 psql 、direnv 、IDE 或 AI Agent 来说,它读到的仍然只是普通文件。


所以不需要给命令套 wrapper ,也不用为每个 worktree 复制 .env 或维护软链接。


目前支持:



  • worktree 开箱即用:可设置新建 worktree 后无需复制 .env 、创建软链接或重新配置 direnv

  • .env 、direnv 、INI 、.pgpass

  • 带历史版本的加密编辑

  • 按 App 决定是否允许读取

  • Touch ID 确认

  • 受限的 SSH Agent

  • 不记录明文的本地审计

  • 默认不联网,数据和审计都留在本机

  • 可选 iCloud 同步,且只同步密文


项目还处于 early preview ,目前只测试过 macOS 26/27 、Apple Silicon 和 macFUSE ,安装时需要进行一次系统扩展配置。


GitHub:ratazzi/floria


使用实践:给 AI 能力,而不是凭据


目前这个还没做成 SKILL


需要访问 PostgreSQL 就调用 psql ,需要服务器就调用 ssh ,需要云资源就调用 aws 或 kubectl 。Agent 不应该 cat .env 、读取 .pgpass 或导出环境变量。


AI 正确的操作方式:Floria 的文件系统规则负责实际限制读取:可以拒绝 Agent 直接打开凭据,同时允许 psql 、ssh 等目标程序使用它,并记录完整审计。


最终 AI 拿到的是查询结果或操作能力,而不是密码、Token 和私钥本身。


Floria 想做的不是让 AI 更方便地拿到 Secret ,而是让 AI 不需要拿到 Secret 。


依赖


因为依赖 macFUSE 的内核扩展,所以需要重启好几次,如果介意这个的话那么这个方案可能不适合你




直接将项目目录拖到 app 里然后选择要保护的文件:

最新回复 (2)
  • Tubbs 09-17 10:56
    1
    能不能用 Fuse-T 代替 macFUSE ,macFUSE 启动内核扩展还是太麻烦了
  • ratazzi 楼主 09-17 11:16
    2
    @Tubbs 这个需要仔细研究下,如果能不依赖内核扩展确实体验会好很多
* 帖子来源V2EX
返回