SkillAgentSearch skills...

supabase-selfhost-ops

Self-host Supabase in production, AI-ready: read-only MCP for your coding agent with zero secret exposure, SSO, PITR backups, monitoring, disk encryption, and one-command migration off Supabase Cloud.

Install / Use

npx skills add ankaboot-source/supabase-selfhost-ops

Installs into whichever agent you are using.

About this skill
๐Ÿ“„

SKILL.md

Installable skill definition

Quality Score

72/100

Category

Operations

Supported Platforms

Universal

Our assessment of supabase-selfhost-ops

supabase-selfhost-ops scores 72/100 on our quality scale, 673rd of 740 Operations skills we index.

Its SKILL.md is 46 KB long, well organised into 63 sections with 5 code examples: long enough that it reads more like full documentation than a focused instruction file, which agents can find harder to follow.

It has no GitHub stars yet, so there is no community track record; judge it on its content.

Substance
21/30
Structure
20/20
Description
15/15
Adoption
0/20
Freshness
15/15

Maintenance, license and trust

  • The repository was last updated 7 days ago, so supabase-selfhost-ops is actively maintained.
  • No license is declared. By default that means all rights are reserved: you can read it, but reusing or redistributing it is not clearly permitted. Ask the author before building on it commercially.
  • Its trust signals score 80/100, with 2 cautions from licensing, adoption, age or documentation. These come from repository metadata, not a code audit โ€” read the skill file before letting an agent act on it.

supabase-selfhost-ops compared with similar skills

All 4 of these similar skills score higher than supabase-selfhost-ops; compare them before choosing.

SkillScoreStarsUpdatedFormat
supabase-selfhost-ops (this skill)by ankaboot-source7207d agoSKILL.md
Agent-Reachby Panniantong10091.8k20d agoCLAUDE.md
headroomby headroomlabs-ai10074.5ktodayCLAUDE.md
CowAgentby zhayujie10047.2ktodayCLAUDE.md
Scraplingby D4Vinci10085.9k1d agoMCP Server

Frequently asked questions

How do I install supabase-selfhost-ops?
Run npx skills add ankaboot-source/supabase-selfhost-ops. The install tabs above show the steps for each supported agent.
Which AI agents does supabase-selfhost-ops work with?
It is written for Universal, as a SKILL.md file. Other agents that read the same format can often use it too.
Is supabase-selfhost-ops safe to use?
It declares no license and scores 80/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
Is supabase-selfhost-ops still maintained?
The repository was last updated 7 days ago, so supabase-selfhost-ops is actively maintained.

SKILL.md โ€” Boucle protocol

Source of truth for the boucle protocol. This file is the behavioral contract: the labels, markers, state machine, and handoff rules that boucle speaks. It is runtime-agnostic (does not reference jcode internals) and forge-agnostic (covers GitLab + GitHub). A local harness (opencode, jcode, pi, or any agent runtime that reads markdown) loads this skill to "speak boucle" โ€” interact with a boucle loop on any consumer repo correctly.

Projection at install: bin/setup symlinks .jcode/skills/boucle/SKILL.md โ†’ ../../SKILL.md so the consumer's harness loads it from the conventional skills directory. The source is this file; the symlink is the projection.

Enforcement: bin/check-doc-sync validates that the labels and markers in the engine code match this file. A label or marker in code that is absent here fails CI red โ€” this file is the spec, not a description.

Relationship to other charters:

  • AGENTS.md โ€” contribution conventions + mandatory principles. LESSONS.yml โ€” lessons (incident catalog). Lessons that state a current protocol invariant cross-reference this file (See SKILL.md ยง<id>); the normative text lives here.
  • ARCHITECTURE.md โ€” engine implementation (code structure, forge adapters, CI stages). The how, not the what.
  • CONTEXT.md โ€” identity, audience, philosophy, constraints. The why.
  • README.md โ€” overview, getting started. The entry.

1. Invariants

The protocol rests on ten invariants. Every agent (CI or local harness) and every human interacting with boucle MUST honor them. The LESSONS.yml lessons are incident catalogs that instantiate these invariants; the normative statement lives here.

I1 โ€” Forge-native

