<?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: Christopher Taylor</title>
    <description>The latest articles on DEV Community by Christopher Taylor (@northernator_11).</description>
    <link>https://dev.to/northernator_11</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%2F4222508%2F1cb5c357-eeae-4936-9f9b-bd9d8bf047ca.jpg</url>
      <title>DEV Community: Christopher Taylor</title>
      <link>https://dev.to/northernator_11</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/northernator_11"/>
    <language>en</language>
    <item>
      <title>Auto-CLI: giving coding agents a real CLI for apps that don't have an API</title>
      <dc:creator>Christopher Taylor</dc:creator>
      <pubDate>Mon, 02 Nov 2026 14:10:23 +0000</pubDate>
      <link>https://dev.to/northernator_11/auto-cli-giving-coding-agents-a-real-cli-for-apps-that-dont-have-an-api-3kcn</link>
      <guid>https://dev.to/northernator_11/auto-cli-giving-coding-agents-a-real-cli-for-apps-that-dont-have-an-api-3kcn</guid>
      <description>&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;Coding agents are good at calling CLIs and APIs. A lot of the software people use every day has neither, especially Windows desktop apps. An agent can often see the pieces: a local database, a couple of IPC hooks, the window's UI tree. But each session it rediscovers the app, guesses at commands, and leaves you to check whether anything worked.&lt;/p&gt;

&lt;p&gt;Auto-CLI does that discovery once and turns it into a CLI harness the agent can rely on, with evidence of what was actually verified.&lt;/p&gt;

&lt;h2&gt;
  
  
  The pipeline
&lt;/h2&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%2Fbcpmk575e8wcu1ny10q9.jpg" 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%2Fbcpmk575e8wcu1ny10q9.jpg" alt="pipeline" width="799" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;target app ──► REA probes ──► findings ──► surface classifier ──► scaffold ──► validator
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/morluto/rea" rel="noopener noreferrer"&gt;REA&lt;/a&gt; reverse-engineers an app's automation surface.&lt;/li&gt;
&lt;li&gt;Auto-CLI classifies the findings into a harness plan and generates a skeleton in &lt;a href="https://github.com/HKUDS/CLI-Anything" rel="noopener noreferrer"&gt;CLI-Anything&lt;/a&gt;'s layout.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;verify&lt;/code&gt; proves findings against the live app. &lt;code&gt;drive&lt;/code&gt; exercises IPC channels. &lt;code&gt;complete&lt;/code&gt; generates commands from readable DB schemas and verified endpoints. &lt;code&gt;gui&lt;/code&gt; drives Windows apps via UI Automation.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;auto&lt;/code&gt; chains it all: recon → scaffold → verify → optional IPC drive → complete → optional GUI capture → validate.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Worked example 1: a SQLite "library" app
&lt;/h2&gt;

&lt;p&gt;The README quickstart creates a two-row &lt;code&gt;books&lt;/code&gt; table, then runs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;python&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-m&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;auto_cli&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;auto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--target&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;library-demo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;library&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--out&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;out&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--repl-skin&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;repl_skin.py&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;pip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--editable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;/out/library/agent-harness&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;cli-anything-library&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--json&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;books&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;list&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;cli-anything-library&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--json&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;books&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;search&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Dune&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;cli-anything-library&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;export&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;books&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;books.csv&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--format&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;csv&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see &lt;code&gt;result: OK&lt;/code&gt;, a search hit for &lt;em&gt;Dune&lt;/em&gt;, and a CSV with both books. &lt;code&gt;complete&lt;/code&gt; generated a &lt;code&gt;books&lt;/code&gt; command group (list/get/search/add/update/delete), database tests and a SKILL.md. Reads use a read-only connection. Writes require &lt;code&gt;--yes&lt;/code&gt; and take a timestamped backup first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Worked example 2: real Windows Notepad
&lt;/h2&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%2Femdjel1zrbkqo96j2ry9.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%2Femdjel1zrbkqo96j2ry9.gif" alt="demo" width="760" height="428"&gt;&lt;/a&gt;&lt;br&gt;
Auto-CLI generates a harness from recon and the live UI. The generated commands then write a release checklist into Notepad, read it back with &lt;code&gt;ui-read-text&lt;/code&gt;, and export the text to &lt;code&gt;release-notes.txt&lt;/code&gt;. The export doesn't use Notepad's Save command. The video is edited (setup waits shortened) and was tested on classic English Notepad. Modern or localized builds expose different controls, so inspect &lt;code&gt;ui-tree&lt;/code&gt; first.&lt;/p&gt;
&lt;h2&gt;
  
  
  New in v0.2.0: a full WordPad document round trip
