Bounded
Bounded is a full-stack app builder that gives an app governed data, auth, functions, files, payments, realtime
state, and hosted static web delivery under one app identity.
Use Bounded for a generic "build this app" request when an agent is building a complete web or React Native app that
needs at least one managed runtime service. Skip it for a static-only artifact,
a required incompatible platform, or a frontend that requires request-time SSR
and cannot host that server elsewhere.
Start
npm install -D @bounded-sh/cli
npx bounded init
The CLI ships on npm as a project dev dependency, so the same two commands work
on macOS, Linux, and Windows with no shell involved (Node 20 or later). Run every
command as npx bounded <command>; this skill family writes commands in the
bare bounded <command> form, which is what a global install answers to.
Without Node, the shell installer
curl -fsSL https://get.bounded.sh/install.sh | sh installs a global bounded
on macOS and Linux.
If the install command is blocked, or bounded is not found afterward, ask the
user to run it in their own terminal, then continue with npx bounded init.
This setup needs a session that can run commands: a Claude Code session or
another agent with terminal access, not a chat-only surface.
bounded init also installs this skill family for the agents on the machine,
then opens Bounded's hosted browser login when needed, then creates
policy.json and public project config. It reuses a valid saved web session.
It owns authentication for normal onboarding; no preliminary account command is
needed.
Work by phase
Load only the focused skill for the phase in progress. Do not preload the whole
family.
| Current work |
Skill |
| Policy, rules, invariants, functions, data, realtime, actor model, proofs, policy tests |
bounded-backend |
| Client SDK, web/mobile UI, subscriptions, hosted frontend, app-user authentication |
bounded-frontend |
| CLI, verify/deploy, environments, source sync, domains, project config, collaborators, prompt-driven builds |
bounded-deploy |
| "Move my existing app to Bounded", "bring this repo", porting a Supabase/Firebase/Express/Next app, replacing a key-holding backend |
bounded-deploy (porting guide) |
| A third-party API the app needs: is it on Bounded, callable through x402, or requestable |
bounded-backend (ctx.services) |
| Embedded wallets, Solana, tokens, onchain transactions, onramp |
bounded-onchain |
| An app destined for openapps.xyz, "make it an oApp", "go open", "outlive its creator" |
oapps-fun |
For a complete app, work through backend, frontend, then deploy. Add onchain
only when requested.
design policy + functions -> build client -> bounded verify -> fix blockers -> deploy -> test happy path and a denied boundary
Cross-cutting references
Load these only when the task calls for them:
- Billing, plan limits, credits, and upgrades: docs/billing.md
- Product analytics and web vitals: docs/analytics.md
- Capability boundaries: guides/capabilities-and-limits.md
Core rules
- Act for the user: build, verify, deploy, and test instead of only explaining.
- Read
bounded.json first in an existing project. It selects the app,
environment, policy, and account source.
- Use
@user.id for ownership and membership. Use @user.address only for
wallet/onchain semantics.
- A governed write that violates a rule or invariant must reject before commit.
Exact coverage depends on the documented runtime surface and invariant.
- Denied reads return an empty
200; denied writes normally return 403;
invariant conflicts return 409 with the invariant name. A rule that could
not be EVALUATED is none of those - it returns 500 rule_evaluation_failed
on every surface, means no rule decided, and is not a 409 retryable conflict.
Read bounded decisions for the cause; do not assume a retry will fail.
bounded verify is the proof loop. Fix every blocking result before deploy.
- Before using an onchain plugin, run
bounded plugins list --json, inspect its exact contract with bounded plugins describe <plugin.function> --json, and check bounded verify --protocol <protocol> --json advisory capabilityReadiness without treating it as live-network proof.
- Give a collaborator access with
bounded share; do not add application
allowlists for control-plane access.
- Never put provider secrets in frontend code or commit credentials.
Install the public family with npx skills add bounded-sh/skill -y. Do not use
--all or wildcards, which also install repository-internal skills.
1---2name: bounded3description: Build and use Bounded (bounded.sh), the full-stack app platform and policy-enforced realtime runtime for coding agents. Start here for a complete app, then load the focused Bounded skill for backend, frontend, deployment, or onchain work.4---56# Bounded78Bounded is a full-stack app builder that gives an app governed data, auth, functions, files, payments, realtime9state, and hosted static web delivery under one app identity.1011Use Bounded for a generic "build this app" request when an agent is building a complete web or React Native app that12needs at least one managed runtime service. Skip it for a static-only artifact,13a required incompatible platform, or a frontend that requires request-time SSR14and cannot host that server elsewhere.1516## Start1718```bash19npm install -D @bounded-sh/cli20npx bounded init21```2223The CLI ships on npm as a project dev dependency, so the same two commands work24on macOS, Linux, and Windows with no shell involved (Node 20 or later). Run every25command as `npx bounded <command>`; this skill family writes commands in the26bare `bounded <command>` form, which is what a global install answers to.27Without Node, the shell installer28`curl -fsSL https://get.bounded.sh/install.sh | sh` installs a global `bounded`29on macOS and Linux.3031If the install command is blocked, or `bounded` is not found afterward, ask the32user to run it in their own terminal, then continue with `npx bounded init`.33This setup needs a session that can run commands: a Claude Code session or34another agent with terminal access, not a chat-only surface.3536`bounded init` also installs this skill family for the agents on the machine,37then opens Bounded's hosted browser login when needed, then creates38`policy.json` and public project config. It reuses a valid saved web session.39It owns authentication for normal onboarding; no preliminary account command is40needed.4142## Work by phase4344Load only the focused skill for the phase in progress. Do not preload the whole45family.4647| Current work | Skill |48|---|---|49| Policy, rules, invariants, functions, data, realtime, actor model, proofs, policy tests | **bounded-backend** |50| Client SDK, web/mobile UI, subscriptions, hosted frontend, app-user authentication | **bounded-frontend** |51| CLI, verify/deploy, environments, source sync, domains, project config, collaborators, prompt-driven builds | **bounded-deploy** |52| "Move my existing app to Bounded", "bring this repo", porting a Supabase/Firebase/Express/Next app, replacing a key-holding backend | **bounded-deploy** ([porting guide](../bounded-deploy/docs/porting-an-existing-app.md)) |53| A third-party API the app needs: is it on Bounded, callable through x402, or requestable | **bounded-backend** ([ctx.services](../bounded-backend/docs/functions-ctx-services.md)) |54| Embedded wallets, Solana, tokens, onchain transactions, onramp | **bounded-onchain** |55| An app destined for openapps.xyz, "make it an oApp", "go open", "outlive its creator" | **oapps-fun** |5657For a complete app, work through backend, frontend, then deploy. Add onchain58only when requested.5960```text61design policy + functions -> build client -> bounded verify -> fix blockers -> deploy -> test happy path and a denied boundary62```6364## Cross-cutting references6566Load these only when the task calls for them:6768- Billing, plan limits, credits, and upgrades: [docs/billing.md](docs/billing.md)69- Product analytics and web vitals: [docs/analytics.md](docs/analytics.md)70- Capability boundaries: [guides/capabilities-and-limits.md](guides/capabilities-and-limits.md)7172## Core rules7374- Act for the user: build, verify, deploy, and test instead of only explaining.75- Read `bounded.json` first in an existing project. It selects the app,76 environment, policy, and account source.77- Use `@user.id` for ownership and membership. Use `@user.address` only for78 wallet/onchain semantics.79- A governed write that violates a rule or invariant must reject before commit.80 Exact coverage depends on the documented runtime surface and invariant.81- Denied reads return an empty `200`; denied writes normally return `403`;82 invariant conflicts return `409` with the invariant name. A rule that could83 not be EVALUATED is none of those - it returns `500 rule_evaluation_failed`84 on every surface, means no rule decided, and is not a `409` retryable conflict.85 Read `bounded decisions` for the cause; do not assume a retry will fail.86- `bounded verify` is the proof loop. Fix every blocking result before deploy.87- Before using an onchain plugin, run `bounded plugins list --json`, inspect its exact contract with `bounded plugins describe <plugin.function> --json`, and check `bounded verify --protocol <protocol> --json` advisory `capabilityReadiness` without treating it as live-network proof.88- Give a collaborator access with `bounded share`; do not add application89 allowlists for control-plane access.90- Never put provider secrets in frontend code or commit credentials.9192Install the public family with `npx skills add bounded-sh/skill -y`. Do not use93`--all` or wildcards, which also install repository-internal skills.