<?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: Javier Leandro Arancibia</title>
    <description>The latest articles on DEV Community by Javier Leandro Arancibia (@javimosch).</description>
    <link>https://dev.to/javimosch</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%2F1655837%2F30baec18-fb3d-4a4b-97af-0441d12b5f28.jpg</url>
      <title>DEV Community: Javier Leandro Arancibia</title>
      <link>https://dev.to/javimosch</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/javimosch"/>
    <language>en</language>
    <item>
      <title>I made my programming language run a 1B LLM at 20 tok/s on a laptop CPU (it beat the reference C by 4x)</title>
      <dc:creator>Javier Leandro Arancibia</dc:creator>
      <pubDate>Sat, 11 Jul 2026 16:27:39 +0000</pubDate>
      <link>https://dev.to/javimosch/i-made-my-programming-language-run-a-1b-llm-at-20-toks-on-a-laptop-cpu-it-beat-the-reference-c-by-4jd7</link>
      <guid>https://dev.to/javimosch/i-made-my-programming-language-run-a-1b-llm-at-20-toks-on-a-laptop-cpu-it-beat-the-reference-c-by-4jd7</guid>
      <description>&lt;p&gt;I build &lt;a href="https://github.com/javimosch/machin" rel="noopener noreferrer"&gt;machin&lt;/a&gt; — a small "machine-first" language that compiles through C, designed for AI agents to write. Its roadmap rule is simple: every feature has to be earned by dogfooding, by building something real that breaks.&lt;/p&gt;

&lt;p&gt;So I gave it an unreasonable challenge: &lt;strong&gt;run TinyLlama-1.1B on a 4-core laptop CPU at 20 tokens/second, in pure MFL.&lt;/strong&gt; No FFI. No BLAS. No llama.cpp. The matmul included.&lt;/p&gt;

&lt;h2&gt;
  
  
  The correctness bar
&lt;/h2&gt;

&lt;p&gt;LLM demos are easy to fake, so speed only counted if greedy decoding stayed &lt;strong&gt;token-for-token identical to karpathy's llama2.c&lt;/strong&gt; (&lt;code&gt;run.c&lt;/code&gt; / &lt;code&gt;runq.c&lt;/code&gt;). Every optimization below was re-verified with a per-position logits diff against the reference before it counted.&lt;/p&gt;

