{"slug": "zen-really-glad-to-be-using-haskell-for-work-especially-in-today-s-climate-with", "title": "@zen: Really glad to be using Haskell for work - especially in today's climate with agentic coding. Our team uses containers to keep our development environment consistent across team members,…", "summary": "A developer using Haskell for work has removed all coding agents from their host machine due to sandboxing challenges, opting instead to run agents in VMs provisioned with Incus to prevent escape hatches via Docker. The setup involves sharing working directories with the agent VM while overlaying artifact directories from VM-owned block devices, and configuring git to rewrite origin paths with agent-specific PATs for read-only repo access. The developer notes that while the approach works, there are quality-of-life issues to resolve, and Haskell's early feedback is beneficial for AI-assisted coding.", "body_md": "Really glad to be using Haskell for work - especially in today's climate with agentic coding.\nOur team uses containers to keep our development environment consistent across team members, though, and most agent sandbox approaches want to either offload your work fully to the cloud or they want to sandbox the agent harness process itself.\nWe're not ready for full cloud based development (yet?) and sandboxing just the agent doesn't work for us when the agent needs to run docker.\n\n[@zen](/u/zen?from=%2Fpost%2F2448%23post-2450)father, cyclist,\n\n[#haskell](/tag/haskell?from=%2Fpost%2F2448%23post-2450)\n\n[enter to follow](/enter),\n\n[#emacs](/tag/emacs?from=%2Fpost%2F2448%23post-2450)\n\n[enter to follow](/enter)\n\n[enter to follow](/enter?next=%2Fpost%2F2448)continued:\n\n... because letting the agent run docker gives them a too-easy escape hatch from their sandbox.\nSo we're currently stuck with using VMs. This turns out to be tricky but seems do-able.\nMy current approach is to provision a VM image and use Incus for the execution. My main goal is to keep my current workflow of local/non-agent dev working seamlessly and share the source with the VM/agent.\n\n[@zen](/u/zen?from=%2Fpost%2F2448%23post-2451)father, cyclist,\n\n[#haskell](/tag/haskell?from=%2Fpost%2F2448%23post-2451)\n\n[enter to follow](/enter),\n\n[#emacs](/tag/emacs?from=%2Fpost%2F2448%23post-2451)\n\n[enter to follow](/enter)\n\n[enter to follow](/enter?next=%2Fpost%2F2448)continued:\n\nThis means sharing my working dirs with the agent VM but overlaying artifact dirs from VM-owned block devices so we don't take too big of an IO perf hit.\nI also don't want the agent to be able to\n\n`git push`\n\nso that means we need some quirky git config to rewrite origin paths and thread through some agent specific PATs (\"thanks\" GitHub) for read-only repo access. These ALSO need to be threaded through to the development containers - they need to clone private repos.[@zen](/u/zen?from=%2Fpost%2F2448%23post-2452)father, cyclist,\n\n[#haskell](/tag/haskell?from=%2Fpost%2F2448%23post-2452)\n\n[enter to follow](/enter),\n\n[#emacs](/tag/emacs?from=%2Fpost%2F2448%23post-2452)\n\n[enter to follow](/enter)\n\n[enter to follow](/enter?next=%2Fpost%2F2448)continued:\n\n... in the end, this seems to work but I haven't lived with it for long.\nThere are still some quality of life issues to work out, but I think it'll work out.\nAt this point, I've removed all coding agents from my host - and that's nice.\n\n[@stagas](/u/stagas?from=%2Fpost%2F2448%23post-2453)\n\n[creative technologist](https://github.com/stagas)\n\n[GitHub](https://github.com/stagas)creator of textlog\n\n**stagas - Overview** stagas has 462 repositories available. Follow their code on GitHub.[enter to follow](/enter?next=%2Fpost%2F2448)replied to\n\n[@zen](/u/zen?from=%2Fpost%2F2448%23post-2453)father, cyclist,\n\n[#haskell](/tag/haskell?from=%2Fpost%2F2448%23post-2453)\n\n[enter to follow](/enter),\n\n[#emacs](/tag/emacs?from=%2Fpost%2F2448%23post-2453)\n\n[enter to follow](/enter)\n\n[enter to follow](/enter?next=%2Fpost%2F2448):\n\nCurious, why does using Haskell make a difference here?\n\n[@zen](/u/zen?from=%2Fpost%2F2448%23post-2454)father, cyclist,\n\n[#haskell](/tag/haskell?from=%2Fpost%2F2448%23post-2454)\n\n[enter to follow](/enter),\n\n[#emacs](/tag/emacs?from=%2Fpost%2F2448%23post-2454)\n\n[enter to follow](/enter)\n\n[enter to follow](/enter?next=%2Fpost%2F2448)replied to\n\n[@stagas](/u/stagas?from=%2Fpost%2F2448%23post-2454)\n\n[creative technologist](https://github.com/stagas)\n\n[GitHub](https://github.com/stagas)creator of textlog\n\n**stagas - Overview** stagas has 462 repositories available. Follow their code on GitHub.[enter to follow](/enter?next=%2Fpost%2F2448):\n\nIt's tangential to the sandboxing topic, really. I started the first post with a broader intent in mind and then elaborated on the sandboxing setup I'm working on.\nFor AI-assisted coding, though, it's nice because Haskell provides a lot of feedback earlier in the development process compared to lots of other languages. It tends to work once it compiles (obviously not all the time).", "url": "https://wpnews.pro/news/zen-really-glad-to-be-using-haskell-for-work-especially-in-today-s-climate-with", "canonical_source": "https://textlog.cc/post/2448", "published_at": "2026-08-25 16:29:42+00:00", "updated_at": "2026-08-25 17:16:58.068969+00:00", "lang": "en", "topics": ["ai-agents", "developer-tools"], "entities": ["Haskell", "Incus", "GitHub"], "alternates": {"html": "https://wpnews.pro/news/zen-really-glad-to-be-using-haskell-for-work-especially-in-today-s-climate-with", "markdown": "https://wpnews.pro/news/zen-really-glad-to-be-using-haskell-for-work-especially-in-today-s-climate-with.md", "text": "https://wpnews.pro/news/zen-really-glad-to-be-using-haskell-for-work-especially-in-today-s-climate-with.txt", "jsonld": "https://wpnews.pro/news/zen-really-glad-to-be-using-haskell-for-work-especially-in-today-s-climate-with.jsonld"}}