[{"data":1,"prerenderedAt":738},["ShallowReactive",2],{"blog-openai-codex-cli-en":3},{"slug":4,"published":5,"minutes":6,"category":7,"tags":8,"keywords":14,"about":23,"sources":30,"cover":61,"og":62,"expertise":63,"locales":64,"lang":65,"title":68,"description":69,"coverAlt":70,"metaTitle":71,"takeaways":72,"faq":78,"toc":91,"blocks":122,"others":470},"openai-codex-cli","2026-08-31",11,"agents",[9,10,11,12,13],"Coding agent","Terminal","Sandbox","CI","Rust",[15,16,17,18,19,20,21,22],"openai codex cli","codex cli config.toml","codex exec CI","codex sandbox mode","codex vs claude code","codex cli review","codex cli pricing","AGENTS.md codex",[24,27],{"name":25,"url":26},"OpenAI Codex","https:\u002F\u002Fdevelopers.openai.com\u002Fcodex",{"name":28,"url":29},"Model Context Protocol","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FModel_Context_Protocol",[31,34,37,40,43,46,49,52,55,58],{"title":32,"url":33},"Codex CLI documentation","https:\u002F\u002Fdevelopers.openai.com\u002Fcodex\u002Fcli",{"title":35,"url":36},"Codex: configuration","https:\u002F\u002Fdevelopers.openai.com\u002Fcodex\u002Fconfiguration",{"title":38,"url":39},"Codex: sample configuration","https:\u002F\u002Fdevelopers.openai.com\u002Fcodex\u002Fconfig-file\u002Fconfig-sample",{"title":41,"url":42},"Codex: permissions","https:\u002F\u002Fdevelopers.openai.com\u002Fcodex\u002Fpermission-modes",{"title":44,"url":45},"Codex: non-interactive mode","https:\u002F\u002Fdevelopers.openai.com\u002Fcodex\u002Fnon-interactive-mode",{"title":47,"url":48},"Codex: authentication","https:\u002F\u002Fdevelopers.openai.com\u002Fcodex\u002Fauth",{"title":50,"url":51},"Codex: Model Context Protocol","https:\u002F\u002Fdevelopers.openai.com\u002Fcodex\u002Fextend\u002Fmcp",{"title":53,"url":54},"Codex: pricing","https:\u002F\u002Fdevelopers.openai.com\u002Fcodex\u002Fpricing",{"title":56,"url":57},"Codex: open-source components","https:\u002F\u002Fdevelopers.openai.com\u002Fcodex\u002Fopen-source",{"title":59,"url":60},"Codex changelog","https:\u002F\u002Fdevelopers.openai.com\u002Fcodex\u002Fchangelog","\u002Fimages\u002Fblog\u002Fopenai-codex-cli\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fopenai-codex-cli\u002Fog.jpg","ai-engineer",[65,66,67],"en","de","hu","OpenAI Codex CLI: the agent that treats permissions as a config file","Codex CLI is OpenAI's open-source terminal coding agent. How its sandbox, approval policy and config.toml shape up, and what it costs to run unattended in CI.","A sheet joined by a line to a closed enclosure with three panels, one open, holding a square.","Codex CLI: permissions as a config file · Balázs Csorba",[73,74,75,76,77],"Codex CLI is Apache-2.0 licensed, written largely in Rust, and shipped as versioned npm packages, so it can be pinned in CI rather than curled at runtime.","The permission model is two independent settings, sandbox_mode and approval_policy, and changing who reviews an approval never widens the sandbox.","codex exec runs read-only by default, streams progress on stderr and prints only the final message on stdout, which makes it safe to wire into a pipeline.","The CLI requires a Git repository and refuses to run outside one unless you pass --skip-git-repo-check.","Signed-in ChatGPT plans and API-key billing are different accounting regimes: the subscription meter is message-shaped, the API is token-shaped, and they cannot be estimated against each other.",[79,82,85,88],{"q":80,"a":81},"Is Codex CLI open source?","Yes. The CLI, the SDK and the app server live in the openai\u002Fcodex repository under the Apache-2.0 licence. The IDE extension and Codex Cloud are not open source, and the security CLI ships separately as openai\u002Fcodex-security.",{"q":83,"a":84},"How do I run Codex CLI in CI without it touching anything?","Use codex exec, which runs in a read-only sandbox unless you pass --sandbox workspace-write. Progress goes to stderr and the final agent message goes to stdout, so a pipeline can capture the answer without parsing progress lines. An API key is the right credential in CI, because the API bills per token.",{"q":86,"a":87},"What is the difference between sandbox_mode and approval_policy?","sandbox_mode sets the boundary: read-only, workspace-write or danger-full-access. approval_policy sets when the agent pauses: on-request, never, or a granular table. They are separate, and switching the reviewer from user to auto_review keeps the same sandbox boundary.",{"q":89,"a":90},"Does Codex CLI work without a Git repository?","Not by default. The CLI requires commands to run inside a Git repository to prevent destructive changes, and codex exec refuses to start otherwise. --skip-git-repo-check overrides it, which is only reasonable in a container you already control.",[92,95,98,101,104,107,110,113,116,119],{"id":93,"title":94},"what-it-is","What it is",{"id":96,"title":97},"how-it-works","How it works",{"id":99,"title":100},"getting-started","Getting started",{"id":102,"title":103},"permissions","Sandbox and approvals",{"id":105,"title":106},"automation","Automation and codex exec",{"id":108,"title":109},"mcp-support","MCP and project context",{"id":111,"title":112},"cost","Cost and limits",{"id":114,"title":115},"where-it-shingles","Where it falls short",{"id":117,"title":118},"verdict","Verdict",{"id":120,"title":121},"sources","Sources",[123,127,135,138,141,174,175,178,184,187,188,191,193,215,216,227,229,275,278,289,290,296,298,309,327,328,331,333,336,337,340,347,348,351,402,405,406,409,421,436,437],{"type":124,"content":125},"paragraph",[126],"OpenAI Codex CLI is a terminal coding agent: it reads a repository, edits files, runs the project's own commands and iterates until the task is done. The interesting part is not the agent loop, which several competitors also do. It is that the safety model is expressed as two settings in a TOML file that a team can commit, review and pin, rather than as prompts or as a policy the vendor applies at the account level.",{"type":124,"content":128},[129,130,134],"That makes it the most governable coding agent in the category, and it also makes it the one where configuration mistakes are most expensive, because a committed ",{"tag":131,"children":132},"code",[133],"sandbox_mode = \"danger-full-access\""," is a policy decision that reaches production without anybody reviewing a diff. Everything below is an assessment of how well that trade-off holds up.",{"type":136,"level":137,"id":93,"text":94},"heading",2,{"type":124,"content":139},[140],"The CLI is published as versioned npm packages, currently 0.160.1, and the repository is Apache-2.0 with a Rust core. It is one surface of a wider Codex product that also includes the ChatGPT desktop app, an IDE extension and a cloud runner, but the CLI is the part that runs on a developer's machine and the only part that is open source.",{"type":142,"ordered":143,"items":144},"list",false,[145,151,161,163,172],[146,147,150],"Apache-2.0 licensed, Rust core, npm package ",{"tag":131,"children":148},[149],"@openai\u002Fcodex"," plus a standalone install script.",[152,153,156,157,160],"Configuration lives in ",{"tag":131,"children":154},[155],"~\u002F.codex\u002Fconfig.toml"," and can be scoped per project in ",{"tag":131,"children":158},[159],".codex\u002Fconfig.toml",".",[162],"Two separate sign-in paths: ChatGPT subscription or an API key, with different limits and different billing.",[164,165,168,169,160],"Local work needs a Git repository; ",{"tag":131,"children":166},[167],"codex exec"," enforces the same rule and offers ",{"tag":131,"children":170},[171],"--skip-git-repo-check",[173],"MCP servers are configured in the same config file and shared with the IDE extension and the desktop app on the same host.",{"type":136,"level":137,"id":96,"text":97},{"type":124,"content":176},[177],"The turn structure is the familiar one: a prompt plus repository context go to a model, the model emits tool calls, the CLI runs them inside a sandbox, and the results come back as tool output for the next turn. What differs from a shell wrapper is that the sandbox and the approval check are separate gates, and both are configured rather than prompted for.",{"type":179,"src":180,"alt":181,"wide":182,"caption":183},"image","\u002Fimages\u002Fblog\u002Fopenai-codex-cli\u002Fdiagram-7.webp","One Codex turn, with the sandbox and the approval gate The prompt and the AGENTS.md instructions go to the model. The model emits a tool call. The sandbox decides whether the call touches only the workspace, and the approval policy decides whether it pauses for the user first. If the call runs, its output returns to the model and the loop continues.",true,"The sandbox and the approval check are separate. Widening one does not widen the other.",{"type":124,"content":185},[186],"The loop is not the product, though. What a team actually configures is the boundary around it, and the documentation is unusually explicit that the two are orthogonal. A run in Full access edits any file on the machine and runs commands with the network without asking, and the docs describe that as a significant increase in the risk of data loss and leaks rather than burying it.",{"type":136,"level":137,"id":99,"text":100},{"type":124,"content":189},[190],"Install, sign in, run. The first launch offers Sign in with ChatGPT or an API key, and the choice matters later because it decides which limits apply and which billing regime you are in.",{"type":131,"code":192},"# Install on macOS or Linux; npm and Homebrew are also supported.\ncurl -fsSL https:\u002F\u002Fchatgpt.com\u002Fcodex\u002Finstall.sh | sh\n\n# Run inside a project directory, then sign in.\ncodex\n\n# Pin the version in CI instead of tracking latest.\nnpm install -g @openai\u002Fcodex@0.160.1\n\n# The first prompt is a good place for \u002Finit, which writes AGENTS.md.\n# \u002Fstatus, \u002Fmodel, \u002Fpermissions and \u002Freview are the other useful commands.",{"type":124,"content":194},[195,196,199,200,203,204,207,208,210,211,214],"",{"tag":131,"children":197},[198],"AGENTS.md"," is the durable instruction file. The CLI reads a global ",{"tag":131,"children":201},[202],"~\u002F.codex\u002FAGENTS.md",", then walks from the project root down to the current directory, taking one file per level, with ",{"tag":131,"children":205},[206],"AGENTS.override.md"," winning over ",{"tag":131,"children":209},[198],". The combined size is capped by ",{"tag":131,"children":212},[213],"project_doc_max_bytes",", which defaults to 32 KiB. For a team, that file is the most valuable thing to write, because it is the part of the agent's behaviour that goes through code review.",{"type":136,"level":137,"id":102,"text":103},{"type":124,"content":217},[218,219,222,223,226],"This is the part worth reading twice. The sandbox is the boundary; the approval policy is the pause. The default, Ask for approval, is ",{"tag":131,"children":220},[221],"sandbox_mode = \"workspace-write\""," with ",{"tag":131,"children":224},[225],"approval_policy = \"on-request\""," and a human reviewer. The docs are careful to note that switching the reviewer to auto_review does not widen the sandbox, which is the correct design and also the detail most tools get wrong.",{"type":131,"code":228},"# ~\u002F.codex\u002Fconfig.toml\nmodel = \"gpt-6.1-sol\"\nmodel_reasoning_effort = \"medium\"\n\n# Boundary: read-only | workspace-write | danger-full-access\nsandbox_mode = \"read-only\"\n\n# Pausing: on-request | never | granular table\napproval_policy = \"on-request\"\n\n# Reviewer: user | auto_review\napprovals_reviewer = \"user\"\n\n# Extra roots and network, only used when sandbox_mode = workspace-write\n[sandbox_workspace_write]\nwritable_roots = [\"~\u002Fcode\"]\nnetwork_access = false",{"type":230,"head":231,"rows":238},"table",[232,234,236],[233],"Setting",[235],"Values",[237],"What it does",[239,248,257,266],[240,244,246],[241],{"tag":131,"children":242},[243],"sandbox_mode",[245],"read-only, workspace-write, danger-full-access",[247],"Which files and network the agent can reach. Defaults to read-only.",[249,253,255],[250],{"tag":131,"children":251},[252],"approval_policy",[254],"on-request, never, granular",[256],"When the agent pauses. Defaults to on-request.",[258,262,264],[259],{"tag":131,"children":260},[261],"approvals_reviewer",[263],"user, auto_review",[265],"Who answers a prompt. Does not change the sandbox.",[267,271,273],[268],{"tag":131,"children":269},[270],"\u002Fpermissions",[272],"Ask for approval, Approve for me, Full access",[274],"Interactive presets over the same two settings.",{"type":124,"content":276},[277],"The config file goes deeper than this. There is a network proxy with per-domain allow and deny rules, a shell environment policy that filters variables whose names look like keys or tokens, writable roots, and hooks that run before a tool call. That is a lot of surface, and it is worth resisting the urge to configure all of it: every knob is a decision somebody has to make on someone else's behalf.",{"type":279,"variant":280,"title":281,"body":282},"callout","warn","Do not run with full access in a shared runner",[283],[284,285,288],"The docs describe Full access as a significant increase in the risk of data loss and leaks, and they are explicit that ",{"tag":131,"children":286},[287],"danger-full-access"," is for controlled environments such as an isolated CI runner or a container. A hosted runner with repository write access and an agent in full access is an unbounded loop with your credentials in it.",{"type":136,"level":137,"id":105,"text":106},{"type":124,"content":291},[292,293,295],"The non-interactive mode is the reason to pick this CLI over a chat-driven agent. ",{"tag":131,"children":294},[167]," runs in a read-only sandbox by default, streams progress to stderr, prints only the final message to stdout, and refuses to start outside a Git repository. That last rule is a guardrail against an agent rewriting a directory it cannot show a diff for.",{"type":131,"code":297},"# Progress on stderr, final message on stdout: safe to pipe.\ncodex exec \"summarise the repository structure\" | tee summary.md\n\n# Machine-readable: one JSON object per event.\ncodex exec --json \"triage the open bug reports\" | jq\n\n# Escalate the sandbox explicitly, never implicitly.\ncodex exec --sandbox workspace-write \"add a regression test and run it\"\n\n# Structured final answer against a schema, written to a file.\ncodex exec \"extract project metadata\" \\\n  --output-schema .\u002Fschema.json -o .\u002Fmetadata.json",{"type":124,"content":299},[300,301,304,305,308],"Two details make it production-shaped. With ",{"tag":131,"children":302},[303],"--json"," the event stream carries usage, including cached input tokens, so a pipeline can attribute cost per run rather than per month. And an MCP server marked ",{"tag":131,"children":306},[307],"required = true"," fails startup instead of silently continuing without it, which is the difference between a broken CI run and a subtly wrong one.",{"type":279,"variant":310,"title":311,"body":312},"note","Credentials in CI",[313],[314,315,318,319,322,323,326],"The documentation advises against setting ",{"tag":131,"children":316},[317],"OPENAI_API_KEY"," or ",{"tag":131,"children":320},[321],"CODEX_API_KEY"," as a job-level environment variable in workflows that check out or run repository-controlled code, since build scripts and lifecycle hooks in the same job can read them. Scope the key to the single invocation, or use the ",{"tag":131,"children":324},[325],"openai\u002Fcodex-action"," workflow action, which exists to keep that key out of the checkout step.",{"type":136,"level":137,"id":108,"text":109},{"type":124,"content":329},[330],"MCP servers are configured in the same config file, so they are shared across the CLI, the IDE extension and the desktop app on the same host. Both stdio and streamable HTTP transports are supported, with OAuth including dynamic client registration.",{"type":131,"code":332},"[mcp_servers.docs]\ncommand = \"npx\"\nargs = [\"-y\", \"@upstash\u002Fcontext7-mcp\"]\nenv_vars = [\"CONTEXT7_TOKEN\"]\nrequired = true          # fail startup instead of running without it\nenabled_tools = [\"search\", \"summarize\"]\ndefault_tools_approval_mode = \"prompt\"\ntool_timeout_sec = 45",{"type":124,"content":334},[335],"The cost of MCP is context, and the pricing documentation says so plainly: every server adds to the message and uses more of the allowance. A sensible team keeps two or three, disables the rest, and treats the server list as part of the per-turn budget rather than as a convenience list.",{"type":136,"level":137,"id":111,"text":112},{"type":124,"content":338},[339],"Two accounting regimes share the same binary, and they are not comparable. A ChatGPT plan meters messages in five-hour windows, and the published figures are estimates rather than caps: roughly 15 to 160 local messages per five hours on the Plus plan for the mid-tier models, against 350 to 3,000 on the cheapest. An API key meters tokens at published rates, which is what makes it the right credential for automation.",{"type":124,"content":341},[342,343,346],"The practical advice is short. Use the subscription for interactive work where a human is present to notice when the allowance is running out, and the API key for anything unattended, because only the second produces a predictable line item per run. The ",{"tag":131,"children":344},[345],"\u002Fstatus"," command shows remaining capacity in-session, and the docs are clear that prompt length alone is not a reliable predictor of what a task will consume.",{"type":136,"level":137,"id":114,"text":115},{"type":124,"content":349},[350],"Three problems, in order of how much they matter. First, the configuration surface is enormous for a tool whose core loop is unremarkable, and there is no way to run it with a deliberately small config that you can audit in one sitting. Second, the product around the CLI churns fast: models are deprecated on fixed dates, several were retired inside a single year, and a committed model name in a config file or a CI script becomes a liability. Third, the code review command reports findings without editing the tree, which is the right behaviour and much less useful than the ones that fix what they find.",{"type":230,"head":352,"rows":360},[353,354,356,358],[195],[355],"Codex CLI",[357],"Claude Code",[359],"Cline CLI",[361,375,384,393],[362,364,367,371],[363],"Non-interactive entry point",[365],{"tag":131,"children":366},[167],[368],{"tag":131,"children":369},[370],"claude -p",[372],{"tag":131,"children":373},[374],"cline --json",[376,378,380,382],[377],"Machine-readable output",[379],"JSONL events, JSON Schema output",[381],"JSON or stream-json, --json-schema",[383],"Newline-delimited messages",[385,387,389,391],[386],"Automation default",[388],"read-only sandbox",[390],"Bare mode skips local config",[392],"auto-approve true",[394,396,398,400],[395],"Configuration",[397],"One TOML file, shared across clients",[399],"Settings files, MCP config, hooks",[401],"Config view and CLI flags",{"type":124,"content":403},[404],"The comparison is close enough that the deciding factor is rarely the agent. It is what your permissions story already looks like. If the team already has a committed agent configuration under review, Codex fits. If not, the CLI's strength is a liability until someone writes that file.",{"type":136,"level":137,"id":117,"text":118},{"type":124,"content":407},[408],"Codex CLI is the strongest choice for teams that want a coding agent whose behaviour is a reviewable artefact. The sandbox and approval split is well designed, the read-only default for automation is the right default, and being Apache-2.0 means the configuration can be vendored and pinned. It is a weaker choice for a single developer who wants to try an agent without first writing a policy.",{"type":142,"ordered":182,"items":410},[411,413,415,417,419],[412],"Adopt it when the agent's permissions should live in a file that goes through code review, and pin the npm version in CI.",[414],"Use an API key for anything unattended. Subscription credit accounting does not survive contact with a scheduled job.",[416],"Write AGENTS.md before tuning anything else. It changes behaviour more than any flag in config.toml.",[418],"Keep sandbox_mode at workspace-write for automation, and reserve danger-full-access for a container you control.",[420],"Skip it if you need a stable model identifier over a year. The deprecation cadence is faster than most teams can absorb.",{"type":279,"variant":422,"title":423,"body":424},"tip","Start smaller than the docs suggest",[425],[426,427,429,430,432,433,435],"The high-value configuration for most repositories is four lines: a model, ",{"tag":131,"children":428},[221],", ",{"tag":131,"children":431},[225]," and an ",{"tag":131,"children":434},[198]," with the test command in it. Everything else can wait until a specific problem shows up.",{"type":136,"level":137,"id":120,"text":121},{"type":142,"ordered":182,"items":438},[439,443,446,449,452,455,458,461,464,467],[440],{"tag":441,"href":33,"children":442},"a",[32],[444],{"tag":441,"href":36,"children":445},[35],[447],{"tag":441,"href":39,"children":448},[38],[450],{"tag":441,"href":42,"children":451},[41],[453],{"tag":441,"href":45,"children":454},[44],[456],{"tag":441,"href":48,"children":457},[47],[459],{"tag":441,"href":51,"children":460},[50],[462],{"tag":441,"href":54,"children":463},[53],[465],{"tag":441,"href":57,"children":466},[56],[468],{"tag":441,"href":60,"children":469},[59],[471,528,601,669],{"slug":472,"published":473,"minutes":6,"category":7,"tags":474,"keywords":480,"about":491,"sources":500,"cover":522,"og":523,"expertise":63,"locales":524,"lang":65,"title":525,"description":526,"coverAlt":527},"agent-tool-design-descriptions-errors","2026-10-17",[475,476,477,478,479],"AI agents","Tool use","Function calling","MCP","Agent design",[481,482,483,484,485,486,487,488,489,490],"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",[492,495,497],{"name":493,"url":494},"Intelligent agent","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FIntelligent_agent",{"name":28,"url":496},"https:\u002F\u002Fmodelcontextprotocol.io\u002F",{"name":498,"url":499},"Poka-yoke","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPoka-yoke",[501,504,507,510,513,516,519],{"title":502,"url":503},"Anthropic Engineering: Writing effective tools for agents, with agents (Sep 2025)","https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Fwriting-tools-for-agents",{"title":505,"url":506},"Anthropic Engineering: Building effective agents (Dec 2024)","https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Fbuilding-effective-agents",{"title":508,"url":509},"Claude Platform Docs: Define tools","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fagents-and-tools\u002Ftool-use\u002Fdefine-tools",{"title":511,"url":512},"Claude Platform Docs: Handle tool calls","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fagents-and-tools\u002Ftool-use\u002Fhandle-tool-calls",{"title":514,"url":515},"Claude Platform Docs: Tool search tool","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fagents-and-tools\u002Ftool-use\u002Ftool-search-tool",{"title":517,"url":518},"Model Context Protocol specification 2025-11-25: Tools","https:\u002F\u002Fmodelcontextprotocol.io\u002Fspecification\u002F2025-11-25\u002Fserver\u002Ftools",{"title":520,"url":521},"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",[65,66,67],"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":529,"published":473,"minutes":6,"category":7,"tags":530,"keywords":536,"about":549,"sources":559,"cover":595,"og":596,"expertise":63,"locales":597,"lang":65,"title":598,"description":599,"coverAlt":600},"coding-agents-legacy-codebase-migration",[531,532,533,534,535],"Legacy migration","Coding agents","Strangler fig","Testing","Code review",[537,538,539,540,541,542,543,544,545,546,547,548],"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",[550,553,556],{"name":551,"url":552},"Legacy code","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FLegacy_code",{"name":554,"url":555},"Characterization test","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCharacterization_test",{"name":557,"url":558},"Strangler fig pattern","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FStrangler_fig_pattern",[560,563,565,568,571,574,577,580,583,586,589,592],{"title":561,"url":562},"Martin Fowler: Strangler Fig (2024)","https:\u002F\u002Fmartinfowler.com\u002Fbliki\u002FStranglerFigApplication.html",{"title":564,"url":555},"Wikipedia: Characterization test",{"title":566,"url":567},"Google Research: Accelerating code migrations with AI (2024)","https:\u002F\u002Fresearch.google\u002Fblog\u002Faccelerating-code-migrations-with-ai\u002F",{"title":569,"url":570},"Ziftci et al.: Migrating Code At Scale With LLMs At Google (arXiv 2504.09691)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2504.09691",{"title":572,"url":573},"Anthropic: Effective harnesses for long-running agents (2025)","https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Feffective-harnesses-for-long-running-agents",{"title":575,"url":576},"Anthropic: Redesigning source control at Anthropic (2026)","https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Fredesigning-source-control",{"title":578,"url":579},"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":581,"url":582},"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":584,"url":585},"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":587,"url":588},"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":590,"url":591},"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":593,"url":594},"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",[65,66,67],"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":602,"published":473,"minutes":603,"category":7,"tags":604,"keywords":607,"about":619,"sources":629,"cover":663,"og":664,"expertise":63,"locales":665,"lang":65,"title":666,"description":667,"coverAlt":668},"background-agents-async-pr-workflow",12,[532,605,12,535,606],"Pull requests","Automation",[608,609,610,611,612,613,614,615,616,617,618],"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",[620,623,626],{"name":621,"url":622},"Software agent","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSoftware_agent",{"name":624,"url":625},"Pull request","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FDistributed_version_control",{"name":627,"url":628},"Continuous integration","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FContinuous_integration",[630,631,634,637,640,643,646,649,652,654,657,660],{"title":593,"url":594},{"title":632,"url":633},"GitHub Docs: Risks and mitigations for Copilot cloud agent","https:\u002F\u002Fdocs.github.com\u002Fen\u002Fcopilot\u002Fconcepts\u002Fagents\u002Fcloud-agent\u002Frisks-and-mitigations",{"title":635,"url":636},"OpenAI Developers: Codex cloud environments","https:\u002F\u002Fdevelopers.openai.com\u002Fcodex\u002Fcloud\u002Fenvironments",{"title":638,"url":639},"Anthropic: Use Claude Code in the cloud","https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fclaude-code-on-the-web",{"title":641,"url":642},"Google Jules: Limits and plans","https:\u002F\u002Fjules.google\u002Fdocs\u002Fusage-limits\u002F",{"title":644,"url":645},"Google Jules: Getting started","https:\u002F\u002Fjules.google\u002Fdocs\u002F",{"title":647,"url":648},"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":650,"url":651},"GitHub Docs: Models and pricing for GitHub Copilot","https:\u002F\u002Fdocs.github.com\u002Fen\u002Fcopilot\u002Freference\u002Fcopilot-billing\u002Fmodels-and-pricing",{"title":653,"url":54},"OpenAI Developers: Codex pricing",{"title":655,"url":656},"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":658,"url":659},"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":661,"url":662},"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",[65,66,67],"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":670,"published":671,"minutes":672,"category":7,"tags":673,"keywords":679,"about":691,"sources":699,"cover":732,"og":733,"expertise":63,"locales":734,"lang":65,"title":735,"description":736,"coverAlt":737},"context-rot-compaction-long-running-agents","2026-10-16",10,[674,675,676,677,678],"Context rot","Compaction","Context engineering","Long-running agents","Agent memory",[680,681,682,683,684,685,686,687,688,689,690],"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",[692,695,698],{"name":693,"url":694},"Context window","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FLarge_language_model#Context_window",{"name":696,"url":697},"Attention (machine learning)","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FAttention_(machine_learning)",{"name":493,"url":494},[700,703,706,709,712,714,717,720,723,726,729],{"title":701,"url":702},"Chroma: Context Rot: How Increasing Input Tokens Impacts LLM Performance (Jul 2025)","https:\u002F\u002Fresearch.trychroma.com\u002Fcontext-rot",{"title":704,"url":705},"Liu et al.: Lost in the Middle: How Language Models Use Long Contexts (2023)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2307.03172",{"title":707,"url":708},"Modarressi et al.: NoLiMa: Long-Context Evaluation Beyond Literal Matching (2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2502.05167",{"title":710,"url":711},"Anthropic: Effective context engineering for AI agents (Sep 2025)","https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Feffective-context-engineering-for-ai-agents",{"title":713,"url":573},"Anthropic: Effective harnesses for long-running agents (Nov 2025)",{"title":715,"url":716},"Claude API docs: Compaction at a token threshold","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Fcompaction-threshold",{"title":718,"url":719},"Claude API docs: Compaction on demand","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Fcompaction-on-demand",{"title":721,"url":722},"Claude API docs: Context editing","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Fcontext-editing",{"title":724,"url":725},"Claude API docs: Memory tool","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fagents-and-tools\u002Ftool-use\u002Fmemory-tool",{"title":727,"url":728},"OpenAI API docs: Compaction","https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fguides\u002Fcompaction",{"title":730,"url":731},"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",[65,66,67],"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.",1792261156014]