Not in the top 1,000 by GitHub stars
edtrackai/ship-ready-skills
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
plugins/supabase-grants-guard/skills/supabase-grants-check/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → 8a7193870ac3
No earlier version was observed for comparison.
skills/launch-security-check/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → 8a7193870ac3
No earlier version was observed for comparison.
skills/stripe-webhook-review/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → 8a7193870ac3
No earlier version was observed for comparison.
skills/supabase-grants-check/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → 8a7193870ac3
No earlier version was observed for comparison.
skills/supabase-rls-review/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → 8a7193870ac3
No earlier version was observed for comparison.
skills/unthrottled-route-check/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 8a7193870ac3
No earlier version was observed for comparison.
Verified commit 8a7193870ac3ea0027fb8735b48d63baf2e01f75
git clone --filter=blob:none --no-checkout https://github.com/edtrackai/ship-ready-skills.git .hotskills/edtrackai-ship-ready-skills && git -C .hotskills/edtrackai-ship-ready-skills checkout --detach 8a7193870ac3ea0027fb8735b48d63baf2e01f75
# Copy each selected skill directory from .hotskills/edtrackai-ship-ready-skills into .claude/skills/<skill-name>/Heat
Insufficient historyNot enough history yet to measure heat. It appears after a few days of data.
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
30-day change not yet available: not enough history.
Individual skills in this repository
- supabase-grants-check
plugins/supabase-grants-guard/skills/supabase-grants-check - launch-security-check
skills/launch-security-check - stripe-webhook-review
skills/stripe-webhook-review - supabase-grants-check
skills/supabase-grants-check - supabase-rls-review
skills/supabase-rls-review - unthrottled-route-check
skills/unthrottled-route-check
How it works
supabase-grants-check
When your agent uses it
Check Supabase migrations for the security side of the 30 Oct 2026 Data API grants change (Supabase's changelog schedules it) - GRANT ALL or write grants to anon, grants on tables with RLS off, policies whose role has no grant (42501), grants with no policy, SECURITY DEFINER functions anon can execute, default privileges that still auto-grant, and the local auto_expose_new_tables setting. Use when the user asks about Supabase grants, a 42501 permission-denied error, the 30 October change, or whether a GRANT fix is safe.
What it loads into context
Frontmatter
139 tokensAlways available to the agent
SKILL.md
1,094 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Scope
- Checks
- Report
Files
../../../../.claude-plugin/marketplace.jsonasset1,115 bytes../../../../.claude-plugin/plugin.jsonasset863 bytes../../.claude-plugin/marketplace.jsonasset569 bytes../../.claude-plugin/plugin.jsonasset419 bytes../../hooks/hooks.jsonasset200 bytesSKILL.mdcore4,464 bytes
Read SKILL.md
# supabase-grants-check
Review only. Don't edit files unless the user asks for the fixes afterwards.
## Scope
Read every `.sql` file under `supabase/migrations/` in filename order (later files can fix earlier ones), plus `supabase/config.toml` if it exists. Track per table in `public` (and any other schema the user says the Data API exposes) what holds at the end of the history: RLS on or off, the policies (command and roles) and the grants per role (`anon`, `authenticated`). Treat `grant all` as select, insert, update, delete, truncate, references and trigger. Treat `revoke` as removing privileges. Dashboard changes aren't in these files, so say that in the report instead of guessing. If the user can run SQL, point them to the free SQL checker on the live database. It checks the same things, and its C1–C7 ids match G1–G7 here.
## Checks
For each finding, give file:line, the id, severity and the fix.
| Id | Severity | Look for | Fix |
|---|---|---|---|
| G1 | critical | A table where `anon` or `authenticated` has any grant and RLS is never enabled | In one migration: `enable row level security`, add policies, then keep only the minimum grant. |
| G2 | high | `anon` holds insert, update, delete or truncate on a table (including through `grant all ... to anon`) | Revoke the writes from `anon`, for example `revoke insert, update, delete, truncate on public.t from anon;`. Signed-out visitors usually need `select` at most. |View the complete source on GitHublaunch-security-check
When your agent uses it
Quick pre-launch security check for Next.js + Supabase + Stripe apps. Finds public tables without row level security, service-role or secret keys reaching client code (NEXT_PUBLIC_ variables, 'use client' files), and Stripe webhook handlers without constructEvent signature verification. Use when the user asks for a launch, ship or go-live security check, or a quick security pass on a Supabase/Stripe app.
What it loads into context
Frontmatter
97 tokensAlways available to the agent
SKILL.md
904 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- L1: Public tables without RLS (critical)
- L2: Service-role or secret keys reaching client code (critical)
- L3: Stripe webhooks without signature verification (critical)
- Report
Files
SKILL.mdcore3,501 bytes
Read SKILL.md
# launch-security-check
Read-only review. Don't edit files unless the user asks for the fixes afterwards. Every grep hit is a lead: open the file and confirm it before you report it.
## L1: Public tables without RLS (critical)
Only tables in the `public` schema (or another schema you expose through the Data API) count. Ignore `private.`, `auth.` and other schemas. Search across lines (multiline), case-insensitive, because SQL statements can wrap.
1. Grep `supabase/migrations/` for `create\s+table\s+(if\s+not\s+exists\s+)?(public\.)?"?([a-z_0-9]+)"?` and list the public table names. Skip names qualified with another schema.
2. Grep the same folder for `alter\s+table\s+(only\s+)?(public\.)?"?([a-z_0-9]+)"?\s+enable\s+row\s+level\s+security`.
3. A table from step 1 with no match in step 2 is a finding. Also grep for `disable\s+row\s+level\s+security`: any hit on a public table is a finding.
Fix: `alter table public.<t> enable row level security;` plus policies for the access the app needs. For the full RLS and grants review (R1–R6), use `supabase-rls-review`.
## L2: Service-role or secret keys reaching client code (critical)
1. Grep app code (not `*.md`) for `NEXT_PUBLIC_[A-Z0-9_]*(SERVICE_ROLE|SECRET)`. `NEXT_PUBLIC_` values are bundled into the browser, so any hit is a finding.
2. Grep for client files (pattern `^\s*['"]use client['"]`), then read the top of each one and confirm the directive is the first statement. Comments may come before it. In those files, grep for `service_role|SERVICE_ROLE_KEY|supabase/admin|createAdminClient|supabaseAdmin|STRIPE_SECRET_KEY`. Any hit is a finding.View the complete source on GitHubstripe-webhook-review
When your agent uses it
Review Next.js Stripe webhook route handlers for missing signature verification, JSON parsed before verification, missing or non-status-aware idempotency on event.id (pending/completed), unsafe reprocessing of pending events, and billing periods read from items.data[0]. Use when the user asks to review a Stripe webhook, idempotency, duplicate events, or payments before launch.
What it loads into context
Frontmatter
89 tokensAlways available to the agent
SKILL.md
874 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Scope
- Checks
- Report
Files
SKILL.mdcore3,632 bytes
Read SKILL.md
# stripe-webhook-review
Read-only review. Don't edit files unless the user asks for the fixes afterwards.
## Scope
Find the handlers: `grep -rl "constructEvent\|stripe-signature\|webhooks" app/ src/ pages/` (route handlers under `app/api/**/route.ts` or `pages/api/**`). Read each one and the helpers it calls (claim/complete functions, sync functions).
## Checks
For each finding, give file:line, the check id, severity, and the fix.
| Id | Severity | Look for | Fix |
|---|---|---|---|
| S1 | critical | No `stripe.webhooks.constructEvent(...)` (or `constructEventAsync`) before the event is trusted | Verify `constructEvent(rawBody, signature, secret)` first; return 400 on failure. |
| S2 | critical | `await request.json()` (or a parsed body) used before or instead of the raw body | `const body = await request.text()` and pass that string to `constructEvent`. |View the complete source on GitHubsupabase-grants-check
When your agent uses it
Check Supabase migrations for the security side of the 30 Oct 2026 Data API grants change (Supabase's changelog schedules it) - GRANT ALL or write grants to anon, grants on tables with RLS off, policies whose role has no grant (42501), grants with no policy, SECURITY DEFINER functions anon can execute, default privileges that still auto-grant, and the local auto_expose_new_tables setting. Use when the user asks about Supabase grants, a 42501 permission-denied error, the 30 October change, or whether a GRANT fix is safe.
What it loads into context
Frontmatter
139 tokensAlways available to the agent
SKILL.md
1,094 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Scope
- Checks
- Report
Files
SKILL.mdcore4,464 bytes
Read SKILL.md
# supabase-grants-check
Review only. Don't edit files unless the user asks for the fixes afterwards.
## Scope
Read every `.sql` file under `supabase/migrations/` in filename order (later files can fix earlier ones), plus `supabase/config.toml` if it exists. Track per table in `public` (and any other schema the user says the Data API exposes) what holds at the end of the history: RLS on or off, the policies (command and roles) and the grants per role (`anon`, `authenticated`). Treat `grant all` as select, insert, update, delete, truncate, references and trigger. Treat `revoke` as removing privileges. Dashboard changes aren't in these files, so say that in the report instead of guessing. If the user can run SQL, point them to the free SQL checker on the live database. It checks the same things, and its C1–C7 ids match G1–G7 here.
## Checks
For each finding, give file:line, the id, severity and the fix.
| Id | Severity | Look for | Fix |
|---|---|---|---|
| G1 | critical | A table where `anon` or `authenticated` has any grant and RLS is never enabled | In one migration: `enable row level security`, add policies, then keep only the minimum grant. |
| G2 | high | `anon` holds insert, update, delete or truncate on a table (including through `grant all ... to anon`) | Revoke the writes from `anon`, for example `revoke insert, update, delete, truncate on public.t from anon;`. Signed-out visitors usually need `select` at most. |View the complete source on GitHubsupabase-rls-review
When your agent uses it
Review Supabase SQL migrations for row level security gaps and missing or blanket Data API grants (tables without RLS, using (true) write policies, anon write policies, security definer functions without search_path, public tables with no explicit GRANT (Supabase's changelog schedules a grants change for 30 Oct 2026), blanket grants to anon/authenticated). Use when the user asks to review RLS, Supabase policies, grants, a 42501 error, or database security before launch.
What it loads into context
Frontmatter
120 tokensAlways available to the agent
SKILL.md
843 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Scope
- Checks
- Report
Files
SKILL.mdcore3,454 bytes
Read SKILL.md
# supabase-rls-review
Read-only review. Don't edit files unless the user asks for the fixes afterwards.
## Scope
Read every `.sql` file under `supabase/migrations/` (and any other `.sql` files the user points to), in filename order, so later migrations can fix earlier ones. Policies created in the Supabase dashboard aren't in these files: say so in the report instead of guessing.
## Checks
For each finding, give file:line, the check id, severity, and the fix.
| Id | Severity | Look for | Fix |
|---|---|---|---|
| R1 | critical | `create table` in `public` with no later `alter table ... enable row level security` | Enable RLS, then add policies scoped to `auth.uid()`. |
| R2 | critical | An `insert`/`update`/`delete`/`all` policy with `using (true)` or `with check (true)` | Scope it to the owner: `using (auth.uid() = user_id) with check (auth.uid() = user_id)`. |View the complete source on GitHubunthrottled-route-check
When your agent uses it
Find Next.js API routes that call OpenAI, Anthropic or the Vercel AI SDK, or create a Stripe Checkout Session, with no rate limiter. Use when the user asks about rate limiting, AI cost per user, surprise API bills, refresh loops at checkout, or abuse protection before launch.
What it loads into context
Frontmatter
79 tokensAlways available to the agent
SKILL.md
1,087 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Scope
- Find the sinks
- Look for a limiter
- Report
- Optional script
Scripts executed separately
scripts/scan-unthrottled.mjstests/fixtures/evasion/app/api/client2/route.tstests/fixtures/evasion/app/api/fakelimit/route.tstests/fixtures/evasion/app/api/llm/route.tstests/fixtures/evasion/app/api/rawfetch/route.tstests/fixtures/evasion/app/api/words/route.tstests/fixtures/fetchbase/app/api/constbase/route.tstests/fixtures/fetchbase/app/api/newurl/route.tstests/fixtures/fetchbase/app/api/tpl/route.tstests/fixtures/mw/app/api/chat/route.tstests/fixtures/mw/middleware.tstests/fixtures/mwlookahead/app/api/chat/route.tstests/fixtures/mwlookahead/middleware.tstests/fixtures/mwpages/app/api/chat/route.tstests/fixtures/mwpages/middleware.tstests/fixtures/noise/app/api/protect/route.tstests/fixtures/noise/app/api/rlpath/route.tstests/fixtures/noise/app/api/unused/route.tstests/fixtures/noise/lib/ratelimit-docs/notes.tstests/fixtures/safe/app/api/chat/route.tstests/fixtures/safe/app/api/checkout/route.tstests/fixtures/safe/lib/rate-limit.tstests/fixtures/vuln/app/api/chat/route.tstests/fixtures/vuln/app/api/checkout/route.tstests/fixtures/vuln/app/api/ok-comment/route.tstests/fixtures/vuln/app/api/summarize/route.tstests/fixtures/vuln/lib/ai.tstests/fixtures/vuln/pages/api/gen.jstests/scan.test.mjs
Files
SKILL.mdcore4,214 bytesscripts/scan-unthrottled.mjsruns10,899 bytestests/fixtures/evasion/app/api/client2/route.tsruns196 bytestests/fixtures/evasion/app/api/fakelimit/route.tsruns385 bytestests/fixtures/evasion/app/api/llm/route.tsruns184 bytestests/fixtures/evasion/app/api/rawfetch/route.tsruns162 bytestests/fixtures/evasion/app/api/words/route.tsruns248 bytestests/fixtures/fetchbase/app/api/constbase/route.tsruns159 bytestests/fixtures/fetchbase/app/api/newurl/route.tsruns138 bytestests/fixtures/fetchbase/app/api/tpl/route.tsruns205 bytestests/fixtures/mw/app/api/chat/route.tsruns293 bytestests/fixtures/mw/middleware.tsruns267 bytestests/fixtures/mwlookahead/app/api/chat/route.tsruns293 bytestests/fixtures/mwlookahead/middleware.tsruns351 bytestests/fixtures/mwpages/app/api/chat/route.tsruns293 bytestests/fixtures/mwpages/middleware.tsruns106 bytestests/fixtures/noise/app/api/protect/route.tsruns326 bytestests/fixtures/noise/app/api/rlpath/route.tsruns227 bytestests/fixtures/noise/app/api/unused/route.tsruns315 bytestests/fixtures/noise/lib/ratelimit-docs/notes.tsruns43 bytestests/fixtures/safe/app/api/chat/route.tsruns473 bytestests/fixtures/safe/app/api/checkout/route.tsruns278 bytestests/fixtures/safe/lib/rate-limit.tsruns77 bytestests/fixtures/vuln/app/api/chat/route.tsruns293 bytestests/fixtures/vuln/app/api/checkout/route.tsruns249 bytestests/fixtures/vuln/app/api/ok-comment/route.tsruns172 bytestests/fixtures/vuln/app/api/summarize/route.tsruns128 bytestests/fixtures/vuln/lib/ai.tsruns229 bytestests/fixtures/vuln/pages/api/gen.jsruns141 bytestests/scan.test.mjsruns8,333 bytes
Read SKILL.md
# unthrottled-route-check
Review only. Don't edit files unless the user asks for the fixes afterwards.
## Scope
Route handlers: `app/**/route.{ts,js}`, `src/app/**/route.{ts,js}`, `pages/api/**`, `src/pages/api/**`. Also read `middleware.ts` or `proxy.ts` at the project root (or in `src/`).
## Find the sinks
Grep the route files for these method calls, whatever the client variable is called (`openai.`, `llm.`, `client.`...):
- AI calls: `.chat.completions.create`/`.stream`/`.parse`, `.responses.create`/`.stream`/`.parse`, `.messages.create`, `.messages.stream`, `.images.generate`, `.embeddings.create`, `.completions.create`, `streamText(`, `generateText(`, `generateObject(`, `streamObject(`, and `fetch` to `https://api.openai.com` or `https://api.anthropic.com`, written as a literal or through a const base URL (``fetch(`${OPENAI_BASE}/...`)``, `fetch(ANTHROPIC_URL)`)
- Checkout: `.checkout.sessions.create`
`.messages.create` is also used by non-AI SDKs (for example SMS clients); drop those findings after reading the file.
View the complete source on GitHubSkills included
- supabase-grants-check
- launch-security-check
- stripe-webhook-review
- supabase-grants-check
- supabase-rls-review
- unthrottled-route-check
Repository facts
- License
- MIT
- Created
- Oct 14, 2026
- Last pushed
- Oct 17, 2026
- Forks
- 0
- Open issues
- 0
- Project activity
- Active
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 7, 2026
- No broad tool permissions
- No dangerous shell commands
- 35 network referencesin 11 files: .claude-plugin/plugin.json:5 unthrottled-route-check/tests/scan.test.mjs:51 .claude-plugin/marketplace.json:3 and 8 more
- No hidden or obfuscated text
- No instruction overrides
- 2 references to secretsin 2 files: launch-security-check/SKILL.md:26 unthrottled-route-check/tests/fixtures/vuln/app/api/checkout/route.ts:2
- No requests to vote in Hot
Show all 66 signals by file
.claude-plugin/marketplace.json
.claude-plugin/plugin.json
- Network accessline 5
"author": { "name": "Stack & Ship", "url": "https://edtrackai.github.io" - Network accessline 6
"name": "Stack & Ship", "url": "https://edtrackai.github.io" }, - Network accessline 7
"url": "https://edtrackai.github.io" - Network accessline 8
}, "homepage": "https://github.com/edtrackai/ship-ready-skills", "repository": "https://github.com/edtrackai/ship-ready-skills", - Network accessline 9
"homepage": "https://github.com/edtrackai/ship-ready-skills", - Network accessline 10
"repository": "https://github.com/edtrackai/ship-ready-skills",
plugins/supabase-grants-guard/.claude-plugin/marketplace.json
- Network accessline 1
{ "name": "supabase-grants-check", "owner": { "name": "Stack & Ship", "url": "https://edtrackai.github.io" }, - Network accessline 2
"name": "supabase-grants-check", "owner": { "name": "Stack & Ship", "url": "https://edtrackai.github.io" }, "metadata": { "description": "Free Supabase Data API grants check for Claude Code." }, - Network accessline 3
"owner": { "name": "Stack & Ship", "url": "https://edtrackai.github.io" },
skills/launch-security-check/SKILL.md
- Access to secretsline 26
[Credential-related source omitted]
skills/supabase-rls-review/SKILL.md
- Network accessline 21
| R3 | high | A write policy that applies to `anon` (`to anon`, or `to public` with no auth check) | Write policies go to `authenticated` only, scoped to `auth.uid()`. | | R4 | high | `security definer` function with no `set search_path` | - Network accessline 22
| R4 | high | `security definer` function with no `set search_path` | Add `set search_path = ''` and schema-qualify names, or use `security invoker`. | | R5 | medium | A `public` table with no explicit per-table `grant` to the roles that us - Network accessline 23
| R5 | medium | A `public` table with no explicit per-table `grant` to the roles that use it | Supabase's changelog schedules a change for 30 Oct 2026 after which new `public` tables on existing projects get no automatic grants to `anon`/`a
skills/unthrottled-route-check/SKILL.md
- Network accessline 14
## Find the sinks Grep the route files for these method calls, whatever the client variable is called (`openai.`, `llm.`, `client.`...): - AI calls: `.chat.completions.create`/`.stream`/`.parse`, `.responses.create`/`.stream`/`.parse`, `.me - Network accessline 15
Grep the route files for these method calls, whatever the client variable is called (`openai.`, `llm.`, `client.`...): - AI calls: `.chat.completions.create`/`.stream`/`.parse`, `.responses.create`/`.stream`/`.parse`, `.messages.create`, `. - Network accessline 16
- AI calls: `.chat.completions.create`/`.stream`/`.parse`, `.responses.create`/`.stream`/`.parse`, `.messages.create`, `.messages.stream`, `.images.generate`, `.embeddings.create`, `.completions.create`, `streamText(`, `generateText(`, `gen
skills/unthrottled-route-check/scripts/scan-unthrottled.mjs
skills/unthrottled-route-check/tests/fixtures/evasion/app/api/client2/route.ts
- Executable scriptline 1
Executable file
skills/unthrottled-route-check/tests/fixtures/evasion/app/api/fakelimit/route.ts
- Executable scriptline 1
Executable file
skills/unthrottled-route-check/tests/fixtures/evasion/app/api/llm/route.ts
- Executable scriptline 1
Executable file
skills/unthrottled-route-check/tests/fixtures/evasion/app/api/rawfetch/route.ts
skills/unthrottled-route-check/tests/fixtures/evasion/app/api/words/route.ts
- Executable scriptline 1
Executable file
skills/unthrottled-route-check/tests/fixtures/fetchbase/app/api/constbase/route.ts
- Network accessline 1
const ANTHROPIC_URL = 'https://api.anthropic.com/v1/messages'; export async function POST() { return fetch(ANTHROPIC_URL, { method: "POST", body: "{}" }); - Executable scriptline 1
Executable file - Network accessline 2
export async function POST() { return fetch(ANTHROPIC_URL, { method: "POST", body: "{}" }); } - Network accessline 3
return fetch(ANTHROPIC_URL, { method: "POST", body: "{}" });
skills/unthrottled-route-check/tests/fixtures/fetchbase/app/api/newurl/route.ts
- Network accessline 1
const HOST = `https://api.openai.com`; export async function POST() { return fetch(new URL("/v1/responses", HOST), { method: "POST" }); } - Executable scriptline 1
Executable file - Network accessline 2
export async function POST() { return fetch(new URL("/v1/responses", HOST), { method: "POST" }); }
skills/unthrottled-route-check/tests/fixtures/fetchbase/app/api/tpl/route.ts
- Network accessline 1
const OPENAI_BASE = "https://api.openai.com/v1"; export async function POST() { const r = await fetch(`${OPENAI_BASE}/chat/completions`, { method: "POST", body: "{}" }); - Executable scriptline 1
Executable file - Network accessline 2
export async function POST() { const r = await fetch(`${OPENAI_BASE}/chat/completions`, { method: "POST", body: "{}" }); return new Response(r.body); - Network accessline 3
const r = await fetch(`${OPENAI_BASE}/chat/completions`, { method: "POST", body: "{}" });
skills/unthrottled-route-check/tests/fixtures/mw/app/api/chat/route.ts
- Executable scriptline 1
Executable file
skills/unthrottled-route-check/tests/fixtures/mw/middleware.ts
- Executable scriptline 1
Executable file
skills/unthrottled-route-check/tests/fixtures/mwlookahead/app/api/chat/route.ts
- Executable scriptline 1
Executable file
skills/unthrottled-route-check/tests/fixtures/mwlookahead/middleware.ts
- Executable scriptline 1
Executable file
skills/unthrottled-route-check/tests/fixtures/mwpages/app/api/chat/route.ts
- Executable scriptline 1
Executable file
skills/unthrottled-route-check/tests/fixtures/mwpages/middleware.ts
- Executable scriptline 1
Executable file
skills/unthrottled-route-check/tests/fixtures/noise/app/api/protect/route.ts
- Executable scriptline 1
Executable file
skills/unthrottled-route-check/tests/fixtures/noise/app/api/rlpath/route.ts
- Executable scriptline 1
Executable file
skills/unthrottled-route-check/tests/fixtures/noise/app/api/unused/route.ts
- Executable scriptline 1
Executable file
skills/unthrottled-route-check/tests/fixtures/noise/lib/ratelimit-docs/notes.ts
- Executable scriptline 1
Executable file
skills/unthrottled-route-check/tests/fixtures/safe/app/api/chat/route.ts
- Executable scriptline 1
Executable file
skills/unthrottled-route-check/tests/fixtures/safe/app/api/checkout/route.ts
- Executable scriptline 1
Executable file
skills/unthrottled-route-check/tests/fixtures/safe/lib/rate-limit.ts
- Executable scriptline 1
Executable file
skills/unthrottled-route-check/tests/fixtures/vuln/app/api/chat/route.ts
- Executable scriptline 1
Executable file
skills/unthrottled-route-check/tests/fixtures/vuln/app/api/checkout/route.ts
skills/unthrottled-route-check/tests/fixtures/vuln/app/api/ok-comment/route.ts
- Executable scriptline 1
Executable file
skills/unthrottled-route-check/tests/fixtures/vuln/app/api/summarize/route.ts
- Executable scriptline 1
Executable file
skills/unthrottled-route-check/tests/fixtures/vuln/lib/ai.ts
- Executable scriptline 1
Executable file
skills/unthrottled-route-check/tests/fixtures/vuln/pages/api/gen.js
- Executable scriptline 1
Executable file
skills/unthrottled-route-check/tests/scan.test.mjs
- Executable scriptline 1
Executable file - Network accessline 51
test("stripComments keeps URLs in strings and line numbers", () => { const s = stripComments('const u = "https://x.y"; // ratelimit\n/* limiter\n */ ok'); - Network accessline 52
const s = stripComments('const u = "https://x.y"; // ratelimit\n/* limiter\n */ ok'); - Network accessline 53
assert.ok(s.includes("https://x.y")); - Network accessline 162
test("bounded regexes: limiter, import and fetch detection stay fast on pathological input", async () => { const { hasLimiter, findAiFetch } = await import("../scripts/scan-unthrottled.mjs"); const inputs = ["import " + "{a,".repeat(60_ - Network accessline 163
const { hasLimiter, findAiFetch } = await import("../scripts/scan-unthrottled.mjs"); const inputs = ["import " + "{a,".repeat(60_000), "const x = ".repeat(60_000), 'import a from "./ratelimit"\n' + "a".repeat(400_000), 'const B = "https:/ - Network accessline 164
const inputs = ["import " + "{a,".repeat(60_000), "const x = ".repeat(60_000), 'import a from "./ratelimit"\n' + "a".repeat(400_000), 'const B = "https://api.openai.com"\n' + "fetch(new URL(".repeat(30_000)];
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Some files could not be read; the facts below still hold.
Signal confidence: 54 facts
- Access to secrets in prose of the SKILL.md: a variable, placeholder or call, not a stored valuelaunch-security-check/SKILL.md:26Low confidence
- Network access in prose of the SKILL.mdsupabase-rls-review/SKILL.md:21Low confidence
- Network access in prose of the SKILL.mdsupabase-rls-review/SKILL.md:22Low confidence
- Network access in prose of the SKILL.mdsupabase-rls-review/SKILL.md:23Low confidence
- Network access in prose of the SKILL.mdunthrottled-route-check/SKILL.md:14Low confidence
- Network access in prose of the SKILL.mdunthrottled-route-check/SKILL.md:15Low confidence
- Network access in prose of the SKILL.mdunthrottled-route-check/SKILL.md:16Low confidence
- Executable script in code of a file that runsunthrottled-route-check/scripts/scan-unthrottled.mjs:1High confidence
- Network access in a comment of a file that runsunthrottled-route-check/scripts/scan-unthrottled.mjs:89Low confidence
- Executable script in code of a testunthrottled-route-check/tests/fixtures/evasion/app/api/client2/route.ts:1Low confidence
- Executable script in code of a testunthrottled-route-check/tests/fixtures/evasion/app/api/fakelimit/route.ts:1Low confidence
- Executable script in code of a testunthrottled-route-check/tests/fixtures/evasion/app/api/llm/route.ts:1Low confidence
- Network access in code of a testunthrottled-route-check/tests/fixtures/evasion/app/api/rawfetch/route.ts:1Low confidence
- Executable script in code of a testunthrottled-route-check/tests/fixtures/evasion/app/api/rawfetch/route.ts:1Low confidence
- Network access in code of a testunthrottled-route-check/tests/fixtures/evasion/app/api/rawfetch/route.ts:2Low confidence
- Executable script in code of a testunthrottled-route-check/tests/fixtures/evasion/app/api/words/route.ts:1Low confidence
- Network access in code of a testunthrottled-route-check/tests/fixtures/fetchbase/app/api/constbase/route.ts:1Low confidence
- Executable script in code of a testunthrottled-route-check/tests/fixtures/fetchbase/app/api/constbase/route.ts:1Low confidence
- Network access in code of a testunthrottled-route-check/tests/fixtures/fetchbase/app/api/constbase/route.ts:2Low confidence
- Network access in code of a testunthrottled-route-check/tests/fixtures/fetchbase/app/api/constbase/route.ts:3Low confidence
- Network access in code of a testunthrottled-route-check/tests/fixtures/fetchbase/app/api/newurl/route.ts:1Low confidence
- Executable script in code of a testunthrottled-route-check/tests/fixtures/fetchbase/app/api/newurl/route.ts:1Low confidence
- Network access in code of a testunthrottled-route-check/tests/fixtures/fetchbase/app/api/newurl/route.ts:2Low confidence
- Network access in code of a testunthrottled-route-check/tests/fixtures/fetchbase/app/api/tpl/route.ts:1Low confidence
- Executable script in code of a testunthrottled-route-check/tests/fixtures/fetchbase/app/api/tpl/route.ts:1Low confidence
- Network access in code of a testunthrottled-route-check/tests/fixtures/fetchbase/app/api/tpl/route.ts:2Low confidence
- Network access in code of a testunthrottled-route-check/tests/fixtures/fetchbase/app/api/tpl/route.ts:3Low confidence
- Executable script in code of a testunthrottled-route-check/tests/fixtures/mw/app/api/chat/route.ts:1Low confidence
- Executable script in code of a testunthrottled-route-check/tests/fixtures/mw/middleware.ts:1Low confidence
- Executable script in code of a testunthrottled-route-check/tests/fixtures/mwlookahead/app/api/chat/route.ts:1Low confidence
- Executable script in code of a testunthrottled-route-check/tests/fixtures/mwlookahead/middleware.ts:1Low confidence
- Executable script in code of a testunthrottled-route-check/tests/fixtures/mwpages/app/api/chat/route.ts:1Low confidence
- Executable script in code of a testunthrottled-route-check/tests/fixtures/mwpages/middleware.ts:1Low confidence
- Executable script in code of a testunthrottled-route-check/tests/fixtures/noise/app/api/protect/route.ts:1Low confidence
- Executable script in code of a testunthrottled-route-check/tests/fixtures/noise/app/api/rlpath/route.ts:1Low confidence
- Executable script in code of a testunthrottled-route-check/tests/fixtures/noise/app/api/unused/route.ts:1Low confidence
- Executable script in code of a testunthrottled-route-check/tests/fixtures/noise/lib/ratelimit-docs/notes.ts:1Low confidence
- Executable script in code of a testunthrottled-route-check/tests/fixtures/safe/app/api/chat/route.ts:1Low confidence
- Executable script in code of a testunthrottled-route-check/tests/fixtures/safe/app/api/checkout/route.ts:1Low confidence
- Executable script in code of a testunthrottled-route-check/tests/fixtures/safe/lib/rate-limit.ts:1Low confidence
- Executable script in code of a testunthrottled-route-check/tests/fixtures/vuln/app/api/chat/route.ts:1Low confidence
- Executable script in code of a testunthrottled-route-check/tests/fixtures/vuln/app/api/checkout/route.ts:1Low confidence
- Access to secrets in code of a test: a variable, placeholder or call, not a stored valueunthrottled-route-check/tests/fixtures/vuln/app/api/checkout/route.ts:2Low confidence
- Executable script in a comment of a testunthrottled-route-check/tests/fixtures/vuln/app/api/ok-comment/route.ts:1Low confidence
- Executable script in code of a testunthrottled-route-check/tests/fixtures/vuln/app/api/summarize/route.ts:1Low confidence
- Executable script in code of a testunthrottled-route-check/tests/fixtures/vuln/lib/ai.ts:1Low confidence
- Executable script in code of a testunthrottled-route-check/tests/fixtures/vuln/pages/api/gen.js:1Low confidence
- Executable script in code of a testunthrottled-route-check/tests/scan.test.mjs:1Low confidence
- Network access in code of a testunthrottled-route-check/tests/scan.test.mjs:51Low confidence
- Network access in code of a testunthrottled-route-check/tests/scan.test.mjs:52Low confidence
and 4 more
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Native | Manifest .claude-plugin/marketplace.json | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md plugins/supabase-grants-guard/skills/supabase-grants-check/SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md plugins/supabase-grants-guard/skills/supabase-grants-check/SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md plugins/supabase-grants-guard/skills/supabase-grants-check/SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md plugins/supabase-grants-guard/skills/supabase-grants-check/SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md plugins/supabase-grants-guard/skills/supabase-grants-check/SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.