Observatory · 数据研究
2026 年,Effect-TS 正在成为 AI Agent 的下一种工程范式吗?
基于 GitHub 开源生态的第一次调查 · 数据快照 2026-09-14 · 数据集 v0.1
结论
- Scenario C:Effect 在 Agent Runtime 中有明显技术价值,但生态规模仍然有限。 在有界宇宙的 856 个 TypeScript Agent 里,真正把 Effect 用进业务(L2+)的只有 33 个(3.9%)—— 规模上远谈不上”下一种范式”;但这 33 个里 23 个是 L4(Effect 是 Runtime 的地基), 而不是浅尝辄止的 L2/L3,说明采用者的用法很重:他们不是在 Agent Loop 里顺手 import 一下, 而是把整个执行模型建在 Effect 上。
- H4 得到支持,H2 仍未验证。 数据支持”Effect 的价值在 Agent Loop 之下的 Runtime”: L2+ 项目最常用的能力是服务与依赖注入(Layer/Context)、类型化错误、Scope 资源管理、Stream 与 Fiber 并发—— 全是运行时能力,而不是”怎么调 LLM”。至于”H2 框架竞争力是否真的转向 Runtime”,需要框架对比矩阵, v0.1 没有取证,因此不下结论。
- 判不准的比例(44.8%)本身就是结论的一部分。 我们无法用规则+文件路径判定近一半候选是不是 Agent—— 这不是数据脏,而是”Agent”这个概念在开源世界里还没有稳定的边界(一个 MCP 工具服务器算不算? 一个把 Claude Code 包一层的 CLI 算不算?)。任何把这个比例当成精确数字引用的做法都比数字本身更危险。
- 对本站的含义:这个数字不足以支撑”Effect 是 Agent 的未来”这种话术,但足以支撑一件事—— 用 Effect 做 Agent 的人,都是在解决运行时问题。中文世界缺的正是这类内容: 不是”怎么调 LLM”,而是”失败、取消、资源、并发怎么收敛”。这与站点既有的错误管理与并发章节是对齐的。
这不是"全量统计":GitHub 搜索每条查询硬上限 1000 条,所以宇宙被限定为 stars ≥ 300 ∧ 180 天内有 push ∧ 5 种语言 × 16 个 Agent 方向词。 所有比例的分母都是这个宇宙,不是整个 Agent 产业。
最关键的一张图:Effect 用得多深
3.9% 的占比离"范式"很远;但把 33 拆开看,故事变了 —— 23 / 33 是 L4: 用 Effect 做 Agent 的团队绝大多数不是浅尝,而是把执行模型建在它上面。
其余四张
数字背后的表
Effect 使用深度
| 深度 | 含义 | 项目数 |
|---|---|---|
L0 | 不用 Effect | 816 |
L1 | 只在边角路径依赖 | 7 |
L2 | 部分业务逻辑用了 | 6 |
L3 | Effect 是重要架构组成 | 4 |
L4 | Effect 是 Runtime 的地基 | 23 |
Effect Agent 用到了哪些能力(共 33 个项目,可多选)
| 能力 | 项目数 |
|---|---|
gen | 32 |
error | 31 |
primitives | 28 |
service | 26 |
concurrency | 26 |
schema | 26 |
resource | 26 |
stream | 22 |
observability | 20 |
config | 18 |
platform | 17 |
cluster | 14 |
注意 @effect/ai 不在表里:33 个项目里命中 0 个(全部 1,612 个 TS 候选里也只有 1 个)。
这些团队用 Effect 不是为了"接模型方便",而是为了管住失败、并发与资源。
Agent 生态按语言
| 语言 | 候选 | 判定为 Agent | 占比 |
|---|---|---|---|
| Python | 2,223 | 934 | 42.0% |
| TypeScript | 1,612 | 856 | 53.1% |
| Go | 465 | 217 | 46.7% |
| Rust | 402 | 185 | 46.0% |
| Java | 158 | 83 | 52.5% |
| (未知) | 1 | 0 | 0.0% |
真正在用 Effect 的项目(33 个)
每一条都来自 tarball 全仓扫描:下载整个仓库、只统计确实 import 了 effect 的文件,
并剔除"仓库里塞了一份 Effect 源码"的情况。核心 列是能力命中数。
| 项目 | ★ | 深度 | 类型 | 核心 | 依赖 |
|---|---|---|---|---|---|
| anomalyco/opencode | 207,170 | L4 | coding-agent | 14 | @effect/opentelemetry@effect/platform-node |
| ComposioHQ/composio | 30,160 | L4 | multi-agent | 12 | @effect/platform-buneffect |
| Kilo-Org/kilocode | 27,293 | L4 | multi-agent | 14 | @effect/opentelemetry@effect/platform-node |
| elizaOS/eliza | 19,331 | L2 | workflow-agent | 2 | effect |
| triggerdotdev/trigger.dev | 16,273 | L2 | single-agent | 4 | effect |
| millionco/react-doctor | 14,840 | L4 | single-agent | 11 | @effect/platform-node-sharedeffect |
| XiaomiMiMo/MiMo-Code | 13,095 | L4 | mcp-agent | 13 | @effect/opentelemetry@effect/platform-node |
| baptisteArno/typebot.io | 10,318 | L4 | workflow-agent | 13 | @effect/opentelemetry@effect/platform-bun |
| openstatusHQ/openstatus | 9,110 | L3 | mcp-agent | 4 | effect |
| latitude-dev/latitude-llm | 4,642 | L4 | mcp-agent | 9 | @effect/opentelemetryeffect |
| UsefulSoftwareCo/executor | 3,760 | L4 | mcp-agent | 12 | @effect/atom-react@effect/opentelemetry |
| open-wa/wa-automate-nodejs | 3,653 | L4 | single-agent | 11 | @effect/platform-browser@effect/platform-bun |
| millionco/expect | 3,553 | L4 | mcp-agent | 12 | @effect/atom-react@effect/platform-node |
| athasdev/athas | 3,055 | L3 | multi-agent | 2 | effect |
| coder/xum | 2,016 | L4 | coding-agent | 10 | effect |
| steipete/birdclaw | 1,652 | L3 | mcp-agent | 3 | effect |
| cyberpapiii/chipotlai-max | 1,556 | L4 | mcp-agent | 8 | effect |
| amicalhq/amical | 1,530 | L2 | workflow-agent | 7 | effect |
| aws-samples/bedrock-chat | 1,323 | L3 | single-agent | 1 | effect |
| LodyAI/Lody | 1,049 | L4 | mcp-agent | 7 | effect |
| AltimateAI/altimate-code | 811 | L4 | mcp-agent | 14 | @effect/opentelemetry@effect/platform-node |
| FrancescoStabile/numasec | 779 | L4 | mcp-agent | 13 | @effect/opentelemetry@effect/platform-node |
| joelhooks/swarm-tools | 735 | L2 | mcp-agent | 6 | effect |
| browser-use/browsercode | 716 | L4 | single-agent | 14 | @effect/opentelemetry@effect/platform-node |
| s0ld13rr/pentestcode | 700 | L4 | mcp-agent | 13 | @effect/opentelemetry@effect/platform-node |
| openteams-lab/openteams | 612 | L2 | multi-agent | 10 | @effect/platform-nodeeffect |
| momozi1996/momo-code | 604 | L4 | coding-agent | 6 | effect |
| paperboytm/spool | 590 | L2 | multi-agent | 7 | @effect/opentelemetryeffect |
| shobcoder/shob | 581 | L4 | coding-agent | 13 | @effect/opentelemetry@effect/platform-node |
| maria-rcks/t1code | 520 | L4 | single-agent | 12 | @effect/platform-node@effect/sql-sqlite-bun |
| morapelker/hive | 470 | L4 | single-agent | 9 | effect |
| smithersai/smithers | 412 | L4 | workflow-agent | 14 | @effect/opentelemetry@effect/platform-bun |
| boringcomputers/nehemiah | 326 | L4 | mcp-agent | 7 | effect |
案例与文章
完整文章(10 章)
从"Agent 早就不是 LLM wrapper"讲到"不是范式,但用法很重";含 4 个深案例(opencode / composio / typebot / latitude-llm)与 1 个反例(eliza)。
报告与数据
报告:reports/effect-agent-ecosystem-v0.1.md(仓库内)
下载:effect-agents.csv ·
typescript-agents.csv ·
agents.csv ·
stats.json
口径(宪法)
有界宇宙、可代码验证的 Agent 判据(A1–A4)、Effect 深度 L0–L4、证据分级、Bias 清单:
docs/observatory/methodology.md。
一条命令复现
pnpm --filter @ecn/observatory discover && … scan && … classify && … report
这份调查不知道什么(写在前面比写在附录里好)
- 这不是全量:有界宇宙排除了 stars < 300、半年不活跃、以及名字/描述里没有 Agent 方向词的仓库;
- 2,177 个候选我们判不准是不是 Agent(占 44.8%)。这不是数据脏,而是"Agent"在开源世界还没有稳定边界;
它们不计入任何比例。人工审核抽样表见
docs/observatory/review-sample.md(124 条,待人工判定); - 没有 Benchmark:本文不声称任何性能或可靠性优势。同 LLM 同 prompt 下的耗时差异支撑不了"谁更好";
- 语言字段是参考口径:GitHub 按字节占比判定语言,TS 项目常被判成 JS/JSON/Markdown;
- 研究的是 GitHub 开源生态,不是整个 Agent 产业(企业私有项目完全不可见)。
怎么保证数字不是编的
- LLM 不产生任何数字:star / 活跃度 / 依赖 / 文件清单 / 能力命中全部来自 GitHub API 或仓库文件;
- 每条候选可回溯:快照里记着它被哪条查询命中(
via); - 每个汇总可重算:CI 门禁断言
stats.json能由dataset.json重算、effect-agents.csv每一行都真的是 L2+ —— 数字看起来永远是对的,所以必须机器来盯; - 快照禁止覆盖:目录已存在即报错,保证"旧数据没被改过"。