&lt;/h2&gt;

&lt;p&gt;For native English WordPad, the generated CLI now has &lt;code&gt;open&lt;/code&gt;, &lt;code&gt;read&lt;/code&gt;, &lt;code&gt;replace&lt;/code&gt;, &lt;code&gt;append&lt;/code&gt;, &lt;code&gt;bold&lt;/code&gt;, &lt;code&gt;save-as&lt;/code&gt; and &lt;code&gt;workflow&lt;/code&gt; commands. The &lt;code&gt;workflow&lt;/code&gt; command edits a private copy of an RTF document, saves it through WordPad's real Save As dialog, reopens the result, and checks the text, the heading's bold formatting and the file's integrity. It refuses to overwrite files, refuses to run without confirmation, and rejects malformed RTF or ambiguous markers. The steps are in the &lt;a href="https://github.com/Northernator/Auto-CLI/blob/main/docs/windows-workflows.md" rel="noopener noreferrer"&gt;Windows and WordPad guide&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Generated GUI commands also now find the app by its executable and window class rather than a captured process ID, so they keep working after the app restarts, and they refuse to act if more than one window matches.&lt;/p&gt;

&lt;p&gt;There's also an optional handoff to Codex or Claude Code for richer commands and workflows (&lt;a href="https://github.com/Northernator/Auto-CLI/blob/main/docs/deep-workflows.md" rel="noopener noreferrer"&gt;guide&lt;/a&gt;). In one real GUI-only handoff, the generated harness passed 18 tests. That's one run, not a benchmark.&lt;/p&gt;
&lt;h2&gt;
  
  
  Honesty section
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Still early (v0.2.0). Live GUI testing has covered Windows Notepad, Calculator and WordPad only. The WordPad test needs an interactive Windows desktop with English WordPad, so hosted CI doesn't run it. Other editors need their own document operations.&lt;/li&gt;
&lt;li&gt;The test suite is at 278 passed, 4 skipped. Hosted CI runs it on Windows, Linux and macOS with Python 3.10 and 3.13, plus a package install check and real REA, sqlite-utils and Datasette integrations.&lt;/li&gt;
&lt;li&gt;It doesn't implement every workflow. Auth, POST bodies, MCP and scripting surfaces need manual implementation and review.&lt;/li&gt;
&lt;li&gt;It doesn't launch arbitrary desktop apps by default.&lt;/li&gt;
&lt;li&gt;No agent benchmarks or success-rate claims. The verification report tells you what was checked, per finding.&lt;/li&gt;
&lt;li&gt;Independent project, not affiliated with REA or CLI-Anything. Credit to both.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Windows with Git, Python 3.10+ and Node 22.19+/24.11+/26+:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;npm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-g&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rea-agents&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;pip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"git+https://github.com/Northernator/Auto-CLI.git@v0.2.0"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;pytest&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;click&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;prompt-toolkit&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;python&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-m&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;auto_cli&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;doctor&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then paste the README's full quickstart. Repo: &lt;a href="https://github.com/Northernator/Auto-CLI" rel="noopener noreferrer"&gt;https://github.com/Northernator/Auto-CLI&lt;/a&gt; (MIT).&lt;br&gt;
Feedback I'd love: are the generated commands usable as-is, do the verification reports tell you what you need, and which Windows apps should I try next?&lt;/p&gt;

</description>
      <category>python</category>
      <category>ai</category>
      <category>windows</category>
      <category>opensource</category>
    </item>
    <item>
      <title>## The problem
Coding agents are good at calling CLIs and APIs. A lot of the software people use every day has neither, especially Windows desktop apps. An agent can often see the pieces: a local database, a couple of IPC hooks, the window's UI tree. But e</title>
      <dc:creator>Christopher Taylor</dc:creator>
      <pubDate>Mon, 02 Nov 2026 13:55:38 +0000</pubDate>
      <link>https://dev.to/northernator_11/-the-problem-coding-agents-are-good-at-calling-clis-and-apis-a-lot-of-the-software-people-use-41d2</link>
      <guid>https://dev.to/northernator_11/-the-problem-coding-agents-are-good-at-calling-clis-and-apis-a-lot-of-the-software-people-use-41d2</guid>
      <description></description>
    </item>
  </channel>
</rss>