Boucle lives in the forge. NEVER introduce a new frontend, a server, or a computer to keep running. The forge is the UI; labels are the state; comments are the channel. (CONTEXT.md ยง7, LESSONS.yml lesson #55.)

I2 โ€” Label-driven state machine

Labels are the source of truth. No external database, no separate state API. The state machine is driven by boucle:* labels (detail axis) + boucle::status::* labels (gross axis: bot/human/done). A label change IS the state transition. (CONTEXT.md ยง7.)

I3 โ€” Async by design

The human is not in front of the screen. Work happens asynchronously, driven by labels and comments. The loop does not wait for a human reply โ€” it progresses to the next gate and parks at a human-readable state (boucle:spec-review, boucle:approval, boucle:human). (CONTEXT.md ยง1.)

I4 โ€” Post-early

Post the comment or verdict FIRST, then refine. An incomplete draft posted is ALWAYS better than a refinement never posted. Step-budget waste (the agent exhausts its budget without posting) is bug #1. (LESSONS.yml lesson #1, #2, #5.)

I5 โ€” Idempotence

All bin/* scripts and label writes MUST be idempotent. Re-running a script produces no additional side effects. A label PUT that does not change the label set is skipped (the forge records a Resource Label Event on every PUT, even a no-op โ€” CONTEXT.md ยง8). (LESSONS.yml lesson #4.)

I6 โ€” SHA-anchored verdicts

Reviewer and e2e verdicts MUST include the commit SHA as bare hex: no quotes, no whitespace, no angle brackets. Exact format: <!-- boucle:verdict v=1 role=reviewer sha=abc123def456 -->. The CI parser FAILS if the format is not respected. (LESSONS.yml lesson #6, #41, #47.)

I7 โ€” Marker-based self-recognition

Boucle recognizes its own writes by an invisible stamp (<!-- boucle:agent -->), NEVER by the actor's identity. A comment posted without the stamp is treated as a human reply and routed. This is mono-user-safe (when bot and human share an account, the marker discriminates; the actor does not). Every comment a harness posts MUST carry the stamp, or dispatch will treat it as a human reply and re-route. (LESSONS.yml lesson #55.)

I8 โ€” Doc-as-code

A doc that describes a system that no longer exists is a bug. Charter docs are maintained as part of each work cycle: triage identifies impacted docs, worker updates them in the same MR, reviewer verifies conformance, e2e verifies production match. bin/check-doc-sync enforces code โ†” SKILL.md sync in CI. (AGENTS.md "Documentation self-maintenance".)

I9 โ€” Upstream-first

Fix upstream (in boucle) FIRST, then update the consumer, then remediate existing data. NEVER patch a consumer to work around a boucle defect. NEVER introduce a local workaround that won't be reported upstream. (CONTEXT.md ยง7, .jcode/UPSTREAM-FIX-WORKFLOW.md.)

I10 โ€” Serial merge

Merges are serialized via resource_group: boucle-merge. Each rebase is against a master/main that includes previously-merged MRs. NEVER parallelize merges โ€” a concurrent rebase against a stale branch produces conflicts and race conditions. (CONTEXT.md ยง7, LESSONS.yml lesson #8.)


2. State machine

The state machine is two-axis: a detail label (boucle:<state>) that answers "what is the loop doing?" and a gross label (boucle::status::<owner>) that answers "whose side is this on?". In mono-user mode (BOUCLE_MONO_USER=true) the gross axis is dropped (one actor owns both sides โ€” the question is meaningless).

2.1 Detail labels

| Label | Meaning | Owner (gross) | |---|---|---| | boucle:triage | Awaiting triage analysis | bot | | boucle:needs-info | Triage needs more info from the reporter | human | | boucle:spec-review | Spec validated by triage, awaiting human spec approval | human | | boucle:todo | Spec approved, queued for the worker | bot | | boucle:working | Worker is running | bot | | boucle:review | Worker shipped, awaiting reviewer verdict | bot | | boucle:approval | Reviewer PASSed, MR ready, awaiting human MR approval | human | | boucle:merging | Merger is running (rebase + merge) | bot | | boucle:done | Loop complete (merged + e2e PASS) | done | | boucle:human | Escalated to a human (iteration cap, unclear criteria, destructive change, etc.) | human | | boucle:blocked | Waiting on a dependency (sub-issue not closed) | bot | | boucle:split | Parent issue split into sub-issues, waiting for them | bot | | boucle:dnd | Transient flag: spec gate auto-validated during DND window | (rides along) | | boucle:autonomous | Transient flag: spec gate skipped per-issue opt-in | (rides along) | | boucle:recurring | Context tag: issue is part of a recurring bug class (non-blocking, survives transitions) | (rides along) | | boucle:board | The status-board issue (never dispatched) | โ€” | | boucle:scheduled | Issue created by a schedule (cron template) | โ€” |

Removed (dead labels, pruned from bin/setup): boucle:approved, boucle:spec-approved. MR approval uses the native forge Approve button; spec approval uses a canonical emoji reaction (๐Ÿ‘ โค๏ธ ๐ŸŽ‰ ๐Ÿš€) on boucle:spec-review โ€” a text reply amends the spec and re-triggers triage, it does NOT approve. Neither uses a label.

2.2 Gross labels

| Label | Meaning | |---|---| | boucle::status::bot | The loop owns the next action (issue assigned to bot) | | boucle::status::human | A human owns the next action (issue assigned to human reporter) | | boucle::status::done | Terminal (loop complete) |

2.3 State diagram

stateDiagram-v2
    [*] --> triage: issue opened / bot assigned
    triage --> needs_info: triage needs more info
    triage --> spec_review: triage validated spec (Size S)
    triage --> todo: triage validated spec (auto / DND / autonomous)
    triage --> human: Size L / unclear criteria / destructive
    triage --> split: issue too big, split into sub-issues
    needs_info --> triage: human replied (note on needs-info)
    spec_review --> todo: human approved spec (๐Ÿ‘ โค๏ธ ๐ŸŽ‰ ๐Ÿš€ emoji)
    spec_review --> triage: human replied with amendment (re-triage)
    spec_review --> human: human rejected / no response
    todo --> working: worker started
    working --> review: worker shipped code
    working --> todo: worker no-changes / build-fail (retry, iter < max)
    working --> human: worker iteration cap / API down (exit 4)
    review --> approval: reviewer PASS
    review --> todo: reviewer FAIL (retry, iter < max)
    review --> human: reviewer FAIL (iter cap) / UNCERTAIN / no verdict
    approval --> merging: human approved MR (native Approve button)
    approval --> review: MR updated (push to boucle/<iid>)
    approval --> human: MR closed without merge
    merging --> done: merge succeeded + e2e PASS
    merging --> human: merge conflict / not mergeable
    done --> [*]
    human --> triage: human re-assigns bot (BOT_JUST_ASSIGNED)
    human --> [*]: human closes issue
    split --> triage: all sub-issues closed (parent re-queued)
    blocked --> todo: dependency closed (unblock)

2.4 Transition table

The transition table is derived from the handoff primitives in ยง4. Every transition is effected by set_boucle_label <iid> <detail> <gross> (lib/boucle.sh:626), which preserves non-boucle labels, writes the detail+gross pair idempotently, reassigns the issue (bot on boucle::status::bot, human reporter on boucle::status::human), and fires the outbound notification on the transition (never on the state).


3. Marker reference

Boucle communicates via invisible HTML-comment markers stamped on issue/MR comments and via structural sections in comment bodies. The markers are machine-readable; the structural sections are detected by pattern. A local harness MUST use the markers correctly or dispatch will misroute its writes.

3.1 Self-recognition marker

| Marker | Format | Written by | Parsed by | Purpose | |---|---|---|---|---| | <!-- boucle:agent --> | bare HTML comment | stamp_agent_marker (bin/forge/common.sh:81) on every forge_issue_note / forge_mr_note | has_agent_marker (bin/forge/common.sh:92) in dispatch.sh:99-103 | Distinguishes boucle's own writes from human replies. The primary anti-loop guard (invariant I7). A harness posting a comment MUST carry this stamp or dispatch treats it as a human reply and re-routes. |

3.2 Triage markers

| Marker | Format | Written by | Parsed by | Purpose | |---|---|---|---|---| | <!-- boucle:triage v=1 --> | v=1 (no attrs) | triage agent (final comment); draft promoted by triage.sh:178 (sed s/draft role=triage/triage v=1/) | triage.sh:163 (awk), collapse-duplicate-notes:71-72 (jq structural filter) | Marks a final triage comment. CI parser acts on it (sets disposition label, assigns, pauses). | | <!-- boucle:draft role=triage --> | role=triage | triage agent (first-pass draft) | collapse-duplicate-notes:73 (filter), triage.sh:178 (promotion source) | Marks a draft triage comment. CI parser does NOT act on drafts; log-scraping fallback promotes to final when the agent exhausts its steps. | | <!-- boucle:obligations v=1 --> | v=1 | triage.sh:213 | (informational โ€” marks the obligations section of a triage comment) | Marks the obligations block in a triage comment (what the human must do next). | | <!-- boucle:needs-info v=1 reason=no-key --> | v=1 reason=no-key | triage.sh:92 (no-LLM-key gate) | triage.sh:55 (jq filter, idempotency check) | Marks a needs-info comment posted when the LLM API key is missing. Used for idempotency: triage checks if a no-key needs-info was already posted before re-posting. |

3.3 Verdict markers (reviewer / e2e)

| Marker | Format | Written by | Parsed by | Purpose | |---|---|---|---|---| | <!-- boucle:verdict v=1 role=reviewer sha=<hex> --> | v=1 role=reviewer sha=<short-sha> | reviewer agent (final verdict); draft promoted by reviewer.sh:381 | reviewer.sh:357 (SHA-anchored), :362 (SHA-unanchored fallback) | Marks a final reviewer verdict. SHA MUST be bare hex (no quotes/whitespace/angle brackets) โ€” invariant I6. | | <!-- boucle:verdict v=1 role=e2e sha=<hex> --> | v=1 role=e2e sha=<short-sha> | e2e agent (final verdict); draft promoted by e2e.sh:192 |

Truncated for display โ€” read the full file on GitHub.

Related Skills

View on GitHub
GitHub Stars0
CategoryOperations
Updated7d ago
Forks0

Trust signals

80/100

From repository metadata: license, adoption, age and documentation. Not a code audit โ€” see the Safety scan above for what the skill file itself contains.

1 medium1 low
supabase-selfhost-ops โ€” Universal Skill: Install & Safety Check | SkillAgent