<?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: Daniel “Techniker-On-Tour” B.</title>
    <description>The latest articles on DEV Community by Daniel “Techniker-On-Tour” B. (@neodk).</description>
    <link>https://dev.to/neodk</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%2F4243513%2F85105b98-ad79-435e-84e8-ccbef7a613c1.jpg</url>
      <title>DEV Community: Daniel “Techniker-On-Tour” B.</title>
      <link>https://dev.to/neodk</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/neodk"/>
    <language>en</language>
    <item>
      <title>I built a desktop app that turns a one-line idea into a plan – and lets Claude Code build it</title>
      <dc:creator>Daniel “Techniker-On-Tour” B.</dc:creator>
      <pubDate>Fri, 13 Nov 2026 19:43:46 +0000</pubDate>
      <link>https://dev.to/neodk/i-built-a-desktop-app-that-turns-a-one-line-idea-into-a-plan-and-lets-claude-code-build-it-6g4</link>
      <guid>https://dev.to/neodk/i-built-a-desktop-app-that-turns-a-one-line-idea-into-a-plan-and-lets-claude-code-build-it-6g4</guid>
      <description>&lt;p&gt;You have an idea – a bird house camera, a podcast, a home server. Getting from &lt;em&gt;"I'd like to…"&lt;/em&gt; to &lt;em&gt;"it works"&lt;/em&gt; usually means juggling chats, notes, half-finished plans and forgotten next steps.&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;Vibewright&lt;/strong&gt; to take that part off my plate: a free, open-source desktop app for Windows and macOS. You type one sentence, it plans the project with you, and then &lt;strong&gt;Claude Code builds it step by step – right inside the app&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F43e70xjqfpegf5v47cne.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F43e70xjqfpegf5v47cne.gif" alt="Vibewright demo" width="720" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The flow
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Idea ──► Interview ──► Needs analysis ──► Plan ──► Tool check ──► Build
          (clicks)      approve           approve   approve        Claude Code in the app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Interview&lt;/strong&gt; – one multiple-choice question per screen, with your own answer always possible. Two short rounds, follow-ups only where something is missing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Needs analysis&lt;/strong&gt; – goal, scope, must-haves, non-goals, risks and a feasibility traffic light.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plan&lt;/strong&gt; – 3–6 phases, each with a "done when" criterion and concrete steps in plain language.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tool check&lt;/strong&gt; – which tools, plugins or MCP servers each phase actually needs. Nothing gets installed without your OK.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build&lt;/strong&gt; – Claude Code runs in an embedded terminal, knows the current phase and ticks off finished steps.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You approve every gate. Claude does the heavy lifting.&lt;/p&gt;

&lt;p&gt;Below are the technical decisions that made this work – and a few things I learned along the way.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Planning calls: headless, tool-less and cheap
&lt;/h2&gt;