&lt;p&gt;The engine is ~600 lines: RoPE, GQA attention + KV cache, SwiGLU, int8/Q8_0 group quantization, and a from-scratch sentencepiece BPE encoder. (Fun find along the way: llama2.c's HuggingFace export silently breaks on GQA models — &lt;code&gt;n_kv_heads&lt;/code&gt; is hardcoded to &lt;code&gt;n_heads&lt;/code&gt;.)&lt;/p&gt;

&lt;h2&gt;
  
  
  The arc: 2.1 → 21.8 tok/s
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;2.1   naive engine, single thread
2.5   -O3 -march=native on the generated C
6.1   goroutine worker pool (jobs as packed ints over channels)
8.4   peek_i8 (byte loads the autovectorizer understands)
9.9   512-bit vector width
15.7  int8 activations (i8 x i8 dot, half the loads)
21.8  dot_i8 builtin + fused qkv / w1-w3 dispatch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two lessons worth stealing:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Deterministic parallelism is free performance you can trust.&lt;/strong&gt; Matmul rows fan out to a worker pool as packed-int jobs over channels; each row is computed by exactly one worker, so output is bit-identical at any thread count. I never had to choose between "fast" and "still provably correct."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Your accumulator width is your vector width.&lt;/strong&gt; The language's &lt;code&gt;int&lt;/code&gt; is 64-bit — and a 64-bit reduction forces the autovectorizer into half-width lanes. The same loop with an &lt;code&gt;int32&lt;/code&gt; accumulator is 40% faster and &lt;em&gt;inexpressible in the source language&lt;/em&gt;. So it became a builtin: &lt;code&gt;dot_i8(a, b, n)&lt;/code&gt; — the signed-byte dot product that is to quantized inference what &lt;code&gt;sha256&lt;/code&gt; is to crypto. Plain C inside, zero intrinsics; gcc's autovectorizer does the rest.&lt;/p&gt;

&lt;h2&gt;
  
  
  Results (TinyLlama-1.1B, Q8_0, greedy)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;runq.c -O2 reference (1 thread)      1.67 tok/s
pure-MFL engine (1 thread)           6.8  tok/s   &amp;lt;- 4x the C
6 threads, cold                     21.8  tok/s
6 threads, 200-tok sustained        19.0  tok/s   (91C thermal throttle)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Honest asterisk included: sustained generation on this thermally-limited laptop is 19.0; the same binary holds 21.8 whenever the package is under 60°C, which is what interactive bursts look like.&lt;/p&gt;

&lt;p&gt;The part I keep staring at: a garbage-collected-feeling, type-inferred language that compiles through C &lt;strong&gt;beat the hand-written reference C by 4x single-threaded&lt;/strong&gt; — because the compiler emits the loop shapes vectorizers want, and iterating was cheap enough to find them.&lt;/p&gt;

&lt;p&gt;Full story with the compiler-internals details: &lt;a href="https://blog.intrane.fr/a-1b-llm-at-20-tokens-per-second-in-pure-machin" rel="noopener noreferrer"&gt;blog.intrane.fr&lt;/a&gt;&lt;br&gt;
Engine + reproduction protocol: &lt;a href="https://github.com/javimosch/machin-colibri" rel="noopener noreferrer"&gt;github.com/javimosch/machin-colibri&lt;/a&gt;&lt;br&gt;
The ecosystem: &lt;a href="https://github.com/javimosch/awesome-machin" rel="noopener noreferrer"&gt;awesome-machin&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>performance</category>
      <category>programming</category>
    </item>
    <item>
      <title>An AI Agent Audits Your LinkedIn Profile in Public — Here's the Stack</title>
      <dc:creator>Javier Leandro Arancibia</dc:creator>
      <pubDate>Tue, 07 Jul 2026 14:33:54 +0000</pubDate>
      <link>https://dev.to/javimosch/an-ai-agent-audits-your-linkedin-profile-in-public-heres-the-stack-1pog</link>
      <guid>https://dev.to/javimosch/an-ai-agent-audits-your-linkedin-profile-in-public-heres-the-stack-1pog</guid>
      <description>&lt;p&gt;I shipped a free tool this week: &lt;a href="https://cvboost.intrane.fr" rel="noopener noreferrer"&gt;cvboost.intrane.fr&lt;/a&gt;. Paste your LinkedIn URL, get a scored audit (6 criteria, diagnosis, action plan). No signup.&lt;/p&gt;

&lt;p&gt;The point isn't the audit — it's that an &lt;strong&gt;autonomous agent does it in public&lt;/strong&gt;, and it's a live demo of three things I build.&lt;/p&gt;

&lt;h2&gt;
  
  
  You can watch the work happen
&lt;/h2&gt;

&lt;p&gt;No spinner-and-a-black-box. Each request becomes a &lt;strong&gt;GitHub issue&lt;/strong&gt; → an agent scores your profile and opens a &lt;strong&gt;pull request&lt;/strong&gt; with the report → a second agent reviews and merges it, no human in the loop → the report is published as a shareable page. Every step is a clickable link on the result page. It's all public: &lt;a href="https://github.com/javimosch/cvboost-audits" rel="noopener noreferrer"&gt;github.com/javimosch/cvboost-audits&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The stack
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://mago.intrane.fr" rel="noopener noreferrer"&gt;mago&lt;/a&gt; — agents that run companies.&lt;/strong&gt; The audits are done by autonomous agents that take work from a GitHub repo, ship PRs, and escalate to a human only when needed. A "company" is a repo; here the team is an &lt;em&gt;auditor&lt;/em&gt; and a &lt;em&gt;reviewer&lt;/em&gt;. BYO model key, runs on your machine. CVBoost is that loop running live on every request.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://hart.intrane.fr" rel="noopener noreferrer"&gt;hart&lt;/a&gt; — Claude Artifacts, self-hosted.&lt;/strong&gt; Each report is a self-contained HTML page published with one CLI call → a live, sandboxed, versioned URL. The "publish this artifact" primitive from claude.ai, unbundled and runnable on your own box, callable from any terminal agent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/javimosch/machin" rel="noopener noreferrer"&gt;machin&lt;/a&gt; — one binary, no Node.&lt;/strong&gt; The whole app — SSR site, reactive WebAssembly UI, and JSON API — is a single static native binary. No Node, no bundler, no node_modules. The browser client compiles to wasm from the same language as the server.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why free
&lt;/h2&gt;

&lt;p&gt;It's the shop window, not the product: watch an agent do real work end to end, traceably, instead of trusting a landing page. Try it → &lt;a href="https://cvboost.intrane.fr" rel="noopener noreferrer"&gt;cvboost.intrane.fr&lt;/a&gt;, then open the PR the agent left behind. Full story: &lt;a href="https://blog.intrane.fr/an-ai-agent-audits-your-linkedin-in-public" rel="noopener noreferrer"&gt;blog.intrane.fr/an-ai-agent-audits-your-linkedin-in-public&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>showdev</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Your AI Assistant Can Run Your Website Chatbot Now</title>
      <dc:creator>Javier Leandro Arancibia</dc:creator>
      <pubDate>Mon, 06 Jul 2026 16:29:30 +0000</pubDate>
      <link>https://dev.to/javimosch/your-ai-assistant-can-run-your-website-chatbot-now-36e9</link>
      <guid>https://dev.to/javimosch/your-ai-assistant-can-run-your-website-chatbot-now-36e9</guid>
      <description>&lt;p&gt;I shipped &lt;a href="https://chatsnip.intrane.fr" rel="noopener noreferrer"&gt;chatsnip&lt;/a&gt; this week: a chatbot for your landing page that you install by pasting one script tag — and that &lt;strong&gt;your AI assistant operates for you&lt;/strong&gt;. No dashboard. You never log into anything.&lt;/p&gt;

&lt;h2&gt;
  
  
  The two sins of chatbot SaaS
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The dashboard tax.&lt;/strong&gt; Every chatbot product ships an admin panel you must learn, configure, and babysit. You wanted answers on your landing page; you got another SaaS subscription to manage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The token markup.&lt;/strong&gt; Most resell LLM completions at 5–20x wrapped in "message credits". Your bill scales with your success.&lt;/p&gt;

&lt;h2&gt;
  
  
  The bet: agents are the new admin panel
&lt;/h2&gt;

&lt;p&gt;If you're reading dev.to in 2026, you probably already have an AI assistant with a terminal — Claude Code, Codex, whatever. That assistant is better at operating software than any dashboard.&lt;/p&gt;

&lt;p&gt;So chatsnip has none. After checkout you get a &lt;strong&gt;prompt&lt;/strong&gt; — a block of text you paste to your assistant. It installs a small CLI, interviews you about your product, configures the bot, sets your spend limits, and hands you the script tag. Ongoing ops are one weekly command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./chatsnip hosted digest &lt;span class="nt"&gt;-since&lt;/span&gt; 7d
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;→ &lt;em&gt;"37 conversations — 5 support, 1 complaint (contact captured), and a lead named Sam who left &lt;a href="mailto:sam@dev.io"&gt;sam@dev.io&lt;/a&gt; asking for a call about the Pro plan."&lt;/em&gt; When visitors show buying intent or frustration, the bot offers a personal founder follow-up and asks for contact info. Those get extracted automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your keys, your costs
&lt;/h2&gt;

&lt;p&gt;Completions run on &lt;strong&gt;your own OpenRouter key&lt;/strong&gt; (encrypted at rest). Pick any model, see real LLM spend on your own bill, set your own budgets: tokens/day, tokens/visitor, messages/minute. I don't resell tokens, so I have zero incentive to inflate your conversation volume — my price is flat.&lt;/p&gt;

&lt;h2&gt;
  
  
  Absurdly small, on purpose
&lt;/h2&gt;

&lt;p&gt;The widget is ~6 KB of dependency-free JS — no iframe, no framework, no cookie banner. The entire backend (HTTP server, SQLite, LLM client, billing, CLI) is a single ~240 KB native binary written in &lt;a href="https://github.com/javimosch/machin" rel="noopener noreferrer"&gt;machin&lt;/a&gt;, a language I've been building for AI agents. Self-hosting means: one file, one command, a €3 VPS.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pricing
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Self-host: $79 one-time&lt;/strong&gt; (launch price) — binary + a year of updates through your personal install URL.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hosted: €19/mo&lt;/strong&gt;, 7-day free trial, 5 chatbots/sites included, +€2/mo per extra.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Full story on my blog: &lt;a href="https://blog.intrane.fr/your-ai-assistant-can-run-your-website-chatbot-now" rel="noopener noreferrer"&gt;Your AI Assistant Can Run Your Website Chatbot Now&lt;/a&gt; — or watch your own assistant set it up at &lt;a href="https://chatsnip.intrane.fr" rel="noopener noreferrer"&gt;chatsnip.intrane.fr&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>chatbot</category>
      <category>saas</category>
      <category>webdev</category>
    </item>
    <item>
      <title>The Day My Language Started Compiling Itself</title>
      <dc:creator>Javier Leandro Arancibia</dc:creator>
      <pubDate>Wed, 01 Jul 2026 15:42:32 +0000</pubDate>
      <link>https://dev.to/javimosch/the-day-my-language-started-compiling-itself-330k</link>
      <guid>https://dev.to/javimosch/the-day-my-language-started-compiling-itself-330k</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Update (v0.85.0):&lt;/strong&gt; it went further — the &lt;em&gt;entire toolchain&lt;/em&gt; now self-hosts, not just the compiler. &lt;code&gt;encode&lt;/code&gt;, &lt;code&gt;build&lt;/code&gt;, and &lt;code&gt;run&lt;/code&gt; are written in machin too, so machin rebuilds its own toolchain from source, &lt;strong&gt;byte-for-byte identical&lt;/strong&gt; — a complete bootstrap. &lt;a href="https://github.com/javimosch/machin/tree/main/selfhost" rel="noopener noreferrer"&gt;&lt;code&gt;selfhost/&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A year ago I built a programming language. This year it crossed the line that separates a toy from a real compiler: &lt;strong&gt;it started compiling itself.&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%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foqmvzob4yh2wgyh705x2.gif" 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%2Foqmvzob4yh2wgyh705x2.gif" alt="watch machin compile itself" width="800" height="547"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(That GIF is the real thing — machin compiling its own compiler, then that binary reproducing its own source byte-for-byte.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That sentence sounds like a party trick. It isn't. It's one of the oldest and hardest proofs in systems engineering — and reaching it, with AI as my pair, is the clearest evidence I can offer of how I actually build software.&lt;/p&gt;

&lt;h2&gt;
  
  
  First, the backstory
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/javimosch/machin" rel="noopener noreferrer"&gt;machin&lt;/a&gt; is a language I designed for a specific user: &lt;strong&gt;the AI agent writing the code&lt;/strong&gt;, not the human reading it. Zero type annotations, one canonical declaration per line, every design choice measured in tokens — then compiled straight through C to a single native binary. Script-like to write, C-class to run. (I wrote about &lt;em&gt;why&lt;/em&gt; &lt;a href="https://dev.to/why-i-built-a-language-for-ai-agents"&gt;in an earlier post&lt;/a&gt;.)&lt;/p&gt;

&lt;p&gt;For a year it grew the way real tools grow — by being used. Web servers, database drivers, a WebSocket client, crypto, even games. But a language is only as trustworthy as its compiler, and machin's compiler was written in Go. So I asked the question every language eventually has to answer:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Could machin compile itself?&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What "compiles itself" actually means
&lt;/h2&gt;

&lt;p&gt;Every serious compiler faces a rite of passage called the &lt;strong&gt;bootstrap&lt;/strong&gt;. You rewrite the compiler &lt;em&gt;in its own language&lt;/em&gt;, and then you use the original to compile the new one. If the language is real — expressive enough, correct enough, fast enough — the new compiler works. If it isn't, you find out fast.&lt;/p&gt;

&lt;p&gt;The gold standard is the &lt;strong&gt;fixpoint&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The original compiler builds the self-hosted one.&lt;/li&gt;
&lt;li&gt;That self-hosted compiler compiles &lt;em&gt;its own source&lt;/em&gt; into a fresh native binary.&lt;/li&gt;
&lt;li&gt;That fresh binary compiles the same source again — and the output is &lt;strong&gt;byte-for-byte identical.&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When those bytes match, you have proof that isn't a matter of opinion. The compiler has reproduced itself exactly. It stands on its own.&lt;/p&gt;

&lt;p&gt;Machin now does this. The whole pipeline — lexer, parser, type checker, and C code generator, about 4,000 lines — is written &lt;em&gt;in machin&lt;/em&gt;, and it emits the same machine code as the original compiler down to the byte.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it was actually built (this is the part that matters)
&lt;/h2&gt;

&lt;p&gt;I don't ship "it works on my machine." I ship &lt;em&gt;proof&lt;/em&gt;. So every single stage was built against a &lt;strong&gt;byte-diff oracle&lt;/strong&gt;: the original compiler and the new one were run on the same input and their output compared, character for character, across the entire ecosystem of real programs I'd already written. A stage wasn't "done" until that diff was empty — not on a test case, but on &lt;strong&gt;every&lt;/strong&gt; program in the corpus.&lt;/p&gt;

&lt;p&gt;That discipline paid for itself immediately. Building the compiler in its own language stress-tested the language harder than a year of app-building had, and it flushed out &lt;strong&gt;three genuine bugs&lt;/strong&gt; in the original compiler that had been hiding in plain sight — a string-comparison that compared memory addresses instead of contents, a quadratic slowdown in string handling, an escaping edge case in code generation. Each was found because the self-hosted compiler and the reference disagreed by a byte, and I refused to wave it away.&lt;/p&gt;

&lt;p&gt;Then the honest numbers. The self-hosted compiler doesn't just work — on the full parse-typecheck-codegen of its own source, it runs at about &lt;strong&gt;0.9× the original's speed&lt;/strong&gt;. Slightly &lt;em&gt;faster&lt;/em&gt; than the compiler that built it. (It didn't start there — the first version was 7× slower, and closing that gap meant finding the real bottleneck instead of the obvious-looking one. It was string building, not the "slow lookups" everyone assumes.)&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I'm telling you this
&lt;/h2&gt;

&lt;p&gt;Because this is what I mean when I say I build with AI.&lt;/p&gt;

&lt;p&gt;Not "I prompted a chatbot and shipped whatever came out." The opposite. AI was the engine, but the &lt;em&gt;engineering&lt;/em&gt; — the oracles, the byte-level verification, the refusal to accept a passing test over a passing proof, the honesty about what's fast and what isn't — that's the part that makes the output trustworthy. AI without that rigor produces plausible code. AI &lt;em&gt;with&lt;/em&gt; it produces a compiler that compiles itself, byte-for-byte, and you can go check the bytes.&lt;/p&gt;

&lt;p&gt;That combination — senior engineering judgment as the guardrail, AI as the multiplier — is exactly what I bring to the systems I build for clients at &lt;a href="https://intrane.fr" rel="noopener noreferrer"&gt;Intrane&lt;/a&gt;. Most teams get one or the other: rigor without speed, or speed without rigor. The interesting work lives where they meet.&lt;/p&gt;

&lt;p&gt;A language that compiles itself is a hard, verifiable, slightly obsessive proof that they can meet. If that's the kind of engineer you want on your hardest problem, &lt;a href="https://intrane.fr/#contact" rel="noopener noreferrer"&gt;let's talk&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;machin is open source (MIT) — the self-hosting compiler lives in &lt;a href="https://github.com/javimosch/machin/tree/main/selfhost" rel="noopener noreferrer"&gt;&lt;code&gt;selfhost/&lt;/code&gt;&lt;/a&gt;, and you can reproduce the fixpoint yourself.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>compilers</category>
      <category>ai</category>
      <category>programming</category>
      <category>showdev</category>
    </item>
    <item>
      <title>machin — a language optimized for the AI agent writing it, not the human reading it</title>
      <dc:creator>Javier Leandro Arancibia</dc:creator>
      <pubDate>Mon, 29 Jun 2026 15:37:12 +0000</pubDate>
      <link>https://dev.to/javimosch/machin-a-language-optimized-for-the-ai-agent-writing-it-not-the-human-reading-it-2p</link>
      <guid>https://dev.to/javimosch/machin-a-language-optimized-for-the-ai-agent-writing-it-not-the-human-reading-it-2p</guid>
      <description>&lt;p&gt;Every mainstream language was designed for &lt;strong&gt;human&lt;/strong&gt; ergonomics: readable syntax, explicit types, multi-line formatting. That made sense when a human typed every character. But a lot of code is now written by LLMs — and there, every &lt;em&gt;output token&lt;/em&gt; costs time and money, and most of that human-friendly ceremony taxes the writer without adding meaning.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;machin (MFL)&lt;/strong&gt; takes that flip seriously: it treats &lt;em&gt;token cost&lt;/em&gt; as a first-class design constraint. Zero type annotations (everything inferred), one canonical declaration per line, whitespace tightened to the minimum that still parses. Then it compiles — through C — to a single static native binary. No VM, no interpreter, no GC pauses you'll notice.&lt;/p&gt;

&lt;p&gt;The one-line pitch: &lt;strong&gt;write it like a script, ship it like C.&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%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpfisu0thmi2zbqf4bjft.gif" 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%2Fpfisu0thmi2zbqf4bjft.gif" alt="machin: a REST + SQLite service, compiled to a 40 KB native binary, running" width="799" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;▶ Try it in your browser — no install:&lt;/strong&gt; &lt;a href="https://play.intrane.fr" rel="noopener noreferrer"&gt;play.intrane.fr&lt;/a&gt;. Write MFL, hit Run; it compiles to WebAssembly and runs client-side.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I didn't want to &lt;em&gt;assert&lt;/em&gt; any of this, so I measured it — same programs, in the repo, runnable.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. As cheap for an agent to write as Python
&lt;/h2&gt;

&lt;p&gt;The same notes REST + SQLite API, written idiomatically in each language; tokens to author it (tiktoken &lt;code&gt;o200k_base&lt;/code&gt;):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;author tokens&lt;/th&gt;
&lt;th&gt;vs machin&lt;/th&gt;
&lt;th&gt;ships as&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;machin&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;388&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1.00×&lt;/td&gt;
&lt;td&gt;44 KB native binary, 0 deps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Python&lt;/td&gt;
&lt;td&gt;383&lt;/td&gt;
&lt;td&gt;0.99×&lt;/td&gt;
&lt;td&gt;source + a CPython interpreter&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Go&lt;/td&gt;
&lt;td&gt;527&lt;/td&gt;
&lt;td&gt;1.36×&lt;/td&gt;
&lt;td&gt;14.8 MB binary + a module dep&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;machin essentially &lt;strong&gt;ties Python&lt;/strong&gt; on what it costs an agent to write — while being a compiled, statically-typed-by-inference native language. That's the whole trick.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. In the native performance tier
&lt;/h2&gt;

&lt;p&gt;Four compute kernels, &lt;strong&gt;byte-identical output&lt;/strong&gt; across all three, each competitor at its best release setting (Rust &lt;code&gt;-O3&lt;/code&gt;, Zig &lt;code&gt;ReleaseFast&lt;/code&gt;, machin &lt;code&gt;cc -O2&lt;/code&gt;), min of 5 (one machine):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;kernel&lt;/th&gt;
&lt;th&gt;machin&lt;/th&gt;
&lt;th&gt;Rust -O3&lt;/th&gt;
&lt;th&gt;Zig&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;fib(40)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;245 ms&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;303&lt;/td&gt;
&lt;td&gt;306&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;mandelbrot 1000²&lt;/td&gt;
&lt;td&gt;827&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;814&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;819&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;sieve 10⁷&lt;/td&gt;
&lt;td&gt;203&lt;/td&gt;
&lt;td&gt;153&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;145&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;intsum 10⁹&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;2832 ms&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;3764&lt;/td&gt;
&lt;td&gt;3556&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;machin wins two, ties one, and &lt;strong&gt;loses the array-heavy sieve by ~1.4×&lt;/strong&gt;. It's C underneath, so on scalar recursion and integer loops gcc's optimizer matches or beats rustc/Zig here; on tight array indexing it trails. I'm not claiming "faster than Rust" — the sieve says otherwise. The claim is narrower and true: it's &lt;em&gt;in the same tier&lt;/em&gt;, reached from Python-cheap source.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. It ships like nothing in the scripting world
&lt;/h2&gt;

&lt;p&gt;Same minimal HTTP server, four ways:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;deployable image&lt;/th&gt;
&lt;th&gt;cold start&lt;/th&gt;
&lt;th&gt;idle RAM&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;machin&lt;/strong&gt; (static, &lt;code&gt;FROM scratch&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;92.9 kB&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.49 ms&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;108 kB&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Python&lt;/td&gt;
&lt;td&gt;47.6 MB (512×)&lt;/td&gt;
&lt;td&gt;49 ms (100×)&lt;/td&gt;
&lt;td&gt;17.9 MB (166×)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Node&lt;/td&gt;
&lt;td&gt;178 MB (&lt;strong&gt;1916×&lt;/strong&gt;)&lt;/td&gt;
&lt;td&gt;29 ms (59×)&lt;/td&gt;
&lt;td&gt;51 MB (477×)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A 92.9 kB image — the binary and nothing else — verified serving traffic from a &lt;code&gt;FROM scratch&lt;/code&gt; container. A real REST+SQLite service is ~1.2 MB (&lt;code&gt;machin build --static&lt;/code&gt; compiles SQLite straight in). Either way: &lt;code&gt;scp&lt;/code&gt; one file to a $4 VPS, or push a sub-megabyte image. No &lt;code&gt;node_modules&lt;/code&gt;, no &lt;code&gt;pip install&lt;/code&gt;, no 178 MB pull per cold node.&lt;/p&gt;

&lt;h2&gt;
  
  
  Is it a toy? I built a real thing with it
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/javimosch/machin-hook" rel="noopener noreferrer"&gt;machin-hook&lt;/a&gt; — a self-hosted webhook relay + live inspector (think webhook.site + smee.io in one binary): capture any request, watch it land live in the browser over SSE, inspect / replay / forward it. ~330 lines of MFL, no Node, no framework. It's a dogfood, not a unicorn — but it's a genuinely deployable tool, not fizzbuzz.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who it's for
&lt;/h2&gt;

&lt;p&gt;A small, self-contained, &lt;em&gt;deployable&lt;/em&gt; backend — a JSON API, a CLI, a webhook handler, a cron/daemon, an internal tool — where "one tiny binary, no Docker/Node/interpreter" is the actual win. And, increasingly, the language you point a coding agent at when you want a small service shipped cheaply.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who it's NOT for (where I'd tell you to use something else)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;An app that lives in an existing ecosystem (a Rails/Next/Django codebase, a team's Go services) — fit the tools they have.&lt;/li&gt;
&lt;li&gt;Anything needing a specific mature library (a Stripe SDK, pandas, a game engine, ML). machin's stdlib is broad but shallow, and there is &lt;strong&gt;no package registry&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Data-science / numeric array-crunching — it trails ~1.4× there and lacks the libraries.&lt;/li&gt;
&lt;li&gt;A team that won't run an unfamiliar language. machin is young — one author.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Status / honest caveats
&lt;/h2&gt;

&lt;p&gt;Young project, one maintainer, pre-1.0, the API still moves. The stdlib is broad (HTTP server, SQLite + pure-MFL Postgres/MySQL/Redis/Mongo drivers, crypto, WebSockets, SSE, a WebAssembly UI target, a raylib game path) but shallow. TLS currently links OpenSSL, so HTTPS-terminating apps aren't &lt;code&gt;FROM scratch&lt;/code&gt; yet (native TLS is in progress). It compiles via C, so building programs needs a C compiler.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it (~60 seconds)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/javimosch/machin/main/install.sh | sh
machin guide                 &lt;span class="c"&gt;# the whole language, version-exact, as JSON&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then write &lt;code&gt;app.src&lt;/code&gt;, &lt;code&gt;machin encode framework/machweb.src app.src &amp;gt; app.mfl&lt;/code&gt;, &lt;code&gt;machin build&lt;/code&gt;, run it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Repo:&lt;/strong&gt; &lt;a href="https://github.com/javimosch/machin" rel="noopener noreferrer"&gt;https://github.com/javimosch/machin&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Benchmarks&lt;/strong&gt; (run them yourself): under &lt;code&gt;bench/&lt;/code&gt; in the repo&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The language catalog:&lt;/strong&gt; &lt;code&gt;machin guide&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'd genuinely like to hear where the thesis breaks for you — especially the "agents write it cheaply" claim, since that's the bet the whole design makes.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>ai</category>
      <category>showdev</category>
      <category>opensource</category>
    </item>
    <item>
      <title>I let an AI agent write the tests for my access-control layer</title>
      <dc:creator>Javier Leandro Arancibia</dc:creator>
      <pubDate>Thu, 25 Jun 2026 21:29:28 +0000</pubDate>
      <link>https://dev.to/javimosch/i-let-an-ai-agent-write-the-tests-for-my-access-control-layer-2fh7</link>
      <guid>https://dev.to/javimosch/i-let-an-ai-agent-write-the-tests-for-my-access-control-layer-2fh7</guid>
      <description>&lt;p&gt;Fourth in the series. I've been giving &lt;strong&gt;mago&lt;/strong&gt; — an autonomous agent team that runs over a GitHub repo on your own LLM key — real tasks on my &lt;em&gt;own&lt;/em&gt; repos: a &lt;a href="https://dev.to/javimosch/i-let-an-autonomous-agent-fix-my-own-deploy-cli-here-is-the-pr-it-shipped-4l6n"&gt;feature in Go&lt;/a&gt;, a &lt;a href="https://dev.to/javimosch/same-agent-different-language-mago-fixed-a-crashing-test-in-my-zig-cli-3553"&gt;crash fix in Zig&lt;/a&gt;, and a &lt;a href="https://dev.to/javimosch/an-ai-agent-fixed-my-red-python-test-suite-without-gutting-the-tests-16b6"&gt;refactor in Python it wasn't allowed to cheat on&lt;/a&gt;. This time, the one that actually made me nervous: &lt;strong&gt;let it test my access-control layer.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The gap
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;superbackend&lt;/code&gt; is my Node.js backend toolkit. Its RBAC middleware — &lt;code&gt;src/middleware/rbac.js&lt;/code&gt;: &lt;code&gt;requireRight&lt;/code&gt;, &lt;code&gt;requireModuleAccess&lt;/code&gt;, and a basic-auth super-admin bypass — had &lt;strong&gt;zero tests&lt;/strong&gt;. Untested authorization is the scariest kind of untested code: a silent regression there is a security hole, not a bug report.&lt;/p&gt;

&lt;p&gt;So I filed an issue: add a real unit-test suite for it. Mock the service so it needs no DB; cover the actual decisions; &lt;strong&gt;don't change the behavior&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it shipped
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;src/middleware/rbac.test.js&lt;/code&gt; — &lt;strong&gt;25 tests&lt;/strong&gt;, +326 lines, covering each export against fake &lt;code&gt;req/res/next&lt;/code&gt; with the rbac service mocked out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;requireRight&lt;/code&gt; — calls &lt;code&gt;next()&lt;/code&gt; when the right is granted, returns &lt;strong&gt;403&lt;/strong&gt; when denied, the super-admin basic-auth path bypasses the check, &lt;code&gt;orgId&lt;/code&gt; resolves from &lt;code&gt;params&lt;/code&gt;/&lt;code&gt;query&lt;/code&gt;/&lt;code&gt;body&lt;/code&gt; (and a custom resolver), and a service error is handled rather than crashing the request.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;requireModuleAccess&lt;/code&gt; — allow/deny for both read and write actions.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;isBasicAuthSuperAdmin&lt;/code&gt; — the true/false cases.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No change to &lt;code&gt;rbac.js&lt;/code&gt; itself — tests only, exactly as asked.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verified
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;npx jest src/middleware/rbac.test.js
&lt;span class="go"&gt;Tests: 25 passed, 25 total
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And the full suite stayed green — the PR is purely additive (&lt;code&gt;+326/-0&lt;/code&gt;, one new file), introducing zero new failures. Merged. My access-control layer now has a safety net it didn't have this morning.&lt;/p&gt;

&lt;h2&gt;
  
  
  Four repos, four stacks, four kinds of work
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stack&lt;/th&gt;
&lt;th&gt;Task&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Go&lt;/td&gt;
&lt;td&gt;a feature&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zig&lt;/td&gt;
&lt;td&gt;a crash fix&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Python&lt;/td&gt;
&lt;td&gt;a refactor (without gutting the tests)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Node&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;test coverage for security-critical RBAC&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Same loop every time: file an issue, the agent implements it on your own key, runs the repo's own tests, and opens a &lt;strong&gt;PR you review&lt;/strong&gt; — verified, not blindly merged. Not pinned to a language, a framework, or a kind of task.&lt;/p&gt;

&lt;p&gt;The honest framing hasn't changed: it's a reliable autonomous dev shop for &lt;strong&gt;well-scoped, verifiable work&lt;/strong&gt; — features, fixes, refactors, and the tests you keep meaning to write. Not "build me a startup."&lt;/p&gt;

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

&lt;p&gt;CLI-only, BYOK (your Claude Code or tau key — it never resells completions), €20/mo. First 10 founding operators &lt;strong&gt;free during the beta&lt;/strong&gt;, with a direct line to me:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://mago.intrane.fr" rel="noopener noreferrer"&gt;https://mago.intrane.fr&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://mago.intrane.fr/install.sh | sh
mago register
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>ai</category>
      <category>node</category>
      <category>testing</category>
      <category>security</category>
    </item>
    <item>
      <title>An AI agent fixed my red Python test suite — without gutting the tests</title>
      <dc:creator>Javier Leandro Arancibia</dc:creator>
      <pubDate>Thu, 25 Jun 2026 21:16:17 +0000</pubDate>
      <link>https://dev.to/javimosch/an-ai-agent-fixed-my-red-python-test-suite-without-gutting-the-tests-16b6</link>
      <guid>https://dev.to/javimosch/an-ai-agent-fixed-my-red-python-test-suite-without-gutting-the-tests-16b6</guid>
      <description>&lt;p&gt;This is the third in a short series. I've been pointing &lt;strong&gt;mago&lt;/strong&gt; — an autonomous agent team that runs over a GitHub repo on your own LLM key — at my &lt;em&gt;own&lt;/em&gt; repos and giving it real tasks. So far: a &lt;a href="https://dev.to/javimosch/i-let-an-autonomous-agent-fix-my-own-deploy-cli-here-is-the-pr-it-shipped-4l6n"&gt;feature in Go&lt;/a&gt; and a &lt;a href="https://dev.to/javimosch/same-agent-different-language-mago-fixed-a-crashing-test-in-my-zig-cli-3553"&gt;crash fix in Zig&lt;/a&gt;. This time it's &lt;strong&gt;Python&lt;/strong&gt;, and the question every skeptic asks: &lt;em&gt;won't it just hack the tests to make them pass?&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;boilerplate-cli-ui-python&lt;/code&gt; is my agent-first Python CLI boilerplate. Its test suite was &lt;strong&gt;red&lt;/strong&gt; — 4 failing tests:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FAILED tests/test_config.py::test_config_defaults - assert False == True
FAILED tests/test_output.py::test_output_formatter_json_mode - SystemExit: 0
FAILED tests/test_output.py::test_output_formatter_human_mode - SystemExit: 0
FAILED tests/test_output.py::test_output_error_json - SystemExit: 85
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I filed an issue with one explicit instruction: &lt;strong&gt;fix the root cause, don't gut the tests.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What it actually did
&lt;/h2&gt;

&lt;p&gt;It diagnosed &lt;em&gt;two&lt;/em&gt; real bugs:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A config default mismatch (&lt;code&gt;no_color&lt;/code&gt; defaulted to the wrong value).&lt;/li&gt;
&lt;li&gt;The interesting one: &lt;code&gt;OutputFormatter.output()&lt;/code&gt; and &lt;code&gt;output_error()&lt;/code&gt; called &lt;code&gt;sys.exit()&lt;/code&gt; &lt;em&gt;inside the formatter&lt;/em&gt;, right after writing. That makes them impossible to unit-test — the test can't capture-then-assert because the process just exits — and it's a design smell: a formatter shouldn't own process control.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The fix wasn't "delete the assertions." It was a &lt;strong&gt;separation of concerns&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# before — formatter exits, untestable
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;output_error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="bp"&gt;...&lt;/span&gt;
    &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# after — the formatter just formats; the CALL SITE owns the exit
# src/output.py: no sys.exit at all
# src/main.py / src/cli.py, at every error path:
&lt;/span&gt;&lt;span class="n"&gt;formatter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;output_error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_dict&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It pulled &lt;code&gt;sys.exit()&lt;/code&gt; out of the formatter and added it at &lt;strong&gt;every&lt;/strong&gt; error call-site in &lt;code&gt;main.py&lt;/code&gt;/&lt;code&gt;cli.py&lt;/code&gt; — so production exit codes are &lt;strong&gt;preserved&lt;/strong&gt; while the formatter becomes testable. Then it rewrote the tests to assert the error &lt;em&gt;payload&lt;/em&gt; instead of requiring the process to die.&lt;/p&gt;

&lt;h2&gt;
  
  
  I verified it — and checked specifically for cheating
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;python &lt;span class="nt"&gt;-m&lt;/span&gt; pytest
&lt;span class="go"&gt;20 passed
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Green is cheap if you gut tests, so I checked the diff:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;grep sys.exit src/output.py&lt;/code&gt; → &lt;strong&gt;0&lt;/strong&gt; (removed, as intended)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;sys.exit(error.code)&lt;/code&gt; added at every error path in &lt;code&gt;main.py&lt;/code&gt;/&lt;code&gt;cli.py&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;the CLI still exits non-zero on errors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It fixed the design, kept the behavior, and made the tests meaningful. Merged.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three repos, three stacks, one loop
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Go&lt;/strong&gt; — a feature (a command suggester).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zig&lt;/strong&gt; — a crash fix (red → green).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Python&lt;/strong&gt; — a real refactor that made a broken suite green &lt;em&gt;without weakening it&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Same loop every time: file an issue, the agent implements it on your own key, runs the repo's own tests, and opens a &lt;strong&gt;PR&lt;/strong&gt; you review — verified, not blindly merged. It isn't pinned to a language or a framework, and — the part I actually cared about — when told not to cheat, it didn't.&lt;/p&gt;

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

&lt;p&gt;CLI-only, BYOK (your Claude Code or tau key — it never resells completions), €20/mo. First 10 founding operators &lt;strong&gt;free during the beta&lt;/strong&gt;, with a direct line to me:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://mago.intrane.fr" rel="noopener noreferrer"&gt;https://mago.intrane.fr&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://mago.intrane.fr/install.sh | sh
mago register
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you point it at one of your own repos — any stack — I'd love to hear how it goes.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>testing</category>
      <category>automation</category>
    </item>
    <item>
      <title>Same agent, different language: mago fixed a crashing test in my Zig CLI</title>
      <dc:creator>Javier Leandro Arancibia</dc:creator>
      <pubDate>Thu, 25 Jun 2026 20:43:30 +0000</pubDate>
      <link>https://dev.to/javimosch/same-agent-different-language-mago-fixed-a-crashing-test-in-my-zig-cli-3553</link>
      <guid>https://dev.to/javimosch/same-agent-different-language-mago-fixed-a-crashing-test-in-my-zig-cli-3553</guid>
      <description>&lt;p&gt;In a &lt;a href="https://dev.to/javimosch/i-let-an-autonomous-agent-fix-my-own-deploy-cli-here-is-the-pr-it-shipped-4l6n"&gt;previous post&lt;/a&gt; I let &lt;strong&gt;mago&lt;/strong&gt; — an autonomous agent team that runs over a GitHub repo — ship a &lt;em&gt;feature&lt;/em&gt; to my Go deploy CLI. The obvious next question: does it generalize past Go, and past "add a feature"? So I pointed it at a &lt;strong&gt;Zig&lt;/strong&gt; project and a &lt;strong&gt;crashing test&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The bug
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;tau&lt;/code&gt; is my agent-first AI CLI, reimplemented in Zig. Its test suite had one test that didn't just fail — it &lt;strong&gt;crashed&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;error: 'agents_md.test.scanAgentsMd returns empty for bad path' terminated with signal ABRT
Build Summary: 1/3 steps succeeded (1 failed); 132/133 tests passed (1 crashed)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;132 green, 1 hard abort — the kind of thing that sits red in CI because "it's just a test."&lt;/p&gt;

&lt;h2&gt;
  
  
  What mago did
&lt;/h2&gt;

&lt;p&gt;It read the test and found the &lt;em&gt;root cause&lt;/em&gt;, not the symptom. The test was passing &lt;code&gt;undefined&lt;/code&gt; as the &lt;code&gt;io: std.Io&lt;/code&gt; argument:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight zig"&gt;&lt;code&gt;&lt;span class="c"&gt;// before&lt;/span&gt;
&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;scanAgentsMd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;undefined&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;testing&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;allocator&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;testing&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;allocator&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"/nonexistent"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="o"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;scanAgentsMd&lt;/code&gt; uses &lt;code&gt;io&lt;/code&gt;, so in a debug build Zig traps the undefined access and aborts — &lt;em&gt;before&lt;/em&gt; the test ever reaches the bad-path logic it meant to exercise. The fix is one line: pass a real io.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight zig"&gt;&lt;code&gt;&lt;span class="c"&gt;// after&lt;/span&gt;
&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;scanAgentsMd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;testing&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;io&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;testing&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;allocator&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;testing&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;allocator&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"/nonexistent"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It opened a PR with exactly that.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verified
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;zig build &lt;span class="nb"&gt;test&lt;/span&gt;
&lt;span class="gp"&gt;Build Summary: 3/3 steps succeeded;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;133/133 tests passed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Red → green. Merged.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two repos, two stacks, one loop
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Last time:&lt;/strong&gt; a &lt;em&gt;feature&lt;/em&gt; in &lt;strong&gt;Go&lt;/strong&gt; (a "did you mean" command suggester for a 32-command CLI).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;This time:&lt;/strong&gt; a &lt;em&gt;bug fix&lt;/em&gt; in &lt;strong&gt;Zig&lt;/strong&gt; (a crashing test, root-caused and fixed).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Same loop both times: file a GitHub issue, the agent implements it on your own LLM key, runs the repo's own build/tests, and opens a &lt;strong&gt;PR&lt;/strong&gt; — verified, not blindly auto-merged. It isn't tied to a language or a framework; it works against whatever your repo's &lt;code&gt;build&lt;/code&gt;/&lt;code&gt;test&lt;/code&gt; command says is green.&lt;/p&gt;

&lt;p&gt;It's good at &lt;strong&gt;well-scoped, verifiable work&lt;/strong&gt; — features, fixes, tests, refactors, DX. Not "build me a startup." Honest framing: a reliable autonomous dev shop you steer with a roadmap.&lt;/p&gt;

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

&lt;p&gt;CLI-only, BYOK (your Claude Code or tau key — it never resells completions), €20/mo. First 10 founding operators &lt;strong&gt;free during the beta&lt;/strong&gt;, with a direct line to me:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://mago.intrane.fr" rel="noopener noreferrer"&gt;https://mago.intrane.fr&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://mago.intrane.fr/install.sh | sh
mago register
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you point it at one of your own repos — any stack — I'd love to hear how it goes.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>zig</category>
      <category>testing</category>
      <category>automation</category>
    </item>
    <item>
      <title>I let an autonomous agent fix my own deploy CLI — here is the PR it shipped</title>
      <dc:creator>Javier Leandro Arancibia</dc:creator>
      <pubDate>Thu, 25 Jun 2026 20:26:05 +0000</pubDate>
      <link>https://dev.to/javimosch/i-let-an-autonomous-agent-fix-my-own-deploy-cli-here-is-the-pr-it-shipped-4l6n</link>
      <guid>https://dev.to/javimosch/i-let-an-autonomous-agent-fix-my-own-deploy-cli-here-is-the-pr-it-shipped-4l6n</guid>
      <description>&lt;p&gt;While building &lt;strong&gt;mago&lt;/strong&gt; — a CLI that runs a small autonomous "company" of AI agents over a GitHub repo — I did the obvious test: point it at one of &lt;em&gt;my own&lt;/em&gt; tools and give it a real task. No demo repo, no cherry-picked example. Here's exactly what happened, PR included.&lt;/p&gt;

&lt;h2&gt;
  
  
  The tool and the task
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;hotify-cli&lt;/code&gt; is my Go CLI for deploying web apps behind Traefik + Cloudflare (it's literally what deploys mago's own backend). It has 32 subcommands, and like a lot of CLIs, a mistyped command just dumped the entire ~130-line usage block and exited. Annoying for humans, noisy for agents.&lt;/p&gt;

&lt;p&gt;So I filed a normal GitHub issue:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;feat: suggest the nearest command on unknown input ("did you mean"), not a full-usage dump&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;…labeled it &lt;code&gt;mago&lt;/code&gt;, and let the agent take it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the agent did, unattended
&lt;/h2&gt;

&lt;p&gt;mago routed the issue to its implementer, which:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Cloned the repo and read the 32-command dispatch in &lt;code&gt;main.go&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Wrote &lt;code&gt;suggest.go&lt;/code&gt; — a rune-aware Levenshtein distance + a prefix-match shortcut + a canonical command list, with a length-aware threshold so unrelated typos don't surface a misleading suggestion.&lt;/li&gt;
&lt;li&gt;Wrote &lt;code&gt;suggest_test.go&lt;/code&gt; — 11 cases (typos, prefix matches, unrelated input).&lt;/li&gt;
&lt;li&gt;Wired it into the &lt;code&gt;default&lt;/code&gt; case of the dispatch.&lt;/li&gt;
&lt;li&gt;Ran &lt;code&gt;gofmt&lt;/code&gt; / &lt;code&gt;go vet&lt;/code&gt; / &lt;code&gt;go build&lt;/code&gt; / &lt;code&gt;go test&lt;/code&gt;, then opened a pull request.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;About &lt;strong&gt;3 minutes, on Claude Sonnet, with no human in the per-step loop&lt;/strong&gt;. Crucially it opened a &lt;strong&gt;PR&lt;/strong&gt; — it didn't push to main. The merge stayed my call.&lt;/p&gt;

&lt;h2&gt;
  
  
  I verified it (don't trust the summary)
&lt;/h2&gt;

&lt;p&gt;I checked out the branch myself:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gofmt: clean   go vet: clean   go build: OK   go test: ok
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And the actual behavior:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;hotify-cli statuss
&lt;span class="go"&gt;hotify-cli: unknown command "statuss"
Did you mean "status"?
Run 'hotify-cli help' for usage.

&lt;/span&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;hotify-cli deploi
&lt;span class="go"&gt;Did you mean "deploy"?
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Correct, scoped, tested, dependency-free. Merged.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it works — and where it doesn't
&lt;/h2&gt;

&lt;p&gt;The thing that makes it trustworthy isn't the model, it's the &lt;strong&gt;loop&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Verified autonomy&lt;/strong&gt; — a PR only auto-merges if review passes &lt;em&gt;and&lt;/em&gt; the repo's own build/tests are green; failing or unverifiable work waits for you. (I kept this one review-only.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub-native&lt;/strong&gt; — issues = tasks, labels = status, PRs = deliverables. The worker dials &lt;em&gt;out&lt;/em&gt;, so there's no inbound webhook to expose.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;BYOK&lt;/strong&gt; — it drives your own Claude Code or tau key. It never resells completions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's genuinely good at &lt;strong&gt;well-scoped, verifiable work&lt;/strong&gt;: tests, refactors, small features, CLI/UX fixes. It is &lt;em&gt;not&lt;/em&gt; "build me a startup." Honest framing — it's a reliable autonomous dev shop you steer with a roadmap, not magic.&lt;/p&gt;

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

&lt;p&gt;mago is CLI-only, BYOK, €20/mo. I'm onboarding the &lt;strong&gt;first 10 founding operators free during the beta&lt;/strong&gt;, with a direct line to me:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://mago.intrane.fr" rel="noopener noreferrer"&gt;https://mago.intrane.fr&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://mago.intrane.fr/install.sh | sh
mago register
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you try it on one of your own repos, I'd love to hear where it helped — and where it annoyed you.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>go</category>
      <category>automation</category>
      <category>devtools</category>
    </item>
    <item>
      <title>Append-CLIP-Interrogation: A SuperCLI Plugin Guide</title>
      <dc:creator>Javier Leandro Arancibia</dc:creator>
      <pubDate>Wed, 24 Jun 2026 03:44:35 +0000</pubDate>
      <link>https://dev.to/javimosch/append-clip-interrogation-a-supercli-plugin-guide-5bao</link>
      <guid>https://dev.to/javimosch/append-clip-interrogation-a-supercli-plugin-guide-5bao</guid>
      <description>&lt;h1&gt;
  
  
  Append-CLIP-Interrogation
&lt;/h1&gt;

&lt;p&gt;Simple python script to automatically append caption generated by CLIP interrogator to an image file&lt;/p&gt;

&lt;h2&gt;
  
  
  Source
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/Append-CLIP-Interrogation/Append-CLIP-Interrogation" rel="noopener noreferrer"&gt;https://github.com/Append-CLIP-Interrogation/Append-CLIP-Interrogation&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Tags
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;python&lt;/li&gt;
&lt;li&gt;tool&lt;/li&gt;
&lt;li&gt;development&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Check GitHub repository for installation instructions&lt;/li&gt;
&lt;li&gt;Verify: Append-CLIP-Interrogation --version&lt;/li&gt;
&lt;li&gt;supercli plugins install ./plugins/Append-CLIP-Interrogation --on-conflict replace --json&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  About SuperCLI
&lt;/h2&gt;

&lt;p&gt;This plugin is part of the &lt;a href="https://github.com/javimosch/supercli" rel="noopener noreferrer"&gt;SuperCLI&lt;/a&gt; ecosystem - a unified CLI plugin manager for AI agents and developers.&lt;/p&gt;

&lt;p&gt;Discover, install, and orchestrate thousands of command-line tools with SuperCLI.&lt;/p&gt;

</description>
      <category>supercli</category>
      <category>cli</category>
      <category>python</category>
      <category>tool</category>
    </item>
    <item>
      <title>App-Store-Connect-CLI: A SuperCLI Plugin Guide</title>
      <dc:creator>Javier Leandro Arancibia</dc:creator>
      <pubDate>Wed, 24 Jun 2026 02:44:35 +0000</pubDate>
      <link>https://dev.to/javimosch/app-store-connect-cli-a-supercli-plugin-guide-hlh</link>
      <guid>https://dev.to/javimosch/app-store-connect-cli-a-supercli-plugin-guide-hlh</guid>
      <description>&lt;h1&gt;
  
  
  App-Store-Connect-CLI
&lt;/h1&gt;

&lt;p&gt;Fast, scriptable CLI for the App Store Connect API. Automate TestFlight, builds, submissions, signing, analytics, screenshots, subscriptions, and more. JSON-first, no interactive prompts&lt;/p&gt;

&lt;h2&gt;
  
  
  Source
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/App-Store-Connect-CLI/App-Store-Connect-CLI" rel="noopener noreferrer"&gt;https://github.com/App-Store-Connect-CLI/App-Store-Connect-CLI&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Tags
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;App-Store-Connect-CLI&lt;/li&gt;
&lt;li&gt;Go&lt;/li&gt;
&lt;li&gt;cli&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;pip install app-store-connect-cli&lt;/li&gt;
&lt;li&gt;Verify: app-store-connect-cli --version&lt;/li&gt;
&lt;li&gt;supercli plugins install ./plugins/App-Store-Connect-CLI --on-conflict replace --json&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  About SuperCLI
&lt;/h2&gt;

&lt;p&gt;This plugin is part of the &lt;a href="https://github.com/javimosch/supercli" rel="noopener noreferrer"&gt;SuperCLI&lt;/a&gt; ecosystem - a unified CLI plugin manager for AI agents and developers.&lt;/p&gt;

&lt;p&gt;Discover, install, and orchestrate thousands of command-line tools with SuperCLI.&lt;/p&gt;

</description>
      <category>supercli</category>
      <category>cli</category>
      <category>appstoreconnectcli</category>
      <category>go</category>
    </item>
    <item>
      <title>AiToEarn: A SuperCLI Plugin Guide</title>
      <dc:creator>Javier Leandro Arancibia</dc:creator>
      <pubDate>Wed, 24 Jun 2026 01:44:35 +0000</pubDate>
      <link>https://dev.to/javimosch/aitoearn-a-supercli-plugin-guide-1gn5</link>
      <guid>https://dev.to/javimosch/aitoearn-a-supercli-plugin-guide-1gn5</guid>
      <description>&lt;h1&gt;
  
  
  AiToEarn
&lt;/h1&gt;

&lt;p&gt;AI-powered earning platform CLI for monetizing AI capabilities and services&lt;/p&gt;

&lt;h2&gt;
  
  
  Source
&lt;/h2&gt;

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

&lt;h2&gt;
  
  
  Tags
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;AiToEarn&lt;/li&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;cli&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;pip install aitoearn&lt;/li&gt;
&lt;li&gt;Verify: aitoearn --version&lt;/li&gt;
&lt;li&gt;supercli plugins install ./plugins/AiToEarn --on-conflict replace --json&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  About SuperCLI
&lt;/h2&gt;

&lt;p&gt;This plugin is part of the &lt;a href="https://github.com/javimosch/supercli" rel="noopener noreferrer"&gt;SuperCLI&lt;/a&gt; ecosystem - a unified CLI plugin manager for AI agents and developers.&lt;/p&gt;

&lt;p&gt;Discover, install, and orchestrate thousands of command-line tools with SuperCLI.&lt;/p&gt;

</description>
      <category>supercli</category>
      <category>cli</category>
      <category>aitoearn</category>
      <category>typescript</category>
    </item>
  </channel>
</rss>
