<?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: Matt</title>
    <description>The latest articles on DEV Community by Matt (@matt_b650aa89776af88513ae).</description>
    <link>https://dev.to/matt_b650aa89776af88513ae</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3915362%2F5f439387-256e-4872-89a7-7c67786975fa.png</url>
      <title>DEV Community: Matt</title>
      <link>https://dev.to/matt_b650aa89776af88513ae</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/matt_b650aa89776af88513ae"/>
    <language>en</language>
    <item>
      <title>I scoped a multi-agent TUI system in January. It sat dead for 4 months. Here is the comeback.</title>
      <dc:creator>Matt</dc:creator>
      <pubDate>Sun, 07 Jun 2026 20:14:14 +0000</pubDate>
      <link>https://dev.to/matt_b650aa89776af88513ae/i-scoped-a-multi-agent-tui-system-in-january-it-sat-dead-for-4-months-here-is-the-comeback-jp8</link>
      <guid>https://dev.to/matt_b650aa89776af88513ae/i-scoped-a-multi-agent-tui-system-in-january-it-sat-dead-for-4-months-here-is-the-comeback-jp8</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-05-21"&gt;GitHub Finish-Up-A-Thon Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/in5devilinspace/tui-master-agent" rel="noopener noreferrer"&gt;TUI Master Agent&lt;/a&gt;&lt;/strong&gt; — point it at a real open-source terminal-UI repo, and it studies the code, figures out the framework on its own, and generates a small &lt;strong&gt;original&lt;/strong&gt; TUI in that same framework. Then it proves the generated app actually runs.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python tui_master.py https://github.com/Textualize/textual
&lt;span class="c"&gt;# Cloning https://github.com/Textualize/textual&lt;/span&gt;
&lt;span class="c"&gt;# Framework detected -&amp;gt; textual (signatures=3212, files=918)&lt;/span&gt;
&lt;span class="c"&gt;# Generating with claude-opus-4-7 ...&lt;/span&gt;
&lt;span class="c"&gt;# Wrote 1 file(s) to output/textual - "Pixel Pond"&lt;/span&gt;
&lt;span class="c"&gt;# Verifying the generated TUI runs ...&lt;/span&gt;
&lt;span class="c"&gt;# run_test headless -&amp;gt; exit 0&lt;/span&gt;
&lt;span class="c"&gt;# OK - python main.py from output/textual&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It works across two languages today:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Textual&lt;/strong&gt; (Python) — studied &lt;a href="https://github.com/Textualize/textual" rel="noopener noreferrer"&gt;Textualize/textual&lt;/a&gt;, generated an interactive "Pixel Pond" (drop pebbles, feed fish, toggle day/night).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bubble Tea&lt;/strong&gt; (Go) — studied &lt;a href="https://github.com/charmbracelet/bubbletea" rel="noopener noreferrer"&gt;charmbracelet/bubbletea&lt;/a&gt;, generated a Pomodoro timer.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both generated apps are committed verbatim in &lt;a href="https://github.com/in5devilinspace/tui-master-agent/tree/main/examples" rel="noopener noreferrer"&gt;&lt;code&gt;examples/&lt;/code&gt;&lt;/a&gt; — nothing hand-edited.&lt;/p&gt;

&lt;h2&gt;
  
  
  The comeback arc (the honest part)
&lt;/h2&gt;

&lt;p&gt;On &lt;strong&gt;January 23, 2026&lt;/strong&gt; I scoped this as something much bigger: a multi-agent system with three specialized sub-agents (Pattern Learner, Validator, Termux Converter), a compounding "learning database," and six target frameworks. I wrote a 21KB architecture spec, opened an editor the next day, got two paragraphs into the orchestrator stub... and stopped.&lt;/p&gt;

&lt;p&gt;The thing that killed it: I tried to design "patterns as a data structure" before I had anything that worked. The scope was a cliff. It sat dormant for &lt;strong&gt;four and a half months&lt;/strong&gt; — an architecture document and zero implementation.&lt;/p&gt;

&lt;p&gt;That whole spec is still in the repo, frozen and untouched at the &lt;a href="https://github.com/in5devilinspace/tui-master-agent/releases/tag/v0.0.1-before" rel="noopener noreferrer"&gt;&lt;code&gt;v0.0.1-before&lt;/code&gt;&lt;/a&gt; tag. It's the literal "before" exhibit. You can diff it against &lt;code&gt;main&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Finish-Up-A-Thon deadline was the forcing function.&lt;/strong&gt; In the final 24 hours I did the one thing January-me wouldn't: I cut the scope to the spine. No sub-agents. No learning DB. No clever pattern abstraction. Just the pipeline that makes the idea real — clone, detect, generate, verify — and got it working end-to-end on two frameworks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This is not the finished vision. It is the start of finishing.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How the spine works
&lt;/h2&gt;