&lt;p&gt;Every planning step is a single headless call to the Claude Code CLI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude -p --output-format json --model &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;haiku&lt;span class="o"&gt;|&lt;/span&gt;sonnet&lt;span class="o"&gt;|&lt;/span&gt;opus&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; \
       --system-prompt &lt;span class="s2"&gt;"&amp;lt;short system prompt&amp;gt;"&lt;/span&gt; \
       --tools &lt;span class="s2"&gt;""&lt;/span&gt; \
       --setting-sources project --strict-mcp-config \
       --json-schema &lt;span class="s1"&gt;'&amp;lt;schema&amp;gt;'&lt;/span&gt; \
       &lt;span class="o"&gt;[&lt;/span&gt;--resume &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;session-id&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A few details that matter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;--tools ""&lt;/code&gt;&lt;/strong&gt; – planning doesn't need file access, so Claude gets no tools at all. No permission prompts, nothing touches the disk.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;--setting-sources project --strict-mcp-config&lt;/code&gt;&lt;/strong&gt; – the user's global hooks, skills and MCP servers are ignored, so their setup can't change or bloat the planning calls.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Short system prompt + no tools&lt;/strong&gt; – a call costs about &lt;strong&gt;1,000 input tokens instead of 15,000–20,000&lt;/strong&gt;. That keeps a Pro/Max subscription's limits for the actual building.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;--json-schema&lt;/code&gt;&lt;/strong&gt; – every step returns structured output (questions, analysis, plan, tool needs), so the UI never has to parse free text.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;--resume&lt;/code&gt;&lt;/strong&gt; – all steps of a project share one session, so Claude remembers the interview when it writes the plan.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One trap: &lt;code&gt;--bare&lt;/code&gt; would be even leaner, but it &lt;strong&gt;doesn't work with a subscription login&lt;/strong&gt; – it requires an API key.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. A state machine that is safe to retry
&lt;/h2&gt;

&lt;p&gt;Each project keeps its state in a JSON file. The important rule: &lt;strong&gt;state only changes after a successful Claude call.&lt;/strong&gt; If a call fails or times out, "Try again" simply repeats it – there's no half-written step to clean up.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;null → questions → (round 2) → needs analysis gate → plan gate → tool check → done
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Plain Markdown is the source of truth
&lt;/h2&gt;

&lt;p&gt;Plans, phases and checklists are written as Markdown files – into an &lt;strong&gt;Obsidian vault&lt;/strong&gt; (with Dataview tables and a Kanban board if those plugins are installed) or into a normal folder with an HTML dashboard.&lt;/p&gt;

&lt;p&gt;Progress is never stored separately. The app parses the &lt;code&gt;## Checklist&lt;/code&gt; section of each task file and derives everything else from it: phase status, progress percentage, next step, dashboard.&lt;/p&gt;

&lt;p&gt;That has a nice side effect: &lt;strong&gt;ticking a box works everywhere.&lt;/strong&gt; In the app, in Obsidian, or by Claude Code editing the file – an &lt;code&gt;fs.watch&lt;/code&gt; on the task folder picks it up and the UI updates live.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. The real Claude Code, embedded
&lt;/h2&gt;

&lt;p&gt;I didn't want to re-implement an agent. The build phase runs the &lt;strong&gt;actual interactive Claude Code&lt;/strong&gt; inside the app, using &lt;code&gt;xterm.js&lt;/code&gt; and &lt;code&gt;node-pty&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Before starting, Vibewright writes a marked block into the project's &lt;code&gt;CLAUDE.md&lt;/code&gt; (&lt;code&gt;&amp;lt;!-- projekthelper:start --&amp;gt; … &amp;lt;!-- projekthelper:ende --&amp;gt;&lt;/code&gt;) with the current phase, its goal and the next step. Anything the user wrote in &lt;code&gt;CLAUDE.md&lt;/code&gt; stays untouched.&lt;/li&gt;
&lt;li&gt;Claude ticks off steps in the task files – and the watcher from section 3 does the rest.&lt;/li&gt;
&lt;li&gt;New ideas can be typed in at any time. Claude sorts them into the right phase; if Claude is busy, the idea waits until the current step is done.&lt;/li&gt;
&lt;li&gt;Several projects can run their own Claude Code session at the same time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Two gotchas from this part:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Nested sessions:&lt;/strong&gt; if the app is started from inside another Claude Code session, inherited &lt;code&gt;CLAUDECODE&lt;/code&gt; / &lt;code&gt;CLAUDE_CODE_*&lt;/code&gt; environment variables change Claude's behaviour. The app strips them before spawning.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Windows and &lt;code&gt;.cmd&lt;/code&gt; shims:&lt;/strong&gt; an npm install of Claude Code puts a &lt;code&gt;claude.cmd&lt;/code&gt; on the PATH. Windows can't start &lt;code&gt;.cmd&lt;/code&gt; files without a shell – and going through a shell mangles JSON-schema arguments. Vibewright prefers &lt;code&gt;claude.exe&lt;/code&gt; (native installer) and otherwise reads the shim to run its target directly.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. Claude never runs commands on your PC during planning
&lt;/h2&gt;

&lt;p&gt;For the tool check, Claude receives an inventory (OS version, installed plugins, skills, MCP servers) and returns what each phase needs. For system tools it only &lt;strong&gt;names&lt;/strong&gt; the executable and typical install paths – the app checks them itself. Planning stays read-only.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Electron with plain HTML/CSS/JS – no framework, no bundler&lt;/li&gt;
&lt;li&gt;Claude Code CLI (headless for planning, interactive for building)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;xterm.js&lt;/code&gt; + &lt;code&gt;@lydell/node-pty&lt;/code&gt; (prebuilt binaries, no build tools needed on Windows)&lt;/li&gt;
&lt;li&gt;Three runtime dependencies plus Electron&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Website &amp;amp; demo:&lt;/strong&gt; &lt;a href="https://neodk2004.github.io/vibewright/" rel="noopener noreferrer"&gt;https://neodk2004.github.io/vibewright/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Source (MIT):&lt;/strong&gt; &lt;a href="https://github.com/neodk2004/vibewright" rel="noopener noreferrer"&gt;https://github.com/neodk2004/vibewright&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Requirements:&lt;/strong&gt; Windows 10/11 or macOS 11+, Claude Code installed and signed in, a Claude subscription (Pro or Max recommended). Obsidian and Git are optional.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Mac build is signed and notarized. The Windows installer isn't code-signed yet, so SmartScreen may warn you – every release is scanned on VirusTotal and ships with SHA-256 checksums.&lt;/p&gt;

&lt;p&gt;Feedback, bug reports and ideas are very welcome – either here in the comments or as a GitHub issue.&lt;/p&gt;

</description>
      <category>claude</category>
      <category>electron</category>
      <category>opensource</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
