How I Shipped Production AI Agents in One Week — With Real Domains, Websites, Apps, APIs, and Skills Serving Online Traffic

Hi, I’ve been busy working on two production-grade AI Agent projects, and both are now live online, released on Product Hunt (one reached #36 of the day rank among 200+ products), and actively serving real user traffic.

I’d like to share some of the experiences, technology stack, development process, deployment lessons, and the actual costs involved in building and serving these AI agents. More importantly, I want to show how ideas can quickly become working applications.

First of all, these are not “vibe-coded” rushed projects. Turning ideas into production-ready code, design, deployment, and debugging within one week was still much faster than I expected.

The first project is Craftsman-Agent(https://craftsman-agent.aiagenta2z.com), which turns prompts into buildable 3D assembly charts and step-by-step instructions for creations such as LEGO builds, Minecraft structures, Tesla car wraps, and more.

The platform is designed for creativity and play, targeting:

  • game hobbyists
  • parents and kids
  • 3D design prototyping
  • creative builders

Example prompts include:

“How do I build a blue-and-white LEGO yacht?”
“Design a red LEGO F1 race car.”
“Create a Minecraft-style castle with medieval towers.”

The second project is CoachOwl Agent Timetable (https://coachowl.aiagenta2z.com/), an AI Agent timetable, calendar, and orchestration platform that helps users set objectives and assign tasks to both humans and AI agents (such as Codex, Claude, and Gemini) for collaborative work in:

  • fitness
  • career growth
  • learning
  • personal development
  • productivity planning

The stack I am using:

Server
Python/ Node.js / FastAPI / pnpm serve

LLMs & AI Models
Gemini/ OpenAI /Qwen

APIs(DeepNLP OneKey Gateway)
Google Search APIs
Tavily Search APIs
Nutrition calculation APIs
Gemini Nano Banana image recognition APIs
3D rendering APIs

Deployment & Hosting
AI Agent A2Z platform
One free domain and project per user account (*.aiagenta2z.com)

Coding agent:
Claude
Codex

As you can see, these are fully functioning applications with:

deployed websites and landing pages

  • AI Agent tool usage / pipelines
  • LLM/Agent Gateway Integration
  • External API Fast Integrations (3D/Food Nutrition/Search/Images)

The most important lesson I learned is that shipping production AI systems is far more about orchestration, deployment, debugging, UX, and infrastructure than prompt engineering alone.

1. Craftsman Agent

Design & Development

webpage: https://craftsman-agent.aiagenta2z.com
GitHub: https://github.com/AI-Hub-Admin/Craftsman-agent

I build the main website homepage using claude code/codex in a few minutes. And building the main AI Agent workflow and 3D text-3D instruction using 3 days,
which is more complicated and no free APIs available. The AI Agent workflow of turning text prompts to 3D instruction, for example

text -> 3D parts plans json list -> 3D rendering APIs calling 

Agent Workflow: Text to 3D instruction

For example, a 3D lego boats will needs a inventory of less than 10 to 1000 pieces 3D parts of data in the following formats.
And converting these LLM generated 3D models data into rendering instructions will also involve calling 3D APIs multiple times.
And the raw LLM generated 3D files are actually of pure quality, so SFT and few shots are also needed to enhance the final design.

[
    {
        "color": "red",
        "size": [
            4.0,
            2.0,
            1
        ],
        "position": [
            2,
            1,
            0.5
        ],
        "part_id": 3020,
        "part_name": "Plate 2x4",
        "image": "M3020",
        "categories": "Basic, Architectural, Transportation, Space, Plate, Solid Studs"
    },
    {
        "color": "red",
        "size": [
            2.0,
            1.0,
            1
        ],
        "position": [
            1,
            2,
            1.5
        ],
        "part_id": 3023,
        "part_name": "Plate 1x2",
        "image": "M3023",
        "categories": "Basic, Architectural, Transportation, Space, Plate, Solid Studs"
    },
]

LLM and API Calling: DeepNLP OneKey Agent Gateway of Gemini LLM endpoint and 3D building APIs (https://deepnlp.org/doc/onekey_gateway).

Server/APIs/Skills/MCPs:
The server is developed using python FastAPI backend with endpoints serving both MCPs/Skills and CLIs APIs.
These codes are not open sourced but skills and clis are available to use and registered on OneKey Gateway,
And there are agent run payment paypal endpoint designed to charge per 3D assembly generated.

## endpoint
app = Starlette(
    routes=[
        Route("/chat", chat_endpoint, methods=["POST"]),   # New Chat Endpoint
        Mount("/static", app=StaticFiles(directory= STATIC_DIR.resolve() , html=True), name="static"),
        Mount("/assets", app=StaticFiles(directory= ASSETS_DIR.resolve(), html=True), name="assets"),
        Route("/api/v1/generate_minecraft_build_plan", api_generate_minecraft_build_plan, methods=["POST"]),
        Route("/api/v1/generate_lego_build_plan", api_generate_lego_build_plan, methods=["POST"]),
        Route("/api/v1/generate_tesla_wraps", api_generate_tesla_wraps_build_plan, methods=["POST"]),
        Route("/paypal/agent/purchase/callback", paypal_webhook, methods=["POST"]),
        Mount("/", app=mcp_app),  ## MCP Endpoint Always mounts /mcp
    ],
    lifespan=lifespan,
)

Website Domain & Hosting:
Website: Typescript JS based website serving the /static, /image gallery
https://github.com/aiagenta2z/agent-mcp-deployment-templates/tree/main/quickstart/website_typescript
Doc: https://deepnlp.org/doc/agent_mcp_deployment

Summary:
Cost of time turning the ideas into production AI Agents:

Phase Cost
Development Website (A Few Minutes) + AI Agent Workflow/APIs(3 days)
LLM Tokens & APIs Gemini + 3D Rendering APIs (Not Free, Consume tokens/avg $67 dollars/1k gemini 3.1 image generation/OneKey Credit 5000 credits/1k images call ~ roughly $50/1k images)
Hosting and Domains Free (https://craftsman-agent.aiagenta2z.com) for basic plan with limited mem and CPU usage.
Traffic Routing Get Free Cold Start Traffic from DeepNLP Agent Router for hosted agents.

2. CoachOwl AI Agent Orchestration

Features:

  • Online Timetable & Calendar: CoachOwl Agent has the calendar & timeline features to allows AI Agent to connect, track, assign and schedule tasks for human and AI Agents to collaborative, competible with Google Calendar, Outlook for AI Agents.
  • AI Agent Orchestration: Humans can better assign repetitive & periodic tasks easily to your personal Agents by scheduling, tracking compared to sending messages. Scenario: Repetitively Sending Emails of competitor analysis of ProductHunt daily for 2 weeks. Anaylyzing food calories for 2 weeks. Prepare for SAT/CFA/GRE exams.
  • Add a task & objective: You can add task, objective (AI coach will plans several periodic tasks for you and you can always edit task contents.)
  • AI Coaches: AI Coaches with Special Skills assigns tasks to both human and agents, such as Fitness Coach, Relationship Coach, Career Coach, Relationship Coach, Fitness Coach: Food Calories Analysis, Image Recognition, Career Coach: Search Indutry info and send briefs to Emails. Prepare for Social Media Anouncement, write Blogs. Learning Coaches
  • Easy Voice Input, Habit Tracking, AI Agent Task Scheduling, Connect to Claude Code, Codex, OpenClaw and more.

Support Coaches and Agent Tools & Ability

The app is build on Onekey Agent Router APIs for Image processing, Food Calories Searching, Sending Emails, Deep Research Abilities.

You can always extends more skills to use CoachOwl as an AI Agent Orchestrator to assign tasks to your Local Agents (Codex/Claude/Gemini)

Category Agent Tools & Features
BASE base_search Deep Research of Google Search Tavily Search APIs, send_email_with_attachments Send summary reports to your Email accounts.
Fitness analyze_foods_nutrition_workflow generate nutritions & calories reports from uploaded images or text input
Career track_competitor_launches_producthunt Fetch ProductHunt releases, job_search APIs
Learning Exam mock question generation, such as CFA SAT
Agents OneKey Gateway Supported Agents
Default Default, Server Web Agents on CoachOwl
Codex Local Agents, codex CLIs
Claude Code Local Agents, claude CLIs
Gemini Local Agents, gemini CLIs
OpenClaw Local Agents, openclaw CLIs

Design & Development

Website Homepage: https://craftsman-agent.aiagenta2z.com

Github(Fully OpenSourced): https://github.com/AI-Hub-Admin/CoachOwl-Agent-Timetable

Deployment: https://github.com/aiagenta2z/agent-mcp-deployment-templates

The AI Agent Orchestration

  1. The Timeline (oneday todo list) and the calendar
    The app is build using codex, which costs me one day to finish all the tables design, frontend web design, etc.

  2. Agent Execution system
    Agent Execution include setting up agent tasks (recursive tasks), such as “Deep Research the producthunt AI Agent releases in last 7days and send to my Emails at [email protected]“.
    The agent execution related include
    “””
    /claim task -> /Execution -> Report Heartbeat -> Update Results
    “””

The db design and implementation costs 4- 5 days. And for local agents running, use “onekey gateway coachowl/coachowl” to pull tasks from the web, which involves
another one day to complete.

  1. Summary
Phase Cost
Development Website (A Few Minutes) + AI Agent Orchestration API DBs (3 days)
LLM Tokens & APIs Gemini/OpenAI/Qwen
Hosting and Domains Free (https://coachowl.aiagenta2z.com) for basic plan with limited mem and CPU usage.
Traffic Routing Google Search with Domain Verification

Related

Craftsman-Agent: https://craftsman-agent.aiagenta2z.com

CoachOwl AI Agent Timetable: https://coachowl.aiagenta2z.com

AI Agent A2Z Deployment & Hosting: Deployment Portal & Doc

OneKey Gateway API & LLM Usage: https://deepnlp.org/doc/onekey_gateway

AI Agents Are Wandering a Growing World of MCP Tools With No Map — So I’m Building One

Home Page

Have you ever wondered where all the tools for AI agents actually are?

Right now, new MCP servers are being built every day—tools that let AI agents interact with files, databases, Slack, websites, APIs, and real-world systems—but most of them are scattered across GitHub repos, Discord chats, and random posts online. Unless you already know exactly what you’re looking for, discovering useful MCP tools is surprisingly difficult.

That’s the problem I wanted to solve by building a simple MCP server directory where creators can submit a name, description, and link so their tools can actually be discovered in one place.

Home Page

The platform is intentionally simple. There’s a clean homepage explaining the idea, a lightweight login page for contributors, and a central page where all MCP servers are listed and searchable. Instead of digging through random repositories and posts, developers can quickly browse tools built for AI agents in one organized place.

Login Page

What makes this interesting is that it’s not just organizing software—it’s organizing what AI systems can do. These MCP tools let AI agents connect to things like files, databases, Slack, websites, and APIs. In a way, the directory becomes a growing map of AI capabilities and integrations.

Directory page

The main users are AI developers looking for ready-made tools, MCP creators who want visibility for their work, and curious builders exploring what AI agents can actually do beyond chatting. It’s a small idea, but it solves a real problem: turning a scattered ecosystem into something searchable, understandable, and easy to explore.

Perl 🐪 Weekly #773 – The perl-tester Docker image

Originally published at Perl Weekly 773

Hi there!

Recently there were a number of days that the perl-tester Docker image did not build properly. It is always a bit of an issue with it, because there quite a few moving parts. Parts where the dependency isn’t fixed. e.g. in most of the cases it installs the most recent version of the modules from CPAN. Which mean any release of any module might break the whole build process. This time, however, the source of the problem was the new release of App::cpm, the tool used to install the CPAN modules. As often the case the new release was intended to improve things: cpm v1: making installs stable, but it broke the build on some of the older versions of Perl just by increasing the minimum version of Perl required.

One solution would be to fix all the dependencies, both tooling and the modules we install, but then someone would need to keep track of changes (the way dependabot does) which is probably way too much work for the few people who contribute to this project. The other solution might be to create an easy way to see what changed between the last successful build and the current failing build. We have started to work on a tool that will help with that. It will also allow us to show exactly what is in every image. BTW If you have spare stars in your pocket, it would be nice if you gave one to the docker-perl-tester project.

A couple of days ago I started to play with FalkorDB, an Open Source Graph Database. I already gave a presentation in Hebrew on how to use in general and specifically in Python. In a couple of hours I am going to give another one – this time in English – an intro to GraphDB. I’ll use Rust for the programatic examples. It seems there is no client for it in Perl so it might be an interesting project to build one. The one in Python uses the Redis module for connectivity so I looked at the options to use Redis in Perl. MetaCPAN showed the Redis module as the first hit. Unfortunately that module did not have a commit for 3 years and there are many outstanding Issues and even PRs. So I posted about it both in the Perl Maven WhatsApp group and in the Telegram channel. Within seconds I was pointed towards Mojo::Redis and Redis::XS as alternatives.

Online Events: If you are in an American time-zone then both the Boston Perl Mongers and the Toronto Perl Mongers have semi-regular online meetings in your evening hours with various interesting speakers. If you are in the European time-zones or you don’t mind having a meeting in your morning hours in the Americas, then there is the Perl Maven group where it is mostly me giving a presentation or working on some code. For details check out the Perl Weekly events page.

Enjoy your week!

—
Your editor: Gabor Szabo.

Announcements

cpan.org email forwarding has been shut down

The Perl NOC team has shut down the forwarding of email to the cpan addresses. If you are a CPAN author, please make sure MetaCPAN displays ways to contact you. (link to the source git repository of your projects, a LinkedIn account, an email address, etc.)

Articles

cpm v1: making installs stable

I rarely include articles from Medium as most of them are spam, but this one is real. So here you are!

Is your account on blogs.perl.org registered with an @cpan.org email address?

Installing Bit::Vector on Debian 13 (Trixie)

It is good that this information can be found on a public blog post, but IMHO it would be event better if this was part of the README or the documentation of the project.

My Journey with Devel::ptkdb – Origins

Enabling AddressSanitizer (ASan) in Makefile.PL for Linux Environments

Introducing Time::Str

At first I was wondering why this new module when DateTime provides all the features, but then I read on and there are a few reasons. Interesting.

Discussion

Optional stricter normalization of raw ISBN input

An issue that gives an opportunity for you to share your thoughts.

Why does a call to ref on a reference to ‘substr’ produce ‘LVALUE’?

Perl

This week in PSC (224) | 2026-05-11

The Weekly Challenge

The Weekly Challenge by Mohammad Sajid Anwar will help you step out of your comfort-zone. You can even win prize money of $50 by participating in the weekly challenge. We pick one champion at the end of the month from among all of the contributors during the month, thanks to the sponsor Marc Perry.

The Weekly Challenge – 374

Welcome to a new week with a couple of fun tasks “Count Vowel” and “Largest Same-digits Number”. If you are new to the weekly challenge then why not join us and have fun every week. For more information, please read the FAQ.

RECAP – The Weekly Challenge – 373

Enjoy a quick recap of last week’s contributions by Team PWC dealing with the “Equal List” and “List Division” tasks in Perl and Raku. You will find plenty of solutions to keep you busy.

Perl Weekly Challenge 373: Equal List

The clean, logical structure of Abigail’s detailed technical analysis provides a very clear and rational basis for how best to apply mathematical theory to practical use. With a focus on optimising the algorithmic complexity rather than executing a brute force approach, Abigail delivers an incredibly efficient solution to this problem that will be valuable to all developers who wish to create highly efficient solutions to their problems.

Perl Weekly Challenge 373: List Division

Abigail’s solution to the list partitioning problem is a beautifully crafted and idiomatic implementation that completely avoids the cumbersome index-tracking that traditional loop-based implementations require. The implementation is easy to read and is highly efficient because it leans heavily on the mechanics of the underlying language. This illustrates how an effective structural data transformation paradigm can result in simpler implementations.

List the List

Through a demonstration using gather and take in conjunction with native array splicing Arne demonstrates Raku’s capabilities and gives a simple way to distribute remaining list offsets without having to rely on complex nested loops or overhead due to atypical index calculations. The result is a functional representation showing how Raku can eliminate complications associated with the partitioning of structural data, creating an intuitive self-documenting pattern.

Let’s Dance to List Division

Bob has produced a superbly developer-oriented analysis addressing the pragmatic aspects of designing APIs using Perl’s ‘flat’ argument list mechanism. Bob’s approach to using array references in conjunction with a dual-while-loop, which uses ‘destructive splice’ calls to divide the input data into well-balanced partitions, enables this entire operation to occur without requiring any complex index-tracking cognitive load.

Divide and Concat

Jorg has provided a mathematically accurate and highly precise solution that demonstrates command of Perl’s multidimensional array manipulation and list processing capabilities. The solution has been designed with a heavy emphasis on reducing iteration overhead, and uses a clean and logical approach to conditional checking. Overall, the implementation is an efficient way to manage data structures for all of the tasks required to complete this project.

Perl Weekly Challenge 373

W. Luis Mochan gives an interesting, very mathematical view of the difficulties and has elevated the difficulty of the tasks by discussing the different ways each of these tasks can be solved through their mathematical representations. The way the solution uses Perl Data Language is unique in its creativity and clearly shows how matrix operations and vector operations can be applied in a different manner to solve an algorithmic process much more efficiently and faster than typical procedural methods. This is a remarkable, challenging read, demonstrating the way that thinking in terms of vectors alone can change the way standard procedure of manipulating data can be made into a high level, abstract manner.

Because your list, your list I can’t resist

Packy offers a unique perspective on the challenge by framing the approach through an interesting musical context, followed by a really clean, multilingual show-off with a few different language options. As a polyglot expert, Packy’s write-up shows a number of idiomatic and clean ways to solve problems in both Perl and Elixir. The solutions have been complimented for their clear structure, readable transformations of data, and the highly contrasting ways in which they use the procedural power of Perl with the functional, pipeline-based elegance of Elixir.

The week of lists

This paragraph describes the outstanding quality of Peter’s work in executing his weekly assignments and projects using clear and detailed methods. He concentrates on providing clear and easy to understand explanations of all aspects of the problem using very pragmatic solutions with less complex algorithms than would be required to complete this task, and thus have produced solutions with low run times and high readability. Another benefit of using this strategy is that it will have produced many examples of good clean and maintainable code, as well as simple Perl code showing how to accomplish structural validation without additional runtime cost.

The Weekly Challenge – 373: Equal List

The analysis that Reinier provided on this challenge is truly impressive due to the systematic approach used to cover edges and validate input. The solution makes a great balance between how computer efficient it is to run while at the same time being easy to scan through for code due to well-named variables and clearly defined logical conditions. This is a great resource for developers looking to implement defensive programming and build highly maintainable systems.

The Weekly Challenge – 373: List Division

Reinier has presented a very clear and logical way to solve the list partitioning problem through clarity in procedural programming and appropriately managing data through effective use of algorithms. The implemented solution is easy to follow, with simple looping structures and clearly defined conditions used to divide the collection according to specification without introducing complexity into the underlying architecture. This solution is a perfect example of pragmatic programming, where simplicity, maintainability, and consistency take precedence over unnecessary abstraction.

The Weekly Challenge #373

The analysis provided by Robbie consists of an analysis of the weekly problems and an an idea of what you’d have to do. The breakdown of the problems will be thoroughly examined and will include thorough analysis of all the constraints on the solution as well as a commitment to validate input sufficiently to account for any and all edge cases and to deal with them accordingly. The combination of cleanly structured idiomatic programming style (including the use of loops) with clear and explicit comments that explain the logic behind the programming additions and modifications, make this a great reference source for new and experienced programmers to use.

There Is No Equality Without Division

Roger performs a beautiful and tidy example of modern solutions to solving problems through example in different programming languages and paradigms. The two different types of tasks, structural validation and partitioning, have been broken down into separate clear logical blocks that allow for high readability of solutions and the use of commonly used data structures without the use of complex loops. The write-up contains an excellent comparison of the different language features that reduce index-tracking overhead while still providing optimal run-time efficiency and successfully illustrates how functional programming techniques can be used successfully with non-functional programming techniques.

Joining and splitting lists

Simon has presented an impressively logical and practical polyglot demonstration that compares the elegant way of handling the first task in Python to how it is done through direct translations into Perl. The first task’s solution is particularly notable for its concise efficiency and consists of a great, simply written one-liner using native methods to join strings and performing a direct comparison to form the structure of the list being checked. In the second task, Simon has shown a brilliant method for diving an array into equal components by taking advantage of the mathematical operation called divmod or remainder and relying on destructive splice operations to divide the arrays evenly without creating any overhead from having to manage cumbersome index numbers.

Videos

Parsing Perl Without Perl – A Rust LSP for Perl 5

A presentation by Steven Zimmerman, CPA, at the online event of the Toronto Perl Monger

Acting Out With Claude: MCPs in Perl

A presentation by Steven Lembark, at the online event of the Toronto Perl Monger

Weekly collections

NICEPERL’s lists

Great CPAN modules released last week.

Events

Exploring Perl Modules

May 20, 2026

Toronto.pm – online – JSON Schema: language-agnostic typing / May TPM meeting

May 29, 2026

Boston Perl Mongers virtual monthly

June 9, 2026

The Perl and Raku Conference 2026

June 26-29, 2026, Greenville, SC, USA

You joined the Perl Weekly to get weekly e-mails about the Perl programming language and related topics.

Want to see more? See the archives of all the issues.

Not yet subscribed to the newsletter? Join us free of charge!

(C) Copyright Gabor Szabo
The articles are copyright the respective authors.

Six Principles in Practice: How an Agentic E2E Found 11 Production Bugs in 8 Runs

Architecture diagram: knowledge/ at top is read by LLM agents during planning, generation and healing but is never imported by tests; runtime stack below is tests/ → pages/ → lib/ with strict one-way dependency

Eight runs, eleven bugs

I ran my E2E testing system on a production ecommerce platform eight times in
a row – across five different business modules, in three different surface
configurations (admin / desktop storefront / mobile-first storefront). Across
those eight runs the system found eleven production bugs, each one
attached to a specific file and line via a root_cause_slug. Between runs
the knowledge base grew from 25 gotchas to 42 (+67% in nine days), and the
first-try pass rate (first_try_pass_rate) climbed from 14% to 95%.

One detail up front: the methodology was assembled in a side stream
alongside product work, not as a dedicated project. Calibration cycles were
interleaved between features, new-module sprints and routine support. Eight
runs is not “eight weeks of full-time work” but eight iteration points
accumulated in parallel with shipping production code. Most of that time I
was writing business logic, not agents.

This isn’t a story about “which framework to pick”. Most teams start with
E2E by asking exactly that question – and six months later they have a
flaky suite that quietly gets disabled in CI. The right question is on
what conditions these tests are entitled to exist at all
, and what agent
architecture lets them compound instead of accumulating noise.

This article is a closing piece for the previous publication
Six Principles for Agent Systems That Don’t Hallucinate.
There I worked through the principles as an abstraction. Here – what
happens when you apply them to a concrete task, in production, across two
independent stacks.

Premise: six principles applied to E2E

E2E testing is a convenient test bed for agent systems for three reasons.
First, the validator is deterministic – the test either passes or it
doesn’t, and there is no room for probabilistic judgment. Second, the cycle
is short – one run takes minutes, not hours or days. Third, the domain
gives an explicit signal when the system has “learned” the stack –
first_try_pass_rate plateaus.

All three properties are the same ones the Six Principles are built on in
the general case: architecture over prompt-tweaking, deterministic context
over probabilistic retrieval, closed-loop validation with a hard signal,
three-category attribution, editorial gates instead of auto-promotion,
multi-run measurement as proof of compounding.

If these principles work in the general case, then on E2E they should
deliver a measurable effect. This essay is about the measured effect.

The contract: seven environment principles

E2E tests live or die by their relationship with the environment. Without
an explicit contract, every flaky-test debate converges on the same
question: is this a bug in the test, in the application, or in CI? – and
no one can answer, because there is no shared baseline.

ENVIRONMENT.md is a markdown document with seven numbered principles.
Each is one paragraph plus a short why. Three audiences read it: a human
during onboarding, an LLM agent during test generation, and the test
runner (the last one via playwright.config.ts, not directly).

The principles in short:

  1. The container is an external dependency. Tests do not start or
    stop the application. If the instance is unavailable, the preflight
    check (principle 4) fails before any spec runs.
  2. The database is dirty by default. Demo data is reused across runs.
    Test data is isolated via a prefix (e2e_*), seeds are idempotent
    through ON CONFLICT DO NOTHING.
  3. Sequential execution. workers: 1, retries: 0,
    fullyParallel: false. This is not a performance compromise – it is a
    methodology commitment. Half of this principle – the no-retries
    doctrine
    – is the most load-bearing rule in the entire methodology.
  4. Health check before everything. global-setup.ts makes one HEAD
    request to a health endpoint before any spec runs. Without the health
    check, the first failing test out of 50 produces an inscrutable
    timeout; with it, one clear error appears in five seconds.
  5. Seed vs assertion separation. Seed specs configure state
    (tests/_seed/), assertion specs verify behavior
    (tests/modules/<feature>/). The underscore prefix is not stylistic;
    it is lexicographic sort order.
  6. Host runner + MCP browser. Playwright runs on the host machine;
    during test generation the LLM agent has access to MCP browser tools
    – this lets it observe the real DOM rather than invent selectors.
  7. Session caching with TTL. Login is cached to a file; TTL depends
    on the backend’s nature (admin session with DevMode login – 15
    minutes; Redis session under a strict security policy – 2 minutes).

Each principle in depth lives in
contract-spec.md
in the principles repo.

The principles are deliberately minimal. The contract does not address
test data factories (a structural question), selector strategy (a
generator concern), or CI (orthogonal). The contract is the smallest
explicit commitment that makes the rest of the methodology coherent.
Extending the contract is fine; expecting the contract to cover
everything is a category error.

Four layers of code

The contract says what tests do and don’t do. The structure says where
the artifacts of doing those things physically live. Four layers, with
strict one-way dependency direction:

Architecture diagram: knowledge/ at top is read by LLM agents during planning, generation and healing but is never imported by tests; runtime stack below is tests/ → pages/ → lib/ with strict one-way dependency)

  • lib/ – stateless utilities. If a function in lib/ is called
    setupCheckoutTaxForRegion, it doesn’t belong in lib/ – it belongs
    in a Page Object or a flow.
  • pages/ – Page Objects. Stateful. Extracted only after the
    third real use
    (Rule of Three).
  • tests/ – the specs themselves. _seed/ (idempotent setup) and
    modules/<feature>/ (per-feature assertions).
  • knowledge/ – markdown/YAML references for LLM agents.
    Never imported by tests. This is data for agents, not code for
    the runtime.

The tests → pages → lib direction is one-way. Reverse edges are
forbidden. Empirically: across four cross-stack ports, every cycle of
“lib imports from pages” had to be reverted within the same sprint. The
cost of portability with a cycle in place is too high.

The most common objection is “extract pages/ from day one?”. No. Rule
of Three: one test – leave it inline; two – leave them duplicated;
the third – extract into lib/ (stateless) or pages/ (stateful).
At two uses you don’t yet see what is actually shared. The third use
shows the real abstraction instead of a coincidental match between two
cases.

A single playwright.config.ts serves several orthogonal surface
combinations – not “different browsers” but different DOMs. On my
ecommerce platform: admin / classic storefront (legacy MVC) / modern
storefront (Alpine.js). Different DOM, different selectors, the same
behavior cases. One run produces three results with a per-project
breakdown in metrics.jsonl.

The four-agent pipeline

The pipeline runs four agents in sequence: analyze → plan → generate →
heal
. Each agent has one cognitive task, one input shape, one output
shape.

Analyzer

The first. Discovery: scans the codebase, identifies modules, routes,
DB schema, dependencies. Writes results into e2e/.state/*.json –
persistent JSON artifacts. The phase is cheap and cacheable – on
every run it first checks the mtime of its outputs; if they are fresh,
it skips entirely.

The skip logic here is not optimization, it is architecture. Most cycles
work on a stable codebase; re-scanning the source tree every time is
waste. The analyzer’s artifacts (modules.json, schema-map.json,
project-auth.yml, project-seed.yml) are read by the planner,
generator and healer – each takes what it needs, no one re-runs
discovery.

Planner

The second. Reasoning: takes the analyzer’s output plus the KB, writes
a plan.md – a numbered list of test cases for one feature. Each case:
short title, preconditions, steps, expected outcome, optional KB
references to relevant gotchas.

The planner is a distinct phase, not a step inside the generator,
because planning and code-generation are different cognitive modes.
Planning needs broad context (feature semantics, edge cases, KB flags).
Generation needs narrow context (the exact selector for one button on
one page). Trying to do both in one prompt produces either an
over-prompted generator (slow, expensive) or an under-prompted planner
(shallow plans, missed edge cases).

plan.md is not test code. It is a specification that the generator
turns into code in the next phase. The same plan.md could be
implemented in a different test framework.

Generator

The third. Code emission: takes plan.md and writes *.spec.ts. The
defining rule is selector discipline
: every selector that appears in
a generated spec must be observed in the live application via MCP
browser tools
– not inferred from sources, not guessed from a
screenshot.

What “stable selector” means depends on the surface. For each project
the generator has a preference hierarchy: getByRole(...) →
getByPlaceholder(...) → scoped CSS → id – in descending order of
stability.

What is forbidden: deriving a selector from source code (the
rendered DOM may differ); guessing from a screenshot; “the button
probably has the class .btn-primary“. If a stable selector doesn’t
exist, the correct reaction is to report a gap back to the planner,
not to write something brittle and hope.

Healer

The fourth, and the most important. Diagnosis: runs the specs, observes
failures, attributes each failure to one of three categories –
test-bug / app-bug / env-drift – and writes a structured
heal-finding with the audit trail.

That attribution is what makes the no-retries doctrine actionable.
Each category has its own remediation path:

  • test-bug → the healer fixes the spec.
  • app-bug → the healer does not fix the application. It files
    the bug with root_cause_slug and leaves the spec failing as a true
    positive.
  • env-drift → the healer surfaces the drift; the contract may need
    updating.

The healer is also the agent that proposes KB candidates. A failure
exposed a gotcha future tests should know? The healer writes a candidate
into e2e/knowledge/_inbox/. The candidate is not auto-promoted –
an editorial gate decides.

Why four agents, not three

Early versions of the methodology used three agents (planner /
generator / healer) and folded discovery into the planner. The
four-agent split was empirical: a planner prompt that also did
discovery was noticeably worse at both jobs. Pulling the analyzer into
its own phase made each phase smaller, cheaper, and individually
skippable (analyzer caches; planner skips when plan.md exists;
healer skips on a green run).

The pipeline produces measurable artifacts at every boundary:
e2e/.state/*.json after analysis, plan.md after planning,
*.spec.ts after generation, a six-section heal-finding after healing.
Each is reviewable. Each is comparable across runs.

Per-agent depth lives in the four agent-role specs in the principles
repo. Skill-level orchestration lives in
skill-design.md.

Knowledge as the fourth layer

The knowledge base is the fourth layer of the structure and the
input that makes agents learn between runs. KB files are YAML
documents, read by agents at planning, generation and healing time.
They are never imported by test code.

Two categories of entry

Every KB entry is one of two kinds:

  • Gotcha – prose advisory for the agent. “When clicking a button
    inside a modal on the admin surface, wait for the loading-mask
    overlay to disappear”. Gotchas are advisory; the agent reads them as
    context, not as an enforceable rule.
  • Lint pattern – a machine-checkable rule with a severity. “If a
    spec calls page.click() on .btn-primary without preceding
    waitForLoadingMask() – warning”. Lint patterns are runnable as a
    static analysis pass (--phase lint).

An entry starts as a gotcha. Promotion to a lint pattern is downstream
and explicit, after the gotcha has fired enough times for the rule
to clearly generalize.

Project-local vs cross-stack

The KB has two homes. Project-local lives inside e2e/knowledge/ –
about this codebase: auth patterns, seed fixtures, business-domain
quirks. Cross-stack lives outside any single project (for example,
in ~/.claude/skills/e2e-kb/kb/) – about a technology: UI framework
patterns, Tailwind class quirks, admin framework selectors. Cross-stack
KB generalizes across every project that uses the same technology.

This split is what produces cross-project knowledge transfer. When
you start a new project on a familiar technology, cross-stack KB
applies on day one. Project-local KB starts empty and fills as the
codebase reveals its quirks.

sources.yml routing and kb_by_app

sources.yml describes which KBs apply to which surface:

universal:
  - project-auth.yml
  - project-seed.yml

by_surface:
  admin:
    - modules/admin.yml
    - platform/admin-framework.yml
  storefront:
    - modules/storefront.yml
    - platform/alpine-js.yml
    - platform/tailwind-css.yml

The planner reads sources.yml and loads only the KBs relevant to the
target.

For multi-app projects – one repository hosting two genuinely different
application stacks (a FastAPI backend and a Next.js admin in the same
work tree) – the pattern extends to kb_by_app:

kb_by_app:
  backend:
    - platform/fastapi.yml
    - platform/alpine-js.yml
    - platform/tailwind-css.yml
    - project-auth.yml
  admin-app:
    - platform/nextjs.yml
    - platform/shadcn-ui.yml
    - platform/tailwind-css.yml
    - project-auth.yml

Tests for the backend receive fastapi + alpine-js KB; tests for the
admin receive nextjs + shadcn-ui. No cross-contamination, no agents
loading irrelevant gotchas. The same tailwind-css.yml is reused in
both apps – cross-project KB reuse on a small scale.

Editorial promotion

The single most important rule of the KB layer:

Auto-promotion of healer candidates into the active KB is forbidden.

Auto-promotion optimizes recall at the expense of precision. The
resulting KB describes the system’s errors, not what is true. The
agent then retrieves contradictory advice (every fix has become a
“principle”), and compounding flips sign – the saturation curve
moves downward instead of upward.

Promotion is editorial: the healer writes a candidate into _inbox/;
a reviewer asks two questions (does this generalize? is it not covered
by an existing entry?
); only on two yeses does the candidate move
into the active KB. The editorial gate is what keeps the KB useful
as the project grows.

The healing loop and the saturation curve

The healer produces one artifact per run: a markdown file in
e2e/.state/heal-findings/, timestamped. Six sections, always in the
same order, even on green runs.

The six sections are not bureaucracy. They are an audit trail that
stays readable two months later:

  • A. Diagnosis matrix – a table: tests × projects. Pass / Fail /
    Skip / N/A in cells. The reviewer sees it first – “what failed and
    where” before any narrative.
  • B. Hypothesis on root causes – for each failure, a working
    theory. Each hypothesis names an attribution category.
  • C. Healing action + decision rationale – what the healer did.
    test-bug is fixed in the spec, app-bug is filed with a slug,
    env-drift is surfaced.
  • D. Verification checklist – how to confirm the fix worked. A
    checklist, not prose. This is what makes the audit trail closeable.
  • E. KB candidates – gotchas worth promoting (via the editorial
    gate).
  • F. Out-of-scope siblings – observations that surfaced during the
    run but are not the focus of this finding. Test-infra glitches,
    environment quirks, remarks worth follow-up but no action right now.

Section F matters separately: without it, observations either clutter
the main narrative (A–E) or get lost and rediscovered a month later
as “haven’t we seen this already?”.

Why this produces compounding

Every heal-finding’s Section E feeds the _inbox/. The editorial gate
either promotes or rejects. Promoted entries become available to the
next run’s planner and generator. The next run on the same surface
starts with a richer KB, and first_try_pass_rate rises.

That is the compounding mechanism. It depends on three preconditions:

  • Three-category attribution (the no-retries doctrine) – without
    it, failures become “flaky”, and the healer has nothing structured
    to record.
  • Editorial promotion – without it, the KB becomes an error log,
    and the curve flips sign.
  • Per-run findings (the six-section discipline) – without them,
    the audit trail is missing, and the next reviewer can’t follow the
    chain.

The saturation curve

Line chart: first_try_pass_rate climbs from ~14% at run 1, through ~78% at run 2, to ~95% at run 3, then plateaus through runs 4–8 (the saturation signal)

Run 1: low pass rate. Every gotcha is new; the KB is empty for the
surface.

Runs 2–3: rate climbs steeply, as the first findings get promoted into
the KB. The agent now reads gotchas it discovered itself last time.

Runs 4+: rate plateaus. The KB has captured the surface’s
idiosyncrasies; further runs only encounter rare new gotchas.

The plateau is saturation. The empirical signal that the
methodology has paid for itself on this surface. After saturation
the cost of a new test on the surface is dominated by defining the
case
, not learning the surface.

Across my eight runs: on a mature module (third run on the same
surface) first_try_pass_rate reached ~95%. On a new surface of the
same platform – first run ~14%, second ~78%, third ~95%. The same
shape on each of six modules: low → climb → plateau. This isn’t a
theoretical benefit – it is measured.

What the metrics don’t track

  • Test execution time. Playwright’s reporter handles that.
    metrics.jsonl is about the quality of generated tests, not their
    runtime.
  • Code coverage in the line-coverage sense. That is a different
    methodology (instrument, run, report).
  • Subjective quality. “Are these tests good?” is a review question,
    not a metric. The metric measures whether they pass.

The full metrics.jsonl schema with the additive evolution v1 → v2,
the definition of first_try_pass_rate, the root_cause_slug
discipline – all in
metric-design.md.

Stack-agnostic: porting to FastAPI in days, not weeks

The strongest objection to any “works for me” methodology is it works
only because you know your stack
. I ported the methodology to a second
stack – not on a new machine and not for an article, but for my own
pet project: FastAPI + Alpine (backend) + Next.js (admin) in a single
work tree. The port took days, not weeks.

What carries over 1-to-1

  • The four agents (analyze / plan / generate / heal) – same
    prompts, same contract between phases.
  • The e2e-coverage skill – same orchestrator, same artifact on
    output (a metrics.jsonl line, a heal-finding).
  • The ENVIRONMENT.md pattern – 7 principles stayed. Some are
    trivially satisfied (no auth → principle 7 N/A), but the contract
    kept its shape.
  • STRUCTURE.md – four layers, Rule of Three, dependency direction.
  • No-retries doctrine – retries: 0 on the new stack.

What is rewritten

  • knowledge/ – local gotchas (FastAPI middleware quirks instead
    of legacy MVC). Cross-stack KB (alpine-js.yml, tailwind-css.yml)
    is reused without change.
  • lib/ – FastAPI auth helpers instead of platform CLI calls.
  • playwright.config.ts – different projects (backend +
    admin-app instead of admin + classic-storefront +
    modern-storefront).

What appeared new on the second stack

  • kb_by_app routing – a solution to the multi-app problem (one
    e2e/ serving two genuinely different app stacks). The pattern then
    back-ports onto the first stack if a multi-app scenario emerges.

Metrics on the second stack

First run on the new backend: first_try_pass_rate ~48.6%. Second –
~91.4%. Same two-to-three runs of the same surface, the same
compounding shape.

What matters: the second stack didn’t “repeat” the first. It
showed that the shape of the curve is a property of the loop, not
of the task
. Detect a deterministic validator (tests pass/fail,
build succeeds, types check), close the loop (executor → validator,
auto-revert on regression, KB grows only on validated new error
classes) – and compounding appears regardless of stack.

After the cross-platform port I have n=2 platforms plus n=8 runs
within the first
. The KB saturation curve is not a Magento artifact.
It is a property of the pipeline.

Closing

The six principles from the meta article are not dogma. They are a set
of architectural commitments that will make an agent system compound,
if you accept them
. This article showed what happens on a concrete
task – E2E testing – when you accept them in full.

What is useful here beyond “another E2E framework”:

  • Structural framing of the flaky-test problem. Not “which runner
    to buy”, but what conditions must be met for tests to exist as a
    signal rather than as noise
    . Those conditions are expressed in the
    seven contract principles.
  • Compounding proved through measurement. The KB saturation curve
    is not theoretical. It appears on two independent stacks, in the
    same shape. Single-run anecdotes really are almost useless for
    evaluating an architecture; the multi-run curve is a different
    story.
  • Editorial gates as load-bearing. Auto-promotion is the most
    obvious step that breaks compounding. That is counter-intuitive
    and worth surfacing explicitly.

If you want to apply the methodology – the principles repo with
granular specs and illustrative examples (against todomvc as a neutral
target): https://github.com/webmaster-ramos/e2e-llm-agents.

The canonical narrative with principles and architecture lives on the
site at /docs/e2e-llm-agents:
https://webmaster-ramos.com/docs/e2e-llm-agents.

The meta article with the six principles as an abstraction:
https://webmaster-ramos.com/blog/six-principles-agent-systems.

Four OpenClaw Flaws Enable Data Theft, Privilege Escalation, and Persistence

Four OpenClaw flaws have been disclosed by cybersecurity researchers, exposing serious risks in AI-agent environments where autonomous systems can access files, credentials, execution tools, and enterprise workflows. The vulnerabilities, collectively named Claw Chain by Cyera, can be chained together to achieve data theft, privilege escalation, sandbox escape, and persistence.

The vulnerabilities are tracked as CVE-2026-44112, CVE-2026-44113, CVE-2026-44115, and CVE-2026-44118. The most severe issue, CVE-2026-44112, has a CVSS score of 9.6 and can allow attackers to redirect writes outside the intended sandbox boundary.

OpenClaw is an open-source autonomous AI agent platform that can interact with local filesystems, tools, credentials, integrations, and execution environments. This makes vulnerabilities in OpenClaw especially important because attackers may be able to weaponize the agent’s own privileges against the host environment.

What is Claw Chain?

Claw Chain is the name given to a set of four chainable vulnerabilities in OpenClaw. Individually, the flaws affect sandbox isolation, file access, command validation, and owner-level access control. When combined, they can allow an attacker to move from limited execution inside the OpenShell sandbox to sensitive data exposure, owner-level privilege escalation, and persistent control.

The chain is especially concerning because it abuses behavior that may look like normal agent activity. AI agents are designed to read files, execute tools, manage workflows, and interact with runtime environments. If an attacker can influence those actions through a malicious plugin, prompt injection, compromised external input, or supply-chain content, traditional security tools may struggle to distinguish attack behavior from legitimate automation.

Overview of the Four OpenClaw Flaws

CVE Vulnerability Type Severity Potential Impact
CVE-2026-44112 TOCTOU filesystem write escape Critical Sandbox escape, configuration tampering, backdoor placement, persistence
CVE-2026-44113 TOCTOU filesystem read escape High Reading files outside the sandbox, credential exposure, sensitive data theft
CVE-2026-44115 Incomplete disallowed input validation High Command allowlist bypass, execution of unapproved commands at runtime
CVE-2026-44118 Improper access control / owner context spoofing High Privilege escalation to owner-level control of runtime operations

CVE-2026-44112: TOCTOU Filesystem Write Escape

CVE-2026-44112 is a time-of-check/time-of-use race condition in the OpenShell managed sandbox backend. The vulnerability allows attackers to bypass sandbox restrictions and redirect write operations outside the intended mount root.

This is the most severe issue in the Claw Chain set. If exploited successfully, an attacker may be able to tamper with configuration files, plant backdoors, modify trusted runtime behavior, and establish persistent control over the compromised host.

In an AI-agent environment, write access is particularly dangerous. Agents may routinely create files, update configuration, write logs, store outputs, and modify workflow artifacts. If those writes can be redirected outside the sandbox, the agent’s normal automation capabilities can become an attacker’s persistence mechanism.

CVE-2026-44113: TOCTOU Filesystem Read Escape

CVE-2026-44113 is another time-of-check/time-of-use race condition in OpenShell. Instead of redirecting writes, this flaw allows attackers to bypass sandbox restrictions and read files outside the intended mount root.

This can expose highly sensitive data, including system files, credentials, API tokens, internal artifacts, configuration files, secrets, and application data. In many environments, AI agents are connected to SaaS tools, internal systems, and local development environments, making read access outside the sandbox a serious data theft risk.

Even if the attacker does not immediately gain code execution, stolen credentials or configuration files may be enough to enable further compromise.

CVE-2026-44115: Command Allowlist Bypass Through Heredoc Expansion

CVE-2026-44115 is an incomplete list of disallowed inputs vulnerability. It allows attackers to bypass command allowlist validation by embedding shell expansion tokens inside a heredoc body.

This creates a gap between what OpenClaw validates and what the shell actually executes at runtime. A command may appear safe during validation, but shell expansion can cause unapproved behavior later.

For AI-agent platforms, this class of bug is especially risky because agents often rely on tool execution, shell commands, and automated workflows. If an attacker can manipulate command content through prompt injection, malicious plugins, or compromised inputs, they may be able to execute commands that were supposed to be blocked.

CVE-2026-44118: Owner Context Spoofing and Privilege Escalation

CVE-2026-44118 is an improper access control vulnerability that allows non-owner loopback clients to impersonate an owner. The issue stems from OpenClaw trusting a client-controlled ownership flag called senderIsOwner instead of deriving ownership from a properly authenticated session.

By manipulating this ownership context, a lower-privileged local client may gain access to owner-only operations. These operations can include gateway configuration, cron scheduling, and execution environment management.

OpenClaw has addressed the issue by issuing separate owner and non-owner bearer tokens and deriving senderIsOwner exclusively from the token that authenticated the request. The spoofable sender-owner header is no longer emitted or trusted.

How the Claw Chain Attack Works

The exploitation chain can unfold in four major steps:

  1. A malicious plugin, prompt injection, compromised external input, or supply-chain artifact gains execution inside the OpenShell sandbox.
  2. The attacker uses CVE-2026-44113 and CVE-2026-44115 to read sensitive files, expose credentials, and bypass execution restrictions.
  3. The attacker exploits CVE-2026-44118 to obtain owner-level control over the agent runtime.
  4. The attacker uses CVE-2026-44112 to modify configuration, plant backdoors, and establish persistence.

This chain is dangerous because it turns the AI agent into the attacker’s operational tool. Instead of dropping obvious malware immediately, the attacker can use the agent’s own permissions and workflows to access data, change configuration, and maintain control.

Why These OpenClaw Flaws Matter

The OpenClaw flaws matter because autonomous AI agents are no longer simple chat interfaces. They increasingly act as execution platforms that can interact with files, terminals, APIs, SaaS tools, calendars, repositories, customer systems, and cloud environments.

This changes the security model. A prompt injection or malicious plugin is no longer just a content manipulation issue. It can become a pathway to filesystem access, command execution, credential exposure, and persistence if the agent runtime has weak boundaries.

Cyera warned that each step of the attack chain may resemble normal agent behavior to traditional controls. That makes detection harder and increases the blast radius when an agent is connected to sensitive tools or data sources.

Affected Versions and Fixed Release

Cyera reported that the vulnerabilities affect OpenClaw versions prior to the April 2026 patches. CVE database entries for CVE-2026-44118 identify OpenClaw before 2026.4.22 as affected.

OpenClaw users should update to version 2026.4.22 or later to receive the fixes for the Claw Chain vulnerabilities.

Security teams should confirm the installed OpenClaw version across all environments, including developer machines, self-hosted agent servers, automation hosts, staging environments, and public-facing deployments.

Recommended Mitigation Steps

OpenClaw users should take the following actions immediately:

  • Upgrade OpenClaw to 2026.4.22 or later.
  • Review all OpenClaw deployments, including local developer instances and cloud-hosted agent runtimes.
  • Audit installed plugins, skills, and third-party integrations.
  • Remove untrusted or unused plugins from agent environments.
  • Restrict agent access to sensitive files, secrets, and configuration directories.
  • Rotate credentials that may have been accessible to OpenClaw agents.
  • Review logs for unusual file reads, writes, shell commands, cron changes, and gateway configuration updates.
  • Apply least privilege to agent runtime accounts.
  • Limit network exposure of OpenClaw services and loopback-accessible gateways.
  • Require human approval for high-risk actions such as shell execution, credential access, configuration changes, and scheduled tasks.

Detection Guidance

Defenders should review OpenClaw and host-level telemetry for suspicious behavior that may indicate exploitation or attempted exploitation.

Useful signals include:

  • Unexpected reads of sensitive files outside the sandbox mount root.
  • Unexpected writes to configuration files, startup scripts, cron jobs, or plugin directories.
  • Use of shell expansion tokens inside heredoc bodies.
  • Execution of commands that were not expected from approved workflows.
  • Changes to gateway configuration or execution environment settings.
  • Owner-only actions initiated by non-owner clients.
  • New scheduled tasks, startup hooks, or suspicious persistence mechanisms.
  • Outbound connections from agent processes to unknown destinations.

Because agent behavior can look legitimate, detection should combine application logs, host telemetry, process monitoring, filesystem monitoring, and identity context.

Why AI Agent Security Needs a Different Approach

Traditional application security often focuses on user input, authentication, authorization, and server-side code execution. AI-agent security must include all of those areas, but it also needs to account for tool use, prompt influence, plugin supply chains, filesystem access, autonomous decisions, and long-running memory or workflow state.

The Claw Chain vulnerabilities show that agent security failures can happen across multiple layers at once. A prompt injection may influence execution, a sandbox escape may expose files, an access-control flaw may elevate privileges, and a write escape may enable persistence.

Organizations using agent platforms should apply zero-trust principles to agent runtimes. Agents should not be trusted simply because they run locally or act on behalf of a user. Every file access, command execution, plugin action, and privileged operation should be constrained and auditable.

How Vulert Can Help

Vulert helps developers and security teams stay ahead of vulnerabilities by continuously monitoring open-source dependencies and software components without requiring access to source code.

Vulert can analyze manifest files and SBOMs such as package-lock.json, yarn.lock, composer.lock, requirements.txt, pom.xml, go.sum, Gemfile.lock, Cargo.lock, SPDX SBOMs, and CycloneDX SBOMs.

For vulnerabilities like the OpenClaw flaws, fast visibility is essential. Vulert helps teams identify affected components, understand fixed versions, and respond quickly before attackers can abuse vulnerable software in production environments.

You can review the vulnerabilities in the Vulert Vulnerability Database:

Conclusion

The four OpenClaw flaws known as Claw Chain demonstrate how AI-agent vulnerabilities can create a complete attack path from initial execution to data theft, privilege escalation, and persistence. The vulnerabilities affect sandbox boundaries, command validation, file access, and owner-level authorization.

OpenClaw users should upgrade to 2026.4.22 or later, audit plugins and workflows, rotate exposed credentials, review logs for suspicious file and command activity, and apply least privilege to agent runtimes.

As AI agents gain more access to enterprise systems, they become powerful automation tools and high-value attack surfaces. Organizations should secure them with the same seriousness applied to servers, CI/CD systems, cloud credentials, and production applications.

FAQs

What are the OpenClaw flaws?

The OpenClaw flaws are four chainable vulnerabilities tracked as CVE-2026-44112, CVE-2026-44113, CVE-2026-44115, and CVE-2026-44118. They can enable data theft, privilege escalation, sandbox escape, and persistence.

Why are AI-agent vulnerabilities dangerous?

AI agents often have access to files, credentials, tools, APIs, and execution environments. If compromised, attackers can use the agent’s own permissions to steal data, escalate privileges, or establish persistence.

How can Vulert help?

Vulert helps teams monitor vulnerabilities, identify affected components, and receive alerts using manifest files and SBOMs without requiring source code access.

oh-my-agent: five new skills land, plus vault and worktree isolation

326 commits over the last two weeks. The headline: five new skills shipped, secret management moved off shell rc files, and the project landed at #1 on its own 5-axis harness benchmark with 80.6/100.

What’s new

  • Five new skills: oma-market (deterministic market research pipeline across keyless sources), oma-docs (doc drift detection + sync), oma-deepsec (drives Vercel’s vulnerability scanner end-to-end), oma-academic-writer (publication-grade prose), oma-voice (local TTS/STT via Voicebox MCP).
  • oma vault: OS keychain credential store backed by @napi-rs/keyring. Stops ANTHROPIC_API_KEY and friends from sitting in shell rc files where any agent subprocess can read them.
  • agent:spawn --isolation=worktree: opt-in git worktree per spawned agent. Worktrees are retained on exit; the spawner prints merge or discard commands so you decide.
  • oma stats cost telemetry: per-vendor token breakdown with USD estimates from a conservative pricing floor. Input-only for now, output tokens tracked next.
  • oma model:check / probe / propose: detect model registry drift against live vendor sources without API keys, then emit a models.yaml patch for accepted candidates.
  • Cursor as a first-class vendor: cursor/composer-2, composer-2-fast, and auto register with native dispatch. New cursor-only preset (also renamed to plain cursor, see below).
  • Three slash workflows: /docs for drift verify and sync, /recap for daily and period summaries, /deepsec for the full scan to triage loop.
  • PWA on the docs site: manifest with maskable icons, install screenshots, and display_override for desktop title-bar customization.

What’s fixed

  • Serena MCP migrated from ephemeral uvx --from git+... to globally installed serena-agent via uv tool install, with vendor-specific --context per the upstream client matrix.
  • Hook keyword detector hardened against three bypass classes: NFKC normalization for fullwidth Latin from CJK IMEs, hyphen-rejecting word boundaries, and a two-tier CLI invocation guard so prompts that ARE CLI invocations no longer trigger workflows.
  • oma doctor CLI version probe bounded with a 1500ms spawn race + SIGTERM escalation, so a GUI binary that ignores --version can no longer hang the probe indefinitely.
  • i18n translation drift detection via oma docs i18n, plus oma docs lint for CJK em-dash anti-patterns (em-dash in CJK prose now flagged as a content-level lint, not auto-fixed).
  • Preset rename: claude-only to claude, antigravity to mixed. The -only suffix misrepresented the contract (you can already override per-agent), and antigravity collided with the runtime vendor id. Auto-migrated on oma update; hard-error on legacy values in oma-config.yaml.

What’s better

  • Benchmark: oh-my-agent now scores 80.6/100 on the 5-axis multi-judge harness (Functional, Spec, Visual, Engineering, Efficiency), landing #1 against omc, superpowers, vanilla, and ecc. Multi-judge averaging runs three rounds per axis to drop single-run noise.
  • oma update prints a “What’s new” note with added or removed skills and workflows after the version bump, so the catalog change is visible at upgrade time.
  • docs/generated/ auto-added to .gitignore on doc write sites via a unified cli/io/gitignore.ts module.
  • Telemetry opt-in unified across vendors: a single telemetry boolean in oma-config.yaml now drives Claude (DISABLE_TELEMETRY), Gemini, Qwen, and Codex opt-out keys on install and update.
  • cli/cli-kit/ merged into cli/utils/ so there is one home for shared CLI helpers instead of two overlapping ones.
  • Em-dash sweep across 173 files in skills, workflows, and docs per the oma-translator anti-AI-pattern rule. Em-dash usage restructured contextually with colons, periods, parens, or restructured sentences, not mechanical substitution.

Installation

# macOS / Linux
curl -fsSL https://raw.githubusercontent.com/first-fluke/oh-my-agent/main/cli/install.sh | bash
# Windows (PowerShell)
irm https://raw.githubusercontent.com/first-fluke/oh-my-agent/main/cli/install.ps1 | iex

Links

oh-my-agent is built for teams who orchestrate more than they prompt. Next up: closing the spec gap that surfaced in the benchmark by teaching skills the real-API plus deferred-stub pattern at scaffold time, not at fix time.

https://github.com/first-fluke/oh-my-agent

BuildPath — From idea to execution, one step at a time

I built a startup planning tool during the MeDo hackathon — and it started from personal frustration.
Every time I had an idea, I’d open Google and drown in tabs. No tool ever told me what to do with my specific idea.
So I built BuildPath.
→ Enter your idea, budget, and skill level
→ Get tailored validation actions using Perplexity, ChatGPT, and Claude
→ Run a reality check against the market
→ Get a full tech stack recommendation — AI builders, coding IDEs, hosting, payments
→ Walk away with a real build plan + PDF export
No account. No credit card. BYOK (Groq / OpenAI / Gemini).
Built without a budget for API costs — so instead of charging for AI, users bring their own key. What started as a constraint became the product philosophy.
By the founder, of the founder, for the founder.
🔗 https://app-b9okfacn4cn5.appmedo.com
Give it a try , Build your path , Turn chaos into a plan , Test drive the app

BuiltWithMeDo #indiehacker #buildinpublic #startups #builtwithAI

ตรวจจับ Log Anomaly อัตโนมัติด้วย Garudust Agent 🦅

ตรวจจับ Log Anomaly อัตโนมัติด้วย Garudust Agent 🦅

ถ้าคุณเคยนั่งไล่ดู log ไฟล์ที่ยาวหลายหมื่นบรรทัดเพื่อหาว่า “มันพังตรงไหน” — บทความนี้เขียนมาเพื่อคุณโดยเฉพาะ

Garudust Agent คือ AI agent runtime ที่เขียนด้วย Rust รองรับการ self-host บน hardware ของคุณเอง และมี skill ชื่อ log-analyst ใน garudust-hub ที่ถูกออกแบบมาสำหรับงานนี้โดยตรง

🤔 ปัญหาจริงที่นักพัฒนาเจอ

ระบบ production ทุกระบบมี log แต่การไล่อ่าน log ด้วยมือมีปัญหาหลายอย่าง:

  • ปริมาณมหาศาล — log หลักล้านบรรทัดต่อวัน ไม่มีใครอ่านได้หมด
  • Pattern ซับซ้อน — error เดียวกันอาจโผล่ในหลาย format
  • เจอช้า — กว่าจะรู้ว่าพัง ผู้ใช้แจ้งมาก่อนแล้ว
  • Context ขาด — รู้ว่า error ตรงไหน แต่ไม่รู้ว่า “ก่อนหน้านั้นมีอะไรเกิดขึ้น”

Garudust แก้ปัญหาเหล่านี้ด้วยการให้ LLM อ่านและวิเคราะห์ log แทนคุณ — แบบ real-time หรือ scheduled ก็ได้

🛠️ ติดตั้ง Garudust

วิธีที่ 1 — ใช้ Pre-built Binary (แนะนำ)

# Linux x86_64
wget https://github.com/garudust-org/garudust-agent/releases/latest/download/garudust-*-x86_64-unknown-linux-musl.tar.gz
tar -xzf garudust-*.tar.gz
sudo mv garudust garudust-server /usr/local/bin/

วิธีที่ 2 — Build จาก Source (ต้องมี Rust 1.75+)

git clone https://github.com/garudust-org/garudust-agent
cd garudust-agent
cargo build --release
export PATH="$PATH:$(pwd)/target/release"

ตั้งค่าเริ่มต้น

garudust setup

Wizard จะถามว่าใช้ LLM provider ไหน รองรับทั้ง Anthropic, OpenRouter, vLLM (local), Ollama และ AWS Bedrock

สำหรับคนที่มี GPU และ self-host: ใช้ vLLM กับ model เช่น Qwen3-8B ได้เลยโดยไม่เสียค่า API

export VLLM_BASE_URL=http://localhost:8000/v1
export GARUDUST_MODEL=Qwen/Qwen3-8B-AWQ

📦 ติดตั้ง log-analyst Skill

Skill คือ instruction set แบบ Markdown ที่บอก agent ว่าต้องทำอะไร เมื่อไหร่ อย่างไร

garudust skill install log-analyst

แค่นี้พอ — ครั้งถัดไปที่คุณพูดถึง log, agent จะโหลด skill นี้มาใช้อัตโนมัติ

🔍 ใช้งานจริง: วิเคราะห์ Log ทันที

กรณีที่ 1 — วิเคราะห์ syslog

garudust "วิเคราะห์ /var/log/syslog 500 บรรทัดล่าสุด หา error pattern ที่ผิดปกติ"

ตัวอย่าง output ที่ได้:

🔍 Log Analysis Report — /var/log/syslog
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

⚠️  ANOMALY DETECTED: Connection timeout spike
    → 47 occurrences ใน 3 นาที (ปกติ < 2/ชั่วโมง)
    → First seen: 14:32:01, Last: 14:35:18
    → Probable cause: Network interface congestion หรือ upstream service down

❌ ERROR Pattern: OOM Killer activated
    → Process: python3 (PID 18423)
    → Memory usage: 7.8GB / 8GB
    → Recommendation: เพิ่ม swap หรือ review memory leak ใน process

✅ ไม่พบ segfault, kernel panic หรือ disk I/O error

กรณีที่ 2 — วิเคราะห์ Application Log

garudust "อ่าน /opt/myapp/logs/app.log แล้วหา:
- Error rate ต่อนาที
- Request ที่ใช้เวลา > 5 วินาที  
- Pattern ที่น่าสงสัย
สรุปเป็นภาษาไทย"

กรณีที่ 3 — เปรียบเทียบ Log สองช่วงเวลา

garudust "เปรียบเทียบ /var/log/nginx/access.log ระหว่าง 10:00-11:00 กับ 14:00-15:00 
ว่า error rate ต่างกันไหม และ traffic pattern เปลี่ยนแปลงอย่างไร"

⏰ Cron: ตรวจ Log อัตโนมัติ ทุก 30 นาที

นี่คือจุดที่ทำให้ Garudust ต่างจากการรัน script ธรรมดา — agent สามารถ ตัดสินใจเองได้ ว่าสิ่งที่เจอนั้น “ผิดปกติ” หรือเปล่า

GARUDUST_CRON_JOBS="*/30 * * * *=Read /var/log/app.log last 300 lines, detect ERROR or WARNING anomalies, if severity is HIGH report summary with timestamp and probable cause" 
garudust-server --anthropic-key sk-ant-...

แจ้งเตือนผ่าน Telegram อัตโนมัติ

TELEGRAM_TOKEN=your_bot_token 
GARUDUST_CRON_JOBS="*/15 * * * *=Check /var/log/app.log for critical errors in last 15 minutes. If error rate exceeds 10 per minute, send alert to telegram with details" 
garudust-server --anthropic-key sk-ant-...

Agent จะส่ง message ไปยัง Telegram bot ของคุณเองอัตโนมัติเมื่อเจอ anomaly

🏭 Use Case จริง: ระบบ Industrial / Edge AI

สำหรับงาน IoT หรือ Edge AI ที่มี log จากเซนเซอร์หรือกล้องวงจรปิด สามารถทำแบบนี้ได้:

# ตรวจสอบ log จากระบบ OCR กล้อง factory ทุก 1 ชั่วโมง
GARUDUST_CRON_JOBS="0 * * * *=Analyze /opt/vision/logs/ocr_results.log, find rows where confidence_score < 0.6 or recognition_failed = true, count anomaly rate, if > 5% in last hour generate incident report" 
VLLM_BASE_URL=http://localhost:8000/v1 
GARUDUST_MODEL=Qwen3-8B-AWQ 
garudust-server

ข้อดีคือรันบน local GPU ได้เลย ไม่ต้องส่ง log ออกไปยัง cloud เหมาะมากสำหรับระบบ industrial ที่ข้อมูลเป็น confidential

✏️ เขียน Skill เองสำหรับ Log Format เฉพาะทาง

ถ้า log ของคุณมี format แปลก หรืออยากให้ agent วิเคราะห์แบบเฉพาะเจาะจง เขียน SKILL.md เองได้ใน ~/.garudust/skills/:

---
name: factory-log-analyst
description: Analyze industrial machine log from SMARTSense IDA system
version: 1.0.0
---

เมื่อถูกขอให้วิเคราะห์ log จากระบบ IDA ให้ทำตามนี้:

1. อ่าน log file ด้วย terminal tool
2. หา pattern เหล่านี้ที่บ่งบอกปัญหา:
   - confidence_score < 0.5 (OCR accuracy ต่ำผิดปกติ)
   - frame_drop_rate > 0.1 (กล้องส่งภาพไม่ครบ)
   - roi_timeout (พื้นที่ตรวจสอบไม่ response)
   - connection_lost (กล้องหลุด)
3. คำนวณ:
   - Anomaly rate ต่อชั่วโมง
   - ROI ที่มีปัญหาบ่อยที่สุด
4. สรุปเป็นภาษาไทย ระบุ:
   - ความรุนแรง (Critical / Warning / Info)
   - เวลาที่เกิด
   - สาเหตุที่น่าจะเป็น
   - คำแนะนำในการแก้ไข

🔧 Tool เพิ่มเติมจาก garudust-hub

นอกจาก log-analyst skill แล้ว ยังมี tools ใน hub ที่ช่วยงาน log ได้:

# ติดตั้ง tools ที่มีประโยชน์
garudust tool install csv_to_json    # แปลง log CSV → JSON
garudust tool install file_info      # เช็ค size/encoding ก่อนอ่าน
garudust tool install token_count    # เช็คว่า log ยาวเกิน context ไหม
garudust tool install extract_urls   # ดึง URL จาก access log

ใช้คู่กันในคำสั่งเดียว:

garudust "ใช้ file_info ดูขนาดของ /var/log/nginx/error.log ก่อน แล้วถ้าไม่เกิน 100KB ให้วิเคราะห์หา anomaly ทั้งหมดที่เกิดขึ้นวันนี้"

📊 เปรียบเทียบ: Garudust vs วิธีเดิม

Script ธรรมดา (grep/awk) ELK Stack Garudust
ติดตั้ง ง่าย ซับซ้อน ง่าย (binary เดียว)
Resource ต่ำ สูงมาก (ต้องการ RAM หลาย GB) ต่ำ (~10MB binary)
วิเคราะห์ context ❌ ❌ ✅ (LLM เข้าใจ context)
แจ้งเตือนอัตโนมัติ ต้องเขียนเอง ✅ ✅ built-in
Self-host ✅ ✅ ✅
ภาษาไทย ❌ ❌ ✅
สรุปสาเหตุ ❌ ❌ ✅

🚀 เริ่มต้น 5 นาที

# 1. ติดตั้ง
wget -qO- https://github.com/garudust-org/garudust-agent/releases/latest/download/garudust-$(uname -m)-unknown-linux-musl.tar.gz | tar -xz
sudo mv garudust /usr/local/bin/

# 2. ตั้งค่า
garudust setup

# 3. ติดตั้ง skill
garudust skill install log-analyst

# 4. ลองเลย!
garudust "วิเคราะห์ /var/log/syslog 100 บรรทัดล่าสุด หา error ที่น่าสงสัย"

สรุป

Garudust ไม่ใช่แค่ tool อ่าน log — มันคือ agent ที่เข้าใจ context ของ log และช่วยตัดสินใจว่าอะไรคือ “ปกติ” หรือ “ผิดปกติ” โดยใช้ความสามารถของ LLM

จุดแข็งที่สำคัญสำหรับ DevOps และ Industrial Engineer คือ:

  • Self-host ได้ 100% — ไม่ต้องส่ง log ออก cloud
  • รองรับ local LLM — ใช้ vLLM + Qwen/LLaMA บน GPU ของตัวเองได้
  • ภาษาไทยได้เลย — detect ภาษาอัตโนมัติ ไม่ต้องตั้งค่า
  • Cron built-in — ตั้งตรวจอัตโนมัติได้ทันที

🔗 Links:

มีคำถามหรืออยากแลกเปลี่ยนประสบการณ์ใช้ Garudust? comment ได้เลยครับ 🙌

How I Built Suggix — A Modern Feedback System for SaaS Teams

User-facing feedback portal

Why I Built Suggix — From Feedback Tool Chaos to a Unified Task System

I didn’t set out to build another feedback tool.

If anything, I was trying to avoid them.

Because the more SaaS products I worked on, the more obvious it became: the entire feedback tooling category is broken — not in small ways, but structurally.

Suggix came from trying to remove friction that every team quietly tolerates.

  1. Feedback Tools Have Become Bloated and Expensive

At some point, feedback tools stopped being simple utilities and turned into enterprise suites.

You get:

  • Roadmaps
  • Portals
  • Analytics dashboards
  • Voting systems
  • Knowledge bases
  • Customer communication layers

And somehow, all of that is packaged into a single product that costs more than most early-stage teams should reasonably pay.

But the real issue isn’t just cost.

It’s cognitive overhead.

Most teams don’t wake up thinking:

“Let’s manage our feedback system today.”

They wake up thinking:

“What should we build next?”

And the tool gets in the way of that answer.

Instead of simplifying decision-making, it adds another layer of administration work — another system to maintain, configure, and sync.

I started questioning whether we actually needed “feedback platforms” at all — or whether we just needed a cleaner path from signal to execution.

  1. The Broken Flow Between Feedback → Product → Execution

The deeper problem shows up once feedback becomes real work.

A typical flow looks like this:

  1. A user submits feedback
  2. It gets upvoted in a feedback tool
  3. A PM reviews it later
  4. It gets manually copied into Jira or Linear
  5. A status is created (“Planned”, “In Progress”, “Done”)
  6. Someone tries to sync that status back to the feedback tool
  7. Users still have no idea what is actually happening

In practice, this is slow, fragmented, and out of sync.

The same piece of work exists in multiple systems, each with slightly different truth:

  • Feedback tool: “Under review”
  • Jira: “In progress”
  • Slack: “We might do this next sprint”

None of them are actually aligned in real time.

And the cost is not just operational — it’s communicational.

Users constantly ask:

“Any update on this?”

And teams constantly answer:

“It’s in progress… somewhere.”

That gap is exactly what Suggix is designed to remove.

Suggix treats feedback as the system of record for execution.

Not a voting board. Not a passive inbox.

A live task system.

In Suggix:

  • Feedback becomes a task immediately
  • That task has real status, not duplicated metadata
  • The same system is used by both internal teams and external users
  • Updates happen in real time, not through manual sync

The goal is simple:

The work you’re doing internally should always reflect externally — without translation layers.

This removes the need for Jira or Linear in many lightweight teams.

Not because they are bad tools — but because for small teams, context switching between systems is pure overhead.

Suggix becomes the task layer itself.

User-facing feedback portal

  1. Feedback Should Not Be Separate From Execution

The biggest mental shift was realizing this:

Most tools assume feedback → planning → execution are separate stages.

But in reality, for fast-moving teams, they are the same thing.

If a user reports a missing feature and you agree it matters, it’s not “feedback” anymore.

It’s a task.

And once it becomes a task, everything else should collapse into one system:

  • No re-typing into Jira
  • No duplicate status tracking
  • No “sync back later”
  • No ambiguity about what stage something is in

Suggix is built around that idea:

Feedback is not something you manage. It’s something you act on.

Feedback Management & Task Management

  1. The Tech Stack Was Intentionally Simple

From day one, I didn’t want infrastructure complexity to become part of the product story.

Suggix is built with a deliberately straightforward stack:

  • Database: MySQL
  • Backend: Golang
  • Frontend: Next.js
  • Infrastructure: AWS + CloudFront

There are no exotic dependencies or experimental systems in the core.

The reason is simple: this system needs to be reliable, predictable, and easy to evolve.

Because the hardest part of building a feedback-to-task system is not computation — it’s consistency.

  1. What I Learned Building It

Building Suggix made one thing extremely clear:

Most SaaS teams don’t need more “feedback management.”

They need:

  • fewer systems
  • fewer sync points
  • fewer places where truth can diverge

And more importantly:

They need feedback to become execution automatically.

Once you remove the gap between “someone asked for it” and “it’s being built”, a lot of operational noise disappears:

  • fewer status meetings
  • fewer duplicate tickets
  • fewer support questions
  • fewer internal misalignments

That’s the real goal of Suggix.

Not to be another feedback tool.

But to collapse feedback and execution into a single live system.

Closing

Suggix started from a simple frustration:
t to be novel — it was to stay maintainable.

Because feedback systems only work if they are reliable at scale.

What Changed After Building It

Once I started dogfooding Suggix on real feedback streams, a few things became obvious:

  • Most “feature requests” are actually communication problems
  • A large portion of feedback is repetitive, not new
  • The real value is in pattern detection, not collection
  • Teams don’t need more feedback — they need better synthesis

That’s ultimately what Suggix is trying to solve.

Not “collecting feedback better”.

But turning feedback into decisions faster.

If you’re building SaaS today, you probably don’t need more tools to collect feedback.

You already have enough of those.

What you likely need is a way to:

  • reduce noise
  • detect patterns
  • and make decisions with confidence

That’s the gap I kept seeing — and why I built Suggix.

Why 40% of Dev Time is Wasted on Rework (And How Better SDD Practices Can Fix It)

Most engineering teams believe they have a productivity problem.

They think development is slow because there are too many meetings, not enough developers, or because the tech stack isn’t modern enough. But after spending time inside real software teams, one uncomfortable pattern keeps appearing again and again: developers are not actually spending most of their time building new things. They’re spending a massive amount of time fixing, rewriting, and correcting work that should have been done correctly the first time.

Research published in the Journal of Systems and Software suggests that software projects can spend nearly 40–50% of development effort on avoidable rework. That number sounds extreme until you look closely at how modern teams operate. A feature gets shipped quickly, but the requirements were vague. Backend and frontend interpret the logic differently. Product changes direction halfway through implementation. APIs need redesigning after integration. Suddenly an entire sprint disappears, not because the team failed to work hard, but because the foundation itself was unstable from the beginning.
And the scary part is that most teams don’t even realize how much time is being lost.

The Invisible Work That Nobody Talks About
One of the biggest problems with rework is that it often looks like “progress” on the surface. Developers are active, pull requests are merged, tickets are moving across the board, and deployments are happening constantly. From a management perspective, everything appears productive.
But inside the engineering workflow, a huge amount of energy is quietly consumed by invisible work.
Engineers jump between fixing edge cases, correcting misunderstood business logic, reviewing AI-generated code, patching integrations, rewriting unstable modules, or refactoring rushed implementations from previous sprints. A 2026 engineering report from Harness described this phenomenon as the rise of “invisible work,” where developers spend increasing amounts of time maintaining momentum instead of creating meaningful forward progress.
Many developers know this feeling personally. You finish coding a feature, only to discover later that the requirement was incomplete. Or worse, you realize the system design itself cannot support the new business case. So instead of building the next feature, the team spends days or weeks repairing existing decisions.
This is the part of software engineering that dashboards rarely capture.

The Real Problem Isn’t Coding, It’s Alignment
A lot of teams assume rework happens because developers make mistakes.
In reality, rework often begins long before coding even starts.
The deeper issue is usually weak alignment between business goals, system design, and technical execution. This is where SDD (Software Design & Documentation) becomes incredibly important, even though many companies still treat documentation as optional or “something we’ll clean up later.”
Ironically, skipping proper design discussions in order to “move faster” often creates the exact opposite result.
When requirements are unclear, every developer fills the gaps differently based on their own assumptions. Product managers imagine one workflow, backend engineers design another, and frontend developers build something slightly different again. Nobody is technically wrong, but the system slowly drifts into inconsistency. By the time these misunderstandings are discovered, the cost of fixing them becomes dramatically higher.
This is why experienced engineers care so much about seemingly boring things like API contracts, edge cases, sequence diagrams, or failure scenarios. They understand that a single unclear assumption early in development can later evolve into weeks of refactoring.
And most teams only notice the problem when delivery timelines begin slipping.

AI Is Speeding Up Code, But Not Understanding
AI coding tools have changed software development dramatically over the past few years. Developers can now generate boilerplate code, build components faster, and automate repetitive implementation tasks in ways that were impossible not long ago.
But there’s an important distinction many companies are beginning to learn the hard way:
AI accelerates code generation.
It does not automatically improve system thinking.
A recent report found that 81% of developers now spend more time reviewing code after adopting AI-assisted tools. That insight is incredibly revealing because it highlights a common misconception in modern engineering culture: people assume faster coding automatically means faster development.
But software engineering has never been only about writing code.
The hardest part is usually understanding the problem clearly enough to build the right solution in the first place.
If requirements are vague, AI simply helps teams generate incorrect implementations faster. If architecture decisions are weak, AI can unintentionally accelerate technical debt. Teams may feel more productive because more code is being produced, but underneath the surface, complexity and maintenance costs continue growing silently.
This is why many senior engineers today are becoming more focused on design quality than raw coding speed.

High-Performing Teams Think Differently About Rework
Interestingly, elite engineering teams do not eliminate rework completely.
They understand that change is a natural part of software development. Requirements evolve, markets shift, users behave unpredictably, and no system design survives reality perfectly.
What strong teams do differently is reduce avoidable rework.
Instead of rushing directly into implementation, they spend more time aligning expectations early. They prototype quickly, validate assumptions sooner, and encourage technical discussions before large-scale development begins. Their goal is not to create endless documentation, but to create enough shared understanding that developers are not constantly rebuilding the same things.
They also design systems with change in mind. Rather than tightly coupling every service together, they prioritize modularity and maintainability because they assume future changes are inevitable. This mindset completely changes how teams approach architecture.
The question becomes:
“How do we make future changes cheaper?”
—not—
“How do we avoid change forever?”
That difference in thinking is huge.

The Business Cost Is Bigger Than Most People Realize
Imagine a 10-person engineering team losing just two hours per day to avoidable rework. That may not sound catastrophic at first, but over weeks and months, the numbers become enormous. Hundreds of engineering hours disappear into fixing preventable issues instead of building real business value.
And the impact is not only financial.
Constant rework slowly damages morale inside teams. Developers become frustrated because they feel like nothing is ever truly finished. Product teams lose confidence in timelines. Technical debt increases pressure on future releases. Eventually, engineering culture shifts from innovation into survival mode, where teams spend more time maintaining instability than creating progress.
This is why weak SDD is not simply a documentation issue.
It’s a scalability issue.
A delivery issue.
A business issue.

Final Thoughts
The software industry loves discussing frameworks, AI tools, productivity hacks, and shipping velocity. But many teams are still ignoring one of the most expensive hidden problems in engineering:
Building the wrong thing correctly is still failure.
And in many cases, teams are not slowed down because developers lack talent. They are slowed down because the organization failed to create enough clarity before implementation began.
Better SDD will never feel as exciting as shipping features quickly. Documentation rarely goes viral on social media. Architecture discussions are not glamorous. But over the long term, the teams that invest in clarity almost always move faster than the teams that constantly rebuild their own mistakes.

Sustainable speed in software engineering does not come from writing code faster.
It comes from reducing the amount of code you need to rewrite later.

Website: https://myspec.dev
Feedback form: https://docs.google.com/forms/d/e/1FAIpQLSfiwMWMqFgUUVXops5J1LWsF7DQOJGUqwBATbtlx8IJ9fma1Q/viewform