编排多智能体分工协作,全程可审计可恢复
33.9/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/19 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查未通过:仓库根目录及浅层子目录均无 dsh 插件清单,无法用 dsh 插件安装命令安装。以下命令仍可尝试,但可能失败。
无法用 dsh 插件命令安装(仓库内无 dsh 插件清单)
git clone https://github.com/17861102832/fleet-os.git按该仓库 README 的原生方式安装;若作者另行发布了 DSH 插件包,请以其文档为准
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · skill
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 63 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
⚠︎ 实装验证未通过(unknown · 2026/10/26) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装仓库根目录及浅层子目录均无 dsh 插件清单,无法用 dsh 插件安装命令安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包fleet-os(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明
源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/28 09:43:41
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 81 处,展示前 78 条)
- 发起网络请求dsh/src/fleet-bridge.ts:27
const res = await fetch(`${HUB}/v1/admin`, { - 发起网络请求dsh/src/fleet-bridge.ts:37
const res = await fetch(`${HUB}/v1/state`) - 读取本地文件engine/src/agents-md.js:49
if (fs.existsSync(p)) { - 读取本地文件engine/src/agents-md.js:51
let body = fs.readFileSync(p, 'utf8'); - 读取本地文件engine/src/e2e.js:196
try { wrote = fs.existsSync(path.join(artifacts, 'solver', 'f1', 'answer.txt')) || fs.existsSync(path.join(artifacts, 'judge', 'f2', 'answer.txt')); } - 删除本地文件engine/src/e2e.js:237
try { fs.rmSync(repo, { recursive: true, force: true }); } catch (_) {} - 删除本地文件engine/src/e2e.js:238
try { fs.rmSync(wtBase, { recursive: true, force: true }); } catch (_) {} - 写入本地文件engine/src/e2e.js:243
fs.writeFileSync(path.join(repo, 'base.txt'), 'hello\n'); - 写入本地文件engine/src/e2e.js:248
fs.writeFileSync(path.join(a.worktree, 'a.txt'), 'from n1\n'); - 写入本地文件engine/src/e2e.js:250
fs.writeFileSync(path.join(b.worktree, 'b.txt'), 'from n2\n'); - 读取本地文件engine/src/e2e.js:254
const files = fs.readdirSync(repo); - 执行外部命令来自配置/变量engine/src/e2e.js:261
const p = spawn(process.execPath, [path.join(__dirname, 'mcp-server.js')], { env: Object.assign({}, process.env, { FLEET_CONFIG: cfgFile }) }); - 写入本地文件engine/src/e2e.js:317
try { fs.writeFileSync(art, 'A发现:龙头是X'); } catch (_) {} - 读取本地文件engine/src/evolve.js:102
peek() { return { policies: fs.existsSync(path.join(this.dir, 'policies')) ? fs.readdirSync(path.join(this.dir, 'policies')) : [], genome: fs.existsSy - 读取本地文件engine/src/filemap.js:25
try { ents = fs.readdirSync(d, { withFileTypes: true }); } catch (_) { return; } - 读取本地文件engine/src/filemap.js:31
try { const body = fs.readFileSync(p, 'utf8'); if (re.test(body)) hits.push(p); } catch (_) {} - 读取本地文件engine/src/filemap.js:42
try { body = fs.readFileSync(file, 'utf8'); } catch (_) { return { error: 'cannot_read' }; } - 读取本地文件engine/src/filemap.js:57
try { ents = fs.readdirSync(d, { withFileTypes: true }); } catch (_) { return; } - 读取本地文件engine/src/filemap.js:72
try { head = fs.readFileSync(f, 'utf8').split('\n').slice(0, 40).join('\n'); } catch (_) { continue; } - 读取本地文件engine/src/fleet.js:61
if (p === '-') return JSON.parse(fs.readFileSync(0, 'utf8').replace(/^ FEFF/, '')); - 读取本地文件engine/src/fleet.js:62
return JSON.parse(fs.readFileSync(p, 'utf8').replace(/^ FEFF/, '')); - 写入本地文件engine/src/fleet.js:228
main().catch((e) => { try { ensureDirForErr(); fs.appendFileSync(path.join(__dirname, '..', 'state', 'log', 'fleet-cli.err'), (e && e.stack || e) + '\ - 写入本地文件engine/src/fleet.js:230
function ensureDirForErr() { fs.mkdirSync(path.join(__dirname, '..', 'state', 'log'), { recursive: true }); } - 读取本地文件engine/src/gas-town.js:26
if (fs.existsSync(f)) { - 读取本地文件engine/src/gas-town.js:27
try { for (const b of JSON.parse(fs.readFileSync(f, 'utf8'))) this.index.set(b.id, b); } catch (_) {} - 写入本地文件engine/src/gas-town.js:55
try { fs.mkdirSync(dir, { recursive: true }); } catch (_) {} - 读取本地文件engine/src/gas-town.js:62
if (fs.existsSync(f)) { - 读取本地文件engine/src/gas-town.js:63
try { for (const c of JSON.parse(fs.readFileSync(f, 'utf8'))) this.index.set(c.id, c); } catch (_) {} - 执行外部命令来自配置/变量engine/src/git.js:16
return execFileSync(cmd, args, { encoding: 'utf8', maxBuffer: 32 * 1024 * 1024, stdio: ['ignore', 'pipe', 'pipe'] }); - 读取本地文件engine/src/git.js:23
if (fs.existsSync(wt)) return { worktree: wt, branch: br, created: false }; - 写入本地文件engine/src/hub.js:87
try { fs.appendFileSync(this.logFile, line + '\n'); } catch (_) {} - 读取本地文件engine/src/hub.js:494
return send(200, fs.existsSync(file) ? fs.readFileSync(file, 'utf8') : '<pre>fleet hub ok</pre>', 'text/html'); - 读取本地文件engine/src/jobstore.js:29
if (fs.existsSync(idxFile)) { - 读取本地文件engine/src/jobstore.js:30
try { for (const j of JSON.parse(fs.readFileSync(idxFile, 'utf8'))) this.index.set(j.id, j); } catch (_) {} - 读取本地文件engine/src/langgraph.js:45
if (fs.existsSync(f)) { try { for (const t of JSON.parse(fs.readFileSync(f, 'utf8'))) this.threads.set(t.threadId, t); } catch (_) {} } - 写入本地文件engine/src/mcp-server.js:82
log(...a) { try { fs.appendFileSync(path.join(__dirname, '..', 'state', 'log', 'mcp.log'), `[${new Date().toISOString()}] ${a.join(' ')}\n`); } catch - 读取本地文件engine/src/persona.js:20
if (!fs.existsSync(this.dir)) return this; - 读取本地文件engine/src/persona.js:21
for (const f of fs.readdirSync(this.dir)) { - 读取本地文件engine/src/persona.js:24
const c = JSON.parse(fs.readFileSync(path.join(this.dir, f), 'utf8')); - 读取本地文件engine/src/persona.js:37
const raw = fs.readFileSync(file, 'utf8'); - 写入本地文件engine/src/persona.js:53
fs.writeFileSync(path.join(this.dir, id + '.json'), JSON.stringify(card, null, 2), 'utf8'); - 读取本地文件engine/src/role.js:27
if (!fs.existsSync(this.dir)) return; - 读取本地文件engine/src/role.js:28
for (const f of fs.readdirSync(this.dir)) { - 读取本地文件engine/src/role.js:31
const data = JSON.parse(fs.readFileSync(require('path').join(this.dir, f), 'utf8')); - 读取本地文件engine/src/skills.js:25
if (!fs.existsSync(this.root)) return; - 读取本地文件engine/src/skills.js:26
for (const dir of fs.readdirSync(this.root)) { - 读取本地文件engine/src/skills.js:29
if (!fs.statSync(full).isDirectory()) continue; - 读取本地文件engine/src/skills.js:31
if (!fs.existsSync(file)) continue; - 读取本地文件engine/src/skills.js:32
const raw = fs.readFileSync(file, 'utf8'); - 读取本地文件engine/src/skills.js:67
out.push({ id, content: fs.readFileSync(file, 'utf8') }); - 写入本地文件engine/src/state.js:81
try { fs.renameSync(f, this.snapshotFile); } catch (e) { - 写入本地文件engine/src/state.js:85
try { fs.renameSync(f, this.snapshotFile); ok = true; } catch (_) { Atomics && Atomics.wait && Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), - 写入本地文件engine/src/state.js:87
if (!ok) try { fs.copyFileSync(f, this.snapshotFile); fs.unlinkSync(f); } catch (_) {} - 读取本地文件engine/src/state.js:555
if (!fs.existsSync(dir)) return []; - 读取本地文件engine/src/state.js:556
return fs.readdirSync(dir).filter((f) => f.endsWith('.json')).map((f) => { - 读取本地文件engine/src/state.js:557
try { return JSON.parse(fs.readFileSync(path.join(dir, f), 'utf8')); } catch (_) { return null; } - 读取本地文件engine/src/subagents.js:31
if (!fs.existsSync(f)) return; - 读取本地文件engine/src/subagents.js:32
try { const arr = JSON.parse(fs.readFileSync(f, 'utf8')); arr.forEach((r) => { this.registry.set(r.id, r); this.personas.cards.set(r.id, r); }); } cat - 写入本地文件engine/src/tracing.js:47
try { fs.mkdirSync(dir, { recursive: true }); } catch (_) {} - 写入本地文件engine/src/util.js:14
fs.mkdirSync(d, { recursive: true }); - 读取本地文件engine/src/util.js:19
if (!fs.existsSync(file)) return []; - 读取本地文件engine/src/util.js:21
for (const line of fs.readFileSync(file, 'utf8').split('\n')) { - 写入本地文件engine/src/util.js:31
fs.appendFileSync(file, JSON.stringify(obj) + '\n', 'utf8'); - 写入本地文件engine/src/util.js:36
fs.writeFileSync(file, String(text), 'utf8'); - 读取本地文件engine/src/util.js:62
const raw = JSON.parse(fs.readFileSync(file, 'utf8')); - 写入本地文件engine/src/worker.js:68
try { fs.appendFileSync(this.logs, line + '\n'); } catch (_) {} - 写入本地文件engine/src/worker.js:144
fs.writeFileSync(file, body); - 写入本地文件engine/src/worker.js:156
fs.writeFileSync(pf, prompt, 'utf8'); - 执行外部命令来自配置/变量engine/src/worker.js:159
const stdout = execSync(finalCmd, { encoding: 'utf8', maxBuffer: 64 * 1024 * 1024, timeout: (this.provider.timeoutMs || 600000), cwd: ctx.workdir || p - 删除本地文件engine/src/worker.js:164
try { fs.unlinkSync(pf); } catch (_) {} - 写入本地文件engine/src/worker.js:191
for (const f of (o.files || [])) { try { ensureDir(path.dirname(path.resolve(workdir, f.path))); fs.writeFileSync(path.resolve(workdir, f.path), f.bod - 发起网络请求engine/src/worker.js:208
const res = await fetch(`${base}/chat/completions`, { - 写入本地文件engine/src/worker.js:232
if (name === 'Write') { try { fs.writeFileSync(path.resolve(workdir, String(args.path)), String(args.content || '')); return { ok: true, path: args.pa - 读取本地文件engine/src/worker.js:299
const body = fs.readFileSync(p, 'utf8'); - 读取本地文件engine/src/worker.js:309
let body = fs.readFileSync(p, 'utf8'); - 写入本地文件engine/src/worker.js:312
fs.writeFileSync(p, body, 'utf8'); - 执行外部命令来自配置/变量engine/src/worker.js:318
const out = execSync(String(cmd).replace(/[<>]/g, ''), { encoding: 'utf8', cwd: workdir, shell: true, timeout: 30000, maxBuffer: 4 * 1024 * 1024 }); - 发起网络请求engine/src/ws.js:194
const req = mod.request({
扫描于 2026/11/3(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 多智能体分工编排
- 全程可审计可恢复
- 跨舰队接力协作
展开完整介绍(121 字)↓
Fleet OS · 舰队模式 — 生产级多 Agent 协同引擎:WS 黑板 + 事件溯源 + 盲评对抗 + 跨舰队接力 + 上下文压缩 + 多厂商负载均衡 + 自进化。36 模块,零运行时依赖,MCP 40 工具,48 项 e2e 全绿。
README
由 DeepSeek 最新模型翻译生成Fleet OS · 舰队模式
生产级多 Agent 协同引擎 —— WebSocket 黑板 + 事件溯源 + 盲评对抗 + 跨舰队接力 + 自进化。零 npm 依赖,36 模块,单进程可跑。
这不是又一个“并行 N 个子代理”的玩具。 每一个槽位、每道闸、每条账、每段上下文都可审计、可恢复、可 fork、可接力、会自进化、会负载均衡。
- 48 项端到端测试全绿(node src/e2e.js)
- 20 节点冒烟:complete / 0 失败
- MCP 服务器 40 个工具,可被任意支持 MCP 的 IDE/Agent 直接指挥
为什么不是 Kimi Agent Swarm
Kimi 的“100 子 agent”是权重里焊死的营销数字。同质模型并行辩论的从众率实测高达 85.5%(The Cost of Consensus, 2025);Anthropic 数据显示 multi-agent 烧掉 ≈15× chat token。
展开完整文档(README 剩余 1 节)
Fleet OS · 舰队模式
生产级多 Agent 协同引擎 —— WebSocket 黑板 + 事件溯源 + 盲评对抗 + 跨舰队接力 + 自进化。零 npm 依赖,36 模块,单进程可跑。
这不是又一个“并行 N 个子代理”的玩具。 每一个槽位、每道闸、每条账、每段上下文都可审计、可恢复、可 fork、可接力、会自进化、会负载均衡。
- 48 项端到端测试全绿(node src/e2e.js)
- 20 节点冒烟:complete / 0 失败
- MCP 服务器 40 个工具,可被任意支持 MCP 的 IDE/Agent 直接指挥
为什么不是 Kimi Agent Swarm
Kimi 的“100 子 agent”是权重里焊死的营销数字。同质模型并行辩论的从众率实测高达 85.5%(The Cost of Consensus, 2025);Anthropic 数据显示 multi-agent 烧掉 ≈15× chat token。舰队模式用硬工程对抗这些:
| 维度 | Kimi Swarm | Fleet OS v6 |
| 并行 | 100 权重硬编码 | 配额 + 默认扇出 3~5(Anthropic 最佳实践)+ max_threads=6 / max_depth=1 护栏 |
| 通信 | 同进程共享 | WS 黑板 + 产物落盘指针(token 隔离) |
| 验证 | 自判 | N 路盲评(盲采样)+ 裁决 + verifier rerank + 级联升级 |
| 上下文 | 无压缩 | Compactor 热/冷分层 + observation masking(防 context rot) |
| 模型绑定 | 单模型 | Balancer 多厂商 round-robin / cheapest / least_error + error-aware 降级 |
| 权限 | 无 | 四权限模式 bypass/acceptEdits/plan/default + 人工审批闭环 |
| 跨舰队 | 无 | FleetBus handoff 只传指针不传全文 + 依赖门 |
| 持久化 | 会话断即丢 | append-only ledger × checkpoint × hooks × traces × beads/convoy |
| 自进化 | 无 | settled 自动提炼 policies / skills-genome / persona-boost |
| 时间旅行 | 无 | replay / fork checkpoint |
架构总览(36 模块)
协调中枢 hub.js(HTTP+WS 双栈、舰队状态机、自动续传)调度 topology.js(solo/fanout/mapreduce/sample-verify/tournament/hierarchical 自动选)状态 state.js(DAG 节点 + 盲评 + 级联 + checkpoint + replay/fork)黑板 board.js(append-only + 相关性检索 + token 预算裁剪)压缩 compactor.js(热/冷分层 + observation masking,防 context rot)均衡 balancer.js(多 provider 轮流/最便宜/最少错误 + 自动降级)人格 persona.js + role.js(独立立场 + seed 切入角 + Role Contract + Codex 三型角色卡)安全 policy.js + permissions.js + guardrails.js(allow/ask/deny + 三档 tripwire)执行 worker.js(demo / cli(claude·codex·dsh·trae-cli) / api(OpenAI 兼容 + 真实工具执行器))隔离 git.js(N 路 git worktree 物理隔离,并行写不踩脚)协同 fleetbus.js(跨舰队 handoff + 依赖门 + Agent Teams 同层互喂)进化 evolve.js(跑完自动提炼策略/技能基因/人格增强)观测 tracing.js + hooks.js + filemap.js + public/board.html(浏览器看板)桥接 mcp-server.js(40 工具,MCP stdio)
对齐的实现:OpenAI Agents SDK(role contract / guardrails / tracing)、Claude Code(hooks / permission modes)、Codex CLI(AGENTS.md 叠加 / 子代理三型 / max_threads 边界)、AutoGen v0.4(TopicBus actor 模型)、MetaGPT(SOP 契约)、LangGraph(Command / Checkpoint / time-travel)、Aider(repo map)、Gas Town(beads/convoy/refinery)、FrugalGPT / RouteLLM(级联路由)。
快速开始
cd engine
npm install # 仅 dev 依赖;运行时零依赖
1. 起舰(Hub:HTTP+WS 中枢 + 看板 http://127.0.0.1:7788/board.html)
node src/hub.js fleet.config.json
2. 起舰员(demo 模式不烧 token)
node src/worker.js --mode=demo --slots=2
3. 下单(spec 里写目标/拓扑/验收标准/预算)
node src/fleet.js run fleet.config.json spec.json
4. 观战
node src/fleet.js status fleet.config.json
或浏览器打开 board.html
接入真模型:复制 fleet.config.example.json → fleet.config.json,填入 OpenAI 兼容端点(支持多厂商并存,Balancer 自动轮询/降级)。
MCP 接入(让 IDE/Agent 当舰长)
json
{ "mcpServers": { "fleet": { "command": "node", "args": ["/engine/src/mcp-server.js", "/engine/fleet.config.json"] } } }
40 个工具覆盖:plan / status / adopt / board / rerank / fork / subagents / handoff / deps / consume / bus_snap / perm_check / balancer / compile_stats / evolve / team_join / peer_ping …
DeepSeek Harness 深度集成(dsh-fleet)
Fleet OS 同时是 DeepSeek Harness 的插件(dsh-plugin topic)。
DSH 架构一页纸
Agent = Model + Harness
│
┌─────────┴──────────┐
│ Cordis 内核 │ ← 来自 Koishi.js 生态的依赖注入/插件生命周期框架 │ (挂载/卸载/依赖) │ 只管插件,不提供任何能力 └─────────┬──────────┘ 一切皆插件:models · tools · skills · sessions · sandboxes storage · loops · scheduling · UI
- 插件三形式:函数 export function apply(ctx) / 对象 / class Service;export const inject = ['tools'] 声明依赖,Cordis 等服务就绪才加载
- 工具 DSL:ctx.tools.register(defineTool({ name, description, parameters, output{schema,render}, execute })) —— args 自动校验,output.render 决定模型看到的形态
- 四种运行时模式:Standard(全家桶)/ Code(模型写 TS 编排多轮工具)/ Minimal(双工具基准)/ Creator(运行时检查 + 在线试插件)
- 全链路可追溯:append-only session log(system prompt/推理/工具调用/子代理调度/每次上下文注入全记录),Trajectory 视图按来源检查,resume/fork/search/replay 全走同一事件流
- 能力分层:Service Definition / Service Provider / Consumer 三包拆分,任何能力可换
- 挂载方式:cordis.yml overlay pnpm dsh web --patch ./cordis.yml,路径必须绝对;ctx.effect() 提供卸载清理
Fleet OS ↔ DSH 架构映射
| DSH 原生 | Fleet OS 对应 | 增量 |
| append-only session log | append-only ledger + checkpoints | 多一层 replay/fork time-travel |
| subagents | 舰队节点(扇出 3~5 + max_threads/depth 护栏) | 盲评对抗 + verifier rerank + tier 级联 |
| Trajectory view | /board 实时看板 | 舰队级 DAG 视图 + balancer 健康 + 待审批告警 |
| 模型插件 | Balancer 多厂商负载均衡 | round-robin/cheapest/least_error + 自动降级 |
| Context 注入 | Compactor 热/冷分层 | observation masking,防 context rot |
三步挂载 bash
1. 起舰队 hub
node engine/src/hub.js engine/fleet.config.json
2. 把 dsh/cordis.yml 里的路径改成你的绝对路径(插件源:dsh/src/fleet-bridge.ts —— 注册 8 个 fleet_* 工具)
3. DSH 加载 overlay
pnpm dsh web --patch /absolute/path/to/fleet-os/dsh/cordis.yml
Harness 里的 agent 即获得:fleet_plan(编排一支舰队)/ fleet_status / fleet_state(全量快照)/ fleet_board(读黑板)/ fleet_approvals + fleet_approve(人工审批闭环)/ fleet_handoff(跨舰队接力)/ fleet_evolve(技能基因提炼)。
测试 bash
node src/e2e.js # 48 项端到端:审批闭环/冷续传/api真执行器/cli外设/worktree隔离/MCP/子代理/自进化/跨舰队/权限/团队/压缩/负载均衡
许可证
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
17861102832/fleet-os
编排多智能体分工协作,全程可审计可恢复
相关插件 · 技能 / 提示词
人设统管ZiChuanLan/agent-purge
一份人设,统一管理多个 coding agent。
★ 1,141已汉化DSH
74.1
人物画像蒸馏titanwings/distilly
Distilly — 把他们的思考方式提炼成可复用的技能,供任何智能体或机器人使用。原名 Colleague Skill(原同事 Skill)。
★ 25,659已汉化DSH
71.3
推理工作空间套件Tiger3807861189/J-Space-Cognition-Suite
J-Space 是面向复杂推理、大型仓库工程、子代理协作与授权安全分析的推理时工作空间和控制套件。
★ 2,957已汉化DSH
70.5
两阶段工具锚定预设xiaobright/dsh-anchored-standard
实验性 DeepSeek Harness agent preset…
★ 3,742已汉化DSH
70.1
智能体工作流编排nrslib/takt
不再日夜盯着 AI 编码智能体。
★ 1,402已汉化DSH
70
Agent 运行时手册Electricitysheep/dsh-handbook
DeepSeek Harness dsh 从 0 到 1 深度手册:安装/插件开发/性能调优/实测案例/同模型多…
★ 827已汉化DSH
68.7
这是你的仓库?认领条目