# 隐私与安全 (/zh/docs/privacy-and-security)

Echolot 没有账户，也没有云端。你的请求以文件形式保存在你的 Mac 上，机密保存在钥匙串中；除非你自己发送或打开某项功能，否则关于你或你的工作区的任何内容都不会离开这台 Mac。本页列出 Echolot 做的事，仅此而已。

## 你的文件 [#your-files]

- **工作区**是由纯 TOML 文件组成的文件夹，存放在你保存的任何位置。Echolot 绝不会上传它们。
- **Echolot 自己的数据**（已存储的响应正文、历史记录、崩溃报告、助手对话）位于这台 Mac 上的 `~/Library/Application Support/Echolot`。**设置 › 关于 › 响应和历史记录 › 在访达中显示**会打开它。App Store 版把它保存在自己的容器中；见[版本](/docs/get-started/editions)。
- **个人选择**，例如窗格布局，以及你信任的脚本和服务器，保存在这台 Mac 上 App 的设置中，绝不在工作区里。

## 机密保存在钥匙串中 [#secrets-stay-in-the-keychain]

机密值绝不会写入工作区文件，因此你可以放心地把工作区提交到 Git。

- **机密变量**只存储在你的登录钥匙串中。文件中只有变量的名称，它的值在钥匙串里。见[机密](/docs/workspaces/secrets)。
- **导入**会把在认证和凭据标头中找到的密码、令牌和密钥移入机密变量，导入报告只列出它们的名称，绝不列出值。见[导入](/docs/get-started/importing)。
- **导出**绝不写入机密值：机密变量只导出名称，导出报告会统计所有以明文填入请求的凭据。
- 把令牌存入机密变量的**响应捕获**只会把它写入钥匙串。
- 助手的**模型密钥**、**MCP 登录令牌**和**代理密码**同样保存在钥匙串中。以纯文本输入的代理密码或证书口令会显示警告，并提供**移到钥匙串**。
- 命令行工具读取同样的钥匙串项。在另一个 App 或另一个版本读取某一项之前，macOS 会询问一次；请选择**始终允许**。

## 凭据留在各自的服务器上 [#credentials-stay-with-their-server]

重定向通向另一个源（另一个协议、主机或端口）时，Echolot 会在跟随之前丢弃凭据：`Authorization`、`Cookie`、常见的 API 密钥标头、API 密钥认证所用的标头以及任何含有机密的标头，还有 Digest、AWS 和客户端证书的设置。你为一台服务器设置的机密绝不会因重定向而交给另一台。

## 磁盘上的响应正文 [#response-bodies-on-disk]

响应以流的方式写入磁盘，每次发送都会保存在这台 Mac 的历史记录中。**设置 › 储存空间**决定保存多少，以及如何保存：

| 设置 | 含义 |
| --- | --- |
| **在磁盘上加密响应正文** | 正文、传输捕获和格式化副本都用保存在你登录钥匙串中的密钥加密，因此没有该密钥，就无法读取 Echolot 储存文件夹中的任何响应内容。已存储的正文在后台加密；关闭后会解密。 |
| **响应正文最多保留** | 超过这个大小后，最久未使用的正文会被移除。在标签页中打开的正文始终保留。 |
| **每个请求的历史记录** | 每个请求保留多少个响应。 |

加密开启时，历史记录搜索按名称、地址和标头查找请求，而不按正文内容查找：历史记录的搜索索引没有加密，所以它不保存正文文本，开启加密也会移除它原有的正文文本。工作区不受影响。见[储存和加密](/docs/workspaces/storage-and-encryption)。

## 受保护的环境 [#protected-environments]

把环境标记为受保护（比如 Production），那么在它处于使用中时，你发起的每次发送都会先询问：请求的**发送**（此时显示为**发送到 Production…**）、连接、运行器的运行、手动运行流程、快速发送和快捷指令操作、MCP 调用和检查、**获取令牌**、Schema 获取以及 gRPC 反射。
询问中会写明环境，并显示将要发出的内容，其中的机密已被遮盖。

**取消**是默认按钮，因此按 <kbd>Return</kbd> 绝不会意外发送到受保护的环境，按 <kbd>Esc</kbd> 同样取消。**切换环境之前不再询问**会让该窗口在其环境改变之前不再询问；这一选择绝不会被存储。智能体始终会询问。见[受保护的环境](/docs/workspaces/protected-environments)。

<Shot id="privacy-protected-send" alt="发送到受保护的 Production 环境之前的询问，写明了环境和将要发出的请求，默认按钮为“取消”" />

## 脚本和本地程序 [#scripts-and-local-programs]

- **脚本**（请求前脚本和测试脚本）在 Echolot 内部的沙盒中运行。脚本只能通过 Echolot 发送请求，规则与你自己的发送相同。
- 只有在你**在这台 Mac 上**信任脚本之后，它才会运行。你在 Echolot 中编写的脚本是受信任的。来自别处的脚本（导入、`git pull`、在 Echolot 之外编辑）会让发送停止，直到你选择**查看脚本…** 并信任它们。
  信任按脚本的内容记录，保存在工作区之外，因此工作区永远无法信任它自己的脚本。
