关于 Daimonos
Daimonos 是用 Rust 编写的 MCP 服务及编码 Agent 框架,将常见文件、搜索、命令和 Git 操作转为结构化的精简响应,供编码 Agent 减少冗长终端输出。
主要功能
- 01结构化文件、搜索和命令工具
- 02原生 git、cargo、gh 和 docker 工具
- 03语义化命令输出过滤
- 04批量操作与文件读取去重
- 05受管理的子进程和后台任务
适用场景
- 01让 Agent 读取和编辑项目文件
- 02运行测试并查看精简结果
- 03检查 Git 变更或管理分支
- 04将多项操作合并为一次调用
MCP 相关
Daimonos 作为 MCP 服务由 IDE 或命令行客户端启动,提供文件、搜索、执行和 Git 操作的结构化工具,并支持多种命令行工具的原生插件。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Daimonos
一个针对 Agent 优化的操作系统层,让 AI 编码 Agent 更快、更省钱。
Daimonos 将 AI 编码 Agent 内置的文件、搜索、执行和 git 工具替换为结构化的对应工具,返回紧凑的 JSON,而非原始终端输出。结果是:消耗更少的令牌、减少往返次数、降低 API 成本,同时无需更改工作流。
平台: Linux(x86_64、aarch64)和 macOS(Apple Silicon、Intel)。 Windows 支持计划中。
有关仓库 Agent/操作者约定,请参阅 AGENTS.md(尤其是
Daimonos 工具使用策略)。
名称源自希腊语 daimon(Agent/灵体),也是 “daemon”的词源。
问题
当 AI Agent 运行 cargo test 时,会得到数百行终端输出——进度条、编译消息、通过的测试名称——而它真正需要的只有“47 项通过,0 项失败”。Agent 必须为这些噪声中的每个令牌付费:读取这些内容、推理分析,并在会话剩余时间内将其保留在上下文中。
git status、docker ps、ls -la 和其他所有 shell 命令也会造成同样的浪费。Agent 会将其 30-50% 的令牌预算耗费在冗长且无结构的工具输出上。
工作原理
Daimonos 作为一个 MCP 服务运行,由你的 IDE 或命令行自动启动。它提供 Agent 已经在使用的相同操作——读取文件、写入文件、搜索、执行命令、执行 git 操作——但返回紧凑、结构化的 JSON,而非原始文本。
这个单一二进制文件还提供 ACP、单次运行 Agent、交互式聊天和套接字守护进程运行时——本身就是一套完整的编码 Agent 工具框架;请参阅下文的Agent 工具框架功能,以及 运行时模式了解明确的子命令和兼容性别名。
Agent: exec("cargo test")
Without Daimonos (raw terminal output):
Compiling inventory v0.1.0 (/workspace)
Finished `test` profile [unoptimized + debuginfo] target(s) in 2.31s
Running unittests src/main.rs (target/debug/deps/inventory-abc123)
running 47 tests
test config::tests::test_default ... ok
test config::tests::test_load ... ok
... (200+ more lines)
test result: ok. 47 passed; 0 failed; 0 ignored
With Daimonos (structured JSON):
{"ok":true,"tests":47,"passed":47,"failed":0,"failures":[]}
四层优化
-
原生工具插件 —
git、cargo、gh和docker以一等 MCP 工具的形式提供,并返回结构化 JSON 输出。当 Agent 调用exec("cargo test")时,Daimonos 会拦截调用并改为通过原生插件执行。 -
语义输出过滤器 — 对于没有原生插件的命令(pytest、 make、pip install、eslint 等),Daimonos 会进行语义压缩: 测试运行器只返回摘要和失败信息,构建命令只返回“成功”或 错误信息,安装命令则返回成功/失败状态。
-
协议层效率优化 — 读取去重(重新读取未更改的 文件时返回
{"unchanged":true},而非完整内容)、紧凑 字段名、延迟暴露工具、批量操作,以及可减少约 30% 大模型 文本输出的简洁输出指令。 -
托管子进程执行 — 命令输出在读取期间即受到限制,而非在完整缓冲后再处理。Daimonos 管理 Unix 进程组,在取消任务或会话关闭时终止后代进程,通过明确的允许列表隔离子进程环境,并将后台输出存储在私有的有界文件中。
基准测试结果
使用 Claude Opus 4.6 在相同的编码任务上进行测试(读取文件、搜索代码、编辑、运行测试、执行 git 操作):
| 指标 | 基线 | Daimonos | 节省 |
|---|---|---|---|
| 输出 token 数 | 5,842 | 3,198 | -45.3% |
| 总 token 数 | 41,239 | 33,847 | -17.9% |
| 工具调用次数 | 平均 17 次 | 平均 14 次 | -17.6% |
| 耗时 | 平均 42.1 秒 | 平均 35.2 秒 | -16.4% |
在 AWS 上进行的远程基准测试(相同硬件、相同模型、相同任务)显示,成本降低了 20.3%,任务完成速度提升了 14.0%。
SWE-bench Verified(mini)——三方执行框架对比
从 swe-bench-verified-mini 中选取 5 个实例,三个执行框架均使用相同模型(Claude Opus 4.8);每个 Agent 都在对应实例的官方 SWE-bench Docker 镜像(真实测试环境)中运行,并使用官方 swebench 评估执行框架评分:
| 实例 | daimonos token 数(LLM 调用次数) | mini-swe-agent token 数(LLM 调用次数) | cursor-agent token 数 |
|---|---|---|---|
| django__django-11815 | 54,755 (4) | 38,305 (9) | 113,242 |
| django__django-12155 | 53,773 (4) | 33,095 (9) | 348,425 |
| django__django-12708 | 88,765 (6) | 196,492 (22) | 451,349 |
| sphinx-doc__sphinx-8035 | 172,729 (10) | 342,108 (30) | 930,495 |
| sphinx-doc__sphinx-9367 | 66,812 (5) | 18,611 (6) | 230,223 |
| token 总数 | 436,834 | 628,611 | 2,073,734 |
| 总耗时 | 84 秒 | 247 秒 | 279 秒 |
| 已解决 | 5/5 | 5/5 | 5/5 |
结论:
- 正确性持平:在当前样本规模下,三个执行框架都解决了 5/5 个问题,因此 daimonos 节省 token 的同时,没有牺牲问题解决数量。
- daimonos 成本最低、速度最快:与 mini-swe-agent(最精简的开源基线)相比,token 数减少约 30%;与 cursor-agent 相比,减少约 4.8 倍;耗时约为两者的三分之一。
- 注意事项:样本数 n=5,且不同运行之间确实存在波动(在配置完全相同的早期运行中,daimonos 在 sphinx-8035 上用了 503k token,而本次为 173k)。cursor-agent 的总量大多是按输入价格的一小部分计费的缓存读取 token,因此其原始 token 数会高估相对成本。本批次实测 API 支出(OpenRouter):daimonos $1.53,mini-swe-agent $1.66;cursor-agent 通过 Cursor 的后端计费。
运行脚本和方法说明请参阅 benchmarks/swebench/。
60 秒演示
面向 README 读者、发行说明和社交媒体帖子时,可使用此脚本:
# 1) Install daimonos
cargo build --release
sudo cp target/release/daimonos /usr/local/bin/
# 2) Configure your MCP client (example: Cursor)
# .cursor/mcp.json -> command: daimonos, args: ["--mcp", "-w", "/path/to/project"]
# 3) Ask your agent to run:
# "Run cargo test and summarize failures only."
# "Show git status as structured output."
演示中要突出以下内容:
- 工作流相同,工具输出噪声更少
- 使用结构化响应,而不是原始终端输出刷屏
- 执行常见编码任务时,token 更少、往返次数更少
快速开始
安装
预构建二进制文件(Linux 和 macOS):
# Linux x86_64
curl -L https://github.com/beardfaceguy/daimonos/releases/latest/download/daimonos-x86_64-linux.tar.gz | tar xz
sudo mv daimonos /usr/local/bin/
# macOS Apple Silicon
curl -L https://github.com/beardfaceguy/daimonos/releases/latest/download/daimonos-aarch64-macos.tar.gz | tar xz
sudo mv daimonos /usr/local/bin/
从源代码构建:
git clone https://github.com/beardfaceguy/daimonos.git
cd daimonos
cargo build --release
sudo cp target/release/daimonos /usr/local/bin/
所有平台的说明请参阅 docs/install.md(ARM Linux、Intel Mac、musl 静态构建)。
配置 IDE
大多数用户可以从以下任一选项开始:
- Cursor:Cursor IDE 配置
- Zed:Zed 配置
- Claude Code:Claude Code 配置
将 Daimonos 添加为 MCP 服务。对于 Cursor,请将其添加到项目的
.cursor/mcp.json:
{
"mcpServers": {
"daimonos": {
"command": "daimonos",
"args": ["--mcp", "-w", "/path/to/your/project"]
}
}
}
完成。Daimonos 会在 IDE 打开项目时启动,并在关闭项目时退出。无需管理守护进程,也没有后台服务。
其他工具的配置指南
- Cursor IDE
- GitHub Copilot(VS Code、Visual Studio、JetBrains、Xcode、Eclipse)
- Claude Code(命令行 + macOS 桌面应用)
- Windsurf
- Cline(VS Code 扩展)
- Gemini CLI
- Zed Editor
- Discord 集成(机器人 token、允许列表、只读工具)
- 其他工具(Claude Desktop、ChatGPT、Continue.dev、BoltAI 等)
包含内容
核心工具(始终可用)
| 工具 | 功能 |
|---|---|
read_file | 读取文件,支持可选的偏移量/限制,以及内容哈希去重 |
write_file | 写入文件,并自动创建目录 |
edit_file | 替换字符串,并确认差异 |
search | 正则搜索(内容模式)或文件发现(文件模式) |
exec | 运行命令,支持语义筛选、有界捕获和受控清理 |
batch | 在单次往返中执行多个操作 |
workspace_info | 项目类型、git 状态、目录列表、分析数据 |
原生工具插件(自动检测)
当在 PATH 中找到对应的 CLI 工具时,这些插件会自动出现:
| 插件 | 命令 | 检测方式 |
|---|---|---|
git | status、log、diff、branch、add、commit、push、pull、checkout | .git 目录 |
git_read | resolve、show_file、list_tree、grep、log、show_commit、diff、blame、refs、ancestry、worktree_status | 支持 --no-lazy-fetch 的 git |
cargo | test、build、check、clippy、fmt、add | Cargo.toml |
gh | pr_view、pr_list、pr_create、pr_diff、pr_checks、api | PATH 中的 gh |
docker | ps、logs、exec、images、inspect、stop、compose_up/down/ps | PATH 中的 docker |
其他能力
- 工作区快照 — 在高风险编辑前创建检查点,失败时回滚
- Starlark 脚本 — 将多个工具调用组合到单个脚本中
- 令牌分析 — 按工具调用跟踪,并保留跨会话历史记录(
daimonos --stats) - 后台进程 — 启动、轮询并停止长时间运行的命令,提供准入限制、私有有界日志和后代进程清理
- 可配置 — 所有可调参数都集中在一个 TOML 配置文件 中
托管进程生命周期
原始 exec、后台作业和 CLI 插件(cargo、git、gh、docker、
npm、pytest、curl 和 shellcheck)共用一个托管执行层:
- 流式处理期间限界 — stdout 和 stderr 保留 UTF-8 安全的首尾预览,无需先分配完整输出
- Unix 上的进程组所有权 — 取消和关闭时发送 TERM,等待可配置的宽限期,然后升级为 KILL 并回收后代进程
- 安全的后台产物 — 在私有的
0700目录下创建随机且独占的0600文件,并可配置字节数和作业数量上限 - 环境隔离 — 子进程仅继承已配置的父进程变量,以及显式指定的会话、工具和单次调用覆盖项;不会在环境中泄露服务商和 MCP 凭据
- 结构化输出完整性 — 插件会拒绝被截断的 JSON,而不会将不完整结果报告为有效结果
Agent 框架功能
除了 MCP 服务,同一个二进制文件还是一套完整的编码 Agent 框架:
交互式终端 UI(daimonos agent)、Zed 的 ACP 后端、
一次性 CLI,以及支持附加/分离和远程控制的会话守护进程。
它的许多近期功能都源自对 60 多个开源 Agent 框架的系统研究 (Aider、OpenHands、SWE-agent、Goose、OpenCode、Forge、Pi、 Cline 系列等)——从生态系统中挖掘成熟技术,并加以改进和适配。
提供方弹性——短暂故障不会中断本轮对话
- 有限次数的提供方重试:针对瞬时故障(429/5xx/网络问题)采用退避策略,并在提供方边界进行分类——身份验证或验证等致命错误会立即显示
- 自动模型故障转移:持续过载时,本轮对话会继续使用链中的下一个模型,并在下一轮对话恢复使用首选模型
- 轮次级错误恢复:重试和故障转移耗尽后,Agent 会暂停并修复对话(保留部分流式输出),然后从中断处继续;恢复操作会显示在 UI 中
- 重试风暴检测:对重复的相同工具调用进行指纹识别,并引导模型跳出循环
- 孤立工具调用修复:在工具调用过程中因达到最大令牌数而被截断时,会进行修复,而不是导致会话失效
多提供方会话
- 一个会话使用多个提供方:并列配置 Anthropic、OpenAI 和 OpenRouter(
DAIMONOS_AGENT_<NAME>_API_KEY);每次调用都会根据模型路由到正确的提供方,并支持显式指定provider:slug覆盖 - 实时发现模型:启动时会查询已配置提供方的完整模型目录;模型选择器和故障转移链始终反映实际提供的模型,并按最新优先排序
- 跨提供方故障转移:配置多个提供方时,其中一个发生故障,本轮对话期间可转而使用另一个提供方的模型
- 提供方报告的上下文窗口:压缩阈值根据实时模型元数据计算,而非使用硬编码数值
Harness 层面的上下文节约
- 对话压缩:通过高水位和低水位阈值进行总结并继续,并采用符合提供方实际情况的令牌计量
- 有限大小的工具结果:在分发边界截断超大工具输出,并将其转存到文件,供 Agent 按需重新读取
- 反向预算裁剪:新工具结果生成前,先缩减较早的工具结果,让长轮次对话保留清晰的近期工作集
- 提炼后的工作记忆:持久保存可跨越压缩的事实、片段和备注,并与对话记录分开
- 弹性编辑匹配(借鉴自 Aider):支持忽略空白差异的搜索替换,减少编辑失败后的重试成本
- 批量脚本执行:引导 Agent 将多步骤工具操作打包到单个 Starlark 脚本中(经基准测试,约可节省 2.2 倍成本)
会话持久性与控制
- 每轮工作区检查点:自动创建快照,支持差异比较和仅恢复代码
- 由守护进程管理的会话:可从运行中的 Agent 分离,之后(或从另一个终端)重新连接,并通过重连事件环和规范快照恢复会话
- 持久终端 UI:包含流式输出、工具生命周期卡片、审批模态框、模型/用量状态栏,以及 Vim 风格的滚动回看
- 远程控制:通过经过身份验证的 WSS 网关配对 Android 控制器
- 子 Agent 委派:将外部 ACP Agent(cursor-agent、codex-acp、…)用作受委派的工作者
- 思路捕获:可选择在本地持久保存流式传输的模型推理结果,以供日后检查
Agent 模式的配置位于 dotenv 风格的 agent.env(~/.config/daimonos/agent.env)中;请参阅运行时模式。
可移植的 Agent Skills 会从 ~/.agents/skills 和 <workspace>/.agents/skills 中发现;在 agent.env 中设置 DAIMONOS_SKILL_DIR 可覆盖全局目录。请参阅配置。
架构
Daimonos 是一个单一的 Rust 二进制程序,包含两个平面,它们共用同一套工具实现、同一种操作码协议、同一份配置和同一个分析数据存储:
- 工具服务 — 通过 stdio(或 Unix 套接字)使用 MCP 与外部 Agent 通信。你的 IDE 会将其作为子进程启动——无需网络、容器,除了 JSON 配置项外也无需其他设置。
- Agent 框架 — 自行运行 Agent 循环,在进程内调度相同的工具(无需经过 MCP),并直接与大模型提供商通信。
工具服务平面
┌──────────────┐ MCP (JSON-RPC over stdio) ┌─────────────────┐
│ AI Agent │ ◄──────────────────────────────► │ Daimonos │
│ (Cursor, │ │ │
│ Copilot, │ Structured JSON responses │ ┌───────────┐ │
│ Claude, │ ◄──────────────────────────────── │ │ File ops │ │
│ etc.) │ │ │ Search │ │
│ │ │ │ Exec │ │
│ │ │ │ Git │ │
│ │ │ │ Cargo │ │
│ │ │ │ Docker │ │
│ │ │ │ GitHub │ │
│ │ │ │ Snapshots │ │
│ │ │ │ Analytics │ │
└──────────────┘ │ └───────────┘ │
└─────────────────┘
在底层,Daimonos 使用基于操作码的协议,每项操作都有一个数字标识符和简短的字段名(c、p、s、n),以尽量减少令牌开销。MCP 层负责在标准 JSON-RPC 和内部操作码格式之间进行转换。
Agent 框架平面
┌────────────────────────────────────────────────────────┐
│ Frontends: TUI · ACP (Zed) · one-shot CLI · chat REPL │
│ session daemon (attach/detach, Android) │
├────────────────────────────────────────────────────────┤
│ Shared session core: agent loop · canonical events │
│ compaction · tool-result bounding · working memory │
│ checkpoints · approvals/safety policy │
├────────────────────────────────────────────────────────┤
│ Provider layer: retries · model failover · resume │
│ multi-provider router (routes each call by model) │
│ ├─ Anthropic adapter │
│ ├─ OpenAI adapter │
│ └─ OpenRouter adapter │
└────────────────────────────────────────────────────────┘
每个前端都驱动同一个与传输方式无关的会话核心,因此,在 TUI 中开始的对话可以从守护进程中分离,并从另一个终端或配对的手机重新接入。提供商适配器负责处理所有特定于提供商的线路格式和错误分类;其上层只需面对统一的 LlmProvider 接口和普通的模型字符串——这使故障转移、实时模型发现和多提供商路由能够组合使用,而无需针对特定情况编写特殊逻辑。
项目愿景
Daimonos 将分三个阶段构建:
阶段 1:用户空间 MCP 服务 + Agent 框架(当前阶段)
一个可在任何 Linux 或 macOS 机器上运行的 Rust 二进制程序,以两种角色验证相同的协议设计和结构化 I/O 模式:
- 工具服务,通过 MCP 为第三方 Agent(Cursor、Copilot、Claude Code、Zed、……)提供服务——这是第一阶段最初的交付目标。
- 独立的 Agent 框架:交互式 TUI、用于 Zed 的 ACP 后端、单次运行的 CLI,以及由守护进程管理并可远程接入的会话——内置多提供商路由、模型故障转移、上下文压缩和每轮检查点(参见 Agent 框架功能)。
状态:可用于生产环境。 这两种角色每天都用于实际开发工作——包括 Daimonos 自身的开发。提供适用于 Linux(x86_64、aarch64、musl)和 macOS(Apple Silicon、Intel)的预构建二进制文件。
阶段 2:极简 Linux 发行版
一个专门构建的 Buildroot Linux 镜像,以 Daimonos 作为主要用户空间应用程序。专为云部署设计,为 AI Agent 提供干净、精简的环境。该发行版可在数秒内启动,没有 shell 或面向用户的 UI,并将 Daimonos 守护进程作为 PID 1 的直接子进程运行。第一阶段的会话守护进程和远程控制网关是预定的运行服务:云端的无头 Agent 会话,可通过终端或手机接入。
状态:可运行的原型。 可在 QEMU 中启动,也可部署到 AWS EC2。用于远程基准测试。
阶段 3:自定义微内核
长期愿景:构建一种微内核,让 Daimonos 操作码成为原生系统调用。包含 StructFS(一种以原生方式存储并返回结构化数据的文件系统)、基于能力的安全机制,以及从零开始为 Agent 工作负载设计的进程模型。
状态:设计阶段。
开发
先决条件
| 依赖项 | 用途 | 安装 |
|---|---|---|
| Rust(stable 1.75+) | 构建 | rustup.rs |
| Python 3 + pytest | 测试 | pip install -r tests/requirements.txt |
运行测试
# Rust unit tests (350+ tests, parallel-safe)
cargo test
# End-to-end MCP protocol tests (150+ pytest cases)
python3 -m pytest tests/ -v
运行基准测试
cd benchmarks
./setup-mcp.sh
./run-benchmark.sh baseline # IDE built-in tools
./run-benchmark.sh daimonos # routed through daimonos MCP
python3 analyze-results.py results/
详情请参阅 benchmarks/README.md。
配置
所有行为均可通过 TOML 配置文件调整。完整参考请参阅 docs/configuration.md,带注释的默认配置请参阅 daimonos.default.toml。
主要章节:
[index]— 三元组索引器设置(最大深度、文件大小限制)[search]— 搜索结果限制[process]— 进程超时、内存中数据/制品限制、后台任务准入、终止宽限期、继承的环境、语义筛选器,以及最大并发 Starlark 脚本线程数[pipeline_cache]— 子进程结果缓存大小、inotify 监视上限、额外忽略的目录[analytics]— 令牌跟踪(SQLite 存储、保留期限)[tools.*]— 按工具配置插件
参与贡献
Daimonos 正在积极开发中。如果你有兴趣参与贡献,请先阅读 AGENTS.md,了解代码规范、架构决策和代码审查清单。
另请参阅:
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。