deepagents is an ordered stack of middleware on top of LangChain’s create_agent. Its real product is context engineering: offloading large results to a virtual filesystem, non-destructive summarization, and context-isolated sub-agents.
OpenHands/OpenHands is now the Agent Canvas UI. The agent itself lives in software-agent-sdk: an event-sourced conversation, a stateless agent step(), an LLM context that is a projection of the event log, and compaction done by appending a Condensation event.
The OpenAI Agents SDK owns its loop: a while True over four NextStep outcomes, where handoffs and sub-agents are just tool calls and a human approval is a serializable pause. Context policy is opt-in hooks plus server-side compaction; SandboxAgent adds per-run capabilities and agent-written file memory.
letta-code splits the agent loop across a protocol. A stateful backend (Letta Cloud, or an in-process local backend) runs one model step per run and stops at every tool call; the client harness executes tools on the user’s machine and resumes. Memory is a per-agent git repository compiled into a cache-stable system prompt.
letta-code 把 agent 循环拆在一个协议的两侧:有状态的后端(Letta Cloud 或进程内的本地后端)每个 run 只执行一步模型调用,遇到工具调用就停下;客户端 harness 在用户机器上执行工具后再续跑。记忆是每个 agent 一个 git 仓库,编译进一个保持缓存稳定的 system prompt。
open-pstack has no agent loop of its own: it ports Cursor’s pstack skill pack to Claude Code and Codex and steers the host’s loop with prose. Its owned code is a runner that calls another vendor’s model as a lane: one model call, model proof in every receipt, and a dropout instead of a fallback. Measured: the prose layer is followed loosely.
open-pstack 自己没有 agent 循环:它把 Cursor 的 pstack 技能包移植到 Claude Code 和 Codex,用文字引导宿主的循环。它自己的代码是一个把其他厂商模型当作 lane 调用的 runner:只调用一次模型,每份回执都带模型证明,失败时记为掉队而不是降级。实测:文字层的指令被遵守得很松。
505 upstream tests pass · probe 20/20 · real CLIs 9 scenarios × 3 · 33 real Claude Code sessions · 40 tests + demo 12/12 · mutations 21/21
Facts are backed by source. Interpretations are labelled.
01
Pin the target
Clone it outside this repo, record the commit, and cite every source reference against that commit.
02
Map, then trace
Read manifests, entry points and the composition root, then follow real call sites end to end — into the framework too when the target delegates to one.
03
Separate fact from interpretation
Facts are backed by path:line, a test, or observed runtime behavior. Interpretations are labelled, and open questions stay explicit.
04
Verify claims at runtime
When it is cheap, drive the real library — for example with a scripted fake model — to confirm what reading alone suggests.
05
Run the target's own tests
Use its locked dependencies, so environment noise is not mistaken for findings.
06
Reproduce the architecture, not the product
Build a small, dependency-light version, test its architectural invariants, and mutation-test the tests.
07
Diagram from evidence
Every Archify node carries sources pinned to the studied commit; its SRC badges link to the exact lines.
Reading convention
Conventions.
Each project uses the same URL pattern:
Research: /research/<project-name>.html (plus <project-name>.zh.html when a Chinese version exists)
Diagrams: /diagrams/<project-name>/<diagram>.html, with a gallery at /diagrams/<project-name>/
Studies distinguish Fact (read in source, tested, or observed at runtime) from
Interpretation (a reading of intent). Source references use path:line against the pinned commit.