[{"data":1,"prerenderedAt":713},["ShallowReactive",2],{"tool-langgraph-en":3},{"slug":4,"published":5,"minutes":6,"category":7,"tags":8,"keywords":14,"about":22,"sources":31,"cover":50,"og":51,"expertise":52,"locales":53,"lang":54,"title":57,"description":58,"coverAlt":59,"url":24,"pricing":60,"kind":61,"metaTitle":62,"takeaways":63,"faq":69,"toc":82,"blocks":107,"others":479},"langgraph","2026-07-17",10,"agents",[9,10,11,12,13],"LangGraph","Agent orchestration","Durable execution","Human-in-the-loop","State machines",[4,15,16,17,18,19,20,21],"langgraph vs langchain","langgraph checkpointer","durable execution agents","langgraph postgres checkpointer","langsmith pricing","langgraph human in the loop","agent framework comparison",[23,25,28],{"name":9,"url":24},"https:\u002F\u002Fwww.langchain.com\u002Flanggraph",{"name":26,"url":27},"Workflow engine","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWorkflow_engine",{"name":29,"url":30},"Apache Beam","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FApache_Beam",[32,35,38,41,44,47],{"title":33,"url":34},"LangGraph documentation: overview","https:\u002F\u002Fdocs.langchain.com\u002Foss\u002Fpython\u002Flanggraph\u002Foverview",{"title":36,"url":37},"LangGraph documentation: checkpointers and durability modes","https:\u002F\u002Fdocs.langchain.com\u002Foss\u002Fpython\u002Flanggraph\u002Fcheckpointers",{"title":39,"url":40},"LangGraph documentation: interrupts and the rules of interrupts","https:\u002F\u002Fdocs.langchain.com\u002Foss\u002Fpython\u002Flanggraph\u002Finterrupts",{"title":42,"url":43},"langchain-ai\u002Flanggraph on GitHub","https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Flanggraph",{"title":45,"url":46},"LangSmith pricing","https:\u002F\u002Fwww.langchain.com\u002Fpricing",{"title":48,"url":49},"Temporal: LangGraph integration for Python reaches public preview (16 July 2026)","https:\u002F\u002Ftemporal.io\u002Fblog\u002Ftemporal-langgraph-plugin-durable-execution","\u002Fimages\u002Fblog\u002Flanggraph\u002Fcover.webp","\u002Fimages\u002Fblog\u002Flanggraph\u002Fog.jpg","ai-engineer",[54,55,56],"en","de","hu","LangGraph: a low-level runtime for stateful agents","What LangGraph gives a production agent: checkpointed supersteps, interrupts and streaming, plus where the durability model stops short and what LangSmith costs.","Diagram: a LangGraph superstep cycle with an agent node, a tool node, a superstep boundary and a checkpointer that commits state and resumes on the same thread.","Apache-2.0 · LangSmith paid","Agent framework","LangGraph: a low-level agent runtime · Balázs Csorba",[64,65,66,67,68],"LangGraph is an orchestration runtime, not an agent framework: it supplies a checkpointed state machine and nothing else. The 1.2 line adds per-node timeouts, error recovery, a lower-overhead channel type and a version 3 streaming API.","Durability stops at the process boundary. A checkpointer restores state after a crash, but something outside the library has to notice the crash and re-enter the graph with the right thread_id.","interrupt() rewinds the whole node, not the line. Any side effect before an interrupt runs again on every resume, which turns idempotency into a design constraint rather than a nicety.","The library is MIT-licensed on GitHub and 1.2.14 was current on PyPI in October 2026; the money is in LangSmith, where Developer is free with 5k base traces a month and Plus is $39 per seat.","The three durability modes are a real performance lever: sync commits every checkpoint before the next step starts, exit commits nothing until the run ends.",[70,73,76,79],{"q":71,"a":72},"Is LangGraph free to use in production?","The library is MIT-licensed, and the separate checkpointer packages are MIT too. LangSmith is optional: the Developer tier is free for one seat with 5,000 base traces a month, Plus is $39 per seat per month with 10,000 traces. Nothing in LangGraph requires a LangSmith account, though debugging a multi-node run without traces is close to guesswork.",{"q":74,"a":75},"Do I need LangGraph for a simple agent loop?","Probably not. A tool-calling loop is a while loop around a model call and costs about twenty lines. LangGraph earns its place when a run has to survive a restart, wait for a human, or resume from a named step, because a plain loop has no way to represent any of that.",{"q":77,"a":78},"What does it mean that checkpointing is not durable execution?","A checkpointer writes graph state at every superstep; durable execution means the run itself continues. Nothing in the library restarts a dead run or stops two processes from resuming the same thread at once. Temporal shipped a LangGraph plugin in public preview in July 2026 that runs the graph as a Temporal workflow to close exactly that gap.",{"q":80,"a":81},"What does checkpointing actually cost?","One database write per node per superstep, carrying the state payload. The write latency depends on the durability mode, but storage is the bigger problem: the docs recommend a scheduled job that deletes checkpoints older than a retention window, because they grow without bound.",[83,86,89,92,95,98,101,104],{"id":84,"title":85},"what-it-is","What it is",{"id":87,"title":88},"how-it-works","How it works",{"id":90,"title":91},"getting-started","Getting started",{"id":93,"title":94},"persistence","Persistence and durability",{"id":96,"title":97},"where-it-falls-short","Where it falls short",{"id":99,"title":100},"pricing","What it costs",{"id":102,"title":103},"verdict","Verdict",{"id":105,"title":106},"sources","Sources",[108,112,115,118,121,161,175,176,179,188,195,198,199,202,204,215,228,229,232,246,301,304,317,321,326,347,352,353,359,405,408,411,412,415,423,426,427,430,445,457,458],{"type":109,"content":110},"paragraph",[111],"LangGraph is the part of the LangChain stack that executes the agent. Nodes and edges are declared over a shared state object, and the runtime walks the graph one superstep at a time, writing a checkpoint after each one so the run can be paused, resumed and inspected. That is the whole product, and the verdict follows from it: this is the best open-source answer to a narrow question, and teams that need the narrow question answered well should take it.",{"type":109,"content":113},[114],"It sits below the agent and above the model. LangChain agent abstractions and the newer deepagents package are built on it; CrewAI, LlamaIndex and the OpenAI Agents SDK approach the same job from the other direction with more opinions baked in. Measured against writing the loop by hand, the contribution that matters is persistence, not orchestration.",{"type":116,"level":117,"id":84,"text":85},"heading",2,{"type":109,"content":119},[120],"The current release line is langgraph 1.2.x. Version 1.2.14 was on PyPI in October 2026 and requires Python 3.10 or newer. The repository credits Pregel and Apache Beam as inspirations and NetworkX as the model for the public interface, and it states plainly that the library can be used without LangChain itself.",{"type":122,"ordered":123,"items":124},"list",false,[125,127,134,136,141,155],[126],"A graph of nodes over one state object. Nodes return partial updates, and channel reducers decide how two concurrent writes to the same key merge.",[128,129,133],"Checkpointers, which store a state snapshot per superstep and organise runs into threads addressed by ",{"tag":130,"children":131},"code",[132],"thread_id",".",[135],"Stores, a separate cross-thread key-value layer for long-term memory such as user preferences and shared reference data.",[137,140],{"tag":130,"children":138},[139],"interrupt()",", which suspends a node anywhere in the graph and hands control back to the caller until the graph is resumed.",[142,143,146,147,150,151,154],"Durability modes named ",{"tag":130,"children":144},[145],"exit",", ",{"tag":130,"children":148},[149],"async"," and ",{"tag":130,"children":152},[153],"sync",", set per invocation.",[156,157,160],"Typed streaming. From 1.2, ",{"tag":130,"children":158},[159],"stream_events(..., version=\"v3\")"," returns separate projections for messages, values, interrupts and the final output.",{"type":109,"content":162},[163,164,167,168,150,171,174],"Two APIs reach the same runtime. The graph API is built on ",{"tag":130,"children":165},[166],"StateGraph"," and expresses control flow as edges. The functional API expresses it as ordinary Python decorated with ",{"tag":130,"children":169},[170],"@entrypoint",{"tag":130,"children":172},[173],"@task",". The functional version reads better in a pull request; the graph version draws as a picture, which matters more than it sounds when an operations team has to reason about what the agent will do at three in the morning.",{"type":116,"level":117,"id":87,"text":88},{"type":109,"content":177},[178],"Execution follows the Pregel model. Every node that is ready to run starts together in a superstep; when they all finish, their writes are committed as a single checkpoint and the next superstep is scheduled from the updated state. That is what makes pending writes worth caring about: if one node in a superstep throws, the writes of its successful siblings are already durable, and a resume does not re-run them. Expensive model calls inside a fan-out are paid for once.",{"type":180,"attrs":181,"inner":185,"caption":186},"diagram",{"viewBox":182,"role":183,"aria-labelledby":184},"0 0 720 330","img","lg1-t lg1-d","\u003Ctitle id=\"lg1-t\">A LangGraph superstep and its checkpoint\u003C\u002Ftitle>\u003Cdesc id=\"lg1-d\">Nodes run in parallel inside one superstep, the checkpointer commits the state when the superstep ends, and a resume re-enters the graph on the same thread_id. Three durability modes decide when the write happens: on finish, during the next step, or before the next step.\u003C\u002Fdesc>\u003Ctext x=\"20\" y=\"26\" class=\"d-title\">SUPERSTEP CYCLE\u003C\u002Ftext>\u003Crect x=\"20\" y=\"44\" width=\"180\" height=\"58\" rx=\"8\" class=\"d-accent\" \u002F>\u003Ctext x=\"110\" y=\"79\" text-anchor=\"middle\" class=\"d-text\">agent node\u003C\u002Ftext>\u003Cpath d=\"M200 73H246\" class=\"d-line\" \u002F>\u003Cpath d=\"M246 69L252 73L246 77Z\" class=\"d-head\" \u002F>\u003Crect x=\"256\" y=\"44\" width=\"180\" height=\"58\" rx=\"8\" class=\"d-sky\" \u002F>\u003Ctext x=\"346\" y=\"79\" text-anchor=\"middle\" class=\"d-text\">tool node\u003C\u002Ftext>\u003Cpath d=\"M346 102V118H110V106\" class=\"d-line\" \u002F>\u003Cpath d=\"M106 110L110 104L114 110Z\" class=\"d-head\" \u002F>\u003Cpath d=\"M20 142H700\" class=\"d-line d-dash\" \u002F>\u003Ctext x=\"20\" y=\"162\" class=\"d-label\">SUPERSTEP BOUNDARY\u003C\u002Ftext>\u003Cpath d=\"M150 106V174\" class=\"d-line\" \u002F>\u003Cpath d=\"M146 170L150 176L154 170Z\" class=\"d-head\" \u002F>\u003Ctext x=\"160\" y=\"140\" class=\"d-small\">commit\u003C\u002Ftext>\u003Crect x=\"20\" y=\"180\" width=\"280\" height=\"58\" rx=\"8\" class=\"d-mint\" \u002F>\u003Ctext x=\"160\" y=\"215\" text-anchor=\"middle\" class=\"d-text\">checkpointer\u003C\u002Ftext>\u003Ctext x=\"160\" y=\"256\" text-anchor=\"middle\" class=\"d-small\">state + pending writes, keyed by thread_id\u003C\u002Ftext>\u003Cpath d=\"M300 205H336V150\" class=\"d-line-accent d-dash\" \u002F>\u003Cpath d=\"M332 154L336 148L340 154Z\" class=\"d-head-accent\" \u002F>\u003Ctext x=\"344\" y=\"200\" class=\"d-small\">resume: same thread_id\u003C\u002Ftext>\u003Ctext x=\"470\" y=\"180\" class=\"d-label\">DURABILITY MODE\u003C\u002Ftext>\u003Ctext x=\"470\" y=\"206\" class=\"d-small\">exit &#183; written on finish\u003C\u002Ftext>\u003Ctext x=\"470\" y=\"228\" class=\"d-small\">async &#183; written during the next step\u003C\u002Ftext>\u003Ctext x=\"470\" y=\"250\" class=\"d-small\">sync &#183; written before the next step\u003C\u002Ftext>\u003Ctext x=\"20\" y=\"300\" class=\"d-small\">A node that fails mid-superstep: the successful siblings keep their writes and are not re-run on resume.\u003C\u002Ftext>",[187],"The commit lands on a superstep boundary, not after every node. That is why a failed node does not force the successful ones in the same superstep to run again, and why the durability mode is a latency knob rather than a correctness switch.",{"type":109,"content":189},[190,191,194],"Concurrency is where the sharp edges live. Two nodes writing the same state key in the same superstep need a reducer. LangGraph ships ",{"tag":130,"children":192},[193],"add"," and a last-value default, and the rest is written by hand. Getting this wrong does not raise anything: one of the two writes is silently dropped, and the symptom shows up much later as a decision the agent cannot explain.",{"type":109,"content":196},[197],"State is also the storage bill. Every superstep rewrites the whole state object, so a key that accumulates retrieved documents turns each step into a full payload write. Prune the state at the node boundary and keep the durable artefacts outside the graph.",{"type":116,"level":117,"id":90,"text":91},{"type":109,"content":200},[201],"The smallest graph worth writing is an approval flow, because that is the case the runtime is actually for. This one pauses for a human, resumes on the same thread, and keeps the side effect after the interrupt so it executes exactly once.",{"type":130,"code":203},"from typing import Literal, TypedDict\nfrom langgraph.checkpoint.postgres import PostgresSaver\nfrom langgraph.graph import END, START, StateGraph\nfrom langgraph.types import Command, interrupt\n\nclass State(TypedDict):\n    request: str\n    decision: str | None\n\ndef ask(state: State) -> Command[Literal[\"send\", \"cancel\"]]:\n    if interrupt({\"question\": \"Send this?\", \"details\": state[\"request\"]}):\n        return Command(goto=\"send\")\n    return Command(goto=\"cancel\")\n\nbuilder = StateGraph(State)\nbuilder.add_node(\"ask\", ask)\nbuilder.add_node(\"send\", lambda s: {\"decision\": \"sent\"})\nbuilder.add_node(\"cancel\", lambda s: {\"decision\": \"cancelled\"})\nbuilder.add_edge(START, \"ask\")\nbuilder.add_edge(\"send\", END)\nbuilder.add_edge(\"cancel\", END)\n\nwith PostgresSaver.from_conn_string(\"postgresql:\u002F\u002F…\") as saver:\n    saver.setup()\n    graph = builder.compile(checkpointer=saver)\n    config = {\"configurable\": {\"thread_id\": \"req-42\"}}\n    print(graph.invoke({\"request\": \"refund 8891\"}, config, durability=\"sync\")[\"__interrupt__\"])\n    print(graph.invoke(Command(resume=True), config, durability=\"sync\")[\"decision\"])",{"type":109,"content":205},[206,207,210,211,214],"Two details in that snippet matter more than the rest. ",{"tag":130,"children":208},[209],"PostgresSaver.setup()"," creates the checkpoint tables once, at deploy time, not once per process. And ",{"tag":130,"children":212},[213],"durability=\"sync\""," is the right choice for an approval flow: the write completes before the next step, so a crash in the two seconds after the decision cannot lose the decision itself.",{"type":216,"variant":217,"title":218,"body":219},"callout","note","One runtime, two APIs",[220],[221,222,224,225,227],"The functional API reaches the same checkpoint format. Decorate the workflow with ",{"tag":130,"children":223},[170],", decorate the units of work with ",{"tag":130,"children":226},[173],", and let LangGraph derive the graph from the control flow. Mixing both in one codebase works, which is what makes it possible to start simple and get more explicit only where the trace is hard to read.",{"type":116,"level":117,"id":93,"text":94},{"type":109,"content":230},[231],"Persistence is the reason to adopt the framework and also where the marketing language gets loose. A checkpointer writes a snapshot. Durable execution means the run continues. LangGraph does the first; the second is left to whoever operates the process.",{"type":122,"ordered":123,"items":233},[234,238,242],[235,237],{"tag":130,"children":236},[145]," — nothing is written until the run completes, fails or interrupts. Fastest, and a process crash loses the run.",[239,241],{"tag":130,"children":240},[149]," — writes run while the next step executes. The default trade: good latency, and a small window in which a crash loses state.",[243,245],{"tag":130,"children":244},[153]," — every checkpoint is committed before the next step starts. Highest durability, with the write on the critical path.",{"type":247,"head":248,"rows":255},"table",[249,251,253],[250],"Package",[252],"Backend",[254],"Where it fits",[256,265,274,283,292],[257,261,263],[258],{"tag":130,"children":259},[260],"langgraph-checkpoint",[262],"In memory",[264],"Tests and experiments; ships with langgraph",[266,270,272],[267],{"tag":130,"children":268},[269],"langgraph-checkpoint-sqlite",[271],"SQLite",[273],"Local workflows and single-process apps",[275,279,281],[276],{"tag":130,"children":277},[278],"langgraph-checkpoint-postgres",[280],"PostgreSQL",[282],"Production; also what LangSmith Deployment runs on",[284,288,290],[285],{"tag":130,"children":286},[287],"langgraph-checkpoint-mongodb",[289],"MongoDB",[291],"Teams already standardised on MongoDB",[293,297,299],[294],{"tag":130,"children":295},[296],"langchain-azure-cosmosdb",[298],"Cosmos DB",[300],"Azure shops, with Entra ID authentication",{"type":109,"content":302},[303],"Checkpoints grow without bound. The persistence documentation says so directly and suggests a scheduled job that deletes checkpoints older than a retention window. Teams that skip this discover it through a database that has quietly become the largest thing in the stack, and that is a bad afternoon.",{"type":216,"variant":305,"title":306,"body":307},"warn","Resume is the caller’s job",[308],[309,310,313,314,316],"If the process dies, the checkpoint survives and the run does not. Something has to detect the failure, decide where to re-enter and call ",{"tag":130,"children":311},[312],"invoke(None, config)"," with the right ",{"tag":130,"children":315},[132],". Nothing in the library does that, and nothing stops two processes from resuming the same thread at the same time.",{"type":116,"level":318,"id":319,"text":320},3,"interrupts","Interrupts and the replay rules",{"type":109,"content":322},[323,325],{"tag":130,"children":324},[139]," is the most-used feature and the most misread one. It does not pause at a line. It raises an exception, unwinds to the runtime, checkpoints the state and waits indefinitely. When the graph resumes, the runtime restarts the entire node from the top and matches resume values to interrupt calls strictly by index. Every production bug in this area comes from ignoring one of those two sentences.",{"type":122,"ordered":123,"items":327},[328,337,339,341],[329,330,332,333,336],"Never wrap an ",{"tag":130,"children":331},[139]," call in a bare ",{"tag":130,"children":334},[335],"try\u002Fexcept",". The pause is a thrown exception and a broad handler swallows it, so the graph never pauses at all.",[338],"Do not conditionally skip or reorder interrupts inside a node. Matching is index-based, so a changed call order consumes the wrong resume value without any error.",[340],"Make every side effect before an interrupt idempotent, or move it after the pause, or split it into its own node. The documentation is explicit that a record created before the interrupt is created again on each resume.",[342,343,346],"Avoid ",{"tag":130,"children":344},[345],"while True"," loops around an interrupt in a single node. Every resume replays the earlier iterations, so work inside the loop grows exponentially.",{"type":216,"variant":305,"title":348,"body":349},"The duplicate-charge failure mode",[350],[351],"A node that writes an audit row, then asks for approval, then is resumed after a restart writes that row again. The agent is not wrong, the test suite passes, and the second entry appears in production. Put the side effect in its own node after the interrupt and let the checkpointer carry state rather than effects.",{"type":116,"level":117,"id":96,"text":97},{"type":109,"content":354},[355,356,358],"The weaknesses come first, because they are what decides whether the framework fits. A run lives in one process. There is no supervisor, no task queue and no worker pool in the open-source library, so if that process dies the run is dead until a system outside LangGraph notices and re-enters it. Human review has the same shape: ",{"tag":130,"children":357},[139]," halts the run, and building the thing that notices an approval arrived and wakes the right thread is now your problem.",{"type":247,"head":360,"rows":368},[361,363,364,366],[362],"",[9],[365],"CrewAI",[367],"LlamaIndex",[369,378,387,396],[370,372,374,376],[371],"Control model",[373],"Explicit graph or functional API",[375],"Roles and tasks",[377],"Composable pipelines and indices",[379,381,383,385],[380],"Persistence",[382],"Checkpoints per superstep, you run the process",[384],"Memory and knowledge abstractions",[386],"Checkpointing inside workflow and index nodes",[388,390,392,394],[389],"Strongest at",[391],"Long, resumable, auditable runs",[393],"Fast multi-agent prototypes",[395],"Retrieval-heavy applications",[397,399,401,403],[398],"What it leaves you",[400],"Prompts, tool loop, retries, supervision",[402],"Fine control of the run itself",[404],"Orchestration tied to retrieval",{"type":109,"content":406},[407],"The second weakness is ergonomics. LangGraph abstracts nothing about prompts or architecture, which is a virtue when the agent is the product and an obstacle when it is not. The framework will not tell you how to structure a prompt, when to stop calling tools, or how many retries a step deserves. Most teams spend the first weeks of a LangGraph project rediscovering the tool loop, which is exactly what a higher-level abstraction would have handed them.",{"type":109,"content":409},[410],"The third is lock-in, and it is milder than it usually is claimed to be. The runtime is MIT-licensed, runs in your process and writes to your database, so there is no data held hostage. The real dependency appears once graphs are deployed through LangSmith: the deployment, the assistants API and the cron scheduling are LangChain surfaces, and moving off them later is real work.",{"type":116,"level":117,"id":99,"text":100},{"type":109,"content":413},[414],"LangGraph is free. LangSmith is where the money goes, and it is priced per seat with metered usage on top: Developer is free for one seat with 5,000 base traces a month, Plus is $39 per seat per month with 10,000 base traces and access to deployment, Engine and sandboxes, and Enterprise is priced on request with hybrid or fully self-hosted deployment.",{"type":122,"ordered":123,"items":416},[417,419,421],[418],"Usage is metered in LangChain Standard Units at $1 each, and a serverless deployment is billed on runtime compute, runtime memory, database compute and database memory, plus the time the database is live.",[420],"Trace retention is 14 days for a base trace and 180 days for an extended trace, which is billed separately.",[422],"LangSmith states that it does not train models on customer data, and offers a self-hosted data plane on the Enterprise tier for teams whose own controls require it.",{"type":109,"content":424},[425],"The trace allowance is the number to watch. One agent run is one trace, and a run that calls five tools across ten nodes produces a graph of spans inside it. Tracing every production request exhausts 5,000 or 10,000 traces surprisingly fast, which is the moment the bill stops being a rounding error. Sampling by environment is the cheapest mitigation.",{"type":116,"level":117,"id":102,"text":103},{"type":109,"content":428},[429],"LangGraph is a good answer to one question: how do I keep a long agent run alive across a crash, a deploy or a human approval. Inside that boundary the work is careful — the checkpoint format is documented, pending writes are a genuinely good idea, and the interrupt semantics are spelled out plainly enough to design around. Outside it, the library is a runtime with no opinions, and everything it declines to decide becomes the reader’s work at three in the morning.",{"type":122,"ordered":431,"items":432},true,[433,435,437,439,441,443],[434],"Adopt it when a run must survive a restart: an approval queue, a research job that runs for hours, an agent that waits for a person.",[436],"Adopt it when the run has to be auditable. Nodes and edges are the cheapest way to show a non-engineer exactly what the agent will do.",[438],"Adopt it when mixing deterministic and model-driven steps matters and the boundary between them has to be exact and testable.",[440],"Skip it for a tool-calling loop that finishes in three steps. Twenty lines of Python are cheaper to own and faster to debug.",[442],"Do not treat it as the durability layer. If a silently dead run means lost orders, add a supervisor or move the graph onto Temporal, whose LangGraph plugin went to public preview in July 2026.",[444],"Do not adopt it without reading the interrupt rules once. The replay semantics are the part that produces duplicate side effects in production.",{"type":446,"content":447},"quote",[448,452,453],{"tag":449,"children":450},"em",[451],"LangGraph is a simple, efficient way to express an agent: the graph model is clear, the ecosystem is rich, and prototypes come together fast. But, it is not a complete production story."," ",{"tag":454,"children":455},"strong",[456],"Temporal, on its LangGraph plugin, July 2026",{"type":116,"level":117,"id":105,"text":106},{"type":122,"ordered":431,"items":459},[460,464,467,470,473,476],[461],{"tag":462,"href":34,"children":463},"a",[33],[465],{"tag":462,"href":37,"children":466},[36],[468],{"tag":462,"href":40,"children":469},[39],[471],{"tag":462,"href":43,"children":472},[42],[474],{"tag":462,"href":46,"children":475},[45],[477],{"tag":462,"href":49,"children":478},[48],[480,545,594,659],{"slug":481,"published":482,"minutes":483,"category":7,"tags":484,"keywords":489,"about":496,"sources":500,"cover":537,"og":538,"expertise":52,"locales":539,"lang":54,"title":540,"description":541,"coverAlt":542,"url":503,"pricing":543,"kind":544},"mcp-reference-servers","2026-09-25",9,[485,486,487,488],"MCP","Reference servers","Tool protocol","Server SDKs",[490,491,492,493,494,495],"mcp reference servers","modelcontextprotocol servers github","write an mcp server","mcp server examples","mcp server sdk","mcp server security",[497],{"name":498,"url":499},"Model Context Protocol","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FModel_Context_Protocol",[501,504,507,510,513,516,519,522,525,528,531,534],{"title":502,"url":503},"MCP reference servers repository","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fservers",{"title":505,"url":506},"Repository README and server list","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fservers\u002Fblob\u002Fmain\u002FREADME.md",{"title":508,"url":509},"Security policy","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fservers\u002Fblob\u002Fmain\u002FSECURITY.md",{"title":511,"url":512},"Release process and trusted publishing","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fservers\u002Fblob\u002Fmain\u002FRELEASING.md",{"title":514,"url":515},"Filesystem server README","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fservers\u002Fblob\u002Fmain\u002Fsrc\u002Ffilesystem\u002FREADME.md",{"title":517,"url":518},"Everything server feature list","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fservers\u002Fblob\u002Fmain\u002Fsrc\u002Feverything\u002Fdocs\u002Ffeatures.md",{"title":520,"url":521},"MCP Registry","https:\u002F\u002Fregistry.modelcontextprotocol.io\u002F",{"title":523,"url":524},"Archived reference servers","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fservers-archived",{"title":526,"url":527},"Model Context Protocol documentation","https:\u002F\u002Fmodelcontextprotocol.io\u002F",{"title":529,"url":530},"TypeScript MCP SDK","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Ftypescript-sdk",{"title":532,"url":533},"Python MCP SDK","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fpython-sdk",{"title":535,"url":536},"FastMCP on PyPI","https:\u002F\u002Fpypi.org\u002Fproject\u002Ffastmcp\u002F","\u002Fimages\u002Fblog\u002Fmcp-reference-servers\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fmcp-reference-servers\u002Fog.jpg",[54,55,56],"MCP reference servers: what they demonstrate and what they omit","A review of modelcontextprotocol\u002Fservers: seven reference servers, what each one teaches, the SDK versions behind them and why none of them should reach production.","Seven reference servers fanning out from a single MCP client over stdio","MIT","Protocol tooling",{"slug":546,"published":547,"minutes":6,"category":7,"tags":548,"keywords":554,"about":562,"sources":569,"cover":586,"og":587,"expertise":52,"locales":588,"lang":54,"title":589,"description":590,"coverAlt":591,"url":592,"pricing":593,"kind":549},"aider","2026-09-23",[549,550,551,552,553],"Coding agent","Terminal","Git workflow","BYO key","Open source",[546,555,556,557,558,559,560,561],"aider vs claude code","aider polyglot benchmark","ai pair programming terminal","aider leaderboard","open source coding agent","aider architect mode","aider install",[563,566],{"name":564,"url":565},"Aider","https:\u002F\u002Faider.chat\u002F",{"name":567,"url":568},"Aider on GitHub","https:\u002F\u002Fgithub.com\u002FAider-AI\u002Faider",[570,572,575,578,581,583],{"title":571,"url":565},"Aider website",{"title":573,"url":574},"Aider LLM leaderboards","https:\u002F\u002Faider.chat\u002Fdocs\u002Fleaderboards\u002F",{"title":576,"url":577},"Aider linting and testing","https:\u002F\u002Faider.chat\u002Fdocs\u002Fusage\u002Flint-test.html",{"title":579,"url":580},"Aider token limits","https:\u002F\u002Faider.chat\u002Fdocs\u002Ftroubleshooting\u002Ftoken-limits.html",{"title":582,"url":568},"Aider repository on GitHub",{"title":584,"url":585},"aider-chat on PyPI","https:\u002F\u002Fpypi.org\u002Fproject\u002Faider-chat\u002F","\u002Fimages\u002Fblog\u002Faider\u002Fcover.webp","\u002Fimages\u002Fblog\u002Faider\u002Fog.jpg",[54,55,56],"Aider review: git-first pair programming in the terminal","A review of Aider 0.86.2, an Apache-2.0 terminal pair programmer whose benchmark ranks models honestly and whose release cadence has stopped.","Cover art for the Aider review: a terminal session turning a single request into a row of git commits","https:\u002F\u002Faider.chat","Free · BYO API key",{"slug":595,"published":596,"minutes":6,"category":7,"tags":597,"keywords":602,"about":611,"sources":621,"cover":652,"og":653,"expertise":52,"locales":654,"lang":54,"title":655,"description":656,"coverAlt":657,"url":624,"pricing":658,"kind":61},"openai-agents-sdk","2026-09-11",[598,599,600,485,601],"Agent runtime","Tracing","Guardrails","Python",[603,604,605,606,607,608,609,610],"openai agents sdk","openai agents sdk vs langgraph","python agent framework comparison","openai agents sdk guardrails","agent run tracing tool calls","openai agents sdk human in the loop","openai-agents pypi","agents sdk vs responses api",[612,615,618],{"name":613,"url":614},"Model context protocol","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FModel_context_protocol",{"name":616,"url":617},"Software framework","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSoftware_framework",{"name":619,"url":620},"Agentic AI","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FAgentic_AI",[622,625,628,631,634,637,640,643,646,649],{"title":623,"url":624},"OpenAI Agents SDK documentation: Intro, and Agents SDK or Responses API","https:\u002F\u002Fopenai.github.io\u002Fopenai-agents-python\u002F",{"title":626,"url":627},"OpenAI Agents SDK documentation: Running agents","https:\u002F\u002Fopenai.github.io\u002Fopenai-agents-python\u002Frunning_agents\u002F",{"title":629,"url":630},"OpenAI Agents SDK documentation: Guardrails","https:\u002F\u002Fopenai.github.io\u002Fopenai-agents-python\u002Fguardrails\u002F",{"title":632,"url":633},"OpenAI Agents SDK documentation: Human-in-the-loop","https:\u002F\u002Fopenai.github.io\u002Fopenai-agents-python\u002Fhuman_in_the_loop\u002F",{"title":635,"url":636},"OpenAI Agents SDK documentation: Tracing","https:\u002F\u002Fopenai.github.io\u002Fopenai-agents-python\u002Ftracing\u002F",{"title":638,"url":639},"OpenAI Agents SDK documentation: Configuration","https:\u002F\u002Fopenai.github.io\u002Fopenai-agents-python\u002Fconfig\u002F",{"title":641,"url":642},"openai-agents 0.23.1 on PyPI, release history and licence","https:\u002F\u002Fpypi.org\u002Fproject\u002Fopenai-agents\u002F",{"title":644,"url":645},"OpenAI: The next evolution of the Agents SDK (15 April 2026)","https:\u002F\u002Fopenai.com\u002Findex\u002Fthe-next-evolution-of-the-agents-sdk\u002F",{"title":647,"url":648},"OpenAI API documentation: Agents, comparison of the three runtimes","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents",{"title":650,"url":651},"Arize: AI agent frameworks compared (1 October 2026)","https:\u002F\u002Farize.com\u002Fai-agents\u002Fagent-frameworks\u002F","\u002Fimages\u002Fblog\u002Fopenai-agents-sdk\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fopenai-agents-sdk\u002Fog.jpg",[54,55,56],"OpenAI Agents SDK: a small agent runtime with sharp edges","A review of the OpenAI Agents SDK: the runner loop, tracing, guardrails and approvals, plus what the release churn and the Responses-only features cost.","Diagram of the Agents SDK runner loop: input, agent, model call, final output, guardrails, and tool calls feeding back into the input","MIT · API pay per token",{"slug":660,"published":661,"minutes":483,"category":7,"tags":662,"keywords":667,"about":674,"sources":684,"cover":705,"og":706,"expertise":52,"locales":707,"lang":54,"title":708,"description":709,"coverAlt":710,"url":711,"pricing":712,"kind":549},"openhands","2026-09-09",[549,663,664,665,666],"Sandboxed execution","Automations","Self-hosted","MIT licence",[660,668,669,670,671,672,559,673],"openhands self-host","open hands coding agent","openhands vs claude code","agent canvas","openhands docker sandbox","openhands cloud pricing",[675,678,681],{"name":676,"url":677},"OpenHands","https:\u002F\u002Fwww.openhands.dev",{"name":679,"url":680},"OpenHands on GitHub","https:\u002F\u002Fgithub.com\u002FOpenHands\u002FOpenHands",{"name":682,"url":683},"Intelligent agent","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FIntelligent_agent",[685,687,690,693,696,699,702],{"title":686,"url":680},"OpenHands README",{"title":688,"url":689},"OpenHands licence (MIT)","https:\u002F\u002Fgithub.com\u002FOpenHands\u002FOpenHands\u002Fblob\u002Fmain\u002FLICENSE",{"title":691,"url":692},"Agent Canvas 1.25.0 release notes","https:\u002F\u002Fdocs.openhands.dev\u002Fopenhands\u002Fusage\u002Fagent-canvas\u002Frelease-notes\u002Fv1.25.0.md",{"title":694,"url":695},"OpenHands sandbox overview","https:\u002F\u002Fdocs.openhands.dev\u002Fopenhands\u002Fusage\u002Fsandboxes\u002Foverview.md",{"title":697,"url":698},"OpenHands quick start","https:\u002F\u002Fdocs.openhands.dev\u002Fopenhands\u002Fusage\u002Finstallation",{"title":700,"url":701},"OpenHands pricing","https:\u002F\u002Fwww.openhands.dev\u002Fpricing",{"title":703,"url":704},"Introducing the OpenHands Index","https:\u002F\u002Fwww.openhands.dev\u002Fblog\u002Fintroducing-the-openhands-index","\u002Fimages\u002Fblog\u002Fopenhands\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fopenhands\u002Fog.jpg",[54,55,56],"OpenHands: the open-source coding agent you operate","OpenHands 1.25.0 is an MIT-licensed coding agent platform with a web canvas, a CLI, sandboxed execution and scheduled automations. A review of where it is strong and where it gets heavy.","Cover artwork for the OpenHands review showing a loop from task to agent to sandboxed run and back","https:\u002F\u002Fgithub.com\u002FAll-Hands-AI\u002FOpenHands","Free · self-host",1791383548864]