[{"data":1,"prerenderedAt":609},["ShallowReactive",2],{"navigation":3,"\u002Fblog\u002Fclaude-computer-use-in-a-box":208,"\u002Fblog\u002Fclaude-computer-use-in-a-box-surround":607},[4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180,184,188,192,196,200,204],{"title":5,"path":6,"stem":7},"You do not have time to not have tests","\u002Fblog\u002Fyou-do-not-have-time-to-not-have-tests","2.blog\u002F20211217.you-do-not-have-time-to-not-have-tests",{"title":9,"path":10,"stem":11},"Migrate Vue 2 with Vuetify and Jest to Vite and Vitest","\u002Fblog\u002Fmigrate-vue-2-with-vuetify-and-jest-to-vite-and-vitest","2.blog\u002F20220109.migrate-vue-2-with-vuetify-and-jest-to-vite-and-vitest",{"title":13,"path":14,"stem":15},"I am a Dark Matter Developer","\u002Fblog\u002Fi-am-a-dark-matter-developer","2.blog\u002F20220626.i-am-a-dark-matter-developer",{"title":17,"path":18,"stem":19},"Why using Conventional commits is useful","\u002Fblog\u002Fusing-conventional-commits","2.blog\u002F20240623.using-conventional-commits",{"title":21,"path":22,"stem":23},"Why you should make a toolbox repository","\u002Fblog\u002Fwhy-you-should-make-a-toolbox-repository","2.blog\u002F20240630.Why-you-should-make-a-toolbox-repository",{"title":25,"path":26,"stem":27},"Apache Airflow Part 1 - Why and Goals for a near Serverless ELT","\u002Fblog\u002Fapache-airflow-part-1-why-and-goals","2.blog\u002F20240710.apache-airflow-part-1-why-and-goals",{"title":29,"path":30,"stem":31},"Oh My Zsh on your server","\u002Fblog\u002Foh-my-zsh-on-your-server","2.blog\u002F20240711.oh-my-zsh-on-your-server",{"title":33,"path":34,"stem":35},"Fire tablet and YouTube Kids","\u002Fblog\u002Ffire-tablet-and-youtube-kids","2.blog\u002F20240714.fire-tablet-and-youtube-kids",{"title":37,"path":38,"stem":39},"Using Ollama and Continue as a GitHub Copilot Alternative","\u002Fblog\u002Fusing-ollama-and-continue-as-github-copilot-alternative","2.blog\u002F20240723.using-ollama-and-continue-as-github-copilot-alternative",{"title":41,"path":42,"stem":43},"Debugging Local Packages Made Easy with pnpm","\u002Fblog\u002Fdebugging-local-packages-with-pnpm-link","2.blog\u002F20250422.debugging local-packages-with-pnpm-link",{"title":45,"path":46,"stem":47},"Two Weeks with Cloudflare AI and Tools","\u002Fblog\u002Ftwo-weeks-with-cloudflare-ai-and-tools","2.blog\u002F20250509.two-weeks-with-cloudflare-aI-and-tools",{"title":49,"path":50,"stem":51},"Adding Prompts to VS Code - How I Learned to Stop Worrying and Love AI Context","\u002Fblog\u002Fadding-prompts-to-vscode","2.blog\u002F20250528.adding-prompts-to-vscode",{"title":53,"path":54,"stem":55},"My Best Practices","\u002Fblog\u002Fmy-best-practicies","2.blog\u002F20250607.my-best-practicies",{"title":57,"path":58,"stem":59},"Creating my own CLI Tool - Towles Tool","\u002Fblog\u002Ftowles-tool","2.blog\u002F20250607.towles-tool",{"title":61,"path":62,"stem":63},"Software Development Best Practices & ITIL","\u002Fblog\u002Fsoftware-engineering-and-itil-best-practices","2.blog\u002F20250612.software-engineering-and-itil-best-practices",{"title":65,"path":66,"stem":67},"Voice to Text","\u002Fblog\u002Fvoice-to-text","2.blog\u002F20250622.voice-to-text",{"title":69,"path":70,"stem":71},"Setting Up ComfyUI - A Better Alternative to Fooocus","\u002Fblog\u002Fcomfy-ui-setup","2.blog\u002F20250628.comfy-ui-setup",{"title":73,"path":74,"stem":75},"Voice to System","\u002Fblog\u002Fvoice-to-system","2.blog\u002F20250705.voice-to-system",{"title":77,"path":78,"stem":79},"Tips for Claude Code","\u002Fblog\u002Ftips-for-claude-code","2.blog\u002F20250713.tips-for-claude-code",{"title":81,"path":82,"stem":83},"Review That AI Code: Why I Read Every Line Generated Code","\u002Fblog\u002Freview-that-ai-code","2.blog\u002F20250720.review-that-ai-code",{"title":85,"path":86,"stem":87},"My Context Engineering Journey: From Dev Scripts to AI Collaboration","\u002Fblog\u002F20250803-1.my-context-engineering-journey","2.blog\u002F20250803-1.my-context-engineering-journey",{"title":89,"path":90,"stem":91},"Context Engineering at Scale: Enterprise Lessons and the Future of Development","\u002Fblog\u002F20250803-2.context-engineering-at-scale","2.blog\u002F20250803-2.context-engineering-at-scale",{"title":93,"path":94,"stem":95},"Check That Your Tools and Linters Do Not Burn Tokens","\u002Fblog\u002Fcheck-that-your-tools-and-linters-do-not-burn-tokens","2.blog\u002F20250806.check-that-your-tools-and-linters-do-not-burn-tokens",{"title":97,"path":98,"stem":99},"Markdown + AI: The Communication Protocol That Changes Everything","\u002Fblog\u002Fmarkdown-plus-ai-the-communication-protocol-that-changes-everything","2.blog\u002F20250814.markdown-plus-ai-the-communication-protocol-that-changes-everything",{"title":101,"path":102,"stem":103},"Finally: Type-Safe AI in Production (And Why I'm Here For It)","\u002Fblog\u002Ffinally-type-safe-ai-in-production-and-why-im-here-for-it","2.blog\u002F20250819.finally-type-safe-ai-in-production-and-why-im-here-for-it",{"title":105,"path":106,"stem":107},"Dotfiles: Masterpiece or Late Stage Picasso?","\u002Fblog\u002Fdotfiles-masterpiece-or-late-stage-picasso","2.blog\u002F20250822.dotfiles-masterpiece-or-late-stage-picasso",{"title":109,"path":110,"stem":111},"Beyond API Wrappers: Building State-Driven MCP Servers for Long-Horizon Agent Orchestration","\u002Fblog\u002Fbeyond-api-wrappers-mcp-servers","2.blog\u002F20250907.beyond-api-wrappers-mcp-servers",{"title":113,"path":114,"stem":115},"Why Vertical Integration Wins: A Software Engineer's Case for Owning Your Stack","\u002Fblog\u002Fwhy-i-bought-tesla-model-3-vertical-integration","2.blog\u002F20250928.why-i-bought-tesla-model-3-vertical-integration",{"title":117,"path":118,"stem":119},"The Min-Maxer's Trifecta: Building Tools for the Game You Actually Play","\u002Fblog\u002Fmin-maxer-trifecta","2.blog\u002F20251004.min-maxer-trifecta",{"title":121,"path":122,"stem":123},"Read The Source: Learning by Cutting Out The Middleman and RTFM","\u002Fblog\u002Fread-the-source","2.blog\u002F20251010.read-the-source",{"title":125,"path":126,"stem":127},"The Exponential Shift: Why AI Progress Feels Different Now","\u002Fblog\u002Fthe-exponential-shift","2.blog\u002F20251015.the-exponential-shift",{"title":129,"path":130,"stem":131},"Plan Mode for Your Problems, Edit Mode for Claude's","\u002Fblog\u002Fplan-mode-problems-edit-mode-solutions","2.blog\u002F20251019.plan-mode-problems-edit-mode-solutions",{"title":133,"path":134,"stem":135},"AWS Aurora DSQL Looked Perfect Until I Needed the Connection String","\u002Fblog\u002Faws-aurora-dsql-postgres-serverless-authentication","2.blog\u002F20251028.aws-aurora-dsql-postgres-serverless-authentication",{"title":137,"path":138,"stem":139},"Switchback: Browser History for Your Thoughts","\u002Fblog\u002Fswitchback-second-order-reasoning","2.blog\u002F20251205.switchback-second-order-reasoning",{"title":141,"path":142,"stem":143},"AI Pairing: Notes to Self","\u002Fblog\u002Fai-pairing-notes-to-self","2.blog\u002F20251216.ai-pairing-notes-to-self",{"title":145,"path":146,"stem":147},"I've Been Sleeping on Zellij","\u002Fblog\u002Fsleeping-on-zellij","2.blog\u002F20251229.sleeping-on-zellij",{"title":149,"path":150,"stem":151},"Implementing a Ralph Wiggum Loop: The Secret is Session Markers","\u002Fblog\u002Fimplementing-ralph-wiggum-loop-for-autonomous-ai-coding","2.blog\u002F20260114.implementing-ralph-wiggum-loop-for-autonomous-ai-coding",{"title":153,"path":154,"stem":155},"Goodhart's Law Ate My Context Window","\u002Fblog\u002Fgoodharts-law-ate-my-context-window","2.blog\u002F20260119.goodharts-law-ate-my-context-window",{"title":157,"path":158,"stem":159},"Claude Code's Hidden Multi-Agent System Is Real","\u002Fblog\u002Fclaude-code-hidden-multi-agent-system","2.blog\u002F20260124.claude-code-hidden-multi-agent-system",{"title":161,"path":162,"stem":163},"Free Printable Math Sheets for Kids — Number Chart, Skip Counting, Multiplication, and More","\u002Fblog\u002Ffree-printable-number-chart-and-coin-sheets","2.blog\u002F20260214.free-printable-number-chart-and-coin-sheets",{"title":165,"path":166,"stem":167},"We Are Near the End of the Exponential","\u002Fblog\u002Fnear-the-end-of-the-exponential","2.blog\u002F20260214.near-the-end-of-the-exponential",{"title":169,"path":170,"stem":171},"Free Printable Language Arts Sheets for Kids — Sight Words, Parts of Speech, Homophones, and More","\u002Fblog\u002Ffree-printable-sight-words-and-grammar-sheets","2.blog\u002F20260215.free-printable-sight-words-and-grammar-sheets",{"title":173,"path":174,"stem":175},"Interactive Code Execution with Artifacts","\u002Fblog\u002Finteractive-code-execution-with-artifacts","2.blog\u002F20260215.interactive-code-execution-with-artifacts",{"title":177,"path":178,"stem":179},"Free Printable Telling Time Worksheet for Kids — Clock Reference & Practice Sheet","\u002Fblog\u002Ffree-printable-telling-time-worksheet","2.blog\u002F20260216.free-printable-telling-time-worksheet",{"title":181,"path":182,"stem":183},"Claude Code Skills: Teaching AI Your Playbook","\u002Fblog\u002Fclaude-code-skills-guide","2.blog\u002F20260221.claude-code-skills-guide",{"title":185,"path":186,"stem":187},"Building a Multi-Agent Loan Approval System with Human-in-the-Loop","\u002Fblog\u002Fmulti-agent-loan-approval-human-in-the-loop","2.blog\u002F20260225.multi-agent-loan-approval-human-in-the-loop",{"title":189,"path":190,"stem":191},"The Inception of AI Infrastructure: Bottlenecks All the Way Down","\u002Fblog\u002Fbiggest-bottleneck-scaling-ai-compute","2.blog\u002F20260313.biggest-bottleneck-scaling-ai-compute",{"title":193,"path":194,"stem":195},"What I Tell Teams About Claude Code","\u002Fblog\u002Fwhat-i-tell-teams-about-claude-code","2.blog\u002F20260314.what-i-tell-teams-about-claude-code",{"title":197,"path":198,"stem":199},"The Hardest Part of AI Isn't the AI","\u002Fblog\u002Fthe-hardest-part-of-ai-isnt-the-ai","2.blog\u002F20260327.the-hardest-part-of-ai-isnt-the-ai",{"title":201,"path":202,"stem":203},"Claude Code Hooks: The Capability I Left on the Table","\u002Fblog\u002Fclaude-code-hooks-capability-left-on-the-table","2.blog\u002F20260401.claude-code-hooks-capability-left-on-the-table",{"title":205,"path":206,"stem":207},"Claude in a Box: Trying Computer-Use on My Laptop","\u002Fblog\u002Fclaude-computer-use-in-a-box","2.blog\u002F20260418.claude-computer-use-in-a-box",{"id":209,"title":205,"authors":210,"badge":216,"body":218,"date":596,"description":597,"extension":598,"image":599,"meta":602,"navigation":603,"path":206,"seo":604,"status":605,"stem":207,"__hash__":606},"posts\u002F2.blog\u002F20260418.claude-computer-use-in-a-box.md",[211],{"name":212,"to":213,"avatar":214},"Chris Towles","https:\u002F\u002Ftwitter.com\u002FChris_Towles",{"src":215},"\u002Fimages\u002Fctowles-profile-512x512.png",{"label":217},"AI Tools",{"type":219,"value":220,"toc":588},"minimark",[221,233,238,247,251,263,473,476,517,524,528,531,535,542,545,548,552,555,558,566,570,581,584],[222,223,224,225,232],"p",{},"Most software I automate is designed for it. Developer tools -- git, Docker, kubectl, Terraform, the cloud consoles, Postgres, GitHub -- all ship CLIs, APIs, or MCP servers that are fast and scriptable. Chrome DevTools MCP handles the browser. But plenty of apps have none of that, just a GUI and no automation story. Computer-use is for those. I finally spun up ",[226,227,231],"a",{"href":228,"rel":229},"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-quickstarts\u002Ftree\u002Fmain\u002Fcomputer-use-demo",[230],"nofollow","Anthropic's computer-use demo"," this week to try it.",[234,235,237],"h2",{"id":236},"the-demo","The demo",[222,239,240,241,246],{},"Anthropic ",[226,242,245],{"href":243,"rel":244},"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-quickstarts\u002Ftree\u002Fmain\u002Fcomputer-use-demo#quickstart-running-the-docker-container",[230],"ships a Docker image"," with a full Linux desktop inside -- Firefox, LibreOffice, a file manager, a terminal. The agent loop talks to the Claude API and drives the screen. Four ways in: a Streamlit chat on 8501, a browser VNC on 6080, a combined chat + desktop page on 8080, and a native VNC connection on 5900. 8080 is the one you want.",[234,248,250],{"id":249},"setup","Setup",[222,252,253,254,258,259,262],{},"I dropped this into my ",[255,256,257],"code",{},"toolbox"," repo under ",[255,260,261],{},"config\u002Fcomputer-use\u002F",":",[264,265,270],"pre",{"className":266,"code":267,"language":268,"meta":269,"style":269},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","services:\n  computer-use:\n    image: ghcr.io\u002Fanthropics\u002Fanthropic-quickstarts:computer-use-demo-latest\n    container_name: claude-computer-use\n    restart: unless-stopped\n    env_file: .env\n    environment:\n      WIDTH: '${WIDTH:-1024}'\n      HEIGHT: '${HEIGHT:-768}'\n    ports:\n      - '127.0.0.1:5900:5900'\n      - '127.0.0.1:6080:6080'\n      - '127.0.0.1:8080:8080'\n      - '127.0.0.1:8501:8501'\n    volumes:\n      - ${HOME}\u002F.anthropic:\u002Fhome\u002Fcomputeruse\u002F.anthropic\n    stdin_open: true\n    tty: true\n","yaml","",[255,271,272,285,293,305,316,327,338,346,363,378,386,399,411,423,435,443,451,463],{"__ignoreMap":269},[273,274,277,281],"span",{"class":275,"line":276},"line",1,[273,278,280],{"class":279},"swJcz","services",[273,282,284],{"class":283},"sMK4o",":\n",[273,286,288,291],{"class":275,"line":287},2,[273,289,290],{"class":279},"  computer-use",[273,292,284],{"class":283},[273,294,296,299,301],{"class":275,"line":295},3,[273,297,298],{"class":279},"    image",[273,300,262],{"class":283},[273,302,304],{"class":303},"sfazB"," ghcr.io\u002Fanthropics\u002Fanthropic-quickstarts:computer-use-demo-latest\n",[273,306,308,311,313],{"class":275,"line":307},4,[273,309,310],{"class":279},"    container_name",[273,312,262],{"class":283},[273,314,315],{"class":303}," claude-computer-use\n",[273,317,319,322,324],{"class":275,"line":318},5,[273,320,321],{"class":279},"    restart",[273,323,262],{"class":283},[273,325,326],{"class":303}," unless-stopped\n",[273,328,330,333,335],{"class":275,"line":329},6,[273,331,332],{"class":279},"    env_file",[273,334,262],{"class":283},[273,336,337],{"class":303}," .env\n",[273,339,341,344],{"class":275,"line":340},7,[273,342,343],{"class":279},"    environment",[273,345,284],{"class":283},[273,347,349,352,354,357,360],{"class":275,"line":348},8,[273,350,351],{"class":279},"      WIDTH",[273,353,262],{"class":283},[273,355,356],{"class":283}," '",[273,358,359],{"class":303},"${WIDTH:-1024}",[273,361,362],{"class":283},"'\n",[273,364,366,369,371,373,376],{"class":275,"line":365},9,[273,367,368],{"class":279},"      HEIGHT",[273,370,262],{"class":283},[273,372,356],{"class":283},[273,374,375],{"class":303},"${HEIGHT:-768}",[273,377,362],{"class":283},[273,379,381,384],{"class":275,"line":380},10,[273,382,383],{"class":279},"    ports",[273,385,284],{"class":283},[273,387,389,392,394,397],{"class":275,"line":388},11,[273,390,391],{"class":283},"      -",[273,393,356],{"class":283},[273,395,396],{"class":303},"127.0.0.1:5900:5900",[273,398,362],{"class":283},[273,400,402,404,406,409],{"class":275,"line":401},12,[273,403,391],{"class":283},[273,405,356],{"class":283},[273,407,408],{"class":303},"127.0.0.1:6080:6080",[273,410,362],{"class":283},[273,412,414,416,418,421],{"class":275,"line":413},13,[273,415,391],{"class":283},[273,417,356],{"class":283},[273,419,420],{"class":303},"127.0.0.1:8080:8080",[273,422,362],{"class":283},[273,424,426,428,430,433],{"class":275,"line":425},14,[273,427,391],{"class":283},[273,429,356],{"class":283},[273,431,432],{"class":303},"127.0.0.1:8501:8501",[273,434,362],{"class":283},[273,436,438,441],{"class":275,"line":437},15,[273,439,440],{"class":279},"    volumes",[273,442,284],{"class":283},[273,444,446,448],{"class":275,"line":445},16,[273,447,391],{"class":283},[273,449,450],{"class":303}," ${HOME}\u002F.anthropic:\u002Fhome\u002Fcomputeruse\u002F.anthropic\n",[273,452,454,457,459],{"class":275,"line":453},17,[273,455,456],{"class":279},"    stdin_open",[273,458,262],{"class":283},[273,460,462],{"class":461},"sfNiH"," true\n",[273,464,466,469,471],{"class":275,"line":465},18,[273,467,468],{"class":279},"    tty",[273,470,262],{"class":283},[273,472,462],{"class":461},[222,474,475],{},"Notes:",[477,478,479,496,502,508],"ul",{},[480,481,482,483,486,487,491,492,495],"li",{},"Ports on ",[255,484,485],{},"127.0.0.1"," so the VNC session isn't exposed to the LAN. The ",[226,488,490],{"href":243,"rel":489},[230],"upstream README"," binds them with no explicit address, which means ",[255,493,494],{},"0.0.0.0"," by default.",[480,497,498,501],{},[255,499,500],{},".env"," holds the API key and is gitignored.",[480,503,504,507],{},[255,505,506],{},"~\u002F.anthropic"," is mounted so the key and system prompt persist between runs.",[480,509,510,511,516],{},"Resolution stays at 1024x768. The ",[226,512,515],{"href":513,"rel":514},"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-quickstarts\u002Ftree\u002Fmain\u002Fcomputer-use-demo#screen-size",[230],"README is explicit",": the API downscales anything larger.",[222,518,519,520,523],{},"First run pulls about 2 GB. After that, ",[255,521,522],{},"docker compose up -d"," gets you going in a few seconds.",[234,525,527],{"id":526},"what-it-feels-like","What it feels like",[222,529,530],{},"First task I gave it: \"open Firefox, go to my blog, find the post about hooks.\" It worked, and it was faster than I expected -- about one to two seconds between turns. That's snappier than what I see driving Chrome DevTools MCP from Claude Code, where each round trip has more surface area to cover. Every click is still a screenshot-think-act cycle, and you watch each one play out in the chat panel next to a note on what Claude was looking at, but the cadence felt fine. I stopped thinking about the delay after a couple of minutes.",[234,532,534],{"id":533},"the-part-i-cared-about","The part I cared about",[222,536,537],{},[538,539],"img",{"alt":540,"src":541},"Claude driving LibreOffice Calc inside the container","\u002Fimages\u002Fblog\u002F20260418-computer-use-libreoffice.png",[222,543,544],{},"You're not really \"asking Claude to do a task.\" You're working out the steps of a task together. I had it open LibreOffice Calc and fill in some GE company info. Each step showed up on the right while the chat panel showed what it saw and what it decided. It misclicked a couple of times. I corrected it. The instructions got tighter.",[222,546,547],{},"When it runs clean, you've got a recipe. And in theory you don't need to watch it anymore -- the same loop could run unattended once you trust it. The UI is where you build the workflow. The workflow itself doesn't need the UI.",[234,549,551],{"id":550},"where-i-see-this-actually-used","Where I see this actually used",[222,553,554],{},"The teams I keep running into aren't trying to scale this in a container farm. They have a desktop app -- something their users already run locally -- and they want to add AI to it. The app has to stay on the user's machine. It talks to local hardware, or local files, or an on-prem system, or it's just the tool the user lives in all day. Whatever the reason, \"move it to a container and run it headless\" isn't on the table.",[222,556,557],{},"There's a huge pile of software like that. Old ERP clients. Vertical-market accounting tools. CAD and 3D-modeling packages with decades of UI and no meaningful automation surface. Engineering and simulation apps that still ship as thick Windows clients. The procurement app some VP has used for fifteen years that only ships as a Windows installer. None of that has an MCP server and plenty of it doesn't even have a REST API, and there's no roadmap for either.",[222,559,560,561,565],{},"The path to adding AI to that world isn't waiting for the vendor. It's an agent running alongside the user, watching the same screen, and taking over the clicks when asked. Call it RPA with a better brain if you want -- the incumbent RPA tools still win on deterministic selectors, audit trails, and governance, but computer-use wins on how fast you can get something running on an app nobody wrote a selector library for. That tradeoff is the reason I see it picking up traction with teams whose product ",[562,563,564],"em",{},"is"," a desktop app.",[234,567,569],{"id":568},"whats-next-for-me","What's next for me",[477,571,572,575,578],{},[480,573,574],{},"A read-only bind mount of a project folder so the container can see some of my actual code.",[480,576,577],{},"Figuring out where this fits with the rest of my stack. I already have OpenClaw in another container reaching me on Discord. Computer-use could be a tool it invokes, or a separate thing I bring up when I need it.",[480,579,580],{},"Keeping an eye on the Windows-container side, even if I'm not building there. It's the more interesting half of this story.",[222,582,583],{},"For everything else I'll keep reaching for a developer tool's CLI, an HTTP API, or Chrome DevTools first. Those are still the right tools for what I do today. That ordering is a current call, not a permanent one -- as computer-use gets faster and cheaper, the \"last resort\" framing will probably stop making sense. For now, it's the one you pull out when the app refuses to be anything but a screen -- and for a lot of shops, that's most of the apps they have.",[585,586,587],"style",{},"html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":269,"searchDepth":287,"depth":287,"links":589},[590,591,592,593,594,595],{"id":236,"depth":287,"text":237},{"id":249,"depth":287,"text":250},{"id":526,"depth":287,"text":527},{"id":533,"depth":287,"text":534},{"id":550,"depth":287,"text":551},{"id":568,"depth":287,"text":569},"2026-04-18","Most of the apps I automate have a CLI or an API. Claude's computer-use is for the ones that don't. I spun up Anthropic's Docker demo to see what it can do.","md",{"src":600,"alt":601},"\u002Fimages\u002Fblog\u002F20260418-claude-computer-use-in-a-box.png","Over-the-shoulder view of a developer at a laptop, a spreadsheet and browser open on screen, with a second glowing translucent cursor beside the user's own -- an AI assistant co-piloting the desktop",{},true,{"title":205,"description":597},"published","g3RxX5zOtP7YEPWZnPpHSMvRHO2FkkYQlj_Aet8pdGQ",[-1,608],null,1776689776952]