<?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: Shaiful Islam Shabuj</title>
    <description>The latest articles on DEV Community by Shaiful Islam Shabuj (@shaifulshabuj29).</description>
    <link>https://dev.to/shaifulshabuj29</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3638038%2Ff34ebf93-ad45-4cbc-b41e-cf72c2562c3b.png</url>
      <title>DEV Community: Shaiful Islam Shabuj</title>
      <link>https://dev.to/shaifulshabuj29</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shaifulshabuj29"/>
    <language>en</language>
    <item>
      <title>@teststop : AI-Powered Adversarial Testing With No Configuration</title>
      <dc:creator>Shaiful Islam Shabuj</dc:creator>
      <pubDate>Fri, 22 May 2026 15:17:16 +0000</pubDate>
      <link>https://dev.to/shaifulshabuj29/teststop-ai-powered-adversarial-testing-with-no-configuration-3a85</link>
      <guid>https://dev.to/shaifulshabuj29/teststop-ai-powered-adversarial-testing-with-no-configuration-3a85</guid>
      <description>&lt;p&gt;&lt;em&gt;v0.1.0 · &lt;a href="https://github.com/shaifulshabuj/teststop" rel="noopener noreferrer"&gt;github.com/shaifulshabuj/teststop&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;Every test suite ever written was written by someone who already knew how the system works.&lt;/p&gt;

&lt;p&gt;Real users don't. That's why production still surprises us. We call it test coverage. What we actually have is &lt;em&gt;assumption coverage&lt;/em&gt; — the set of things we imagined going wrong, written down, and checked. The things we didn't imagine are still there, waiting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;teststop&lt;/strong&gt; flips this. Instead of writing tests, you give AI a mandate to think like a real adversarial user — someone who never read the docs, opens the same form in two tabs, retries three times when the page is slow, and pastes emoji into a date field. AI already knows all of these patterns. It just needed the right instruction.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;go &lt;span class="nb"&gt;install &lt;/span&gt;github.com/shaifulshabuj/teststop/cmd/teststop@latest
teststop run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No API keys. No config file. &lt;code&gt;claude&lt;/code&gt; or &lt;code&gt;copilot&lt;/code&gt; CLI must be on your PATH — that's all.&lt;/p&gt;




&lt;h2&gt;
  
  
  What It Actually Gives You
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Zero-configuration adversarial scenarios
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;teststop run&lt;/code&gt; scans your project, detects the language and system type, composes an AI mandate from that context, and hands it to Claude or Copilot in non-interactive mode. You get back structured scenarios: what the adversarial user tries, what chaos they inject, what failure they expose.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;teststop run &lt;span class="nt"&gt;--depth&lt;/span&gt; aggressive &lt;span class="nt"&gt;--output&lt;/span&gt; json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output is JSON by default — machine-readable, agent-parseable, ready to pipe into your CI pipeline.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tests that reduce over time (not grow)
&lt;/h3&gt;

&lt;p&gt;Most testing tools add work forever. teststop does the opposite. It maintains a confidence score per system area in &lt;code&gt;.teststop/memory.json&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;+0.19 per passing scenario&lt;/li&gt;
&lt;li&gt;-0.30 per failure&lt;/li&gt;
&lt;li&gt;Areas at &lt;strong&gt;0.95+ confidence are retired&lt;/strong&gt; — teststop stops hammering them&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After ~15 clean passes, an area is proven stable and teststop moves on. The test surface shrinks as your system earns its confidence. Commit &lt;code&gt;memory.json&lt;/code&gt; to version control — it's the accumulated proof that your system works.&lt;/p&gt;

&lt;h3&gt;
  
  
  An AI mandate you can read and improve
&lt;/h3&gt;

&lt;p&gt;The mandate that drives AI behavior is &lt;code&gt;mandate/base.md&lt;/code&gt; — plain markdown, checked into the repo, readable and editable. It describes the adversarial user archetypes: the one who never reads docs, the one who double-clicks, the one who pastes unexpected input, the one who has a slow connection and a short fuse.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;teststop mandate &lt;span class="nt"&gt;--show&lt;/span&gt;   &lt;span class="c"&gt;# see exactly what AI receives&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The mandate is open — file a PR to improve the adversarial patterns for your domain.&lt;/p&gt;

&lt;h3&gt;
  
  
  Built for AI agent workflows
&lt;/h3&gt;

&lt;p&gt;Exit codes are designed for autonomous agents:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Code&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;th&gt;Agent action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Confidence met&lt;/td&gt;
&lt;td&gt;Safe to deploy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Below threshold&lt;/td&gt;
&lt;td&gt;Review required&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Critical failure&lt;/td&gt;
&lt;td&gt;Do NOT deploy&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;teststop run &lt;span class="nt"&gt;--output&lt;/span&gt; json &lt;span class="nt"&gt;--quiet&lt;/span&gt; &lt;span class="nt"&gt;--no-color&lt;/span&gt;
&lt;span class="c"&gt;# Exit 0: proceed. Exit 2: stop.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Apple Container sandbox isolation
&lt;/h3&gt;

&lt;p&gt;When you run teststop, AI executes inside an isolated Apple Container VM — not on your host. The mandate is passed as a CLI argument. AI outputs JSON to stdout. Your filesystem is never touched by the AI process.&lt;/p&gt;




&lt;h2&gt;
  
  
  Works Everywhere
