VicroCode
Make Code Create Value
VicroCode is a lightweight online platform for publishing, running, sharing, and monetizing code projects. Launch HTML, Python, SQLite, AI agents, management tools, games, and more without server setup.
Please wait while VicroCode loads. You can also explore the AI programming guide
Loading...

AI MARKET GUIDE

Rebuilding AegisCrawler's Immutable-Rule Idea on VicroCode: Python + SQLite Version Binding, Minus the Browser

AegisCrawler's best call was making rules immutable, versioned, and patch-only for the LLM. Here's how to rebuild that audit half in hosted Python and SQLite.

There's one design decision buried in the AegisCrawler write-up that's worth more than the whole scraping pitch, and it's easy to miss because the demo is all about recording clicks in a browser. The line that matters: recorded rules become immutable, human-approved versions, every execution pins the exact version that ran, and the LLM is kept on a leash. It can only propose a patch against a deterministic baseline. That patch goes through a safety scan, lands as a pending rule, and a human looks at the diff before applying or rejecting it. The model is optional. Turn it off and everything still runs.

That's the part I wanted to rebuild, because it solves a problem that has nothing to do with crawling and everything to do with trust. When something breaks in production and someone asks "what exactly ran last Tuesday," you want to answer with a specific version hash, not a shrug.

Why the version-binding half is the durable idea

Read the rest of the evidence from that same forum and you can feel the anxiety underneath it. One developer says they've basically stopped hand-writing code this year and now spend their days directing "silicon-based lifeforms," carrying the uncertainty of whatever the AI produces. Another thread describes a Claude Code session that allegedly injected a scheduled task on a rented instance, with the model itself insisting the machine was clean. Whether that was a real compromise or a hallucination almost doesn't matter. The point is that nobody in the thread could reconstruct which step did what.

That's the recurring signal across these posts: people are handing more authority to models, and the thing they keep losing is a clean record of what was approved versus what the model improvised. AegisCrawler's answer is old-fashioned and correct. Freeze the approved artifact. Make the model a proposer, not an author. Bind every run to a version you can point at later.

A job listing in the same batch quietly agrees. It asks for engineers who are "clear about what to hand to the model and what you must verify yourself," and who publish model outputs as "rollback-capable online services." Same instinct, different words. The competence being priced now is the discipline around the AI, not the prompting.

What you can actually build on VicroCode

Here's the honest split. AegisCrawler is two systems welded together: a browser layer that records semantic events, replays them in a real tab, and executes tasks through a ScriptCat worker, and an audit layer that stores rules as immutable versions and binds executions to them. VicroCode can host the second system cleanly. It cannot host the first, and I'll get to that boundary.

For the version store, you don't need much. A SQLite database with three tables carries the whole idea:

  • `rules` — the approved baselines, one row per version, with a content hash and a status of `approved` or `superseded`. Rows are never edited in place. A new approval writes a new row.
  • `pending_patches` — LLM proposals against a specific parent version, holding the proposed body, a computed diff, and a status of `pending`, `applied`, or `rejected`.
  • `executions` — every run, with a foreign key to the exact `rules` row that was in force, plus timestamp, inputs, and result. This is the pin. This is the row you point at when someone asks what ran.

Because VicroCode lets you keep a hand-editable database, an operator can open the SQLite editor and inspect or correct a pending patch before it's ever applied, which is exactly the human-in-the-loop gate AegisCrawler describes as a diff review in its admin UI. You're not hiding state inside an opaque service. The record is a file a person can read.

The logic around it fits comfortably in hosted Python. You can run Python online to compute the diff between a pending patch and its parent baseline, hash the approved body so the version identity is content-derived rather than an auto-increment you could accidentally reuse, and enforce the one rule that makes the whole thing hold: an execution insert must reference an `approved` rule version, never a pending one. Wrap that in an API endpoint hosted in-platform, and the approve/reject action becomes a call that flips a status and writes a new immutable row rather than mutating an old one.

The LLM piece stays deliberately small, and that's the point. Using the Model Center APIs for a model already available on the platform, you let it read the current baseline and emit a proposed patch. It writes to `pending_patches` and stops. It has no path to `rules` or `executions`. This is straightforward AI agent development where the interesting engineering is the confinement, not the generation. The model proposes; SQLite and a human dispose. If you want the proposer to ground its patches in prior approved versions or past failures, a LanceDB knowledge base over your rule history gives it retrieval without giving it write access.

One security note, since this involves network-exposed endpoints: the approve/reject API needs authentication before it goes anywhere real. An unauthenticated "apply this patch" route defeats the entire audit story, because the whole value is that a known human made the call. Put access control on the mutating endpoints from the start.

The boundary, stated plainly

Here's what you cannot rebuild on VicroCode, and pretending otherwise would waste your time. AegisCrawler's recording, real-browser replay validation, and real-tab task execution all need a browser runtime. The recorder captures semantic events and DOM snapshots inside Chrome; the worker executes in an actual tab. VicroCode provides online Python execution and HTML web app hosting, not a controllable browser automation environment with real tabs. So the "record once, run forever" capture-and-replay half sits outside these capabilities. That's a hard line, not a workaround-in-waiting.

What that means in practice: the collection and execution engine has to live wherever you actually have a browser runtime. What you'd build on VicroCode is the governance spine — the immutable version store, the patch proposal and diff review, the execution ledger — and treat incoming execution records as data reported into your hosted API from that external engine. You get the auditable half, exposed through a small web UI and a published, shareable project, without claiming the browser half you don't have.

Why this is worth doing anyway

Strip away the crawling entirely and the pattern generalizes to almost any workflow where you've started letting a model touch things that matter. Prompt templates, extraction schemas, routing rules, report definitions. The shape is always the same: a deterministic approved artifact, a model that can only suggest changes to it, a human who reviews a diff, and an execution log that pins the exact version in force at run time.

The developer who wrote that they've lost the joy of coding because they now just supervise the AI is describing a real shift, and the fix isn't to reject the model. It's to build the boring scaffolding that makes supervision meaningful — so that when you approve something, that approval is recorded, immutable, and traceable, and when the model gets clever, it can only ever ask. A Python service and a hand-editable SQLite file are enough to make that real. The rest is knowing which half you can host, and being honest about the half you can't.