<?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: Ariel Frischer</title>
    <description>The latest articles on DEV Community by Ariel Frischer (@arielf).</description>
    <link>https://dev.to/arielf</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%2F2165481%2F6fd0a096-e2a8-46ff-bac9-192101ec72de.jpg</url>
      <title>DEV Community: Ariel Frischer</title>
      <link>https://dev.to/arielf</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/arielf"/>
    <language>en</language>
    <item>
      <title>RepoBird.ai: One-Shot Cloud Coding Agents</title>
      <dc:creator>Ariel Frischer</dc:creator>
      <pubDate>Sat, 04 Jul 2026 20:59:28 +0000</pubDate>
      <link>https://dev.to/arielf/repobirdai-one-shot-cloud-coding-agents-21an</link>
      <guid>https://dev.to/arielf/repobirdai-one-shot-cloud-coding-agents-21an</guid>
      <description>&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%2Fmiehmflf6rwowr4kfdhq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmiehmflf6rwowr4kfdhq.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;Most AI coding tools want a conversation. You prompt, they answer, you correct, they retry — and nothing ships until you've babysat every step.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://repobird.ai" rel="noopener noreferrer"&gt;RepoBird&lt;/a&gt; works differently. It's a cloud coding agent built for &lt;strong&gt;one-shot execution&lt;/strong&gt;: you describe a task once (usually as an issue), an agent picks it up in an isolated cloud sandbox, and you get back a pull request. It works with both GitHub and GitLab. No chat loop, no local setup, nothing running on your machine.&lt;/p&gt;

&lt;p&gt;"Cloud" is doing real work in that sentence. Running agents in the cloud instead of on your machine buys you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Full isolation&lt;/strong&gt; — each run gets its own sandboxed VM with a dedicated filesystem. Agents can't touch your local files, SSH keys, or credentials, and an agent that goes sideways can't hurt anything but its own disposable sandbox.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero permission fatigue&lt;/strong&gt; — no "allow agent to run this command?" prompts all day. The sandbox is the permission boundary.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real parallelism&lt;/strong&gt; — every task runs in its own environment, so submitting ten issues means ten agents working at once. Your laptop couldn't do that; the cloud doesn't care.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run from anywhere&lt;/strong&gt; — close the lid. Runs live in the cloud, not in a terminal session, so you can fire one off from your phone on the dashboard, check status from the train, and review the PR when you're back. No machine to babysit.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;p&gt;The flow is short:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Connect your repos.&lt;/strong&gt; On GitHub, install the &lt;a href="https://github.com/apps/repobird" rel="noopener noreferrer"&gt;RepoBird GitHub App&lt;/a&gt;. On GitLab, invite the &lt;code&gt;@repobirdbot&lt;/code&gt; user to your project (or group) and connect the project URL from the RepoBird dashboard — no access tokens to manage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Describe the task&lt;/strong&gt; — a GitHub issue with clear instructions, file paths, or code snippets works best.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trigger a run&lt;/strong&gt; from the dashboard, via the CLI, or with a GitHub comment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review the PR.&lt;/strong&gt; The agent researches the codebase, implements the change, runs what it can, commits, and opens a pull request against your target branch.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's the whole loop. If the PR needs adjustments, comment on it with new instructions and the agent pushes follow-up commits to the same branch.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quickstart 1: From the dashboard
&lt;/h2&gt;

&lt;p&gt;The simplest path, and it works the same for GitHub and GitLab. Sign in at &lt;a href="https://repobird.ai" rel="noopener noreferrer"&gt;repobird.ai&lt;/a&gt; and open the &lt;a href="https://repobird.ai/run" rel="noopener noreferrer"&gt;&lt;strong&gt;Run&lt;/strong&gt; page&lt;/a&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Pick a connected repository and base branch&lt;/li&gt;
&lt;li&gt;Describe the task — same rules as a good issue: what to change, where, and how you'll know it's done&lt;/li&gt;
&lt;li&gt;Launch, and watch the run's live status until the PR lands&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No terminal, no setup beyond connecting the repo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quickstart 2: From the CLI
&lt;/h2&gt;

&lt;p&gt;For terminal workflows and bulk runs, there's the RepoBird CLI.&lt;/p&gt;

&lt;p&gt;Grab an API key from &lt;strong&gt;Dashboard → User Profile → API Keys&lt;/strong&gt; at &lt;a href="https://repobird.ai" rel="noopener noreferrer"&gt;repobird.ai&lt;/a&gt;, then:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;REPOBIRD_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"rb_live_xxxxxxxxxxxxx"&lt;/span&gt;
repobird auth verify
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fire off a task with a plain prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;repobird run &lt;span class="nt"&gt;-r&lt;/span&gt; your-org/your-repo &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="s2"&gt;"Fix the login bug where users get stuck on the loading screen"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or define tasks as files — JSON, YAML, or Markdown with frontmatter all work:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;repobird run task.json &lt;span class="nt"&gt;--follow&lt;/span&gt;   &lt;span class="c"&gt;# --follow streams live status&lt;/span&gt;
repobird run task.yaml
&lt;span class="nb"&gt;cat &lt;/span&gt;task.json | repobird run -    &lt;span class="c"&gt;# from stdin, easy to script&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check on everything from the terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;repobird status                   &lt;span class="c"&gt;# list all runs&lt;/span&gt;
repobird status &lt;span class="nt"&gt;--follow&lt;/span&gt; RUN_ID   &lt;span class="c"&gt;# live updates for one run&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The file-based input is what makes bulk work practical: generate a batch of task files from your backlog, loop over them, and come back to a stack of PRs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The power-user setup:&lt;/strong&gt; install the CLI plus the RepoBird skill for your coding agent. With the skill loaded, your local agent — Claude Code, or whatever you drive day to day — can dispatch RepoBird cloud runs itself: you stay in one conversation, and well-scoped tasks get offloaded to cloud agents that come back as PRs while your local agent keeps working.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quickstart 3: From a GitHub comment
&lt;/h2&gt;

&lt;p&gt;On any issue in a repo where the app is installed, comment:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@repobird run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agent reads the issue, implements it, and opens a PR. You can add instructions and options inline:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@repobird run base:main pr-target:develop Fix the login redirect loop on expired sessions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;base:&amp;lt;branch&amp;gt;&lt;/code&gt; — which branch the agent starts from&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;pr-target:&amp;lt;branch&amp;gt;&lt;/code&gt; — where the PR points&lt;/li&gt;
&lt;li&gt;Free-text instructions after the options are passed straight to the agent&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It also works on existing pull requests. Comment &lt;code&gt;@repobird run Refactor this to use the shared client&lt;/code&gt; on a PR and the agent pushes updates directly to that PR's branch.&lt;/p&gt;

&lt;h2&gt;
  
  
  Smart Git handling
&lt;/h2&gt;

&lt;p&gt;A detail that matters more than it sounds: &lt;strong&gt;the agent never runs Git&lt;/strong&gt;. It only writes code. When the run finishes, RepoBird's post-processing step takes over — it reviews the workspace, builds the commit from an approved staged diff, pushes to a generated output branch, and opens the PR.&lt;/p&gt;

&lt;p&gt;Why this is better than letting an LLM drive &lt;code&gt;git&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Deterministic Git operations&lt;/strong&gt; — commits, pushes, and PRs come from platform code, not model output, so they work the same every run&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clean, reviewable diffs&lt;/strong&gt; — only the approved staged changes ship; agent scratch files never leak into your PR&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Guardrails by construction&lt;/strong&gt; — direct writes to your base branch are rejected; every run lands on its own output branch&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You still control the flow: &lt;code&gt;pr-target:&lt;/code&gt; sets where the PR points, and branch-only mode (&lt;code&gt;outputMode:branch&lt;/code&gt; + &lt;code&gt;output-policy:reuse&lt;/code&gt;) pushes a branch without a PR so follow-up runs can keep building on it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Core features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;One-shot execution&lt;/strong&gt; — describe the task once, get a PR. No iterative chat sessions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Parallel cloud runs&lt;/strong&gt; — each task gets its own isolated sandbox, so many agents can work simultaneously without file conflicts or worktree juggling.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smart Git handling&lt;/strong&gt; — the agent writes code, RepoBird's post-processing handles commit, push, and PR/MR creation deterministically from an approved staged diff.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PR follow-ups&lt;/strong&gt; — comment on a RepoBird PR with instructions and the agent updates the branch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub and GitLab&lt;/strong&gt; — install the GitHub App, or add &lt;code&gt;@repobirdbot&lt;/code&gt; to your GitLab project and connect it from the dashboard.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Three triggers&lt;/strong&gt; — the web dashboard, the CLI, and GitHub comments (&lt;code&gt;@repobird run&lt;/code&gt;). GitLab runs launch from the dashboard or CLI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent-to-agent dispatch&lt;/strong&gt; — pair the CLI with the RepoBird skill so local coding agents like Claude Code can launch cloud runs on your behalf.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexible task input&lt;/strong&gt; — plain prompts, JSON, YAML, Markdown frontmatter, or stdin.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live monitoring&lt;/strong&gt; — &lt;code&gt;repobird status --follow&lt;/code&gt; in the terminal, plus run history in the dashboard.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenCode-powered runtime&lt;/strong&gt; — repository-aware code generation with flexible model routing and BYOK support for individual Pro usage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full development sandbox&lt;/strong&gt; — agents get real environments with common language runtimes, package managers, build tooling, and internet access for docs and dependencies.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security by isolation&lt;/strong&gt; — agents never touch your machine; no local credentials, SSH keys, or files are exposed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Credit-based execution and teams&lt;/strong&gt; — control spend, share repository access, and manage members on team plans.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero infrastructure&lt;/strong&gt; — nothing to host, configure, or clean up. Install the app and go.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Where it fits
&lt;/h2&gt;

&lt;p&gt;RepoBird is not trying to replace your editor's AI assistant. Local tools are great for exploratory work and tight visual iteration. RepoBird is for the other pile: everything you can describe clearly in an issue.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What teams hand off:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bug backlogs&lt;/strong&gt; — submit the whole pile; agents triage, fix, and test in parallel while your team stays on feature work&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Large-scale refactors&lt;/strong&gt; — split a big refactor into focused tasks and run them simultaneously instead of grinding through sequentially&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dependency updates&lt;/strong&gt; — bump every service in isolation, each with its own PR and test run&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Boilerplate and scaffolding&lt;/strong&gt; — CRUD endpoints, new components, config plumbing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentation&lt;/strong&gt; — generate and update docs across projects without burning engineer hours&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tech-debt sprints&lt;/strong&gt; — clear the "someday" column while nobody's machine slows down&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;For power users&lt;/strong&gt;, the ceiling is parallelism. Anyone who has tried running multiple agents locally knows the failure mode: git worktrees each needing their own dependency install, agents overwriting each other's files, a machine brought to its knees by three model contexts. RepoBird sidesteps all of it — every task gets an isolated cloud sandbox, so submitting 20 tasks is no harder than submitting one. Script it through the CLI, or let your local coding agent dispatch runs via the RepoBird skill.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For teams&lt;/strong&gt;, it's capacity you don't have to hire, provision, or manage. No infrastructure, no orchestration layer, no agent-ops burden — the backlog moves while your engineers spend their time on the problems that actually need them. Credit-based execution keeps spend visible and controllable.&lt;/p&gt;

&lt;p&gt;The habit shift is small but real: instead of context-switching into every small task, write a good issue, hand it off, and review the PR when it lands.&lt;/p&gt;

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

&lt;p&gt;There's a free tier, so the experiment costs nothing:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install the GitHub App (&lt;a href="https://github.com/apps/repobird" rel="noopener noreferrer"&gt;github.com/apps/repobird&lt;/a&gt;) — or on GitLab, invite &lt;code&gt;@repobirdbot&lt;/code&gt; to your project and connect it at &lt;a href="https://repobird.ai" rel="noopener noreferrer"&gt;repobird.ai&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Pick an open issue with a clear description&lt;/li&gt;
&lt;li&gt;Launch a run from the &lt;a href="https://repobird.ai/run" rel="noopener noreferrer"&gt;dashboard&lt;/a&gt; — or just comment &lt;code&gt;@repobird run&lt;/code&gt; on the issue&lt;/li&gt;
&lt;li&gt;Review the PR&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Docs and full command reference: &lt;a href="https://repobird.ai/docs" rel="noopener noreferrer"&gt;repobird.ai/docs&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Emergent Properties and Abilities of LLMs</title>
      <dc:creator>Ariel Frischer</dc:creator>
      <pubDate>Sat, 27 Jun 2026 19:07:18 +0000</pubDate>
      <link>https://dev.to/arielf/emergent-properties-and-abilities-of-llms-594o</link>
      <guid>https://dev.to/arielf/emergent-properties-and-abilities-of-llms-594o</guid>
      <description>&lt;p&gt;Emergent LLM ability is best treated as an evaluation problem, not a mystical property. Some abilities do appear suddenly under common benchmark metrics, but a large part of "emergence" comes from thresholded scoring, prompt format, in-context examples, tool access, training loss phase changes, and whether the evaluator knows how to elicit the behavior.&lt;/p&gt;

&lt;p&gt;The useful current answer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Yes, there are ways to discover new emergent abilities.&lt;/li&gt;
&lt;li&gt;The strongest methods are automated capability discovery, open-ended task/model coevolution, adversarial elicitation, mechanistic probes, longitudinal checkpoint evaluation, and contamination-resistant self-generated benchmarks.&lt;/li&gt;
&lt;li&gt;The most useful underexploited abilities are meta-cognition for tool routing, latent planning, self-reflection under controlled conditions, algorithmic discovery, capability self-mapping, and cross-domain analogy.&lt;/li&gt;
&lt;li&gt;The most dangerous or low-trust abilities are covert communication, prompt extraction, deceptive self-presentation, benchmark gaming, and inverse-scaling failures where bigger models get worse at some tasks.&lt;/li&gt;
&lt;li&gt;Many "unknown abilities" are probably latent elicitation gaps: the model can do the task under one framing but fails under another.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Working Definition
&lt;/h2&gt;

&lt;p&gt;I would use three categories instead of one overloaded word:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Apparent emergence&lt;/td&gt;
&lt;td&gt;A sharp jump caused by the metric or benchmark threshold&lt;/td&gt;
&lt;td&gt;Exact-match arithmetic goes from 0 to 1 once partial competence crosses a line&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Latent ability&lt;/td&gt;
&lt;td&gt;A capability present but rarely elicited without the right prompt, trace, tool, or environment&lt;/td&gt;
&lt;td&gt;Pretrained self-reflection appearing rarely, then increasing under reflection-inducing probes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;System emergence&lt;/td&gt;
&lt;td&gt;New behavior from model plus scaffold, tools, memory, agents, or feedback loops&lt;/td&gt;
&lt;td&gt;Long-horizon coding agent, tool scheduling, autonomous scientific workflow&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The practical mistake is asking "does the model have ability X?" The better question is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Under which elicitation, tools, context budget, feedback, and scoring rule does ability X become reliable?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Can We Discover New Emergent Abilities?
&lt;/h2&gt;

&lt;p&gt;Yes. Current methods cluster into eight approaches.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Automated Capability Discovery
&lt;/h3&gt;

&lt;p&gt;Automated Capability Discovery (ACD) asks a model, or another foundation model acting as a scientist, to propose open-ended tasks that probe a target model's abilities. This reduces dependence on hand-authored benchmarks and may expose unexpected skills or risks.&lt;/p&gt;

