[{"data":1,"prerenderedAt":1115},["ShallowReactive",2],{"tool-temporal-hu":3},{"slug":4,"published":5,"minutes":6,"category":7,"tags":8,"keywords":14,"about":23,"sources":36,"cover":112,"og":113,"expertise":114,"locales":115,"lang":118,"title":119,"description":120,"coverAlt":121,"url":26,"pricing":122,"kind":123,"metaTitle":124,"takeaways":125,"faq":131,"toc":144,"blocks":172,"others":660},"temporal","2026-10-07",8,"agents",[9,10,11,12,13],"Durable execution","Workflow orchestration","Human in the loop","AI agents","Self-hosting",[15,16,17,18,19,20,21,22],"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",[24,27,30,33],{"name":25,"url":26},"Temporal","https:\u002F\u002Ftemporal.io",{"name":28,"url":29},"Workflow engine","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWorkflow_engine",{"name":31,"url":32},"Large language model","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FLarge_language_model",{"name":34,"url":35},"Human-in-the-loop","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FHuman-in-the-loop",[37,40,43,46,49,52,55,58,61,64,67,70,73,76,79,82,85,88,91,94,97,100,103,106,109],{"title":38,"url":39},"Temporal Cloud pricing","https:\u002F\u002Ftemporal.io\u002Fpricing",{"title":41,"url":42},"Temporal Cloud pricing documentation","https:\u002F\u002Fdocs.temporal.io\u002Fcloud\u002Fpricing",{"title":44,"url":45},"OpenAI Agents SDK integration for Python","https:\u002F\u002Fdocs.temporal.io\u002Fdevelop\u002Fpython\u002Fintegrations\u002Fopenai-agents",{"title":47,"url":48},"Workflow definition and determinism","https:\u002F\u002Fdocs.temporal.io\u002Fworkflow-definition",{"title":50,"url":51},"Retry policies","https:\u002F\u002Fdocs.temporal.io\u002Fencyclopedia\u002Fretry-policies",{"title":53,"url":54},"Activity timeouts","https:\u002F\u002Fdocs.temporal.io\u002Fencyclopedia\u002Fdetecting-activity-failures",{"title":56,"url":57},"Cloud actions reference","https:\u002F\u002Fdocs.temporal.io\u002Fcloud\u002Factions",{"title":59,"url":60},"Event history limits","https:\u002F\u002Fdocs.temporal.io\u002Fworkflow-execution\u002Fevent",{"title":62,"url":63},"Message passing in Python: signals, queries and updates","https:\u002F\u002Fdocs.temporal.io\u002Fdevelop\u002Fpython\u002Fmessage-passing",{"title":65,"url":66},"Human-in-the-loop AI agent sample","https:\u002F\u002Fdocs.temporal.io\u002Fai\u002Fcookbook\u002Fhuman-in-the-loop-python",{"title":68,"url":69},"Cloud security model","https:\u002F\u002Fdocs.temporal.io\u002Fcloud\u002Fsecurity",{"title":71,"url":72},"Cloud service regions","https:\u002F\u002Fdocs.temporal.io\u002Fcloud\u002Fregions",{"title":74,"url":75},"Data processing agreement","https:\u002F\u002Ftemporal.io\u002Fdpa",{"title":77,"url":78},"Self-hosted deployment guide","https:\u002F\u002Fdocs.temporal.io\u002Fself-hosted-guide\u002Fdeployment",{"title":80,"url":81},"Self-hosted production checklist","https:\u002F\u002Fdocs.temporal.io\u002Fself-hosted-guide\u002Fproduction-checklist",{"title":83,"url":84},"Self-hosted visibility stores","https:\u002F\u002Fdocs.temporal.io\u002Fself-hosted-guide\u002Fvisibility",{"title":86,"url":87},"Temporal Server architecture","https:\u002F\u002Fdocs.temporal.io\u002Ftemporal-service\u002Ftemporal-server",{"title":89,"url":90},"Temporal server LICENSE file","https:\u002F\u002Fgithub.com\u002Ftemporalio\u002Ftemporal\u002Fblob\u002Fmain\u002FLICENSE",{"title":92,"url":93},"Temporal integrations index","https:\u002F\u002Fdocs.temporal.io\u002Fintegrations",{"title":95,"url":96},"LangGraph integration with Temporal","https:\u002F\u002Fdocs.temporal.io\u002Fdevelop\u002Fpython\u002Fintegrations\u002Flanggraph",{"title":98,"url":99},"LangGraph persistence","https:\u002F\u002Fdocs.langchain.com\u002Foss\u002Fpython\u002Flanggraph\u002Fpersistence",{"title":101,"url":102},"LangGraph interrupts","https:\u002F\u002Fdocs.langchain.com\u002Foss\u002Fpython\u002Flanggraph\u002Finterrupts",{"title":104,"url":105},"Self-hosted guide and development server","https:\u002F\u002Fdocs.temporal.io\u002Fself-hosted-guide",{"title":107,"url":108},"Python SDK reference: workflow.wait_condition","https:\u002F\u002Fpython.temporal.io\u002Ftemporalio.workflow._context.html",{"title":110,"url":111},"Python SDK reference: ApplicationError","https:\u002F\u002Fpython.temporal.io\u002Ftemporalio.exceptions.ApplicationError.html","\u002Fimages\u002Fblog\u002Ftemporal\u002Fcover.webp","\u002Fimages\u002Fblog\u002Ftemporal\u002Fog.jpg","ai-engineer",[116,117,118],"en","de","hu","Temporal teszt: ügynökök, amelyek túlélik az összeomlást és emberekre várnak","A Temporal tartós workflow-kként futtat ügynökfutásokat: az újrapróbálások, jóváhagyások és időzítők túlélik az összeomlást. Költség, adatvédelem, mikor ne használd.","Borítókép a Temporal-ismertetőhöz: egy workflow, amely a modellhívásokat activity-ként újrapróbálja, és addig vár, amíg egy ember jóvá nem hagyja.","MIT · self-hosting free · Cloud pay-as-you-go from $0","Durable execution platform","Temporal teszt: ügynökök, amelyek várnak · Balázs Csorba",[126,127,128,129,130],"A Temporal olyan ügynökfutásokhoz illik, amelyek percektől napokig tartanak, több rendszert érintenek és emberekre várnak. Egy néhány másodperc alatt kész chat-válaszhoz túlzás.","A szerver MIT-licencű. A Temporal Cloud fizetés szerint működik, havi $0-tól, az Actions pedig milliónként $50, az első 5 millióig. A Business csomag havi $500-tól indul.","A workflow-kódnak determinisztikusnak kell lennie. A modellhívások és az eszközök activity-be tartoznak, a futó workflow-k kódjának módosításához pedig verziókezelés kell.","Az activity-k alapértelmezés szerint korlátlanul próbálkoznak újra, ezért minden modell-activity-hez kell retry policy és azoknak a hibatípusoknak a listája, amelyeket soha nem szabad újrapróbálni.","A Cloud namespace-ek futhatnak olyan EU-s régiókban, mint Frankfurt és Írország, adatfeldolgozási szerződés és szabványos szerződési záradékok mellett. Önhosztolásnál ez a kérdés a saját tárhelyszolgáltatódhoz kerül.",[132,135,138,141],{"q":133,"a":134},"Ingyenesen önhosztolható a Temporal?","A szerver MIT-licencű, és az árlap szerint a platform a saját infrastruktúrádon futhat, a Temporaltól származó díj nélkül. Az adatbázis, a keresőtár, a gépek és a működtetésükhöz szükséges emberek költsége továbbra is a tiéd.",{"q":136,"a":137},"Mibe kerül egy ügynökfutás a Temporal Cloudon?","Egy futás, amelyben van egy indítás, tizenkét activity-indítás, két újrapróbálás, egy update, egy signal és egy időzítő, körülbelül 18 Actions. Milliónként $50 mellett ez egy tized centnél kevesebb az Actionsben, a tárhely és a 10 százalékos supportdíj előtt.",{"q":139,"a":140},"Megismétli egy összeomlás a modellhívásaimat?","A befejezetteket nem. A Temporal a workflow-t a rögzített előzményeiből játssza újra, és kihagyja a már befejezett activity-ket. Az az activity, amely futott, amikor a worker leállt, a start-to-close timeout lejártával próbálkozik újra, ezért az activity-kódnak idempotensnek kell lennie.",{"q":142,"a":143},"Temporal vagy LangGraph?","A LangGraph kevesebb üzemeltetést igényel, ha az ügynök egyetlen gráf egyetlen Python-folyamatban, és egy PostgreSQL checkpointer elég. A Temporal olyan futásokhoz illik, amelyek napokig tartanak, több szolgáltatást fognak át, vagy amelyeknél a platform rögzíti az újrapróbálásokat és az időzítőket. A kettő össze is kombinálható, mert a LangGraph futhat Temporal-workflow-n belül, ami public preview állapotban van.",[145,148,151,154,157,160,163,166,169],{"id":146,"title":147},"what-it-is","Mi ez",{"id":149,"title":150},"how-it-works","Hogyan működik",{"id":152,"title":153},"getting-started","Első lépések",{"id":155,"title":156},"retries-and-timeouts","Újrapróbálkozások és időkorlátok",{"id":158,"title":159},"human-approval","Emberi jóváhagyás signalokkal",{"id":161,"title":162},"cost-and-deployment","Költség és üzemeltetés",{"id":164,"title":165},"where-it-falls-short","Hol gyengébb",{"id":167,"title":168},"verdict","Ítélet",{"id":170,"title":171},"sources","Források",[173,177,180,183,207,208,219,228,239,240,251,253,271,272,275,292,294,313,316,317,328,330,350,351,354,409,412,415,442,448,454,455,493,494,497,519,522,547,556,557],{"type":174,"content":175},"paragraph",[176],"A Temporal nyílt forráskódú, tartós végrehajtási platform. Az ügynököt hagyományos kódként írod meg, a platform pedig minden lépést rögzít, így egy futás túléli az összeomlásokat, a deployokat és a napokig tartó várakozást. Az ítéletem előre: olyan ügynökfutásokhoz való, amelyek percektől napokig tartanak, több rendszert érintenek, és egy lépést ember hagy jóvá. Egy néhány másodperc alatt kész chat-válaszhoz túlzás.",{"type":174,"content":178},[179],"Két egyszerűbb dologgal versenyez, amelyeket a legtöbb csapat már üzemeltet: a LangGraph-hoz hasonló gráf-checkpointerrel és egy állapottáblás job queue-val. Ezek a helyes választ jelentik addig, amíg egy folyamat egy tizenkét lépéses futás közepén el nem hal, és a futásnak onnan kell folytatódnia, ahol abbahagyta. Ha senki nem vállalja a workflow-kódot, önhosztolásnál pedig a klasztert, hagyd ki a Temporalt.",{"type":181,"level":182,"id":146,"text":147},"heading",2,{"type":184,"ordered":185,"items":186},"list",false,[187,197,202],[188,192,196],{"tag":189,"children":190},"strong",[191],"Egy parancs a kipróbáláshoz. ",{"tag":193,"children":194},"code",[195],"temporal server start-dev"," laptopon futtatja a szolgáltatást és a webes felületet, külső függőség nélkül.",[198,201],{"tag":189,"children":199},[200],"Kétféleképpen futtatható. ","Saját szerveren önhosztolhatod, vagy használhatod a Temporal Cloudot, amelynek régiói között van AWS Frankfurt és Írország. A szerver MIT-licencű.",[203,206],{"tag":189,"children":204},[205],"Hagyományos kód. ","A workflow-k és az activity-k egyszerű függvények Go, Java, Python, TypeScript, .NET, Ruby vagy PHP nyelven, az SDK-tól függően.",{"type":181,"level":182,"id":149,"text":150},{"type":174,"content":209},[210,211,214,215,218],"A ",{"tag":189,"children":212},[213],"workflow"," dönti el, mi történik ezután. Egy ",{"tag":189,"children":216},[217],"activity"," végzi a munkát: meghív egy modellt, API-t hív, vagy fájlt ír. A Temporal minden döntést és minden activity-eredményt a workflow eseménytörténetében tárol. Összeomlás után egy worker ehhez a történethez játssza vissza a workflow-kódot, kihagyja a befejezett activity-ket, és az első befejezetlen lépésnél folytatja. Az ügynök szépen illeszkedik ehhez a szétválasztáshoz: a ciklus, az eszközválasztás és az átadások a workflow-ban élnek, és minden modell- vagy eszközhívás egy activity.",{"type":220,"attrs":221,"inner":225,"caption":226},"diagram",{"viewBox":222,"role":223,"aria-labelledby":224},"0 0 720 330","img","d1-tm-t d1-tm-d","\u003Ctitle id=\"d1-tm-t\">Hogyan halad egy tartós ügynökfutás a Temporalon át\u003C\u002Ftitle>\u003Cdesc id=\"d1-tm-d\">Egy kliens elindítja a workflow-t, és signalokat és update-eket küld a Temporal Service-nek, amely tárolja az eseménytörténetet és az időzítőket. Egy worker lekérdezi a task queue-t, a szolgáltatástól feladatokat kap, és eredményeket küld vissza. A workerben a workflow-kód determinisztikusan futtatja az ügynökciklust, és minden modell- vagy eszközhívást egy activity-nek ad át. Az activity-k hívják a külső LLM- és eszköz-API-kat, és ezeket a hívásokat nem játsszák vissza.\u003C\u002Fdesc>\u003Cdefs>\u003Cmarker id=\"ah-tm\" 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\">Tartós ügynökfutás\u003C\u002Ftext>\u003Ctext x=\"700\" y=\"28\" text-anchor=\"end\" class=\"d-label\">az előzmény túléli a leállást\u003C\u002Ftext>\u003Crect x=\"20\" y=\"60\" width=\"160\" height=\"70\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"100\" y=\"88\" text-anchor=\"middle\" class=\"d-text\">Kliens vagy UI\u003C\u002Ftext>\u003Ctext x=\"100\" y=\"110\" text-anchor=\"middle\" class=\"d-small\">start, signal, update\u003C\u002Ftext>\u003Crect x=\"280\" y=\"60\" width=\"160\" height=\"70\" rx=\"10\" class=\"d-accent\" \u002F>\u003Ctext x=\"360\" y=\"88\" text-anchor=\"middle\" class=\"d-text\">Temporal Service\u003C\u002Ftext>\u003Ctext x=\"360\" y=\"110\" text-anchor=\"middle\" class=\"d-small\">előzmény, időzítők\u003C\u002Ftext>\u003Crect x=\"540\" y=\"60\" width=\"160\" height=\"70\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"620\" y=\"88\" text-anchor=\"middle\" class=\"d-text\">Worker\u003C\u002Ftext>\u003Ctext x=\"620\" y=\"110\" text-anchor=\"middle\" class=\"d-small\">lekérdezi a queue-t\u003C\u002Ftext>\u003Cpath d=\"M180 85 H278\" class=\"d-line\" marker-end=\"url(#ah-tm)\" \u002F>\u003Cpath d=\"M440 80 H538\" class=\"d-line\" marker-end=\"url(#ah-tm)\" \u002F>\u003Cpath d=\"M538 118 H440\" class=\"d-line\" marker-end=\"url(#ah-tm)\" \u002F>\u003Ctext x=\"489\" y=\"74\" text-anchor=\"middle\" class=\"d-small\">feladatok\u003C\u002Ftext>\u003Ctext x=\"489\" y=\"138\" text-anchor=\"middle\" class=\"d-small\">eredmények\u003C\u002Ftext>\u003Crect x=\"10\" y=\"172\" width=\"700\" height=\"104\" rx=\"12\" class=\"d-fill-muted\" \u002F>\u003Ctext x=\"690\" y=\"190\" text-anchor=\"end\" class=\"d-small\">a te workereiden fut\u003C\u002Ftext>\u003Crect x=\"20\" y=\"200\" width=\"200\" height=\"62\" rx=\"10\" class=\"d-gold\" \u002F>\u003Ctext x=\"120\" y=\"226\" text-anchor=\"middle\" class=\"d-text\">Workflow-kód\u003C\u002Ftext>\u003Ctext x=\"120\" y=\"248\" text-anchor=\"middle\" class=\"d-small\">ciklus, determinisztikus\u003C\u002Ftext>\u003Crect x=\"260\" y=\"200\" width=\"200\" height=\"62\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"360\" y=\"226\" text-anchor=\"middle\" class=\"d-text\">Activities\u003C\u002Ftext>\u003Ctext x=\"360\" y=\"248\" text-anchor=\"middle\" class=\"d-small\">modellhívások, eszközök\u003C\u002Ftext>\u003Crect x=\"500\" y=\"200\" width=\"200\" height=\"62\" rx=\"10\" class=\"d-sky\" \u002F>\u003Ctext x=\"600\" y=\"226\" text-anchor=\"middle\" class=\"d-text\">LLM- és eszköz-API-k\u003C\u002Ftext>\u003Ctext x=\"600\" y=\"248\" text-anchor=\"middle\" class=\"d-small\">külső, nem ismétlődik\u003C\u002Ftext>\u003Cpath d=\"M220 231 H258\" class=\"d-line\" marker-end=\"url(#ah-tm)\" \u002F>\u003Cpath d=\"M460 231 H498\" class=\"d-line\" marker-end=\"url(#ah-tm)\" \u002F>\u003Ctext x=\"20\" y=\"300\" class=\"d-small\">Visszajátszáskor csak a befejezetlen lépések futnak újra.\u003C\u002Ftext>\u003Ctext x=\"20\" y=\"320\" class=\"d-label\">Az újrapróbálás a szabályzatodat követi. A workflow visszajátszódik, sosem fut kétszer.\u003C\u002Ftext>",[227],"A workflow dönt, az activity-k végzik a be- és kimenetet, a szolgáltatás pedig megőrzi azt az előzményt, amely miatt az újraindítás ártalmatlan.",{"type":174,"content":229},[230,231,234,235,238],"A visszajátszás a korlát. A workflow-kódnak minden visszajátszáskor ugyanazokat a hívásokat kell ugyanabban a sorrendben megtennie. Ezért ha benne API-t hívsz, órát olvasol vagy véletlen számot húzol, a visszajátszás megtörik. Ezt a munkát activity-kbe tedd, vagy Pythonban használd a ",{"tag":193,"children":232},[233],"workflow.now()"," és a ",{"tag":193,"children":236},[237],"workflow.random()"," függvényeket. A futó végrehajtásokkal rendelkező workflow módosításához verziókezelés kell. Egy activity típusának vagy azonosítójának megváltoztatása nem biztonságos, a bemenetei és időkorlátai viszont módosulhatnak.",{"type":181,"level":182,"id":152,"text":153},{"type":174,"content":241},[242,243,246,247,250],"A legegyszerűbb kezdés az OpenAI Agents SDK integráció, amely a ",{"tag":193,"children":244},[245],"temporalio-openai-agents"," csomagként érhető el. Az ügynököt a szokásos SDK-val írod meg egy workflow-n belül, majd az ",{"tag":193,"children":248},[249],"OpenAIAgentsPlugin","-t a klienshez és a workerhez csatolod. Minden modellhívás activity lesz, így tartósan újrapróbálkozik, és visszajátszáskor nem ismétlődik meg.",{"type":193,"code":252},"from datetime import timedelta\nfrom agents import Agent, Runner\nfrom temporalio import workflow\nfrom temporalio.client import Client\nfrom temporalio.openai_agents import ModelActivityParameters, OpenAIAgentsPlugin\n\n\n@workflow.defn\nclass HelloWorldAgent:\n    @workflow.run\n    async def run(self, prompt: str) -> str:\n        agent = Agent(name='Assistant', instructions='You only respond in haikus.')\n        result = await Runner.run(agent, input=prompt)\n        return result.final_output\n\n\n# worker.py: the plugin sets the timeout for each model activity\nclient = await Client.connect(\n    'localhost:7233',\n    plugins=[\n        OpenAIAgentsPlugin(\n            model_params=ModelActivityParameters(\n                start_to_close_timeout=timedelta(seconds=30)\n            )\n        ),\n    ],\n)\n\n# starter.py: the same plugin, so payloads are converted the same way\nclient = await Client.connect('localhost:7233', plugins=[OpenAIAgentsPlugin()])\nresult = await client.execute_workflow(\n    HelloWorldAgent.run,\n    'Tell me about recursion in programming.',\n    id='my-workflow-id',\n    task_queue='openai-agents-basic-task-queue',\n)",{"type":174,"content":254},[255,258,259,262,263,266,267,270],{"tag":193,"children":256},[257],"ModelActivityParameters"," határozza meg, hogyan ütemeződnek a modell-activity-k. A ",{"tag":193,"children":260},[261],"start_to_close_timeout"," paraméter alapértelmezett értéke 60 másodperc. Eszközöknél a ",{"tag":193,"children":264},[265],"activity_as_tool()"," az I\u002FO-t activity-ként futtatja, a sima ",{"tag":193,"children":268},[269],"@function_tool"," viszont a workflow-n belül fut, és determinisztikusnak kell lennie. Integráció van Google ADK-hoz, Pydantic AI-hoz, Mastra-hoz és a Vercel AI SDK-hoz is. A LangGraph-integráció public preview állapotban van.",{"type":181,"level":182,"id":155,"text":156},{"type":174,"content":273},[274],"Az újrapróbálás az a pont, ahol a tartós végrehajtás megtérül, és ahol az alapértelmezések fájnak. Egy sikertelen activity exponenciális visszatartással próbálkozik újra, az első másodperctől indulva, a próbálkozások között legfeljebb 100 másodpercet várva, a próbálkozások számának korlátja nélkül. Egy fizetés rögzítése pontosan ezt kívánja. Az a kérés, amely soha nem sikerülhet, például egy nem létező megrendelés lekérdezése, ezért egyáltalán nem szabad újrapróbálni. Három beállítás határozza meg a viselkedést:",{"type":184,"ordered":185,"items":276},[277,282,287],[278,281],{"tag":189,"children":279},[280],"Start-to-close ","korlátozza egy próbálkozást. Nincs alapértelmezett értéke, a Temporal pedig erősen javasolja a beállítását.",[283,286],{"tag":189,"children":284},[285],"Schedule-to-close ","az egész activity-t korlátozza az újrapróbálásokkal együtt, így azt szabja meg, mennyi ideig futhat összesen egy modell-lépés.",[288,291],{"tag":189,"children":289},[290],"Retry policy ","a próbálkozások számának korlátját és azokat a hibatípusokat adja meg, amelyeket soha nem szabad újrapróbálni.",{"type":193,"code":293},"import httpx\nfrom datetime import timedelta\nfrom temporalio import activity\nfrom temporalio.common import RetryPolicy\nfrom temporalio.exceptions import ApplicationError\nfrom temporalio.openai_agents import ModelActivityParameters\n\nmodel_params = ModelActivityParameters(\n    start_to_close_timeout=timedelta(seconds=60),\n    schedule_to_close_timeout=timedelta(minutes=5),\n    retry_policy=RetryPolicy(maximum_attempts=5),\n)\n\n\n@activity.defn\nasync def lookup_order(order_id: str) -> dict:\n    async with httpx.AsyncClient() as client:\n        response = await client.get(f'https:\u002F\u002Fshop.example.com\u002Fapi\u002Forders\u002F{order_id}')\n    if response.status_code == 404:\n        # Retrying cannot make a missing order appear.\n        raise ApplicationError('Order not found', type='OrderNotFound', non_retryable=True)\n    response.raise_for_status()\n    return response.json()",{"type":295,"variant":296,"title":297,"body":298},"callout","warn","Minden újrapróbálás egy második modellhívás",[299],[300,301,304,305,308,309,312],"Az újrapróbálás újra elküldi a kérést, és minden kísérlet egy újabb Actiont jelent. Állítsd be a ",{"tag":193,"children":302},[303],"maximum_attempts"," értéket minden modell-activity-n, és azokra a kérésekre, amelyek nem sikerülhetnek, dobj ",{"tag":193,"children":306},[307],"ApplicationError"," hibát ",{"tag":193,"children":310},[311],"non_retryable=True"," beállítással.",{"type":174,"content":314},[315],"Az activity-kódnak emellett idempotensnek kell lennie, mert a Temporal azzal számol, hogy az activity-k hiba után újra lefutnak. Egy e-mailt küldő eszköznek olyan idempotency-kulcs kell, amelyet a fogadó rendszer elfogad.",{"type":181,"level":182,"id":158,"text":159},{"type":174,"content":318},[319,320,323,324,327],"Itt a Temporal már nem csupán egy újrapróbálási könyvtár. A ",{"tag":189,"children":321},[322],"signal"," aszinkron üzenet egy futó workflow-nak. A Temporal human-in-the-loop mintája a döntést egy signal-kezelőben tárolja, és a ",{"tag":193,"children":325},[326],"workflow.wait_condition"," hívással vár rá. Amíg vár, az állapot az eseménytörténetben van, az időzítők pedig túlélik az újraindulásokat. A minta alapértelmezett időkorlátja öt perc, ami egy teszthez jó. Jóváhagyási sorhoz én napokat használnék.",{"type":193,"code":329},"import asyncio\nfrom datetime import timedelta\nfrom typing import Optional\nfrom temporalio import workflow\n\n\n@workflow.defn\nclass ApprovalWorkflow:\n    def __init__(self) -> None:\n        self.decision: Optional[str] = None\n\n    @workflow.signal\n    async def approval_decision(self, decision: str) -> None:\n        self.decision = decision\n\n    @workflow.run\n    async def run(self, request: str) -> str:\n        # propose_action and execute_action are activities defined elsewhere\n        proposal = await workflow.execute_activity(\n            propose_action, request, start_to_close_timeout=timedelta(seconds=60)\n        )\n        try:\n            await workflow.wait_condition(\n                lambda: self.decision is not None,\n                timeout=timedelta(days=3),\n            )\n        except asyncio.TimeoutError:\n            return 'no decision within three days'\n        if self.decision != 'approve':\n            return 'rejected'\n        return await workflow.execute_activity(\n            execute_action, proposal, start_to_close_timeout=timedelta(seconds=60)\n        )",{"type":174,"content":331},[210,332,335,336,339,340,343,344,349],{"tag":189,"children":333},[334],"query"," állapotot olvas anélkül, hogy megváltoztatná. Az ",{"tag":189,"children":337},[338],"update"," olyan kérés, amelyre a hívó vár, a validátor pedig még azelőtt elutasíthatja, hogy bekerülne a történetbe. Az elutasított update is egy Actionnek számít. A hosszú munkamenetek kemény korlátokba ütköznek: a végrehajtás 51 200 esemény, 2000 update vagy 10 000 signal felett leáll. Ezért a chat-szerű workflow-knak Continue-As-New kell. A ",{"tag":193,"children":341},[342],"workflow.info().is_continue_as_new_suggested()"," jelzi, mikor javasolja ezt a szerver. Hogy a jóváhagyási kapuk hová kerüljenek, az tervezési kérdés, amelyet a ",{"tag":345,"to":346,"children":347},"link","\u002Fblog\u002Fhuman-in-the-loop-ai-agents",[348],"Human in the loop AI-ügynököknél"," című cikkemben járok körül.",{"type":181,"level":182,"id":161,"text":162},{"type":174,"content":352},[353],"Önhosztolásnál nincs licencdíj. A Temporal Cloud fizetés szerint működik, minimális költés nélkül, az új fiókok pedig 90 napig $150 kreditet kapnak. A táblázat a listaárakat mutatja, 2026 októberének állapota szerint.",{"type":355,"head":356,"rows":365},"table",[357,359,361,363],[358],"Opció",[360],"Ár",[362],"Benne van",[364],"Mi változik",[366,375,384,393,402],[367,369,371,373],[368],"Önhosztolt",[370],"Ingyenes, MIT",[372],"Semmi a Temporaltól",[374],"Te üzemelteted a szolgáltatásokat, az adatbázist, a keresőtárat és a frissítéseket",[376,378,380,382],[377],"Cloud fizetés szerint",[379],"$0 alapdíj, plusz 10% support a használatra",[381],"Semmi",[383],"Actions milliónként $50, az első 5 millióig havonta",[385,387,389,391],[386],"Cloud Business",[388],"A havi $500 vagy a használat 10%-a, amelyik nagyobb",[390],"2,5 M Actions, 2,5 GB active, 100 GB retained",[392],"SAML benne van, a SCIM havi $500 extra",[394,396,398,400],[395],"Cloud Enterprise",[397],"Éves, kapcsolatfelvétel az értékesítéssel",[399],"10 M Actions, 10 GB active, 400 GB retained",[401],"SCIM benne van, P0 válaszidő 30 percen belül",[403,405,406,407],[404],"Cloud Mission Critical",[397],[399],[408],"Dedikált platform architect, P0 válaszidő 15 percen belül",{"type":174,"content":410},[411],"A használati szabályok többet mozgatnak a számlán, mint a főcím. Az Actions minden activity-indítást és újrapróbálást számolnak, valamint minden signalt, időzítőt, update-et, query-t és workflow-indítást. A példám 18 Actions, így 100 000 ilyen futás körülbelül $90 az Actionsben, a tárhely és a support előtt. Egy GB aktív tárhely egy hónapig tartva körülbelül $31, egy GB retained tárhely körülbelül 78 cent. Ha a Fairness be van kapcsolva, minden óra Actionsei 10 százalékkal nőnek.",{"type":174,"content":413},[414],"A Business inkább a supportért, a SCIM-ért és a kötelezettségvállalási kedvezményekért éri meg, mint az Actionsökért. Az $500-os minimum 2,5 millió Actiont tartalmaz, ami több mint 130 000 ilyen futásra elég, mint a példám.",{"type":174,"content":416},[417,420,421,424,425,428,429,432,433,436,437,441],{"tag":189,"children":418},[419],"Hová mennek az adatok. ","Egy namespace egyetlen régióban jön létre. A régiólistán szerepel az AWS Frankfurt (",{"tag":193,"children":422},[423],"eu-central-1","), Írország (",{"tag":193,"children":426},[427],"eu-west-1",") és London (",{"tag":193,"children":430},[431],"eu-west-2","), valamint a GCP Frankfurt (",{"tag":193,"children":434},[435],"europe-west3","). A payloadokat a workereiden a Data Converterrel titkosíthatod, mielőtt elhagynák a workert. A Codec Server pedig a csapatodnak megengedi a történetek olvasását a webes felületen, kulcsok átadása nélkül. A megőrzött történetek a Cloudban legfeljebb 90 napig maradnak meg, így a hosszabb megőrzés exportot jelent. A tágabb kérdésekhez lásd: ",{"tag":345,"to":438,"children":439},"\u002Fblog\u002Fgdpr-llm-api-eu-data-residency",[440],"GDPR és LLM-adatrezidencia",".",{"type":174,"content":443},[444,447],{"tag":189,"children":445},[446],"Az adatfeldolgozási szerződés. ","A Temporal szerződése, amely 2024. október 10-től hatályos, tartalmazza az EU szabványos szerződési záradékait és egy UK-addendumot. Az alvállalkozói melléklet az AWS-t nevezi meg az infrastruktúrához, a Google Cloudot a GCP-régiókban lévő namespace-ekhez, a Datastaxot, az Auth0-t, az Elasticet és a WorkOS-t pedig bizonyos szolgáltatásokhoz. Új alvállalkozó ellen a közzétételtől számított 15 napon belül tiltakozhatsz. A biztonsági mentéseket 30 napig őrzik, az ügyféladatokat a szerződés megszűnésekor törlik. A Temporal szerint SOC 2 Type 2 tanúsítvánnyal rendelkezik, és megfelel a GDPR-nek és a HIPAA-nak. Ezt tekintsd a felülvizsgálatod kiindulópontjának, nem jogi tanácsnak.",{"type":174,"content":449},[450,453],{"tag":189,"children":451},[452],"Önhosztolás. ","Ez ezeket a kérdéseket a saját tárhelyszolgáltatódra hárítja, az adatbázis, a keresőtár, a mentések és a frissítések pedig nálad maradnak. A szervernek négy szolgáltatása van, amelyek függetlenül skálázhatók: frontend, history, matching és worker. Elasticsearch vagy OpenSearch ajánlott, amint néhány végrehajtásnál többet futtatsz, a Docker Compose minta PostgreSQL-lel és Elasticsearch-csel fut. A Temporal azt javasolja, hogy egyszerre egy kisverziót lépj, a kiadások pedig akár kéthetente megjelenhetnek. A shardok száma build-időben rögzített, RBAC vagy auditnaplózás pedig nincs a dobozból. A gyártó ellenőrzőlistája a személyzetet jelentős költségnek nevezi. A hardvert nem árazom be, mert az a shardok számától és a terheléstől függ.",{"type":181,"level":182,"id":164,"text":165},{"type":184,"ordered":185,"items":456},[457,462,467,472,477],[458,461],{"tag":189,"children":459},[460],"A determinizmus szokás kérdése. ","A futó végrehajtások közben módosított kód megtörheti a visszajátszást, a verziókezelés pedig régi kódutakat hagy karbantartásra.",[463,466],{"tag":189,"children":464},[465],"Kemény előzmény-határok. ","A végrehajtások 51 200 esemény, 2000 update vagy 10 000 signal felett leállnak, ezért a hosszú munkamenetekhez az elejétől Continue-As-New kell.",[468,471],{"tag":189,"children":469},[470],"Az újrapróbálás költségkeret. ","A korlátlan alapértelmezés az infrastruktúrának jó, a modellhívásoknak rosszul illik.",[473,476],{"tag":189,"children":474},[475],"Részben még preview. ","Az OpenTelemetry- és a LangGraph-integráció public preview, a sandbox-támogatás kiadás előtti, a streaming pedig kísérleti.",[478,481,482,485,486,234,489,492],{"tag":189,"children":479},[480],"Nem minden tartós. ","Az MCP-szerverek a workflow-n kívül futnak, és minden MCP-hívás activity-ként fut. ",{"tag":193,"children":483},[484],"LocalShellTool",", a ",{"tag":193,"children":487},[488],"ComputerTool",{"tag":193,"children":490},[491],"SQLiteSession"," nem támogatott.",{"type":181,"level":182,"id":167,"text":168},{"type":174,"content":495},[496],"A Temporal a megfelelő alapértelmezés hosszú életű ügynökökhöz, amelyek több rendszert érintenek és emberekre várnak, feltéve, hogy valaki vállalja a workflow-kódot, önhosztolásnál pedig a klasztert is. Egyetlen modellhívásra egy HTTP-kérés mögött viszont rossz alapértelmezés.",{"type":184,"ordered":498,"items":499},true,[500,505,509,514],[501,504],{"tag":189,"children":502},[503],"Válaszd, ha ","egy futás órákig vagy napokig tart, és egy újraindulás nem ismételhet meg egy fizetést, e-mailt vagy modellhívást.",[506,508],{"tag":189,"children":507},[503],"egy ember olyan lépéseket hagy jóvá, amelyek napokkal később jönnek, és a várakozásnak túl kell élnie az újraindulásokat.",[510,513],{"tag":189,"children":511},[512],"Hagyd ki, ha ","az ügynök másodpercek alatt válaszol. Egy időkorlát és egy újrapróbálás a modellhívás körül elég.",[515,518],{"tag":189,"children":516},[517],"Csak akkor önhosztolj, ha ","valaki gyakori frissítésekkel viszi a klasztert. Különben a Temporal Cloudot használd.",{"type":174,"content":520},[521],"Három alternatíva lefedi a legtöbb esetet, amikor a Temporal túlzás:",{"type":184,"ordered":185,"items":523},[524,533,538],[525,528,532],{"tag":189,"children":526},[527],"LangGraph-checkpointok ",{"tag":345,"to":529,"children":530},"\u002Ftools\u002Flanggraph",[531],"LangGraph",", ha az ügynök egy Python-gráf, az állapot kicsi, és a PostgreSQL már rendelkezésre áll. Az interruptjai emberi jóváhagyáshoz szüneteltetik a gráfot.",[534,537],{"tag":189,"children":535},[536],"Job queue állapottáblával ","ha a folyamat rögzített sorozata idempotens lépéseknek. Az újrapróbálásokat és az időzítőket magadnak kell megírnod, ez öt lépésnél rendben van, ötvennél fárasztó.",[539,542,546],{"tag":189,"children":540},[541],"Csak az OpenAI Agents SDK ",{"tag":345,"to":543,"children":544},"\u002Ftools\u002Fopenai-agents-sdk",[545],"OpenAI Agents SDK",", ha minden futás rövid, egy folyamatban marad, és soha nem kell túlélnie egy újraindulást.",{"type":295,"variant":548,"title":549,"body":550},"tip","Kezdj kicsiben",[551],[552,553,555],"Kezdd a ",{"tag":193,"children":554},[195]," parancsot, és használd a $150 Cloud-kreditet. Klaszterre csak akkor térj át, ha egy rezidenciaszabály vagy egy mért volumen indokolja.",{"type":181,"level":182,"id":170,"text":171},{"type":184,"ordered":185,"items":558},[559,564,568,572,576,580,584,588,592,596,600,604,608,612,616,620,624,628,632,636,640,644,648,652,656],[560],{"tag":561,"href":39,"children":562},"a",[563],"Temporal Cloud: árak",[565],{"tag":561,"href":42,"children":566},[567],"Temporal Cloud: árdokumentáció",[569],{"tag":561,"href":45,"children":570},[571],"OpenAI Agents SDK integráció Pythonhoz",[573],{"tag":561,"href":48,"children":574},[575],"Workflow-definíció és determinizmus",[577],{"tag":561,"href":51,"children":578},[579],"Újrapróbálási szabályzatok",[581],{"tag":561,"href":54,"children":582},[583],"Activity-időkorlátok",[585],{"tag":561,"href":57,"children":586},[587],"Cloud actions referencia",[589],{"tag":561,"href":60,"children":590},[591],"Eseménytörténet korlátai",[593],{"tag":561,"href":63,"children":594},[595],"Üzenetkezelés Pythonban: signalok, query-k és update-ek",[597],{"tag":561,"href":66,"children":598},[599],"Human-in-the-loop AI-ügynök minta",[601],{"tag":561,"href":69,"children":602},[603],"Cloud biztonsági modell",[605],{"tag":561,"href":72,"children":606},[607],"Cloud szolgáltatási régiók",[609],{"tag":561,"href":75,"children":610},[611],"Adatfeldolgozási szerződés",[613],{"tag":561,"href":78,"children":614},[615],"Önhosztolás telepítési útmutató",[617],{"tag":561,"href":81,"children":618},[619],"Önhosztolt éles üzem ellenőrzőlista",[621],{"tag":561,"href":84,"children":622},[623],"Önhosztolt láthatósági tárolók",[625],{"tag":561,"href":87,"children":626},[627],"A Temporal Server architektúrája",[629],{"tag":561,"href":90,"children":630},[631],"A Temporal szerver LICENSE fájlja",[633],{"tag":561,"href":93,"children":634},[635],"Temporal integrációk áttekintése",[637],{"tag":561,"href":96,"children":638},[639],"LangGraph integráció a Temporallal",[641],{"tag":561,"href":99,"children":642},[643],"LangGraph perzisztencia",[645],{"tag":561,"href":102,"children":646},[647],"LangGraph interruptok",[649],{"tag":561,"href":105,"children":650},[651],"Önhosztolási útmutató és fejlesztői szerver",[653],{"tag":561,"href":108,"children":654},[655],"Python SDK referencia: workflow.wait_condition",[657],{"tag":561,"href":111,"children":658},[659],"Python SDK referencia: ApplicationError",[661,767,869,987],{"slug":662,"published":663,"minutes":6,"category":7,"tags":664,"keywords":670,"about":678,"sources":689,"cover":759,"og":760,"expertise":114,"locales":761,"lang":118,"title":762,"description":763,"coverAlt":764,"url":681,"pricing":765,"kind":766},"opencode","2026-10-09",[665,666,667,668,669],"AI coding agent","Terminal","Open source","Local models","MCP",[662,671,672,673,674,675,676,677],"opencode review","open source coding agent","opencode vs claude code","terminal coding agent","opencode local models","opencode permissions","opencode mcp",[679,682,683,686],{"name":680,"url":681},"OpenCode","https:\u002F\u002Fopencode.ai",{"name":31,"url":32},{"name":684,"url":685},"Model Context Protocol","https:\u002F\u002Fmodelcontextprotocol.io",{"name":687,"url":688},"Language Server Protocol","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FLanguage_Server_Protocol",[690,693,696,699,702,705,708,711,714,717,720,723,726,729,732,735,738,741,744,747,750,753,756],{"title":691,"url":692},"OpenCode docs: intro and installation","https:\u002F\u002Fopencode.ai\u002Fdocs\u002F",{"title":694,"url":695},"OpenCode docs: providers, Models.dev and local models","https:\u002F\u002Fopencode.ai\u002Fdocs\u002Fproviders\u002F",{"title":697,"url":698},"OpenCode docs: agents, Build, Plan and subagents","https:\u002F\u002Fopencode.ai\u002Fdocs\u002Fagents\u002F",{"title":700,"url":701},"OpenCode docs: permissions and defaults","https:\u002F\u002Fopencode.ai\u002Fdocs\u002Fpermissions\u002F",{"title":703,"url":704},"OpenCode docs: MCP servers","https:\u002F\u002Fopencode.ai\u002Fdocs\u002Fmcp-servers\u002F",{"title":706,"url":707},"OpenCode docs: LSP servers","https:\u002F\u002Fopencode.ai\u002Fdocs\u002Flsp\u002F",{"title":709,"url":710},"OpenCode docs: server and web interface","https:\u002F\u002Fopencode.ai\u002Fdocs\u002Fserver\u002F",{"title":712,"url":713},"OpenCode docs: config and precedence","https:\u002F\u002Fopencode.ai\u002Fdocs\u002Fconfig\u002F",{"title":715,"url":716},"OpenCode docs: Zen, pay-as-you-go models","https:\u002F\u002Fopencode.ai\u002Fdocs\u002Fzen\u002F",{"title":718,"url":719},"OpenCode docs: Go subscription plans","https:\u002F\u002Fopencode.ai\u002Fdocs\u002Fgo\u002F",{"title":721,"url":722},"OpenCode docs: share and data retention","https:\u002F\u002Fopencode.ai\u002Fdocs\u002Fshare\u002F",{"title":724,"url":725},"OpenCode docs: enterprise and data handling","https:\u002F\u002Fopencode.ai\u002Fdocs\u002Fenterprise\u002F",{"title":727,"url":728},"GitHub: anomalyco\u002Fopencode, MIT licence and README","https:\u002F\u002Fgithub.com\u002Fanomalyco\u002Fopencode",{"title":730,"url":731},"OpenCode release v1.18.35 (6 October 2026)","https:\u002F\u002Fgithub.com\u002Fanomalyco\u002Fopencode\u002Freleases\u002Ftag\u002Fv1.18.35",{"title":733,"url":734},"Claude Code licence file (LICENSE.md)","https:\u002F\u002Fraw.githubusercontent.com\u002Fanthropics\u002Fclaude-code\u002Fmain\u002FLICENSE.md",{"title":736,"url":737},"Claude pricing: plans and Claude Code access","https:\u002F\u002Fclaude.com\u002Fpricing",{"title":739,"url":740},"Claude Code docs: connect to an LLM gateway","https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fllm-gateway",{"title":742,"url":743},"OpenAI Codex CLI repository (Apache-2.0)","https:\u002F\u002Fgithub.com\u002Fopenai\u002Fcodex",{"title":745,"url":746},"ChatGPT pricing: Codex included in plans","https:\u002F\u002Flearn.chatgpt.com\u002Fdocs\u002Fpricing",{"title":748,"url":749},"Codex configuration: model providers and config.toml","https:\u002F\u002Flearn.chatgpt.com\u002Fdocs\u002Fconfig-file\u002Fconfig-advanced",{"title":751,"url":752},"Aider website: git integration and LLM support","https:\u002F\u002Faider.chat\u002F",{"title":754,"url":755},"Aider licence file (Apache-2.0)","https:\u002F\u002Fraw.githubusercontent.com\u002FAider-AI\u002Faider\u002Fmain\u002FLICENSE.txt",{"title":757,"url":758},"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",[116,117,118],"OpenCode teszt: a nyílt forráskódú kódolóügynök bármely modellhez","Az OpenCode MIT licencű terminálos kódolóügynök bármely modellhez, felhős vagy helyi módon. Ügynökök, jogosultságok, MCP, LSP és adatvédelem.","Borítókép az OpenCode teszthez: egyetlen ügynökciklus a terminálban, amely egy felhős API-hoz, egy helyi modellhez és a Zenhez ágazik szét.","MIT · free, you pay the model provider","Coding agent",{"slug":768,"published":769,"minutes":6,"category":7,"tags":770,"keywords":776,"about":785,"sources":796,"cover":861,"og":862,"expertise":114,"locales":863,"lang":118,"title":864,"description":865,"coverAlt":866,"url":867,"pricing":868,"kind":771},"pydantic-ai","2026-10-08",[771,772,773,774,775],"Agent framework","Typed Python","Structured output","Dependency injection","OpenTelemetry",[777,778,779,780,781,782,783,784],"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",[786,789,792,794],{"name":787,"url":788},"Pydantic","https:\u002F\u002Fpydantic.dev",{"name":790,"url":791},"Python (programming language)","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPython_(programming_language)",{"name":774,"url":793},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FDependency_injection",{"name":775,"url":795},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FOpenTelemetry",[797,800,803,806,809,812,815,818,821,824,827,830,833,836,839,842,845,848,851,854,857,860],{"title":798,"url":799},"Pydantic AI documentation","https:\u002F\u002Fai.pydantic.dev\u002F",{"title":801,"url":802},"pydantic-ai 2.55.0 on PyPI (released 9 October 2026)","https:\u002F\u002Fpypi.org\u002Fproject\u002Fpydantic-ai\u002F",{"title":804,"url":805},"pydantic\u002Fpydantic-ai on GitHub: licence, stars and README","https:\u002F\u002Fgithub.com\u002Fpydantic\u002Fpydantic-ai",{"title":807,"url":808},"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":810,"url":811},"Pydantic AI version policy","https:\u002F\u002Fai.pydantic.dev\u002Fversion-policy\u002F",{"title":813,"url":814},"Pydantic AI upgrade guide: the V2 betas and the stable release","https:\u002F\u002Fai.pydantic.dev\u002Fproject\u002Fchangelog\u002F",{"title":816,"url":817},"Pydantic AI output: tool output, retries and output validators","https:\u002F\u002Fai.pydantic.dev\u002Foutput\u002F",{"title":819,"url":820},"Pydantic AI dependencies and RunContext","https:\u002F\u002Fai.pydantic.dev\u002Fdependencies\u002F",{"title":822,"url":823},"Pydantic AI models and providers","https:\u002F\u002Fai.pydantic.dev\u002Fmodels\u002Foverview\u002F",{"title":825,"url":826},"Pydantic AI unit testing with TestModel and FunctionModel","https:\u002F\u002Fai.pydantic.dev\u002Ftesting\u002F",{"title":828,"url":829},"Pydantic AI durable execution overview","https:\u002F\u002Fai.pydantic.dev\u002Fdurable_execution\u002Foverview\u002F",{"title":831,"url":832},"Pydantic Logfire: observability for Pydantic AI","https:\u002F\u002Fai.pydantic.dev\u002Flogfire\u002F",{"title":834,"url":835},"Pydantic Logfire pricing","https:\u002F\u002Fpydantic.dev\u002Fpricing",{"title":837,"url":838},"Pydantic security and compliance","https:\u002F\u002Fpydantic.dev\u002Fsecurity",{"title":840,"url":841},"OpenAI Agents SDK documentation","https:\u002F\u002Fopenai.github.io\u002Fopenai-agents-python\u002F",{"title":843,"url":844},"OpenAI Agents SDK tracing","https:\u002F\u002Fopenai.github.io\u002Fopenai-agents-python\u002Ftracing\u002F",{"title":846,"url":847},"openai\u002Fopenai-agents-python on GitHub","https:\u002F\u002Fgithub.com\u002Fopenai\u002Fopenai-agents-python",{"title":849,"url":850},"openai-agents 0.23.1 on PyPI","https:\u002F\u002Fpypi.org\u002Fproject\u002Fopenai-agents\u002F",{"title":852,"url":853},"langchain-ai\u002Flanggraph on GitHub","https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Flanggraph",{"title":855,"url":856},"langgraph 1.2.14 on PyPI","https:\u002F\u002Fpypi.org\u002Fproject\u002Flanggraph\u002F",{"title":858,"url":859},"LangGraph overview","https:\u002F\u002Fdocs.langchain.com\u002Foss\u002Fpython\u002Flanggraph\u002Foverview",{"title":101,"url":102},"\u002Fimages\u002Fblog\u002Fpydantic-ai\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fpydantic-ai\u002Fog.jpg",[116,117,118],"Pydantic AI bemutató: típusos Python-ügynökök ellenőrzött kimenettel","A Pydantic AI 2.55 típusos függőségeket, ellenőrzött kimenetet és OpenTelemetry-nyomkövetést ad. Mit változtatott a 2.0, mibe kerül a Logfire és kinek való.","Borítókép a Pydantic AI bemutatóhoz: típusos ügynökciklus eszközökkel, ellenőrző kapuval és újrapróbálási úttal a modellhez.","https:\u002F\u002Fai.pydantic.dev","MIT · free library, Logfire Team from $49 a month",{"slug":870,"published":5,"minutes":871,"category":7,"tags":872,"keywords":877,"about":886,"sources":897,"cover":979,"og":980,"expertise":114,"locales":981,"lang":118,"title":982,"description":983,"coverAlt":984,"url":985,"pricing":986,"kind":766},"gemini-cli",9,[873,874,669,875,876],"Terminal agent","Gemini","Sandboxing","Data protection",[878,879,880,881,882,883,884,885],"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",[887,890,893,896],{"name":888,"url":889},"Gemini CLI","https:\u002F\u002Fgithub.com\u002Fgoogle-gemini\u002Fgemini-cli",{"name":891,"url":892},"Vertex AI","https:\u002F\u002Fcloud.google.com\u002Fvertex-ai",{"name":894,"url":895},"Apache License","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FApache_License",{"name":684,"url":685},[898,901,904,907,909,912,915,918,921,924,927,930,933,936,939,942,945,948,951,953,956,959,962,965,968,971,973,976],{"title":899,"url":900},"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":902,"url":903},"Gemini CLI: quotas and pricing","https:\u002F\u002Fgeminicli.com\u002Fdocs\u002Fresources\u002Fquota-and-pricing\u002F",{"title":905,"url":906},"Gemini CLI: licence, terms of service and privacy notices","https:\u002F\u002Fgeminicli.com\u002Fdocs\u002Fresources\u002Ftos-privacy",{"title":908,"url":889},"GitHub: google-gemini\u002Fgemini-cli, the repository and README",{"title":910,"url":911},"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":913,"url":914},"Gemini CLI reference: flags and approval modes","https:\u002F\u002Fgithub.com\u002Fgoogle-gemini\u002Fgemini-cli\u002Fblob\u002Fmain\u002Fdocs\u002Fcli\u002Fcli-reference.md",{"title":916,"url":917},"Gemini CLI configuration: settings.json and approval defaults","https:\u002F\u002Fgithub.com\u002Fgoogle-gemini\u002Fgemini-cli\u002Fblob\u002Fmain\u002Fdocs\u002Freference\u002Fconfiguration.md",{"title":919,"url":920},"Gemini CLI sandboxing","https:\u002F\u002Fgithub.com\u002Fgoogle-gemini\u002Fgemini-cli\u002Fblob\u002Fmain\u002Fdocs\u002Fcli\u002Fsandbox.md",{"title":922,"url":923},"Gemini CLI: context files (GEMINI.md)","https:\u002F\u002Fgithub.com\u002Fgoogle-gemini\u002Fgemini-cli\u002Fblob\u002Fmain\u002Fdocs\u002Fcli\u002Fgemini-md.md",{"title":925,"url":926},"Gemini CLI: MCP servers","https:\u002F\u002Fgithub.com\u002Fgoogle-gemini\u002Fgemini-cli\u002Fblob\u002Fmain\u002Fdocs\u002Ftools\u002Fmcp-server.md",{"title":928,"url":929},"Gemini API Additional Terms of Service","https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fterms",{"title":931,"url":932},"Gemini Developer API pricing","https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\u002Fpricing",{"title":934,"url":935},"Gemini Code Assist FAQs","https:\u002F\u002Fdocs.cloud.google.com\u002Fgemini\u002Fdocs\u002Fcodeassist\u002Ffaqs",{"title":937,"url":938},"Vertex AI data governance and zero data retention","https:\u002F\u002Fdocs.cloud.google.com\u002Fvertex-ai\u002Fgenerative-ai\u002Fdocs\u002Fdata-governance",{"title":940,"url":941},"Vertex AI data residency","https:\u002F\u002Fdocs.cloud.google.com\u002Fvertex-ai\u002Fgenerative-ai\u002Fdocs\u002Flearn\u002Fdata-residency",{"title":943,"url":944},"Vertex AI locations and endpoints","https:\u002F\u002Fdocs.cloud.google.com\u002Fvertex-ai\u002Fgenerative-ai\u002Fdocs\u002Flearn\u002Flocations",{"title":946,"url":947},"run-gemini-cli: the GitHub Action for Gemini CLI","https:\u002F\u002Fgithub.com\u002Fgoogle-github-actions\u002Frun-gemini-cli",{"title":949,"url":950},"Antigravity CLI migration guide","https:\u002F\u002Fantigravity.google\u002Fdocs\u002Fcli\u002Fgcli-migration",{"title":952,"url":737},"Claude pricing",{"title":954,"url":955},"Claude Code: data usage","https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fdata-usage",{"title":957,"url":958},"Claude Code: setup and plan requirements","https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fsetup",{"title":960,"url":961},"Claude Code: permission modes","https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fpermission-modes",{"title":963,"url":964},"Claude Code: sandboxing","https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fsandboxing",{"title":966,"url":967},"Claude Code licence (LICENSE.md)","https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-code\u002Fblob\u002Fmain\u002FLICENSE.md",{"title":969,"url":970},"OpenAI Codex pricing","https:\u002F\u002Fdevelopers.openai.com\u002Fcodex\u002Fpricing",{"title":972,"url":743},"OpenAI Codex CLI repository",{"title":974,"url":975},"Codex: agent approvals and security","https:\u002F\u002Fdevelopers.openai.com\u002Fcodex\u002Fagent-approvals-security",{"title":977,"url":978},"Codex: sandboxing","https:\u002F\u002Fdevelopers.openai.com\u002Fcodex\u002Fconcepts\u002Fsandboxing","\u002Fimages\u002Fblog\u002Fgemini-cli\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fgemini-cli\u002Fog.jpg",[116,117,118],"Gemini CLI teszt: nyílt forráskodú, de egyéniként már nem ingyenes","A Gemini CLI Apache-2.0 licencű marad, de az ingyenes egyéni hozzáférés 2026. június 18-án megszűnt. Maradt a Code Assist, a fizetős API-kulcs és a Vertex AI.","Borítókép a Gemini CLI teszthez: egy prompt-ciklus a jóváhagyási kapun és a sandboxon át, a zárt ingyenes sávval","https:\u002F\u002Fwww.geminicli.com","Apache-2.0 · free individual tier closed 18 June 2026",{"slug":988,"published":989,"minutes":990,"category":7,"tags":991,"keywords":995,"about":1004,"sources":1016,"cover":1107,"og":1108,"expertise":114,"locales":1109,"lang":118,"title":1110,"description":1111,"coverAlt":1112,"url":1007,"pricing":1113,"kind":1114},"e2b","2026-10-02",12,[992,12,993,13,994],"Code sandbox","Firecracker","EU data residency",[996,997,998,999,1000,1001,1002,1003],"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",[1005,1008,1010,1013],{"name":1006,"url":1007},"E2B","https:\u002F\u002Fe2b.dev",{"name":993,"url":1009},"https:\u002F\u002Ffirecracker-microvm.github.io\u002F",{"name":1011,"url":1012},"Kernel-based Virtual Machine","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FKernel-based_Virtual_Machine",{"name":1014,"url":1015},"General Data Protection Regulation","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FGeneral_Data_Protection_Regulation",[1017,1020,1023,1026,1029,1032,1035,1038,1041,1044,1047,1050,1053,1056,1059,1062,1065,1068,1071,1074,1077,1080,1083,1086,1089,1092,1095,1098,1101,1104],{"title":1018,"url":1019},"E2B documentation: isolated sandboxes for agents","https:\u002F\u002Fe2b.dev\u002Fdocs",{"title":1021,"url":1022},"E2B billing and limits: plans, rates and API rate limits","https:\u002F\u002Fdocs.e2b.dev\u002Fbilling",{"title":1024,"url":1025},"E2B: how long a sandbox lives, timeouts and auto-pause","https:\u002F\u002Fdocs.e2b.dev\u002Ffaq\u002Fsandbox-lifetime",{"title":1027,"url":1028},"E2B: sandbox persistence, pause and resume","https:\u002F\u002Fdocs.e2b.dev\u002Fsandbox\u002Fpersistence",{"title":1030,"url":1031},"E2B: how template builds work, snapshots and kernel versions","https:\u002F\u002Fdocs.e2b.dev\u002Ftemplate\u002Fhow-it-works",{"title":1033,"url":1034},"E2B: template quickstart, build limits and templates versus snapshots","https:\u002F\u002Fdocs.e2b.dev\u002Ftemplate\u002Fquickstart",{"title":1036,"url":1037},"E2B: running your first sandbox","https:\u002F\u002Fdocs.e2b.dev\u002Fquickstart",{"title":1039,"url":1040},"E2B: run Python code in the code interpreter","https:\u002F\u002Fdocs.e2b.dev\u002Fcode-interpreting\u002Fsupported-languages\u002Fpython",{"title":1042,"url":1043},"E2B: internet access controls","https:\u002F\u002Fdocs.e2b.dev\u002Fnetwork\u002Finternet-access",{"title":1045,"url":1046},"E2B: secrets injected by the egress proxy","https:\u002F\u002Fdocs.e2b.dev\u002Fsecrets",{"title":1048,"url":1049},"E2B: is it SOC 2 compliant? Trust Center, DPA and sub-processors","https:\u002F\u002Fdocs.e2b.dev\u002Ffaq\u002Fsecurity-and-compliance",{"title":1051,"url":1052},"E2B: can I run sandboxes in the EU?","https:\u002F\u002Fdocs.e2b.dev\u002Ffaq\u002Feu-region",{"title":1054,"url":1055},"E2B: egress IP ranges and regions","https:\u002F\u002Fdocs.e2b.dev\u002Ffaq\u002Fegress-ip-ranges",{"title":1057,"url":1058},"E2B: does it support GPUs?","https:\u002F\u002Fdocs.e2b.dev\u002Ffaq\u002Fgpu-support",{"title":1060,"url":1061},"E2B: how to calculate the price of a sandbox, with current rates","https:\u002F\u002Fdocs.e2b.dev\u002Ffaq\u002Fcalculate-sandbox-price",{"title":1063,"url":1064},"E2B: Volumes beta limitations: file locking, mounts and regions","https:\u002F\u002Fdocs.e2b.dev\u002Ffaq\u002Fvolumes-beta-limitations",{"title":1066,"url":1067},"E2B: bring your own cloud (BYOC)","https:\u002F\u002Fdocs.e2b.dev\u002Fbyoc",{"title":1069,"url":1070},"E2B changelog: E2B Embed, the access token change and weekly releases","https:\u002F\u002Fdocs.e2b.dev\u002Fchangelog",{"title":1072,"url":1073},"E2B Embed: self-hosting on one machine (README)","https:\u002F\u002Fgithub.com\u002Fe2b-dev\u002Fruntime\u002Ftree\u002Fmain\u002Fembed",{"title":1075,"url":1076},"E2B Embed: Docker Compose requirements and sizing","https:\u002F\u002Fgithub.com\u002Fe2b-dev\u002Fruntime\u002Fblob\u002Fmain\u002Fembed\u002Fcompose\u002FREADME.md",{"title":1078,"url":1079},"E2B SDK repository, Apache-2.0","https:\u002F\u002Fgithub.com\u002Fe2b-dev\u002FE2B",{"title":1081,"url":1082},"Firecracker: lightweight microVMs on KVM","https:\u002F\u002Fgithub.com\u002Ffirecracker-microvm\u002Ffirecracker",{"title":1084,"url":1085},"Modal pricing: per-second CPU, memory and GPU","https:\u002F\u002Fmodal.com\u002Fpricing",{"title":1087,"url":1088},"Modal sandboxes: lifetime, gVisor and VM runtimes","https:\u002F\u002Fmodal.com\u002Fdocs\u002Fguide\u002Fsandbox",{"title":1090,"url":1091},"Modal region selection: region codes","https:\u002F\u002Fmodal.com\u002Fdocs\u002Fguide\u002Fregion-selection",{"title":1093,"url":1094},"Daytona pricing: vCPU and GiB rates","https:\u002F\u002Fwww.daytona.io\u002Fpricing",{"title":1096,"url":1097},"Daytona documentation: sandbox isolation and start time","https:\u002F\u002Fwww.daytona.io\u002Fdocs\u002Fen\u002F",{"title":1099,"url":1100},"Daytona regions: shared United States and Europe","https:\u002F\u002Fwww.daytona.io\u002Fdocs\u002Fen\u002Fregions\u002F",{"title":1102,"url":1103},"Docker security: kernel namespaces, control groups and capabilities","https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Fsecurity\u002F",{"title":1105,"url":1106},"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",[116,117,118],"E2B bemutató: Firecracker-sandboxok ügynökkódhoz, másodpercre számlázva","Az E2B minden ügynökfutást saját Firecracker microVM-ben futtat, pauzával, folytatással és másodpercenkénti számlázással. Hol illik, és hol ér véget az önhosztolás.","Borítókép az E2B-bemutatóhoz: az ügynökkód API-n keresztül egy microVM-sandboxba megy, és az eredmény visszakerül a ciklusba.","Usage-based · Hobby free, Pro from $150 a month","Code execution sandbox",1791636875727]