Handles all file operations in Butterbase apps through a single manage_storage tool with five actions: upload_url, download_url, list, delete, and update_config. The mental model is clean: you store object_id UUIDs in your tables (users.avatar_id, posts.image_id), never the s3_key, and generate fresh presigned URLs on demand since they expire in an hour. Upload is a three-step dance: request a URL, PUT the file to S3 with matching Content-Type, then persist the object_id or you've orphaned it. Access control is hardcoded to owner-or-public with an optional app-wide publicReadEnabled flag. No custom RLS on storage_objects, so if you need workspace-level permissions or similar, wrap downloads in a serverless function that checks your own tables first.

GitHub stars
532
last updated
Jun 11, 2026

Install

$ npx -y skills add butterbase-ai/butterbase-skills --skill storage --agent claude-code

Installs into .claude/skills of the current project.

Files

Butterbase Storage

Butterbase stores files in S3 (or LocalStack in dev) and exposes them via presigned URLs. Every file gets a stable object_id (UUID) that you persist in your tables; URLs are generated on demand and expire.

All storage operations go through one tool: manage_storage with an action parameter.

ActionPurpose
upload_urlGenerate a 15-minute presigned PUT URL and reserve an object_id
download_urlGenerate a 1-hour presigned GET URL for a stored object
listList objects (scoped by caller's role)
deletePermanently remove an object from S3 + database
update_configToggle app-level publicReadEnabled and other storage settings

1. The mental model: object_id vs s3_key

FieldWhat it isWhen you use it
object_idUUID, stable, app-level handlePersist in your tables (e.g. users.avatar_id, posts.image_id)
s3_keyInternal bucket path like app_abc/user_uuid/file.jpgInternal only — never treat this as a URL

Sponsors

Details

Repository
github.com/butterbase-ai/butterbase-skills
License
MIT
First seen
Jun 11, 2026

More from butterbase-ai/butterbase-skills

All 39

Recommended

1juliusbrussee avatarcavemanjuliusbrussee/cavemanUltra-compressed communication mode. Cuts output tokens 65% (measured) by speaking like caveman while keeping full technical accuracy. Supports intensity levels618.3Kskills.sh installs
2mattpocock avatargrill-memattpocock/skillsA relentless interview to sharpen a plan or design.1.5Mskills.sh installs
3shadcn avatarimproveshadcn/improveSurvey any codebase as a senior advisor and produce prioritized, self-contained implementation plans for OTHER models/agents to execute. Strictly read-only on s40Kskills.sh installs
4obra avatarsystematic-debuggingobra/superpowersUse when encountering any bug, test failure, or unexpected behavior, before proposing fixes326.7Kskills.sh installs
5forrestchang avatarkarpathy-guidelinesforrestchang/andrej-karpathy-skillsBehavioral guidelines to reduce common LLM coding mistakes through explicit assumptions, simplicity, and verifiable success criteria.17.9Kskills.sh installs
6vercel-labs avatarfind-skillsvercel-labs/skillsHelps users discover and install agent skills when they ask questions like "how do I do X", "find a skill for X", "is there a skill that can...", or express int4.3Mskills.sh installs