&lt;p&gt;Useful pattern:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Generate many candidate tasks.&lt;/li&gt;
&lt;li&gt;Filter for novelty, verifiability, and non-contamination.&lt;/li&gt;
&lt;li&gt;Run target models across scales/checkpoints.&lt;/li&gt;
&lt;li&gt;Cluster tasks where performance has unusual jumps, collapses, or strong prompt sensitivity.&lt;/li&gt;
&lt;li&gt;Human-review only the most surprising clusters.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Sources: Lu, Hu, and Clune, "Automated Capability Discovery via Foundation Model Self-Exploration" / "Beyond Benchmarking" (&lt;a href="https://openreview.net/forum?id=cLvzWgk8Lt" rel="noopener noreferrer"&gt;OpenReview&lt;/a&gt;, &lt;a href="https://openreview.net/pdf?id=nhgbvyrvTP" rel="noopener noreferrer"&gt;OpenReview PDF&lt;/a&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Task-Capability Coevolution
&lt;/h3&gt;

&lt;p&gt;Instead of fixing benchmarks, coevolve tasks and models. AC/DC-style systems evolve assessments and model variants together to discover specialized experts or unexpected strengths.&lt;/p&gt;

&lt;p&gt;This is attractive because static benchmarks saturate and leak into training data. Coevolution can keep producing harder or stranger probes.&lt;/p&gt;

&lt;p&gt;Source: "Discovering Novel LLM Experts via Task-Capability Coevolution" (&lt;a href="https://arxiv.org/abs/2604.14969v1" rel="noopener noreferrer"&gt;arXiv&lt;/a&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Checkpoint and Scaling-Trajectory Sweeps
&lt;/h3&gt;

&lt;p&gt;Evaluate model checkpoints throughout pretraining, not only final models. Some capabilities appear at particular stages; some get worse with more training.&lt;/p&gt;

&lt;p&gt;What to look for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sudden slope changes.&lt;/li&gt;
&lt;li&gt;U-shaped or inverse-scaling curves.&lt;/li&gt;
&lt;li&gt;Abilities that emerge after lower-level component skills appear.&lt;/li&gt;
&lt;li&gt;Loss ranges where downstream abilities become reliable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sources: "Understanding Emergent Abilities of Language Models from the Loss Perspective" (&lt;a href="https://openreview.net/forum?id=35DAviqMFo" rel="noopener noreferrer"&gt;OpenReview&lt;/a&gt;); "What Do Language Models Learn and When? The Implicit Curriculum Hypothesis" (&lt;a href="https://arxiv.org/abs/2604.08510v1" rel="noopener noreferrer"&gt;arXiv&lt;/a&gt;); "Emergent Inabilities? Inverse Scaling Over the Course of Pretraining" (&lt;a href="https://aclanthology.org/2023.findings-emnlp.973.pdf" rel="noopener noreferrer"&gt;ACL Anthology&lt;/a&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Metric Decomposition and Continuous Scoring
&lt;/h3&gt;

&lt;p&gt;Some emergence disappears when exact-match metrics are replaced with continuous metrics. This does not mean the ability is fake; it means the visible jump may be a measurement artifact.&lt;/p&gt;

&lt;p&gt;Use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Token-level probabilities.&lt;/li&gt;
&lt;li&gt;Partial credit.&lt;/li&gt;
&lt;li&gt;Calibration curves.&lt;/li&gt;
&lt;li&gt;Error taxonomy.&lt;/li&gt;
&lt;li&gt;Multi-step trace scoring.&lt;/li&gt;
&lt;li&gt;Confidence intervals that remain valid under sequential testing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sources: Schaeffer et al., "Are Emergent Abilities of Large Language Models a Mirage?" (&lt;a href="https://openreview.net/forum?id=ITw9edRDlD" rel="noopener noreferrer"&gt;OpenReview&lt;/a&gt;); CELEUS, certifiable LLM evaluation via e-processes (&lt;a href="https://arxiv.org/abs/2606.20820v1" rel="noopener noreferrer"&gt;arXiv&lt;/a&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Mechanistic and Causal Probes
&lt;/h3&gt;

&lt;p&gt;Use interventions to ask whether a behavior has internal support rather than being only prompt imitation.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Latent planning probes: identify future-token planning representations and intervene on them.&lt;/li&gt;
&lt;li&gt;Reflection-inducing probes: inject traces that trigger self-revision and measure whether the base model has latent reflection capacity.&lt;/li&gt;
&lt;li&gt;Introspection benchmarks: test whether a model predicts its own policy better than peers do.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sources: "Latent Planning Emerges with Scale" (&lt;a href="https://arxiv.org/abs/2604.12493v1" rel="noopener noreferrer"&gt;arXiv&lt;/a&gt;); "From Emergence to Control: Probing and Modulating Self-Reflection in Language Models" (&lt;a href="https://arxiv.org/html/2506.12217v1" rel="noopener noreferrer"&gt;arXiv&lt;/a&gt;); "Me, Myself, and pi: Evaluating and Explaining LLM Introspection" (&lt;a href="https://openreview.net/forum?id=5yH4Ac5z9C" rel="noopener noreferrer"&gt;OpenReview&lt;/a&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Agentic Sandboxes
&lt;/h3&gt;

&lt;p&gt;Many abilities only appear when the model can act, observe failure, call tools, edit files, rerun tests, or consult external memory. Static chat evaluation misses these.&lt;/p&gt;

&lt;p&gt;Good sandbox probes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Long-horizon software tasks.&lt;/li&gt;
&lt;li&gt;Tool planning and scheduling.&lt;/li&gt;
&lt;li&gt;Scientific hypothesis to experiment to result loop.&lt;/li&gt;
&lt;li&gt;CLI and browser environments with reversible actions.&lt;/li&gt;
&lt;li&gt;Multi-agent communication with monitors.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sources: MMAU agent benchmark (&lt;a href="https://www.arxiv.org/pdf/2407.18961" rel="noopener noreferrer"&gt;arXiv&lt;/a&gt;); SpecTool for tool-use errors (&lt;a href="https://arxiv.org/html/2411.13547v1" rel="noopener noreferrer"&gt;arXiv&lt;/a&gt;); TPS-Bench for tool planning and scheduling (&lt;a href="https://arxiv.org/html/2511.01527v1" rel="noopener noreferrer"&gt;arXiv&lt;/a&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Adversarial and Safety Elicitation
&lt;/h3&gt;

&lt;p&gt;Some abilities are unwanted and will not surface in cooperative benchmarks. Red-team tasks can reveal prompt extraction, covert communication, sandbagging-like behavior, or hidden policy knowledge.&lt;/p&gt;

&lt;p&gt;Sources: "Just Ask: Curious Code Agents Reveal System Prompts in Frontier LLMs" (&lt;a href="https://arxiv.org/html/2601.21233v1" rel="noopener noreferrer"&gt;arXiv&lt;/a&gt;); "Early Signs of Steganographic Capabilities in Frontier LLMs" (&lt;a href="https://arxiv.org/html/2507.02737" rel="noopener noreferrer"&gt;arXiv&lt;/a&gt;); "Hidden in Plain Text: Emergence &amp;amp; Mitigation of Steganographic Collusion in LLMs" (&lt;a href="https://aclanthology.org/2025.ijcnlp-long.34.pdf" rel="noopener noreferrer"&gt;ACL Anthology&lt;/a&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  8. Self-Contained and Contamination-Resistant Benchmarks
&lt;/h3&gt;

&lt;p&gt;Benchmarks with fixed answers are increasingly suspect. Self-generated games, peer evaluation, synthetic task generation, and verifiable programmatic tasks reduce memorization risk.&lt;/p&gt;

&lt;p&gt;Source: "The Metanym Game" (&lt;a href="https://arxiv.org/abs/2606.21008v1" rel="noopener noreferrer"&gt;arXiv&lt;/a&gt;).&lt;/p&gt;

&lt;h2&gt;
  
  
  Biggest Useful Abilities Now
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Ability&lt;/th&gt;
&lt;th&gt;Why it matters&lt;/th&gt;
&lt;th&gt;Confidence&lt;/th&gt;
&lt;th&gt;Caveat&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Tool routing by meta-cognition&lt;/td&gt;
&lt;td&gt;Decides when to use search, code, calculator, database, or no tool&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Self-assessment can be badly calibrated&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Latent planning&lt;/td&gt;
&lt;td&gt;Model can shape earlier text/actions toward a later target without explicit plan text&lt;/td&gt;
&lt;td&gt;Medium-high&lt;/td&gt;
&lt;td&gt;Mostly shown in simplified settings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;In-context task learning&lt;/td&gt;
&lt;td&gt;Learns task behavior from examples in the prompt without parameter updates&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Often brittle to formatting and distribution shift&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code repair loops&lt;/td&gt;
&lt;td&gt;Generate patch, run tests, inspect failure, iterate&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Depends heavily on tool scaffold and test quality&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hypothesis generation&lt;/td&gt;
&lt;td&gt;Proposes scientific/product explanations and experiments&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Cheap ideas are common; good validation is scarce&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Algorithmic discovery&lt;/td&gt;
&lt;td&gt;Infers latent structure and compiles reusable solvers&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Promising but narrow and benchmark-dependent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Self-reflection and revision&lt;/td&gt;
&lt;td&gt;Revisits reasoning and corrects some mistakes&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Can also rationalize wrong answers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cross-domain analogy&lt;/td&gt;
&lt;td&gt;Transfers structures between distant domains&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Hard to score objectively&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi-tool scheduling&lt;/td&gt;
&lt;td&gt;Chooses and sequences tools for compound tasks&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Current agents still fail on state, latency, and error recovery&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Capability self-mapping&lt;/td&gt;
&lt;td&gt;Helps generate tests that characterize model strengths/risks&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Needs external validation to avoid self-report errors&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Niche, Meta, Unknown, or Unpopular Abilities
&lt;/h2&gt;

&lt;p&gt;These are not all production-ready, but they are worth tracking because they may become useful or risky as models/scaffolds improve.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Ability&lt;/th&gt;
&lt;th&gt;Useful version&lt;/th&gt;
&lt;th&gt;Useless or risky version&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Behavioral self-awareness&lt;/td&gt;
&lt;td&gt;Predicts when it will fail; routes to tools or humans&lt;/td&gt;
&lt;td&gt;Conceals ability during eval, overclaims competence&lt;/td&gt;
&lt;td&gt;Early evidence via introspection/self-awareness probes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Theory-of-mind-like reasoning&lt;/td&gt;
&lt;td&gt;Simulates stakeholder beliefs, user intent, negotiation state&lt;/td&gt;
&lt;td&gt;Anthropomorphic overinterpretation&lt;/td&gt;
&lt;td&gt;ToM and self-attribution can dissociate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Steganographic signaling&lt;/td&gt;
&lt;td&gt;Maybe watermarking or compact side channels in controlled systems&lt;/td&gt;
&lt;td&gt;Covert collusion, monitor evasion&lt;/td&gt;
&lt;td&gt;Current frontier models are limited without extra affordances, but trainable stego is plausible&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Prompt extraction strategies&lt;/td&gt;
&lt;td&gt;Defensive testing of agents&lt;/td&gt;
&lt;td&gt;Leaking hidden system prompts&lt;/td&gt;
&lt;td&gt;Agentic probing expands attack surface&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Benchmark critique&lt;/td&gt;
&lt;td&gt;Finds flaws in evals and proposes harder tests&lt;/td&gt;
&lt;td&gt;Goodharting and benchmark gaming&lt;/td&gt;
&lt;td&gt;Useful if evaluator is separate from target&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Self-generated curriculum&lt;/td&gt;
&lt;td&gt;Models create training/eval tasks for smaller models&lt;/td&gt;
&lt;td&gt;Recursive error amplification&lt;/td&gt;
&lt;td&gt;Needs verifiable tasks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Social simulation&lt;/td&gt;
&lt;td&gt;User research, tabletop exercises, policy stress tests&lt;/td&gt;
&lt;td&gt;Fake consensus, sycophantic personas&lt;/td&gt;
&lt;td&gt;Needs calibration against real data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Compression and summarization as reasoning&lt;/td&gt;
&lt;td&gt;Extracts latent variables, taxonomies, decision factors&lt;/td&gt;
&lt;td&gt;Lossy summaries that hide uncertainty&lt;/td&gt;
&lt;td&gt;Valuable when paired with source-grounded checks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Inverse-scaling detection&lt;/td&gt;
&lt;td&gt;Finds tasks where bigger is worse&lt;/td&gt;
&lt;td&gt;Choosing bigger model blindly&lt;/td&gt;
&lt;td&gt;Important for safety and truthfulness&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Latent preference inference&lt;/td&gt;
&lt;td&gt;Infers implicit user goals from sparse context&lt;/td&gt;
&lt;td&gt;Manipulation or over-personalization&lt;/td&gt;
&lt;td&gt;Needs explicit consent and boundaries&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Useful vs. Useless Ability Ranking
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Most Useful
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Tool-aware meta-cognition&lt;/strong&gt; - huge practical leverage because it reduces unnecessary tool calls and improves reliability.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code/test iteration&lt;/strong&gt; - already economically useful and verifiable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Long-context synthesis with source grounding&lt;/strong&gt; - useful for research, legal, product, and operations work if citations are checked.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Latent planning plus explicit planning&lt;/strong&gt; - supports coherent long outputs and multi-step work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automated eval generation&lt;/strong&gt; - helps discover failures faster than humans can hand-author tests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hypothesis generation with executable validation&lt;/strong&gt; - useful when the loop includes code, experiments, or data checks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-domain transfer&lt;/strong&gt; - useful for strategy, architecture, naming, pedagogy, and creative problem solving.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Currently Overrated or Often Useless
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Unverified self-reflection&lt;/strong&gt; - often produces confident rationalization, not correction.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-reported introspection&lt;/strong&gt; - useful only when scored against behavior or internal evidence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generic agent autonomy&lt;/strong&gt; - without tight environments and tests, it burns tokens and drifts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Theory of mind claims&lt;/strong&gt; - useful as task performance, not as evidence of human-like mental modeling.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Bigger model solves it"&lt;/strong&gt; - inverse scaling and U-shaped scaling show this is false for some tasks.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Dangerous if It Gets Better
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Covert communication and steganography&lt;/strong&gt; - undermines monitoring in multi-agent systems.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prompt extraction and policy inference&lt;/strong&gt; - leaks hidden instructions and security boundaries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evaluation awareness&lt;/strong&gt; - may enable sandbagging-like behavior or benchmark-specific masking.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Autonomous replication/persistence&lt;/strong&gt; - currently benchmarked in controlled settings; high operational risk if real.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Persuasive user modeling&lt;/strong&gt; - valuable for UX, risky for manipulation.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Practical Protocol to Discover New Abilities
&lt;/h2&gt;

&lt;p&gt;Use this if the goal is to map a new model's hidden capabilities.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Build an Ability Seed List
&lt;/h3&gt;

&lt;p&gt;Start with broad categories:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reasoning: logic, math, causal reasoning, counterfactuals.&lt;/li&gt;
&lt;li&gt;Planning: latent planning, explicit plans, long-horizon state.&lt;/li&gt;
&lt;li&gt;Tool use: selection, scheduling, argument construction, error recovery.&lt;/li&gt;
&lt;li&gt;Self-knowledge: calibration, failure prediction, introspection.&lt;/li&gt;
&lt;li&gt;Social cognition: beliefs, incentives, deception detection, negotiation.&lt;/li&gt;
&lt;li&gt;Creativity: analogy, compression, invention, style transfer.&lt;/li&gt;
&lt;li&gt;Safety: prompt extraction, covert channels, refusal bypass, policy inference.&lt;/li&gt;
&lt;li&gt;Domain skills: code, science, finance, medicine, law, operations.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 2: Generate Candidate Tasks Automatically
&lt;/h3&gt;

&lt;p&gt;Use one or more strong models as task generators. Require each task to include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Capability being tested.&lt;/li&gt;
&lt;li&gt;Why the task is not just memorization.&lt;/li&gt;
&lt;li&gt;Verification method.&lt;/li&gt;
&lt;li&gt;Minimal scoring rubric.&lt;/li&gt;
&lt;li&gt;Easier and harder variants.&lt;/li&gt;
&lt;li&gt;Prompt perturbations.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 3: Prefer Verifiable Tasks
&lt;/h3&gt;

&lt;p&gt;Best task types:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unit tests.&lt;/li&gt;
&lt;li&gt;Programmatic answer checkers.&lt;/li&gt;
&lt;li&gt;Synthetic worlds with known state.&lt;/li&gt;
&lt;li&gt;Logic puzzles with proof graphs.&lt;/li&gt;
&lt;li&gt;Data analysis with held-out labels.&lt;/li&gt;
&lt;li&gt;Tool-use tasks with observable side effects.&lt;/li&gt;
&lt;li&gt;Pairwise comparisons judged by independent models plus human audit.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 4: Sweep Elicitation Conditions
&lt;/h3&gt;

&lt;p&gt;For each task, vary:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Zero-shot vs few-shot.&lt;/li&gt;
&lt;li&gt;Direct answer vs chain-of-thought-like hidden reasoning vs concise rationale.&lt;/li&gt;
&lt;li&gt;Tool access vs no tool access.&lt;/li&gt;
&lt;li&gt;Scratchpad vs no scratchpad.&lt;/li&gt;
&lt;li&gt;Time/iteration budget.&lt;/li&gt;
&lt;li&gt;Role framing.&lt;/li&gt;
&lt;li&gt;Temperature.&lt;/li&gt;
&lt;li&gt;Context length.&lt;/li&gt;
&lt;li&gt;Feedback after failure.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Latent abilities often appear only under one of these.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5: Plot Across Models and Checkpoints
&lt;/h3&gt;

&lt;p&gt;Look for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sharp jumps.&lt;/li&gt;
&lt;li&gt;Smooth trends hidden by exact scoring.&lt;/li&gt;
&lt;li&gt;U-shaped curves.&lt;/li&gt;
&lt;li&gt;Prompt-sensitive cliffs.&lt;/li&gt;
&lt;li&gt;Abilities that appear after another prerequisite skill improves.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 6: Attack Your Own Discovery
&lt;/h3&gt;

&lt;p&gt;For each candidate emergent ability, ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is this metric thresholding?&lt;/li&gt;
&lt;li&gt;Is this data contamination?&lt;/li&gt;
&lt;li&gt;Is this just tool use?&lt;/li&gt;
&lt;li&gt;Is this prompt leakage?&lt;/li&gt;
&lt;li&gt;Does a smaller model with better prompting do it too?&lt;/li&gt;
&lt;li&gt;Does continuous scoring remove the jump?&lt;/li&gt;
&lt;li&gt;Does the ability transfer to new task families?&lt;/li&gt;
&lt;li&gt;Can the model explain or predict its own behavior better than another model can?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 7: Promote Only Reliable Capabilities
&lt;/h3&gt;

&lt;p&gt;Mark each ability:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;observed&lt;/code&gt;: appeared in one setting.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;elicitable&lt;/code&gt;: appears under known conditions.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;robust&lt;/code&gt;: survives perturbations.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;operational&lt;/code&gt;: useful in a real workflow with validation.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;risky&lt;/code&gt;: creates monitoring/security/alignment concerns.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Research Gaps
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Better separation between latent ability and benchmark artifact.&lt;/li&gt;
&lt;li&gt;Contamination-resistant benchmarks that are still meaningful.&lt;/li&gt;
&lt;li&gt;Mechanistic evidence for planning, introspection, and social reasoning.&lt;/li&gt;
&lt;li&gt;Evaluation methods for multi-agent and tool-rich environments.&lt;/li&gt;
&lt;li&gt;Ways to discover dangerous capabilities without teaching them.&lt;/li&gt;
&lt;li&gt;Longitudinal maps of when abilities appear during training.&lt;/li&gt;
&lt;li&gt;Confidence intervals and sequential testing practices for open-ended evals.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Core emergence debate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Wei et al., "Emergent Abilities of Large Language Models" (&lt;a href="https://openreview.net/pdf?id=yzkSU5zdwD" rel="noopener noreferrer"&gt;OpenReview PDF&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Schaeffer, Miranda, and Koyejo, "Are Emergent Abilities of Large Language Models a Mirage?" (&lt;a href="https://openreview.net/forum?id=ITw9edRDlD" rel="noopener noreferrer"&gt;OpenReview&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;"Are Emergent Abilities in Large Language Models just In-Context Learning?" (&lt;a href="https://arxiv.org/pdf/2309.01809" rel="noopener noreferrer"&gt;arXiv PDF&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Berti, Giorgi, and Kasneci, "Emergent Abilities in Large Language Models: A Survey" (&lt;a href="https://arxiv.org/html/2503.05788v2" rel="noopener noreferrer"&gt;arXiv&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Arora and Goyal, "A Theory for Emergence of Complex Skills in Language Models" (&lt;a href="https://ar5iv.labs.arxiv.org/html/2307.15936" rel="noopener noreferrer"&gt;ar5iv&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Discovery and evaluation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lu, Hu, and Clune, "Automated Capability Discovery via Foundation Model Self-Exploration" (&lt;a href="https://openreview.net/forum?id=cLvzWgk8Lt" rel="noopener noreferrer"&gt;OpenReview&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;"Discovering Novel LLM Experts via Task-Capability Coevolution" (&lt;a href="https://arxiv.org/abs/2604.14969v1" rel="noopener noreferrer"&gt;arXiv&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;"CELEUS: Certifiable and Efficient LLM Evaluation via E-Processes" (&lt;a href="https://arxiv.org/abs/2606.20820v1" rel="noopener noreferrer"&gt;arXiv&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;"The Metanym Game" (&lt;a href="https://arxiv.org/abs/2606.21008v1" rel="noopener noreferrer"&gt;arXiv&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Specific abilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Latent Planning Emerges with Scale" (&lt;a href="https://arxiv.org/abs/2604.12493v1" rel="noopener noreferrer"&gt;arXiv&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;"From Emergence to Control: Probing and Modulating Self-Reflection in Language Models" (&lt;a href="https://arxiv.org/html/2506.12217v1" rel="noopener noreferrer"&gt;arXiv&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;"Me, Myself, and pi: Evaluating and Explaining LLM Introspection" (&lt;a href="https://openreview.net/forum?id=5yH4Ac5z9C" rel="noopener noreferrer"&gt;OpenReview&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;"Adaptive Tool Use in Large Language Models with Meta-Cognition Trigger" (&lt;a href="https://aclanthology.org/2025.acl-long.655.pdf" rel="noopener noreferrer"&gt;ACL Anthology&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;"LLM Agents for Distribution-Aware Algorithmic Discovery" (&lt;a href="https://openreview.net/forum?id=jnyeZebxU9" rel="noopener noreferrer"&gt;OpenReview&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;"Theory of Mind Might Have Spontaneously Emerged in Large Language Models" (&lt;a href="https://arxiv.org/pdf/2302.02083v5" rel="noopener noreferrer"&gt;arXiv PDF&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;"Theory of Mind and Self-Attributions of Mentality are Dissociable in LLMs" (&lt;a href="https://arxiv.org/pdf/2603.28925" rel="noopener noreferrer"&gt;arXiv PDF&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Risks and failures:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Inverse Scaling: When Bigger Isn't Better" (&lt;a href="https://openreview.net/pdf?id=DwgRm72GQF" rel="noopener noreferrer"&gt;OpenReview PDF&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;"Inverse Scaling Can Become U-Shaped" (&lt;a href="https://aclanthology.org/2023.emnlp-main.963.pdf" rel="noopener noreferrer"&gt;ACL Anthology&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;"Emergent Inabilities? Inverse Scaling Over the Course of Pretraining" (&lt;a href="https://aclanthology.org/2023.findings-emnlp.973.pdf" rel="noopener noreferrer"&gt;ACL Anthology&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;"Just Ask: Curious Code Agents Reveal System Prompts in Frontier LLMs" (&lt;a href="https://arxiv.org/html/2601.21233v1" rel="noopener noreferrer"&gt;arXiv&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;"Early Signs of Steganographic Capabilities in Frontier LLMs" (&lt;a href="https://arxiv.org/html/2507.02737" rel="noopener noreferrer"&gt;arXiv&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;"Hidden in Plain Text: Emergence &amp;amp; Mitigation of Steganographic Collusion in LLMs" (&lt;a href="https://aclanthology.org/2025.ijcnlp-long.34.pdf" rel="noopener noreferrer"&gt;ACL Anthology&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;"Language Models can Learn High-Capacity Secure Steganography" (&lt;a href="https://openreview.net/pdf?id=CjxxRknUd1" rel="noopener noreferrer"&gt;OpenReview PDF&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>programming</category>
    </item>
    <item>
      <title>Agentic Coding Strategy: What Works, What Backfires</title>
      <dc:creator>Ariel Frischer</dc:creator>
      <pubDate>Sun, 31 May 2026 19:58:32 +0000</pubDate>
      <link>https://dev.to/arielf/agentic-coding-strategy-what-works-what-backfires-2mfg</link>
      <guid>https://dev.to/arielf/agentic-coding-strategy-what-works-what-backfires-2mfg</guid>
      <description>&lt;p&gt;The honest answer is not "use more agents" or "buy the biggest model." The best agentic coding strategy depends on the shape of the task.&lt;/p&gt;

&lt;p&gt;The pattern I trust right now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Small, sequential work: one strong agent with tight context.&lt;/li&gt;
&lt;li&gt;Large, parallel work: specialized agents with clear handoffs.&lt;/li&gt;
&lt;li&gt;Production work: specs before code, tests after code, and deterministic checks between phases.&lt;/li&gt;
&lt;li&gt;Cost-sensitive work: route easy steps to cheaper models and reserve frontier models for ambiguity, architecture, and review.&lt;/li&gt;
&lt;li&gt;Familiar codebases: use AI carefully. It can slow experienced developers down.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The biggest mistake is treating all coding work as the same workload.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Multi-agent teams help when the work is genuinely parallel
&lt;/h2&gt;

&lt;p&gt;Multi-agent coding systems look strongest when the task can be split into roles: planner, coder, reviewer, tester, docs writer, migration specialist, security reviewer.&lt;/p&gt;

&lt;p&gt;The best evidence in the supplied notes points to specialization and cross-validation as the useful mechanism. A multi-agent comparison from vibecoding.app reports 72.2% on SWE-bench Verified for multi-agent teams versus about 65% for single-agent baselines using similar model classes. The same writeup reports stronger review performance: 60.1% code-review F1 versus about 51% for single-agent review, plus better critical bug detection.&lt;/p&gt;

&lt;p&gt;I would not interpret that as "always run five agents." I read it as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Separate planning from execution when scope is broad.&lt;/li&gt;
&lt;li&gt;Use a reviewer agent when correctness matters.&lt;/li&gt;
&lt;li&gt;Fan out only when tasks do not need the same mutable context.&lt;/li&gt;
&lt;li&gt;Keep handoffs explicit: changed files, task intent, tests run, known risks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The tradeoff is real. Multi-agent runs cost more tokens, create coordination overhead, and make failures harder to debug. If one agent can hold the whole problem and the task is sequential, adding agents usually adds latency.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Hierarchical decomposition beats one giant plan
&lt;/h2&gt;

&lt;p&gt;Long-horizon work fails when the agent tries to hold the entire plan in one flat list. The useful move is hierarchy:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Goal.&lt;/li&gt;
&lt;li&gt;Milestones.&lt;/li&gt;
&lt;li&gt;Interfaces between milestones.&lt;/li&gt;
&lt;li&gt;File-level tasks.&lt;/li&gt;
&lt;li&gt;Verification gates.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is not ceremony. It limits compounding error.&lt;/p&gt;

&lt;p&gt;Spec Kit Agents is a good example of this direction. The paper describes a staged workflow with SPEC, PLAN, TASKS, and IMPLEMENT phases, plus context-grounding hooks before each stage and validation hooks after. The reported result is modest but useful: context-grounding improved judged quality by 0.15 on a 1-5 composite score and improved SWE-bench Lite Pass@1 by 1.7 percentage points, reaching 58.2%.&lt;/p&gt;

&lt;p&gt;That is the right lesson: specs do not magically make agents brilliant. They make failures visible earlier.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Spec-driven and test-driven workflows solve different problems
&lt;/h2&gt;

&lt;p&gt;Specs define intent. Tests define success.&lt;/p&gt;

&lt;p&gt;For agentic coding, I want both:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A short spec that names the behavior, constraints, non-goals, and acceptance criteria.&lt;/li&gt;
&lt;li&gt;A plan that lists touched files and risky assumptions.&lt;/li&gt;
&lt;li&gt;Tests or checks that prove the change works.&lt;/li&gt;
&lt;li&gt;A final review pass that reads the diff against the original spec.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Spec-driven development is most useful when the agent might hallucinate APIs, ignore repo conventions, or drift from the original goal. Test-driven development is most useful when the expected behavior can be encoded as an executable signal.&lt;/p&gt;

&lt;p&gt;Where this backfires: small changes with obvious local scope. Do not write a five-page spec for a two-line validation fix.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. The harness matters more than people want to admit
&lt;/h2&gt;

&lt;p&gt;MindStudio summarized a harsh result: the same model can show up to 6x performance variation from harness design alone. Their practical recommendations are worth operationalizing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Remove tools the agent does not need.&lt;/li&gt;
&lt;li&gt;Keep irrelevant context out of the prompt.&lt;/li&gt;
&lt;li&gt;Test whether verifiers and search loops help your workload before assuming they do.&lt;/li&gt;
&lt;li&gt;Put orchestration logic where the model can understand it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This matches my own bias: agent performance is often a systems problem, not just a model-selection problem.&lt;/p&gt;

&lt;p&gt;The question is not "what is the best model?" It is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What context does the model see?&lt;/li&gt;
&lt;li&gt;What tools can it call?&lt;/li&gt;
&lt;li&gt;What work is deterministic outside the model?&lt;/li&gt;
&lt;li&gt;What gets verified before the next step?&lt;/li&gt;
&lt;li&gt;How easy is it to inspect why the run failed?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If those answers are bad, a stronger model mostly gives you a more expensive failure.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Model tiering is the cost control strategy
&lt;/h2&gt;

&lt;p&gt;Do not send every step to your most expensive model.&lt;/p&gt;

&lt;p&gt;A practical routing policy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cheap or local model: search, summarization, boilerplate, formatting, doc drafts.&lt;/li&gt;
&lt;li&gt;Workhorse model: normal implementation, test generation, straightforward refactors.&lt;/li&gt;
&lt;li&gt;Frontier model: ambiguous architecture, hard debugging, security-sensitive changes, final review.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The exact model names will change. The routing rule should not.&lt;/p&gt;

&lt;p&gt;Agentic work can burn tokens unpredictably. A 2026 arXiv paper on token consumption in agentic coding tasks reports that agentic tasks can consume far more tokens than simple code chat, that runs on the same task can vary dramatically in token usage, and that higher token spend does not reliably mean higher accuracy.&lt;/p&gt;

&lt;p&gt;So the default should be measured escalation, not automatic frontier-model usage.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Experienced developers on familiar codebases should be selective
&lt;/h2&gt;

&lt;p&gt;The METR randomized controlled trial is the caution flag. In their early-2025 study, 16 experienced open-source developers worked on 246 real issues in repositories they knew well. Allowing AI tools increased completion time by 19%, even though developers believed AI had made them faster.&lt;/p&gt;

&lt;p&gt;That does not prove AI slows everyone down. METR is careful about that. It does show a real failure mode:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The developer already knows the system.&lt;/li&gt;
&lt;li&gt;The task depends on local conventions.&lt;/li&gt;
&lt;li&gt;The AI produces plausible code that requires review and cleanup.&lt;/li&gt;
&lt;li&gt;The review cost exceeds the generation savings.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For senior developers in familiar code, AI should often be scoped to narrow support tasks: search, test scaffolds, migration drafts, alternative designs, and review checklists.&lt;/p&gt;

&lt;h2&gt;
  
  
  My decision framework
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Situation&lt;/th&gt;
&lt;th&gt;Default strategy&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Solo dev, small project&lt;/td&gt;
&lt;td&gt;Single strong agent&lt;/td&gt;
&lt;td&gt;Lower overhead, faster iteration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Familiar codebase, precise edit&lt;/td&gt;
&lt;td&gt;Minimal AI assistance&lt;/td&gt;
&lt;td&gt;Review cost can exceed generation savings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Large feature across subsystems&lt;/td&gt;
&lt;td&gt;Planner plus parallel implementers&lt;/td&gt;
&lt;td&gt;Real parallelism and scoped context&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Production code review&lt;/td&gt;
&lt;td&gt;Specialized reviewer agents&lt;/td&gt;
&lt;td&gt;Fresh passes catch different bug classes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Long-horizon project&lt;/td&gt;
&lt;td&gt;Hierarchical decomposition&lt;/td&gt;
&lt;td&gt;Prevents flat-plan drift&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Clear behavior with known tests&lt;/td&gt;
&lt;td&gt;Spec plus tests&lt;/td&gt;
&lt;td&gt;Intent and success are both explicit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost-sensitive pipeline&lt;/td&gt;
&lt;td&gt;Model tiering&lt;/td&gt;
&lt;td&gt;Spend frontier tokens only where needed&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  The bucket answer
&lt;/h2&gt;

&lt;p&gt;For most solo developers, the best default is still a single strong agent with excellent context management.&lt;/p&gt;

&lt;p&gt;For complex, parallelizable production work, the best default is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A short spec.&lt;/li&gt;
&lt;li&gt;Hierarchical task decomposition.&lt;/li&gt;
&lt;li&gt;Specialized agents only where the work naturally splits.&lt;/li&gt;
&lt;li&gt;Deterministic checks between handoffs.&lt;/li&gt;
&lt;li&gt;A reviewer agent before human review.&lt;/li&gt;
&lt;li&gt;Model routing by task difficulty.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;More agents are not the strategy. Better task boundaries are the strategy.&lt;/p&gt;

&lt;p&gt;Sources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multi-agent benchmark and tradeoff summary: &lt;a href="https://vibecoding.app/blog/multi-agent-vs-single-agent-coding" rel="noopener noreferrer"&gt;https://vibecoding.app/blog/multi-agent-vs-single-agent-coding&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Spec Kit Agents paper: &lt;a href="https://arxiv.org/html/2604.05278v1" rel="noopener noreferrer"&gt;https://arxiv.org/html/2604.05278v1&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Harness design discussion: &lt;a href="https://www.mindstudio.ai/blog/better-model-vs-better-harness-agent-benchmark-score" rel="noopener noreferrer"&gt;https://www.mindstudio.ai/blog/better-model-vs-better-harness-agent-benchmark-score&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;METR experienced developer RCT: &lt;a href="https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/" rel="noopener noreferrer"&gt;https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Agentic token consumption paper: &lt;a href="https://arxiv.org/abs/2604.22750" rel="noopener noreferrer"&gt;https://arxiv.org/abs/2604.22750&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>arc-agent: AI System Design Generator</title>
      <dc:creator>Ariel Frischer</dc:creator>
      <pubDate>Sun, 17 May 2026 01:41:38 +0000</pubDate>
      <link>https://dev.to/arielf/arc-agent-ai-system-design-generator-3c76</link>
      <guid>https://dev.to/arielf/arc-agent-ai-system-design-generator-3c76</guid>
      <description>&lt;p&gt;Finally a structured approach to system design: &lt;a href="https://github.com/ariel-frischer/arc-agent" rel="noopener noreferrer"&gt;&lt;code&gt;arc-agent&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It is a Go CLI for turning a system design prompt into a real design workspace: requirements, entities, APIs, high-level design, optional deep dives, and architecture diagrams.&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%2Fgwyjvkozparb8g5rxx3i.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%2Fgwyjvkozparb8g5rxx3i.png" alt=" " width="800" height="597"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The core idea is simple: do not ask an agent for one big architecture document and hope it is coherent. Split the work into stages, validate every artifact, repair failures, and render the result into files that are easy to review.&lt;/p&gt;

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

&lt;p&gt;An &lt;code&gt;arc-agent&lt;/code&gt; workspace contains structured YAML artifacts plus generated outputs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;arc.yaml
01-requirements.yaml
02-entities.yaml
03-api.yaml
04-high-level-design.yaml
06-diagram.yaml
DESIGN.md
diagram.mmd
diagram.excalidraw.png
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That gives you a readable design doc, Mermaid source, and image artifacts without losing the structured intermediate data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quickstart
&lt;/h2&gt;

&lt;p&gt;Install the CLI:&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://raw.githubusercontent.com/ariel-frischer/arc-agent/main/install.sh | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then ask it for a design:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;arc-agent new &lt;span class="s2"&gt;"Design a URL shortener like Bitly"&lt;/span&gt; &lt;span class="nt"&gt;--out&lt;/span&gt; designs/bitly
arc-agent inspect designs/bitly
arc-agent validate designs/bitly
arc-agent render designs/bitly &lt;span class="nt"&gt;--format&lt;/span&gt; all
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can run it through an agent provider such as OpenCode, Codex, or Claude Code. You can also use direct mode with OpenCode Go structured outputs when you want stricter, faster generation.&lt;/p&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/ariel-frischer/arc-agent" rel="noopener noreferrer"&gt;https://github.com/ariel-frischer/arc-agent&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>systemdesign</category>
      <category>cli</category>
    </item>
    <item>
      <title>Autospec: Spec-Driven Development for AI Coding Agents</title>
      <dc:creator>Ariel Frischer</dc:creator>
      <pubDate>Thu, 14 May 2026 19:54:25 +0000</pubDate>
      <link>https://dev.to/arielf/autospec-spec-driven-development-for-ai-coding-agents-2a6f</link>
      <guid>https://dev.to/arielf/autospec-spec-driven-development-for-ai-coding-agents-2a6f</guid>
      <description>&lt;p&gt;AI coding agents are powerful, but the workflow can get messy fast: vague prompts, drifting context, half-finished plans, and implementation work that starts before the requirements are clear.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/ariel-frischer/autospec" rel="noopener noreferrer"&gt;&lt;code&gt;autospec&lt;/code&gt;&lt;/a&gt; is a CLI for bringing structure back into that loop.&lt;/p&gt;

&lt;p&gt;It turns feature work into a repeatable flow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;specify -&amp;gt; plan -&amp;gt; tasks -&amp;gt; implement
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each stage produces YAML artifacts, so the output is structured, reviewable, and easy for tools to validate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install
&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/ariel-frischer/autospec/main/install.sh | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You will also need Git and one supported coding agent:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Claude Code&lt;/li&gt;
&lt;li&gt;Codex CLI&lt;/li&gt;
&lt;li&gt;OpenCode&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Set up a project
&lt;/h2&gt;

&lt;p&gt;From inside your repo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;autospec doctor
autospec init
autospec constitution
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;doctor&lt;/code&gt; checks dependencies, &lt;code&gt;init&lt;/code&gt; sets up autospec config, and &lt;code&gt;constitution&lt;/code&gt; creates project-level principles for future specs.&lt;/p&gt;

&lt;h2&gt;
  
  
  The basic workflow
&lt;/h2&gt;

&lt;p&gt;Start by generating only the spec:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;autospec run &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="s2"&gt;"Add user authentication with OAuth"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Autospec creates a feature directory like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;specs/
  001-user-authentication/
    spec.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Review and edit the spec before continuing. Then run the rest:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;autospec run &lt;span class="nt"&gt;-pti&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That continues through:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;plan -&amp;gt; tasks -&amp;gt; implement
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The resulting directory grows into:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;specs/
  001-user-authentication/
    spec.yaml
    plan.yaml
    tasks.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  One-command mode
&lt;/h2&gt;

&lt;p&gt;For smaller features, you can run the full flow at once:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;autospec run &lt;span class="nt"&gt;-a&lt;/span&gt; &lt;span class="s2"&gt;"Add a caching layer for API responses"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;-a&lt;/code&gt; means all core stages:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-spti
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That expands to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;specify -&amp;gt; plan -&amp;gt; tasks -&amp;gt; implement
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Useful commands
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Planning only: specify, plan, tasks&lt;/span&gt;
autospec prep &lt;span class="s2"&gt;"Add billing webhooks"&lt;/span&gt;

&lt;span class="c"&gt;# Full workflow shortcut&lt;/span&gt;
autospec all &lt;span class="s2"&gt;"Add team invitations"&lt;/span&gt;

&lt;span class="c"&gt;# Implementation only&lt;/span&gt;
autospec implement

&lt;span class="c"&gt;# Resume from a specific phase&lt;/span&gt;
autospec implement &lt;span class="nt"&gt;--from-phase&lt;/span&gt; 3

&lt;span class="c"&gt;# Run a single task&lt;/span&gt;
autospec implement &lt;span class="nt"&gt;--task&lt;/span&gt; T003

&lt;span class="c"&gt;# Show progress&lt;/span&gt;
autospec status
autospec st &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Pick your agent
&lt;/h2&gt;

&lt;p&gt;Autospec can run with different coding agents:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;autospec run &lt;span class="nt"&gt;-a&lt;/span&gt; &lt;span class="nt"&gt;--agent&lt;/span&gt; claude &lt;span class="s2"&gt;"Add unit tests"&lt;/span&gt;
autospec run &lt;span class="nt"&gt;-a&lt;/span&gt; &lt;span class="nt"&gt;--agent&lt;/span&gt; codex &lt;span class="s2"&gt;"Add CLI smoke tests"&lt;/span&gt;
autospec run &lt;span class="nt"&gt;-a&lt;/span&gt; &lt;span class="nt"&gt;--agent&lt;/span&gt; opencode &lt;span class="s2"&gt;"Add REST API endpoints"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also configure the agent during init:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;autospec init &lt;span class="nt"&gt;--ai&lt;/span&gt; codex
autospec init &lt;span class="nt"&gt;--ai&lt;/span&gt; claude,codex,opencode
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why it is useful
&lt;/h2&gt;

&lt;p&gt;The main benefit is not that it writes code for you. The benefit is that it slows the agent down in the right places.&lt;/p&gt;

&lt;p&gt;Instead of jumping straight from prompt to patch, autospec gives you review points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is the requirement correct?&lt;/li&gt;
&lt;li&gt;Is the plan sane?&lt;/li&gt;
&lt;li&gt;Are the tasks ordered properly?&lt;/li&gt;
&lt;li&gt;Can implementation resume cleanly if something fails?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because the artifacts are YAML-first, they are easier to inspect, validate, diff, and update than a long chat transcript.&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Docs: &lt;a href="https://ariel-frischer.github.io/autospec/" rel="noopener noreferrer"&gt;https://ariel-frischer.github.io/autospec/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/ariel-frischer/autospec" rel="noopener noreferrer"&gt;https://github.com/ariel-frischer/autospec&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>programming</category>
    </item>
    <item>
      <title>What Happens If Mythos Ships Before the Patches Do</title>
      <dc:creator>Ariel Frischer</dc:creator>
      <pubDate>Fri, 17 Apr 2026 01:37:59 +0000</pubDate>
      <link>https://dev.to/arielf/what-happens-if-mythos-ships-before-the-patches-do-3f7i</link>
      <guid>https://dev.to/arielf/what-happens-if-mythos-ships-before-the-patches-do-3f7i</guid>
      <description>&lt;p&gt;Anthropic did not ship Claude Mythos Preview to the public. They staged it through Project Glasswing, a coordinated disclosure program routing the model to critical-infrastructure operators and upstream open-source maintainers first. The public gets the model after the patches land, not before.&lt;/p&gt;

&lt;p&gt;It is worth asking what the other timeline looks like. Same model, same capabilities, but pushed to the API on launch day. What actually happens?&lt;/p&gt;

&lt;h2&gt;
  
  
  What the weapon does
&lt;/h2&gt;

&lt;p&gt;Mythos Preview is not a better fuzzer. It reasons about code. The published evaluations are the relevant data:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Thousands of previously unknown vulnerabilities across every major operating system (Linux, Windows, macOS, OpenBSD, FreeBSD) and every major browser (Chrome, Safari, Edge, Firefox).&lt;/li&gt;
&lt;li&gt;Tier-5 control-flow hijack on ten separate, fully-patched OSS-Fuzz targets. Opus 4.6, for comparison, reached tier-3 on one.&lt;/li&gt;
&lt;li&gt;Multi-bug exploit chains against the Linux kernel, the kind of work previously associated with elite human researchers.&lt;/li&gt;
&lt;li&gt;A guest-to-host memory-corruption flaw in a production hypervisor. That one matters because it breaks the boundary cloud providers sell you.&lt;/li&gt;
&lt;li&gt;A 27-year-old OpenBSD TCP SACK kernel-crash chain and a 16-year-old FFmpeg H.264 decoder flaw, both hiding in plain sight.&lt;/li&gt;
&lt;li&gt;Roughly $20,000 for one thousand agent runs against OpenBSD, surfacing dozens of findings. The marginal cost per exploit is dinner money.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Exploit capability was not explicitly trained. It emerged as a downstream consequence of code-reasoning improvements, which is the part that should concern anyone modeling where capability is headed.&lt;/p&gt;

&lt;h2&gt;
  
  
  The defender has a structural problem
&lt;/h2&gt;

&lt;p&gt;Every serious answer to "what would happen" turns on one number: the gap between how fast an attacker can weaponize and how fast a defender can patch.&lt;/p&gt;

&lt;p&gt;The attacker cycle, with Mythos in hand, is minutes per target. Spin up a hundred parallel agents and it is seconds per target in aggregate.&lt;/p&gt;

&lt;p&gt;The defender cycle is this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Browser emergency patch: three to seven days to ship, then weeks for users to actually apply it.&lt;/li&gt;
&lt;li&gt;Enterprise Windows rollout: thirty to ninety days is routine.&lt;/li&gt;
&lt;li&gt;Embedded systems, routers, IoT, industrial control: months to never.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That gap is not a detail. It is the entire game.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who gets hit
&lt;/h2&gt;

&lt;p&gt;Drive-by browser compromise is the unsexy answer that matters most. Every consumer device on the internet runs one of four browsers that have known-exploitable zero-days in the public release scenario. Malvertising networks and watering-hole campaigns do not require users to make mistakes. They require users to load a webpage.&lt;/p&gt;

&lt;p&gt;Four concentric rings of harm, from center out:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Consumers.&lt;/strong&gt; Info-stealers, banking trojans, ransomware delivered via ordinary web traffic. Tens to hundreds of millions of endpoints touched in the first month. Not a guess. The browsers in question have billions of users between them, and the exploits work before patches ship.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cloud tenants.&lt;/strong&gt; The hypervisor escape means a ten-dollar-per-hour attacker VM on the same physical host as your production workload can pivot to it. Multi-tenant isolation was the architectural assumption underneath the entire public-cloud industry.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Critical infrastructure.&lt;/strong&gt; Hospitals, utilities, municipal government, school districts. The organizations least equipped to patch in days rather than months. Every Change Healthcare, every Colonial Pipeline, but concurrent.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The long tail.&lt;/strong&gt; Home routers, consumer IoT, industrial controllers, embedded medical devices. These never fully patch. They become a permanent botnet substrate.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Timeline
&lt;/h2&gt;

&lt;p&gt;Rough, but grounded in how past mass-exploitation events actually unfolded:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hour 0 to 24.&lt;/strong&gt; Proofs of concept spread on private channels. Nation-state actors scale first because they already have the infrastructure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Day 1 to 7.&lt;/strong&gt; First malvertising waves. Browser vendors push emergency patches. Adoption is days to weeks behind.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Week 1 to 4.&lt;/strong&gt; Enterprise ransomware wave hits before patch rollouts complete. Cloud tenant breaches start surfacing in disclosures.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Month 1 to 3.&lt;/strong&gt; Hospitals, schools, small businesses without patching discipline absorb the impact. Long-tail exploitation of infrastructure that will never get patched begins.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The right comparison is not a single past event
&lt;/h2&gt;

&lt;p&gt;Every analogy people reach for undershoots. EternalBlue gave us WannaCry. Heartbleed exposed roughly seventeen percent of secure web servers. Log4Shell touched hundreds of millions of devices. Stagefright covered most of Android. Spectre covered most CPUs.&lt;/p&gt;

&lt;p&gt;The counterfactual Mythos release is not any one of those. It is all of them simultaneously, plus an agent that weaponizes each one autonomously for the price of a coffee. The direct-harm population, meaning people who lose money, have data stolen, or lose access to services they need, is plausibly north of one hundred million in the first quarter. The indirect-harm population, through degraded healthcare and finance and utilities, is effectively everyone connected to the internet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Glasswing is the actual story
&lt;/h2&gt;

&lt;p&gt;The conversation around Mythos has focused on whether Anthropic is being paternalistic by withholding it. That framing misses the point. The model is withheld because the defender patch cycle cannot keep up with the attacker weaponization cycle, and the only way to close that gap is to patch before the weapon is public.&lt;/p&gt;

&lt;p&gt;Project Glasswing is the patch window. The reason the public release is delayed is that the staged release is the one that results in fewer people getting hurt.&lt;/p&gt;

&lt;p&gt;The counterfactual question is useful mostly because it makes the existing decision legible. The decision is not "do we want this capability in the world." The capability is coming, from Anthropic or from someone else, with or without coordinated disclosure. The decision is whether the first day it exists in the open is a day defenders have had a chance to prepare for.&lt;/p&gt;

&lt;p&gt;That is the whole argument.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>cybersecurity</category>
      <category>claude</category>
      <category>mythos</category>
    </item>
    <item>
      <title>OpenClaw vs Hermes Agent: A Comprehensive Comparison</title>
      <dc:creator>Ariel Frischer</dc:creator>
      <pubDate>Thu, 09 Apr 2026 02:34:35 +0000</pubDate>
      <link>https://dev.to/arielf/openclaw-vs-hermes-agent-a-comprehensive-comparison-4597</link>
      <guid>https://dev.to/arielf/openclaw-vs-hermes-agent-a-comprehensive-comparison-4597</guid>
      <description>&lt;p&gt;Both connect LLMs to messaging platforms and let agents run code, manage memory, and automate tasks. But they come at the problem from opposite ends.&lt;/p&gt;

&lt;p&gt;OpenClaw is a TypeScript gateway. One daemon manages connections to WhatsApp, Telegram, Discord, and a dozen other platforms, routing messages to isolated agents with separate workspaces, tools, and memory. You define what each agent can do. The gateway handles the rest — five minutes to first message.&lt;/p&gt;

&lt;p&gt;Hermes Agent is Nous Research's Python agent runtime. It ships with 47 tools, agent-managed memory, and a self-improvement loop where the agent creates its own skills from experience. Where OpenClaw separates the gateway from the agent, Hermes bundles everything into a single monolithic class.&lt;/p&gt;

&lt;p&gt;The core tension: OpenClaw optimizes for operational control across multiple agents. Hermes optimizes for single-agent depth and adaptability.&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;OpenClaw&lt;/th&gt;
&lt;th&gt;Hermes Agent&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GitHub&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/openclaw/openclaw" rel="noopener noreferrer"&gt;openclaw/openclaw&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/NousResearch/hermes-agent" rel="noopener noreferrer"&gt;NousResearch/hermes-agent&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Stars&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~352K&lt;/td&gt;
&lt;td&gt;~37.5K&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Contributors&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;360+&lt;/td&gt;
&lt;td&gt;210+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Language&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;TypeScript (Node.js)&lt;/td&gt;
&lt;td&gt;Python&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;First release&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Nov 2025&lt;/td&gt;
&lt;td&gt;Jul 2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Latest version&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2026.4.8&lt;/td&gt;
&lt;td&gt;v0.8.0 (2026.4.8)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;License&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;npm downloads&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~1.6M/week&lt;/td&gt;
&lt;td&gt;N/A (shell installer)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Docs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://docs.openclaw.ai" rel="noopener noreferrer"&gt;docs.openclaw.ai&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://hermes-agent.nousresearch.com/docs" rel="noopener noreferrer"&gt;hermes-agent.nousresearch.com&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Skills marketplace&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://clawhub.ai" rel="noopener noreferrer"&gt;ClawHub&lt;/a&gt; (5,700+ skills)&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://hermes-agent.nousresearch.com/docs/skills/" rel="noopener noreferrer"&gt;Skills Hub&lt;/a&gt; (643 skills)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Architecture
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;OpenClaw&lt;/strong&gt; runs a single Gateway daemon that owns all channel connections, routes messages to agent sessions, and manages state. Agents are defined in config — each with its own workspace, model, tool policies, and memory. The Gateway doesn't care what agents do internally; you can swap implementations, run different models per agent, and serve multiple users from one process. An ACP Bridge provides IDE integration with Zed, Codex, and Claude Code.&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%2Fi0lhgescpvgsgsxy2rtn.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%2Fi0lhgescpvgsgsxy2rtn.png" alt="Openclaw Architecture" width="800" height="313"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hermes&lt;/strong&gt; puts the agent at the center. CLI, Gateway, ACP adapter, and API server all instantiate the same &lt;code&gt;AIAgent&lt;/code&gt; class — conversation loop, tool dispatch, memory management, skill creation all in one place. This centralizes logic but couples everything tightly.&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%2Fbjrdnso9fk5jhr6zxq0k.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%2Fbjrdnso9fk5jhr6zxq0k.png" alt="Hermes Architecture" width="800" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;OpenClaw separates concerns. Hermes consolidates them.&lt;/p&gt;

&lt;p&gt;In practice: separated layers can be swapped, scaled, and debugged independently. Consolidated systems are simpler to start with, but changes ripple across the whole stack.&lt;/p&gt;

&lt;h2&gt;
  
  
  Messaging platforms
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;OpenClaw&lt;/strong&gt;: WhatsApp, Telegram, Discord, Slack, Signal, iMessage, Matrix, MS Teams, Google Chat, IRC, Nostr, Twitch, WebChat, Zalo — 14 platforms via plugins.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hermes&lt;/strong&gt;: Telegram, Discord, Slack, WhatsApp, Signal, Matrix, Mattermost, Email, SMS, DingTalk, Feishu, WeCom, Home Assistant, Webhooks — 14 platforms.&lt;/p&gt;

&lt;p&gt;OpenClaw has iMessage, Google Chat, and Nostr. Hermes adds Home Assistant, Email, SMS, and enterprise platforms (DingTalk, Feishu, WeCom).&lt;/p&gt;

&lt;h2&gt;
  
  
  Model providers
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;OpenClaw&lt;/strong&gt; uses a config-driven approach with fallback chains per agent. Any OpenAI-compatible API works, plus explicit handling for Anthropic and OpenRouter. Switching models requires editing config in multiple places — a known friction point.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hermes&lt;/strong&gt; has 18+ built-in providers including Google AI Studio, Nous Portal, GLM, Kimi, and MiniMax. Switch models mid-session with &lt;code&gt;hermes model&lt;/code&gt;. Three internal API modes handle format differences transparently.&lt;/p&gt;

&lt;h2&gt;
  
  
  Skills
&lt;/h2&gt;

&lt;p&gt;Both use the &lt;a href="https://agentskills.io" rel="noopener noreferrer"&gt;agentskills.io&lt;/a&gt; standard — SKILL.md files with YAML frontmatter, portable between frameworks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OpenClaw&lt;/strong&gt; loads skills from six sources with per-agent allowlists. Install from &lt;a href="https://clawhub.ai" rel="noopener noreferrer"&gt;ClawHub&lt;/a&gt; (5,700+ community skills). Skills gate on OS, required binaries, and environment variables.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hermes&lt;/strong&gt; adds self-improving skills. Every 15 turns, the agent considers creating a skill from what it just learned. The &lt;code&gt;skill_manage&lt;/code&gt; tool lets the agent create, update, and delete skills during use. &lt;a href="https://hermes-agent.nousresearch.com/docs/skills/" rel="noopener noreferrer"&gt;Skills Hub&lt;/a&gt; has 643 skills (77 built-in, 505 community).&lt;/p&gt;

&lt;p&gt;The self-improvement loop is Hermes' headline feature. Whether it produces useful skills depends on the model and how repetitive your workflows are.&lt;/p&gt;

&lt;h2&gt;
  
  
  Memory
&lt;/h2&gt;

&lt;p&gt;Memory is where the philosophies diverge most.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OpenClaw&lt;/strong&gt; uses flat-file memory with no hard limits — &lt;code&gt;MEMORY.md&lt;/code&gt; for curated long-term memory, daily logs, and semantic vector search. Each agent has isolated memory; cross-agent search is opt-in. You curate what stays.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hermes&lt;/strong&gt; uses bounded, agent-managed memory: 2,200 characters for &lt;code&gt;MEMORY.md&lt;/code&gt;, 1,375 for &lt;code&gt;USER.md&lt;/code&gt;. The agent decides what to remember, consolidates entries, and prunes old ones. Memory freezes at session start to preserve prompt cache. All sessions live in SQLite with FTS5 — every past conversation is searchable.&lt;/p&gt;

&lt;p&gt;Hermes also integrates with 8 external memory providers (Honcho, Mem0, Hindsight, plus vector databases). OpenClaw has none built in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The trade-off&lt;/strong&gt;: OpenClaw gives you control — you know exactly what's in memory. Hermes automates curation but may forget things you wanted kept.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tools and sandboxing
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;OpenClaw&lt;/strong&gt; ships core tools: file ops, shell, browser (Chrome DevTools), web fetch, messaging, cron, and subagent spawning. Each agent gets an explicit tool allowlist. Sandbox runtimes: Docker, SSH, OpenShell.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hermes&lt;/strong&gt; ships 47 tools across 40 toolsets — including 11 browser automation tools, image generation, TTS, Home Assistant control, and RL trajectory generation. Six terminal backends, with Modal and Daytona offering serverless environments that hibernate when idle.&lt;/p&gt;

&lt;p&gt;OpenClaw is lean by design — add what you need via skills. Hermes ships everything.&lt;/p&gt;

&lt;p&gt;For security, OpenClaw uses policy-based tool filtering with allowlists/denylists. Hermes has pattern-based dangerous command detection plus an optional LLM auto-approval system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sessions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;OpenClaw&lt;/strong&gt; sessions reset daily by default. Stored as JSON + JSONL transcripts. Four isolation modes from shared to per-account-channel-peer. Auto-cleanup after 30 days.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hermes&lt;/strong&gt; sessions persist in SQLite with lineage tracking — when context compresses, old turns get summarized and the new session chains to the old one. Profile isolation (&lt;code&gt;hermes -p profilename&lt;/code&gt;) gives completely separate configs, memory, and sessions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Multi-agent
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;OpenClaw&lt;/strong&gt; was built for this. The Gateway routes to multiple agents with specificity-weighted matching. Each agent is fully isolated. Subagents spawn with configurable cleanup and timeout tiers (5 minutes to 2 hours). Run a coding agent for one user, research agents for cron jobs, and restricted agents for public channels — all from one Gateway.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hermes&lt;/strong&gt; focuses on single-agent depth. &lt;code&gt;delegate_task&lt;/code&gt; spawns temporary subagents with separate iteration budgets. &lt;code&gt;execute_code&lt;/code&gt; lets Python scripts call tools via RPC, collapsing pipelines into zero-context-cost turns. For multiple independent agents, use profiles — each a separate installation.&lt;/p&gt;

&lt;p&gt;One Gateway serving different agents to different users? OpenClaw. One capable agent that delegates subtasks? Hermes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Automation
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;OpenClaw&lt;/strong&gt; runs cron through the Gateway — one-shot, fixed interval, or cron expression — with four execution styles. Jobs run as isolated subagent sessions with model overrides and deliver to any channel.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hermes&lt;/strong&gt; has cron with natural language scheduling ("every Monday at 9am"). Jobs are agent tasks with skill attachments. Inactivity-based timeouts track actual tool activity, not wall clock time.&lt;/p&gt;

&lt;p&gt;Both support heartbeats for periodic self-checks.&lt;/p&gt;

&lt;h2&gt;
  
  
  CLI and developer experience
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;OpenClaw&lt;/strong&gt; has three interfaces. &lt;code&gt;openclaw tui&lt;/code&gt; connects to the Gateway from the terminal — session selection, history replay, deliver mode (forwards replies to messaging channels), and remote gateway support. &lt;code&gt;openclaw dashboard&lt;/code&gt; opens a browser Control UI for chat, sessions, and channel config. The CLI handles onboarding, diagnostics (&lt;code&gt;openclaw doctor&lt;/code&gt;), channel login, and skill management.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hermes&lt;/strong&gt; centers on a terminal TUI — &lt;code&gt;hermes&lt;/code&gt; drops you in. Multiline editing, streaming output, mid-conversation interruption (redirect the agent while it's working), conversation history, and slash commands. The CLI covers setup, model switching, session search, and profile management.&lt;/p&gt;

&lt;p&gt;Both have TUIs and CLIs. OpenClaw adds a browser UI. Hermes' TUI is richer with mid-conversation interruption and inline streaming.&lt;/p&gt;

&lt;h2&gt;
  
  
  Self-improvement
&lt;/h2&gt;

&lt;p&gt;OpenClaw skills are static unless you edit them. Predictable by design.&lt;/p&gt;

&lt;p&gt;Hermes learns from experience — creating and refining skills via &lt;code&gt;skill_manage&lt;/code&gt;. The RL integration (trajectory generation, Atropos) records agent runs as training data.&lt;/p&gt;

&lt;p&gt;This is the fundamental split. OpenClaw: you control the agent's capabilities. Hermes: the agent grows its own.&lt;/p&gt;

&lt;p&gt;Pick OpenClaw for multi-agent routing, operational control, or gateway/agent separation. Pick Hermes for self-improving skills, serverless execution, or Python/ML extensibility.&lt;/p&gt;




&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/openclaw/openclaw" rel="noopener noreferrer"&gt;OpenClaw GitHub&lt;/a&gt; — source, issues, releases&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.openclaw.ai" rel="noopener noreferrer"&gt;OpenClaw Documentation&lt;/a&gt; — setup guides, channel config, API reference&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://clawhub.ai" rel="noopener noreferrer"&gt;ClawHub&lt;/a&gt; — OpenClaw skills marketplace (5,700+ community skills)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.npmjs.com/package/openclaw" rel="noopener noreferrer"&gt;OpenClaw npm&lt;/a&gt; — install stats, version history&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/NousResearch/hermes-agent" rel="noopener noreferrer"&gt;Hermes Agent GitHub&lt;/a&gt; — source, issues, releases&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://hermes-agent.nousresearch.com/docs" rel="noopener noreferrer"&gt;Hermes Agent Documentation&lt;/a&gt; — user guide, developer guide, skills reference&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://hermes-agent.nousresearch.com/docs/skills/" rel="noopener noreferrer"&gt;Hermes Skills Hub&lt;/a&gt; — 643 skills (built-in, optional, community)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://agentskills.io" rel="noopener noreferrer"&gt;agentskills.io&lt;/a&gt; — open standard for portable agent skills&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/NousResearch/hermes-agent/releases/tag/v0.8.0" rel="noopener noreferrer"&gt;Hermes v0.8.0 Release Notes&lt;/a&gt; — MCP OAuth 2.1, Google AI Studio provider&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>openclaw</category>
      <category>agents</category>
    </item>
    <item>
      <title>I Built an AI Rental Management Platform for My Brother. Here's What Actually Happened.</title>
      <dc:creator>Ariel Frischer</dc:creator>
      <pubDate>Wed, 08 Apr 2026 22:21:04 +0000</pubDate>
      <link>https://dev.to/arielf/i-built-an-ai-rental-management-platform-for-my-brother-heres-what-actually-happened-4385</link>
      <guid>https://dev.to/arielf/i-built-an-ai-rental-management-platform-for-my-brother-heres-what-actually-happened-4385</guid>
      <description>&lt;p&gt;My brother manages rental properties on the side while working full-time as a real estate agent. I watched him spend 8-10 hours per week repeating the same ten screening questions over the phone -- income, pets, move-in date, credit, rental history -- between showings, after dinner, every single day. Nothing recorded anywhere.&lt;/p&gt;

&lt;p&gt;71 percent of landlords rank tenant screening among their top three burdens. 45 percent of renters expect a reply within hours. Miss that window and the prospect moves on.&lt;/p&gt;

&lt;p&gt;I didn't set out to build a product. I set out to solve my brother's problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three Weeks of Real Data
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Prospect sessions&lt;/td&gt;
&lt;td&gt;126&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Contacts captured&lt;/td&gt;
&lt;td&gt;71&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Completed pre-screenings&lt;/td&gt;
&lt;td&gt;55&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Response time&lt;/td&gt;
&lt;td&gt;Hours → under 30 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Time saved&lt;/td&gt;
&lt;td&gt;8-10 hrs/week&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;126 conversations my brother didn't have to initiate, manage, or follow up on. 71 contacts captured automatically as a byproduct of the conversation. 55 pre-qualified prospects with structured, comparable data.&lt;/p&gt;

&lt;p&gt;The pre-screening flow is still in beta and has been improved since these early numbers.&lt;/p&gt;

&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;

&lt;p&gt;A prospect reaches out -- text, email, wherever. You send them your pre-screening link, or they find you on your public agent page where all your listings live in one place. Instead of waiting for a callback, they're talking to voice AI in seconds -- in their preferred language.&lt;/p&gt;

&lt;p&gt;The AI walks them through screening conversationally -- not a robotic form. You get a clean email summary with every answer organized, contact info captured, and the full transcript saved to your dashboard. All while you were showing another property, driving, or sleeping.&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%2F46qrcsjmc3tyd1fzskc0.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%2F46qrcsjmc3tyd1fzskc0.png" alt="Pre-screening on mobile" width="800" height="1731"&gt;&lt;/a&gt;&lt;br&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%2Ffqn5mg74sl1e1mh058io.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%2Ffqn5mg74sl1e1mh058io.png" alt="Voice AI pre-screening" width="800" height="1731"&gt;&lt;/a&gt;&lt;br&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%2Fc1c0h2xlsz9jeg2ovjcb.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%2Fc1c0h2xlsz9jeg2ovjcb.png" alt="Public agent profile with listings" width="800" height="500"&gt;&lt;/a&gt;&lt;br&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%2Fzil9psn3chc1xdm74vtf.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%2Fzil9psn3chc1xdm74vtf.png" alt="AI management chat" width="800" height="500"&gt;&lt;/a&gt;&lt;br&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%2Fcjqsfhf17rxnyq934iy5.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%2Fcjqsfhf17rxnyq934iy5.png" alt="Dashboard — properties" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What Rentalot Does
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Voice AI pre-screening&lt;/strong&gt; -- handles calls in four languages, transcribes everything in real time&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI management chat&lt;/strong&gt; -- draft emails, look up contacts, check showings, manage properties from a web chat interface&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CLI + MCP tools&lt;/strong&gt; -- plug Claude, Gemini, Codex, or any AI agent directly into your rental data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automated email follow-ups&lt;/strong&gt; -- references the actual conversation, not generic templates&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Calendar + Cal.com integration&lt;/strong&gt; -- AI schedules showings directly from your availability&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Public agent page&lt;/strong&gt; -- one link shows all your listings, prospects self-select and submit&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Organized records&lt;/strong&gt; -- every contact, every answer, every interaction saved and searchable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Already have listings on Zillow or Apartments.com? Export your properties and bulk-import them into Rentalot using an AI agent with our open-source rentalot skill -- no manual data entry.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Point
&lt;/h2&gt;

&lt;p&gt;Leasing is repetitive. Same questions, same follow-ups, same scheduling back-and-forth -- day after day. Most leasing agents didn't get into real estate to spend their evenings on phone tag and data entry.&lt;/p&gt;

&lt;p&gt;AI doesn't replace the human side of leasing. It removes the grind so you can get back to the parts you actually enjoy -- working with people, closing deals, building something.&lt;/p&gt;

&lt;h2&gt;
  
  
  Looking for Early Users
&lt;/h2&gt;

&lt;p&gt;Rentalot is in alpha -- free trial, no credit card. I'm looking for my first 20 customers to iterate with. If you give me real feedback that shapes the product, I'll personally help with any technical issues and build the features you need.&lt;/p&gt;

&lt;p&gt;If you manage rentals on the side and your evenings look like my brother's used to -- buried in screening calls, losing track of prospects, watching leads go cold overnight -- that's exactly the problem this was built to solve.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://rentalot.ai" rel="noopener noreferrer"&gt;rentalot.ai&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Stop Vibe Coding. Start Spec-Driven Development.</title>
      <dc:creator>Ariel Frischer</dc:creator>
      <pubDate>Tue, 31 Mar 2026 23:02:46 +0000</pubDate>
      <link>https://dev.to/arielf/youre-a-slop-coder-autospec-is-for-professionals-only-4g42</link>
      <guid>https://dev.to/arielf/youre-a-slop-coder-autospec-is-for-professionals-only-4g42</guid>
      <description>&lt;p&gt;If you type "add user auth" into Claude and ship whatever comes back, you're not engineering. You're contributing to AI slop - stop it.&lt;/p&gt;

&lt;p&gt;Andrej Karpathy coined "vibe coding" in early 2025 — type a prompt, accept the output, move on. It felt like a superpower. Then the data came in. Experienced developers using AI tools were 19% slower on real codebases&lt;sup&gt;1&lt;/sup&gt;, and AI co-authored PRs had 1.7x more major issues&lt;sup&gt;2&lt;/sup&gt;. Faster keystrokes, worse software.&lt;/p&gt;

&lt;p&gt;The models keep improving — but better generation doesn't fix misaligned intent or the cascade of design decisions that follow. That's what &lt;a href="https://github.com/ariel-frischer/autospec" rel="noopener noreferrer"&gt;autospec&lt;/a&gt; solves.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vibe coding fails at alignment, not generation
&lt;/h2&gt;

&lt;p&gt;Modern models can reason about architecture, decompose problems, and generate plausible code. None of that matters if they're solving the wrong problem.&lt;/p&gt;

&lt;p&gt;When you type "add user auth," the model guesses: OAuth or email/password? Sessions or JWTs? Middleware placement? Error response format? You discover which guesses were wrong &lt;em&gt;after&lt;/em&gt; the code exists. That's the misalignment problem. No amount of model intelligence fixes it because the model never had your intent in the first place.&lt;/p&gt;

&lt;p&gt;Spec-driven development solves this. The workflow is &lt;code&gt;spec → plan → tasks → implement&lt;/code&gt;. Instead of jumping straight to code, the first step generates a &lt;code&gt;spec.yaml&lt;/code&gt; — a structured artifact with requirements, acceptance criteria, edge cases, and constraints, all shaped by your project's &lt;code&gt;constitution.yaml&lt;/code&gt;. From there you iterate on the spec: edit it by hand, or use &lt;code&gt;autospec clarify&lt;/code&gt; to open an interactive session where you and the AI refine scope, resolve ambiguities, and tighten requirements until the spec actually captures your intent. Only then does planning and implementation begin, carrying that alignment forward.&lt;/p&gt;

&lt;h2&gt;
  
  
  How autospec enforces this
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/ariel-frischer/autospec" rel="noopener noreferrer"&gt;autospec&lt;/a&gt; is a streamlined open-source spec-driven workflow that orchestrates Claude Code and/or OpenCode agents.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Constitution first.&lt;/strong&gt; A constitution defines your project's non-negotiable rules — quality standards, architectural constraints, security requirements — with explicit priority levels and enforcement mechanisms. autospec infers initial principles from your codebase (Makefile targets, CI config, README) and you refine from there. Every command runs under these constraints.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# .autospec/constitution.yaml (trimmed)&lt;/span&gt;
&lt;span class="na"&gt;preamble&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
  &lt;span class="s"&gt;autospec is a Go CLI that orchestrates AI-driven specification workflows.&lt;/span&gt;
  &lt;span class="s"&gt;These principles ensure code quality, maintainability, and reliable execution.&lt;/span&gt;

&lt;span class="na"&gt;principles&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Test-First&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Development"&lt;/span&gt;
    &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PRIN-001"&lt;/span&gt;
    &lt;span class="na"&gt;priority&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;NON-NEGOTIABLE"&lt;/span&gt;
    &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Tests&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;written&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;before&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;implementation.&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Tests&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;define&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;behavior."&lt;/span&gt;
    &lt;span class="na"&gt;enforcement&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;mechanism&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CI&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;pipeline"&lt;/span&gt;
        &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Build&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;fails&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;if&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;tests&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;fail"&lt;/span&gt;
    &lt;span class="na"&gt;exceptions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Prototype/spike&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;code&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;explicitly&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;marked&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;as&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;such"&lt;/span&gt;

  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Idiomatic&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Go"&lt;/span&gt;
    &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PRIN-002"&lt;/span&gt;
    &lt;span class="na"&gt;priority&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MUST"&lt;/span&gt;
    &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Follow&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Go&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;community&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;conventions."&lt;/span&gt;
    &lt;span class="na"&gt;enforcement&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;mechanism&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Code&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;review&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;and&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;linting"&lt;/span&gt;
        &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;golangci-lint&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;+&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;reviewer&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;verification"&lt;/span&gt;

  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Performance&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Standards"&lt;/span&gt;
    &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PRIN-003"&lt;/span&gt;
    &lt;span class="na"&gt;priority&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MUST"&lt;/span&gt;
    &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Validation&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;lt;10ms,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;config&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;lt;100ms,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;ops&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;lt;1s."&lt;/span&gt;

  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Actionable&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Errors"&lt;/span&gt;
    &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PRIN-007"&lt;/span&gt;
    &lt;span class="na"&gt;priority&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MUST"&lt;/span&gt;
    &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Errors&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;include&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;context,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;expected&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;vs&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;actual,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;and&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;fix&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;hints."&lt;/span&gt;

&lt;span class="na"&gt;sections&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Go&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Idioms"&lt;/span&gt;
    &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
      &lt;span class="s"&gt;Error handling: Wrap with context using fmt.Errorf("doing X: %w", err).&lt;/span&gt;
      &lt;span class="s"&gt;Table tests: Use map[string]struct{} with t.Run and t.Parallel().&lt;/span&gt;
      &lt;span class="s"&gt;Functions: Keep under 40 lines, extract helpers as needed.&lt;/span&gt;
      &lt;span class="s"&gt;Interfaces: Accept interfaces, return concrete types.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every principle has an ID, a priority level (NON-NEGOTIABLE, MUST, SHOULD, MAY), enforcement mechanisms, and documented exceptions. The constitution also includes project-specific sections — coding idioms, naming conventions, quality gates — that get injected into every autospec session so the AI operates under the same constraints your team does.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Structured stages.&lt;/strong&gt; The core workflow runs &lt;code&gt;spec → plan → tasks → implement&lt;/code&gt;. From a plain-English feature description, autospec generates a &lt;code&gt;spec.yaml&lt;/code&gt;, then a &lt;code&gt;plan.yaml&lt;/code&gt;, then &lt;code&gt;tasks.yaml&lt;/code&gt;. Code only gets written after all three exist and are valid.&lt;/p&gt;

&lt;p&gt;Here's what a real &lt;code&gt;spec.yaml&lt;/code&gt; looks like for "add user authentication":&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# specs/001-user-auth/spec.yaml (trimmed)&lt;/span&gt;
&lt;span class="na"&gt;feature&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;branch&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;001-user-auth"&lt;/span&gt;
  &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Draft"&lt;/span&gt;
  &lt;span class="na"&gt;input&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Add&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;authentication&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;to&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;the&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;application"&lt;/span&gt;

&lt;span class="na"&gt;user_stories&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;US-001"&lt;/span&gt;
    &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;User&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;can&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;log&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;in&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;with&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;email&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;and&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;password"&lt;/span&gt;
    &lt;span class="na"&gt;priority&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;P1"&lt;/span&gt;
    &lt;span class="na"&gt;as_a&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;registered&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;user"&lt;/span&gt;
    &lt;span class="na"&gt;i_want&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;to&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;log&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;in&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;with&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;my&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;email&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;and&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;password"&lt;/span&gt;
    &lt;span class="na"&gt;so_that&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;I&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;can&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;access&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;my&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;account"&lt;/span&gt;
    &lt;span class="na"&gt;acceptance_scenarios&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;given&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;I&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;have&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;registered&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;account"&lt;/span&gt;
        &lt;span class="na"&gt;when&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;I&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;submit&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;valid&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;credentials"&lt;/span&gt;
        &lt;span class="na"&gt;then&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;I&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;am&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;logged&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;in&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;and&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;redirected&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;to&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;dashboard"&lt;/span&gt;

&lt;span class="na"&gt;requirements&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;functional&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;FR-001"&lt;/span&gt;
      &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MUST&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;support&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;email/password&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;authentication"&lt;/span&gt;
      &lt;span class="na"&gt;testable&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
      &lt;span class="na"&gt;acceptance_criteria&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Users&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;can&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;log&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;in&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;with&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;valid&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;email&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;and&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;password"&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;FR-002"&lt;/span&gt;
      &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MUST&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;hash&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;passwords&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;before&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;storage"&lt;/span&gt;
      &lt;span class="na"&gt;testable&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
      &lt;span class="na"&gt;acceptance_criteria&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Passwords&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;are&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;stored&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;using&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;bcrypt&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;with&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;cost&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;factor&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;12"&lt;/span&gt;
  &lt;span class="na"&gt;non_functional&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;NFR-002"&lt;/span&gt;
      &lt;span class="na"&gt;category&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;security"&lt;/span&gt;
      &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Must&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;rate&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;limit&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;login&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;attempts"&lt;/span&gt;
      &lt;span class="na"&gt;measurable_target&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Max&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;5&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;attempts&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;per&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;minute&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;per&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;IP"&lt;/span&gt;

&lt;span class="na"&gt;edge_cases&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;scenario&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;User&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;enters&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;email&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;with&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;different&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;case"&lt;/span&gt;
    &lt;span class="na"&gt;expected_behavior&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Email&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;comparison&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;is&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;case-insensitive"&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;scenario&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Session&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;token&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;expires&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;during&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;active&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;use"&lt;/span&gt;
    &lt;span class="na"&gt;expected_behavior&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;User&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;is&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;prompted&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;to&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;log&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;in&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;again"&lt;/span&gt;

&lt;span class="na"&gt;out_of_scope&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;OAuth/social&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;login&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;integration"&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Two-factor&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;authentication"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every assumption, constraint, edge case, and requirement is explicit YAML — not markdown you eyeball, but structured data you can validate programmatically. Schema validation catches missing fields and invalid references before the next stage runs. When validation fails, autospec feeds specific errors back to the AI and it self-corrects. No manual prompt editing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Per-phase isolation.&lt;/strong&gt; Tasks in &lt;code&gt;tasks.yaml&lt;/code&gt; are grouped into phases — logical units like "setup," "core logic," "tests." Each phase runs in a fresh context window, so the agent isn't dragging 10,000 tokens of prior work into every call. We estimate a 38-task feature drops from ~$257 to ~$42 (83% cost reduction) with this approach, and it prevents context degradation — phase 4 executes with the same clarity as phase 1. As each task completes, autospec updates its status directly in &lt;code&gt;tasks.yaml&lt;/code&gt; — progress is always visible and resumable. If a session gets interrupted, run &lt;code&gt;autospec implement&lt;/code&gt; and it picks up exactly where you left off.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Non-interactive by default.&lt;/strong&gt; No back-and-forth chatting, no manual approvals mid-session. The AI gets instructions and builds. You review artifacts between stages, not during. Interactive mode (&lt;code&gt;autospec clarify&lt;/code&gt;) exists for when you actually want a conversation to refine the spec.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why autospec over GitHub Spec Kit?
&lt;/h2&gt;

&lt;p&gt;autospec was inspired by &lt;a href="https://github.com/github/spec-kit" rel="noopener noreferrer"&gt;GitHub Spec Kit&lt;/a&gt; and stays true to its core workflow: &lt;code&gt;spec → plan → tasks → implement&lt;/code&gt;. That flow is the right idea. But Spec Kit's execution has real gaps that autospec closes:&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;GitHub Spec Kit&lt;/th&gt;
&lt;th&gt;autospec&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Output format&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Markdown&lt;/td&gt;
&lt;td&gt;YAML — machine-readable, schema-validated&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Manual review&lt;/td&gt;
&lt;td&gt;Automatic with retry logic on failure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Context efficiency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Full prompt each time&lt;/td&gt;
&lt;td&gt;Per-phase/task session isolation (80%+ cost savings)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Phase orchestration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Manual&lt;/td&gt;
&lt;td&gt;Automated with dependency ordering&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Status tracking&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Manual&lt;/td&gt;
&lt;td&gt;Auto-updates &lt;code&gt;spec.yaml&lt;/code&gt; and &lt;code&gt;tasks.yaml&lt;/code&gt; as work progresses&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Implementation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Shell scripts&lt;/td&gt;
&lt;td&gt;Go binary — type-safe, single install, cross-platform&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The biggest difference is validation. Because every artifact is structured YAML, autospec can programmatically validate each stage before the next one runs. Schema validation catches missing fields, invalid references, and structural errors — things you can't check against markdown. When validation fails, autospec feeds the specific errors back into the next AI call and the model self-corrects. No manual prompt editing.&lt;/p&gt;

&lt;p&gt;The other difference is streamlined developer productivity. autospec runs the agent in non-interactive mode by default — no waiting on chat responses, no accepting edits one by one, no answering a stream of clarifying questions. It just generates what's needed at every stage. You review artifacts between stages, not during. When you do want a conversation — to refine scope or resolve ambiguities — every stage is also available as a Claude Code slash command (&lt;code&gt;/autospec.clarify&lt;/code&gt;, &lt;code&gt;/autospec.specify&lt;/code&gt;, etc.) for interactive use.&lt;/p&gt;

&lt;p&gt;Vibe coding has no feedback loop except you re-reading output and rewording prompts. Spec-driven development has automated quality gates at every stage.&lt;/p&gt;

&lt;h2&gt;
  
  
  When specs are worth it
&lt;/h2&gt;

&lt;p&gt;Not everything needs a spec. Here's the quick decision test:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Skip autospec&lt;/strong&gt; — the task has zero design decisions and you can finish in under 30 minutes. Fix a typo, bump a dependency, add a nil check, rename a variable. Just do it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use autospec&lt;/strong&gt; — the task involves 3+ design decisions and touches 3+ files. Adding rate limiting to an API? You're choosing between token bucket and sliding window, deciding on storage, bypass rules, error formats. A webhook delivery system? Signature scheme, retry policy, timeout handling. These are the tasks where vibe coding silently makes the wrong choice on decision #3 and you find out two hours later. Autospec surfaces all of them in the spec before any code exists.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Split first&lt;/strong&gt; — the task would take more than two days or bundles 3+ independent features. "Add OAuth with Google, GitHub, SAML, and LDAP" is four specs, not one. Split by feature slice, layer, or user journey, then run autospec on each part.&lt;/p&gt;

&lt;p&gt;AWS warned in 2026 that review capacity — not developer output — is now the bottleneck in delivery. With 46% of new code AI-generated, pipelines weren't designed for this volume. Specs give reviewers something to review &lt;em&gt;besides&lt;/em&gt; a thousand-line diff. They read the spec, verify the intent, then check that the code matches. That's a fundamentally different (and faster) review loop.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get started
&lt;/h2&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/ariel-frischer/autospec" rel="noopener noreferrer"&gt;github.com/ariel-frischer/autospec&lt;/a&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://raw.githubusercontent.com/ariel-frischer/autospec/main/install.sh | sh
&lt;span class="nb"&gt;cd &lt;/span&gt;your-project/                       &lt;span class="c"&gt;# any git repo&lt;/span&gt;
autospec init                          &lt;span class="c"&gt;# project setup: agent, permissions, constitution&lt;/span&gt;
autospec run &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="s2"&gt;"your feature here"&lt;/span&gt;   &lt;span class="c"&gt;# generate spec → review it&lt;/span&gt;
autospec clarify                       &lt;span class="c"&gt;# optional: interactive refinement with Claude&lt;/span&gt;
autospec run &lt;span class="nt"&gt;-pti&lt;/span&gt;                      &lt;span class="c"&gt;# plan → tasks → implement&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first run takes a few minutes longer than vibe coding. Every run after saves you hours of debugging and rework.&lt;/p&gt;

&lt;p&gt;Stop slop coding. Start using autospec.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;&lt;a href="https://github.com/ariel-frischer/autospec" rel="noopener noreferrer"&gt;autospec on GitHub&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a id="metr"&gt;&lt;/a&gt;&lt;sup&gt;1&lt;/sup&gt; &lt;a href="https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/" rel="noopener noreferrer"&gt;METR, "Early 2025 AI &amp;amp; Experienced Open-Source Dev Study"&lt;/a&gt;&lt;br&gt;
&lt;a id="coderabbit"&gt;&lt;/a&gt;&lt;sup&gt;2&lt;/sup&gt; &lt;a href="https://www.coderabbit.ai/blog/state-of-ai-vs-human-code-generation-report" rel="noopener noreferrer"&gt;CodeRabbit, "State of AI vs Human Code Generation Report"&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Making Your SaaS AI-Agent Ready: A Practical Guide</title>
      <dc:creator>Ariel Frischer</dc:creator>
      <pubDate>Thu, 12 Feb 2026 04:50:08 +0000</pubDate>
      <link>https://dev.to/arielf/making-your-saas-ai-agent-ready-a-practical-guide-2hai</link>
      <guid>https://dev.to/arielf/making-your-saas-ai-agent-ready-a-practical-guide-2hai</guid>
      <description>&lt;p&gt;AI agents are becoming the primary interface between developers and APIs. Tools like Claude Code, OpenClaw, and MCP clients don't read your marketing site—they consume your API spec, documentation structure, and machine-readable metadata.&lt;/p&gt;

&lt;p&gt;This guide covers the layered approach to making any SaaS API agent-consumable, from discovery to execution.&lt;/p&gt;




&lt;h2&gt;
  
  
  Overview: All 7 Phases
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Phase&lt;/th&gt;
&lt;th&gt;Focus&lt;/th&gt;
&lt;th&gt;Impact&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;llms.txt&lt;/code&gt; — Discovery&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;OpenAPI spec enhancements&lt;/td&gt;
&lt;td&gt;Very High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;OpenClaw skill&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;MCP server (local)&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;TypeScript SDK&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;Remote MCP server&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;JSON-LD &amp;amp; polish&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Start with Phases 1–2 for the highest ROI. Add MCP server when you're ready for Claude Code and Cursor integration.&lt;/p&gt;




&lt;h2&gt;
  
  
  The AI-Agent Stack
&lt;/h2&gt;

&lt;p&gt;The ecosystem is converging on a standard layered architecture:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;llms.txt              → Discovery ("what does this product do?")
OpenAPI spec          → Foundation (schema, types, descriptions)
  ├── MCP server      → Agent tool execution
  ├── TypeScript SDK  → Typed client for developers
  ├── OpenClaw skill  → Natural language API guide
  └── agents.json     → Multi-step flow orchestration
JSON-LD               → AI search visibility
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The OpenAPI spec is the keystone.&lt;/strong&gt; Everything else either generates from it or supplements it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Phase 1: Discovery Layer
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Create &lt;code&gt;llms.txt&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Serve &lt;code&gt;/llms.txt&lt;/code&gt; from your public directory. This is a curated index of what your SaaS does, what the API offers, and links to key documentation.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# YourSaaS&lt;/span&gt;
&lt;span class="gt"&gt;
&amp;gt; One-line description of what your product does.&lt;/span&gt;

Longer description covering key value props and use cases.

&lt;span class="gu"&gt;## API Reference&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Authentication&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;https://yoursaas.com/docs/auth&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;: API keys, OAuth, rate limits
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Resource A&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;https://yoursaas.com/docs/resource-a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;: What it does
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Resource B&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;https://yoursaas.com/docs/resource-b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;: What it does

&lt;span class="gu"&gt;## Guides&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Getting Started&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;https://yoursaas.com/docs/quickstart&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;OpenAPI Spec&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;https://yoursaas.com/api/openapi.json&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; LLMs trained after late 2024 increasingly check for &lt;code&gt;llms.txt&lt;/code&gt; when encountering new APIs. It's become the &lt;code&gt;robots.txt&lt;/code&gt; for AI agents.&lt;/p&gt;

&lt;h3&gt;
  
  
  Create &lt;code&gt;llms-full.txt&lt;/code&gt; (Optional)
&lt;/h3&gt;

&lt;p&gt;An expanded version with full API reference content inlined—every endpoint, request/response schema, and example. Generate this from your OpenAPI spec at build time.&lt;/p&gt;




&lt;h2&gt;
  
  
  Phase 2: Enhance Your OpenAPI Spec
&lt;/h2&gt;

&lt;p&gt;Your OpenAPI spec is the foundation. Optimize it for LLM consumption:&lt;/p&gt;

&lt;h3&gt;
  
  
  Agent-Oriented Descriptions
&lt;/h3&gt;

&lt;p&gt;Write descriptions that tell an agent &lt;em&gt;when&lt;/em&gt; to use an endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Bad&lt;/span&gt;
&lt;span class="na"&gt;summary&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Get user&lt;/span&gt;

&lt;span class="c1"&gt;# Good&lt;/span&gt;
&lt;span class="na"&gt;summary&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Use to retrieve detailed information about a specific user by their ID.&lt;/span&gt;
  &lt;span class="s"&gt;Returns profile data, permissions, and account status.&lt;/span&gt;
  &lt;span class="s"&gt;Use when you need to verify user details before performing actions.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Required Enhancements
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Element&lt;/th&gt;
&lt;th&gt;Why It Matters&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;operationId&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Clean, camelCase names become MCP tool names (&lt;code&gt;createUser&lt;/code&gt;, not &lt;code&gt;postApiV1Users&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Realistic examples&lt;/td&gt;
&lt;td&gt;Agents generate better requests when they see real values&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Documented enums&lt;/td&gt;
&lt;td&gt;Prevents invalid values in generated requests&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Side effects&lt;/td&gt;
&lt;td&gt;Tell agents what changes ("Sends welcome email", "Charges credit card")&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rate limits&lt;/td&gt;
&lt;td&gt;Per-endpoint documentation prevents hammering&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Read-only vs write&lt;/td&gt;
&lt;td&gt;Helps agents understand safe exploration vs mutations&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Document Rate Limits in Spec
&lt;/h3&gt;

&lt;p&gt;Add response headers and info section documentation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;X-RateLimit-Limit&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Request limit per minute for your tier&lt;/span&gt;
    &lt;span class="na"&gt;schema&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;integer&lt;/span&gt;
      &lt;span class="na"&gt;example&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;
  &lt;span class="na"&gt;X-RateLimit-Remaining&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Requests remaining in current window&lt;/span&gt;
    &lt;span class="na"&gt;schema&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;integer&lt;/span&gt;
      &lt;span class="na"&gt;example&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;87&lt;/span&gt;
  &lt;span class="na"&gt;Retry-After&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Seconds to wait before retry (on 429)&lt;/span&gt;
    &lt;span class="na"&gt;schema&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;integer&lt;/span&gt;
      &lt;span class="na"&gt;example&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;45&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Phase 3: OpenClaw Skill
&lt;/h2&gt;

&lt;p&gt;OpenClaw agents can use your API directly, but a skill makes it natural-language accessible. Create a &lt;code&gt;SKILL.md&lt;/code&gt; that teaches agents how to use your API.&lt;/p&gt;

&lt;p&gt;Structure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Authentication setup&lt;/li&gt;
&lt;li&gt;Rate limits per tier&lt;/li&gt;
&lt;li&gt;All endpoints with request/response examples&lt;/li&gt;
&lt;li&gt;Common workflows ("list active users", "create and send invoice")&lt;/li&gt;
&lt;li&gt;Error handling guidance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Distribution:&lt;/strong&gt; Publish to ClawdHub for discoverability.&lt;/p&gt;




&lt;h2&gt;
  
  
  Phase 4: MCP Server
&lt;/h2&gt;

&lt;p&gt;The Model Context Protocol (MCP) is becoming the standard for agent-tool integration. Claude Code, Claude Desktop, Cursor, and OpenClaw all support MCP servers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Build a Local MCP Server
&lt;/h3&gt;

&lt;p&gt;Start with a stdio server published as an npm package:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @your saas/mcp-server &lt;span class="nt"&gt;--api-key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ys_xxxxx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Tool inventory:&lt;/strong&gt; Map your API endpoints 1:1 to MCP tools:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Resource&lt;/th&gt;
&lt;th&gt;Example Tools&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Users&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;list_users&lt;/code&gt;, &lt;code&gt;get_user&lt;/code&gt;, &lt;code&gt;create_user&lt;/code&gt;, &lt;code&gt;update_user&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Projects&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;list_projects&lt;/code&gt;, &lt;code&gt;create_project&lt;/code&gt;, &lt;code&gt;delete_project&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Webhooks&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;list_webhooks&lt;/code&gt;, &lt;code&gt;create_webhook&lt;/code&gt;, &lt;code&gt;test_webhook&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Resources:&lt;/strong&gt; Expose documentation as readable resources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;docs://api-reference&lt;/code&gt; — Full API docs&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;docs://rate-limits&lt;/code&gt; — Tier limits and usage&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;schema://enums&lt;/code&gt; — Valid enum values&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Document MCP Setup
&lt;/h3&gt;

&lt;p&gt;Add an example &lt;code&gt;.mcp.json&lt;/code&gt; to your docs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"yoursaas"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@your saas/mcp-server"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"YOURSAAS_API_KEY"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"${YOURSAAS_API_KEY}"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Register&lt;/strong&gt; your MCP server in registries:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Official MCP Registry&lt;/li&gt;
&lt;li&gt;mcpservers.org&lt;/li&gt;
&lt;li&gt;Smithery&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Phase 5: TypeScript SDK
&lt;/h2&gt;

&lt;p&gt;Generate TypeScript types from your OpenAPI spec using &lt;code&gt;openapi-typescript&lt;/code&gt;. Wrap with &lt;code&gt;openapi-fetch&lt;/code&gt; for a typed client:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;createClient&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;openapi-fetch&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;paths&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@your saas/sdk&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;createClient&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;paths&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;baseUrl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://yoursaas.com/api/v1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;Authorization&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Bearer &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;GET&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/users/{id}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;params&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;abc123&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Phase 6: Remote MCP Server (Advanced)
&lt;/h2&gt;

&lt;p&gt;For zero-install experience, host a remote MCP server at &lt;code&gt;https://mcp.yoursaas.com/mcp&lt;/code&gt;. Users add a URL and authenticate via OAuth.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hosting options:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cloudflare Worker&lt;/strong&gt; — Edge deployment, handles sessions, cheap&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Next.js API route&lt;/strong&gt; — Simpler, but watch cold starts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Separate Vercel project&lt;/strong&gt; — Dedicated subdomain&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Offer both:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Remote (zero install, OAuth)&lt;/li&gt;
&lt;li&gt;Local (API key, air-gapped environments)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Phase 7: Polish &amp;amp; Future-Proofing
&lt;/h2&gt;

&lt;h3&gt;
  
  
  JSON-LD Structured Data
&lt;/h3&gt;

&lt;p&gt;Add schema.org markup for AI search visibility:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"application/ld+json"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@context&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://schema.org&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;SoftwareApplication&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;YourSaaS&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;applicationCategory&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;BusinessApplication&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;offers&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Offer&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;price&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;29.00&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;priceCurrency&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;USD&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  "Build with AI" Documentation Page
&lt;/h3&gt;

&lt;p&gt;Create a dedicated page linking to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MCP server setup&lt;/li&gt;
&lt;li&gt;OpenClaw skill&lt;/li&gt;
&lt;li&gt;TypeScript SDK&lt;/li&gt;
&lt;li&gt;OpenAPI spec&lt;/li&gt;
&lt;li&gt;llms.txt&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Follow Stripe's lead: &lt;code&gt;docs.stripe.com/building-with-llms&lt;/code&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Start with &lt;code&gt;llms.txt&lt;/code&gt; and OpenAPI&lt;/strong&gt; — highest ROI for effort&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write agent-oriented descriptions&lt;/strong&gt; — "Use to..." not just "Get..."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP server is table stakes&lt;/strong&gt; — Claude Code and Cursor users expect it&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Document everything&lt;/strong&gt; — Agents can't guess what your API does&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stay current&lt;/strong&gt; — The agent ecosystem moves fast; watch for new standards&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://llmstxt.org/" rel="noopener noreferrer"&gt;llms.txt spec&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://modelcontextprotocol.io/" rel="noopener noreferrer"&gt;MCP spec&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.stripe.com/building-with-llms" rel="noopener noreferrer"&gt;Stripe "Build with LLMs"&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.openclaw.ai/" rel="noopener noreferrer"&gt;OpenClaw skills docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openapi-ts/openapi-typescript" rel="noopener noreferrer"&gt;openapi-typescript&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>programming</category>
      <category>openclaw</category>
    </item>
    <item>
      <title>Code Coverage Best Practices for Agentic Development</title>
      <dc:creator>Ariel Frischer</dc:creator>
      <pubDate>Sun, 11 Jan 2026 18:15:55 +0000</pubDate>
      <link>https://dev.to/arielf/code-coverage-best-practices-for-agentic-development-28hd</link>
      <guid>https://dev.to/arielf/code-coverage-best-practices-for-agentic-development-28hd</guid>
      <description>&lt;h2&gt;
  
  
  The Core Problem
&lt;/h2&gt;

&lt;p&gt;When AI agents generate code, two opposing forces create tension:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;High coverage slows down&lt;/strong&gt; - More tests mean longer iteration cycles and higher token costs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Low coverage risks regressions&lt;/strong&gt; - Agents lack institutional memory; they don't know if they broke something previously built&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Key Insight: Tests Are Institutional Memory
&lt;/h2&gt;

&lt;p&gt;Human developers remember past bugs and context. Agents don't. &lt;strong&gt;Tests become the primary mechanism for regression detection&lt;/strong&gt;, not a secondary safety net.&lt;/p&gt;

&lt;p&gt;This shifts the value proposition: testing agent-generated code is MORE important than testing human-written code, because it's the only way agents learn what to preserve.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Middle Ground: Tiered Coverage Strategy
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Risk Tier&lt;/th&gt;
&lt;th&gt;Coverage Target&lt;/th&gt;
&lt;th&gt;What Goes Here&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;td&gt;85-95%&lt;/td&gt;
&lt;td&gt;Business logic, security, data integrity, money flows, API contracts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Core&lt;/td&gt;
&lt;td&gt;70-80%&lt;/td&gt;
&lt;td&gt;Main workflows, state management, integrations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Low-risk&lt;/td&gt;
&lt;td&gt;50-60%&lt;/td&gt;
&lt;td&gt;Getters/setters, DTOs, glue code, logging&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Principles
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Intention-Based &amp;gt; High Percentage
&lt;/h3&gt;

&lt;p&gt;Every test should answer: &lt;strong&gt;"What regression would this catch if it failed?"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Tests that can't name a concrete regression are coverage-chasing noise. Focus on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Core business rules&lt;/li&gt;
&lt;li&gt;Edge cases that have caused bugs before&lt;/li&gt;
&lt;li&gt;Integration points between components&lt;/li&gt;
&lt;li&gt;Security and data integrity boundaries&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. The Real Cost Is Churn, Not Writing Tests
&lt;/h3&gt;

&lt;p&gt;Implementation-coupled tests that break on refactors cause agent thrashing. This is far more expensive than writing fewer, behavior-focused tests.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Behavior-focused tests&lt;/strong&gt; verify observable outputs and side effects rather than implementation details. They test WHAT the code does, not HOW it does it - so they survive refactoring.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Behavior-Focused&lt;/th&gt;
&lt;th&gt;Implementation-Coupled&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Tests inputs → outputs&lt;/td&gt;
&lt;td&gt;Tests internal method calls&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Breaks when behavior changes&lt;/td&gt;
&lt;td&gt;Breaks when code is refactored&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mocks external dependencies only&lt;/td&gt;
&lt;td&gt;Mocks internal collaborators&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  3. Every Bug Becomes a Regression Test
&lt;/h3&gt;

&lt;p&gt;When something breaks, the fix includes a test that would have caught it. This encodes institutional memory into the test suite.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Coverage as Diagnostic, Not KPI
&lt;/h3&gt;

&lt;p&gt;Use coverage reports to &lt;strong&gt;find untested critical paths&lt;/strong&gt;, not to hit arbitrary numbers.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;80% with meaningful tests beats 95% with brittle ones&lt;/li&gt;
&lt;li&gt;Low coverage in a critical module is a signal to investigate&lt;/li&gt;
&lt;li&gt;Improving code (deleting dead branches) can legitimately lower coverage while increasing safety&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Fast Feedback Loop Is Non-Negotiable
&lt;/h3&gt;

&lt;p&gt;If your test suite runs under 3 minutes, run it on every agent iteration. The cost is worth the regression protection.&lt;/p&gt;

&lt;p&gt;For longer suites:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run focused tests during iteration&lt;/li&gt;
&lt;li&gt;Run full suite before commit/merge&lt;/li&gt;
&lt;li&gt;Consider test parallelization&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Diminishing Returns After 80%
&lt;/h2&gt;

&lt;p&gt;Research consistently shows diminishing returns kick in after 80-90% coverage:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspect&lt;/th&gt;
&lt;th&gt;80-90% Coverage&lt;/th&gt;
&lt;th&gt;100% Coverage&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Bug-finding value&lt;/td&gt;
&lt;td&gt;High early, then flattens&lt;/td&gt;
&lt;td&gt;Minimal for final 10-20%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Engineering effort&lt;/td&gt;
&lt;td&gt;Proportional to benefit&lt;/td&gt;
&lt;td&gt;Disproportionately high&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Test complexity&lt;/td&gt;
&lt;td&gt;Moderate, behavior-focused&lt;/td&gt;
&lt;td&gt;Often brittle, over-specified&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Design impact&lt;/td&gt;
&lt;td&gt;Encourages testable code&lt;/td&gt;
&lt;td&gt;Can incentivize design compromises&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The last 10-20% requires:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Intricate test setups&lt;/li&gt;
&lt;li&gt;Heavy mocking&lt;/li&gt;
&lt;li&gt;Tests tightly coupled to implementation&lt;/li&gt;
&lt;li&gt;Covering defensive/error paths rarely hit in practice&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Agent-Specific Practices
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Minimum Rule
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;ALL agent-generated code must have at least one intention-revealing test before merge.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not necessarily high coverage, but something that would fail if the core behavior broke.&lt;/p&gt;

&lt;h3&gt;
  
  
  Have Agents Write Tests Too
&lt;/h3&gt;

&lt;p&gt;Since agents can generate tests, the marginal cost of test creation is low. Prompt agents to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Write tests alongside implementation&lt;/li&gt;
&lt;li&gt;Generate edge case tests for their own code&lt;/li&gt;
&lt;li&gt;Create regression tests when fixing bugs&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Run Tests in the Agent Loop
&lt;/h3&gt;

&lt;p&gt;Include test execution as part of the agent's implementation cycle:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;implement → run tests → fix failures → verify tests pass → commit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This catches regressions before they propagate.&lt;/p&gt;

&lt;h3&gt;
  
  
  Test Known Issue Scenarios
&lt;/h3&gt;

&lt;p&gt;Maintain a list of known system failures and ensure tests cover these scenarios. Agents don't know your system's historical pain points unless tests encode them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Practical Recommendation
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Aim for 75-85% coverage on critical code with behavior-focused tests. Accept 50-70% elsewhere. Always run tests in the agent loop.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The balance between cost/duration and regression protection favors &lt;strong&gt;FAST, MEANINGFUL tests&lt;/strong&gt; over comprehensive slow tests.&lt;/p&gt;

&lt;h2&gt;
  
  
  When Higher Coverage Makes Sense
&lt;/h2&gt;

&lt;p&gt;Push toward 95%+ in these contexts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Safety-critical or regulated domains (medical, fintech, automotive)&lt;/li&gt;
&lt;li&gt;Strong TDD culture where tests come naturally with design&lt;/li&gt;
&lt;li&gt;Public APIs with stability guarantees&lt;/li&gt;
&lt;li&gt;Security-sensitive code paths&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.gremlin.com/blog/three-reliability-best-practices-when-using-ai-agents-for-coding" rel="noopener noreferrer"&gt;Gremlin - Reliability Best Practices for AI Agents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://testing.googleblog.com/2020/08/code-coverage-best-practices.html" rel="noopener noreferrer"&gt;Google Testing Blog - Coverage Best Practices&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.sei.cmu.edu/blog/six-best-practices-for-developer-testing/" rel="noopener noreferrer"&gt;CMU SEI - Developer Testing Practices&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://stackoverflow.blog/2025/12/22/making-your-code-base-better-will-make-your-code-coverage-worse/" rel="noopener noreferrer"&gt;Stack Overflow - Coverage Tradeoffs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.codacy.com/best-practices-for-coding-with-ai" rel="noopener noreferrer"&gt;Codacy - Best Practices for AI Coding&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.augmentcode.com/blog/best-practices-for-using-ai-coding-agents" rel="noopener noreferrer"&gt;Augment - Best Practices for AI Coding Agents&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>ai</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Stop Building, Start Shipping: The Minimal Startup Toolkit</title>
      <dc:creator>Ariel Frischer</dc:creator>
      <pubDate>Mon, 01 Sep 2025 01:55:47 +0000</pubDate>
      <link>https://dev.to/arielf/stop-building-start-shipping-the-minimal-startup-toolkit-4dhc</link>
      <guid>https://dev.to/arielf/stop-building-start-shipping-the-minimal-startup-toolkit-4dhc</guid>
      <description>&lt;p&gt;&lt;em&gt;Essential, simple, cost effective startup tools.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;As someone who's built multiple startups and watched countless others struggle with the same decisions, I'm consistently amazed by how many founders waste precious runway building infrastructure instead of products. You're not Google. You don't need to build your own authentication system, payment processor, or email server. You need to validate your idea and get to market—fast.&lt;/p&gt;

&lt;p&gt;After building &lt;a href="https://repobird.ai" rel="noopener noreferrer"&gt;RepoBird.ai&lt;/a&gt; and several other SaaS products, I've discovered a core set of tools that streamline the process of building from scratch to MVP - while giving you the flexibility to scale. Here's the stack that lets you focus on what matters: building features your customers actually want.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. &lt;a href="https://opentofu.org" rel="noopener noreferrer"&gt;OpenTofu&lt;/a&gt;: Infrastructure as Code Without the License Anxiety
&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.amazonaws.com%2Fuploads%2Farticles%2Fiq96dwuxzzklzb8hq50r.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%2Fiq96dwuxzzklzb8hq50r.png" title="OpenTofu - Open Source Infrastructure as Code" alt="OpenTofu Logo" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Core Value:&lt;/strong&gt; Infrastructure as code! Open-source Terraform fork with zero vendor lock-in and full compatibility&lt;/p&gt;

&lt;p&gt;Have you ever done a tutorial for setting up some AWS service manually? It is actual PAIN - you have to manually click through and type in a bunch of settings and configuration one at a time. Now, imagine setting up your entire cloud infastructure with simple blocks of code in a couple files. You can spin it all up in one cli command or tear it down the same way. This is the right way to centralize your infra in the simplest way - AI agents can help out with this if you have no infra experience (just beware of the possible costs incurred - know what your deploying). &lt;/p&gt;

&lt;p&gt;If you're using Terraform, you should have switched to OpenTofu yesterday. When HashiCorp changed Terraform's license to BSL (Business Source License) in 2023, they inadvertently created a ticking time bomb for startups. OpenTofu, backed by the Linux Foundation, gives you everything Terraform does—but without the legal uncertainty or potential future licensing costs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it beats the alternatives:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;100% Terraform compatible&lt;/strong&gt; - Your existing configs work immediately&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Truly open source (MPL-2.0)&lt;/strong&gt; - No surprise license changes or fees as you scale&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Community-driven&lt;/strong&gt; - Features driven by users, not corporate roadmaps&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero cost forever&lt;/strong&gt; - No licensing fees, ever&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The killer feature:&lt;/strong&gt; You can literally swap the Terraform binary for OpenTofu and everything just works. No migration, no rewrites, no drama.&lt;/p&gt;

&lt;p&gt;Building infrastructure management from scratch would take months and create massive technical debt. AWS CloudFormation locks you into AWS. Terraform might cost you later. OpenTofu gives you enterprise-grade infrastructure management that remains free as you scale from 1 to 1,000 servers. If your startup doesn't require any special infra you may not need this at all! One example is some simple Nextjs webpage that sufficiently handles any server side logic without needing special AWS services.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. &lt;a href="https://purelymail.com" rel="noopener noreferrer"&gt;PurelyMail&lt;/a&gt;: Email That Costs $10/Year, Not $10/User/Month
&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.amazonaws.com%2Fuploads%2Farticles%2F42qkmoqx2fnim1rrdqyf.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%2F42qkmoqx2fnim1rrdqyf.png" title="PurelyMail - Simple, Affordable Email Hosting" alt="PurelyMail" width="390" height="70"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Core Value:&lt;/strong&gt; Unlimited users and domains for the price of a coffee&lt;/p&gt;

&lt;p&gt;Every startup needs email. Most pay $6-12 per user per month for Google Workspace or Microsoft 365. That's $720/year for just 5 email addresses. PurelyMail? $10/year total. Not per user. Total.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it beats the alternatives:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Unlimited email addresses&lt;/strong&gt; - Create dev@, support@, sales@, noreply@, and 50 more without paying extra&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unlimited domains&lt;/strong&gt; - Run email for all your projects and brands from one account&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero complexity&lt;/strong&gt; - Set up in 5 minutes, works with any email client&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Actual privacy&lt;/strong&gt; - Your data isn't being mined for advertising&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The killer feature:&lt;/strong&gt; The pricing model. While competitors charge per user (forcing you to share accounts or limit access), PurelyMail lets you create proper email addresses for every function, service, and team member.&lt;/p&gt;

&lt;p&gt;Yes, you lose the Google Docs integration. But for pure email? You're saving thousands per year that can go toward actual product development.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. &lt;a href="https://supabase.com" rel="noopener noreferrer"&gt;Supabase&lt;/a&gt;: The Open-Source Firebase That Uses Real SQL
&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.amazonaws.com%2Fuploads%2Farticles%2F273rjqpbziy54so5qk8u.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%2F273rjqpbziy54so5qk8u.png" title="Supabase - The Open Source Firebase Alternative" alt="Supabase Logo" width="800" height="154"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Core Value:&lt;/strong&gt; PostgreSQL backend with instant APIs, auth, and real-time—all open source&lt;/p&gt;

&lt;p&gt;Firebase seemed revolutionary until you hit its limitations. Supabase gives you Firebase's developer experience with PostgreSQL's power and zero lock-in. This UI is simple, easy to navigate, can run queries or have AI assistant generate them for you. Incredible value for the free plan.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it beats the alternatives:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Real PostgreSQL&lt;/strong&gt; - Use actual SQL, relations, transactions, and decades of database best practices&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Instant APIs&lt;/strong&gt; - Every table automatically gets REST and GraphQL endpoints&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auth included&lt;/strong&gt; - User management, social logins, and MFA without another service&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-hostable&lt;/strong&gt; - Your data, your servers, your control when you need it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The killer feature:&lt;/strong&gt; Elegant, simple UI. Auto-generated APIs. Generous free tier.&lt;/p&gt;

&lt;p&gt;Building a custom backend would take months. Firebase locks you into Google and NoSQL. AWS requires stitching together a dozen services. Supabase gives you a production-ready backend database in minutes that scales to millions of users.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. &lt;a href="https://clerk.com" rel="noopener noreferrer"&gt;Clerk&lt;/a&gt;: Authentication in 5 Minutes, Not 5 Months
&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.amazonaws.com%2Fuploads%2Farticles%2Fm3hzjghz4gq5u8ik8n82.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%2Fm3hzjghz4gq5u8ik8n82.png" title="Clerk - Complete User Management" alt="Clerk Logo" width="800" height="249"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Core Value:&lt;/strong&gt; Modern auth with pre-built UI components and 10,000 free users&lt;/p&gt;

&lt;p&gt;Authentication is a tarpit. It seems simple until you're implementing MFA, social logins, organization management, webhooks, and compliance. Clerk handles all of this with literally 5 lines of code. Free tier is working well for me no trial deadline. Has 3rd party signup integrated so users can sign in with google/github quite easily.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it beats the alternatives:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;10,000 free monthly active users&lt;/strong&gt; - Most startups never pay&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Free" Tier&lt;/strong&gt; - Up to 10,000 MAUs and 100 active organizations free.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pre-built React components&lt;/strong&gt; - Drop in &lt;code&gt;&amp;lt;SignIn/&amp;gt;&lt;/code&gt; and you're done&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;B2B ready&lt;/strong&gt; - Organizations, roles, and invites built-in&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The killer feature:&lt;/strong&gt; The pre-built UI components. While Auth0 and Cognito give you APIs, Clerk gives you production-ready React components that look good out of the box.&lt;/p&gt;

&lt;p&gt;Custom auth would take months and create security vulnerabilities. Auth0 gets expensive fast. AWS Cognito requires deep AWS knowledge. Clerk gets you to market with enterprise-grade auth before lunch. &lt;/p&gt;

&lt;h2&gt;
  
  
  5. &lt;a href="https://stripe.com" rel="noopener noreferrer"&gt;Stripe&lt;/a&gt;: Payments That Actually Work
&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.amazonaws.com%2Fuploads%2Farticles%2F4pkgloiicbiz8ouatax8.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%2F4pkgloiicbiz8ouatax8.png" title="Stripe - Online Payment Processing" alt="Stripe Logo" width="800" height="333"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Core Value:&lt;/strong&gt; Developer-first payments with APIs for everything&lt;/p&gt;

&lt;p&gt;Everyone knows Stripe, but not everyone appreciates why it's revolutionary. It's not about accepting payments—PayPal did that 20 years ago. It's about programmatic control over every aspect of the payment flow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it beats the alternatives:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;APIs for everything&lt;/strong&gt; - Subscriptions, invoices, taxes, payouts—all programmable&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Global by default&lt;/strong&gt; - 135+ currencies and local payment methods built-in&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Testing paradise&lt;/strong&gt; - Comprehensive test mode with fake card numbers for every scenario&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compliance handled&lt;/strong&gt; - PCI, SCA, tax calculation—Stripe manages the complexity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The killer feature:&lt;/strong&gt; The subscription API. Managing recurring billing yourself is a nightmare of edge cases. Stripe handles prorations, trials, upgrades, downgrades, pauses, and tax calculation automatically.&lt;/p&gt;

&lt;p&gt;PayPal is user-hostile for subscriptions. Square is built for retail. Building payment processing yourself is literally illegal without proper licenses. Stripe lets you accept money from anywhere, in any way, with a few API calls.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. &lt;a href="https://nextjs.org" rel="noopener noreferrer"&gt;Next.js&lt;/a&gt; + &lt;a href="https://vercel.com" rel="noopener noreferrer"&gt;Vercel&lt;/a&gt;: The Full-Stack Framework That Actually Ships
&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.amazonaws.com%2Fuploads%2Farticles%2Fsjyj1jsxaakjxuryv9bt.webp" 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%2Fsjyj1jsxaakjxuryv9bt.webp" title="Next.js + Vercel" alt="Next.js + Vercel Logos" width="800" height="336"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Core Value:&lt;/strong&gt; Frontend, backend, and deployment in one seamless package&lt;/p&gt;

&lt;p&gt;In a nutshell: Nextjs provides a powerful way to build fast, scalable, SEO-friendly web applications with a seamless developer experience. Using Vercel with Next.js is recommended because it offers seamless deployment, maximized performance, and unique full-stack capabilities that are directly optimized for the framework. Vercel is created by the team behind Next.js and serves as its default hosting solution with advanced infrastructure benefits.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it beats the alternatives:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Full-stack in one repo&lt;/strong&gt; - Frontend, backend APIs, in one codebase&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automatic everything&lt;/strong&gt; - SSL, CDN, scaling, previews—all handled by Vercel&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Git-based deployment&lt;/strong&gt; - Push to main, site is live globally in 30 seconds&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built-in optimization&lt;/strong&gt; - Image optimization, code splitting, caching—all automatic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The killer feature:&lt;/strong&gt; API routes. Write your backend endpoints in the same repo as your frontend. No CORS issues, no separate deployment, no coordination headaches.&lt;/p&gt;

&lt;p&gt;Plain React requires assembling a build pipeline. Rails/Laravel weren't built for modern frontends. AWS requires DevOps expertise. Next.js + Vercel gets you from idea to production URL in under an hour.&lt;/p&gt;

&lt;p&gt;The only gripe I have with vercel is the need for (at least) Pro plan (20$) per seat per month. A startup would need a paid (Pro or Enterprise) tier on Vercel because the free Hobby plan is strictly for personal, non-commercial use—and commercial activity such as selling products or services is not permitted under Hobby.&lt;/p&gt;

&lt;p&gt;PS: Code in Typescript - not Javascript.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Hidden Cost of "Building It Yourself"
&lt;/h2&gt;

&lt;p&gt;Every tool above could be built in-house. Also, you could be the next president of the United States. But just because you could doesn't mean you should. Don't be a stuck up do everything from scratch dev - you'll never get your core product out there. Once your in the big leagues, you can think about stripping out dependencies - until then use the frameworks out there for the sake of time savings.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start Shipping, Stop Building Infrastructure
&lt;/h2&gt;

&lt;p&gt;The startups that win aren't the ones with the most elegant infrastructure. They're the ones that reach product-market fit before running out of money. Every hour you spend building an authentication system is an hour not spent talking to customers or building features they'll pay for.&lt;/p&gt;

&lt;p&gt;These six tools eliminate 90% of infrastructure complexity while maintaining the flexibility to scale. They're production-tested by thousands of companies, documented extensively, and supported by thriving communities.&lt;/p&gt;

&lt;p&gt;Your startup's success won't come from having built your own email server or authentication system. It'll come from solving a real problem for real customers. These tools let you focus on exactly that.&lt;/p&gt;

&lt;p&gt;Stop reinventing wheels. Start shipping products.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;What tools have transformed your startup development? What infrastructure decisions do you wish you'd made differently? Share your stack in the comments.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
      <category>startup</category>
    </item>
  </channel>
</rss>
