<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Eyup Ucmaz</title>
    <description>The latest articles on DEV Community by Eyup Ucmaz (@eyupucmaz).</description>
    <link>https://dev.to/eyupucmaz</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F258515%2Fc3c566fd-1d39-43cd-a907-25dc6a8f5014.png</url>
      <title>DEV Community: Eyup Ucmaz</title>
      <link>https://dev.to/eyupucmaz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/eyupucmaz"/>
    <language>en</language>
    <item>
      <title>I vibe-coded a mission control for my coding agents — and now I use it every day</title>
      <dc:creator>Eyup Ucmaz</dc:creator>
      <pubDate>Mon, 28 Sep 2026 13:00:01 +0000</pubDate>
      <link>https://dev.to/eyupucmaz/i-vibe-coded-a-mission-control-for-my-coding-agents-and-now-i-use-it-every-day-1nm9</link>
      <guid>https://dev.to/eyupucmaz/i-vibe-coded-a-mission-control-for-my-coding-agents-and-now-i-use-it-every-day-1nm9</guid>
      <description>&lt;p&gt;I run coding agents every day. Usually more than one at a time.&lt;/p&gt;

&lt;p&gt;Claude Code, Codex and OpenCode are all useful on their own, but the workflow gets messy quickly: one agent is running, another is waiting for permission, a third has finished, and all of them are sitting in different terminal tabs.&lt;/p&gt;

&lt;p&gt;After a while, the hard question is not “how do I start another agent?” It is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Which agent is waiting for me right now?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That question became the reason I built termist.&lt;/p&gt;

&lt;h2&gt;
  
  
  What termist is
&lt;/h2&gt;

&lt;p&gt;termist is a local terminal UI and background daemon for running coding-agent sessions across projects and worktrees.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpeuz3aeikn5bfdr5een8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpeuz3aeikn5bfdr5een8.png" alt="Termist showing multiple agent cards and a terminal pane" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Every session appears as a card with a status dot. I can see which agents are running, which ones need input, which ones are done, and which ones can be resumed after a restart. A single key takes me to the next session that needs attention.&lt;/p&gt;

&lt;p&gt;It also lets me send a follow-up prompt without opening the session's terminal pane. When I close the TUI, the daemon keeps the sessions alive. When the machine restarts, the sessions come back and can be resumed.&lt;/p&gt;

&lt;p&gt;The goal is not to replace a terminal emulator, an editor or Git. It is a small control layer for the agent-heavy part of my workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  The whole project was vibe-coded
&lt;/h2&gt;

&lt;p&gt;The entire project was built through a vibe-coding workflow. I used Claude Code, Codex and OpenCode heavily while designing, implementing, testing and iterating on termist.&lt;/p&gt;

&lt;p&gt;That made the project unusually self-referential. I was using coding agents to build a tool for managing coding agents, then using the tool to run more coding agents.&lt;/p&gt;

&lt;p&gt;Vibe coding was useful for getting from an idea to a working product quickly. It helped with scaffolding, repetitive code, experiments and UI iterations. But it did not remove the difficult parts.&lt;/p&gt;

&lt;p&gt;The difficult parts were deciding what the product should actually do, checking whether the status model matched reality, dealing with process lifetimes, testing cancellation and restart behavior, and manually trying the real CLI tools in a real terminal.&lt;/p&gt;

&lt;p&gt;The agent could generate a plausible implementation. I still had to decide whether it was the right implementation.&lt;/p&gt;

&lt;h2&gt;
  
  
  The shape of the system
&lt;/h2&gt;

&lt;p&gt;The daemon owns the PTYs and the persistent state. The TUI attaches to it over a local socket and renders the current state. Sessions are stored locally in SQLite.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F67cjjjro0tstmhgap40f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F67cjjjro0tstmhgap40f.png" alt="Termist settings and agent cards in the GitHub Pages demo" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The status dots are not guesses based on the last line printed in a terminal. They come from each agent's own hook or plugin integration. This matters because “the process is alive” and “the agent is waiting for me” are different states.&lt;/p&gt;

&lt;p&gt;The first public versions support Claude Code, Codex and OpenCode. The project is written in Rust and uses ratatui for the interface and alacritty_terminal for terminal emulation. There is no cloud service and termist does not write into the repositories or the agents' own configuration.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I use every day
&lt;/h2&gt;

&lt;p&gt;The most useful part is the attention flow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Start several tasks.&lt;/li&gt;
&lt;li&gt;Leave them running.&lt;/li&gt;
&lt;li&gt;See a waiting status without inspecting every terminal tab.&lt;/li&gt;
&lt;li&gt;Jump directly to the agent that needs an answer.&lt;/li&gt;
&lt;li&gt;Send a follow-up or resume a finished session from the grid.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The Istanbul-inspired scenes, themes and optional notifications are less essential, but they make the tool feel like a product I want to open every morning rather than another process manager.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is still rough
&lt;/h2&gt;

&lt;p&gt;termist is beta software. Windows has had less real-world testing than macOS and Linux. Agent hook behavior can change as the upstream CLIs change. Terminal emulation and restart behavior are the kinds of things that look correct in a test and still need real-world use.&lt;/p&gt;

&lt;p&gt;That is also why I am sharing it now. I am more interested in finding the workflows I did not anticipate than in pretending the product is finished.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;The source is available on GitHub:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/eyupucmaz/termist" rel="noopener noreferrer"&gt;https://github.com/eyupucmaz/termist&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There is a demo, installation instructions and the current beta here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://eyupucmaz.github.io/termist/" rel="noopener noreferrer"&gt;https://eyupucmaz.github.io/termist/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I would love to hear from people who run multiple coding agents: does a status grid reduce context switching, or does it just make the chaos more visible?&lt;/p&gt;

&lt;p&gt;Disclosure: I used AI coding tools throughout the project and used AI assistance to help edit this article. The project, implementation decisions and testing are mine.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>ai</category>
      <category>rust</category>
      <category>cli</category>
    </item>
  </channel>
</rss>