&lt;p&gt;A single file, &lt;a href="https://github.com/in5devilinspace/tui-master-agent/blob/main/tui_master.py" rel="noopener noreferrer"&gt;&lt;code&gt;tui_master.py&lt;/code&gt;&lt;/a&gt;, runs the whole pipeline inline:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Clone&lt;/strong&gt; the repo (shallow).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Detect the framework with heuristics — deliberately not AI.&lt;/strong&gt; File-extension counts plus import-signature grep. &lt;code&gt;import textual&lt;/code&gt; ranks above &lt;code&gt;import rich&lt;/code&gt;, so a Rich-only repo is never misread as Textual; a &lt;code&gt;.go&lt;/code&gt; file importing &lt;code&gt;charmbracelet/bubbletea&lt;/code&gt; is recognized as Bubble Tea. On the real Textual repo this scores 3,212 framework signatures across 918 files. It's boring, fast, and correct — which is exactly why it's not a model call.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gather&lt;/strong&gt; the README plus the few most framework-dense source files.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generate&lt;/strong&gt; a small original TUI in one &lt;code&gt;claude-opus-4-7&lt;/code&gt; call.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write&lt;/strong&gt; it to &lt;code&gt;output/&amp;lt;framework&amp;gt;/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verify it runs, headless, with no TTY&lt;/strong&gt; — and this is the part I'm proud of. Instead of trusting the model to cooperate, the orchestrator owns the check per framework: Textual apps are driven through Textual's own &lt;code&gt;run_test()&lt;/code&gt; pilot; Bubble Tea apps are verified with &lt;code&gt;go build&lt;/code&gt;. If it doesn't run, the run fails. No green checkmark theater.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The whole thing is ~330 lines, &lt;code&gt;mypy&lt;/code&gt; + &lt;code&gt;ruff&lt;/code&gt; clean, with a 17-test offline suite (detection, JSON parsing, path-traversal guards).&lt;/p&gt;

&lt;h2&gt;
  
  
  What I deliberately did NOT build — and why that's the win
&lt;/h2&gt;

&lt;p&gt;Most hackathon submissions overclaim. I'd rather own the constraint. Everything from the original spec that isn't built is filed as a roadmap issue, not hidden:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/in5devilinspace/tui-master-agent/issues/1" rel="noopener noreferrer"&gt;Pattern Learner sub-agent&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/in5devilinspace/tui-master-agent/issues/2" rel="noopener noreferrer"&gt;TUI Validator sub-agent&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/in5devilinspace/tui-master-agent/issues/3" rel="noopener noreferrer"&gt;Termux Converter sub-agent&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/in5devilinspace/tui-master-agent/issues/4" rel="noopener noreferrer"&gt;learning_db.json — compounding memory&lt;/a&gt; (the abstraction that stalled it in January)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/in5devilinspace/tui-master-agent/issues/5" rel="noopener noreferrer"&gt;Headless verification for Ratatui / Ink / Cursive&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The detector already recognizes all six frameworks. Generation works for any of them. Only the automated &lt;em&gt;run-verification&lt;/em&gt; is wired for two — and I'd rather ship two that genuinely run than six I can't prove.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;A TUI the agent generated from the Textual repo — "Pixel Pond" — captured headless straight from the verification harness, no hand-editing:&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.amazonaws.com%2Fuploads%2Farticles%2F7wekzf87q5kjjdfcq76v.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.amazonaws.com%2Fuploads%2Farticles%2F7wekzf87q5kjjdfcq76v.png" alt="Generated Textual TUI - Pixel Pond" width="800" height="537"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Both generated apps (this and a Bubble Tea Pomodoro timer) are committed verbatim in &lt;a href="https://github.com/in5devilinspace/tui-master-agent/tree/main/examples" rel="noopener noreferrer"&gt;&lt;code&gt;examples/&lt;/code&gt;&lt;/a&gt; — clone and run them yourself.&lt;/p&gt;

&lt;h2&gt;
  
  
  My experience with GitHub Copilot
&lt;/h2&gt;

&lt;p&gt;I'm going to be straight here, because honesty is the whole point of this post. This revival was built AI-assisted, and the heavy lifting — the heuristic detector, the generation contract, and the framework-native headless verification harness — was designed and written in an agentic Claude Code session (&lt;code&gt;claude-opus-4-7&lt;/code&gt;), not hand-typed with Copilot riding shotgun.&lt;/p&gt;

&lt;p&gt;Where Copilot-style assistance genuinely fits this codebase is worth naming, because it shaped how I structured it. The framework registry is exactly the repetitive, pattern-dense code autocomplete is best at — one declarative entry per framework (extensions, import signatures, run command, verifier). And the offline test suite is written so a function signature plus a one-line docstring is enough context to complete the body. Those are the two places a contributor with Copilot on will feel it immediately, and the repo is laid out to make that smooth.&lt;/p&gt;

&lt;p&gt;What I won't do is stage screenshots of suggestions I didn't accept to tick a box. This submission's entire thesis is finishing an abandoned project &lt;em&gt;honestly&lt;/em&gt; — owning the cut scope, filing the unbuilt parts as real issues. Padding the AI-tooling section would contradict the one thing the post is about. How every line got written is in the commit history, open to inspect.&lt;/p&gt;

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



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/in5devilinspace/tui-master-agent
&lt;span class="nb"&gt;cd &lt;/span&gt;tui-master-agent
uv pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;".[dev]"&lt;/span&gt;        &lt;span class="c"&gt;# or pip&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ANTHROPIC_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;sk-...
python tui_master.py https://github.com/charmbracelet/bubbletea
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Repo: &lt;strong&gt;&lt;a href="https://github.com/in5devilinspace/tui-master-agent" rel="noopener noreferrer"&gt;https://github.com/in5devilinspace/tui-master-agent&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;The spine is in. Next is the first sub-agent (Pattern Learner) and the cross-run memory that started this whole thing — but this time built &lt;em&gt;on top of&lt;/em&gt; something that works, instead of in front of it. Turns out that's the only order that ever ships.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>python</category>
      <category>go</category>
    </item>
  </channel>
</rss>
