[{"data":1,"prerenderedAt":392},["ShallowReactive",2],{"blog-/en/self-verifying-ai":3,"blog-related-/en/self-verifying-ai":246},{"id":4,"title":5,"author":6,"body":7,"date":229,"description":230,"extension":231,"image":232,"meta":233,"navigation":234,"path":235,"seo":236,"stem":237,"tags":238,"__hash__":245},"blog/en/self-verifying-ai.md","The AI That Checks Its Own Work","Martin Swoboda",{"type":8,"value":9,"toc":218},"minimark",[10,14,22,25,30,36,39,46,50,64,67,71,91,94,102,106,124,131,139,143,150,153,157,164,182,185,189,192,195,198,213],[11,12,13],"p",{},"Here's the failure mode nobody puts in the demo. You ask an AI agent to add a section to your homepage. It calls the API, writes the content, and reports back: \"Done — I've added the pricing section.\" You take its word for it. Two days later a visitor emails to say half the page is blank, because a template reference was misspelled and the whole block silently rendered to nothing.",[11,15,16,17,21],{},"The agent didn't lie. It genuinely wrote the content. It just never ",[18,19,20],"em",{},"looked"," at the result — because in most AI-and-CMS setups, it can't. It writes into a black box and gets back an \"OK.\" Whether the page actually renders, whether the layout holds, whether the thing a human would see is right — none of that comes back through the API.",[11,23,24],{},"That gap is the whole reason we built verification into Neleto instead of leaving it to hope. An agent working on your site gets three ways to check its own work before it tells you it's done.",[26,27,29],"h2",{"id":28},"the-problem-with-fire-and-forget","The problem with \"fire and forget\"",[11,31,32,33],{},"When a headless CMS hands an agent an API, the contract ends at \"content accepted.\" The rendering happens somewhere else — a separate frontend, a separate build — so the system the agent talks to has no idea what the visitor eventually sees. The agent can be perfectly obedient and still ship a broken page, because ",[18,34,35],{},"the thing that renders and the thing the agent controls are two different systems.",[11,37,38],{},"That's fine when a human reviews every change. It stops being fine the moment you want an agent to do real work unattended — migrate forty pages, fix a batch of redirects, translate a section — because now nobody is looking at the output until it's already live. \"The API said OK\" is not the same as \"the page is right,\" and the distance between those two sentences is exactly where things break.",[11,40,41,42,45],{},"Neleto closes that distance because content, rendering, and the agent interface are one system. So the agent can do what a careful human does: write, check, and only ",[18,43,44],{},"then"," say it's finished.",[26,47,49],{"id":48},"layer-1-the-write-talks-back","Layer 1 — the write talks back",[11,51,52,53,58,59,63],{},"The first layer is the quiet one. Every tool on Neleto's ",[54,55,57],"a",{"href":56},"/docs/developer/mcp","native MCP server"," returns ",[60,61,62],"strong",{},"typed structured output",", not a vague success string. When an agent creates a page or updates a component, it gets back the actual object it just wrote — the resolved fields, the IDs, the references — in a shape it can inspect.",[11,65,66],{},"That sounds small, but it's the difference between \"the server didn't reject my request\" and \"here is exactly what now exists.\" The agent can compare what it intended against what came back and catch a mismatch immediately — a field that didn't take, a reference that resolved to the wrong thing — instead of assuming the write did what it meant.",[26,68,70],{"id":69},"layer-2-check-the-template-before-you-publish","Layer 2 — check the template before you publish",[11,72,73,74,77,78,82,83,86,87,90],{},"The second layer catches the misspelled-reference class of bug before a visitor ever could. Neleto's MCP server exposes ",[60,75,76],{},"LSP checks"," — ",[79,80,81],"code",{},"lsp_check_page",", ",[79,84,85],{},"lsp_check_layout",", and ",[79,88,89],{},"lsp_check_component"," — the same language-server validation the editor uses, available to the agent as a tool call.",[11,92,93],{},"The agent loads a page, layout, or component and gets back the errors and warnings in its template: an unknown helper, a reference that won't resolve, a form field that doesn't line up with the template that consumes it. This is the step that would have caught the blank pricing block. The agent runs the check, sees the diagnostic, fixes the reference, and re-checks — all before publish, all without a human noticing anything went wrong, because nothing did by the time you looked.",[11,95,96,97,101],{},"It's the same instinct that makes a compiler valuable: find the mistake at the point of writing, not at 2am in production. We wrote about ",[54,98,100],{"href":99},"/blog/why-neleto-runs-on-rust","why that mindset runs all the way down to Rust"," — this is the same idea, one level up, handed to the agent.",[26,103,105],{"id":104},"layer-3-open-the-live-page-and-look","Layer 3 — open the live page and look",[11,107,108,109,112,113,82,116,119,120,123],{},"The third layer is the one that feels almost human. Neleto's ",[79,110,111],{},"settings_get"," tool hands the agent the live instance's real public URLs — ",[79,114,115],{},"publicBaseUrl",[79,117,118],{},"adminUrl"," — so it can go and ",[60,121,122],{},"open the page it just built",", the exact URL a visitor would hit, and read the rendered result back.",[11,125,126,127,130],{},"This is the check the other two can't do. Typed output confirms the write; LSP confirms the template compiles; but only fetching the live page confirms that the finished thing ",[18,128,129],{},"actually looks like a page",". The section is there, the heading rendered, the image resolved, the layout didn't collapse. An agent with a screenshot tool can literally look at it. The loop that used to require a human — \"let me just load it and see\" — is now something the agent does for itself before it reports back.",[11,132,133,134,138],{},"None of this works without the roles you already set. Every one of these operations — read, write, check, view — runs with the agent's permissions enforced on the server, so \"check its own work\" never means \"quietly gain more access.\" We went deep on how that server actually works in ",[54,135,137],{"href":136},"/blog/mcp-server-explained","the MCP deep dive",".",[26,140,142],{"id":141},"why-this-needs-one-system-not-three","Why this needs one system, not three",[11,144,145,146,149],{},"You could, in principle, bolt a verification step onto a headless stack: wire the agent to the content API, wire it ",[18,147,148],{},"separately"," to the rendered frontend, stand up a screenshot service, and glue the diagnostics together yourself. People do. It's a pipeline you now own and maintain forever, and every part of it can drift out of sync with the others.",[11,151,152],{},"Neleto's version isn't cleverer — it's just that when the content, the renderer, and the agent interface are the same system, the verification is already local. The live URL the agent checks is served by the same box that stored the content it wrote. There's no second system to keep honest, because there's no second system.",[26,154,156],{"id":155},"where-a-human-still-has-to-look","Where a human still has to look",[11,158,159,160,163],{},"Build-in-public means saying what this ",[18,161,162],{},"doesn't"," do, because the honest limit is the useful part.",[11,165,166,167,170,171,174,175,178,179,138],{},"Self-verification answers \"did it render, and is it structurally sound?\" It does ",[60,168,169],{},"not"," answer \"is it good?\" An agent can confirm the pricing section exists, renders cleanly, and passes every check — and the copy can still be off-brand, the tone wrong, a number out of date, a claim that isn't true. Those are judgment calls, and judgment is still yours. What these three layers buy you is that the ",[18,172,173],{},"mechanical"," failures — the broken reference, the collapsed layout, the silent blank block — get caught by the machine, so your review can be about whether the page is ",[18,176,177],{},"right",", not whether it ",[18,180,181],{},"works",[11,183,184],{},"And the agent has to actually use the tools. The capability is there; a careless prompt can still skip the check. That's a real edge, and worth knowing before you hand an agent the keys to forty pages.",[26,186,188],{"id":187},"the-point","The point",[11,190,191],{},"\"AI-native\" gets thrown around until it means nothing. For us it means something specific and testable: an agent working on your site can do the whole loop a careful person does — write it, check the template, open the live page, and only then call it done — because it's all one system and the checks are one tool call away.",[11,193,194],{},"That's a smaller, more honest promise than \"the AI does it all.\" It's also the one that keeps a blank pricing section off your homepage.",[196,197],"hr",{},[11,199,200,203,204,208,209,138],{},[60,201,202],{},"Try it yourself:"," ",[54,205,207],{"href":206},"/pricing","connect an agent to a free Neleto project",", ask it to build a page, and tell it to open the live URL and check its own work. Watch it catch its own mistake before you have to — ",[54,210,212],{"href":211},"/features","that's what the complete CMS is for",[11,214,215],{},[60,216,217],{},"Fast websites. Easy content. AI native.",{"title":219,"searchDepth":220,"depth":220,"links":221},"",2,[222,223,224,225,226,227,228],{"id":28,"depth":220,"text":29},{"id":48,"depth":220,"text":49},{"id":69,"depth":220,"text":70},{"id":104,"depth":220,"text":105},{"id":141,"depth":220,"text":142},{"id":155,"depth":220,"text":156},{"id":187,"depth":220,"text":188},"2026-08-24","Most AI-plus-CMS setups write content through an API and hope it rendered. Neleto closes the loop three ways — typed structured output, LSP template checks before publish, and the agent opening your live page to see what it actually built. Here's how each layer works, and where a human still has to look.","md","/img/blog/self-verifying-ai.svg",{},true,"/en/self-verifying-ai",{"title":5,"description":230},"en/self-verifying-ai",[239,240,241,242,243,244],"Neleto","AI","MCP","Agents","Build in Public","CMS","GIYRJLlcKAH3y-TgXi6KVWcdP3w0LMH9YtbnBwbeAnU",[247,249,260,270,280,290,301,310,319,329,339,347,358,367,377,384],{"path":235,"title":5,"description":230,"date":229,"author":6,"image":232,"tags":248},[239,240,241,242,243,244],{"path":250,"title":251,"description":252,"date":253,"author":6,"image":254,"tags":255},"/en/five-plugins-built-in","Five New Neleto Plugins — Built In, Not Bolted On","Search, comments, Google reviews, SEO/accessibility audits, and galleries — five new plugins that run inside your Neleto instance on your EU server, with no third-party scripts and no extra subscriptions. Here's what each does, and where the edges are.","2026-08-17","/img/blog/five-plugins-built-in.svg",[239,256,244,243,257,258,259],"Plugins","SEO","Search","DSGVO",{"path":261,"title":262,"description":263,"date":264,"author":6,"image":265,"tags":266},"/en/why-neleto-runs-on-rust","Why Neleto Runs on Rust (And the Benchmarks to Prove It)","The honest story behind choosing Rust for a CMS backend — real single-instance benchmarks (11 ms TTFB, ~9,400 req/s, 78 MB RAM) and the parts that actually cost us: slower dev, harder hiring, younger libraries.","2026-08-10","/img/blog/why-neleto-runs-on-rust.svg",[239,267,268,269,243],"Rust","Performance","Benchmarks",{"path":271,"title":272,"description":273,"date":274,"author":6,"image":275,"tags":276},"/en/page-builder-walkthrough","Building a Landing Page in Neleto: A Real Walkthrough (Mouse and Prompt)","I built the same landing page twice — once by hand in our visual builder, once by prompting Claude through our MCP server — and timed both. Here's exactly what happened, including the bits that were slower than I'd like.","2026-07-27","/img/blog/page-builder-walkthrough.svg",[239,277,244,241,278,279],"Page Builder","AI CMS","No-Code",{"path":281,"title":282,"description":283,"date":284,"author":6,"image":285,"tags":286},"/en/mcp-connectors","Connect Neleto to Anything: The Native MCP Server and Connector Ecosystem","Your CMS shouldn't be an island. Here's how Claude, Cursor, and Windsurf talk to your content directly — and where it goes next.","2026-07-20","/img/blog/mcp-connectors.svg",[241,287,240,288,289,239,244],"Connectors","Claude Code","Cursor",{"path":291,"title":292,"description":293,"date":294,"author":6,"image":295,"tags":296},"/en/wordpress-migration-walkthrough","Migrating a 40-Page Site Off WordPress: An Honest, Start-to-Finish Walkthrough","The content migration took under an hour. The full cutover — domain, DNS, redirects, forms, QA — took the better part of a day. Here's every step, every gotcha, and the parts the migration guides skip.","2026-07-13","/img/blog/wordpress-migration-walkthrough.svg",[297,298,244,299,300,239],"WordPress","Migration","GDPR","EU Hosting",{"path":302,"title":303,"description":304,"date":305,"author":6,"image":306,"tags":307},"/en/html-to-editable-cms","I turned a static HTML page into an editable CMS site with one prompt","Web designers lose days rebuilding finished designs as a CMS. Here's how Neleto's native MCP server does it from a single prompt — animations, custom cursor and all.","2026-07-06","/img/blog/html-to-editable-cms.svg",[241,308,309,288,244,239],"AI Agents","Web Design",{"path":311,"title":312,"description":313,"date":314,"author":6,"image":315,"tags":316},"/en/console-launch-free-tier","Neleto Console Is Live — and the Free Tier Is Open","Sign up at console.neleto.io, get a real CMS, and pay us nothing. Here's why we built it that way.","2026-06-29","/img/blog/console-launch-free-tier.svg",[243,239,317,318,300,244],"Free Tier","Self-Serve",{"path":320,"title":321,"description":322,"date":323,"author":6,"image":324,"tags":325},"/en/mcp-server-explained","MCP Server Explained: The Deep Dive","How the Model Context Protocol enables secure, native AI agent interaction with your applications — and why native implementation matters.","2026-06-22","/img/blog/mcp-server-explained.svg",[241,326,327,308,328],"MCP Server","Model Context Protocol","AI Integration",{"path":330,"title":331,"description":332,"date":333,"author":6,"image":334,"tags":335},"/en/neleto-vs-contentful","Neleto vs Contentful: Which CMS Should You Choose in 2026?","A practical comparison for developers, agencies, and growing businesses — covering pricing, performance, AI integration, editor experience, and EU compliance.","2026-06-16","/img/blog/neleto-vs-contentful.svg",[239,336,337,338,278],"Contentful","Headless CMS","CMS Comparison",{"path":340,"title":341,"description":342,"date":343,"author":6,"image":344,"tags":345},"/en/agentic-traffic-surpassed-humans","Bots Just Out-Numbered Us: What the Agentic Web Means for Your CMS","Cloudflare says AI agents now drive the majority of web traffic — 18 months early. Here's why that changes how you publish content, and what to do about it.","2026-06-08","/img/blog/agentic-traffic-surpassed-humans.svg",[346,308,241,244,239],"Agentic Web",{"path":348,"title":349,"description":350,"date":351,"author":6,"image":352,"tags":353},"/en/glw-gmbh-case-study","Modernizing a 40-Year Family Business: GLW GmbH's New Website with Neleto","How we delivered a fast, multilingual, and CRM-integrated website for a leading German cable processing specialist — in close collaboration with agency Inhalt.","2026-06-05","/img/blog/glw-gmbh-case-study.svg",[354,355,239,356,357],"Case Study","Customer Story","CRM Integration","Custom Plugin",{"path":359,"title":360,"description":361,"date":362,"author":6,"image":363,"tags":364},"/en/eu-hosting-compliance","Why EU Hosting Compliance Matters for Your Website","Data sovereignty, GDPR, and choosing the right infrastructure in 2026","2026-06-01","/img/blog/eu-hosting-compliance.svg",[299,300,365,366,239],"Data Compliance","Privacy",{"path":368,"title":369,"description":370,"date":371,"author":6,"image":372,"tags":373},"/en/buergerstiftung-ravensburg","Bürgerstiftung Ravensburg: A Modern Website for Community Impact with Neleto","How we built a clear, fast, and emotionally engaging website for a regional community foundation using Neleto CMS — in close collaboration with agency Inhalt.","2026-05-29","/img/blog/buergerstiftung-ravensburg.svg",[354,374,375,239,376],"Nonprofit","Foundation","Website",{"path":378,"title":379,"description":380,"date":381,"author":6,"image":382,"tags":383},"/en/what-is-mcp","What is the Model Context Protocol (MCP)?","The new standard connecting AI agents to your tools and data","2026-05-25","/img/blog/what-is-mcp.svg",[241,240,327,308,244],{"path":385,"title":386,"description":387,"date":388,"author":6,"image":389,"tags":390},"/en/why-neleto-exists","Why Neleto Exists","The CMS Built for Speed, Simplicity, and the AI Era","2026-05-18","/img/blog/why-neleto-exists.svg",[244,240,391,268,239],"Web Development",1787646664897]