🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

持久运行时智能体 lilCnid/recursus

DeepSeek Harness
lilCnid68 天前有提交已提供中文文档扫描:含敏感能力

一个持久、全权限的运行时智能体,能记忆、计算、委派、恢复、验证并完成任务。

24.5/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/22 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add lilCnid/recursus
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · skill
装得上吗
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 68 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件读取剪贴板或密钥环境变量
查看扫描证据(共 80 处,展示前 55 条)
  • 读取本地文件
    packages/assembly/src/assembled-smoke-worker.ts:184
    auth = object(JSON.parse(await readFile(authFile, 'utf8')), 'Codex auth document')
  • 写入本地文件
    packages/assembly/src/assembled-smoke-worker.ts:202
    await mkdir(lockDirectory, { recursive: true })
  • 写入本地文件
    packages/assembly/src/assembled-smoke-worker.ts:355
    await mkdir(resourceRoot, { recursive: true })
  • 读取本地文件
    packages/assembly/src/assembled-smoke-worker.ts:356
    const realResourceRoot = await realpath(resourceRoot)
  • 写入本地文件
    packages/assembly/src/assembled-smoke-worker.ts:365
    await writeFile(
  • 读取密钥环境变量
    packages/assembly/src/assembled-smoke-worker.ts:381
    process.env.HONCHO_API_KEY = apiKey
  • 读取密钥环境变量
    packages/assembly/src/assembled-smoke-worker.ts:401
    delete process.env.HONCHO_API_KEY
  • 写入本地文件
    packages/assembly/src/assembled-smoke-worker.ts:477
    await writeFile(
  • 写入本地文件
    packages/assembly/src/assembled-smoke-worker.ts:535
    await mkdir(workspace, { recursive: true })
  • 读取本地文件
    packages/assembly/src/assembled-smoke-worker.ts:644
    const sourceBytes = await readFile(sourcePath)
  • 读取本地文件
    packages/assembly/src/assembled-smoke-worker.ts:673
    if (typeof resolved.path !== 'string' || sha256(await readFile(resolved.path)) !== expectedHash) throw new Error('artifact exact resolution failed')
  • 读取密钥环境变量
    packages/assembly/src/assembled-smoke-worker.ts:713
    const honchoApiKey = arguments_.has('--live-honcho') ? process.env.HONCHO_API_KEY : undefined
  • 读取密钥环境变量
    packages/assembly/src/assembled-smoke-worker.ts:714
    delete process.env.HONCHO_API_KEY
  • 删除本地文件递归
    packages/assembly/src/assembled-smoke-worker.ts:743
    await rm(runtimeRoot, { recursive: true, force: true })
  • 执行外部命令来自配置/变量
    packages/assembly/src/command-adapter.ts:79
    const child = spawn(invocation.executable, [...invocation.arguments], {
  • 读取本地文件
    packages/assembly/src/command-adapter.ts:109
    const info = await lstat(directory)
  • 读取本地文件
    packages/assembly/src/command-adapter.ts:111
    return await realpath(directory)
  • 写入本地文件
    packages/assembly/src/command-adapter.ts:117
    await mkdir(workRoot, { recursive: true })
  • 写入本地文件
    packages/assembly/src/command-adapter.ts:120
    await mkdir(parent, { recursive: true })
  • 写入本地文件
    packages/assembly/src/command-adapter.ts:123
    await mkdir(target, { recursive: true })
  • 读取本地文件
    packages/assembly/src/command-adapter.ts:189
    const [existingExecutable, existingModule] = await Promise.all([lstat(executable), lstat(module)])
  • 写入本地文件
    packages/assembly/src/command-adapter.ts:214
    await writeFile(target, contents, { encoding: 'utf8', flag: 'wx' })
  • 读取本地文件
    packages/assembly/src/command-adapter.ts:217
    if (await readFile(target, 'utf8') !== contents) {
  • 读取本地文件
    packages/assembly/src/command-adapter.ts:236
    const [installedExecutable, installedModule] = await Promise.all([lstat(executable), lstat(module)])
  • 写入本地文件
    packages/assembly/src/command-adapter.ts:243
    if (process.platform === 'linux') await chmod(executable, 0o755)
  • 读取本地文件
    packages/assembly/src/command-adapter.ts:332
    const contents = await readFile(resolveHostContainedPath(packageDirectory, ...metadataPath.split('/')), 'utf8')
  • 读取本地文件
    packages/assembly/src/git-acquisition.ts:65
    return await lstat(target)
  • 写入本地文件
    packages/assembly/src/git-acquisition.ts:79
    await mkdir(workRoot, { recursive: true })
  • 读取本地文件
    packages/assembly/src/git-acquisition.ts:80
    const realWorkRoot = await realpath(workRoot)
  • 写入本地文件
    packages/assembly/src/git-acquisition.ts:87
    await mkdir(sourcesRoot, { recursive: true })
  • 读取本地文件
    packages/assembly/src/git-acquisition.ts:88
    const realSourcesRoot = await realpath(sourcesRoot)
  • 读取本地文件
    packages/assembly/src/git-acquisition.ts:123
    const resolvedTarget = await realpath(target)
  • 删除本地文件递归
    packages/assembly/src/git-acquisition.ts:202
    if (created) await rm(target, { recursive: true, force: true })
  • 读取本地文件
    packages/assembly/src/manifest.ts:437
    parsed = JSON.parse(await readFile(path, 'utf8')) as JsonValue
  • 读取本地文件
    packages/assembly/src/package-inspection.ts:203
    const archive = await readFile(options.archivePath)
  • 读取本地文件
    packages/assembly/src/profile-lifecycle.ts:62
    await lstat(target)
  • 读取本地文件
    packages/assembly/src/profile-lifecycle.ts:73
    info = await lstat(directory)
  • 读取本地文件
    packages/assembly/src/profile-lifecycle.ts:79
    return await realpath(directory)
  • 读取本地文件
    packages/assembly/src/profile-lifecycle.ts:299
    const manifestContents = await readFile(manifestPath, 'utf8')
  • 读取本地文件
    packages/assembly/src/profile-lifecycle.ts:311
    const lockfileInfo = await lstat(lockfilePath)
  • 读取本地文件
    packages/assembly/src/profile-lifecycle.ts:315
    const lockfile = await readFile(lockfilePath, 'utf8')
  • 写入本地文件
    packages/assembly/src/profile-lifecycle.ts:399
    await mkdir(options.workRoot, { recursive: true })
  • 写入本地文件
    packages/assembly/src/profile-lifecycle.ts:405
    await mkdir(distributionsRoot, { recursive: true })
  • 写入本地文件
    packages/assembly/src/profile-lifecycle.ts:418
    await mkdir(staging)
  • 写入本地文件
    packages/assembly/src/profile-lifecycle.ts:440
    await mkdir(path.dirname(destination), { recursive: true })
  • 写入本地文件
    packages/assembly/src/profile-lifecycle.ts:441
    await copyFile(source, destination)
  • 写入本地文件
    packages/assembly/src/profile-lifecycle.ts:490
    await writeFile(resolveHostContainedPath(staging, 'pnpm-lock.yaml'), options.profileLockContents, {
  • 删除本地文件递归
    packages/assembly/src/profile-lifecycle.ts:499
    await rm(staging, { recursive: true })
  • 删除本地文件递归
    packages/assembly/src/profile-lifecycle.ts:511
    if (await exists(staging)) await rm(staging, { recursive: true })
  • 删除本地文件递归
    packages/assembly/src/profile-lifecycle.ts:915
    if (await exists(context.profileDirectory)) await rm(context.profileDirectory, { recursive: true })
  • 删除本地文件
    packages/assembly/src/profile-lifecycle.ts:935
    await rm(lockPath)
  • 删除本地文件递归
    packages/assembly/src/profile-lifecycle.ts:1001
    await rm(backup, { recursive: true })
  • 删除本地文件递归
    packages/assembly/src/profile-lifecycle.ts:1004
    if (await exists(context.profileDirectory)) await rm(context.profileDirectory, { recursive: true })
  • 读取本地文件
    packages/assembly/src/smoke.ts:152
    const realWorkRoot = await realpath(options.workRoot)
  • 读取本地文件
    packages/assembly/src/smoke.ts:153
    const realProfile = await realpath(options.profileDirectory)
扫描于 2026/11/1(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 记忆并委派任务
  • 验证完成后自动恢复执行

基于 DeepSeek Harness 构建的持久全权限运行时智能体

README

由 DeepSeek 最新模型翻译生成
Recursus 一个持久、全权限的运行时智能体,能记忆、计算、委派、恢复、验证并完成任务。 Recursus 是 OpenCnid 智能体运行时的产品与装配层,构建在 DeepSeek Harness 之上。DeepSeek Harness 仍是控制平面:智能体循环、会话、工具、审批、策略、血缘、取消和遥测都由它负责。Recursus 围绕这个核心,把各自独立版本化的能力组合起来,并将加入持久运行状态、执行监督、验证驱动的完成、协同委派、有界上下文编译和自适应模型路由。 [!IMPORTANT] Recursus 正在实现里程碑 1。已验收的 Windows 包、配置档和冒烟证据,仍是上一个 Harness 修订版的历史证据。经评审的确定性打包修复现已固定到 e52c224fe00954fb7e8cda19eb2411dceef15989;Linux 包、配置档、冒烟和 §20.6 证据必须在该源码锁定点重新生成。本仓库尚未创建 Recursus 发布版,组件的再分发限制仍然适用。 Recursus 有意以操作者授予的主机权限运行。它的定位是可信开发机上的强力智能体,不是安全沙箱。不可逆的外部操作仍需显式闸门、精确目标和持久证据。
展开完整文档(README 剩余 1 节)
Recursus

一个持久、全权限的运行时智能体,能记忆、计算、委派、恢复、验证并完成任务。

Recursus 是 OpenCnid 智能体运行时的产品与装配层,构建在 DeepSeek Harness 之上。DeepSeek Harness 仍是控制平面:智能体循环、会话、工具、审批、策略、血缘、取消和遥测都由它负责。Recursus 围绕这个核心,把各自独立版本化的能力组合起来,并将加入持久运行状态、执行监督、验证驱动的完成、协同委派、有界上下文编译和自适应模型路由。

[!IMPORTANT]
Recursus 正在实现里程碑 1。已验收的 Windows 包、配置档和冒烟证据,仍是上一个 Harness 修订版的历史证据。经评审的确定性打包修复现已固定到 e52c224fe00954fb7e8cda19eb2411dceef15989;Linux 包、配置档、冒烟和 §20.6 证据必须在该源码锁定点重新生成。本仓库尚未创建 Recursus 发布版,组件的再分发限制仍然适用。

Recursus 有意以操作者授予的主机权限运行。它的定位是可信开发机上的强力智能体,不是安全沙箱。不可逆的外部操作仍需显式闸门、精确目标和持久证据。

运行时组成

flowchart TD
operator["Operator"] --> recursus["Recursus product and run layer"]
recursus --> dsh["DeepSeek Harness control plane"]
dsh --> codex["OpenAI Codex model provider"]
dsh --> rlm["Persistent RLM compute and native recursion"]
dsh <--> honcho["Honcho cross-session memory"]
rlm --> artifacts["Project-local exact artifacts"]
artifacts --> dsh
dsh --> dovetail["Dovetail workflows and evaluation skills"]
dsh --> truth["Git, files, tests, CI, and durable run state"]

| 组件 | 职责 | 仓库 |
| DeepSeek Harness | 智能体循环、工具、会话、策略、血缘、取消、UI | OpenCnid/deepseek-harness |
| OpenAI Codex adapter | ChatGPT 订阅制模型服务商 | OpenCnid/deepseek-openai-codex |
| DeepSeek RLM | 持久 IPython、快照、递归 DSH 子进程、Python 工具桥 | OpenCnid/deepseek-rlm |
| DeepSeek Honcho | 跨会话记忆、精确产物、脱敏实验卡片 | OpenCnid/deepseek-honcho |
| DeepSeek Dovetail | 提示词、委派、评估、自我对弈、引导和交接工作流 | OpenCnid/deepseek-dovetail |

精确修订版和许可边界记录在 manifests/components.json 和 THIRD_PARTY_NOTICES.md。

装配契约状态

manifests/assembly.json 在已接受的组件版本锁定基础上,扩展出带版本号的 Milestone 1 源码锁:许可证状态、获取方式、精确的包管理器与 lockfile 摘要、组件自有的校验/构建/打包命令、包选择器、公开的 DSH 配置档贡献、平台支持,以及兼容性约束。它的严格 schema 是 manifests/assembly.schema.json,而 manifests/profile-lock.yaml 在 pnpm 11.19.0 下冻结了组装后配置档的第三方依赖解析结果。

私有包 packages/assembly 定义了与服务商无关的生命周期、只读 Git 获取、精确的组件命令执行、有界的 npm-tarball 检查、隔离的 DSH 配置档生命周期,以及组装后的冒烟运行器。操作者提供绝对的 Recursus 工作根目录;所有源码、包管理器、依赖、Python、分发和打包输出状态都留在该目录之下。检查器会在归档文本中拒绝这个确切的根路径,包括斜杠归一化形式和转义形式。manifests/package-integrity.json 以及 Windows 包、配置档、默认冒烟和可选启用的实时冒烟报告,为前一个 Harness 版本锁定保留了不含路径的证据。这些证据相对新审查的源码锁是有意过期的,不得重新标注。在完整的 §20.6 工作流在新版本锁定下重新生成证据之前,Linux 验收仍然缺失。工作流、已验证行为和剩余限制见 docs/ASSEMBLY.md。

Recursus 将负责什么

- 可复现、一条命令完成的运行时组装;
- 权威且持久化的任务与运行状态;
- 持久化的进程、内核、CI 和唤醒监督;
- 机器可读的完成契约;
- 依赖感知的多智能体协调;
- 带信任与新鲜度标签的有界上下文编译;
- 模型、推理强度与 RLM 路由;
- 操作者的状态、暂停、恢复、取消和审批控制;
- 端到端兼容性、打包、评估和发布。

Recursus 不负责什么

- 在 DSH 之外再造一个智能体循环;
- 另一个对话记录存储或通用记忆系统;
- Honcho 内部的当前代码真相;
- Honcho 内部的产物字节;
- 隐藏的重新许可或复制的组件历史;
- 声称获得任何上游项目的官方背书。

站在巨人的肩膀上

Recursus 之所以存在,是因为许多项目把困难的部分变得清晰可读、可复用。我们尤其感谢:

- DeepSeek AI 和 DeepSeek Harness 贡献者,提供了插件优先的智能体控制平面;
- Cordis 及相关框架贡献者,提供了时空服务组合能力;
- OpenAI 和 Codex 生态,提供了我们通过服务商适配器使用的模型体验;
- Mario Zechner、Pi 生态和 @earendil-works/pi-ai 贡献者,提供了直接服务商与 OAuth 基础层;
- Prime Agent 贡献者,他们提出的 persistent-kernel 与 recursive-agent 技术被 DeepSeek RLM 采用;
- Project Jupyter 和 IPython,提供计算底座;
- Honcho 和 Plastic Labs,提供跨会话推理能力与官方 Honcho SDK;
- Matthew Murphy、Lexideck、SPARK 作者,以及所有 OpenCnid Dovetail 贡献者,他们的方法构成了工作流层的基础;
- 组件 lockfile 和 notices 中记录的每个库与工具的维护者。

署名不能替代许可证。每个依赖和组件都保留各自的版权与条款。详见 THIRD_PARTY_NOTICES.md。

路线图

实现顺序定义在 GAMEPLAN.md:

1. 可复现的运行时组装;
2. 持久化的运行状态;
3. 执行监督;
4. 验证驱动的完成判定;
5. 协同委派;
6. 有界上下文编译;
7. 自适应模型与算力路由;
8. 操作者体验、评估与发布。

规范性的产品边界与完成定义(Definition of Done)见 SPEC.md。组件拓扑见 docs/ARCHITECTURE.md。

要在全新的 Codex 会话中继续实现,请使用 NEXT_SESSION_PROMPT.md 中维护的启动提示词。它会引导会话查阅规范性规格文档,并定位第一个尚未完成的里程碑。

仓库验证

使用 Node.js 22.19.0 或受支持的 Node.js 24 版本,以及 pnpm 11.19.0:

pnpm install --frozen-lockfile
pnpm check

node scripts/verify.mjs 仍然是不依赖第三方库的检查,覆盖组件版本锁定、已实现的 Milestone 1 schema、源码锁、package/profile 证据、smoke 报告和 notice 闭环。在这次有意的版本锁定过渡期间,它会按明确的历史身份校验已接受的前序证据,并独立校验当前源码锁。仓库验证器通过,并不代表历史报告就是最新的,也不代表 Milestone 1 已完成;完整的 package、profile、smoke、Linux 和 §20.6 证据集,仍须在新的源码锁下重新生成并通过验收。

许可证

Recursus 原创代码与文档采用 MIT License 授权。引用及后续组装的组件保留各自的许可证。Recursus 是独立的 OpenCnid 项目,并非 DeepSeek、OpenAI、Honcho 或 Prime 的官方产品。
预览分享卡片长什么样 ↓lilCnid/recursus
分享 · DeepSeek Harness Hub
lilCnid/recursus

一个持久、全权限的运行时智能体,能记忆、计算、委派、恢复、验证并完成任务。

回到顶部