Browser receives
A deliberately small surface
- Validated HTTPS project URL
sb_publishable_*or validated legacy anon key- Protected
@/lib/supabaseadapter - Authenticated access governed by verified RLS
Loading...
Explore Squid
Learn, compare, and get help.
Squid holds database-backed generation until a real Supabase project is connected, approved, and read back as verified. This walkthrough shows the control plane, the trust boundary, and the receipt that unlocks generation.
$ squid inspect --backend supabase
01persistence intent requires shared records
02management authorization isolated server-side
03database plan approved by project owner
04schema + RLS read back from Postgres
✓browser runtime receives publishable surface only
privileged credentials exported: 0
Control plane · six state transitions
Stage 01 · persistence.preflight
generation heldSquid recognizes that accounts, shared records, or durable state require a real backend. Generation pauses before the model can improvise local-only persistence.
The user can connect Supabase or choose a frontend-only build.
The agent cannot silently replace persistence with local state.
gate decision
await supabase.oauth.connected()
User approval
Browser
Squid control plane
Server
Supabase project
Management + Postgres
Generated app
Browser-safe runtime
Trust boundary
Squid separates what generated browser code needs from what infrastructure management requires. RLS remains the authorization boundary—not a privileged key hidden in a bundle.
Browser receives
sb_publishable_* or validated legacy anon key@/lib/supabase adapterServer only
Verification receipt
Squid does not unlock backend-dependent generation because a migration request returned 200. It reads the resulting Postgres metadata and requires every invariant below.
invariant 01
Table
public.tasks exists
invariant 02
Shape
Columns + constraints match
invariant 03
RLS
Enabled on the table
invariant 04
Grants
Authenticated CRUD only
invariant 05
Policies
Four ownership rules
invariant 06
Anon
Direct access revoked
Built in the open
This implementation is under active validation. Source and focused tests are in place; the final live OAuth and provider provisioning run remains explicit rather than implied.