Coding agents

A web framework built for coding agents.

A coding agent builds well on a framework that gives it one way to do each task, tells it that way at the version it has installed, and refuses its code when it gets it wrong. @popcomputer/web is built for that. Its rules ship in the package, its type errors and lint messages name the fix, and its agent fence runs the checks before every commit. To have Claude Code use it, paste the setup prompt.

One API for each task

An agent follows the patterns it finds. Where a framework has three ways to read a form, each session may pick a different one. Each task in @popcomputer/web has one API: validateRequest reads a form, render shows a page, dbMutation writes to the database, background runs work after the response.

Which API for which task lists them all, with the doc that explains each. The rules for coding agents, AGENTS.md, name the one to use in each case, and what not to use: Hono’s request and environment inside an action, database calls outside the framework’s four, and names from the older honertia package.

Rules and docs at the version you installed

An agent’s memory of an API is as old as its training, and 1.0 replaced most of the 0.x API. So the rules travel with the code:

  • AGENTS.md ships in the package, at node_modules/@popcomputer/web/AGENTS.md, matching the installed version. The template’s CLAUDE.md points Claude Code at it.
  • The docs ship beside it: one short file per task, none longer than 250 lines, and every TypeScript example in them type-checks against the package.
  • The same rules ship as a Claude skill, in skills/popcomputer-web/SKILL.md. Copy it into ~/.claude/skills/ or a project’s .claude/skills/. Its description tells Claude to use it in any project that depends on the framework.
  • This site’s llms.txt names the current release and where the rules are, llms-full.txt holds AGENTS.md and every doc in one file, and each page here has a Markdown copy at its address with .md on the end, such as this one.

Type errors and lint rules that name the fix

Most mistakes are type errors where they’re made. Register an action that uses a service the setup doesn’t provide, and the error says missingServices, with the service’s name. Leave a failure unanswered and it says unhandledErrors; read a record the path doesn’t name and it says missingRouteModels. Reading the type errors says what each one means and what to do.

The lint rules report what types can’t see, and each message names what to use instead. Among them:

  • An update or delete with no condition, which changes every row.
  • SQL built from text.
  • A record’s binding that doesn’t say who may load it.
  • Better Auth called directly from an action, which skips its rate limits.
  • An Effect written as a statement, so nothing runs it.
  • State kept at the top of a module, which one visitor’s request can share with another’s.

A fence the agent can’t skip

A rule in a file is a request, and an agent can skip it. The agent fence makes the rules that matter most into checks:

  • The commit gate runs the type check, the lint rules, the tests and the debt check before every commit.
  • A command hook, for Claude Code and for Cursor, refuses commands that skip the gate, such as git commit --no-verify, and asks you before your agent deploys, touches live data, changes a secret, publishes or pushes.
  • The debt report counts every comment that turns a rule off. The count can only go down unless you raise it.

One prompt, and the apps built from it

The setup prompt is how you tell an agent to use the framework. It has the agent download llms.txt and the two docs it needs first, set up your computer, asking before each install, and make your app from the template. Then it runs the checks and shows you they pass before it changes anything, and builds what you describe one page at a time.

The example apps were built that way, by Claude Code from the template, and each shows its prompt word for word. The pixel canvas and the retro board came from one line: “Let’s build the pixel canvas and the team retro board next.” Each is live, with its code on GitHub, and each took Claude Code between 15 and 30 minutes.

The framework’s repository also has exams: an agent builds an app from a short spec, written as an owner who isn’t technical would write it, and tests it never sees check what the owner asked for and what they didn’t think to say, such as one patient seeing another’s bookings.

Does Claude Code need an opinionated framework?

Wasp argues that it does. Its January 2026 post names three things Claude Code needs for full-stack work: a way to see the app running, documentation written for LLMs such as an llms.txt, and an opinionated framework, because “the more opinionated the framework, the better it vibes with AI”. With one obvious place for each piece of code, the agent has less to guess.

We agree, and popweb is opinionated in the same way: one place to declare paths, page props, forms and tables, and one API for each task. Wasp makes the case for its own framework, which builds on React, Node.js and Prisma and generates the code for features you declare in a configuration file. popweb is TypeScript you write yourself, on Hono, Inertia and Effect, and it runs on Cloudflare Workers with no server of its own.

Where popweb goes further is in checking the opinions. A convention an agent can ignore is still a suggestion. Here the main ones are type errors, lint rules and, with the fence on, a commit gate, so code that breaks them isn’t committed.

Questions people ask

What’s the best tech stack for building an app with Claude Code?

One that leaves it few decisions and checks its work. Wasp’s post says Claude Code gets far with Next.js, Laravel, Rails or Wasp. For a web app on Cloudflare, @popcomputer/web gives it React pages served by Inertia from Hono, Effect for the server code, D1 through Drizzle for data and Better Auth for accounts, and the template has sign-in and a database working before your first prompt.

What framework should I tell Claude Code to use?

The one you mean to keep, named in your first prompt and in the project’s CLAUDE.md, so every session follows the same rules. For a web app on Cloudflare, paste the setup prompt: it names @popcomputer/web, points Claude Code at the rules for the installed version, and has it run the checks before it builds.

Is there a web framework designed for AI coding agents?

This is one, and others make the same case. Guren, a Laravel-style framework that develops on Bun, calls itself built for AI coding agents, and Wasp argues an opinionated framework suits Claude Code. popweb builds on Effect and Cloudflare Workers, with checks an agent can’t skip.

Does it work with Cursor or ChatGPT?

Yes. Cursor, like Claude Code, can run the setup prompt’s commands itself, and the agent fence has a hook for it. In a ChatGPT chat that can’t run commands, the prompt asks it to give you each file and command in order, to run yourself. The Claude skill is for Claude, but its rules are in AGENTS.md, which the prompt tells any agent to read.

Will Claude Code know the framework from its training?

Don’t count on it. 1.0 came out in October 2026 and replaced most of the 0.x API, so the setup prompt tells the agent to trust the docs it downloads over anything it remembers, and the rules it reads are the installed version’s.