templates
Skill535 starsChanged 5 months agoMITView on GitHub
Use when publishing a Butterbase app as a public template (visibility + listed + repo snapshot), browsing the template gallery, or cloning a template with environment-variable preflight. Templates are public apps with a pushed repo snapshot that other users can fork into their own region.
- Reads credentials
We split this skill into the rules it gives an agent
9 rules. 0 are common, 3 are distinctive, and 6 are very specific to this project.
0
Common
Most of the 16 edited versions we read keep these.
3
Distinctive
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 47
Before flipping visibility: public, verify all of the following.
- Very specific: line 49
Repo snapshot exists and is fresh: Run butterbase repo push -m "publish v1" from the project root.
- Distinctive: line 51
README.md at repo root with clone instructions: No formal "template instructions" field exists — the README in the pushed snapshot is the …
- Very specific: line 60
Env-var conventions for auto-mint: If a function reads butterbase_api_key, the clone preflight auto-mints a scoped key for the cloner.
- Very specific: line 64
Visibility flip: Only after 1–4: butterbase visibility public --listed (or manage_app action: update_visibility with {visibility: 'public', …
- Distinctive: line 70
Author README: If README.md does not exist or is shorter than ~30 lines, write one using the checklist above.
- Very specific: line 72
Bundle agent specs: if applicable. Confirm agents/*.json files exist and are tracked.
- Very specific: line 94
Post-clone: Read the cloned app's README.md (it came down with the repo snapshot).
- Distinctive: line 96
First-run smoke: Run the README's "first-run smoke" commands.
“Common” is measured: kept by at least 6 in 10 of the 16 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Butterbase Templates
A "template" is a Butterbase app marked visibility: 'public' and listed: true, with a repo snapshot uploaded via butterbase repo push. The clone pipeline replays the source app's schema, RLS, functions, config, and frontend artifact into a new app in the cloner's region; the pushed repo gives the cloner the actual source tree to keep developing.
How the repo snapshot flows (repo push / repo pull / repo status)
The repo snapshot is the source-code half of a template; the clone job replays schema/RLS/functions/config separately. Both halves are pinned via apps.repo_latest_snapshot.
butterbase repo init <app_id>— Bind the current directory to an app. Writes.butterbase/config.jsonand seeds.butterbaseignore. Run once per project.butterbase clonedoes this for you on the cloner side.butterbase repo push -m "<msg>"— Publisher uploads. Walks the project tree (respecting.butterbaseignore+.gitignore), hashes files (SHA256), uploads any new blobs via presigned URLs, commits a new immutable snapshot, updates the local pin. Content-addressed — re-pushing an unchanged tree is a no-op upload. This is the only way the source tree gets onto the snapshot. Clone replay does not synthesise it.butterbase repo pull [--force]— Cloner / collaborator downloads. Fetches the remote latest manifest, diffs against the locally pinned snapshot, downloads changed/new files, deletes files that are gone upstream, and bumps the local pin. Refuses if a file was deleted upstream but modified locally —--forceoverrides.butterbase cloneinvokes this automatically after the clone job completes, so cloners get a working tree without thinking about it.butterbase repo status— Inspector. Shows files modified vs pinned, untracked locally, and deleted locally. Use beforepushto confirm what's about to be uploaded; use afterpullto confirm a clean tree.butterbase repo log— List all snapshots for the bound app.butterbase repo wipe— Destructive; clear all snapshots. Requires app-id confirmation.
Reading a template's source code: clone it into a scratch directory — butterbase clone <source_app_id> /tmp/peek — and read the resulting tree. There is no separate "browse template source" CLI; snapshots are only materialised by repo pull, which requires the caller to be bound to the app.
Updating a clone with newer template versions: clones don't auto-follow the source — each clone owns its own app and its own snapshot history. butterbase repo pull in the clone fetches the cloner's own latest, not the upstream publisher's. To track upstream changes, the cloner has to clone again into a sibling directory and merge with git, or the publisher has to push to a snapshot the clone can read (uncommon).
What clone replay DOES and DOES NOT copy
| Copied on clone | Not copied — cloner must do |
| Schema (DDL) | App user data (unless explicitly seeded) |
| RLS policies | Auth provider OAuth secrets |
| Functions (handlers + non-secret env) | Function secrets / API keys (cloner provides via preflight) |
| App config | Agents (record in agents table) — bundle as agents/*.json in the repo and re-import after clone |
| Frontend artifact (with app-id rewritten) | Storage objects (only the bucket config replays) |
| Repo snapshot (files) | OAuth integration installs |
This makes the README in the pushed repo the most important publishing artifact — it has to explain everything that doesn't replay.
When to use
- Publishing an app you built as a public template.
- Listing or searching templates.
- Cloning a template (or guiding a user through clone with env-var preflight).
- Toggling visibility / listed status on an existing app.
Publishing checklist
Before flipping visibility: public, verify all of the following. Each one prevents a class of broken-on-clone bugs.
- Repo snapshot exists and is fresh. Run
butterbase repo push -m "publish v1"from the project root. Confirmapps.repo_latest_snapshotis non-null viamanage_app action: get. The clone preflight endpoint returnshas_repo: falseif missing, and discovery hides templates without a repo for several sort modes. - README.md at repo root with clone instructions. No formal "template instructions" field exists — the README in the pushed snapshot is the instructions. It MUST cover:
- One-line pitch (what does this app do?)
- Required env vars per function — the preflight surfaces keys but not what they're for. List each (e.g.,
STRIPE_SECRET_KEY — server-side Stripe secret). - Auth setup — OAuth provider IDs/secrets the cloner must register (OAuth secrets do not replay).
- Agent re-import — if the app uses agents, the spec files (
agents/*.json) ride along in the repo, but theagentsDB rows don't. Document:butterbase agents create -f agents/<name>.json. - MCP server registration — if agents reference MCP servers, document each server's URL/transport/auth-header so the cloner can register them post-clone.
- Seed data steps — if the app needs minimum rows (e.g., a default category), provide a seed script or document
manage_schema/select_rowscalls. - First-run smoke — concrete command(s) to verify the clone works.
- Env-var conventions for auto-mint. If a function reads
butterbase_api_key, the clone preflight auto-mints a scoped key for the cloner. Use this convention name exactly so the clone modal can fill it without asking. - No secrets in committed files.
.butterbaseignorecovers the obvious cases (.env,secrets/). Verify withbutterbase repo push --dry-runand scan the file list. - Visibility flip. Only after 1–4:
butterbase visibility public --listed(ormanage_app action: update_visibilitywith{visibility: 'public', listed: true}).
Procedure: publishing
- Confirm intent.
"Publish '<app_name>' (id=<app_id>) as a public, listed template? This makes the app discoverable, exposes the repo snapshot, and lets anyone fork it. (yes / unlisted-public / no)". - Author README. If
README.mddoes not exist or is shorter than ~30 lines, write one using the checklist above. Show it to the user for approval before pushing. - Bundle agent specs if applicable. Confirm
agents/*.jsonfiles exist and are tracked. If the app has agents but no spec files, export each viabutterbase agents get <name>(the wrapped agents skill helps) and write them toagents/. - Dry-run the push.
butterbase repo push --dry-run. Review the file list with the user — especially flag any path that looks like a secret. - Push.
butterbase repo push -m "publish v1". Confirm the snapshot ID printed. - Flip visibility.
butterbase visibility public --listed(orunlistedif step 1 chose "unlisted-public"; unlisted public apps are still cloneable by anyone with the app_id but don't show in discovery). - Verify discovery. Hit
GET /v1/templates?q=<app_name>(orbutterbase templates --q <name>) and confirm the app shows with the rightschema_summary(table_count, function_count) andhas_repo: true. - Clone-test it yourself.
butterbase clone <app_id> /tmp/clone-test-$(date +%s)and walk the README. Anything ambiguous or missing in the README → fix in the source repo,butterbase repo pushagain (snapshots are content-addressed, so unchanged files don't re-upload).
Procedure: cloning
- Preflight.
GET /v1/templates/<source_app_id>/clone-preflight(or theclone_appMCP tool withdry_run: trueif available). Returns per-function env var keys grouped by convention (auto_mint_eligibleforbutterbase_api_key). - Collect env vars. For each non-auto-mintable key, ask the user for the value. For auto-mintable keys, default to "yes, mint a fresh
bb_sk_*". - Start clone.
clone_app(MCP) orbutterbase clone <source_app_id>(CLI). Passenv_var_valuesandauto_mint_api_key. - Poll the job. Stage progression:
pending → processing → replaying_schema → replaying_rls → seeding_data → replaying_functions → replaying_config → copying_repo → completed. If it transitions tofailed, surface theerror_message; the user canretry_clone(job_id). - Post-clone. Read the cloned app's README.md (it came down with the repo snapshot). Walk the post-clone steps: OAuth registration, agent re-import (
butterbase agents create -f agents/*.json), MCP server registration, seed data. - First-run smoke. Run the README's "first-run smoke" commands.
CLI reference
| Command | Purpose | |
butterbase repo init <app_id> | Bind the current directory to an app. Seeds .butterbase/config.json + .butterbaseignore. | |
butterbase repo push [-m msg] [--dry-run] | Walk files, hash, upload missing blobs, commit snapshot, update apps.repo_latest_snapshot. | |
butterbase repo pull [--force] | Download the bound app's latest snapshot, diff vs local pin, apply downloads + deletes, bump pin. Refuses on local-edit vs upstream-delete conflict without --force. Auto-invoked by butterbase clone. | |
butterbase repo status | Show files modified vs pinned, untracked, and locally deleted. Use before push and after pull. | |
butterbase repo log | List snapshots for the bound app. | |
butterbase repo wipe | Destructive — clear all snapshots. Requires app-id confirmation. | |
| `butterbase visibility public [--listed | --unlisted]` | Mark public + optionally list in gallery. |
butterbase visibility private | Unpublish. Auto-unlists. | |
butterbase templates [--q <text>] [--sort recent|popular] | Browse the gallery. | |
butterbase clone <source_app_id> [target_dir] | Clone a template into the user's account, replaying source and pulling the repo to target_dir. |
Anti-patterns
- ❌ Flipping
visibility: publicbeforebutterbase repo push. Cloners get an empty file tree. - ❌ Skipping the README. The clone preflight tells the cloner which env vars to set, not what they're for; without a README, they're guessing.
- ❌ Assuming agents come with the clone. They don't — bundle
agents/*.jsonand document re-import. - ❌ Storing OAuth secrets or function API keys in repo files. They'll be uploaded into every clone's filesystem. Use
.butterbaseignoreand document the env-var keys instead. - ❌ Publishing without a self-clone test. Always
butterbase cloneyour own template into a scratch dir and walk the README before announcing. - ❌ Confusing
--unlistedpublic withprivate. Unlisted-public apps are still forkable by anyone who knows theapp_id(useful for "share a link with a friend" but not for personal apps).
Other versions21 projects use a version of this.
Word for word · 1
- butterbase-ai/butterbase-plugin★ 534100% same
Edited · 0
None found.
Wrote their own version · 20
- razzant/ouroboros★ 1.6ksame name
- xenitV1/Antigravity-Workflows★ 130same name
- VoDaiLocz/kilo-kit-mcp★ 28same name
- coder/skills★ 14same name
- The-Utopia-Studio/skills★ 6same name
- SKB3002/agenthub★ 4same name
- wachterjohannes/symfony-skills★ 4same name
- WESTsyre21/setup-backend-stack★ 4same name
- sid-lakhani/agents-config★ 2same name
- YaggoSEO/yaggo-brain★ 2same name
10 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository40 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- butterbase-skillsSkill
- agentsSkill
- aiSkill
- auth-setupSkill
- build-appSkill
- contributingSkill
- debug-rlsSkill
- deploy-frontendSkill
- durable-objectsSkill
- function-devSkill
- integrationsSkill
- journey-agentsSkill
- journey-aiSkill
- journey-authSkill
- journey-deploySkill
- journey-docsSkill
- journey-durableSkill
- journey-frontendSkill
- journey-functionsSkill
- journey-ideaSkill
- journey-planSkill
- journey-preflightSkill
- journey-ragSkill
- journey-realtimeSkill
- journey-rlsSkill
- journey-schemaSkill
- journeySkill
- journey-storageSkill
- journey-submitSkill
- journey-substrateSkill
- journey-templatesSkill
- meetingsSkill
- migrationsSkill
- paymentsSkill
- rag-devSkill
- realtimeSkill
- schema-designSkill
- storageSkill
- substrateSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
Reviews can't be read right now.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

