Three Different Bets on How to Build Agents
You’ve now spent seven modules hands-on with Hermes. This lesson steps back and places it against two other approaches you’re likely to encounter, LangGraph and the Claude Agent SDK, not to declare a winner, but so you can make a deliberate choice on your next project instead of defaulting to whichever one you learned first.
flowchart LR
subgraph SPECTRUM[" "]
direction LR
LG["LangGraph:\nlibrary, full control,\nbuild everything yourself"]
CASDK["Claude Agent SDK:\nmanaged loop + sandbox,\nsingle-provider"]
HERMES["Hermes Agent:\ncomplete runtime,\nmodel-agnostic,\nopinionated"]
end
LG --> CASDK --> HERMES
style LG fill:#f0fdf9,stroke:#0D9488,color:#0F172A
style CASDK fill:#fff7ed,stroke:#f59e0b,color:#0F172A
style HERMES fill:#EEF0F7,stroke:#6366F1,color:#0F172A
LangGraph: The Library Approach
LangGraph gives you primitives, nodes, edges, explicit state, that you assemble into exactly the control flow your application needs. Nothing is provided for free: memory, tool routing, and anything skill-equivalent are yours to build.
# Illustrative sketch, not a full implementation
from langgraph.graph import StateGraph
graph = StateGraph(AgentState)
graph.add_node("plan", plan_step)
graph.add_node("execute", execute_step)
graph.add_node("review", review_step)
graph.add_edge("plan", "execute")
graph.add_conditional_edges("execute", route_on_result, {
"needs_review": "review",
"done": "__end__",
})
This is the right call when your agent’s control flow is genuinely unusual, doesn’t fit a standard “chat with tools” shape, or when you need to embed agent logic deep inside a larger existing application rather than running it as a standalone runtime.
Claude Agent SDK: The Managed Middle Ground
The Claude Agent SDK provides a managed agent loop and tooling, including a managed sandbox, purpose-built around Claude. It’s more structure than raw LangGraph (you’re not building the loop yourself), but it commits to a single model provider rather than Hermes’ explicit model-agnosticism from Lesson 4.
# Illustrative sketch
from claude_agent_sdk import ClaudeSDKClient
async with ClaudeSDKClient() as client:
await client.query("Refactor the auth module to support SSO")
async for message in client.receive_response():
print(message)
This is the right call when you’re committed to Claude specifically and want a managed loop and sandbox without assembling one yourself, but don’t need Hermes’ memory/skills system or its multi-provider flexibility.
Hermes: The Complete, Opinionated Runtime
Hermes trades some of that low-level control for a much shorter path to a working, persistent agent: memory (Module 4), skills (Lesson 11), tool routing (Module 3), multi-platform gateway (Module 6), and guardrails (Module 7) all come built in, and it works with whichever model provider you choose (Module 2), not one specific vendor.
| LangGraph | Claude Agent SDK | Hermes Agent | |
|---|---|---|---|
| Model flexibility | Any (you wire it up) | Claude-specific | Model-agnostic by design (Module 2) |
| Memory across sessions | Build it yourself | Not built in | Built in (Module 4) |
| Self-improving skills | Build it yourself | Not built in | Built in (Lesson 11) |
| Control flow | Full, explicit control | Managed loop | Managed, opinionated |
| Multi-platform deployment | Build it yourself | Build it yourself | Built in (Module 6) |
| Time to a working agent | Longest | Medium | Shortest |
| Best fit | Deeply custom control flow, embedded in a larger app | Claude-committed teams wanting a managed loop | Standalone, persistent, multi-surface agents |
These Aren’t Mutually Exclusive
Lesson 22’s supervisor pattern generalizes here: MCP is not a Hermes-specific integration point. A custom LangGraph application, or a Claude Agent SDK-built agent, can itself be exposed as an MCP server that a Hermes instance delegates to, the exact mechanism from Lesson 22, just with a different kind of agent on the other end of the connection. A team can use Hermes for the parts of their system that benefit from built-in memory, skills, and multi-platform reach, while keeping a fully custom LangGraph workflow for the one piece of control flow that doesn’t fit any standard runtime’s assumptions.
Exercise: take a project idea you have (real or hypothetical) and place it on the LangGraph-to-Hermes spectrum above using the comparison table’s rows as your criteria. Write two sentences justifying your placement, specifically referencing which row (model flexibility, memory, control flow, or time-to-value) was the deciding factor.