{"slug": "tui-design-patterns", "title": "TUI Design Patterns", "summary": "Agentic coding TUIs including Claude Code, Codex, Aider, Crush, opencode, and Goose each ship their own slash commands, keybindings, pane layouts, and status lines with no shared conventions or documented standards, according to a design-patterns essay that cites John Loeber's 2023 \"Bring Back Idiomatic Design\" argument. The essay contends the terminal offers no idioms beyond ANSI escape codes and a few accidental conventions like Ctrl+C, Ctrl+D, and Ctrl+L, so each tool invents consistency in isolation — a pattern it calls a lock-in strategy aligned with the VC-funded winner-takes-most playbook. It also argues modern TUI frameworks such as Ink, Bubble Tea, and tcell redraw aggressively, causing screen readers to interrupt on every spinner tick, a regression from irssi and menuconfig, which pinned focus and spoke only on change.", "body_md": "# On TUI design patterns\n\nCreated\n\nEvery agentic coding tool ships its own slash commands, its own keybindings, its own pane layout, its own status line. Let's talk about this.\n\nIn 2023, John Loeber wrote an essay called [Bring Back Idiomatic Design](https://essays.johnloeber.com/p/4-bring-back-idiomatic-design). An app should be bound to the operating system it runs on. Native widgets. Standard menus. Shortcuts users already know. When every app reinvents its own design language, users pay for the difference with cognitive overload.\n\nThree years later we have a new class of tools: agentic coding TUIs. Claude Code, Codex, Aider, Crush, opencode, Goose, many more. They run in the terminal. They are powerful, useful, and undisciplined.\n\n##  [#](#every-agent-is-its-own-system) Every agent is its own system\n\nI don't know about you. But getting into agentic workflows (with Claude) was also my introdcution to work with a TUI on a daily basis. Slash commands, keybindings, status lines, prompts, a lot of new stuff for me to cope with. No shared conventions, no documented standards. Relearning tax.\n\n##  [#](#the-terminal-is-not-a-gui-platform) The terminal is not a GUI platform\n\nThe terminal has no idioms beyond ANSI escape codes and a handful of accidental conventions (`Ctrl+C`, `Ctrl+D`, `Ctrl+L`). There is no system menu. There is no shortcut catalogue. There is no accessibility tree. There is some folklore — `ESC` to go back (well sometimes it works), a persistent footer of available shortcuts — that tools like `menuconfig`, `htop`, and `irssi` quietly settled on decades ago. TUIs build their own. Consistency becomes a thing each tool has to invent in isolation.\n\nThe other part is that inventing your own design paradigm is also a lock-in strategy. The more muscle memory a user has built into one tool, the harder it is to switch. That aligns neatly with the VC-funded playbook of winner-takes-most: \"competition is for losers\".\n\n##  [#](#the-tyranny-of-shortcuts-again) The tyranny of shortcuts, again\n\nThe desktop version of this problem is well known [see my tyranny of shortcuts](/the-tyranny-of-inconsistent-keyboard-shortcuts). `Cmd+K` opens a command palette in VS Code, a chat in Slack, a search in Linear, a quick-find in Figma, and creates a hyperlink in Notion.\n\nThe TUI version is `/`. Slash plus a word. The word means whatever the agent decided it means. `/edit` edits a file in one tool, edits a message in another, opens an editor in a third. `/help` is, mercifully, mostly consistent. `/exit` versus `/quit` versus `Ctrl+D` versus `Ctrl+C` is not.\n\n##  [#](#regressed-accessibility) Regressed accessibility\n\nYou may assume that as \"it runs in the terminal, it must be accessible\". Modern TUI frameworks (Ink, Bubble Tea, tcell) treat the screen as a reactive canvas and redraw aggressively, so with a screen reader attached every spinner tick becomes an interruption. `irssi` and `menuconfig` got this right decades ago by pinning focus and only speaking on change; most agentic TUIs do none of that. There is a [good piece making the case](https://www.osnews.com/story/144892/the-text-mode-lie-why-modern-tuis-are-a-nightmare-for-accessibility/) — same root problem, higher human cost.\n\nJust resizing the terminal window often breaks the whole of the nice ASCII tables and line breaks.\n\nTo be fair, new tech is allowed to come with new paradigms. Some of them are fun. Typing \"stop\" instead of hunting for a shortcut is cool. Watching a diff get proposed and approved inline, talking to your editor like it is a colleague. Not every novelty is a regression. The TUI form factor is also a reasonable MVP. The category is full of fast-growing companies with teething problems; a TUI is what you build when you are still figuring out what the product even is.\n\nAI agents accept fuzzy, natural-language commands. \"Stop\", \"undo that\", \"show me what you are about to do\" mostly work, in any tool, without anyone having to memorize a shortcut. That takes a lot of pressure off the strict-syntax surface.\n\nBut beside the chat itself, there is still a TUI-GUI wrapped around it: a status line, a permissions prompt, a diff viewer, a slash menu, a settings screen. That part is not natural language — it is buttons, panels, and labels, and it is exactly the surface where idiomatic design used to apply. So a small shared vocabulary for the things you do hit often would not hurt. Not a framework, just a convention. Loeber points at the macOS Human Interface Guidelines as the model. The terminal has nothing comparable.\n\n##  [#](#conclusions) Conclusions\n\nFor now, every user of these tools carries a private mental compatibility table.\n\nWe build for the terminal at fortrabbit too — `ssh` access, the fortrabbit CLI, deploy hooks. The temptation to invent your own little language is strong, because there is no platform language to inherit. We try to lean on what already exists (POSIX flags, `--help`, exit codes).\n\nBring some idiomatic design to TUIs!\n\n##  [#](#more-reading) More reading\n\n- [Bring Back Idiomatic Design](https://essays.johnloeber.com/p/4-bring-back-idiomatic-design) — John Loeber, 2023\n- [Recent Hacker News discussion on the article](https://news.ycombinator.com/item?id=47738827) — comments worth scrolling\n- [The text mode lie: why modern TUIs are a nightmare for accessibility](https://www.osnews.com/story/144892/the-text-mode-lie-why-modern-tuis-are-a-nightmare-for-accessibility/) — 2026\n- [So you want to make a TUI…](https://p.janouch.name/article-tui.html) — folklore conventions worth inheriting", "url": "https://wpnews.pro/news/tui-design-patterns", "canonical_source": "https://blog.fortrabbit.com/tui-design-patterns", "published_at": "2026-09-14 11:30:10+00:00", "updated_at": "2026-09-14 12:11:20.251858+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "developer-tools", "ai-products"], "entities": ["Claude Code", "Codex", "Aider", "Crush", "opencode", "Goose", "John Loeber", "Ink"], "alternates": {"html": "https://wpnews.pro/news/tui-design-patterns", "markdown": "https://wpnews.pro/news/tui-design-patterns.md", "text": "https://wpnews.pro/news/tui-design-patterns.txt", "jsonld": "https://wpnews.pro/news/tui-design-patterns.jsonld"}}