# Symbiont D

一个本地运行的信息陪伴层：让外部输入、持续对话和长期问题停留在同一个可继续思考的空间，并在需要时向 Codex 提供有限、可选择的上下文。

## Metadata

- HTML: https://glenzli.com/projects/symbiont-d/
- Markdown: https://glenzli.com/projects/symbiont-d.md
- Collection: Projects
- Language: zh-CN
- Published: 2026-08-14
- Status: active
- Tags: local-first, codex, pcp, memory, context, reflection, external-input

## Content

**Symbiont D** 是一个本地运行的信息陪伴层。它把外部输入、正在进行的讨论和长期问题放进同一个可以继续思考的空间：不是把人推向更多内容，而是帮助判断哪些信号值得进入对话，哪些线索应该暂时留下，哪些还不值得打扰。

它不是 Jarvis，也不试图成为另一个任务系统。执行、审批、进度和任务历史仍属于 Codex；Symbiont D 的位置更靠近信息与思考之间，负责保持语境、未决问题和可回看的来路，并在合适的时候把有限的上下文带到 Codex 面前。

## 项目入口

  ![外部信息、持续对话和长期问题汇入 symbiont-d 的本地上下文空间](/images/projects/symbiont-d-banner.webp)

## 不把信息做成信息流

    **入口，而不是 feed**
    它可以留意研究、工具、项目生态、产业和文化的变化，但不把结果变成需要不停消费的信息流。

    **对话可以停下来**
    消息可以停止、撤回、编辑并从原处重发。没有真正增量时，模型可以不回答；探索没有发现时，也应该如实说明。

    **记忆需要复核**
    临时候选池不等于长期记忆。内容需要经过判断，保留来源和替代解释；主题与假设也可以被复看、降级或退出。

    **人保留边界**
    权限、探索节奏、打扰频率和可见工作状态都可以检查和调整。后台行为默认克制，不把内部过程伪装成值得打扰的信息。

它不承诺把每句话都分进唯一类别，也不承诺“绝对正确”的关联。长期思考中的主题本来就会重叠、被修正，并在时间里逐渐收束；比起完美聚类，symbiont-d 更在意这种连续性是否还保留下来。

  ![Symbiont D 使用虚构数据展示外部输入简报、来源入口与持续对话](/images/projects/symbiont-d-conversation-briefing.svg)
  仓库提供的交互示意，使用完全虚构的数据；外部输入保留来源和原文入口，只有被真正接住时才进入主对话与长期上下文。

## 和 Codex、PCP 的分工

```text
outside signals / your conversation / selected Codex context
                          ↓
                    Symbiont D
  sensing · discussion · current map · open loops · reflection
                          ↓
       Pages, sources, and relations worth retaining
                          ↓
                     PCP Runtime
```

| 位置 | 做什么 | 不做什么 |
| --- | --- | --- |
| Codex | 执行任务、等待审批、保留任务和进度历史。 | 不被 symbiont-d 代为派发、接管或伪造任务。 |
| Symbiont D | 理解信息，维持当前地图和未决问题，发现值得进入对话的信号。 | 不取代人的边界判断，也不把所有候选自动变成记忆。 |
| PCP Runtime | 提供持久 Page、不可变 Revision、来源、关系与检索能力。 | 不决定一条信息是否值得写入、复核、修订或撤回。 |
| infer-runtime | 在启用语音输入时，通过用户授权的本机端点完成录音转写。 | 不参与文字对话、探索或长期记忆，也不是必需依赖。 |

与 Codex 协作时，Symbiont D 可以把选定的一段 Codex 对话作为一次性、只读的自然上下文，也可以按当前用途召回相关主题的现有认识、用户确认与来源证据。需要核验时再展开原始讨论；它保留的是协作中的信息位置，而不是模仿或接管 Codex 的任务界面。

与长期上下文协作时，Symbiont D 是 Host：它决定何时将内容写入、复核、修订或撤回；PCP 则为这些内容提供稳定身份、版本、来源和访问边界。开发时可以使用内嵌本地存储，常驻服务则连接兼容的本机 Runtime。PCP Console 作为独立的只读观察界面存在，Symbiont D 只呈现当前协作真正需要的状态。

## 输入渠道不会直接变成记忆

    **角色化输入简报**
    每个启用的入口可以有自己的名称与头像；相邻输入可轻量组合，但仍可逐条展开、回复或删除。

    **研究收件箱与 Drive**
    可选的只读入口，用于把 Scholar、Spark、GitHub 或人工转发的材料带进同一个候选区；原文与来源不会被摘要取代。

    **邮箱 Inbox**
    作为可选的只读备用渠道，适合只能通过邮件送达的来源；未启用时不会参与探索。

    **语音输入**
    录音交给经用户授权的本机 infer-runtime 转写，结果以可编辑文本返回；未配置时不影响其他入口。

外部输入先成为可以讨论和复核的候选，不会直接写入长期记忆。Drive 文件夹、账号授权、读取游标、邮箱地址、凭据和本机运行记录都留在本地配置中，不属于仓库内容。

## 一次信息如何留下来

      **外部信号先进入对话**
      研究、项目、工具或文化变化先成为可讨论的线索，而不是自动生成的待办事项或内容流。

```text
signal -> why it may matter -> conversation -> keep / defer / dismiss
```

宁可错过一个弱信号，也不要把噪声、猜测或尚未完成的内部工作包装成需要立即打断人的消息。

      **候选不等于记忆**
      真正留下来的内容需要有来源、上下文和仍值得保留的理由；主题与假设也能随着后续信息被修订。

```text
candidate -> reviewable Page + source -> revisit / revise / retire
```

这种保留方式避免把自动归档误认为记忆，也让后来的人或模型能回到信息的来处，而不是只面对一次压缩后的结论。

      **需要时再带去 Codex**
      选择当前相关的片段作为有界、只读上下文，或者由人带走一个上下文包；执行仍发生在 Codex 的任务边界内。

```text
selected context -> bounded handoff -> Codex task
```

这让长期的信息空间与一次具体执行保持连接，却不把它们混成同一个系统。

## 本地原型

Symbiont D 目前是早期原型，正在以真实的长期使用校准探索、整理与主动交流的边界。它需要 Rust 1.88+、已登录的 Codex CLI，以及用于源码依赖和长期上下文的同级 Paged Context Protocol checkout；只有启用语音输入时，才需要另行运行并授权 infer-runtime。

本地开发可直接运行：

```bash
cargo run
```

服务安装脚本会配置身份绑定的 PCP Runtime、只读 PCP Console 与 symbiont-d；重新运行可更新本地服务，卸载不会删除已经留在本机的数据。

这个项目不急于把“主动”做得显眼。更重要的是，系统在没有值得说的话时能够安静下来，而在人需要回看时，仍然找得到一路怎样走到这里。