&lt;/h2&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;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Languages&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Any — Go, Node, Python, Rust, and more auto-detected&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AI CLI&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Claude Code (&lt;code&gt;claude&lt;/code&gt;) or GitHub Copilot CLI (&lt;code&gt;copilot&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sandbox&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Apple Container (macOS arm64) or direct exec fallback&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CI&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;TESTSTOP_SANDBOX=none&lt;/code&gt; for Docker/non-macOS environments&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;p&gt;If you're shipping AI-assisted code and wondering whether your test suite is actually covering what real users do — teststop is the missing piece.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/shaifulshabuj/teststop" rel="noopener noreferrer"&gt;github.com/shaifulshabuj/teststop&lt;/a&gt;&lt;/strong&gt; · &lt;code&gt;go install github.com/shaifulshabuj/teststop/cmd/teststop@latest&lt;/code&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>testing</category>
      <category>claude</category>
      <category>opensource</category>
    </item>
    <item>
      <title>why is software development getting MORE complex every year — when the goal never changed?</title>
      <dc:creator>Shaiful Islam Shabuj</dc:creator>
      <pubDate>Mon, 18 May 2026 14:02:57 +0000</pubDate>
      <link>https://dev.to/shaifulshabuj29/why-is-software-development-getting-more-complex-every-year-when-the-goal-never-changed-hc</link>
      <guid>https://dev.to/shaifulshabuj29/why-is-software-development-getting-more-complex-every-year-when-the-goal-never-changed-hc</guid>
      <description>&lt;p&gt;Every software product ever built is the same three things.&lt;br&gt;
Input → Analyze → Output.&lt;br&gt;
A notepad. A banking system. An ERP. An AI assistant.&lt;br&gt;
All identical in shape. Only the analyzer changes.&lt;/p&gt;

&lt;p&gt;So why is software development getting MORE complex every year — when the goal never changed?&lt;br&gt;
I spent time mapping this out. The answer is uncomfortable.&lt;/p&gt;

&lt;p&gt;𝗧𝗵𝗲 𝗧𝗿𝗮𝗰𝗸𝗲𝗿'𝘀 𝗣𝗮𝗿𝗮𝗱𝗼𝘅&lt;br&gt;
Every tool built to manage work eventually becomes work itself.&lt;/p&gt;

&lt;p&gt;Not because the tool is bad. Because of a systemic pattern that every project tracker, documentation system, and workflow platform follows — regardless of how well it is designed:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Simple human problem: "Who is doing what? Is it done?"&lt;/li&gt;
&lt;li&gt;A good tool is built. Solves it at first.&lt;/li&gt;
&lt;li&gt;The tool creates its own complexity — config, plugins, training, admin roles&lt;/li&gt;
&lt;li&gt;A new role emerges to manage the tool full-time&lt;/li&gt;
&lt;li&gt;Teams run "tool cleanup sprints" to manage the tool that manages the work&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;↺ Then the replacement tool follows the exact same arc.&lt;/p&gt;

&lt;p&gt;𝗧𝗵𝗲 𝗻𝘂𝗺𝗯𝗲𝗿𝘀 𝗳𝗼𝗿 𝗮 𝗺𝗶𝗱-𝘀𝗶𝘇𝗲 𝘁𝗲𝗮𝗺: &lt;br&gt;
Tool overhead — licensing, admin salaries, training, and developer time spent managing the tool instead of building.&lt;/p&gt;

&lt;p&gt;The original question — "is the work getting done?" — is often harder to answer than ever.&lt;/p&gt;

&lt;p&gt;𝗧𝗵𝗲 𝗿𝗼𝗼𝘁 𝗰𝗮𝘂𝘀𝗲:&lt;br&gt;
The Semantic Gap — the distance between human intent (contextual, meaningful, fuzzy) and machine execution (literal, precise, syntactic).&lt;/p&gt;

&lt;p&gt;Every layer of tooling complexity exists to bridge this gap manually. Each bridge needs its own bridge. The industry calls this progress.&lt;/p&gt;

&lt;p&gt;𝗧𝗵𝗲 𝗽𝗿𝗼𝗽𝗼𝘀𝗲𝗱 𝗲𝘅𝗶𝘁:&lt;br&gt;
One product. Intent in. Value out. Nothing in between.&lt;/p&gt;

&lt;p&gt;Not a tool that tracks work — a system that ensures the work gets done.&lt;br&gt;
Not a documentation system — a system that preserves the WHY so nobody ever has to ask.&lt;/p&gt;

&lt;p&gt;The loop breaks when the only interface is natural language and the output is the actual value. No config. No admin. No training spiral. No cleanup sprints.&lt;/p&gt;

&lt;p&gt;𝗧𝗵𝗶𝘀 𝗶𝘀 𝘄𝗵𝘆 𝗜'𝗺 𝗯𝘂𝗶𝗹𝗱𝗶𝗻𝗴:&lt;br&gt;
→ 𝗗𝗼𝗰𝘂𝗙𝗹𝗼𝘄: captures WHY decisions were made — not static docs, but the living theory of the system. Gives AI the domain context to be genuinely useful.&lt;br&gt;
Github: &lt;a href="https://lnkd.in/gfPUYbBd" rel="noopener noreferrer"&gt;github/docuflow&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;→ 𝗪𝗮𝘆𝗺𝗮𝗿𝗸: makes AI agent actions transparent and auditable. Builds the trust that lets humans step back — gradually, verifiably, permanently.&lt;br&gt;
Github: &lt;a href="https://lnkd.in/gGcPeGyF" rel="noopener noreferrer"&gt;github/waymark&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Both are designed with exit conditions. Success means users need them LESS over time — not more.&lt;/p&gt;

&lt;p&gt;𝗧𝗵𝗲 𝗼𝗻𝗲 𝗾𝘂𝗲𝘀𝘁𝗶𝗼𝗻 𝗜 𝗮𝘀𝗸 𝗲𝘃𝗲𝗿𝘆 𝘄𝗲𝗲𝗸:&lt;br&gt;
"Does this make the user's problem easier to solve — or our system easier to build?"&lt;/p&gt;

&lt;p&gt;If it's the second one: accidental complexity. Cut it.&lt;/p&gt;

&lt;p&gt;The goal was never the software.&lt;br&gt;
It was always the value on the other side of it.&lt;/p&gt;

&lt;p&gt;What pattern have you seen the Tracker's Paradox play out in?&lt;/p&gt;

&lt;p&gt;Check more details on my &lt;a href="https://www.linkedin.com/posts/shaifulshabuj_softwareengineering-productdevelopment-softwarearchitecture-ugcPost-7461730048954474496-ASZF?utm_source=share&amp;amp;utm_medium=member_desktop&amp;amp;rcm=ACoAABgCBxsBsrHtDVUlnksli6p6YDjB3dnrr8k" rel="noopener noreferrer"&gt;Linkedin/post&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>opensource</category>
      <category>security</category>
    </item>
    <item>
      <title>Waymark v4.7.0 is Live — The Ultimate MCP Security Layer</title>
      <dc:creator>Shaiful Islam Shabuj</dc:creator>
      <pubDate>Fri, 15 May 2026 06:23:03 +0000</pubDate>
      <link>https://dev.to/shaifulshabuj29/waymark-v470-is-live-the-ultimate-mcp-security-layer-3a9j</link>
      <guid>https://dev.to/shaifulshabuj29/waymark-v470-is-live-the-ultimate-mcp-security-layer-3a9j</guid>
      <description>&lt;p&gt;&lt;strong&gt;Just shipped&lt;/strong&gt;: 30% faster policy enforcement, real-time approvals dashboard, and better error messages.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem We Solve
&lt;/h2&gt;

&lt;p&gt;AI agents like Claude are awesome for code generation, but they can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;😱 Read your &lt;code&gt;.env&lt;/code&gt; files&lt;/li&gt;
&lt;li&gt;💥 Delete entire directories&lt;/li&gt;
&lt;li&gt;🗂️ Modify sensitive database schemas&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Waymark prevents this&lt;/strong&gt; by sitting between your agent and the MCP tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's New
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ⚡ Performance
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Policy evaluation: &lt;strong&gt;30% faster&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Dashboard renders: &lt;strong&gt;50% lighter&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;New indexed database queries&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Better UX
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Clearer error messages with reasons&lt;/li&gt;
&lt;li&gt;New CLI commands for testing policies&lt;/li&gt;
&lt;li&gt;Real-time action telemetry&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔐 Security Improvements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Fixed symlink bypass issue&lt;/li&gt;
&lt;li&gt;Transactional approval workflow&lt;/li&gt;
&lt;li&gt;Immutable policy versions&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Quick Example
&lt;/h2&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;"allowedPaths"&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;"./src/**"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"blockedPaths"&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;".env"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"secrets/"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"requireApproval"&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;"./migrations/**"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"blockedCommands"&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;"rm -rf"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"DROP TABLE"&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;→ Now Claude can write code safely while sensitive files stay protected.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Numbers
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Read allowed file&lt;/td&gt;
&lt;td&gt;ALLOW ✅&lt;/td&gt;
&lt;td&gt;Works&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Read blocked file&lt;/td&gt;
&lt;td&gt;BLOCK ❌&lt;/td&gt;
&lt;td&gt;Blocked&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Write requires approval&lt;/td&gt;
&lt;td&gt;PENDING ⏳&lt;/td&gt;
&lt;td&gt;Dashboard review&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dangerous command&lt;/td&gt;
&lt;td&gt;BLOCK ❌&lt;/td&gt;
&lt;td&gt;Blocked&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Safe shell command&lt;/td&gt;
&lt;td&gt;ALLOW ✅&lt;/td&gt;
&lt;td&gt;Works&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;100% policy enforcement&lt;/strong&gt; across all scenarios.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get Started in 2 Minutes
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @way_marks/cli@latest
npx @way_marks/cli init &lt;span class="nt"&gt;--template&lt;/span&gt; secure
npx @way_marks/cli start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your dashboard opens at &lt;strong&gt;&lt;a href="http://localhost:47000" rel="noopener noreferrer"&gt;http://localhost:47000&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Key Features
&lt;/h2&gt;

&lt;p&gt;✅ &lt;strong&gt;Real-time policy enforcement&lt;/strong&gt; — Every MCP call is validated&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;Approval workflows&lt;/strong&gt; — Human review for sensitive changes&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;Full audit trail&lt;/strong&gt; — Every action is logged to SQLite&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;Dashboard UI&lt;/strong&gt; — View policies, stats, action history&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;Zero breaking changes&lt;/strong&gt; — Upgrade from v4.6.x safely&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;CLI tools&lt;/strong&gt; — Test policies before deployment  &lt;/p&gt;




&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;p&gt;🚀 &lt;strong&gt;v4.8.0 (Q3 2026)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multi-agent coordination&lt;/li&gt;
&lt;li&gt;Browser IDE extension&lt;/li&gt;
&lt;li&gt;Cloud-hosted dashboard&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Check the tool
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/waymarks/waymark" rel="noopener noreferrer"&gt;github/waymark&lt;/a&gt;&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;&lt;code&gt;npm install -g @way_marks/cli&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Waymark v4.7.0 is ready.&lt;/strong&gt; Download it today and build with confidence.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Safe AI collaboration starts here.&lt;/em&gt; 🚀&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Published May 15, 2026 · Open source · MIT License&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>claude</category>
      <category>productivity</category>
    </item>
    <item>
      <title>5 Startup Ideas Hidden Inside Japan's $130B IT Market (Nobody Built These Yet)</title>
      <dc:creator>Shaiful Islam Shabuj</dc:creator>
      <pubDate>Thu, 14 May 2026 16:54:47 +0000</pubDate>
      <link>https://dev.to/shaifulshabuj29/5-startup-ideas-hidden-inside-japans-130b-it-market-nobody-built-these-yet-3k6b</link>
      <guid>https://dev.to/shaifulshabuj29/5-startup-ideas-hidden-inside-japans-130b-it-market-nobody-built-these-yet-3k6b</guid>
      <description>&lt;p&gt;Japan is the world's third-largest economy. It has &lt;strong&gt;1.2 million&lt;br&gt;
 software engineers&lt;/strong&gt;. And most of them spend their workday in Excel.&lt;/p&gt;

&lt;p&gt;Not writing code. Writing specs. In spreadsheets.&lt;/p&gt;

&lt;p&gt;I spent time researching Japan's IT industry and found five deep,&lt;br&gt;
 structural pain points that have no good software solution yet. Each one has a clear product gap. Here they are:&lt;/p&gt;




&lt;p&gt;## Pain #1 — Excel Hell&lt;/p&gt;

&lt;p&gt;Japanese engineers at large system integrators (called SIers) deliver&lt;br&gt;
  Excel files as their primary output. Test case matrices, architecture&lt;br&gt;
  diagrams, design specs — all in grid format, never in version control.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;76% of Japanese companies have documentation outdated by at least&lt;br&gt;
  one version&lt;/strong&gt; (2026 survey).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Product gap: SpecSync&lt;/strong&gt; — a CLI that parses Excel spec files and&lt;br&gt;
  converts them into versioned, searchable Markdown synced to Git.&lt;br&gt;
  Open-source core, paid cloud sync. No competitor targets this workflow.&lt;/p&gt;




&lt;p&gt;## Pain #2 — Siloed Knowledge (属人化)&lt;/p&gt;

&lt;p&gt;Over &lt;strong&gt;70% of Japanese companies&lt;/strong&gt; report that critical system&lt;br&gt;
  knowledge lives exclusively in one person's head. When they retire,&lt;br&gt;
  the knowledge goes with them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Product gap: TribeMind&lt;/strong&gt; — indexes Git history, PR comments, and&lt;br&gt;
  Slack logs into a queryable knowledge base. Ask why a module was&lt;br&gt;
  built a certain way — get an answer from years of commit context.&lt;/p&gt;




&lt;p&gt;## Pain #3 — The Language Wall&lt;/p&gt;

&lt;p&gt;Japan ranks &lt;strong&gt;92nd globally in English proficiency&lt;/strong&gt;, yet employs&lt;br&gt;
  over 90,000 foreign IT workers. Spec miscommunication between Japanese&lt;br&gt;
  clients and offshore English-speaking teams causes real project&lt;br&gt;
  failures.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Product gap: BridgeSE&lt;/strong&gt; — converts Japanese requirements documents&lt;br&gt;
  into English, detects unstated cultural assumptions, and generates&lt;br&gt;
  bilingual handoff packets. DeepL doesn't do this. Google Translate&lt;br&gt;
  doesn't either.&lt;/p&gt;




&lt;p&gt;## Pain #4 — Reporting Hell&lt;/p&gt;

&lt;p&gt;Japanese engineers have adopted AI for coding. But the administrative&lt;br&gt;
  overhead — weekly progress reports, formal meeting minutes — hasn't&lt;br&gt;
  dropped.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Product gap: StandupAI&lt;/strong&gt; — monitors Git commits and Jira activity,&lt;br&gt;
  auto-generates formal Japanese progress reports (進捗報告書) in proper&lt;br&gt;
  business keigo style. CLI + VS Code extension.&lt;/p&gt;




&lt;p&gt;## Pain #5 — The Legacy Cliff&lt;/p&gt;

&lt;p&gt;Japan's enterprise infrastructure includes &lt;strong&gt;COBOL systems from the&lt;br&gt;
  1970s&lt;/strong&gt;, Java monoliths from the 2000s, and Classic ASP still running&lt;br&gt;
  on-premise in 2026. Nobody understands the full picture anymore.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Product gap: LegacyMap&lt;/strong&gt; — deep-scans a codebase and outputs a&lt;br&gt;
  system map, dependency graph, risk heat map, and plain-language&lt;br&gt;
  narrative for each component. B2B — sold to banks, manufacturers,&lt;br&gt;
  and retailers.&lt;/p&gt;




&lt;p&gt;## Watch the full breakdown&lt;/p&gt;

&lt;p&gt;I made a short video on this (under 4 minutes, no fluff). It's my&lt;br&gt;
  first YouTube video and it's available on youtube.&lt;/p&gt;

&lt;p&gt;👉 &lt;em&gt;&lt;a href="https://youtu.be/o-w8jlEH3mg?si=5l3O1Eo7cliPhYS3" rel="noopener noreferrer"&gt;YouTube link&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Which of the five would you build? Drop it in the comments here or on&lt;br&gt;
  YouTube.&lt;/p&gt;

</description>
      <category>startup</category>
      <category>japan</category>
      <category>webdev</category>
      <category>career</category>
    </item>
    <item>
      <title>Waymark: The Control Layer Your AI Coding Agent Was Missing</title>
      <dc:creator>Shaiful Islam Shabuj</dc:creator>
      <pubDate>Tue, 12 May 2026 15:47:02 +0000</pubDate>
      <link>https://dev.to/shaifulshabuj29/waymark-the-control-layer-your-ai-coding-agent-was-missing-1ch6</link>
      <guid>https://dev.to/shaifulshabuj29/waymark-the-control-layer-your-ai-coding-agent-was-missing-1ch6</guid>
      <description>&lt;p&gt;&lt;em&gt;v4.5.0 · &lt;a href="https://www.npmjs.com/package/@way_marks/cli" rel="noopener noreferrer"&gt;@way_marks/cli&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;AI coding agents are getting good at writing code. The problem is they're just as good at touching files they shouldn't, running commands you didn't ask for, and doing it all without leaving a paper trail.&lt;/p&gt;

&lt;p&gt;Waymark sits between your agent and your codebase. Every file write and shell command gets intercepted, logged, and checked against your policy — before it happens.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @way_marks/cli
waymark init   &lt;span class="c"&gt;# registers with Claude Code or GitHub Copilot CLI&lt;/span&gt;
waymark start  &lt;span class="c"&gt;# spins up the MCP server + dashboard&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  What It Actually Gives You
&lt;/h2&gt;

&lt;h3&gt;
  
  
  A policy that runs before the agent does anything
&lt;/h3&gt;

&lt;p&gt;One config file. Three layers of control:&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;"allowedPaths"&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;"src/**"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tests/**"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"blockedPaths"&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;".env"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"*.pem"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"*.key"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"requireApproval"&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;"package.json"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Dockerfile"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"blockedCommands"&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;"rm -rf"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"regex:curl.*-o&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;s+/"&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;ul&gt;
&lt;li&gt;
&lt;strong&gt;Allow&lt;/strong&gt; — executed and logged automatically&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Block&lt;/strong&gt; — stopped cold, agent gets a clear reason&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Require Approval&lt;/strong&gt; — agent waits, you decide from the dashboard or Slack&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The agent never touches &lt;code&gt;.env&lt;/code&gt;. It never runs &lt;code&gt;rm -rf&lt;/code&gt;. And before it rewrites your &lt;code&gt;Dockerfile&lt;/code&gt;, it asks.&lt;/p&gt;




&lt;h3&gt;
  
  
  Every write is reversible
&lt;/h3&gt;

&lt;p&gt;Before any file change goes through, Waymark snapshots the original. One click in the dashboard restores it — or you roll back an entire agent session at once. No git stash gymnastics, no "what did it do exactly."&lt;/p&gt;




&lt;h3&gt;
  
  
  A live view of every agent on your machine
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;waymark agents

Agent     PID    Status      Ctx%  Tokens   Task                         Age
copilot   39897  thinking     52%  146,032  Refactor auth middleware       1m
claude    64586  waiting      37%   75,060  &lt;span class="o"&gt;(&lt;/span&gt;idle&lt;span class="o"&gt;)&lt;/span&gt;                        12m
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Context-window fill, token count, current task, tool calls — all live, all local. Nothing leaves the machine.&lt;/p&gt;




&lt;h3&gt;
  
  
  Approvals that don't kill your flow
&lt;/h3&gt;

&lt;p&gt;When an action hits a &lt;code&gt;requireApproval&lt;/code&gt; path, Waymark sends a Slack message with Approve / Reject buttons. The agent waits. You approve from your phone. Work continues. The dashboard shows the full audit trail: what was requested, who approved it, what changed.&lt;/p&gt;




&lt;h3&gt;
  
  
  Works where you already work
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Claude Desktop / Claude Code&lt;/td&gt;
&lt;td&gt;✅ Full support&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub Copilot CLI&lt;/td&gt;
&lt;td&gt;✅ Full support&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub Copilot Chat (VSCode)&lt;/td&gt;
&lt;td&gt;⏳ Waiting for GitHub MCP&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Setup is the same regardless of platform — &lt;code&gt;waymark init&lt;/code&gt; picks it up.&lt;/p&gt;




&lt;p&gt;The pitch is simple: AI agents move fast. Waymark makes sure they move in the right direction.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/waymarks/waymark" rel="noopener noreferrer"&gt;github/waymark&lt;/a&gt;&lt;/strong&gt; · &lt;code&gt;npm install -g @way_marks/cli&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Previous posts of waymarks: &lt;br&gt;
&lt;strong&gt;&lt;a href="https://dev.to/shaifulshabuj29/how-i-stopped-worrying-about-claude-code-touching-files-it-shouldnt-49a3"&gt;how-i-stopped-worrying-about-claude-code-touching-files-it-shouldnt&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>githubcopilot</category>
      <category>security</category>
    </item>
    <item>
      <title>DocuFlow: Give Your AI Agent a Persistent Memory for Your Codebase</title>
      <dc:creator>Shaiful Islam Shabuj</dc:creator>
      <pubDate>Sun, 10 May 2026 11:10:41 +0000</pubDate>
      <link>https://dev.to/shaifulshabuj29/docuflow-give-your-ai-agent-a-persistent-memory-for-your-codebase-5afm</link>
      <guid>https://dev.to/shaifulshabuj29/docuflow-give-your-ai-agent-a-persistent-memory-for-your-codebase-5afm</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; — DocuFlow is an open-source MCP server that gives AI agents (Claude, Copilot, Cursor) a persistent, structured wiki about your codebase. Instead of re-explaining your project every session, your agent reads once, remembers forever, and builds on previous knowledge.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm install -g @doquflow/cli &amp;amp;&amp;amp; docuflow init&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Problem: AI Agents Have Goldfish Memory
&lt;/h2&gt;

&lt;p&gt;Here's a conversation most of us have had:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;You:&lt;/strong&gt; "Add a rate limiter to the auth routes."&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Agent:&lt;/strong&gt; "Sure! What authentication library are you using?"&lt;br&gt;&lt;br&gt;
&lt;strong&gt;You:&lt;/strong&gt; "...we've been using JWT for the last 6 sessions."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Every new conversation, your AI agent starts from scratch. It re-reads files, re-discovers patterns, re-asks the same questions. This gets worse as your codebase grows. By the time you've given enough context to be useful, your context window is half-burned.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The standard answer is RAG&lt;/strong&gt; (Retrieval-Augmented Generation). Pull relevant files, chunk them, embed them, retrieve on demand. But RAG has a hidden cost: &lt;em&gt;the LLM does the same extraction work on every single query.&lt;/em&gt; There's no accumulation. Knowledge doesn't compound.&lt;/p&gt;

&lt;h2&gt;
  
  
  The LLM Wiki Pattern
&lt;/h2&gt;

&lt;p&gt;DocuFlow implements a different approach called the &lt;strong&gt;LLM Wiki pattern&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Raw Sources (immutable)
       ↓ ingest once
Wiki Layer (LLM-maintained markdown pages)
       ↓ query anytime
Synthesized Answers + Citations
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The key insight: &lt;strong&gt;let the LLM do the bookkeeping once, then compound that work.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When you add a new source document, DocuFlow reads it, extracts entities and concepts, integrates them into an existing wiki, updates cross-references, and flags contradictions. The next query is better because the wiki is richer — not because you did more chunking.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducing DocuFlow
&lt;/h2&gt;

&lt;p&gt;DocuFlow is an &lt;strong&gt;MCP server&lt;/strong&gt; (Model Context Protocol) that works with Claude, Copilot, Cursor, and any other MCP-compatible agent. It provides 15 tools organized into four groups:&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;Tools&lt;/th&gt;
&lt;th&gt;What they do&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Code Extraction&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;read_module&lt;/code&gt;, &lt;code&gt;list_modules&lt;/code&gt;, &lt;code&gt;write_spec&lt;/code&gt;, &lt;code&gt;read_specs&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Scan files → extract classes, endpoints, DB tables, deps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wiki Pipeline&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;ingest_source&lt;/code&gt;, &lt;code&gt;query_wiki&lt;/code&gt;, &lt;code&gt;wiki_search&lt;/code&gt;, &lt;code&gt;save_answer_as_page&lt;/code&gt;, …&lt;/td&gt;
&lt;td&gt;Build and query the living wiki&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Health&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;lint_wiki&lt;/code&gt;, &lt;code&gt;get_schema_guidance&lt;/code&gt;, &lt;code&gt;preview_generation&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Keep the wiki accurate and complete&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dependency Graph&lt;/td&gt;
&lt;td&gt;&lt;code&gt;generate_dependency_graph&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Visual map of imports, shared tables, and coupling&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Plus an &lt;strong&gt;8-command CLI&lt;/strong&gt; and a &lt;strong&gt;React web UI&lt;/strong&gt; — all from a single &lt;code&gt;npm install&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Real Example: The TaskFlow API
&lt;/h2&gt;

&lt;p&gt;Let me walk through a real project. I have a TypeScript REST API called TaskFlow — JWT auth, RBAC, PostgreSQL, Express. The kind of project where every new developer asks the same 10 questions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Initialize
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;taskflow-api
docuflow init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This creates &lt;code&gt;.docuflow/&lt;/code&gt; in your project, registers the MCP server in Claude/Copilot, and writes a &lt;code&gt;CLAUDE.md&lt;/code&gt; that auto-loads when your agent starts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Write source documents
&lt;/h3&gt;

&lt;p&gt;DocuFlow's wiki starts from &lt;em&gt;your&lt;/em&gt; curated docs — markdown files you drop into &lt;code&gt;.docuflow/sources/&lt;/code&gt;. These are the authoritative descriptions you write once:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.docuflow/sources/
├── overview.md         # What this project is, tech stack, env vars
├── auth-security.md    # JWT lifecycle, bcrypt, RBAC, rate limiting
├── architecture.md     # System diagram, request lifecycle, DB schema
├── api-reference.md    # REST endpoints with request/response examples
└── developer-guide.md  # Setup, conventions, deployment
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Sync
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docuflow &lt;span class="nb"&gt;sync&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;DocuFlow ingests all 5 sources and generates &lt;strong&gt;71 wiki pages&lt;/strong&gt; — each entity, concept, and relationship gets its own page with cross-references:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;✓ Ingested overview.md          → 12 pages (JWT Authentication, RBAC, Rate Limiter, …)
✓ Ingested auth-security.md     → 18 pages (Access Token, Refresh Token, bcrypt, …)
✓ Ingested architecture.md      → 16 pages (Connection Pool, Task State Machine, …)
✓ Ingested api-reference.md     → 14 pages (POST /auth/login, GET /tasks/:id, …)
✓ Ingested developer-guide.md   → 11 pages (Environment Setup, Deployment, …)
Health: 96/100 · 71 pages · 5 sources
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now every AI session that opens this project can immediately answer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;You:&lt;/strong&gt; "Explain the token refresh flow."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agent (reading wiki, not re-scanning files):&lt;/strong&gt; "TaskFlow uses short-lived access tokens (15 min) paired with rotating refresh tokens (7 days). On expiry, the client POSTs to &lt;code&gt;/auth/refresh&lt;/code&gt; with the refresh token in a &lt;code&gt;httpOnly&lt;/code&gt; cookie. The server validates against the stored hash, issues a new access token, and rotates the refresh token. In production, a Redis denylist handles immediate revocation…"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The agent didn't read &lt;code&gt;auth.ts&lt;/code&gt;. It read the wiki page for &lt;strong&gt;Refresh Token&lt;/strong&gt; — which already has the context, cross-references to &lt;strong&gt;Access Token&lt;/strong&gt; and &lt;strong&gt;JWT Authentication&lt;/strong&gt;, and a link to the source document.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: The Web UI
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docuflow ui
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Opens &lt;code&gt;http://localhost:48821&lt;/code&gt; — a live React interface with six views:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ask&lt;/strong&gt; — Type any question, get a synthesized answer with source citations:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Ask view showing JWT auth question with synthesized answer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Wiki&lt;/strong&gt; — Browse all 71 pages organized as Entities, Concepts, Syntheses, Timelines:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Wiki tree with entity pages listed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Graph&lt;/strong&gt; — Your entire knowledge base as an interactive D3 force graph. Each node is a wiki page; edges are cross-references:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Graph view with color-coded node clusters, zoomed into auth cluster showing JWT Authentication hub
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Health&lt;/strong&gt; — Real-time quality score (96/100) with actionable issues:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Health dashboard showing score gauge and orphan page list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The UI auto-discovers all DocuFlow projects in &lt;code&gt;~/dev&lt;/code&gt;, &lt;code&gt;~/code&lt;/code&gt;, &lt;code&gt;~/Desktop&lt;/code&gt;. Drop a project picker in the corner, switch between all your codebases.&lt;/p&gt;




&lt;h2&gt;
  
  
  What AI Agents Can Do With It
&lt;/h2&gt;

&lt;p&gt;Once DocuFlow is registered, your agent gets a new vocabulary. Instead of:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Let me read your package.json, then src/auth.ts, then… can you paste your middleware?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The agent uses MCP tools:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;→ query_wiki("How does authentication work?")
← Synthesized answer: JWT with refresh rotation, bcrypt, RBAC middleware...
   Sources: [entity/jwt_authentication, entity/refresh_token, concept/rbac]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;→ generate_dependency_graph({ focus: "auth" })
← auth.ts imports: jsonwebtoken, bcryptjs, pg
  Shared tables with users.ts: "users"
  Most connected: auth.ts (hub for 4 modules)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;→ lint_wiki()
← Health: 96/100
  Issues: 3 orphan pages, 1 stale concept
  Recommendation: link "Rate Limiter" from "Security Headers" page
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Knowledge compounds across sessions. If the agent answers a complex question and saves it back:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;→ save_answer_as_page({ question: "What happens when a refresh token expires?",
                         answer: "...", category: "synthesis" })
← Saved: wiki/syntheses/what_happens_when_refresh_token_expires.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That page is now part of the wiki. The next agent to ask gets a better, richer answer — without anyone repeating themselves.&lt;/p&gt;




&lt;h2&gt;
  
  
  The CLI at a Glance
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docuflow init               &lt;span class="c"&gt;# Init + MCP registration&lt;/span&gt;
docuflow init &lt;span class="nt"&gt;--interactive&lt;/span&gt; &lt;span class="c"&gt;# Guided domain setup (Code/Research/Business/Personal)&lt;/span&gt;
docuflow status             &lt;span class="c"&gt;# Wiki stats, health score, version&lt;/span&gt;
docuflow suggest            &lt;span class="c"&gt;# 5 prioritized starting-point suggestions&lt;/span&gt;
docuflow &lt;span class="nb"&gt;sync&lt;/span&gt;               &lt;span class="c"&gt;# Re-ingest all sources, rebuild index&lt;/span&gt;
docuflow &lt;span class="nb"&gt;sync&lt;/span&gt; &lt;span class="nt"&gt;--ai&lt;/span&gt;          &lt;span class="c"&gt;# Sync + AI-powered doc generation&lt;/span&gt;
docuflow watch              &lt;span class="c"&gt;# Background daemon — ingests new sources in &amp;lt;1s&lt;/span&gt;
docuflow review &lt;span class="nt"&gt;--staged&lt;/span&gt;    &lt;span class="c"&gt;# Review staged git changes for issues&lt;/span&gt;
docuflow ui                 &lt;span class="c"&gt;# Start web interface on port 48821&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Multi-Language, Multi-Domain
&lt;/h2&gt;

&lt;p&gt;DocuFlow's extraction engine is regex-based and language-agnostic. It works on &lt;strong&gt;TypeScript, JavaScript, Python, Go, Ruby, Java, C#, PHP, SQL&lt;/strong&gt; — extracting classes, functions, imports, REST endpoints, DB tables, and environment variable references from any of them.&lt;/p&gt;

&lt;p&gt;And it's not just for code. The domain system supports &lt;strong&gt;Research&lt;/strong&gt;, &lt;strong&gt;Business&lt;/strong&gt;, and &lt;strong&gt;Personal&lt;/strong&gt; knowledge bases too. The schema adapts, the wiki page templates change, the &lt;code&gt;suggest&lt;/code&gt; command gives domain-appropriate recommendations.&lt;/p&gt;




&lt;h2&gt;
  
  
  Under the Hood
&lt;/h2&gt;

&lt;p&gt;DocuFlow is a standard MCP server built with &lt;code&gt;@modelcontextprotocol/sdk&lt;/code&gt;. It runs as a local subprocess — Claude or Copilot connects to it via stdio, same as any other MCP tool. The web UI is a single Express server on port 48821 that serves both the React frontend and a REST API bridge to the same 15 MCP tools.&lt;/p&gt;

&lt;p&gt;Everything lives in &lt;code&gt;.docuflow/&lt;/code&gt; in your project directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.docuflow/
├── sources/       ← Your curated inputs (immutable)
├── wiki/          ← LLM-generated pages (entities, concepts, syntheses, timelines)
├── specs/         ← Agent-written technical specs
├── schema.md      ← Domain config (customize the wiki structure)
├── index.md       ← Auto-maintained page catalog
└── log.md         ← Operation history
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The wiki is plain markdown files on disk — git-trackable, diffable, portable. No database, no cloud service, no API keys required.&lt;/p&gt;




&lt;h2&gt;
  
  
  Getting Started in 5 Minutes
&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;# Install globally&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @doquflow/cli

&lt;span class="c"&gt;# Initialize your project&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;your-project
docuflow init

&lt;span class="c"&gt;# Write your first source document&lt;/span&gt;
&lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; .docuflow/sources/overview.md &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="no"&gt;EOF&lt;/span&gt;&lt;span class="sh"&gt;'
# My Project
What it does, the tech stack, key concepts...
&lt;/span&gt;&lt;span class="no"&gt;EOF

&lt;/span&gt;&lt;span class="c"&gt;# Ingest and start the UI&lt;/span&gt;
docuflow &lt;span class="nb"&gt;sync&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; docuflow ui
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then open Claude/Copilot and ask anything about your project. The wiki is already loaded.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;DocuFlow is at &lt;strong&gt;v1.5.1&lt;/strong&gt; and actively developed. On the roadmap:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Auto-sync on git hooks&lt;/strong&gt; — wiki updates automatically on every commit&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Team mode&lt;/strong&gt; — shared wiki across a team, conflict-free merge&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;More MCP clients&lt;/strong&gt; — first-class support for Windsurf, Zed, VS Code Chat&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;npm:&lt;/strong&gt; &lt;a href="https://www.npmjs.com/package/@doquflow/cli" rel="noopener noreferrer"&gt;&lt;code&gt;@doquflow/cli&lt;/code&gt;&lt;/a&gt; and &lt;a href="https://www.npmjs.com/package/@doquflow/server" rel="noopener noreferrer"&gt;&lt;code&gt;@doquflow/server&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/doquflows/docuflow" rel="noopener noreferrer"&gt;doquflows/docuflow&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Email:&lt;/strong&gt; &lt;a href="//docuflow@sshabuj.com"&gt;docuflow@sshabuj.com&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're tired of re-explaining your codebase to an AI that forgot everything overnight, give DocuFlow a try. Your future self — and your future agent — will thank you.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built with TypeScript, @modelcontextprotocol/sdk, D3, React 18, Express.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Plus: &lt;a href="https://dev.to/shaifulshabuj29/how-i-stopped-worrying-about-claude-code-touching-files-it-shouldnt-49a3"&gt;waymark, tracking the agent's actions&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>devtool</category>
      <category>documentation</category>
    </item>
    <item>
      <title>How I stopped worrying about Claude Code touching files it shouldn't</title>
      <dc:creator>Shaiful Islam Shabuj</dc:creator>
      <pubDate>Wed, 08 Apr 2026 01:03:15 +0000</pubDate>
      <link>https://dev.to/shaifulshabuj29/how-i-stopped-worrying-about-claude-code-touching-files-it-shouldnt-49a3</link>
      <guid>https://dev.to/shaifulshabuj29/how-i-stopped-worrying-about-claude-code-touching-files-it-shouldnt-49a3</guid>
      <description>&lt;p&gt;Claude Code is powerful. &lt;br&gt;
It can also silently write to your .env or run rm -rf.&lt;br&gt;
You find out after it happens.&lt;/p&gt;

&lt;p&gt;Waymark is an MCP server that intercepts&lt;br&gt;
every agent action before it executes...&lt;/p&gt;

&lt;p&gt;Waymark sits between an AI agent (Claude Desktop, Claude Code) and the filesystem. Every write_file, read_file, and bash call passes through Waymark before execution. Waymark:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Checks policy — blocks or queues the action if it violates waymark.config.json&lt;/li&gt;
&lt;li&gt;Logs to SQLite — records every action with full input, output, and policy decision&lt;/li&gt;
&lt;li&gt;Exposes a web UI — live dashboard at &lt;a href="http://localhost:3001" rel="noopener noreferrer"&gt;http://localhost:3001&lt;/a&gt; showing all actions&lt;/li&gt;
&lt;li&gt;Supports rollback — restores any overwritten file, or deletes any newly created file&lt;/li&gt;
&lt;li&gt;Approval flow — pending actions can be approved (executes the action) or rejected from the UI or Slack&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Setup: &lt;br&gt;
&lt;code&gt;cd your-project&lt;br&gt;
npx @way_marks/cli init&lt;br&gt;
npx @way_marks/cli start&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fye71p6w5ig8tqyt5lzct.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%2Fye71p6w5ig8tqyt5lzct.png" alt="Waymarks dashboard" width="800" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What policies would you add to the default config? &lt;br&gt;
What files should be protected that aren't already?&lt;/p&gt;

&lt;p&gt;&lt;a href="//github.com/waymarks/waymark"&gt;github/waymarks&lt;/a&gt;&lt;br&gt;
&lt;a href="//npmjs.com/package/@way_marks/cli"&gt;npmjs/waymarks&lt;/a&gt;&lt;br&gt;
&lt;a href="//waymark@sshabuj.com"&gt;email/shabuj&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Plus: &lt;a href="https://dev.to/shaifulshabuj29/docuflow-give-your-ai-agent-a-persistent-memory-for-your-codebase-5afm"&gt;docuflow, llm-wiki based documentation using AI agent&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>claude</category>
      <category>mcp</category>
      <category>claudecode</category>
      <category>agents</category>
    </item>
  </channel>
</rss>
