<?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: Mārtiņš Veiss</title>
    <description>The latest articles on DEV Community by Mārtiņš Veiss (@mrveiss).</description>
    <link>https://dev.to/mrveiss</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%2F3867783%2Fb7397987-7baa-4c63-b090-414707e4daa6.jpg</url>
      <title>DEV Community: Mārtiņš Veiss</title>
      <link>https://dev.to/mrveiss</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mrveiss"/>
    <language>en</language>
    <item>
      <title>Weekly Update: ✨ fix(automation): count landed files, not just surviving li</title>
      <dc:creator>Mārtiņš Veiss</dc:creator>
      <pubDate>Wed, 02 Sep 2026 09:00:08 +0000</pubDate>
      <link>https://dev.to/mrveiss/weekly-update-fixautomation-count-landed-files-not-just-surviving-li-3me4</link>
      <guid>https://dev.to/mrveiss/weekly-update-fixautomation-count-landed-files-not-just-surviving-li-3me4</guid>
      <description>&lt;h2&gt;
  
  
  Weekly Update: ✨ fix(automation): count landed files, not just surviving lines, in the branch sweeps (#15036) (#15489)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/mrveiss/AutoBot-AI" rel="noopener noreferrer"&gt;AutoBot&lt;/a&gt; is an open-source, self-hosted AI agent platform — your data, your AI.&lt;/p&gt;

&lt;p&gt;This week we shipped:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔧 fix(automation): count landed files, not just surviving lines, in the branch sweeps (#15036)…&lt;/li&gt;
&lt;li&gt;🔧 test(coverage): give every collection exemption a decision, an issue and a down-only ceiling…&lt;/li&gt;
&lt;li&gt;🔧 feat(health): report the served frontend bundle, not just the process (#15462) (#15465)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Contributors: +2&lt;/p&gt;

&lt;p&gt;→ Full changelog: &lt;a href="https://github.com/mrveiss/AutoBot-AI/commits/Dev_new_gui?since=2026-08-26T09:00:04.342434Z" rel="noopener noreferrer"&gt;https://github.com/mrveiss/AutoBot-AI/commits/Dev_new_gui?since=2026-08-26T09:00:04.342434Z&lt;/a&gt;&lt;br&gt;
→ Discuss on GitHub: &lt;a href="https://github.com/mrveiss/AutoBot-AI/discussions" rel="noopener noreferrer"&gt;https://github.com/mrveiss/AutoBot-AI/discussions&lt;/a&gt;&lt;/p&gt;

</description>
      <category>autobot</category>
      <category>ai</category>
      <category>opensource</category>
      <category>weeklyupdate</category>
    </item>
    <item>
      <title>The half of your Claude setup that can't be shared — and why it still needs to be a plugin</title>
      <dc:creator>Mārtiņš Veiss</dc:creator>
      <pubDate>Tue, 01 Sep 2026 13:00:02 +0000</pubDate>
      <link>https://dev.to/mrveiss/the-half-of-your-claude-setup-that-cant-be-shared-and-why-it-still-needs-to-be-a-plugin-20dg</link>
      <guid>https://dev.to/mrveiss/the-half-of-your-claude-setup-that-cant-be-shared-and-why-it-still-needs-to-be-a-plugin-20dg</guid>
      <description>&lt;p&gt;Last time I wrote about the portable half of a Claude Code setup — the process discipline&lt;br&gt;
that transfers to any codebase, packaged as a plugin. Explore before building, prove the&lt;br&gt;
helper doesn't already exist, never claim "done" without pasting the output.&lt;/p&gt;

&lt;p&gt;That half is genuinely reusable. It's also not where most of the damage happens.&lt;/p&gt;

&lt;p&gt;Watch a capable agent work on an unfamiliar project and the failures aren't reasoning&lt;br&gt;
failures. It opens the PR against &lt;code&gt;main&lt;/code&gt; when the project ships from a different branch. It&lt;br&gt;
writes a PR body missing the three headings your CI requires, and the check fails for reasons&lt;br&gt;
the error message doesn't explain. It puts the migration in the plausible-looking directory&lt;br&gt;
rather than the real one. It calls the API endpoint that was deprecated in March, because the&lt;br&gt;
old one is still in the tree.&lt;/p&gt;

&lt;p&gt;None of that is a thinking problem. It's that the information doesn't exist in any form the&lt;br&gt;
agent can find. Your conventions live in your team's heads, in a wiki nobody's opened since&lt;br&gt;
onboarding, and in the reflex of the one person who's been there three years.&lt;/p&gt;

&lt;h2&gt;
  
  
  The information isn't in the codebase
&lt;/h2&gt;

&lt;p&gt;This is the part I got wrong for a while. I assumed that a sufficiently good agent reading a&lt;br&gt;
sufficiently well-organised repo would infer the conventions. Sometimes it does. But&lt;br&gt;
inference from code gives you what the code &lt;em&gt;does&lt;/em&gt;, not what the team has &lt;em&gt;agreed&lt;/em&gt;, and those&lt;br&gt;
differ constantly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Both &lt;code&gt;main&lt;/code&gt; and a development branch exist and look active. Which one do PRs target? The
code cannot tell you. Both have recent commits.&lt;/li&gt;
&lt;li&gt;Two service-layer patterns exist because one is being migrated to the other. Which is
correct for new work? The tree shows both, in roughly equal numbers.&lt;/li&gt;
&lt;li&gt;A directory holds twelve files, eleven of which are deprecated. Nothing marks them.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An agent reading that repo will make a defensible choice and be wrong half the time. So will&lt;br&gt;
a new human contributor — they just ask in Slack instead, which is why the problem stays&lt;br&gt;
invisible until you try to scale it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this doesn't go in CLAUDE.md either
&lt;/h2&gt;

&lt;p&gt;Same argument as last time, sharper. Project instructions are resident in context permanently,&lt;br&gt;
so everything you add competes with the actual task for attention.&lt;/p&gt;

&lt;p&gt;Conventions are unusually bad at justifying that cost, because almost all of them are&lt;br&gt;
&lt;em&gt;situational&lt;/em&gt;. The rules about PR body structure matter during PR creation and nowhere else.&lt;br&gt;
The deploy path matters when deploying. The full-stack debugging map — which layer owns&lt;br&gt;
which symptom — is critical when something breaks and pure noise the rest of the time.&lt;/p&gt;

&lt;p&gt;Push all of it into one always-on file and you get a document nobody can keep current, where&lt;br&gt;
the two rules that would have prevented today's incident are buried among forty that wouldn't.&lt;/p&gt;

&lt;p&gt;Skills load on trigger. That's the whole argument, and it applies harder to project&lt;br&gt;
conventions than to general discipline, because there are far more of them.&lt;/p&gt;

&lt;h2&gt;
  
  
  The boundary that turned out to matter
&lt;/h2&gt;

&lt;p&gt;I ended up splitting my skills into two marketplaces, and the dividing line is simpler than I&lt;br&gt;
expected:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If a skill names a branch, a path, a service, or a table — it's project-specific.&lt;br&gt;
If it names a discipline — it's portable.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code&gt;canonical-coding&lt;/code&gt; ("one implementation per concept, prove the thing doesn't exist before you&lt;br&gt;
write it") names a discipline. It's true everywhere. &lt;code&gt;pr&lt;/code&gt; ("target this branch, these headings&lt;br&gt;
are required, run these checks first") names a branch. It's true in exactly one repo and&lt;br&gt;
actively harmful anywhere else.&lt;/p&gt;

&lt;p&gt;The test is useful because it's mechanical. You don't have to reason about whether something&lt;br&gt;
&lt;em&gt;feels&lt;/em&gt; general — you look at whether it can be written without naming a proper noun from your&lt;br&gt;
infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the project-specific half looks like
&lt;/h2&gt;

&lt;p&gt;For &lt;a href="https://github.com/mrveiss/AutoBot-AI" rel="noopener noreferrer"&gt;AutoBot-AI&lt;/a&gt; that came to twelve skills, in&lt;br&gt;
&lt;a href="https://github.com/mrveiss/AutoBot-AI-Claude-dev-skills" rel="noopener noreferrer"&gt;their own marketplace&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Issue → merge&lt;/strong&gt; — &lt;code&gt;implement&lt;/code&gt; (the full loop: umbrella gate, worktree, design, code, verify,&lt;br&gt;
PR, CI, closure check), &lt;code&gt;batch-implement&lt;/code&gt; (the same across a list of issues, with per-issue&lt;br&gt;
verification), &lt;code&gt;pr&lt;/code&gt; (pre-flight branch checks, correct base branch), &lt;code&gt;pre-merge-validate&lt;/code&gt;&lt;br&gt;
(syntax, imports, call-site impact, tests, types, lint), &lt;code&gt;drain&lt;/code&gt; (pick up the backlog items&lt;br&gt;
that need no human decision).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Review&lt;/strong&gt; — &lt;code&gt;review&lt;/code&gt; (CI diagnosis, three-angle finder pass, merge decision) and&lt;br&gt;
&lt;code&gt;review-fleet&lt;/code&gt; (ten parallel review angles with separate verifier agents, posting only&lt;br&gt;
confirmed, deduplicated findings as a single comment).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Audit&lt;/strong&gt; — &lt;code&gt;api-wiring-audit&lt;/code&gt; (frontend calls an endpoint that exists, backend route is&lt;br&gt;
actually mounted) and &lt;code&gt;dead-code-audit&lt;/code&gt; (unregistered routers, uninvoked hooks, orphaned&lt;br&gt;
components).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Debug&lt;/strong&gt; — &lt;code&gt;debug-autobot&lt;/code&gt;, which dispatches an investigator per layer (Vue, FastAPI, Redis,&lt;br&gt;
ChromaDB, NPU, browser, AI stack) and synthesises one root cause. This one is the clearest&lt;br&gt;
example of why the split exists: its entire value is knowing which layers exist and what each&lt;br&gt;
one owns. There is no general version of that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Platform and session&lt;/strong&gt; — &lt;code&gt;github-cli&lt;/code&gt; and &lt;code&gt;session-lifecycle&lt;/code&gt;, the start-of-session and&lt;br&gt;
end-of-session protocol.&lt;/p&gt;

&lt;p&gt;None of that is useful to you. That's the point — it's not meant to be, and trying to make it&lt;br&gt;
general would strip out exactly what makes it work.&lt;/p&gt;

&lt;h2&gt;
  
  
  The payoff is onboarding, human and otherwise
&lt;/h2&gt;

&lt;p&gt;One install, and every developer on the project has the same workflow — and so does every&lt;br&gt;
fresh agent session. That second part is easy to undervalue. Agent sessions start from nothing&lt;br&gt;
every time; whatever conventions you established yesterday are gone unless something reloads&lt;br&gt;
them. A plugin is how you make "how we do things here" survive a new context window.&lt;/p&gt;

&lt;p&gt;It also makes conventions reviewable. When the rule lives in a skill file in a repo, changing&lt;br&gt;
it is a pull request someone can argue with — rather than a habit that drifts silently until&lt;br&gt;
two people are doing it differently and neither knows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where this fails
&lt;/h2&gt;

&lt;p&gt;Skills encoding conventions are only worth it if the conventions are stable. If your branch&lt;br&gt;
strategy is genuinely in flux, a skill that confidently states the wrong base branch is worse&lt;br&gt;
than nothing — a human hesitates and asks, an agent complies immediately and at scale.&lt;/p&gt;

&lt;p&gt;So they need the same maintenance as any other checked-in artefact: when the convention&lt;br&gt;
changes, the skill changes in the same PR. A skill that lies is more expensive than a&lt;br&gt;
convention nobody wrote down.&lt;/p&gt;




&lt;p&gt;The portable half is at&lt;br&gt;
&lt;a href="https://github.com/mrveiss/Claude-Dev-Skills" rel="noopener noreferrer"&gt;Claude-Dev-Skills&lt;/a&gt;, the project-specific half&lt;br&gt;
at &lt;a href="https://github.com/mrveiss/AutoBot-AI-Claude-dev-skills" rel="noopener noreferrer"&gt;AutoBot-AI-Claude-dev-skills&lt;/a&gt;.&lt;br&gt;
Both Apache-2.0.&lt;/p&gt;

&lt;p&gt;I'd like to know whether the boundary rule holds up against your setup — is there a skill in&lt;br&gt;
your workflow that names a proper noun but still feels like it should be portable? That's the&lt;br&gt;
case I haven't figured out yet.&lt;/p&gt;

</description>
      <category>claudecode</category>
      <category>ai</category>
      <category>devtools</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Weekly Update: ✨ fix(setup-wizard): bound the provision-fleet 409 lock by s</title>
      <dc:creator>Mārtiņš Veiss</dc:creator>
      <pubDate>Wed, 26 Aug 2026 09:00:09 +0000</pubDate>
      <link>https://dev.to/mrveiss/weekly-update-fixsetup-wizard-bound-the-provision-fleet-409-lock-by-s-1341</link>
      <guid>https://dev.to/mrveiss/weekly-update-fixsetup-wizard-bound-the-provision-fleet-409-lock-by-s-1341</guid>
      <description>&lt;h2&gt;
  
  
  Weekly Update: ✨ fix(setup-wizard): bound the provision-fleet 409 lock by staleness, not just status (#14856) (#15090)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/mrveiss/AutoBot-AI" rel="noopener noreferrer"&gt;AutoBot&lt;/a&gt; is an open-source, self-hosted AI agent platform — your data, your AI.&lt;/p&gt;

&lt;p&gt;This week we shipped:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔧 fix(setup-wizard): bound the provision-fleet 409 lock by staleness, not just status (#14856)…&lt;/li&gt;
&lt;li&gt;🔧 fix(access-control): provision the enforcement mode instead of inheriting an unset key (#14866)…&lt;/li&gt;
&lt;li&gt;🔧 docs(bedrock): the module documents a re-export it does not have (#15081) (#15082)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Contributors: +2&lt;/p&gt;

&lt;p&gt;→ Full changelog: &lt;a href="https://github.com/mrveiss/AutoBot-AI/commits/Dev_new_gui?since=2026-08-19T09:00:03.226436Z" rel="noopener noreferrer"&gt;https://github.com/mrveiss/AutoBot-AI/commits/Dev_new_gui?since=2026-08-19T09:00:03.226436Z&lt;/a&gt;&lt;br&gt;
→ Discuss on GitHub: &lt;a href="https://github.com/mrveiss/AutoBot-AI/discussions" rel="noopener noreferrer"&gt;https://github.com/mrveiss/AutoBot-AI/discussions&lt;/a&gt;&lt;/p&gt;

</description>
      <category>autobot</category>
      <category>ai</category>
      <category>opensource</category>
      <category>weeklyupdate</category>
    </item>
    <item>
      <title>Agents don't fail at writing code — they fail at everything around it</title>
      <dc:creator>Mārtiņš Veiss</dc:creator>
      <pubDate>Tue, 25 Aug 2026 13:00:02 +0000</pubDate>
      <link>https://dev.to/mrveiss/agents-dont-fail-at-writing-code-they-fail-at-everything-around-it-46ah</link>
      <guid>https://dev.to/mrveiss/agents-dont-fail-at-writing-code-they-fail-at-everything-around-it-46ah</guid>
      <description>&lt;p&gt;I've spent about six months running Claude Code agents against a codebase big enough to&lt;br&gt;
hurt — several hundred open issues, agents committing daily, a CI pipeline that fails loudly&lt;br&gt;
when they get it wrong.&lt;/p&gt;

&lt;p&gt;Here's the thing nobody told me going in: the agents were fine at writing code. Genuinely&lt;br&gt;
fine. Give one a well-scoped function and it comes back with something reasonable.&lt;/p&gt;

&lt;p&gt;What they were bad at was everything &lt;em&gt;around&lt;/em&gt; writing code. Deciding whether the thing&lt;br&gt;
should be built at all. Noticing that the helper they were about to write already existed&lt;br&gt;
sixty lines up. Checking whether the fix worked before announcing that it did. Those aren't&lt;br&gt;
coding failures — they're process failures, and no amount of better prompting fixed them,&lt;br&gt;
because the problem was never the prompt.&lt;/p&gt;

&lt;p&gt;What fixed them was writing the process down.&lt;/p&gt;
&lt;h2&gt;
  
  
  Four failure modes, and what each one taught me
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1. The second helper
&lt;/h3&gt;

&lt;p&gt;An agent needs to format a duration. It writes &lt;code&gt;formatDuration()&lt;/code&gt;. Your codebase already has&lt;br&gt;
&lt;code&gt;humanizeElapsed()&lt;/code&gt; in a utils file it never opened.&lt;/p&gt;

&lt;p&gt;This is the most expensive failure mode I hit, because nothing about it looks like a&lt;br&gt;
failure. The code works. Tests pass. Review approves it. You only find out six months later&lt;br&gt;
when you change how durations are displayed and catch three of the four places.&lt;/p&gt;

&lt;p&gt;Agents are strongly biased toward writing new code rather than finding existing code,&lt;br&gt;
because writing is what they're rewarded for and searching is expensive. The counter-pressure&lt;br&gt;
has to be explicit: &lt;strong&gt;before you write a helper, prove the concept doesn't already exist.&lt;/strong&gt;&lt;br&gt;
Not "check quickly" — prove it, with a search you can cite.&lt;/p&gt;

&lt;p&gt;The same discipline kills the "v2" reflex, where an agent that finds a function it doesn't&lt;br&gt;
fully understand writes &lt;code&gt;processDataV2()&lt;/code&gt; next to it and leaves both in the tree forever.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. "Done" that was never checked
&lt;/h3&gt;

&lt;p&gt;Ask an agent whether the fix works and it will tell you the fix works. It is not lying. It&lt;br&gt;
has genuinely reasoned its way to a confident answer, and reasoning feels like verification&lt;br&gt;
from the inside.&lt;/p&gt;

&lt;p&gt;The rule that fixed this is blunt: &lt;strong&gt;you may not say "done", "fixed", or "passing" without&lt;br&gt;
pasting the command output that proves it.&lt;/strong&gt; Not a description of the output. The output.&lt;/p&gt;

&lt;p&gt;The interesting part is how often an agent following that rule catches itself. It goes to&lt;br&gt;
run the test so it can quote the result, the test fails, and the claim never gets made. The&lt;br&gt;
verification step isn't a check on the answer — it's what produces the answer.&lt;/p&gt;
&lt;h3&gt;
  
  
  3. Fixing one of twelve
&lt;/h3&gt;

&lt;p&gt;An agent fixes a null-check bug in &lt;code&gt;UserService&lt;/code&gt;. The same bug is in eleven other services,&lt;br&gt;
because they were all written from the same template by the same agent three weeks earlier.&lt;/p&gt;

&lt;p&gt;Agents fix what you point at. They don't generalise from one instance to a class of&lt;br&gt;
instances unless you ask, and the whole reason the bug is interesting is that it's probably&lt;br&gt;
systemic. So after every fix: &lt;strong&gt;sweep the adjacent files for the same defect, and file what&lt;br&gt;
you find.&lt;/strong&gt; File it even if you can't fix it now — an unfixed bug you've recorded is a&lt;br&gt;
backlog item, an unfixed bug nobody noticed is a landmine.&lt;/p&gt;
&lt;h3&gt;
  
  
  4. Debugging by guessing
&lt;/h3&gt;

&lt;p&gt;An agent hits a failing test and immediately proposes a fix. Then another. Then another. Each&lt;br&gt;
one is plausible, none of them work, and forty minutes later the file has accumulated three&lt;br&gt;
speculative changes and the original bug is still there — now harder to see.&lt;/p&gt;

&lt;p&gt;What's missing is the step where you find out &lt;em&gt;why&lt;/em&gt; it fails before deciding what to change.&lt;br&gt;
Read the actual error. Reproduce it in isolation. Form one hypothesis, test that hypothesis,&lt;br&gt;
and only then edit. And when three attempts have failed, stop — a fourth attempt is not a&lt;br&gt;
strategy, it's a slot machine. Escalate with what you learned.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why I put these in skills rather than CLAUDE.md
&lt;/h2&gt;

&lt;p&gt;The obvious place for rules like these is your project instructions, and I started there. It&lt;br&gt;
doesn't scale.&lt;/p&gt;

&lt;p&gt;Everything in &lt;code&gt;CLAUDE.md&lt;/code&gt; is in context permanently, competing with the actual task for&lt;br&gt;
attention. A twelve-line debugging protocol is exactly right when a test is failing and pure&lt;br&gt;
noise the other 95% of the time. Push enough process in there and the important rules get&lt;br&gt;
diluted by the situational ones.&lt;/p&gt;

&lt;p&gt;Skills load on trigger. The debugging discipline shows up when something breaks and stays out&lt;br&gt;
of the way otherwise. That's the whole difference, and it turns out to matter a lot.&lt;/p&gt;

&lt;p&gt;The second reason is portability. Process discipline isn't project-specific — the "second&lt;br&gt;
helper" problem is the same in every codebase I've worked in. Keeping it in one project's&lt;br&gt;
instructions means re-deriving it in the next project. Packaged as a plugin, it moves.&lt;/p&gt;
&lt;h2&gt;
  
  
  The set
&lt;/h2&gt;

&lt;p&gt;I've extracted the general, project-agnostic half of what accumulated and published it as a&lt;br&gt;
Claude Code plugin marketplace:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/plugin marketplace add mrveiss/Claude-Dev-Skills
/plugin &lt;span class="nb"&gt;install &lt;/span&gt;claude-dev-skills@claude-dev-skills
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Eight skills:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;process&lt;/code&gt;&lt;/strong&gt; — the approach discipline: explore before building, plan a multi-step
change, debug methodically, verify before claiming, dispatch parallel agents, finish a
branch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;canonical-coding&lt;/code&gt;&lt;/strong&gt; — one implementation per concept. Failure mode 1.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;commit&lt;/code&gt;&lt;/strong&gt; — commit workflow with pre-flight checks, auto-format, and retry logic for
when pre-commit hooks rewrite files underneath you.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;review-lenses&lt;/code&gt;&lt;/strong&gt; — review by domain lens (architecture, delivery, frontend, docs, UX,
visual craft) instead of one undifferentiated "review this".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;gap-audit&lt;/code&gt;&lt;/strong&gt; — sweep adjacent files after a fix and file the gaps. Failure mode 3.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;web-audit&lt;/code&gt;&lt;/strong&gt; — security, SEO and AI-friendliness audit of a site: headers, DNS, TLS,
CORS, email spoofing, exposed panels, per-page SEO, compromise indicators.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;ui-design&lt;/code&gt;&lt;/strong&gt; — visual direction, typography, colour, layout, spacing, motion,
accessibility.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;memory-cleanup&lt;/code&gt;&lt;/strong&gt; — end-of-session memory hygiene, so context files stay an index
instead of growing into sludge.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Apache-2.0, and two of them consolidate ideas from other skill authors — notably Jesse&lt;br&gt;
Vincent's &lt;a href="https://github.com/obra/superpowers" rel="noopener noreferrer"&gt;Superpowers&lt;/a&gt; suite, which is worth reading on&lt;br&gt;
its own.&lt;/p&gt;

&lt;p&gt;They came out of building &lt;a href="https://github.com/mrveiss/AutoBot-AI" rel="noopener noreferrer"&gt;AutoBot-AI&lt;/a&gt;. The&lt;br&gt;
project-specific ones — the issue-to-merge loop, full-stack debugging, the codebase audits —&lt;br&gt;
live in &lt;a href="https://github.com/mrveiss/AutoBot-AI-Claude-dev-skills" rel="noopener noreferrer"&gt;their own marketplace&lt;/a&gt;,&lt;br&gt;
because they hardcode that platform's branch names and paths and are no use anywhere else.&lt;br&gt;
This is the half that travels.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part I'd push back on myself
&lt;/h2&gt;

&lt;p&gt;Process discipline has a real cost. Every one of these rules makes the agent slower, and some&lt;br&gt;
of them make it slower in ways that feel pointless in the moment — proving a helper doesn't&lt;br&gt;
exist takes longer than writing the helper, almost every time.&lt;/p&gt;

&lt;p&gt;The trade only pays off over a codebase's lifetime, which means it's genuinely the wrong call&lt;br&gt;
for a prototype you'll throw away in a week. If you're spiking something, skip all of this&lt;br&gt;
and let the agent write.&lt;/p&gt;

&lt;p&gt;Where it pays is the second year, when you're the one maintaining what the agents built.&lt;/p&gt;




&lt;p&gt;If you try the set, I'd like to know where it's wrong: does &lt;code&gt;process&lt;/code&gt; route the way you&lt;br&gt;
actually work, or does it fire when you don't want it? Is &lt;code&gt;canonical-coding&lt;/code&gt; too strict for a&lt;br&gt;
codebase that legitimately carries parallel implementations? And what's missing?&lt;/p&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/mrveiss/Claude-Dev-Skills" rel="noopener noreferrer"&gt;https://github.com/mrveiss/Claude-Dev-Skills&lt;/a&gt;&lt;/p&gt;

</description>
      <category>claudecode</category>
      <category>ai</category>
      <category>devtools</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Weekly Update: ✨ fix(provision): stamp node_roles_declared from the setup w</title>
      <dc:creator>Mārtiņš Veiss</dc:creator>
      <pubDate>Wed, 19 Aug 2026 09:00:07 +0000</pubDate>
      <link>https://dev.to/mrveiss/weekly-update-fixprovision-stamp-noderolesdeclared-from-the-setup-w-3kn2</link>
      <guid>https://dev.to/mrveiss/weekly-update-fixprovision-stamp-noderolesdeclared-from-the-setup-w-3kn2</guid>
      <description>&lt;h2&gt;
  
  
  Weekly Update: ✨ fix(provision): stamp node_roles_declared from the setup wizard too (#14594) (#14637)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/mrveiss/AutoBot-AI" rel="noopener noreferrer"&gt;AutoBot&lt;/a&gt; is an open-source, self-hosted AI agent platform — your data, your AI.&lt;/p&gt;

&lt;p&gt;This week we shipped:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔧 fix(provision): stamp node_roles_declared from the setup wizard too (#14594) (#14637)&lt;/li&gt;
&lt;li&gt;🔧 fix(infra): read the report file each analyzer writes, not stdout (#14587) (#14636)&lt;/li&gt;
&lt;li&gt;🔧 security(mcp): govern manual_mcp as the twelfth bridge (#14586) (#14627)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Contributors: +1&lt;/p&gt;

&lt;p&gt;→ Full changelog: &lt;a href="https://github.com/mrveiss/AutoBot-AI/commits/Dev_new_gui?since=2026-08-12T09:00:02.662484Z" rel="noopener noreferrer"&gt;https://github.com/mrveiss/AutoBot-AI/commits/Dev_new_gui?since=2026-08-12T09:00:02.662484Z&lt;/a&gt;&lt;br&gt;
→ Discuss on GitHub: &lt;a href="https://github.com/mrveiss/AutoBot-AI/discussions" rel="noopener noreferrer"&gt;https://github.com/mrveiss/AutoBot-AI/discussions&lt;/a&gt;&lt;/p&gt;

</description>
      <category>autobot</category>
      <category>ai</category>
      <category>opensource</category>
      <category>weeklyupdate</category>
    </item>
    <item>
      <title>Weekly Update: ✨ refactor(agents): split memory-monitor into capture vs cur</title>
      <dc:creator>Mārtiņš Veiss</dc:creator>
      <pubDate>Wed, 12 Aug 2026 09:00:09 +0000</pubDate>
      <link>https://dev.to/mrveiss/weekly-update-refactoragents-split-memory-monitor-into-capture-vs-cur-4487</link>
      <guid>https://dev.to/mrveiss/weekly-update-refactoragents-split-memory-monitor-into-capture-vs-cur-4487</guid>
      <description>&lt;h2&gt;
  
  
  Weekly Update: ✨ refactor(agents): split memory-monitor into capture vs curation so capture runs on the cheap tier (#14139)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/mrveiss/AutoBot-AI" rel="noopener noreferrer"&gt;AutoBot&lt;/a&gt; is an open-source, self-hosted AI agent platform — your data, your AI.&lt;/p&gt;

&lt;p&gt;This week we shipped:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔧 refactor(agents): split memory-monitor into capture vs curation so capture runs on the cheap tier…&lt;/li&gt;
&lt;li&gt;🔧 docs(claude): split CLAUDE.md into a trigger-routed index and deconflict the doc set (#14133)&lt;/li&gt;
&lt;li&gt;🔧 perf(agents): pin explicit model tiers on all agent definitions and add a Haiku repo-sweeper…&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Contributors: +2&lt;/p&gt;

&lt;p&gt;→ Full changelog: &lt;a href="https://github.com/mrveiss/AutoBot-AI/commits/Dev_new_gui?since=2026-08-05T09:00:03.299578Z" rel="noopener noreferrer"&gt;https://github.com/mrveiss/AutoBot-AI/commits/Dev_new_gui?since=2026-08-05T09:00:03.299578Z&lt;/a&gt;&lt;br&gt;
→ Discuss on GitHub: &lt;a href="https://github.com/mrveiss/AutoBot-AI/discussions" rel="noopener noreferrer"&gt;https://github.com/mrveiss/AutoBot-AI/discussions&lt;/a&gt;&lt;/p&gt;

</description>
      <category>autobot</category>
      <category>ai</category>
      <category>opensource</category>
      <category>weeklyupdate</category>
    </item>
    <item>
      <title>Weekly Update: ✨ test(kb): make the GPU chunker and KB stats tests able to</title>
      <dc:creator>Mārtiņš Veiss</dc:creator>
      <pubDate>Wed, 05 Aug 2026 09:00:05 +0000</pubDate>
      <link>https://dev.to/mrveiss/weekly-update-testkb-make-the-gpu-chunker-and-kb-stats-tests-able-to-46ii</link>
      <guid>https://dev.to/mrveiss/weekly-update-testkb-make-the-gpu-chunker-and-kb-stats-tests-able-to-46ii</guid>
      <description>&lt;h2&gt;
  
  
  Weekly Update: ✨ test(kb): make the GPU chunker and KB stats tests able to fail (#13563) (#13613)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/mrveiss/AutoBot-AI" rel="noopener noreferrer"&gt;AutoBot&lt;/a&gt; is an open-source, self-hosted AI agent platform — your data, your AI.&lt;/p&gt;

&lt;p&gt;This week we shipped:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔧 test(kb): make the GPU chunker and KB stats tests able to fail (#13563) (#13613)&lt;/li&gt;
&lt;li&gt;🔧 test(mcp): make the injection tests reach the handler instead of a 404 (#13598) (#13612)&lt;/li&gt;
&lt;li&gt;🔧 fix(api-contract): keep absolute filesystem paths out of OpenAPI schema defaults (#13572) (#13611)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Contributors: +2&lt;/p&gt;

&lt;p&gt;→ Full changelog: &lt;a href="https://github.com/mrveiss/AutoBot-AI/commits/Dev_new_gui?since=2026-07-29T09:00:02.182745Z" rel="noopener noreferrer"&gt;https://github.com/mrveiss/AutoBot-AI/commits/Dev_new_gui?since=2026-07-29T09:00:02.182745Z&lt;/a&gt;&lt;br&gt;
→ Discuss on GitHub: &lt;a href="https://github.com/mrveiss/AutoBot-AI/discussions" rel="noopener noreferrer"&gt;https://github.com/mrveiss/AutoBot-AI/discussions&lt;/a&gt;&lt;/p&gt;

</description>
      <category>autobot</category>
      <category>ai</category>
      <category>opensource</category>
      <category>weeklyupdate</category>
    </item>
    <item>
      <title>Weekly Update: ✨ fix(analytics): exclude test modules from the endpoint sca</title>
      <dc:creator>Mārtiņš Veiss</dc:creator>
      <pubDate>Wed, 29 Jul 2026 09:00:06 +0000</pubDate>
      <link>https://dev.to/mrveiss/weekly-update-fixanalytics-exclude-test-modules-from-the-endpoint-sca-27cn</link>
      <guid>https://dev.to/mrveiss/weekly-update-fixanalytics-exclude-test-modules-from-the-endpoint-sca-27cn</guid>
      <description>&lt;h2&gt;
  
  
  Weekly Update: ✨ fix(analytics): exclude test modules from the endpoint scan (#12957) (#12958)
&lt;/h2&gt;

&lt;p&gt;This week we shipped:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔧 fix(analytics): exclude test modules from the endpoint scan &lt;/li&gt;
&lt;li&gt;🔧 fix(deploy): consolidate DB credentials onto one store and s&lt;/li&gt;
&lt;li&gt;🔧 feat(skills): add findings-first /secreview skill — emit bef&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Contributors: +2&lt;/p&gt;

&lt;p&gt;→ Full changelog: &lt;a href="https://github.com/mrveiss/AutoBot-AI/commits/Dev_new_gui?since=2026-07-22T09:00:02.984622Z" rel="noopener noreferrer"&gt;https://github.com/mrveiss/AutoBot-AI/commits/Dev_new_gui?since=2026-07-22T09:00:02.984622Z&lt;/a&gt;&lt;br&gt;
→ Discuss on GitHub: &lt;a href="https://github.com/mrveiss/AutoBot-AI/discussions" rel="noopener noreferrer"&gt;https://github.com/mrveiss/AutoBot-AI/discussions&lt;/a&gt;&lt;/p&gt;

</description>
      <category>autobot</category>
      <category>ai</category>
      <category>automation</category>
      <category>weeklyupdate</category>
    </item>
    <item>
      <title>Weekly Update: ✨ fix(llm,npu): openrouter LLMResponse field names + depreca</title>
      <dc:creator>Mārtiņš Veiss</dc:creator>
      <pubDate>Mon, 06 Jul 2026 05:00:08 +0000</pubDate>
      <link>https://dev.to/mrveiss/weekly-update-fixllmnpu-openrouter-llmresponse-field-names-depreca-1ij3</link>
      <guid>https://dev.to/mrveiss/weekly-update-fixllmnpu-openrouter-llmresponse-field-names-depreca-1ij3</guid>
      <description>&lt;h2&gt;
  
  
  Weekly Update: ✨ fix(llm,npu): openrouter LLMResponse field names + deprecated pydantic .json() (#10947, #10952) (#10962)
&lt;/h2&gt;

&lt;p&gt;This week we shipped:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔧 fix(llm,npu): openrouter LLMResponse field names + deprecate&lt;/li&gt;
&lt;li&gt;🔧 feat(skills): role-curated skill bundles in SkillHub (#10540&lt;/li&gt;
&lt;li&gt;🔧 feat(knowledge): tool-agnostic connector category resolution&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Contributors: +2&lt;/p&gt;

&lt;p&gt;→ Full changelog: &lt;a href="https://github.com/mrveiss/AutoBot-AI/commits/Dev_new_gui?since=2026-06-29T05:00:04.393955Z" rel="noopener noreferrer"&gt;https://github.com/mrveiss/AutoBot-AI/commits/Dev_new_gui?since=2026-06-29T05:00:04.393955Z&lt;/a&gt;&lt;br&gt;
→ Discuss on GitHub: &lt;a href="https://github.com/mrveiss/AutoBot-AI/discussions" rel="noopener noreferrer"&gt;https://github.com/mrveiss/AutoBot-AI/discussions&lt;/a&gt;&lt;/p&gt;

</description>
      <category>autobot</category>
      <category>ai</category>
      <category>automation</category>
      <category>weeklyupdate</category>
    </item>
    <item>
      <title>Weekly Update: ✨ feat(ansible): pg_hba supports coexisting app users on one</title>
      <dc:creator>Mārtiņš Veiss</dc:creator>
      <pubDate>Mon, 29 Jun 2026 05:00:06 +0000</pubDate>
      <link>https://dev.to/mrveiss/weekly-update-featansible-pghba-supports-coexisting-app-users-on-one-55d0</link>
      <guid>https://dev.to/mrveiss/weekly-update-featansible-pghba-supports-coexisting-app-users-on-one-55d0</guid>
      <description>&lt;h2&gt;
  
  
  Weekly Update: ✨ feat(ansible): pg_hba supports coexisting app users on one instance (#10636) (#10638)
&lt;/h2&gt;

&lt;p&gt;This week we shipped:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔧 feat(ansible): pg_hba supports coexisting app users on one i&lt;/li&gt;
&lt;li&gt;🔧 refactor(memory): retire enhanced_memory_manager_async + wir&lt;/li&gt;
&lt;li&gt;🔧 refactor(memory): consolidate TaskPriority/Priority to canon&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Contributors: +2&lt;/p&gt;

&lt;p&gt;→ Full changelog: &lt;a href="https://github.com/mrveiss/AutoBot-AI/commits/Dev_new_gui?since=2026-06-22T05:00:02.773725Z" rel="noopener noreferrer"&gt;https://github.com/mrveiss/AutoBot-AI/commits/Dev_new_gui?since=2026-06-22T05:00:02.773725Z&lt;/a&gt;&lt;br&gt;
→ Discuss on GitHub: &lt;a href="https://github.com/mrveiss/AutoBot-AI/discussions" rel="noopener noreferrer"&gt;https://github.com/mrveiss/AutoBot-AI/discussions&lt;/a&gt;&lt;/p&gt;

</description>
      <category>autobot</category>
      <category>ai</category>
      <category>automation</category>
      <category>weeklyupdate</category>
    </item>
    <item>
      <title>Weekly Update: ✨ fix: U7 #9926 leftover discoveries — hook over-block + git</title>
      <dc:creator>Mārtiņš Veiss</dc:creator>
      <pubDate>Mon, 22 Jun 2026 05:00:06 +0000</pubDate>
      <link>https://dev.to/mrveiss/weekly-update-fix-u7-9926-leftover-discoveries-hook-over-block-git-1faa</link>
      <guid>https://dev.to/mrveiss/weekly-update-fix-u7-9926-leftover-discoveries-hook-over-block-git-1faa</guid>
      <description>&lt;h2&gt;
  
  
  Weekly Update: ✨ fix: U7 #9926 leftover discoveries — hook over-block + git-cliff dropped commits (#10126, #10118) (#10433)
&lt;/h2&gt;

&lt;p&gt;This week we shipped:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔧 fix: U7 #9926 leftover discoveries — hook over-block + git-c&lt;/li&gt;
&lt;li&gt;🔧 chore(deps): bump the all-dependencies group across 1 direct&lt;/li&gt;
&lt;li&gt;🔧 chore(deps): raise backend dep floors to latest, ecosystem-c&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Contributors: +3&lt;/p&gt;

&lt;p&gt;→ Full changelog: &lt;a href="https://github.com/mrveiss/AutoBot-AI/commits/Dev_new_gui?since=2026-06-15T05:00:04.195437Z" rel="noopener noreferrer"&gt;https://github.com/mrveiss/AutoBot-AI/commits/Dev_new_gui?since=2026-06-15T05:00:04.195437Z&lt;/a&gt;&lt;br&gt;
→ Discuss on GitHub: &lt;a href="https://github.com/mrveiss/AutoBot-AI/discussions" rel="noopener noreferrer"&gt;https://github.com/mrveiss/AutoBot-AI/discussions&lt;/a&gt;&lt;/p&gt;

</description>
      <category>autobot</category>
      <category>ai</category>
      <category>automation</category>
      <category>weeklyupdate</category>
    </item>
    <item>
      <title>Weekly Update: ✨ feat(secrets): UnifiedSecretsService — envelope CRUD + sha</title>
      <dc:creator>Mārtiņš Veiss</dc:creator>
      <pubDate>Mon, 15 Jun 2026 05:00:07 +0000</pubDate>
      <link>https://dev.to/mrveiss/weekly-update-featsecrets-unifiedsecretsservice-envelope-crud-sha-1h2a</link>
      <guid>https://dev.to/mrveiss/weekly-update-featsecrets-unifiedsecretsservice-envelope-crud-sha-1h2a</guid>
      <description>&lt;h2&gt;
  
  
  Weekly Update: ✨ feat(secrets): UnifiedSecretsService — envelope CRUD + sharing (#10111) (#10134)
&lt;/h2&gt;

&lt;p&gt;This week we shipped:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔧 feat(secrets): UnifiedSecretsService — envelope CRUD + shari&lt;/li&gt;
&lt;li&gt;🔧 feat(llc/sprint): project timeline + Gantt view for sprint p&lt;/li&gt;
&lt;li&gt;🔧 feat(secrets): RBAC authorization policy (pure) — accessible&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Contributors: +2&lt;/p&gt;

&lt;p&gt;→ Full changelog: &lt;a href="https://github.com/mrveiss/AutoBot-AI/commits/Dev_new_gui?since=2026-06-08T05:00:03.682819Z" rel="noopener noreferrer"&gt;https://github.com/mrveiss/AutoBot-AI/commits/Dev_new_gui?since=2026-06-08T05:00:03.682819Z&lt;/a&gt;&lt;br&gt;
→ Discuss on GitHub: &lt;a href="https://github.com/mrveiss/AutoBot-AI/discussions" rel="noopener noreferrer"&gt;https://github.com/mrveiss/AutoBot-AI/discussions&lt;/a&gt;&lt;/p&gt;

</description>
      <category>autobot</category>
      <category>ai</category>
      <category>automation</category>
      <category>weeklyupdate</category>
    </item>
  </channel>
</rss>
