跳转至

安装安全吗?

Claude Code 和 Codex 的插件可以在你的电脑上运行代码,所以值得一问。某些恶意插件在安装时看起来无害,之后却会下载并运行其他东西(即“第二阶段”)。Floorplan 的构建方式使它无法做到这一点;每次变更时都有测试检查,而且你可以亲自确认这一切。

Floorplan 绝不做什么

  • 没有钩子(hooks)。 钩子会在每个会话的事件中自动运行代码,这使得它们成为常见的隐藏位置。Floorplan 没有任何钩子。
  • 没有 MCP 服务器。 Floorplan 没有任何 MCP 服务器,因此它绝不会启动一个会通过 npx 下载最新版本的服务器。
  • 没有依赖项,也没有安装脚本。 安装时或之后,任何东西都不会来自 npm。它的 package.json 仅用于运行测试。
  • 绝不下载任何内容,也绝不运行来自互联网的代码。 没有 eval,没有在运行时加载代码,也没有编码后的载荷。
  • 绝不更改你的代码。 它只写入自己的 floorplan/ 文件夹,以及在 Claude Code 中写入 CLAUDE.local.md 的一个标记部分。参见 你的项目中有什么。
  • 没有分析或跟踪功能。

它做的一切

网络

  • 地图服务器(floorplan/serve.mjs)只监听 127.0.0.1,因此其他机器无法访问。它只在自己的端口上响应 127.0.0.1 和 localhost,并且其 API 需要一个只有地图页面才能收到的令牌。
  • 一个出站请求:Floorplan Cloud 候补名单,仅当你在地图上的卡片中输入电子邮件并点击加入时才会发送。它发送到 floorplan-waitlist-690500262396.us-central1.run.app,并携带你的电子邮件以及“仅我自己”或“与我的团队”。详情参见 隐私与安全。
  • 地图页面不从互联网加载任何内容。 其布局引擎和字体都内置在文件中。它只链接到文档,点击时才会打开。

在地图上提问会运行 Claude Code 或 Codex,它们会像往常一样通过你的账户与 Anthropic 或 OpenAI 通信。Floorplan 本身不发送任何内容。

它运行的程序

程序 时机 原因
git 扫描 只读:哪些文件被跟踪、当前分支和提交、自上一张地图以来发生了什么变化
where(Windows)或 which 启动地图服务器 定位 Claude Code 或 Codex CLI
claude 或 codex 当你在地图上提问时 以只读方式回答:claude -p 仅限读取文件和 Floorplan 的查询脚本,或 codex exec --sandbox read-only
node 全程 运行 Floorplan 自己的脚本
cmd /c start、open 或 xdg-open 打开地图 在浏览器中打开地图的本地地址

每个程序都是直接使用其参数启动的,绝不会作为可供 shell 解释的命令行。唯一的 shell 是 Windows 的 cmd /c start,且只传入地图自身的本地地址。

无需询问即可运行的内容

在 Claude Code 中,当技能被使用时,它会预先批准一种命令:node 运行其自己的一个脚本(scripts/build.mjs、describe.mjs、open.mjs、plan.mjs、recent.mjs、refresh.mjs、scan.mjs 和 status.mjs)。该列表由下面的测试固定。除此之外,Claude 所做的任何其他事情都会像往常一样根据你的权限设置征求同意。Codex 则根据你的批准设置征求同意。

三件值得解释的事情

  • skills/floorplan/assets/vendor/elk.bundled.js 是一个 1.6 MB 的压缩文件:用于布置地图的布局引擎。它是 elkjs 0.9.3,与 npm 上的官方包逐字节相同。其 SHA-256 为 b0745abd7f23cd91690a1587e377edbe19fd7233c783300290936720546216d4。要自行验证:
    npm pack elkjs@0.9.3
    tar -xzf elkjs-0.9.3.tgz package/lib/elk.bundled.js
    
    然后将 package/lib/elk.bundled.js 与 Floorplan 的副本进行比较,例如使用 sha256sum(macOS:shasum -a 256;Windows PowerShell:Get-FileHash)。
  • serve.mjs 中的一个 new Function 从 floorplan/query.mjs 加载地图的查找代码,该文件是 Floorplan 的构建过程写入你项目的文件。它绝不运行来自网络的任何内容。
  • Health 会读取它找到的令牌的中间部分(将其从 base64 解码),以判断每个令牌的类型,从而跳过那些按设计公开的令牌。它绝不会存储或显示令牌本身。

每次变更都会检查

tests/supply-chain.test.mjs 会在每次推送和拉取请求时运行,涵盖 Linux 和 Windows(以及每周的 macOS)。如果变更会导致以下情况,它就会失败:

  • 添加钩子、MCP 服务器、依赖项或安装脚本;
  • 向地图自身服务器和候补名单以外的任何地方发送请求;
  • 启动上表中未列出的程序,或通过 shell 启动程序;
  • 使用 eval、在运行时加载代码,或在代码中隐藏长编码字符串;
  • 添加无需询问即可运行的脚本;
  • 更改捆绑的布局引擎,或添加第三方文件。

每一项检查都通过故意植入同类变更并观察其失败来验证。对这些内容的任何更改都必须连同测试和本页面一起公开修改。

要在你自己的副本上运行相同的检查:

node --test tests/supply-chain.test.mjs

检查你安装的副本是否是真版发布

每个版本都包含 CHECKSUMS.txt:即插件运行时所用每个文件(技能、插件清单和 marketplace 文件)的 SHA-256 指纹。要将你安装的副本与 GitHub 上的版本进行比较:

git clone --depth 1 --branch floorplan--v<version> https://github.com/haydenschmitty/floorplan floorplan-check
node floorplan-check/tools/checksums.mjs --check <installed folder>

<version> 是你拥有的版本(claude plugin list 或 codex plugin list 会显示它)。安装文件夹是:

  • Claude Code: ~/.claude/plugins/cache/floorplan/floorplan/<version>
  • Codex: ~/.codex/plugins/cache/floorplan/floorplan/<version>

它会输出“所有文件均相同”,或者哪些文件被更改、多余或缺失。

诚实的局限

  • Claude Code 和 Codex 会从其仓库安装一个插件,与其他任何插件一样,更新都会引入最新版本所包含的内容。发布仅由维护者进行,且 main 分支受到保护:其历史无法被重写或删除。外部的拉取请求在运行或合并前都会经过审查,上述检查也会在每一个请求上运行。在更新之前,你可以阅读变更日志中的改动,并通过校验和验证新版本。
  • Floorplan 的工作原理是让 Claude 或 Codex 读取你的代码并对其进行描述。这与你在自己账户下交给它们的任何其他任务一样,会发送到 Anthropic 或 OpenAI。参见隐私与安全。

发现了什么?

请按照安全策略中的说明,私下报告问题。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 floorplan/floorplan