Building agents with code.
README.md

SDK / stack catalog #

Side-by-side agent education: each scenario is one SDK-agnostic task under scenarios/<id>/, with idiomatic demos in scenarios/<id>/<framework>/. Compare the same shape across tiers (raw API → agent SDK → platform → managed catalog). Prefer TypeScript when the vendor ships an official TS/JS client. Unit-1 leads with Letta verified cells; employer Managed is secondary. A demo is educationally trustworthy only when scenarios/GAPS.md marks it verified (smoke tripwire green) — linked — pending keys+PASS ≠ verified. Do not invent APIs for gaps (including Decisions API until public docs exist). No Modal.

Sourced from Notion Learning Index + Research docs checks (2026-09-30 PT).

Path convention #

Role Path
Scenario body scenarios/<scenario-id>/README.md
Per-stack demo scenarios/<scenario-id>/<framework>/index.ts (or .py)
Package install + stack notes sdks/<framework>/ (this tree)
Coverage matrix scenarios/GAPS.md
Smoke runner tripwire/
cd sdks/letta && npm install
npx tsx ../../scenarios/hello/letta/index.ts
# or:
cd ../../tripwire && npx tsx run.ts --id hello/letta/index.ts

Tier 1 — Raw model APIs (baselines) #

Framework id Product Lang Docs-backed strengths Honest gaps / lab rules
claude Anthropic Messages TS + Python hello, tools, streaming No native handoffs / HITL / agent memory / MCP harness — leave gap unless a tiny idiomatic pattern exists
openai OpenAI Responses TS + Python hello, tools, streaming Same; Conversations API ≠ agent memory product
gemini Google Gen AI generateContent TS + Python hello, tools, streaming Same baseline stance

Tier 2 — Agent SDKs / frameworks #

Framework id Product Lang Docs-backed strengths Honest gaps / lab rules
openai-agents OpenAI Agents SDK (@openai/agents) TS preferred (+ Python fills) tools, streaming, sessions, handoffs, approvals, MCP, sandboxes, compaction; computerTool (Phase 2) Distinct from Agents API hosted computer_use and from Decisions API
claude-agent-sdk Claude Agent SDK TS query stream, resume, subagents, canUseTool, MCP, FS tools, skills Not Managed Agents; not raw Messages
langchain LangChain create_agent Python (+ JS streaming) tools, SqliteSaver memory, HITL middleware, streamEvents Handoffs only when a tiny subgraph demo is obvious
eve Vercel Eve TS filesystem agent, tools, subagents, approvals, skills Durable memory still a lab gap unless tiny resume demo lands

Tier 3 — Platform runtimes #

Framework id Product Lang Docs-backed strengths Honest gaps / lab rules
cloudflare-agents Cloudflare Agents (DO) TS hello/tools, MemoryAgent setState, skills Streaming consumer + HITL still gap without tiny official quickstart

Tier 4 — Managed / hosted agents #

Unit-1 teaching lead is Letta verified cells (see ../scenarios/UNIT-1.md). Other employer Managed / hosted stacks here are secondary catalog entries — same evidence bar (linked — pending keys+PASS until PASS); do not treat a path as done.

Framework id Product Lang Docs-backed strengths Honest gaps / lab rules
letta Letta Agent SDK TS sessions, stream, resume, tools, approvals, MCP, cloud sandbox Multi-agent = multiple agents + app orchestration, not handoffs=[]. Phase-1 + graduation cells verified where GAPS says so.
claude-managed Claude Managed Agents TS preferred Agent/Environment/Session, SSE, memory store, MCP, sandbox, skills Secondary to Unit-1 Letta/agent-SDK spine. No fake native triage handoff; tool-use may be cloud bash — label in README. Lab cells linked — pending keys+PASS.
gemini-managed Gemini Managed + Interactions TS preferred interactions, previous_interaction_id + environment, remote env, skills Secondary catalog. No native handoff; streaming left gap until idiomatic stream consumer is clear; HITL unknown for tiny demos.
notion-agent Notion Agent APIs TS preferred sessions, SSE, session continue, required_actions approvals Host-side tool-use stays stub; tools live on Custom Agent / connectors

Index stacks — not yet lab folders #

Per-stack notes: _preview/.

Stack Status Lab posture
OpenAI Decisions API Limited preview; no public API guide Index-only. Do not invent a Decisions client or folder until official docs ship. Bounded router pattern sits next to handoffs conceptually.
OpenAI Agents API (hosted, beta) Docs exist; computer_use + origin/auth HITL Prefer SDK computerTool under openai-agents for Phase 2
Google ADK Index tutorial track Folder when Index prioritizes
Bedrock Agents Classic Closed to new customers Do not add a Classic folder
Bedrock AgentCore Platform (any framework) Phase 3 when Index greenlights; distinct from BMA
Bedrock Managed Agents powered by OpenAI (BMA) Public preview Phase 3 separate folder; Python/shell-first until official TS client
Sandboxes: E2B, Daytona, Runloop, Blaxel Connectors Pair with a host framework; not Modal

Capability cheat-sheet #

Capability Strongest frameworks (docs) Lab note
hello / tools Nearly all Notion tools stay stub
streaming Broad Prefer dedicated scenarios/streaming/<fw>/
memory / resume letta, claude-agent-sdk, claude-managed, gemini-managed, notion-agent, openai-agents, cloudflare-agents, langchain Raw APIs = gap
handoffs openai-agents, eve, claude-agent-sdk No fake managed handoffs; Decisions ≠ handoffs client
approvals letta, eve, langchain, openai-agents, claude-agent-sdk, notion-agent Browser origin/auth gates count
MCP / sandbox-files / skills Several managed + agent SDKs Phase 2 fills; computer-use under sandbox + approvals
Decisions (bounded route) OpenAI Decisions API (preview) No code until public guide

Learning Index #

Deep self-study tutorials live in Notion Managed Agents: Learning Index (parent of Agent Lab: Curriculum + Capability Matrix). Prefer official quickstart shapes from those tutorials over inventing APIs.

Lab smoke honesty lives in-repo: ../scenarios/GAPS.md — verified vs linked — pending keys+PASS (linked ≠ done). The Notion Curriculum page should mirror that wording (not “filled”).