- **以本地程序运行的 MCP 服务器**只有在你于“MCP 服务器”页面批准它们的命令之后才会启动（**信任并检查**）。命令、参数或环境的任何更改都会再次询问。

## 助手和模型提供商 [#the-assistant-and-model-providers]

助手，以及打开后的 Echo AI 评论，使用你在**设置 › 助手**中选择的模型提供商。

- 模型密钥保存在这台 Mac 的钥匙串中，并且只发送到提供商自己的地址。
- **向某个提供商发送的第一条消息，会在任何内容发出之前先询问**，每个提供商一次（兼容服务器按其主机计）。询问会说明将发送什么：对于助手，是你的消息、助手读取的工作区数据及其工具结果。机密值绝不会发送。
- Echo 的 AI 评论只发送关于发生了什么的简短事实（请求的种类、状态码、耗时）：绝不发送名称、地址、标头、正文、变量或机密。
- Apple 的设备端模型和这台 Mac 上的服务器（如 Ollama）从不询问：没有任何内容离开这台 Mac。
- **设置 › 助手 › 允许接收你的数据**列出你已允许的提供商，每个都有**撤销许可**。被撤销的提供商下次会再次询问。
- 助手在更改数据或访问新主机之前会询问你，并通过与外部智能体相同的工具和规则工作。

见[助手](/docs/ai/assistant)。

## 外部 AI 智能体 [#external-ai-agents]

Claude Code、Cursor 或 Codex 这样的智能体可以通过 Echolot 的 MCP 服务器使用工作区，但前提是你允许它们。

- <strong>默认关闭。</strong><strong>设置 › 智能体 › 允许智能体使用打开的工作区</strong>会打开它，每个工作区也可以在<strong>工作区设置 › 智能体</strong>中关闭智能体。
- **仅限这台 Mac**。服务器监听标准输入和输出，或带令牌的 `127.0.0.1`。网络上的任何内容都无法访问它。
- **由你批准**。默认情况下，读取和安全的发送会直接运行；可能更改数据的发送、新主机和对工作区的更改会询问你（**拒绝**、**允许一次**、**在本次会话中允许**）。受保护的环境和新主机始终会询问。
- **机密永远不会到达智能体**。智能体通过名称引用机密。智能体收到的一切内容（包括错误）都已去除机密值，无论是原文、JSON、百分号编码还是 Base64 形式。智能体读取的历史记录中，凭据已被遮盖。
- **从不提供**。智能体策略、代理、证书、认证和脚本不是智能体可用的工具。
- **每次调用都有记录**。历史记录显示每个请求的发送者（智能体按名称显示），窗口中的**智能体**会列出最近的调用。

见[智能体](/docs/ai/agents)和[让 AI 智能体安全地使用你的工作区](/docs/tutorials/agents-safely)。

## 使用数据和崩溃报告 [#usage-data-and-crash-reports]

两者都在**设置 › 隐私**中：使用数据默认关闭，保存在这台 Mac 上的崩溃报告默认开启。

- **分享匿名使用数据**。开启时，Echolot 会告诉它的开发者哪些功能被使用（发送请求、一次运行、一次 MCP 检查），附带请求种类和状态码之类的少量信息，并报告错误及其堆栈跟踪。绝不包含 URL、标头、正文、变量、机密或响应。数据发送到 PostHog，即 Echolot 使用的分析服务。
- **收集崩溃报告**。默认开启。macOS 会在下次启动时把崩溃和卡死报告交给 Echolot，Echolot 把它们保存在这台 Mac 上，这样你就能把它们附到错误报告中。它们只包含堆栈跟踪，不会发送到任何地方。**在访达中显示**会打开它们。

## Echolot 自行发起的连接 [#connections-echolot-makes-on-its-own]

除了你发送的请求，Echolot 只会为以下事项连接网络：

| 内容 | 时机 | 发送的内容 |
| --- | --- | --- |
| **更新检查**（直接下载版） | 若**自动检查更新**已开启则每天一次，或在你选择**检查更新…** 时 | 向 GitHub 请求发布列表。GitHub 能看到 App 的版本和你的 IP 地址。 |
| **Beta 状态**（直接下载版，Beta 构建） | 启动时以及每天一次 | 从 GitHub Pages 获取一个带签名的小文件，不带 Cookie 或已存储的凭据。它可以提前结束 Beta 构建，也可以延长其期限。 |
| 响应树中的**图像预览** | 仅当指针停在 JSON 或 XML 树中的图像地址上时 | 像浏览器一样获取该图像，不带 Cookie 或已存储的凭据，最大 10 MB。它不会记入历史记录，也不运行任何脚本。 |
| **使用数据** | 仅在开启时 | 见上文。 |
| **你的模型提供商** | 仅当你使用助手或 Echo 的 AI 评论，且已经允许之后 | 见上文。 |

App Store 版不做更新或 Beta 检查：其更新由 App Store 处理。
