{
  "$type": "site.standard.document",
  "content": "---\ntitle: \"Ben's dev setup 2026 edition\"\ndescription: \"Ghostty, zellij, helix and a life lived in text tokens---why I ditched Zed\n  and went back to purely terminal-based development.\"\ntags: [dev]\n---\n\nNew year, new dev setup. This year the theme is:\n\n<blockquote style=\"font-size: 1.5rem\">a life lived in (text) tokens</blockquote>\n\nAgentic software development tools\n([Claude Code](https://github.com/anthropics/claude-code),\n[Codex CLI](https://github.com/openai/codex), [Opencode](https://opencode.ai),\n[pi](https://github.com/openclaw/openclaw), [Continue](https://continue.dev/),\netc) have become pretty crucial to my workflow, and they work _best_ when\nconsuming and producing text and calling CLI tools which do the same.\n\nSo I've re-jigged my entire development workflow again. Emacs lasted me ~20\nyears, and\n[while I like Zed and enjoyed the setup](/blog/2025/06/06/agentic-elixir-superpowers-zed-tidewave-ashai/)\nI've moved on from that just two years later. This year, as part of my\ncommitment to a life lived in tokens, I'm moving back to purely terminal\napps[^oss].\n\n[^oss]:\n    with my usual strong preferences for OSS + tools which run on both macOS and\n    Linux\n\nThe core of it is\n\n- [ghostty](https://ghostty.org/) is my terminal emulator\n- [zellij](https://zellij.dev/) is the terminal multiplexer, and handles all my\n  multi-pane & multi-tab needs (I don't really use ghostty tabs at all)\n- [helix](https://helix-editor.com/) is my text editor, using various LSPs to\n  provide a pretty-close-to-IDE experience\n- [yazi](https://yazi-rs.github.io/) as a file browser\n- [neomutt](https://neomutt.org/) for emails, as I've\n  [already discussed here](/blog/2025/09/12/the-great-2025-email-yak-shave-o365-mbsync-mu-neomutt-msmtp/)\n- [nb](https://xwmx.github.io/nb/) for a file-based \"personal knowledge base\",\n  think Obsidian but without the GUI app\n\nI could write up more about it, but honestly if you're curious just look in\n[my dotfiles](https://github.com/benswift/.dotfiles), because it's all in there.\n\nThe main reason I switched from Zed is that it's fundamentally a GUI app. There\nare ways to mount remote projects, but I always found them a bit flaky, and I'm\nincreasingly working across lots of different remote machines via ssh[^sprites].\nTerminal stuff just works; Zed takes setup and mental energy.\n\n[^sprites]:\n    [fly sprites](https://sprites.dev/) are particularly interesting as a bit of\n    a middle ground between fully-reproducable Docker stuff and randomly\n    spinning up VMs to mess around.\n\nThe other reason I moved was that even though Zed can run agentic coding agents\nvia the [ACP](https://agentclientprotocol.com/) (in fact I think they invented\nit) the DX isn't as nice. For example, there's no `/resume` command so you can't\nresume an old conversation. It seems like the companies making these agentic\nharnesses are trying out new things in the \"native\" terminal app first, and\nif/when those things make it to the ACP spec is unknown.\n\nThe final bonus is that most of the above tools are also configured via text\nconfig files (to be fair, so is Zed). So Claude has been helping me set up this\nnew environment so that it's to my tastes. A handy tool I found is\n[ht-mcp](https://github.com/memextech/ht-mcp) which is a\n[MCP](https://modelcontextprotocol.io/) server that can run a headless terminal\napp, so that Claude Code can even e.g. open a file in helix and issue commands\nto do stuff. That's been really handy for debugging things when they haven't\nworked correctly.\n\nThe other thing about running multiple agentic coding sessions is that they\nleave stuff behind---orphaned browser processes, dev servers still listening on\nrandom ports, that kind of thing. I wrote a small\n[`lsagents`](https://github.com/benswift/.dotfiles/blob/main/bin/lsagents)\nscript that gives me a live dashboard of all running AI agents, stray processes\nand dev servers on the machine. It's become one of those tools I didn't know I\nneeded until I had five Claude Code sessions, two Geminis, a Codex and a handful\nof phantom Vite servers all competing for resources.\n\nAnyway, we'll see if this stack satisfies me long-term---at this rate of change\n(20 years in Emacs, then 2 years in Zed) I might be changing it all up again in\n2 months.\n",
  "createdAt": "2026-05-13T23:14:40.491Z",
  "description": "Ghostty, zellij, helix and a life lived in text tokens---why I ditched Zed and went back to purely terminal-based development.",
  "path": "/blog/2026/02/18/ben-s-dev-setup-2026-edition",
  "publishedAt": "2026-02-18T00:00:00.000Z",
  "site": "at://did:plc:tevykrhi4kibtsipzci76d76/site.standard.publication/self",
  "tags": [
    "dev"
  ],
  "textContent": "Ghostty, zellij, helix and a life lived in text tokens---why I ditched Zed and went back to purely terminal-based development.",
  "title": "Ben's dev setup 2026 edition"
}