[{"data":1,"prerenderedAt":973},["ShallowReactive",2],{"tool-pydantic-ai-en":3},{"slug":4,"published":5,"minutes":6,"category":7,"tags":8,"keywords":14,"about":23,"sources":34,"cover":101,"og":102,"expertise":103,"locales":104,"lang":105,"title":108,"description":109,"coverAlt":110,"url":111,"pricing":112,"kind":9,"metaTitle":113,"takeaways":114,"faq":120,"toc":133,"blocks":161,"others":507},"pydantic-ai","2026-10-08",8,"agents",[9,10,11,12,13],"Agent framework","Typed Python","Structured output","Dependency injection","OpenTelemetry",[15,16,17,18,19,20,21,22],"pydantic ai","pydantic ai review","pydantic ai vs langgraph","pydantic ai vs openai agents sdk","typed python agent framework","pydantic ai logfire pricing","pydantic ai 2.0 upgrade","python llm agent framework",[24,27,30,32],{"name":25,"url":26},"Pydantic","https:\u002F\u002Fpydantic.dev",{"name":28,"url":29},"Python (programming language)","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPython_(programming_language)",{"name":12,"url":31},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FDependency_injection",{"name":13,"url":33},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FOpenTelemetry",[35,38,41,44,47,50,53,56,59,62,65,68,71,74,77,80,83,86,89,92,95,98],{"title":36,"url":37},"Pydantic AI documentation","https:\u002F\u002Fai.pydantic.dev\u002F",{"title":39,"url":40},"pydantic-ai 2.55.0 on PyPI (released 9 October 2026)","https:\u002F\u002Fpypi.org\u002Fproject\u002Fpydantic-ai\u002F",{"title":42,"url":43},"pydantic\u002Fpydantic-ai on GitHub: licence, stars and README","https:\u002F\u002Fgithub.com\u002Fpydantic\u002Fpydantic-ai",{"title":45,"url":46},"Pydantic AI release notes: 2.51.0 to 2.55.0 and the 2.52.0 security fix","https:\u002F\u002Fgithub.com\u002Fpydantic\u002Fpydantic-ai\u002Freleases",{"title":48,"url":49},"Pydantic AI version policy","https:\u002F\u002Fai.pydantic.dev\u002Fversion-policy\u002F",{"title":51,"url":52},"Pydantic AI upgrade guide: the V2 betas and the stable release","https:\u002F\u002Fai.pydantic.dev\u002Fproject\u002Fchangelog\u002F",{"title":54,"url":55},"Pydantic AI output: tool output, retries and output validators","https:\u002F\u002Fai.pydantic.dev\u002Foutput\u002F",{"title":57,"url":58},"Pydantic AI dependencies and RunContext","https:\u002F\u002Fai.pydantic.dev\u002Fdependencies\u002F",{"title":60,"url":61},"Pydantic AI models and providers","https:\u002F\u002Fai.pydantic.dev\u002Fmodels\u002Foverview\u002F",{"title":63,"url":64},"Pydantic AI unit testing with TestModel and FunctionModel","https:\u002F\u002Fai.pydantic.dev\u002Ftesting\u002F",{"title":66,"url":67},"Pydantic AI durable execution overview","https:\u002F\u002Fai.pydantic.dev\u002Fdurable_execution\u002Foverview\u002F",{"title":69,"url":70},"Pydantic Logfire: observability for Pydantic AI","https:\u002F\u002Fai.pydantic.dev\u002Flogfire\u002F",{"title":72,"url":73},"Pydantic Logfire pricing","https:\u002F\u002Fpydantic.dev\u002Fpricing",{"title":75,"url":76},"Pydantic security and compliance","https:\u002F\u002Fpydantic.dev\u002Fsecurity",{"title":78,"url":79},"OpenAI Agents SDK documentation","https:\u002F\u002Fopenai.github.io\u002Fopenai-agents-python\u002F",{"title":81,"url":82},"OpenAI Agents SDK tracing","https:\u002F\u002Fopenai.github.io\u002Fopenai-agents-python\u002Ftracing\u002F",{"title":84,"url":85},"openai\u002Fopenai-agents-python on GitHub","https:\u002F\u002Fgithub.com\u002Fopenai\u002Fopenai-agents-python",{"title":87,"url":88},"openai-agents 0.23.1 on PyPI","https:\u002F\u002Fpypi.org\u002Fproject\u002Fopenai-agents\u002F",{"title":90,"url":91},"langchain-ai\u002Flanggraph on GitHub","https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Flanggraph",{"title":93,"url":94},"langgraph 1.2.14 on PyPI","https:\u002F\u002Fpypi.org\u002Fproject\u002Flanggraph\u002F",{"title":96,"url":97},"LangGraph overview","https:\u002F\u002Fdocs.langchain.com\u002Foss\u002Fpython\u002Flanggraph\u002Foverview",{"title":99,"url":100},"LangGraph interrupts","https:\u002F\u002Fdocs.langchain.com\u002Foss\u002Fpython\u002Flanggraph\u002Finterrupts","\u002Fimages\u002Fblog\u002Fpydantic-ai\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fpydantic-ai\u002Fog.jpg","ai-engineer",[105,106,107],"en","de","hu","Pydantic AI review: typed Python agents with validated output","Pydantic AI 2.55 gives Python agents typed dependencies, validated output and OpenTelemetry tracing. What 2.0 changed, what Logfire costs and who should pick it.","Cover art for the Pydantic AI review: a typed agent loop with tools, a validation gate and a retry path back to the model.","https:\u002F\u002Fai.pydantic.dev","MIT · free library, Logfire Team from $49 a month","Pydantic AI review: typed Python agents · Balázs Csorba",[115,116,117,118,119],"Pydantic AI 2.55.0, released on 9 October 2026, is MIT-licensed and free to run. Your costs are model tokens and, if you use it, Logfire records.","The 2.0 line became stable on 23 June 2026 after seven betas and moved configuration onto capabilities, so pin the version and follow the upgrade path.","Dependencies reach your tools through a typed RunContext, and output_type validates every answer, sending a failed check back to the model before your code sees it.","Tracing is opt-in and follows OpenTelemetry, so spans can go to Logfire or to any OpenTelemetry backend. Durable runs need Temporal, DBOS, Prefect, Restate or AWS Lambda.","Pick it for typed Python services. Pick the OpenAI Agents SDK for a small OpenAI-first stack, and LangGraph when explicit graphs, checkpoints and interrupts are the product.",[121,124,127,130],{"q":122,"a":123},"How much does Pydantic AI cost?","As of October 2026, the library is MIT-licensed and free. The bills come from your model provider and, if you use Logfire, from its records: Personal is free up to 10 million records a month with ingestion paused at the cap, Team is $49 a month, Growth is $249 a month, and Enterprise is quoted.",{"q":125,"a":126},"Is the 2.x line stable enough for production?","Yes, with the usual care. Minor releases are not meant to break public APIs, but features in beta modules can change, and each major version removes what was deprecated before. Security fixes for V1 continue for at least six months after the 2.0 stable release, so plan the move.",{"q":128,"a":129},"How does it compare with the OpenAI Agents SDK and LangGraph?","The OpenAI Agents SDK is smaller and turns tracing on by default. LangGraph is built around explicit graphs with checkpoints and interrupts. Pydantic AI sits between them: typed dependencies and validated output for Python code, with a provider prefix for roughly two dozen providers.",{"q":131,"a":132},"Does Logfire receive my prompts?","Only the spans you export. Instrumentation is opt-in, the docs describe how to exclude prompts and completions from spans, and Pydantic offers a Data Processing Addendum, a SOC 2 Type 2 report on request and a list of subprocessors.",[134,137,140,143,146,149,152,155,158],{"id":135,"title":136},"what-it-is","What it is",{"id":138,"title":139},"how-it-works","How it works",{"id":141,"title":142},"getting-started","Getting started",{"id":144,"title":145},"typed-agents-and-validation","Typed dependencies and validated output",{"id":147,"title":148},"tracing-and-durable-runs","Tracing and durable runs",{"id":150,"title":151},"cost-and-deployment","Cost, hosting and data protection",{"id":153,"title":154},"where-it-falls-short","Where it falls short",{"id":156,"title":157},"verdict","Verdict",{"id":159,"title":160},"sources","Sources",[162,166,169,172,197,198,201,210,213,214,217,220,223,224,227,230,252,255,256,265,268,275,276,279,326,329,335,338,345,346,349,359,362,365,409,410,413,437,438],{"type":163,"content":164},"paragraph",[165],"Pydantic AI is the Python agent framework from the team behind Pydantic, the data validation library. Dependencies, tools and results are ordinary Python types, and every structured answer from the model is checked before your code receives it. The verdict up front – use it for typed agents inside Python services, where the team already thinks in Pydantic models. Skip it if your team builds in TypeScript, wants a visual builder as the main way to design workflows, or cannot absorb API changes between releases.",{"type":167,"level":168,"id":135,"text":136},"heading",2,{"type":163,"content":170},[171],"The current release is 2.55.0, published on PyPI on 9 October 2026. It is MIT-licensed, needs Python 3.11 or newer and has about 20,500 stars on GitHub. The project calls itself “how Python does AI”: agents, realtime voice, image generation and embeddings, typed end to end. The 2.0 line became stable on 23 June 2026, so older tutorials may still describe the 1.x API.",{"type":173,"ordered":174,"items":175},"list",false,[176,182,187,192],[177,181],{"tag":178,"children":179},"strong",[180],"Typed dependencies. ","`deps_type` declares what an agent needs, and each run receives an instance through `deps=`.",[183,186],{"tag":178,"children":184},[185],"Validated output. ","`output_type` takes a Pydantic model, a union or a list of types. The model fills it through tool calling by default.",[188,191],{"tag":178,"children":189},[190],"About two dozen providers. ","A prefix such as `openai:`, `anthropic:` or `google:` selects the provider. The directory also covers Groq, Mistral, Ollama and OpenRouter, plus any OpenAI-compatible endpoint.",[193,196],{"tag":178,"children":194},[195],"Capabilities and durability. ","Capabilities bundle tools, hooks, instructions and model settings into one reusable unit. Durable runs plug in through Temporal, DBOS, Prefect, Restate and AWS Lambda.",{"type":167,"level":168,"id":138,"text":139},{"type":163,"content":199},[200],"An agent run is a loop with a check at the end. The agent sends its instructions, the message history and the tool schemas to the model. When the model calls a tool, Pydantic AI runs your Python function with the typed context and returns the result to the model. When the model stops calling tools, its output is validated against `output_type`. A failed check goes back to the model as a retry, and the default budget for output retries is one.",{"type":202,"attrs":203,"inner":207,"caption":208},"diagram",{"viewBox":204,"role":205,"aria-labelledby":206},"0 0 720 330","img","d1-pa-t d1-pa-d","\u003Ctitle id=\"d1-pa-t\">One agent run in Pydantic AI\u003C\u002Ftitle>\u003Cdesc id=\"d1-pa-d\">Your code passes dependencies and input to an agent. The agent sends its instructions and tool schemas to the model. When the model calls a tool, the tool runs with the typed context and its result goes back to the model. When the model finishes, its output is validated against the output type. A failed check goes back to the model as a retry, and a passing answer is returned to your code.\u003C\u002Fdesc>\u003Cdefs>\u003Cmarker id=\"ah-pa\" viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\">\u003Cpath d=\"M0 0L10 5L0 10z\" class=\"d-head\" \u002F>\u003C\u002Fmarker>\u003C\u002Fdefs>\u003Ctext x=\"20\" y=\"28\" class=\"d-title\">One agent run\u003C\u002Ftext>\u003Ctext x=\"700\" y=\"28\" text-anchor=\"end\" class=\"d-label\">same loop for every provider\u003C\u002Ftext>\u003Crect x=\"20\" y=\"60\" width=\"150\" height=\"62\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"95\" y=\"88\" text-anchor=\"middle\" class=\"d-text\">Your code\u003C\u002Ftext>\u003Ctext x=\"95\" y=\"110\" text-anchor=\"middle\" class=\"d-small\">deps and input\u003C\u002Ftext>\u003Crect x=\"200\" y=\"60\" width=\"150\" height=\"62\" rx=\"10\" class=\"d-accent\" \u002F>\u003Ctext x=\"275\" y=\"88\" text-anchor=\"middle\" class=\"d-text\">Agent\u003C\u002Ftext>\u003Ctext x=\"275\" y=\"110\" text-anchor=\"middle\" class=\"d-small\">instructions, tools\u003C\u002Ftext>\u003Crect x=\"380\" y=\"60\" width=\"150\" height=\"62\" rx=\"10\" class=\"d-sky\" \u002F>\u003Ctext x=\"455\" y=\"88\" text-anchor=\"middle\" class=\"d-text\">Model\u003C\u002Ftext>\u003Ctext x=\"455\" y=\"110\" text-anchor=\"middle\" class=\"d-small\">provider prefix\u003C\u002Ftext>\u003Crect x=\"560\" y=\"60\" width=\"140\" height=\"62\" rx=\"10\" class=\"d-mint\" \u002F>\u003Ctext x=\"630\" y=\"88\" text-anchor=\"middle\" class=\"d-text\">Validated output\u003C\u002Ftext>\u003Ctext x=\"630\" y=\"110\" text-anchor=\"middle\" class=\"d-small\">output_type\u003C\u002Ftext>\u003Crect x=\"200\" y=\"190\" width=\"150\" height=\"62\" rx=\"10\" class=\"d-gold\" \u002F>\u003Ctext x=\"275\" y=\"218\" text-anchor=\"middle\" class=\"d-text\">Tool call\u003C\u002Ftext>\u003Ctext x=\"275\" y=\"240\" text-anchor=\"middle\" class=\"d-small\">RunContext[Deps]\u003C\u002Ftext>\u003Crect x=\"380\" y=\"190\" width=\"150\" height=\"62\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"455\" y=\"218\" text-anchor=\"middle\" class=\"d-text\">Retry\u003C\u002Ftext>\u003Ctext x=\"455\" y=\"240\" text-anchor=\"middle\" class=\"d-small\">budget 1 by default\u003C\u002Ftext>\u003Cpath d=\"M170 91 H198\" class=\"d-line\" marker-end=\"url(#ah-pa)\" \u002F>\u003Cpath d=\"M350 91 H378\" class=\"d-line\" marker-end=\"url(#ah-pa)\" \u002F>\u003Cpath d=\"M530 91 H558\" class=\"d-line\" marker-end=\"url(#ah-pa)\" \u002F>\u003Cpath d=\"M240 124 V188\" class=\"d-line\" marker-end=\"url(#ah-pa)\" \u002F>\u003Cpath d=\"M300 188 V124\" class=\"d-line\" marker-end=\"url(#ah-pa)\" \u002F>\u003Cpath d=\"M470 124 V188\" class=\"d-line-accent\" marker-end=\"url(#ah-pa)\" \u002F>\u003Cpath d=\"M410 188 V124\" class=\"d-line\" marker-end=\"url(#ah-pa)\" \u002F>\u003Ctext x=\"478\" y=\"160\" class=\"d-small\">fails check\u003C\u002Ftext>\u003Ctext x=\"20\" y=\"286\" class=\"d-small\">Dependencies reach your functions, never the model.\u003C\u002Ftext>\u003Ctext x=\"20\" y=\"310\" class=\"d-small\">Every answer passes the validation gate before your code sees it.\u003C\u002Ftext>",[209],"Each run loops between the model and the tools, and every answer passes the validation gate before it leaves the agent.",{"type":163,"content":211},[212],"Dependencies are passed to your functions, never to the model. A database pool or an HTTP session can sit next to the agent without appearing in a prompt. The model only sees the instructions, the tool schemas and the messages, which is what makes the boundary worth designing on purpose.",{"type":167,"level":168,"id":141,"text":142},{"type":163,"content":215},[216],"Install with `uv add pydantic-ai` or `pip install pydantic-ai`, then set the credentials your provider expects. The example below is a support triage agent. It takes a typed dependency, calls one tool and returns a validated object.",{"type":218,"code":219},"code","from dataclasses import dataclass\nfrom typing import Literal\n\nfrom pydantic import BaseModel, Field\nfrom pydantic_ai import Agent, RunContext\n\nfrom myshop.orders import OrderService\n\n\n@dataclass\nclass SupportDeps:\n    customer_id: int\n    orders: OrderService  # your own client, injected per run\n\n\nclass Triage(BaseModel):\n    category: Literal['refund', 'shipping', 'other']\n    risk: int = Field(ge=0, le=10, description='How urgently a person should review this')\n    reply: str\n\n\nsupport = Agent(\n    'openai:gpt-6-sol',\n    deps_type=SupportDeps,\n    output_type=Triage,\n    instructions='Triage the message. Check the order before you answer.',\n)\n\n\n@support.tool\nasync def latest_order(ctx: RunContext[SupportDeps]) -> str:\n    '''Return the status of the most recent order.'''\n    return await ctx.deps.orders.latest_status(ctx.deps.customer_id)\n\n\nresult = support.run_sync(\n    'Where is my parcel?',\n    deps=SupportDeps(customer_id=42, orders=OrderService()),\n)\nprint(result.output.category, result.output.risk)",{"type":163,"content":221},[222],"Two parts of that code do the work. The `Triage` class is both the schema sent to the model and the type your code receives. An answer outside the allowed categories or the 0 to 10 risk range is retried and, if it still fails, raises an error instead of reaching your code. The `RunContext[SupportDeps]` annotation gives the tool a typed view of your client, so the editor can check every attribute you use.",{"type":167,"level":168,"id":144,"text":145},{"type":163,"content":225},[226],"Dependencies are the part I would adopt first. `deps_type` declares the type, `RunContext[Deps]` gives tools, instructions and output validators access to `ctx.deps`, and a test can swap the real client for a fake with `agent.override(deps=...)`. The wiring stays in the constructor and the run call rather than in module-level globals, which keeps the agent easy to test.",{"type":163,"content":228},[229],"Output is where the framework earns its keep. By default the model returns structured data through its tool-calling interface, and a union of types becomes one output tool per member. The `TextOutput` and `PromptedOutput` markers switch to plain text for models with unreliable tool calling. `ToolOutput` gives one output tool its own retry budget, so a complex type can get more attempts than a simple one.",{"type":173,"ordered":174,"items":231},[232,237,242,247],[233,236],{"tag":178,"children":234},[235],"`ModelRetry` ","lets a tool or output function reject a value and tell the model what to change.",[238,241],{"tag":178,"children":239},[240],"`@agent.output_validator` ","runs your own checks after parsing, for example that an order number in the answer exists.",[243,246],{"tag":178,"children":244},[245],"`Agent(retries={'output': N})` ","raises the output retry budget for the whole agent. The default is one.",[248,251],{"tag":178,"children":249},[250],"`ToolOutput(Fruit, max_retries=2)` ","gives one output type its own retry count.",{"type":163,"content":253},[254],"Testing is where the design pays back. `TestModel` calls every tool and returns a structurally valid answer, `FunctionModel` lets a test script the model’s reply, and `ALLOW_MODEL_REQUESTS=False` blocks accidental calls to real providers in CI. A unit test of the support flow then needs no API key and no network.",{"type":167,"level":168,"id":147,"text":148},{"type":163,"content":257},[258,259,264],"Tracing is opt-in. Call `logfire.configure()` and `logfire.instrument_pydantic_ai()` at start-up, and each run, model response and tool call becomes an OpenTelemetry span that follows the generative AI semantic conventions. The Logfire SDK can send the same data to any OpenTelemetry backend, which matters if the telemetry has to stay in a system the team already runs. For the wider case, read ",{"tag":260,"to":261,"children":262},"link","\u002Fblog\u002Fagent-observability-opentelemetry",[263],"agent observability with OpenTelemetry",".",{"type":163,"content":266},[267],"Durable execution is the second feature to understand. The docs list eight engines. Temporal, DBOS, Prefect, Restate and AWS Lambda are co-maintained with their vendors, and Kitaru, Apache Airflow and Absurd come as external integrations. In 2.x you attach a durability capability to the agent. The README example adds `TemporalDurability()` to an agent’s capabilities inside a Temporal workflow.",{"type":269,"variant":270,"title":271,"body":272},"callout","warn","Durable is not the same as saved",[273],[274],"A durable engine keeps one run alive across crashes and restarts. It does not store your chat threads. The docs treat saving a conversation and resuming it later as a separate problem, so plan that storage on purpose.",{"type":167,"level":168,"id":150,"text":151},{"type":163,"content":277},[278],"As of October 2026, the library costs nothing to run. The licence covers the code, so the bills come from three places: model tokens from your provider, Logfire records if you use Logfire, and the infrastructure for a durable engine if you adopt one. The Logfire plans show the shape of the second bill.",{"type":280,"head":281,"rows":290},"table",[282,284,286,288],[283],"Plan",[285],"Price",[287],"Included",[289],"What changes",[291,300,309,317],[292,294,296,298],[293],"Personal",[295],"Free",[297],"10M records a month, hard-capped",[299],"3 projects, 30-day retention, 1 seat and 2 read-only guests",[301,303,305,307],[302],"Team",[304],"$49 a month",[306],"10M records, then $2 per million",[308],"5 seats (up to 12), 10 guests, 5 projects, 30-day retention, spending cap",[310,312,314,315],[311],"Growth",[313],"$249 a month",[306],[316],"Unlimited seats, guests and projects, 90-day retention, priority support and a BAA template",[318,320,322,324],[319],"Enterprise",[321],"Custom",[323],"By contract",[325],"Cloud, Dedicated or Self-hosted; SSO, SCIM and an SLA",{"type":163,"content":327},[328],"Logfire bills records: logs, spans and metrics. The included 10 million a month are covered by the plan credit, and above that Team and Growth charge $2 per million. A team that sends 30 million records a month pays $49 plus $40 for the extra 20 million, about $89 before any model tokens. The AI gateway adds a 5 percent markup on built-in providers, while up to three of your own provider keys pass through without markup.",{"type":269,"variant":330,"title":331,"body":332},"tip","Set the cap before the first load test",[333],[334],"Personal stops ingesting at 10 million records, and Team offers a spending cap. Switch the cap on before a load test or a bulk eval run, not after the first surprising invoice.",{"type":163,"content":336},[337],"Self-hosting the library is the default, because it is just code in your own environment. Logfire’s Enterprise tier adds a self-hosted option on your own Kubernetes cluster. For data protection, three flows matter. The model provider receives prompts and tool results, so its data processing terms and region come first. Logfire receives every span you export, so exclude prompts and completions at source where you do not need them. Pydantic offers a Data Processing Addendum for GDPR, a SOC 2 Type 2 report on request and a published list of subprocessors.",{"type":163,"content":339},[340,341],"Region is a setting to check on every plan. The plan matrix ticks EU or US data region for each hosted plan, from Personal to Enterprise Cloud. Enterprise Dedicated offers any Google Cloud region, and self-hosting keeps the data wherever you run it. The pricing page does not say which region a new project gets by default, so check that before you send personal data. ",{"tag":260,"to":342,"children":343},"\u002Fblog\u002Fgdpr-llm-api-eu-data-residency",[344],"The wider data residency question for model APIs is covered in a separate article.",{"type":167,"level":168,"id":153,"text":154},{"type":163,"content":347},[348],"The main risk is churn – and the changelog is open about it. The 2.0 line went through seven betas between 20 May and 10 June 2026 before the stable release on 23 June. Its breaking changes come in two groups: removals that the V1 deprecation warnings could not announce, and changes that V1 did warn about. Removed items include the Outlines integration and its extras, and `ModelProfile` changed from a dataclass to a TypedDict. A migration is a real task, not a version bump.",{"type":269,"variant":350,"title":351,"body":352},"note","Upgrade in this order",[353,355,357],[354],"Move to the latest V1 release, at least 1.100.0, where most of the removals were first deprecated.",[356],"Run the test suite with warnings visible and fix every deprecation warning.",[358],"Read the breaking-change list, then move to 2.x and pin the version.",{"type":163,"content":360},[361],"Minor releases are frequent too. Version 2.51.0 came out on 25 September 2026 and 2.55.0 on 9 October, so a loosely pinned project sees several changes in a fortnight. The version policy promises no intentional breaking changes in minor releases, but features in a beta module are explicitly unstable and may change in ways that break existing code. Treat any import from a beta module as a pinned dependency.",{"type":163,"content":363},[364],"Keep an eye on the security notes as well. Release 2.52.0 fixed a CPU and memory problem in the local `web_fetch` tool, where deeply nested HTML could consume excessive resources. Provider-native web fetching was not affected. Finally – it is a Python library. Teams that build agents in TypeScript need a different framework, and durable engines add infrastructure that someone must run or buy.",{"type":280,"head":366,"rows":377},[367,369,371,373,375],[368],"Tool",[370],"Licence",[372],"Version, October 2026",[374],"Strongest at",[376],"Tracing",[378,389,399],[379,381,383,385,387],[380],"Pydantic AI",[382],"MIT",[384],"2.55.0",[386],"Typed dependencies and validated output in Python",[388],"Opt-in, through Logfire or OpenTelemetry",[390,392,393,395,397],[391],"OpenAI Agents SDK",[382],[394],"0.23.1",[396],"Very few primitives: agents, handoffs, guardrails, sessions",[398],"On by default, exported to OpenAI unless disabled",[400,402,403,405,407],[401],"LangGraph",[382],[404],"1.2.14",[406],"Explicit graphs with checkpoints, interrupts and fault tolerance",[408],"LangSmith, a separate platform",{"type":167,"level":168,"id":156,"text":157},{"type":163,"content":411},[412],"Pydantic AI is my default for a Python team that already models its data with Pydantic and wants agents that are typed, testable and easy to run beside the rest of the service. It is the wrong choice for a TypeScript codebase, for a team that wants a visual graph editor as its main design tool, and for any team that cannot absorb API changes between releases. In those cases, the alternatives below fit better.",{"type":173,"ordered":414,"items":415},true,[416,421,429],[417,420],{"tag":178,"children":418},[419],"Adopt Pydantic AI ","when your services are Python, your data is already modelled in Pydantic and you want typed tools and validated output.",[422,425,428],{"tag":178,"children":423},[424],"Pick the ",{"tag":260,"to":426,"children":427},"\u002Ftools\u002Fopenai-agents-sdk",[391]," when you are committed to OpenAI and want very few primitives. Turn tracing off or add your own processor before real customer data flows through it.",[430,433,436],{"tag":178,"children":431},[432],"Pick ",{"tag":260,"to":434,"children":435},"\u002Ftools\u002Flanggraph",[401]," when the workflow is the product: explicit state, checkpoints and named approval steps. You write more code, and you control every transition.",{"type":167,"level":168,"id":159,"text":160},{"type":173,"ordered":174,"items":439},[440,444,447,450,453,456,459,462,465,468,471,474,477,480,483,486,489,492,495,498,501,504],[441],{"tag":442,"href":37,"children":443},"a",[36],[445],{"tag":442,"href":40,"children":446},[39],[448],{"tag":442,"href":43,"children":449},[42],[451],{"tag":442,"href":46,"children":452},[45],[454],{"tag":442,"href":49,"children":455},[48],[457],{"tag":442,"href":52,"children":458},[51],[460],{"tag":442,"href":55,"children":461},[54],[463],{"tag":442,"href":58,"children":464},[57],[466],{"tag":442,"href":61,"children":467},[60],[469],{"tag":442,"href":64,"children":470},[63],[472],{"tag":442,"href":67,"children":473},[66],[475],{"tag":442,"href":70,"children":476},[69],[478],{"tag":442,"href":73,"children":479},[72],[481],{"tag":442,"href":76,"children":482},[75],[484],{"tag":442,"href":79,"children":485},[78],[487],{"tag":442,"href":82,"children":488},[81],[490],{"tag":442,"href":85,"children":491},[84],[493],{"tag":442,"href":88,"children":494},[87],[496],{"tag":442,"href":91,"children":497},[90],[499],{"tag":442,"href":94,"children":500},[93],[502],{"tag":442,"href":97,"children":503},[96],[505],{"tag":442,"href":100,"children":506},[99],[508,616,735,845],{"slug":509,"published":510,"minutes":6,"category":7,"tags":511,"keywords":517,"about":525,"sources":538,"cover":608,"og":609,"expertise":103,"locales":610,"lang":105,"title":611,"description":612,"coverAlt":613,"url":528,"pricing":614,"kind":615},"opencode","2026-10-09",[512,513,514,515,516],"AI coding agent","Terminal","Open source","Local models","MCP",[509,518,519,520,521,522,523,524],"opencode review","open source coding agent","opencode vs claude code","terminal coding agent","opencode local models","opencode permissions","opencode mcp",[526,529,532,535],{"name":527,"url":528},"OpenCode","https:\u002F\u002Fopencode.ai",{"name":530,"url":531},"Large language model","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FLarge_language_model",{"name":533,"url":534},"Model Context Protocol","https:\u002F\u002Fmodelcontextprotocol.io",{"name":536,"url":537},"Language Server Protocol","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FLanguage_Server_Protocol",[539,542,545,548,551,554,557,560,563,566,569,572,575,578,581,584,587,590,593,596,599,602,605],{"title":540,"url":541},"OpenCode docs: intro and installation","https:\u002F\u002Fopencode.ai\u002Fdocs\u002F",{"title":543,"url":544},"OpenCode docs: providers, Models.dev and local models","https:\u002F\u002Fopencode.ai\u002Fdocs\u002Fproviders\u002F",{"title":546,"url":547},"OpenCode docs: agents, Build, Plan and subagents","https:\u002F\u002Fopencode.ai\u002Fdocs\u002Fagents\u002F",{"title":549,"url":550},"OpenCode docs: permissions and defaults","https:\u002F\u002Fopencode.ai\u002Fdocs\u002Fpermissions\u002F",{"title":552,"url":553},"OpenCode docs: MCP servers","https:\u002F\u002Fopencode.ai\u002Fdocs\u002Fmcp-servers\u002F",{"title":555,"url":556},"OpenCode docs: LSP servers","https:\u002F\u002Fopencode.ai\u002Fdocs\u002Flsp\u002F",{"title":558,"url":559},"OpenCode docs: server and web interface","https:\u002F\u002Fopencode.ai\u002Fdocs\u002Fserver\u002F",{"title":561,"url":562},"OpenCode docs: config and precedence","https:\u002F\u002Fopencode.ai\u002Fdocs\u002Fconfig\u002F",{"title":564,"url":565},"OpenCode docs: Zen, pay-as-you-go models","https:\u002F\u002Fopencode.ai\u002Fdocs\u002Fzen\u002F",{"title":567,"url":568},"OpenCode docs: Go subscription plans","https:\u002F\u002Fopencode.ai\u002Fdocs\u002Fgo\u002F",{"title":570,"url":571},"OpenCode docs: share and data retention","https:\u002F\u002Fopencode.ai\u002Fdocs\u002Fshare\u002F",{"title":573,"url":574},"OpenCode docs: enterprise and data handling","https:\u002F\u002Fopencode.ai\u002Fdocs\u002Fenterprise\u002F",{"title":576,"url":577},"GitHub: anomalyco\u002Fopencode, MIT licence and README","https:\u002F\u002Fgithub.com\u002Fanomalyco\u002Fopencode",{"title":579,"url":580},"OpenCode release v1.18.35 (6 October 2026)","https:\u002F\u002Fgithub.com\u002Fanomalyco\u002Fopencode\u002Freleases\u002Ftag\u002Fv1.18.35",{"title":582,"url":583},"Claude Code licence file (LICENSE.md)","https:\u002F\u002Fraw.githubusercontent.com\u002Fanthropics\u002Fclaude-code\u002Fmain\u002FLICENSE.md",{"title":585,"url":586},"Claude pricing: plans and Claude Code access","https:\u002F\u002Fclaude.com\u002Fpricing",{"title":588,"url":589},"Claude Code docs: connect to an LLM gateway","https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fllm-gateway",{"title":591,"url":592},"OpenAI Codex CLI repository (Apache-2.0)","https:\u002F\u002Fgithub.com\u002Fopenai\u002Fcodex",{"title":594,"url":595},"ChatGPT pricing: Codex included in plans","https:\u002F\u002Flearn.chatgpt.com\u002Fdocs\u002Fpricing",{"title":597,"url":598},"Codex configuration: model providers and config.toml","https:\u002F\u002Flearn.chatgpt.com\u002Fdocs\u002Fconfig-file\u002Fconfig-advanced",{"title":600,"url":601},"Aider website: git integration and LLM support","https:\u002F\u002Faider.chat\u002F",{"title":603,"url":604},"Aider licence file (Apache-2.0)","https:\u002F\u002Fraw.githubusercontent.com\u002FAider-AI\u002Faider\u002Fmain\u002FLICENSE.txt",{"title":606,"url":607},"GDPR, Regulation (EU) 2016\u002F679, Article 28","https:\u002F\u002Feur-lex.europa.eu\u002Flegal-content\u002FEN\u002FTXT\u002FHTML\u002F?uri=CELEX:32016R0679","\u002Fimages\u002Fblog\u002Fopencode\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fopencode\u002Fog.jpg",[105,106,107],"OpenCode review: the open-source coding agent for any model","OpenCode is an MIT-licensed terminal coding agent for any model, hosted or local. Agents, permissions, MCP and LSP, plus the data-protection trade-offs.","Cover art for the OpenCode review: one agent loop in the terminal fanning out to a hosted API, a local model and Zen.","MIT · free, you pay the model provider","Coding agent",{"slug":617,"published":618,"minutes":619,"category":7,"tags":620,"keywords":625,"about":634,"sources":645,"cover":727,"og":728,"expertise":103,"locales":729,"lang":105,"title":730,"description":731,"coverAlt":732,"url":733,"pricing":734,"kind":615},"gemini-cli","2026-10-07",9,[621,622,516,623,624],"Terminal agent","Gemini","Sandboxing","Data protection",[626,627,628,629,630,631,632,633],"gemini cli","gemini cli free tier","gemini cli pricing","gemini cli data privacy","gemini cli vs claude code","antigravity cli","gemini cli github action","gemini cli sandbox",[635,638,641,644],{"name":636,"url":637},"Gemini CLI","https:\u002F\u002Fgithub.com\u002Fgoogle-gemini\u002Fgemini-cli",{"name":639,"url":640},"Vertex AI","https:\u002F\u002Fcloud.google.com\u002Fvertex-ai",{"name":642,"url":643},"Apache License","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FApache_License",{"name":533,"url":534},[646,649,652,655,657,660,663,666,669,672,675,678,681,684,687,690,693,696,699,701,704,707,710,713,716,719,721,724],{"title":647,"url":648},"Google Developers Blog: transitioning Gemini CLI to Antigravity CLI","https:\u002F\u002Fdevelopers.googleblog.com\u002Fen\u002Fan-important-update-transitioning-gemini-cli-to-antigravity-cli\u002F",{"title":650,"url":651},"Gemini CLI: quotas and pricing","https:\u002F\u002Fgeminicli.com\u002Fdocs\u002Fresources\u002Fquota-and-pricing\u002F",{"title":653,"url":654},"Gemini CLI: licence, terms of service and privacy notices","https:\u002F\u002Fgeminicli.com\u002Fdocs\u002Fresources\u002Ftos-privacy",{"title":656,"url":637},"GitHub: google-gemini\u002Fgemini-cli, the repository and README",{"title":658,"url":659},"Gemini CLI changelog: v0.63.0 released 6 October 2026","https:\u002F\u002Fgithub.com\u002Fgoogle-gemini\u002Fgemini-cli\u002Fblob\u002Fmain\u002Fdocs\u002Fchangelogs\u002Flatest.md",{"title":661,"url":662},"Gemini CLI reference: flags and approval modes","https:\u002F\u002Fgithub.com\u002Fgoogle-gemini\u002Fgemini-cli\u002Fblob\u002Fmain\u002Fdocs\u002Fcli\u002Fcli-reference.md",{"title":664,"url":665},"Gemini CLI configuration: settings.json and approval defaults","https:\u002F\u002Fgithub.com\u002Fgoogle-gemini\u002Fgemini-cli\u002Fblob\u002Fmain\u002Fdocs\u002Freference\u002Fconfiguration.md",{"title":667,"url":668},"Gemini CLI sandboxing","https:\u002F\u002Fgithub.com\u002Fgoogle-gemini\u002Fgemini-cli\u002Fblob\u002Fmain\u002Fdocs\u002Fcli\u002Fsandbox.md",{"title":670,"url":671},"Gemini CLI: context files (GEMINI.md)","https:\u002F\u002Fgithub.com\u002Fgoogle-gemini\u002Fgemini-cli\u002Fblob\u002Fmain\u002Fdocs\u002Fcli\u002Fgemini-md.md",{"title":673,"url":674},"Gemini CLI: MCP servers","https:\u002F\u002Fgithub.com\u002Fgoogle-gemini\u002Fgemini-cli\u002Fblob\u002Fmain\u002Fdocs\u002Ftools\u002Fmcp-server.md",{"title":676,"url":677},"Gemini API Additional Terms of Service","https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fterms",{"title":679,"url":680},"Gemini Developer API pricing","https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\u002Fpricing",{"title":682,"url":683},"Gemini Code Assist FAQs","https:\u002F\u002Fdocs.cloud.google.com\u002Fgemini\u002Fdocs\u002Fcodeassist\u002Ffaqs",{"title":685,"url":686},"Vertex AI data governance and zero data retention","https:\u002F\u002Fdocs.cloud.google.com\u002Fvertex-ai\u002Fgenerative-ai\u002Fdocs\u002Fdata-governance",{"title":688,"url":689},"Vertex AI data residency","https:\u002F\u002Fdocs.cloud.google.com\u002Fvertex-ai\u002Fgenerative-ai\u002Fdocs\u002Flearn\u002Fdata-residency",{"title":691,"url":692},"Vertex AI locations and endpoints","https:\u002F\u002Fdocs.cloud.google.com\u002Fvertex-ai\u002Fgenerative-ai\u002Fdocs\u002Flearn\u002Flocations",{"title":694,"url":695},"run-gemini-cli: the GitHub Action for Gemini CLI","https:\u002F\u002Fgithub.com\u002Fgoogle-github-actions\u002Frun-gemini-cli",{"title":697,"url":698},"Antigravity CLI migration guide","https:\u002F\u002Fantigravity.google\u002Fdocs\u002Fcli\u002Fgcli-migration",{"title":700,"url":586},"Claude pricing",{"title":702,"url":703},"Claude Code: data usage","https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fdata-usage",{"title":705,"url":706},"Claude Code: setup and plan requirements","https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fsetup",{"title":708,"url":709},"Claude Code: permission modes","https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fpermission-modes",{"title":711,"url":712},"Claude Code: sandboxing","https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fsandboxing",{"title":714,"url":715},"Claude Code licence (LICENSE.md)","https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-code\u002Fblob\u002Fmain\u002FLICENSE.md",{"title":717,"url":718},"OpenAI Codex pricing","https:\u002F\u002Fdevelopers.openai.com\u002Fcodex\u002Fpricing",{"title":720,"url":592},"OpenAI Codex CLI repository",{"title":722,"url":723},"Codex: agent approvals and security","https:\u002F\u002Fdevelopers.openai.com\u002Fcodex\u002Fagent-approvals-security",{"title":725,"url":726},"Codex: sandboxing","https:\u002F\u002Fdevelopers.openai.com\u002Fcodex\u002Fconcepts\u002Fsandboxing","\u002Fimages\u002Fblog\u002Fgemini-cli\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fgemini-cli\u002Fog.jpg",[105,106,107],"Gemini CLI review: open source, but no longer free for individuals","Gemini CLI stays Apache-2.0 and gets releases, but the free individual route closed on 18 June 2026. What remains: Code Assist, billed API keys and Vertex AI.","Cover art for the Gemini CLI review: a prompt loop through an approval gate and a sandbox, with the free lane closed","https:\u002F\u002Fwww.geminicli.com","Apache-2.0 · free individual tier closed 18 June 2026",{"slug":736,"published":618,"minutes":6,"category":7,"tags":737,"keywords":743,"about":752,"sources":763,"cover":837,"og":838,"expertise":103,"locales":839,"lang":105,"title":840,"description":841,"coverAlt":842,"url":755,"pricing":843,"kind":844},"temporal",[738,739,740,741,742],"Durable execution","Workflow orchestration","Human in the loop","AI agents","Self-hosting",[744,745,746,747,748,749,750,751],"temporal workflow","temporal ai agents","durable execution for ai agents","temporal vs langgraph","temporal cloud pricing","temporal openai agents sdk","self-hosted temporal","temporal determinism rules",[753,756,759,760],{"name":754,"url":755},"Temporal","https:\u002F\u002Ftemporal.io",{"name":757,"url":758},"Workflow engine","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWorkflow_engine",{"name":530,"url":531},{"name":761,"url":762},"Human-in-the-loop","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FHuman-in-the-loop",[764,767,770,773,776,779,782,785,788,791,794,797,800,803,806,809,812,815,818,821,824,827,828,831,834],{"title":765,"url":766},"Temporal Cloud pricing","https:\u002F\u002Ftemporal.io\u002Fpricing",{"title":768,"url":769},"Temporal Cloud pricing documentation","https:\u002F\u002Fdocs.temporal.io\u002Fcloud\u002Fpricing",{"title":771,"url":772},"OpenAI Agents SDK integration for Python","https:\u002F\u002Fdocs.temporal.io\u002Fdevelop\u002Fpython\u002Fintegrations\u002Fopenai-agents",{"title":774,"url":775},"Workflow definition and determinism","https:\u002F\u002Fdocs.temporal.io\u002Fworkflow-definition",{"title":777,"url":778},"Retry policies","https:\u002F\u002Fdocs.temporal.io\u002Fencyclopedia\u002Fretry-policies",{"title":780,"url":781},"Activity timeouts","https:\u002F\u002Fdocs.temporal.io\u002Fencyclopedia\u002Fdetecting-activity-failures",{"title":783,"url":784},"Cloud actions reference","https:\u002F\u002Fdocs.temporal.io\u002Fcloud\u002Factions",{"title":786,"url":787},"Event history limits","https:\u002F\u002Fdocs.temporal.io\u002Fworkflow-execution\u002Fevent",{"title":789,"url":790},"Message passing in Python: signals, queries and updates","https:\u002F\u002Fdocs.temporal.io\u002Fdevelop\u002Fpython\u002Fmessage-passing",{"title":792,"url":793},"Human-in-the-loop AI agent sample","https:\u002F\u002Fdocs.temporal.io\u002Fai\u002Fcookbook\u002Fhuman-in-the-loop-python",{"title":795,"url":796},"Cloud security model","https:\u002F\u002Fdocs.temporal.io\u002Fcloud\u002Fsecurity",{"title":798,"url":799},"Cloud service regions","https:\u002F\u002Fdocs.temporal.io\u002Fcloud\u002Fregions",{"title":801,"url":802},"Data processing agreement","https:\u002F\u002Ftemporal.io\u002Fdpa",{"title":804,"url":805},"Self-hosted deployment guide","https:\u002F\u002Fdocs.temporal.io\u002Fself-hosted-guide\u002Fdeployment",{"title":807,"url":808},"Self-hosted production checklist","https:\u002F\u002Fdocs.temporal.io\u002Fself-hosted-guide\u002Fproduction-checklist",{"title":810,"url":811},"Self-hosted visibility stores","https:\u002F\u002Fdocs.temporal.io\u002Fself-hosted-guide\u002Fvisibility",{"title":813,"url":814},"Temporal Server architecture","https:\u002F\u002Fdocs.temporal.io\u002Ftemporal-service\u002Ftemporal-server",{"title":816,"url":817},"Temporal server LICENSE file","https:\u002F\u002Fgithub.com\u002Ftemporalio\u002Ftemporal\u002Fblob\u002Fmain\u002FLICENSE",{"title":819,"url":820},"Temporal integrations index","https:\u002F\u002Fdocs.temporal.io\u002Fintegrations",{"title":822,"url":823},"LangGraph integration with Temporal","https:\u002F\u002Fdocs.temporal.io\u002Fdevelop\u002Fpython\u002Fintegrations\u002Flanggraph",{"title":825,"url":826},"LangGraph persistence","https:\u002F\u002Fdocs.langchain.com\u002Foss\u002Fpython\u002Flanggraph\u002Fpersistence",{"title":99,"url":100},{"title":829,"url":830},"Self-hosted guide and development server","https:\u002F\u002Fdocs.temporal.io\u002Fself-hosted-guide",{"title":832,"url":833},"Python SDK reference: workflow.wait_condition","https:\u002F\u002Fpython.temporal.io\u002Ftemporalio.workflow._context.html",{"title":835,"url":836},"Python SDK reference: ApplicationError","https:\u002F\u002Fpython.temporal.io\u002Ftemporalio.exceptions.ApplicationError.html","\u002Fimages\u002Fblog\u002Ftemporal\u002Fcover.webp","\u002Fimages\u002Fblog\u002Ftemporal\u002Fog.jpg",[105,106,107],"Temporal review: durable agents that survive crashes and wait for people","Temporal runs agent loops as durable workflows, so retries, approvals and timers survive crashes. Costs, data residency, determinism rules and when to skip it.","Cover art for the Temporal review: a workflow that retries model calls as activities and pauses until a person signs off.","MIT · self-hosting free · Cloud pay-as-you-go from $0","Durable execution platform",{"slug":846,"published":847,"minutes":848,"category":7,"tags":849,"keywords":853,"about":862,"sources":874,"cover":965,"og":966,"expertise":103,"locales":967,"lang":105,"title":968,"description":969,"coverAlt":970,"url":865,"pricing":971,"kind":972},"e2b","2026-10-02",12,[850,741,851,742,852],"Code sandbox","Firecracker","EU data residency",[854,855,856,857,858,859,860,861],"e2b sandbox","e2b pricing","e2b vs modal","e2b self-hosted","e2b code interpreter","ai agent code execution sandbox","e2b eu region","firecracker microvm for ai agents",[863,866,868,871],{"name":864,"url":865},"E2B","https:\u002F\u002Fe2b.dev",{"name":851,"url":867},"https:\u002F\u002Ffirecracker-microvm.github.io\u002F",{"name":869,"url":870},"Kernel-based Virtual Machine","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FKernel-based_Virtual_Machine",{"name":872,"url":873},"General Data Protection Regulation","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FGeneral_Data_Protection_Regulation",[875,878,881,884,887,890,893,896,899,902,905,908,911,914,917,920,923,926,929,932,935,938,941,944,947,950,953,956,959,962],{"title":876,"url":877},"E2B documentation: isolated sandboxes for agents","https:\u002F\u002Fe2b.dev\u002Fdocs",{"title":879,"url":880},"E2B billing and limits: plans, rates and API rate limits","https:\u002F\u002Fdocs.e2b.dev\u002Fbilling",{"title":882,"url":883},"E2B: how long a sandbox lives, timeouts and auto-pause","https:\u002F\u002Fdocs.e2b.dev\u002Ffaq\u002Fsandbox-lifetime",{"title":885,"url":886},"E2B: sandbox persistence, pause and resume","https:\u002F\u002Fdocs.e2b.dev\u002Fsandbox\u002Fpersistence",{"title":888,"url":889},"E2B: how template builds work, snapshots and kernel versions","https:\u002F\u002Fdocs.e2b.dev\u002Ftemplate\u002Fhow-it-works",{"title":891,"url":892},"E2B: template quickstart, build limits and templates versus snapshots","https:\u002F\u002Fdocs.e2b.dev\u002Ftemplate\u002Fquickstart",{"title":894,"url":895},"E2B: running your first sandbox","https:\u002F\u002Fdocs.e2b.dev\u002Fquickstart",{"title":897,"url":898},"E2B: run Python code in the code interpreter","https:\u002F\u002Fdocs.e2b.dev\u002Fcode-interpreting\u002Fsupported-languages\u002Fpython",{"title":900,"url":901},"E2B: internet access controls","https:\u002F\u002Fdocs.e2b.dev\u002Fnetwork\u002Finternet-access",{"title":903,"url":904},"E2B: secrets injected by the egress proxy","https:\u002F\u002Fdocs.e2b.dev\u002Fsecrets",{"title":906,"url":907},"E2B: is it SOC 2 compliant? Trust Center, DPA and sub-processors","https:\u002F\u002Fdocs.e2b.dev\u002Ffaq\u002Fsecurity-and-compliance",{"title":909,"url":910},"E2B: can I run sandboxes in the EU?","https:\u002F\u002Fdocs.e2b.dev\u002Ffaq\u002Feu-region",{"title":912,"url":913},"E2B: egress IP ranges and regions","https:\u002F\u002Fdocs.e2b.dev\u002Ffaq\u002Fegress-ip-ranges",{"title":915,"url":916},"E2B: does it support GPUs?","https:\u002F\u002Fdocs.e2b.dev\u002Ffaq\u002Fgpu-support",{"title":918,"url":919},"E2B: how to calculate the price of a sandbox, with current rates","https:\u002F\u002Fdocs.e2b.dev\u002Ffaq\u002Fcalculate-sandbox-price",{"title":921,"url":922},"E2B: Volumes beta limitations: file locking, mounts and regions","https:\u002F\u002Fdocs.e2b.dev\u002Ffaq\u002Fvolumes-beta-limitations",{"title":924,"url":925},"E2B: bring your own cloud (BYOC)","https:\u002F\u002Fdocs.e2b.dev\u002Fbyoc",{"title":927,"url":928},"E2B changelog: E2B Embed, the access token change and weekly releases","https:\u002F\u002Fdocs.e2b.dev\u002Fchangelog",{"title":930,"url":931},"E2B Embed: self-hosting on one machine (README)","https:\u002F\u002Fgithub.com\u002Fe2b-dev\u002Fruntime\u002Ftree\u002Fmain\u002Fembed",{"title":933,"url":934},"E2B Embed: Docker Compose requirements and sizing","https:\u002F\u002Fgithub.com\u002Fe2b-dev\u002Fruntime\u002Fblob\u002Fmain\u002Fembed\u002Fcompose\u002FREADME.md",{"title":936,"url":937},"E2B SDK repository, Apache-2.0","https:\u002F\u002Fgithub.com\u002Fe2b-dev\u002FE2B",{"title":939,"url":940},"Firecracker: lightweight microVMs on KVM","https:\u002F\u002Fgithub.com\u002Ffirecracker-microvm\u002Ffirecracker",{"title":942,"url":943},"Modal pricing: per-second CPU, memory and GPU","https:\u002F\u002Fmodal.com\u002Fpricing",{"title":945,"url":946},"Modal sandboxes: lifetime, gVisor and VM runtimes","https:\u002F\u002Fmodal.com\u002Fdocs\u002Fguide\u002Fsandbox",{"title":948,"url":949},"Modal region selection: region codes","https:\u002F\u002Fmodal.com\u002Fdocs\u002Fguide\u002Fregion-selection",{"title":951,"url":952},"Daytona pricing: vCPU and GiB rates","https:\u002F\u002Fwww.daytona.io\u002Fpricing",{"title":954,"url":955},"Daytona documentation: sandbox isolation and start time","https:\u002F\u002Fwww.daytona.io\u002Fdocs\u002Fen\u002F",{"title":957,"url":958},"Daytona regions: shared United States and Europe","https:\u002F\u002Fwww.daytona.io\u002Fdocs\u002Fen\u002Fregions\u002F",{"title":960,"url":961},"Docker security: kernel namespaces, control groups and capabilities","https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Fsecurity\u002F",{"title":963,"url":964},"Regulation (EU) 2016\u002F679 (GDPR), EUR-Lex","https:\u002F\u002Feur-lex.europa.eu\u002Feli\u002Freg\u002F2016\u002F679\u002Foj","\u002Fimages\u002Fblog\u002Fe2b\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fe2b\u002Fog.jpg",[105,106,107],"E2B review: Firecracker sandboxes for agent code, billed per second","E2B runs each agent run in its own Firecracker microVM, with pause, resume and per-second billing. Where it fits, what the EU option costs and where self-hosting stops.","Cover art for the E2B review: agent code goes through an API into a microVM sandbox, and the result comes back into the loop.","Usage-based · Hobby free, Pro from $150 a month","Code execution sandbox",1791636874612]