【aden-hive】10k Star 标杆 Harness:6 件套齐全的生产级多 Agent 运行时
上个月连续拆了 OpenHarness、Strands SDK、block-goose、Karpathy autoresearch 5 个 Harness 项目,但没有一个把 Harness 6 件套(Rule / Skill / Sub-Agent / Workflow / Script / MCP)在一个仓库里全部实现。今天这篇的主角
aden-hive/hive(Y Combinator 投资、10,674⭐、Apache 2.0)不一样——它把 6 件套都做成了生产级实现,并且每个组件的代码量都不夸张(平均 2-3k 字符就能讲清楚一个原语)。它代表了”Harness 6 件套全景” 的范本。
一、为什么挑 aden-hive?
把”Harness 6 件套齐全”这件事讲清楚的项目有 4 个梯队:
| 梯队 | 代表项目 | 6 件套覆盖度 | 形态 |
|---|---|---|---|
| 全景标杆 | aden-hive | ✅ Rule ✅ Skill ✅ Sub-Agent ✅ Workflow ✅ Script ✅ MCP | 6/6 件套齐全的开源生产级 Harness |
| 6 件套组件专家 | Hooks(disler/claude-code-hooks)、Pipeline(block-goose)、MCP(mcp-gateway) | 仅 1-2 件 | 单一组件深耕 |
| 框架型 Harness | OpenHarness、Strands SDK、Langroid | 部分覆盖 | 框架抽象 |
| 评测/教程 | harness-books、wquguru | 概念层 | 文档 |
aden-hive 的独特价值:10k⭐ 但总代码量只 13,000 行 Python(核心框架 244 个文件,剔除 tests/examples 后核心 ~30k 行)。它用「极少的代码」覆盖了「最多的 Harness 概念」——这正是「Less is More」哲学的体现:Harness 6 件套不是 6 个大框架,而是 6 个轻量原语用装饰器/注册中心串起来。
读完这篇你能拿到:
- aden-hive 的 244 个文件如何映射到 Harness 6 件套
- 4 段可运行代码:Pipeline Stage 装饰器注册、Stall/Doom Loop 双重熔断器、EventBus 30+ 事件类型、Worker Sub-Agent 生命周期
CLAUDE.md == AGENTS.md这件事为什么值得深思- 与 OpenHarness、Strands SDK、Karpathy autoresearch 在抽象层的差异
- aden-hive 给中文 Harness 项目的 5 条工程教训
二、项目全景:6 件套在 aden-hive 里的 244 文件映射
aden-hive 仓库 1,323 个文件,剔除 tests/ examples/ static/ bin/ 后,核心 244 个 Python 文件按职责切成 9 大块(按 6 件套重新归类):
| Harness 6 件套 | aden-hive 模块 | 核心文件 | 文件数 |
|---|---|---|---|
| 🪝 Rule | .claude/ + 根目录 | CLAUDE.md、AGENTS.md、.claude/skills/*/SKILL.md | 11 |
| 📋 Skill | core/framework/skills/ | manager.py(19k) + registry.py(8k) + discovery.py + trust.py | 14 |
| 🤖 Sub-Agent | core/framework/host/worker.py(19k) + agents/queen/ | worker.py + queen/agent.py + queen_memory_v2.py | 18 |
| 🔄 Workflow | core/framework/orchestrator/ | orchestrator.py(78k) + node.py + edge.py + goal.py | 17 |
| 🚪 Script | core/framework/pipeline/ | runner.py(4k) + stage.py(3k) + stages/{cost_guard,input_validation,rate_limit,...}.py | 12 |
| 🔌 MCP | core/framework/loader/mcp_*.py | mcp_client.py + mcp_registry.py + mcp_connection_manager.py | 6 |
| ⚙️ 核心 Agent Loop | core/framework/agent_loop/ | agent_loop.py(209k) + internals/{stall_detector,event_publishing,judge_pipeline,...}.py | 13 |
| 🧠 LLM 抽象 | core/framework/llm/ | anthropic.py + openai.py + key_pool.py + model_catalog.py | 10 |
| 🛡️ 可观测性 | core/framework/observability/ + tracker/ | runtime_logger.py + decision_tracker.py + llm_debug_logger.py | 8 |
关键观察:aden-hive 把 6 件套的”实现层” 拆得很细,但没有任何一个组件超过 80k 字符。最大的
agent_loop.py(209k)实际是 90% 的注释和空行,核心step()函数只有 400 行。
三、6 件套代码精读(4 段可运行代码)
3.1 🚪 Script 组件:Pipeline Stage 装饰器注册
core/framework/pipeline/registry.py 用一个纯 dict + 装饰器实现”配置驱动的中间件链”。这种”Stage 自注册”模式比 LangChain 的 BaseChain 抽象简单 10 倍。
1 | # 来自 aden-hive/core/framework/pipeline/registry.py |
配套 Stage 定义(cost_guard.py,仅 33 行):
1 | # 来自 aden-hive/core/framework/pipeline/stages/cost_guard.py |
配置驱动声明(来自 ~/.hive/configuration.json):
1 | { |
这套设计为什么是「教科书级」:
- 零继承注册:用
@register("name")装饰器代替if-elif链,新增 Stage 不需要改 Runner - order 字段控制顺序:数值小的先跑(input_validation=100 → rate_limit=200 → cost_guard=300)
- 三态返回值:
continue/reject/transform——reject立即短路,transform改写 ctx 传给下一 stage - 配置可声明:在
agent.json写 JSON 就能启用/禁用某个 stage,不需要重新部署代码
横向对比:LangChain 的
BaseChain要求继承 + 重写_call+ 在ChainType注册中心注册,4 个文件才能跑通一个最简单的 chain。aden-hive 33 行 + 3 行装饰器就够了。
3.2 ⚙️ Agent Loop 组件:Stall / Doom Loop 双重熔断器
internals/stall_detector.py 是 aden-hive 最有”教科书价值”的文件——107 行实现 2 个完全不同维度的循环检测,而且都是纯函数(无副作用,可独立测试):
1 | # 来自 aden-hive/core/framework/agent_loop/internals/stall_detector.py |
两种循环的本质区别:
| 维度 | Stall(语义层) | Doom Loop(结构层) |
|---|---|---|
| 检测对象 | LLM 自然语言输出 | tool_call 参数 |
| 算法 | N-gram Jaccard 相似度 | 字符串指纹精确匹配 |
| 触发场景 | “I’m still stuck” / “Let me try again” | 同一个 search("a") 调 5 遍 |
| 误伤风险 | 低(句式相似 ≠ 重复工作) | 极低(参数完全相同就是死循环) |
| 实现复杂度 | 32 行(含 n-gram 工具函数) | 21 行 |
为什么必须双熔断:
- 只检测 Doom Loop 不够:LLM 可能每次编新词但还是解决不了问题(”I need to verify this again”),结构层匹配 0 个但语义层已经卡死
- 只检测 Stall 不够:两个看似不同的句式可能触发同一个 tool call 5 次,语义层判定不相似但结构层判定死循环
- aden-hive 的做法:两个熔断器独立跑,任一触发就降级到”用户接管”模式(让用户决定继续还是中止)
横向对比:AutoGen 的
ConversableAgent用”max_consecutive_auto_reply” 这种硬阈值,5 次不管内容就终止;LangChain 的AgentExecutor用early_stopping_method字符串匹配。aden-hive 的双层相似度明显更精细——这是它 10k Star 但代码量只有 13k 行的关键证据:更聪明的算法 + 更少的代码。
3.3 ⚡ Event Bus 组件:30+ 事件类型 + JSONL Debug 旁路
core/framework/host/event_bus.py(47k 字符)实现了一个进程内 async pub/sub 事件总线,但最有意思的设计是HIVE_DEBUG_EVENTS 环境变量——一行配置就能让所有事件旁路到 JSONL 文件:
1 | # 来自 aden-hive/core/framework/host/event_bus.py |
EventType 枚举(30+ 事件分 7 大类):
1 | class EventType(StrEnum): |
整套架构图(aden-hive 实际是 30+ 事件类型,这里展示核心 12 个):
graph TB
subgraph "🧠 Agent Loop"
AL["AgentLoop.step()"]
end
subgraph "⚡ EventBus 进程内 Pub/Sub"
EB["EventBus.emit_*()"]
JL["JSONL Debug<br/>HIVE_DEBUG_EVENTS=1"]
end
subgraph "📡 订阅者"
SSE["SSE Stream<br/>前端实时"]
TRK["DecisionTracker<br/>事后分析"]
DB["ConversationStore<br/>持久化"]
UI["Worker Escalation<br/>queen ↔ worker"]
end
subgraph "🎯 7 大类事件"
E1["⚙️ EXECUTION_*"]
E2["📊 STATE_* / GOAL_*"]
E3["🔁 STREAM_* / NODE_LOOP_*"]
E4["📝 LLM_TEXT_DELTA / TURN_COMPLETE"]
E5["🛠️ TOOL_CALL_*"]
E6["📤 CLIENT_OUTPUT_DELTA"]
E7["🚨 ESCALATION_REQUESTED"]
end
AL --> EB
EB --> SSE
EB --> TRK
EB --> DB
EB --> UI
EB -.->|"HIVE_DEBUG_EVENTS"| JL
EB --- E1 & E2 & E3 & E4 & E5 & E6 & E7
style AL fill:#E8D5F5,stroke:#CE93D8,stroke-width:2px,color:#333
style EB fill:#C7CEEA,stroke:#9FA8DA,stroke-width:2px,color:#333
style JL fill:#FFF9C4,stroke:#F9A825,stroke-width:2px,color:#333
style SSE fill:#B5EAD7,stroke:#80CBC4,stroke-width:2px,color:#333
style TRK fill:#FFDAB9,stroke:#FFAB76,stroke-width:2px,color:#333
style DB fill:#FFDAB9,stroke:#FFAB76,stroke-width:2px,color:#333
style UI fill:#FFB3C6,stroke:#F48FB1,stroke-width:2px,color:#333
style E1 fill:#F5F5F5,stroke:#9E9E9E,color:#333
style E2 fill:#F5F5F5,stroke:#9E9E9E,color:#333
style E3 fill:#F5F5F5,stroke:#9E9E9E,color:#333
style E4 fill:#F5F5F5,stroke:#9E9E9E,color:#333
style E5 fill:#F5F5F5,stroke:#9E9E9E,color:#333
style E6 fill:#F5F5F5,stroke:#9E9E9E,color:#333
style E7 fill:#F5F5F5,stroke:#9E9E9E,color:#333这套 EventBus 的精妙之处:
- StrEnum 而非 String:
EventType.EXECUTION_FAILED而不是"execution_failed",IDE 自动补全 + 编译期拼写检查 - JSONL 旁路:
HIVE_DEBUG_EVENTS=1一行 env var 就能把所有事件 dump 到文件,不需要改代码、不需要重启服务。debug 后 unset 即可关闭 - flush after every write:JSONL 文件
open(path, "a")后每次write()立即 flush,进程被 kill 也不会丢事件 - 30+ 事件 7 大类:把”execution / state / goal / stream / node / llm / tool / escalation” 切干净,新加事件只需要加枚举值
横向对比:LangGraph 用 checkpointed state 替代 event bus(适合长事务但不适合实时调试);AutoGen 的
GroupChatManager用 pub/sub 但事件类型 < 10 个;aden-hive 的 30+ 事件 + JSONL 旁路 是 production-grade 可观测性的最佳实践。
3.4 🤖 Sub-Agent 组件:Queen ↔ Worker 隔离架构
core/framework/host/worker.py(19k 字符)实现了一个 Colony Runtime——1 个 Queen(持久)+ N 个 Worker(临时) 的多 Agent 模式:
1 | # 来自 aden-hive/core/framework/host/worker.py |
queen 端配置(agents/queen/agent.py,仅 27 行):
1 | """Queen agent definition. The queen is a single AgentLoop — no orchestrator dependency.""" |
Queen ↔ Worker 隔离架构图:
graph TB
subgraph "👤 用户"
U["Slack/Discord/Web Client"]
end
subgraph "👑 Queen Colony(1 个持久 Agent)"
Q["queen Goal<br/>max_iterations=999,999"]
QB["queen EventBus<br/>session-wide"]
QE["Queen Escalation Handler<br/>filter_colony"]
end
subgraph "🛠️ Worker 池(N 个临时 Agent)"
W1["worker:42<br/>Ephemeral Mode"]
W2["worker:43<br/>Ephemeral Mode"]
W3["worker:44<br/>Persistent Mode<br/>长期任务"]
end
subgraph "📡 通信桥"
ES["ESCALATION_REQUESTED<br/>event.request_id"]
SR["SUBAGENT_REPORT<br/>WorkerResult.status"]
end
subgraph "🧠 共享资源"
LLM["LLMProvider<br/>key_pool 多账号"]
TOOL["ToolRegistry<br/>MCP Client + Skills"]
end
U <-->|"inject(message)"| Q
Q -->|"spawn(task)"| W1
Q -->|"spawn(task)"| W2
Q -->|"spawn(task)"| W3
W1 -->|"escalate()"| ES --> QE
W2 -->|"escalate()"| ES --> QE
W3 -.->|"持久 inject"| Q
W1 -->|"完成"| SR --> Q
W2 -->|"完成"| SR --> Q
Q --> LLM
Q --> TOOL
W1 --> LLM
W2 --> LLM
style U fill:#C7CEEA,stroke:#9FA8DA,color:#333
style Q fill:#E8D5F5,stroke:#CE93D8,color:#333
style QB fill:#E8D5F5,stroke:#CE93D8,color:#333
style QE fill:#FFB3C6,stroke:#F48FB1,color:#333
style W1 fill:#FFDAB9,stroke:#FFAB76,color:#333
style W2 fill:#FFDAB9,stroke:#FFAB76,color:#333
style W3 fill:#FFDAB9,stroke:#FFAB76,color:#333
style ES fill:#FFF9C4,stroke:#F9A825,color:#333
style SR fill:#FFF9C4,stroke:#F9A825,color:#333
style LLM fill:#B5EAD7,stroke:#80CBC4,color:#333
style TOOL fill:#B5EAD7,stroke:#80CBC4,color:#333Queen ↔ Worker 设计的 3 个亮点:
- filter_colony 防串扰:
install_worker_escalation_routing()用filter_colony让 queen 只接收本 colony 的 escalation —— 跨 colony 泄漏结构性不可能(不是”应该不会”,是”代码上不可能”) - 两种 Worker 模式:
- Ephemeral(默认):跑完一个任务发
SUBAGENT_REPORT就退出(适合 fan-out 并行任务) - Persistent:
inject_event把消息泵到已经在跑的 loop(适合长任务)
- Ephemeral(默认):跑完一个任务发
- status 枚举 5 类:
success / partial / failed / timeout / stopped—— 父 agent 能精确判断子任务的健康度
横向对比:AutoGen 的
GroupChat是”all-to-all”广播,n 个 agent 全连,O(n²) 通信;CrewAI 的Process.hierarchical是 manager + worker 但 manager 不持有 EventBus;aden-hive 的 Colony + filter_colony 是 O(n) + 强隔离的工程级实现。
四、为什么 CLAUDE.md == AGENTS.md 是个深思的信号
打开 aden-hive 仓库的 CLAUDE.md 和 AGENTS.md,你会发现两个文件 100% 相同(连 # Repository Guidelines 标题都没改)。这是故意的设计选择:
1 | # 两个文件内容完全一致 |
为什么这么做:
- CLAUDE.md 是 Anthropic 的 Claude Code 专有约定(”Coding Agent Notes”)
- AGENTS.md 是 GitHub 2026 年推出的开放标准(”Repository Guidelines”)
- aden-hive 的策略:写一份内容、双处部署——
cp CLAUDE.md AGENTS.md在 CI 里自动跑
这个细节折射出的设计哲学:
- 不押宝单一 Coding Agent:既不假设用户用 Claude Code,也不假设用 Cursor——文件位置中立
- 避免生态分裂:如果 Claude Code 改
CLAUDE.md规范 vs GitHub 改AGENTS.md规范,仓库不会卡死 - 运维成本归零:只维护一份内容,CP 命令永远不会失败
反例:很多 Harness 仓库(Strands、OpenHarness)只放
CLAUDE.md,结果用 Cursor/Windsurf 的用户必须自己建AGENTS.md软链。aden-hive 的双份同步策略是「机制 vs 策略分离」原则的最小实现。
五、横向对比:aden-hive vs OpenHarness vs Strands SDK
为了讲清楚 aden-hive 的设计差异,列 3 个有代表性的对比项目(按代码量从大到小):
| 维度 | aden-hive | OpenHarness | Strands SDK | Karpathy autoresearch |
|---|---|---|---|---|
| GitHub Stars | 10,674⭐ | 14,719⭐ | 6,525⭐ | N/A(教程) |
| 总代码量 | ~30k Python | ~25k Python | ~10k Python | 4 文件 |
| Rule 组件 | CLAUDE.md=AGENTS.md | CLAUDE.md | CLAUDE.md | README 注释 |
| Skill 组件 | 14 文件 + Registry | 10 子系统 | OpenAI Plugins | 无 |
| Sub-Agent 组件 | Colony + Worker | 10 子系统 | Strands Agents | 无 |
| Workflow 组件 | Orchestrator + DAG | Workflow 子系统 | Graph | 4 文件循环 |
| Script 组件 | Pipeline Stage 装饰器 | Pre-conditions 子系统 | Hooks | none |
| MCP 组件 | mcp_client + registry | MCP 子系统 | Strands MCP | 无 |
| 抽象层数 | 9 层 | 10 层 | 6 层 | 1 层 |
| 配置驱动 | ✅ ~/.hive/configuration.json | ✅ YAML | ✅ JSON Schema | ❌ 写死 |
| 失败恢复 | Stall/Doom Loop 双熔断 | Long-running 持久化 | SDK exception | 简单 sleep |
| 目标用户 | 业务团队(非工程师) | 工程师 | 工程师 | 教学 |
| 模型无关性 | ✅ Anthropic+OpenAI+Gemini+本地 | ✅ 多 provider | ✅ 多 provider | ❌ 写死 |
| 生产可用性 | ✅ YC 投资 + Apache 2.0 | ✅ 港大 | ✅ AWS | ❌ 教学用 |
3 个核心设计差异:
5.1 抽象粒度:aden-hive 9 层 vs OpenHarness 10 层 vs Strands 6 层
graph LR
subgraph "aden-hive(9 层)"
A1["用户"] --> A2["Queen Colony"]
A2 --> A3["Worker"]
A3 --> A4["AgentLoop"]
A4 --> A5["Pipeline"]
A5 --> A6["LLM Provider"]
A4 --> A7["MCP Client"]
A4 --> A8["Skills Manager"]
A3 --> A9["EventBus"]
end
subgraph "Strands(6 层)"
S1["用户"] --> S2["Agent"]
S2 --> S3["Tool Registry"]
S3 --> S4["MCP Client"]
S2 --> S5["LLM Provider"]
S2 --> S6["Memory"]
end
style A1 fill:#C7CEEA,stroke:#9FA8DA,color:#333
style A2 fill:#E8D5F5,stroke:#CE93D8,color:#333
style A3 fill:#E8D5F5,stroke:#CE93D8,color:#333
style A4 fill:#E8D5F5,stroke:#CE93D8,color:#333
style A5 fill:#FFDAB9,stroke:#FFAB76,color:#333
style A6 fill:#FFDAB9,stroke:#FFAB76,color:#333
style A7 fill:#B5EAD7,stroke:#80CBC4,color:#333
style A8 fill:#B5EAD7,stroke:#80CBC4,color:#333
style A9 fill:#FFB3C6,stroke:#F48FB1,color:#333
style S1 fill:#C7CEEA,stroke:#9FA8DA,color:#333
style S2 fill:#E8D5F5,stroke:#CE93D8,color:#333
style S3 fill:#FFDAB9,stroke:#FFAB76,color:#333
style S4 fill:#B5EAD7,stroke:#80CBC4,color:#333
style S5 fill:#B5EAD7,stroke:#80CBC4,color:#333
style S6 fill:#FFB3C6,stroke:#F48FB1,color:#333aden-hive 多出来的 3 层:
- EventBus 层:Strands 没有——所有内部状态用 Python 对象直传,难调试
- Pipeline 层:Strands 用函数装饰器代替,但丢失了”配置可声明”能力
- Colony 层:Strands 是”单 agent 多 tool”,aden-hive 是”1 queen + N worker”——后者天然支持并行 fan-out
现实意义:Strands 适合做 PoC(6 层 1 小时能跑通),aden-hive 适合做生产(9 层 + EventBus 可观测 + Pipeline 可配置),OpenHarness 适合做研究(10 层最全但学习曲线陡)。
5.2 配置驱动 vs 代码驱动
aden-hive 的 ~/.hive/configuration.json:
1 | { |
对比 Strands 的配置(Python 代码):
1 | # Strands: 配置 = Python 代码 |
aden-hive 的优势:Ops 团队可以改 JSON 而不动 Python 代码——业务方不用 PR review 就能上线新 Pipeline Stage。
5.3 失败恢复:双熔断 vs 单一阈值 vs sleep
| 项目 | 失败检测机制 | 复杂度 | 误伤风险 |
|---|---|---|---|
| aden-hive | Stall(语义层 ngram)+ Doom Loop(结构层指纹) | 107 行纯函数 | 低(双层互补) |
| AutoGen | max_consecutive_auto_reply=10 硬阈值 | 5 行配置 | 中(句式变了但还是失败) |
| Karpathy autoresearch | time.sleep(N) 后无脑重试 | 1 行 | 高(不分析失败原因) |
六、优缺点:架构简洁性 vs 性能复杂度
6.1 左侧:架构简洁性 / 扩展性 / 易用性
| 维度 | 评分 | 关键证据 |
|---|---|---|
| 架构简洁性 | ⭐⭐⭐⭐⭐ | 9 层抽象但每层 < 80k 字符,最大文件 80% 注释 |
| 扩展性 | ⭐⭐⭐⭐⭐ | Pipeline Stage 装饰器 + Skill Registry 装饰器 + MCP 自动发现 |
| 易用性 | ⭐⭐⭐⭐ | YC 投资 + Discord 12k+ 成员 + 1 命令启动,但文档集中在 adenhq.com 不是仓库 |
6.2 右侧:性能 / 复杂度 / 维护性
| 维度 | 评分 | 关键证据 |
|---|---|---|
| 性能 | ⭐⭐⭐⭐ | EventBus 进程内 pub/sub(无跨进程开销),LLM key_pool 多账号轮询 |
| 复杂度 | ⚠️ 中 | 244 文件 + 30+ 事件类型 + 5 个 Pipeline Stage,新人 onboarding 至少 2 周 |
| 维护性 | ⭐⭐⭐⭐ | Apache 2.0 + 活跃 commits(最近 24h 有 push),但核心开发者 < 5 人 |
七、从零搭建:MVP 复刻路径
如果想自己复刻 aden-hive 的核心架构,最小可行实现是什么?
7.1 必须有的 4 个组件
| 优先级 | 组件 | 最小代码量 | 关键文件 |
|---|---|---|---|
| 🥇 P0 | AgentLoop + EventBus | 150 行 | event_bus.py + agent_loop.py 的 step() |
| 🥇 P0 | Pipeline Stage 装饰器 | 50 行 | registry.py + stage.py + 1 个示例 stage |
| 🥈 P1 | Stall/Doom Loop 检测 | 107 行 | 直接 copy stall_detector.py |
| 🥈 P1 | LLM Provider 抽象 | 80 行 | provider.py + 1 个 OpenAI 实现 |
| 🥉 P2 | MCP Client | 200 行 | 用 mcp PyPI 包,30 行 wrapper |
| 🥉 P2 | Skills Registry | 100 行 | discovery.py + manager.py 简化版 |
7.2 可以暂时省略的 5 个组件
| 可省 | 组件 | 原因 |
|---|---|---|
| ✅ | Colony Runtime | 单 agent 也能跑,Queen ↔ Worker 是 fan-out 阶段才需要 |
| ✅ | Graph Orchestrator | 简单任务用 linear chain 就够,DAG 是优化项 |
| ✅ | JSONL Debug 旁路 | 开发阶段用 print() 足够 |
| ✅ | Skill Trust Gating | 单用户场景不需要 trust level |
| ✅ | Decision Tracker | 简单日志 + grep 就够,DecisionTracker 是事后分析用 |
7.3 踩坑预警:实际集成会遇到的 4 个问题
- EventBus 不能跨进程:aden-hive 的 EventBus 是进程内 async pub/sub。如果用 Gunicorn 跑多个 worker,事件会丢失。解决:要么改 Redis pub/sub,要么用 multiprocessing.Queue。
- Pipeline Stage 的
transform行为容易写错:PipelineResult(action="transform")会覆盖ctx.input_data,但不会通知后续 stage。如果不读源码会以为是”叠加”行为。 - Stall detector 必须配
threshold > 1:默认recent_responses长度 <threshold直接返回False,意味着第 1 次循环不会被检测。这是 by design(避免冷启动误报),但写测试时容易踩。 - CLAUDE.md vs AGENTS.md 同步是手动责任:aden-hive 用 CI 跑
cp,但很多项目忘了这一步,结果 Cursor 用户看不到 rules。建议直接ln -s软链而不是cp。
八、总结:aden-hive 给中文 Harness 项目的 5 条工程教训
- Pipeline Stage 装饰器 > 继承链:33 行 + 3 行装饰器 = 完整中间件。LangChain 的
BaseChain是反面教材。 - Stall/Doom Loop 必须双层:单层检测会误伤。语义层(ngram)+ 结构层(指纹)缺一不可。
- EventBus 30+ 事件 + JSONL 旁路:HIVE_DEBUG_EVENTS=1 一行 env var 比 LangSmith/Langfuse 集成简单 10 倍。
- Colony > GroupChat:1 Queen + N Worker 的 O(n) 通信比 all-to-all 的 O(n²) 适合生产。
- CLAUDE.md = AGENTS.md:cp 命令 + CI 自动化,避免生态分裂。
aden-hive 不是最复杂的 Harness(OpenHarness 更全),不是最简单的(autoresearch 更小),不是最抽象的(Strands 更少层)。但它在「6 件套齐全 + 生产级 + 代码量适中」这个三角形的中心——这正是 10k Star 的真正原因。
行动建议:
- 业务团队:直接 fork aden-hive,改
~/.hive/configuration.json就能上线- Harness 工程师:读完本文后,重点看
pipeline/registry.py+agent_loop/internals/stall_detector.py两个文件(共 130 行),足够让你在自己的项目里加上”Stage 装饰器 + 双层循环检测”两个能力- 架构师:把
EventType30+ 枚举抄过去,这就是你项目该有的事件总线——不需要重新设计
项目地址:https://github.com/aden-hive/hive
License: Apache 2.0
最近更新: 2026-05-29(核心框架稳定 + 持续集成)
作者: Aden(Y Combinator W25)
相关阅读: