[{"data":1,"prerenderedAt":749},["ShallowReactive",2],{"blog-crewai-en":3},{"slug":4,"published":5,"minutes":6,"category":7,"tags":8,"keywords":14,"about":22,"sources":26,"cover":54,"og":55,"expertise":56,"locales":57,"lang":58,"title":61,"description":62,"coverAlt":63,"metaTitle":64,"takeaways":65,"faq":71,"toc":84,"blocks":109,"others":478},"crewai","2026-06-08",10,"agents",[9,10,11,12,13],"Multi-agent","Agent orchestration","Python","Flows","Token cost",[4,15,16,17,18,19,20,21],"crewai vs langgraph","crewai framework review","multi-agent framework python","crewai flows","crewai memory","crewai pricing","agent framework comparison",[23],{"name":24,"url":25},"CrewAI","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCrewAI",[27,30,33,36,39,42,45,48,51],{"title":28,"url":29},"CrewAI documentation: introduction","https:\u002F\u002Fdocs.crewai.com\u002Fen\u002Fintroduction",{"title":31,"url":32},"CrewAI on PyPI: crewai 1.15.23","https:\u002F\u002Fpypi.org\u002Fproject\u002Fcrewai\u002F",{"title":34,"url":35},"CrewAI docs: Flows","https:\u002F\u002Fdocs.crewai.com\u002Fen\u002Fconcepts\u002Fflows",{"title":37,"url":38},"CrewAI docs: Memory","https:\u002F\u002Fdocs.crewai.com\u002Fen\u002Fconcepts\u002Fmemory",{"title":40,"url":41},"CrewAI docs: tracing","https:\u002F\u002Fdocs.crewai.com\u002Fen\u002Fobservability\u002Ftracing",{"title":43,"url":44},"CrewAI pricing","https:\u002F\u002Fwww.crewai.com\u002Fpricing",{"title":46,"url":47},"GitHub: crewAIInc\u002FcrewAI","https:\u002F\u002Fgithub.com\u002FcrewAIInc\u002FcrewAI",{"title":49,"url":50},"LangGraph overview","https:\u002F\u002Fdocs.langchain.com\u002Foss\u002Fpython\u002Flanggraph\u002Foverview",{"title":52,"url":53},"AutoGen AgentChat user guide","https:\u002F\u002Fmicrosoft.github.io\u002Fautogen\u002Fstable\u002Fuser-guide\u002Fagentchat-user-guide\u002Findex.html","\u002Fimages\u002Fblog\u002Fcrewai\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fcrewai\u002Fog.jpg","ai-engineer",[58,59,60],"en","de","hu","CrewAI review: crews, flows and the token bill","CrewAI is the MIT-licensed Python framework for multi-agent systems: crews for autonomous collaboration, flows for controlled state. What a run costs in tokens, and where the design hurts.","Five small squares in a circle joined by curved arrows, and a box of thin discs below.","CrewAI: crews, flows and the cost per task · Balázs Csorba",[66,67,68,69,70],"CrewAI 1.15.23 is MIT-licensed Python for 3.10 to 3.13, with no execution cap of its own and extras for tools, LiteLLM, mem0, Qdrant and Bedrock.","Crews delegate through model calls, so the cost of a run is set by topology: role prompts, a hierarchical manager, three guardrail retries and memory analysis all add calls.","Memory keeps records as LanceDB vectors and calls a model on save and on deep recall, on top of the embedding call.","Built-in tracing goes to CrewAI's own backend and asks for an account plus a first-run consent prompt; Langfuse, Phoenix, Braintrust and MLflow work over OpenTelemetry instead.","The framework is at its best when the flow holds the logic and one or two agents do the open-ended part.",[72,75,78,81],{"q":73,"a":74},"Is CrewAI free for production use?","Yes. The framework is MIT-licensed with no run quota; the cost is the model calls your agents make plus the infrastructure you run them on. The commercial product, CrewAI AMP, has a free Basic plan with 50 workflow executions a month and an Enterprise tier priced by quote.",{"q":76,"a":77},"Does CrewAI depend on LangChain?","No. The package has no LangChain dependency and is positioned as a standalone framework. Model access is handled through provider SDKs, with LiteLLM available as the crewai[litellm] extra.",{"q":79,"a":80},"How do crews and flows differ?","A flow owns state and execution order through @start, @listen and @router methods; a crew is a set of agents and tasks that runs inside a flow step. The vendor's own recommendation is to start with a flow and delegate to a crew when a step needs autonomy.",{"q":82,"a":83},"Is CrewAI's memory safe for sensitive data?","Not out of the box. Record content is sent to the configured LLM for scope, category and importance analysis, and the default embedder is OpenAI text-embedding-3-large. The documentation recommends a local LLM and a local embedder such as Ollama when content is sensitive.",[85,88,91,94,97,100,103,106],{"id":86,"title":87},"what-it-is","What CrewAI is",{"id":89,"title":90},"how-it-works","How a run works",{"id":92,"title":93},"getting-started","Getting started",{"id":95,"title":96},"memory-and-knowledge","Memory and knowledge",{"id":98,"title":99},"running-it-in-production","Running it in production",{"id":101,"title":102},"where-it-shingles","Where it shingle",{"id":104,"title":105},"verdict","Verdict",{"id":107,"title":108},"sources","Sources",[110,114,117,120,123,139,140,171,177,180,181,221,223,233,248,249,260,270,273,295,296,299,303,306,348,351,354,357,360,390,391,394,431,434,435,438,450,455,456],{"type":111,"content":112},"paragraph",[113],"CrewAI is an MIT-licensed Python framework for multi-agent systems, and in this category it is the one that is immediately usable: an agent gets a role, a goal and a backstory, a task gets an expected output, and a crew runs the two together in a few lines of code. The verdict is that the framework is well made, unusually well documented and quietly expensive. Every structural feature it adds on top of a plain prompt is implemented as an extra model call, and a production bill is made of exactly those calls.",{"type":111,"content":115},[116],"It occupies the same layer as LangGraph, AutoGen and Pydantic AI and competes on ergonomics rather than on control. The vendor splits the offer in two: the library on PyPI, which is free and unmetered, and CrewAI AMP, a hosted control plane with a visual editor, tracing and governance that is sold by quote. Everything below is about the library, because that is the part you install.",{"type":118,"level":119,"id":86,"text":87},"heading",2,{"type":111,"content":121},[122],"The library first appeared on PyPI in December 2023 and is developed in the open by CrewAI Inc. Version 1.15.23 was published on 28 September 2026, requires Python 3.10 to 3.13, and the repository carries 59,413 stars and 8,655 forks. It installs as a single wheel of about 1.2 MB, with optional extras for tools, LiteLLM, mem0, Qdrant, Bedrock, Anthropic and A2A support, so the base install stays small.",{"type":124,"ordered":125,"items":126},"list",false,[127,129,131,133,135,137],[128],"Licence MIT, no run quota, and no runtime dependency on LangChain or any other agent framework.",[130],"Two layers: flows, which own state and execution order, and crews, groups of agents that execute tasks.",[132],"An agent is a prompt with attributes: role, goal and backstory, plus an optional tool list, an LLM and a memory scope.",[134],"Processes are sequential or hierarchical. The hierarchical one needs a manager LLM and delegates work as model calls.",[136],"Results can be text, JSON or a Pydantic model, which is the clean way to hand output back to application code.",[138],"MCP servers attach to agents through crewai-tools over stdio, SSE or streamable HTTP.",{"type":118,"level":119,"id":89,"text":90},{"type":111,"content":141},[142,143,147,148,151,152,155,156,159,160,163,164,167,168,170],"A flow is a class of methods wired by decorators. ",{"tag":144,"children":145},"code",[146],"@start()"," marks the entry points, ",{"tag":144,"children":149},[150],"@listen()"," binds a method to another method's result, ",{"tag":144,"children":153},[154],"@router()"," sends execution down one of several branches, and ",{"tag":144,"children":157},[158],"and_"," and ",{"tag":144,"children":161},[162],"or_"," combine conditions. The state object is a Pydantic model, so the shape of the data moving between steps is declared rather than inferred, and ",{"tag":144,"children":165},[166],"flow.plot()"," renders the graph. When several ",{"tag":144,"children":169},[146]," methods are satisfied at once, they run in parallel.",{"type":172,"src":173,"alt":174,"wide":175,"caption":176},"image","\u002Fimages\u002Fblog\u002Fcrewai\u002Fdiagram-7.webp","Where the model calls go Four boxes in a row: a flow that owns state and order, a crew that owns tasks and process, an agent built from role, goal and backstory, and the language model behind the provider API. An arrow returns the crew output into the flow state. A second row holds memory, which saves and recalls, and tools such as MCP servers, APIs and code.",true,"The pipeline is cheap and the framework is not: each box is one more prompt the model has to read, and the boxes below the line are pure overhead a plain script would not have.",{"type":111,"content":178},[179],"Inside a flow step, a crew assembles the prompt: each agent's role, goal and backstory is prepended to every task, the task description is interpolated, and the output of one task becomes context for the next. An agent runs for up to 20 iterations by default, retries twice on error and summarises messages to stay inside the context window. That is the mechanism to watch. With the defaults on, a four-task crew is four long prompts before anything is delegated, and a crew with memory adds an embedding call per recall plus a model call to analyse and consolidate what it stores.",{"type":118,"level":119,"id":92,"text":93},{"type":111,"content":182},[183,184,187,188,190,191,194,195,159,198,201,202,205,206,209,210,213,214,216,217,220],"The CLI is the quick way in. ",{"tag":144,"children":185},[186],"uv tool install crewai"," puts a ",{"tag":144,"children":189},[4]," binary on the path, ",{"tag":144,"children":192},[193],"crewai create crew \u003Cname>"," scaffolds a JSON-first project with ",{"tag":144,"children":196},[197],"agents\u002F*.jsonc",{"tag":144,"children":199},[200],"crew.jsonc",", and ",{"tag":144,"children":203},[204],"crewai create flow \u003Cname>"," scaffolds a flow project. ",{"tag":144,"children":207},[208],"crewai install"," resolves dependencies through uv, ",{"tag":144,"children":211},[212],"crewai run"," executes the entry point, and ",{"tag":144,"children":215},[19]," opens a terminal browser for the store. The flag ",{"tag":144,"children":218},[219],"--classic"," restores the older Python class plus YAML layout.",{"type":144,"code":222},"from crewai import Agent, Crew, Process, Task\nfrom crewai.flow import Flow, listen, start\nfrom pydantic import BaseModel\n\n\nclass ReportState(BaseModel):\n    topic: str = \"agent memory\"\n    brief: str = \"\"\n\n\nclass ReportFlow(Flow[ReportState]):\n    @start()\n    def pick_topic(self):\n        self.state.topic = \"agent memory\"\n\n    @listen(pick_topic)\n    def research(self):\n        analyst = Agent(\n            role=\"Research analyst\",\n            goal=f\"Collect verifiable facts about {self.state.topic}\",\n            backstory=\"You read primary sources and quote them.\",\n            llm=\"openai\u002Fgpt-4o-mini\",\n        )\n        task = Task(\n            description=\"Write a brief on {topic}.\",\n            expected_output=\"Five bullets, each with a source URL.\",\n            agent=analyst,\n        )\n        crew = Crew(agents=[analyst], tasks=[task], process=Process.sequential)\n        self.state.brief = crew.kickoff(inputs={\"topic\": self.state.topic}).raw\n\nReportFlow().kickoff()",{"type":111,"content":224},[225,226,159,229,232],"That runs at most two model calls on a normal path: one for the agent's reasoning and tool loop, one for the final answer. Add a second agent, a manager or memory and the count moves quickly, which is why ",{"tag":144,"children":227},[228],"crew.usage_metrics",{"tag":144,"children":230},[231],"flow.usage_metrics"," are the first two things to put behind a dashboard.",{"type":234,"variant":235,"title":236,"body":237},"callout","note","Telemetry is on by default",[238],[239,240,243,244,247],"Anonymous usage telemetry ships unless ",{"tag":144,"children":241},[242],"CREWAI_DISABLE_TELEMETRY"," is set: package and Python version, operating system, number of agents and tasks, process type, whether memory and delegation are enabled, the model, agent roles and tool names. Prompts, backstories and model responses stay out of it. The opposite switch is ",{"tag":144,"children":245},[246],"share_crew=True"," on a crew, which opts into task descriptions, backstories, context and output.",{"type":118,"level":119,"id":95,"text":96},{"type":111,"content":250},[251,252,255,256,259],"Memory has been reworked into a single ",{"tag":144,"children":253},[254],"Memory"," class. Records are vectors in LanceDB under ",{"tag":144,"children":257},[258],".crewai\u002Fmemory",", ranked by a composite of semantic similarity, recency with a 30-day half-life and an importance score that the model assigns when saving. Recall has two depths: shallow is a plain vector search at roughly 200 ms with no model call, deep analyses the query first and runs only when the query is longer than 200 characters. When memory is enabled, a crew extracts facts from every task output and recalls context before every task.",{"type":124,"ordered":125,"items":261},[262,264,266,268],[263],"Storage is LanceDB by default and local, and the backend is a protocol, so another vector store can be plugged in.",[265],"The default embedder is OpenAI text-embedding-3-large at 3,072 dimensions and the default analysis model is gpt-4o-mini. Both are configurable.",[267],"Knowledge sources are a separate mechanism: they land in ChromaDB collections with a default relevance cut-off of 0.35 and three documents per query.",[269],"Saves run on a background thread and recall waits for them, so nothing is lost at the end of a run, but the analysis still costs tokens.",{"type":111,"content":271},[272],"Memory is also the part to read before signing off on a data protection review. The documentation states plainly that record content is sent to the configured LLM for scope, category and importance analysis, so anything sensitive needs a local model on both sides, for the LLM and for the embedder.",{"type":234,"variant":274,"title":275,"body":276},"warn","Check the embedding dimensions",[277],[278,279,282,283,286,287,290,291,294],"The default memory embedder is ",{"tag":144,"children":280},[281],"text-embedding-3-large"," at 3,072 dimensions. A store written earlier with ",{"tag":144,"children":284},[285],"text-embedding-3-small"," or ",{"tag":144,"children":288},[289],"text-embedding-ada-002"," at 1,536 dimensions fails on read. The documented remedies are ",{"tag":144,"children":292},[293],"crewai reset-memories -m",", deleting the storage directory, or configuring the older model explicitly until the store is migrated.",{"type":118,"level":119,"id":98,"text":99},{"type":111,"content":297},[298],"The library moves quickly. Stable releases landed on 9, 16 and 28 September 2026 and dev pre-releases are published daily, so pinning is not optional for anything long-lived. The repository has 570 open issues, and the same distribution now carries both the open-source runtime and the client for the hosted platform, which is why a changelog entry can hold a SQLite connection fix next to a platform feature.",{"type":118,"level":300,"id":301,"text":302},3,"observability","Observability",{"type":111,"content":304},[305],"Built-in tracing deserves a second look. It is off by default and configured separately from telemetry, but the destination is CrewAI's own backend: it needs a free AMP account, an authenticated CLI, and on the first run the process asks whether the execution trace may be shared. Traces contain prompts, inputs and outputs, and the local buffer keeps up to 1,000 spans before the oldest are dropped. For self-hosted work the OpenTelemetry integrations are the better default, and the documentation ships first-class paths for Langfuse, Arize Phoenix, Braintrust, Datadog, MLflow, Opik, Patronus, Portkey, Weave and Galileo.",{"type":124,"ordered":125,"items":307},[308,314,323,335],[309,310,313],"Set ",{"tag":144,"children":311},[312],"CREWAI_DISABLE_TELEMETRY=1"," unless you have a reason to send anonymous usage data to the vendor.",[315,316,159,319,322],"First-run tracing asks for consent in the terminal and discards the buffer if nobody answers; ",{"tag":144,"children":317},[318],"crewai traces enable",{"tag":144,"children":320},[321],"crewai traces disable"," change that later.",[324,327,328,159,331,334],{"tag":144,"children":325},[326],"kickoff_async()"," only wraps the synchronous run in a thread. ",{"tag":144,"children":329},[330],"akickoff()",{"tag":144,"children":332},[333],"akickoff_for_each()"," are the native async paths and the ones to use under load.",[336,339,340,343,344,347],{"tag":144,"children":337},[338],"@persist"," writes flow state to a local SQLite database by default. ",{"tag":144,"children":341},[342],"restore_from_state_id"," forks a run from a stored snapshot, while ",{"tag":144,"children":345},[346],"kickoff(inputs={\"id\": ...})"," resumes the original.",{"type":118,"level":300,"id":349,"text":350},"guardrails","Guardrails",{"type":111,"content":352},[353],"Task guardrails come in two forms. A Python callable receives the task output and returns a verdict, while a plain string is turned into an LLM guardrail that judges the output with the agent's own model. Retries default to three, so a guardrail that never passes can triple the cost of a task before anything is escalated. Guardrails validate output; they are not a boundary around tool use, and a prompt injection in a tool result passes straight through them.",{"type":118,"level":300,"id":355,"text":356},"licence-and-cost","Licence and cost",{"type":111,"content":358},[359],"The licence is the easy part. CrewAI is MIT with no run quota, and the only cost the framework itself adds is the model traffic its own features generate. The paid product is CrewAI AMP: a free Basic plan with 50 workflow executions a month, and an Enterprise tier quoted case by case.",{"type":361,"head":362,"rows":369},"table",[363,365,367],[364],"What you run",[366],"Price",[368],"What is included",[370,377,383],[371,373,375],[372],"CrewAI OSS",[374],"Free",[376],"No execution cap. You pay for model calls, tools and your own infrastructure.",[378,380,381],[379],"CrewAI AMP Basic",[374],[382],"50 workflow executions a month, visual editor, GitHub sync, tracing and OpenTelemetry.",[384,386,388],[385],"CrewAI AMP Enterprise",[387],"Custom quote",[389],"SSO, RBAC, workload identity, PII redaction, own VPC or on-prem, 45-day onboarding.",{"type":118,"level":119,"id":101,"text":102},{"type":111,"content":392},[393],"The weaknesses are structural and worth stating before any comparison. Every layer of the abstraction is a prompt: role, goal and backstory are prepended to each task, so the context grows with the crew, and the framework's own defaults, twenty iterations, three guardrail retries and memory analysis on save and on recall, are billed separately. Delegation and the hierarchical manager are the worst offenders, because each hop is another model call whose only job is to decide who works next. Python is the only runtime, in a category where the surrounding application is often TypeScript. And outside the paid platform, debugging rests on log output, which is weaker than a graph runtime that can replay a failed node.",{"type":361,"head":395,"rows":404},[396,398,400,402],[397],"Framework",[399],"How work is wired",[401],"Cost per task",[403],"Debugging story",[405,413,422],[406,407,409,411],[24],[408],"Roles and tasks; a flow owns state and order",[410],"Highest: delegation, memory analysis and guardrail retries add model calls",[412],"AMP traces need an account; OpenTelemetry hooks for Langfuse, Phoenix, Braintrust, MLflow",[414,416,418,420],[415],"LangGraph",[417],"Explicit graph, typed state, checkpoints",[419],"Lowest: routing is plain Python",[421],"LangSmith traces, checkpoint replay from any node",[423,425,427,429],[424],"AutoGen",[426],"Conversational teams with patterns and termination conditions",[428],"High and open-ended unless turn limits are set",[430],"AgentChat logging; GraphFlow adds a directed graph",{"type":111,"content":432},[433],"LangGraph is the better tool for a fixed production pipeline with loops and checkpoints, and it wins on cost because routing is plain Python. AutoGen is the better tool for open-ended conversation. CrewAI wins on the part that matters when the system has to be handed to someone who is not an engineer: the vocabulary is a job description, and the JSONC or YAML configuration is readable. The vendor's own documentation includes a LangGraph-to-CrewAI migration guide and comparison notebooks, which is worth knowing before a contract is signed.",{"type":118,"level":119,"id":104,"text":105},{"type":111,"content":436},[437],"CrewAI is a good default for teams that want agent-shaped code without hand-wiring a graph, and a poor default wherever the token bill is the binding constraint. The framework is competent, its documentation is better than its competitors', and the flow layer earns its place on its own. The cost is that autonomy is expressed as model calls, and the framework is happy to make them on your behalf.",{"type":124,"ordered":175,"items":439},[440,442,444,446,448],[441],"Adopt it when the pipeline is mostly linear and the expensive part is one or two open-ended steps. Keep the crew small and let the flow hold the logic.",[443],"Adopt it when non-engineers have to read or edit the configuration, because a role, a goal and a YAML file are easier to review than a node graph.",[445],"Do not adopt it for a fixed, high-volume pipeline where every hop is a plain function call. The coordination overhead buys flexibility such a pipeline never uses.",[447],"Do not adopt it if you need checkpoint replay and per-node cost attribution on day one, without either paying for the platform or wiring OpenTelemetry yourself.",[449],"Measure before keeping it: put usage_metrics behind a dashboard in the first week and compare the crew against the same steps written as a plain flow.",{"type":234,"variant":274,"title":451,"body":452},"The cost of being helped",[453],[454],"A hierarchical crew with memory and LLM guardrails can spend more tokens deciding and remembering than on the work itself. That is the design, not a defect. Budget for it, or switch the features off.",{"type":118,"level":119,"id":107,"text":108},{"type":124,"ordered":175,"items":457},[458],[459,462,464,466,468,470,472,474,476],{"tag":460,"href":29,"children":461},"a",[28],{"tag":460,"href":32,"children":463},[31],{"tag":460,"href":35,"children":465},[34],{"tag":460,"href":38,"children":467},[37],{"tag":460,"href":41,"children":469},[40],{"tag":460,"href":44,"children":471},[43],{"tag":460,"href":47,"children":473},[46],{"tag":460,"href":50,"children":475},[49],{"tag":460,"href":53,"children":477},[52],[479,538,611,681],{"slug":480,"published":481,"minutes":482,"category":7,"tags":483,"keywords":489,"about":500,"sources":510,"cover":532,"og":533,"expertise":56,"locales":534,"lang":58,"title":535,"description":536,"coverAlt":537},"agent-tool-design-descriptions-errors","2026-10-17",11,[484,485,486,487,488],"AI agents","Tool use","Function calling","MCP","Agent design",[490,491,492,493,494,495,496,497,498,499],"agent tool design","writing tool descriptions for llm","function calling best practices","tool use error handling","mcp tool design","tool calling is_error","how many tools should an agent have","tool search defer_loading","agent computer interface","llm tool schema design",[501,504,507],{"name":502,"url":503},"Intelligent agent","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FIntelligent_agent",{"name":505,"url":506},"Model Context Protocol","https:\u002F\u002Fmodelcontextprotocol.io\u002F",{"name":508,"url":509},"Poka-yoke","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPoka-yoke",[511,514,517,520,523,526,529],{"title":512,"url":513},"Anthropic Engineering: Writing effective tools for agents, with agents (Sep 2025)","https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Fwriting-tools-for-agents",{"title":515,"url":516},"Anthropic Engineering: Building effective agents (Dec 2024)","https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Fbuilding-effective-agents",{"title":518,"url":519},"Claude Platform Docs: Define tools","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fagents-and-tools\u002Ftool-use\u002Fdefine-tools",{"title":521,"url":522},"Claude Platform Docs: Handle tool calls","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fagents-and-tools\u002Ftool-use\u002Fhandle-tool-calls",{"title":524,"url":525},"Claude Platform Docs: Tool search tool","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fagents-and-tools\u002Ftool-use\u002Ftool-search-tool",{"title":527,"url":528},"Model Context Protocol specification 2025-11-25: Tools","https:\u002F\u002Fmodelcontextprotocol.io\u002Fspecification\u002F2025-11-25\u002Fserver\u002Ftools",{"title":530,"url":531},"OpenAI API Docs: Function calling","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Ffunction-calling","\u002Fimages\u002Fblog\u002Fagent-tool-design-descriptions-errors\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fagent-tool-design-descriptions-errors\u002Fog.jpg",[58,59,60],"Designing tools for AI agents: names, descriptions, schemas and error messages","How to design agent tools that get picked and called correctly: task-shaped tools, descriptions, schemas, compact responses and errors a model can act on.","Three rectangular slots in a base, with a block of matching width lined up over the middle slot and two wrong-width blocks beside it.",{"slug":539,"published":481,"minutes":482,"category":7,"tags":540,"keywords":546,"about":559,"sources":569,"cover":605,"og":606,"expertise":56,"locales":607,"lang":58,"title":608,"description":609,"coverAlt":610},"coding-agents-legacy-codebase-migration",[541,542,543,544,545],"Legacy migration","Coding agents","Strangler fig","Testing","Code review",[547,548,549,550,551,552,553,554,555,556,557,558],"legacy code migration ai","coding agent legacy codebase","strangler fig pattern ai","characterization tests legacy code","ai code migration review","agent assisted refactoring","legacy modernization coding agent","differential testing migration","shadow traffic migration","ai code review gate","test harness before migration","llm code migration",[560,563,566],{"name":561,"url":562},"Legacy code","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FLegacy_code",{"name":564,"url":565},"Characterization test","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCharacterization_test",{"name":567,"url":568},"Strangler fig pattern","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FStrangler_fig_pattern",[570,573,575,578,581,584,587,590,593,596,599,602],{"title":571,"url":572},"Martin Fowler: Strangler Fig (2024)","https:\u002F\u002Fmartinfowler.com\u002Fbliki\u002FStranglerFigApplication.html",{"title":574,"url":565},"Wikipedia: Characterization test",{"title":576,"url":577},"Google Research: Accelerating code migrations with AI (2024)","https:\u002F\u002Fresearch.google\u002Fblog\u002Faccelerating-code-migrations-with-ai\u002F",{"title":579,"url":580},"Ziftci et al.: Migrating Code At Scale With LLMs At Google (arXiv 2504.09691)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2504.09691",{"title":582,"url":583},"Anthropic: Effective harnesses for long-running agents (2025)","https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Feffective-harnesses-for-long-running-agents",{"title":585,"url":586},"Anthropic: Redesigning source control at Anthropic (2026)","https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Fredesigning-source-control",{"title":588,"url":589},"METR: Measuring the Impact of Early-2025 AI on Experienced Open-Source Developer Productivity","https:\u002F\u002Fmetr.org\u002Fblog\u002F2025-07-10-early-2025-ai-experienced-os-dev-study\u002F",{"title":591,"url":592},"Chand et al.: Why Industry Migrates and When It Trusts LLMs (ESEM 2026)","https:\u002F\u002Fdrops.dagstuhl.de\u002Fentities\u002Fdocument\u002F10.4230\u002FLIPIcs.ESEM.2026.85",{"title":594,"url":595},"Li et al.: Environment-in-the-Loop: Rethinking Code Migration with LLM-based Agents (arXiv 2602.09944)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2602.09944",{"title":597,"url":598},"AWS: Amazon Q Developer just reached a $260 million dollar milestone (2024)","https:\u002F\u002Faws.amazon.com\u002Fblogs\u002Fdevops\u002Famazon-q-developer-just-reached-a-260-million-dollar-milestone\u002F",{"title":600,"url":601},"OpenAI: Why SWE-bench Verified no longer measures frontier coding capabilities (2026)","https:\u002F\u002Fopenai.com\u002Findex\u002Fwhy-we-no-longer-evaluate-swe-bench-verified\u002F",{"title":603,"url":604},"GitHub Docs: About GitHub Copilot cloud agent","https:\u002F\u002Fdocs.github.com\u002Fen\u002Fcopilot\u002Fconcepts\u002Fagents\u002Fcoding-agent\u002Fabout-coding-agent","\u002Fimages\u002Fblog\u002Fcoding-agents-legacy-codebase-migration\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fcoding-agents-legacy-codebase-migration\u002Fog.jpg",[58,59,60],"Migrating a legacy codebase with coding agents: a strangler fig playbook","How to use coding agents on a legacy migration: characterization tests first, one seam per task, review gates and differential verification.","A stack of slabs with the top two replaced by fresh ones beside a seam and a check.",{"slug":612,"published":481,"minutes":613,"category":7,"tags":614,"keywords":618,"about":630,"sources":640,"cover":675,"og":676,"expertise":56,"locales":677,"lang":58,"title":678,"description":679,"coverAlt":680},"background-agents-async-pr-workflow",12,[542,615,616,545,617],"Pull requests","CI","Automation",[619,620,621,622,623,624,625,626,627,628,629],"background coding agent","async coding agent","cloud coding agent pull request","copilot coding agent limits","codex cloud tasks","claude code cloud sessions","jules coding agent limits","agent pull request review","coding agent sandbox","agent CI gating","cost per merged pull request",[631,634,637],{"name":632,"url":633},"Software agent","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSoftware_agent",{"name":635,"url":636},"Pull request","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FDistributed_version_control",{"name":638,"url":639},"Continuous integration","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FContinuous_integration",[641,642,645,648,651,654,657,660,663,666,669,672],{"title":603,"url":604},{"title":643,"url":644},"GitHub Docs: Risks and mitigations for Copilot cloud agent","https:\u002F\u002Fdocs.github.com\u002Fen\u002Fcopilot\u002Fconcepts\u002Fagents\u002Fcloud-agent\u002Frisks-and-mitigations",{"title":646,"url":647},"OpenAI Developers: Codex cloud environments","https:\u002F\u002Fdevelopers.openai.com\u002Fcodex\u002Fcloud\u002Fenvironments",{"title":649,"url":650},"Anthropic: Use Claude Code in the cloud","https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fclaude-code-on-the-web",{"title":652,"url":653},"Google Jules: Limits and plans","https:\u002F\u002Fjules.google\u002Fdocs\u002Fusage-limits\u002F",{"title":655,"url":656},"Google Jules: Getting started","https:\u002F\u002Fjules.google\u002Fdocs\u002F",{"title":658,"url":659},"GitHub Docs: About protected branches","https:\u002F\u002Fdocs.github.com\u002Fen\u002Frepositories\u002Fconfiguring-branches-and-merges-in-your-repository\u002Fmanaging-protected-branches\u002Fabout-protected-branches",{"title":661,"url":662},"GitHub Docs: Models and pricing for GitHub Copilot","https:\u002F\u002Fdocs.github.com\u002Fen\u002Fcopilot\u002Freference\u002Fcopilot-billing\u002Fmodels-and-pricing",{"title":664,"url":665},"OpenAI Developers: Codex pricing","https:\u002F\u002Fdevelopers.openai.com\u002Fcodex\u002Fpricing",{"title":667,"url":668},"Ehsani et al.: Where Do AI Coding Agents Fail? An Empirical Study of Failed Agentic Pull Requests in GitHub (MSR 2026, arXiv 2601.15195)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2601.15195",{"title":670,"url":671},"Peralta et al.: Why Are Agentic Pull Requests Merged or Rejected? An Empirical Study (MSR 2026, arXiv 2605.22534)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2605.22534",{"title":673,"url":674},"DORA: State of AI-assisted Software Development 2025","https:\u002F\u002Fdora.dev\u002Fdora-report-2025","\u002Fimages\u002Fblog\u002Fbackground-agents-async-pr-workflow\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fbackground-agents-async-pr-workflow\u002Fog.jpg",[58,59,60],"Background coding agents that open PRs: a practical async workflow","How async coding agents queue tasks, run in sandboxes, open draft PRs and pass CI. Provider limits, cost controls, review design and failure modes.","One card in a tray fanning out to five pads, all arrows leading to one page behind a gate.",{"slug":682,"published":683,"minutes":6,"category":7,"tags":684,"keywords":690,"about":702,"sources":710,"cover":743,"og":744,"expertise":56,"locales":745,"lang":58,"title":746,"description":747,"coverAlt":748},"context-rot-compaction-long-running-agents","2026-10-16",[685,686,687,688,689],"Context rot","Compaction","Context engineering","Long-running agents","Agent memory",[691,692,693,694,695,696,697,698,699,700,701],"context rot","context rot LLM","compaction AI agents","context engineering","long-running agents context window","Claude compaction API","context editing clear tool results","OpenAI responses compaction","lost in the middle LLM","agent context management","sub-agents context isolation",[703,706,709],{"name":704,"url":705},"Context window","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FLarge_language_model#Context_window",{"name":707,"url":708},"Attention (machine learning)","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FAttention_(machine_learning)",{"name":502,"url":503},[711,714,717,720,723,725,728,731,734,737,740],{"title":712,"url":713},"Chroma: Context Rot: How Increasing Input Tokens Impacts LLM Performance (Jul 2025)","https:\u002F\u002Fresearch.trychroma.com\u002Fcontext-rot",{"title":715,"url":716},"Liu et al.: Lost in the Middle: How Language Models Use Long Contexts (2023)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2307.03172",{"title":718,"url":719},"Modarressi et al.: NoLiMa: Long-Context Evaluation Beyond Literal Matching (2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2502.05167",{"title":721,"url":722},"Anthropic: Effective context engineering for AI agents (Sep 2025)","https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Feffective-context-engineering-for-ai-agents",{"title":724,"url":583},"Anthropic: Effective harnesses for long-running agents (Nov 2025)",{"title":726,"url":727},"Claude API docs: Compaction at a token threshold","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Fcompaction-threshold",{"title":729,"url":730},"Claude API docs: Compaction on demand","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Fcompaction-on-demand",{"title":732,"url":733},"Claude API docs: Context editing","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Fcontext-editing",{"title":735,"url":736},"Claude API docs: Memory tool","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fagents-and-tools\u002Ftool-use\u002Fmemory-tool",{"title":738,"url":739},"OpenAI API docs: Compaction","https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fguides\u002Fcompaction",{"title":741,"url":742},"Cognition: Don't Build Multi-Agents","https:\u002F\u002Fcognition.ai\u002Fblog\u002Fdont-build-multi-agents","\u002Fimages\u002Fblog\u002Fcontext-rot-compaction-long-running-agents\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fcontext-rot-compaction-long-running-agents\u002Fog.jpg",[58,59,60],"Context rot in long-running agents: clearing, compaction, memory and sub-agents","Why LLM accuracy drops as context grows, and how clearing tool results, compaction, notes and sub-agents keep long-running agents on track.","A small square press squeezing a tall stack of sheets into a short one, two notes branching off.",1792261156539]