class-ai-agent 1.3.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/.claude/CLAUDE.md +3 -0
  2. package/.claude/references/supabase.md +55 -0
  3. package/.claude/rules/tech-stack.md +2 -1
  4. package/.claude/skills/supabase/SKILL.md +135 -0
  5. package/.claude/skills/supabase/UPSTREAM.md +16 -0
  6. package/.claude/skills/supabase/assets/feedback-issue-template.md +17 -0
  7. package/.claude/skills/supabase/references/skill-feedback.md +17 -0
  8. package/.claude/skills/supabase-postgres-best-practices/SKILL.md +64 -0
  9. package/.claude/skills/supabase-postgres-best-practices/UPSTREAM.md +16 -0
  10. package/.claude/skills/supabase-postgres-best-practices/references/_contributing.md +170 -0
  11. package/.claude/skills/supabase-postgres-best-practices/references/_sections.md +39 -0
  12. package/.claude/skills/supabase-postgres-best-practices/references/_template.md +34 -0
  13. package/.claude/skills/supabase-postgres-best-practices/references/advanced-full-text-search.md +55 -0
  14. package/.claude/skills/supabase-postgres-best-practices/references/advanced-jsonb-indexing.md +49 -0
  15. package/.claude/skills/supabase-postgres-best-practices/references/conn-idle-timeout.md +46 -0
  16. package/.claude/skills/supabase-postgres-best-practices/references/conn-limits.md +44 -0
  17. package/.claude/skills/supabase-postgres-best-practices/references/conn-pooling.md +41 -0
  18. package/.claude/skills/supabase-postgres-best-practices/references/conn-prepared-statements.md +46 -0
  19. package/.claude/skills/supabase-postgres-best-practices/references/data-batch-inserts.md +54 -0
  20. package/.claude/skills/supabase-postgres-best-practices/references/data-n-plus-one.md +53 -0
  21. package/.claude/skills/supabase-postgres-best-practices/references/data-pagination.md +50 -0
  22. package/.claude/skills/supabase-postgres-best-practices/references/data-upsert.md +50 -0
  23. package/.claude/skills/supabase-postgres-best-practices/references/lock-advisory.md +56 -0
  24. package/.claude/skills/supabase-postgres-best-practices/references/lock-deadlock-prevention.md +68 -0
  25. package/.claude/skills/supabase-postgres-best-practices/references/lock-short-transactions.md +50 -0
  26. package/.claude/skills/supabase-postgres-best-practices/references/lock-skip-locked.md +54 -0
  27. package/.claude/skills/supabase-postgres-best-practices/references/monitor-explain-analyze.md +45 -0
  28. package/.claude/skills/supabase-postgres-best-practices/references/monitor-pg-stat-statements.md +55 -0
  29. package/.claude/skills/supabase-postgres-best-practices/references/monitor-vacuum-analyze.md +55 -0
  30. package/.claude/skills/supabase-postgres-best-practices/references/query-composite-indexes.md +44 -0
  31. package/.claude/skills/supabase-postgres-best-practices/references/query-covering-indexes.md +40 -0
  32. package/.claude/skills/supabase-postgres-best-practices/references/query-index-types.md +48 -0
  33. package/.claude/skills/supabase-postgres-best-practices/references/query-missing-indexes.md +43 -0
  34. package/.claude/skills/supabase-postgres-best-practices/references/query-partial-indexes.md +45 -0
  35. package/.claude/skills/supabase-postgres-best-practices/references/schema-constraints.md +80 -0
  36. package/.claude/skills/supabase-postgres-best-practices/references/schema-data-types.md +46 -0
  37. package/.claude/skills/supabase-postgres-best-practices/references/schema-foreign-key-indexes.md +59 -0
  38. package/.claude/skills/supabase-postgres-best-practices/references/schema-lowercase-identifiers.md +55 -0
  39. package/.claude/skills/supabase-postgres-best-practices/references/schema-partitioning.md +55 -0
  40. package/.claude/skills/supabase-postgres-best-practices/references/schema-primary-keys.md +61 -0
  41. package/.claude/skills/supabase-postgres-best-practices/references/security-privileges.md +54 -0
  42. package/.claude/skills/supabase-postgres-best-practices/references/security-rls-basics.md +50 -0
  43. package/.claude/skills/supabase-postgres-best-practices/references/security-rls-performance.md +63 -0
  44. package/.cursor/CURSOR.md +3 -0
  45. package/.cursor/mcp.json +4 -0
  46. package/.cursor/references/supabase.md +55 -0
  47. package/.cursor/rules/tech-stack.mdc +2 -1
  48. package/.cursor/settings.json +6 -1
  49. package/.cursor/skills/supabase/SKILL.md +135 -0
  50. package/.cursor/skills/supabase/UPSTREAM.md +16 -0
  51. package/.cursor/skills/supabase/assets/feedback-issue-template.md +17 -0
  52. package/.cursor/skills/supabase/references/skill-feedback.md +17 -0
  53. package/.cursor/skills/supabase-postgres-best-practices/SKILL.md +64 -0
  54. package/.cursor/skills/supabase-postgres-best-practices/UPSTREAM.md +16 -0
  55. package/.cursor/skills/supabase-postgres-best-practices/references/_contributing.md +170 -0
  56. package/.cursor/skills/supabase-postgres-best-practices/references/_sections.md +39 -0
  57. package/.cursor/skills/supabase-postgres-best-practices/references/_template.md +34 -0
  58. package/.cursor/skills/supabase-postgres-best-practices/references/advanced-full-text-search.md +55 -0
  59. package/.cursor/skills/supabase-postgres-best-practices/references/advanced-jsonb-indexing.md +49 -0
  60. package/.cursor/skills/supabase-postgres-best-practices/references/conn-idle-timeout.md +46 -0
  61. package/.cursor/skills/supabase-postgres-best-practices/references/conn-limits.md +44 -0
  62. package/.cursor/skills/supabase-postgres-best-practices/references/conn-pooling.md +41 -0
  63. package/.cursor/skills/supabase-postgres-best-practices/references/conn-prepared-statements.md +46 -0
  64. package/.cursor/skills/supabase-postgres-best-practices/references/data-batch-inserts.md +54 -0
  65. package/.cursor/skills/supabase-postgres-best-practices/references/data-n-plus-one.md +53 -0
  66. package/.cursor/skills/supabase-postgres-best-practices/references/data-pagination.md +50 -0
  67. package/.cursor/skills/supabase-postgres-best-practices/references/data-upsert.md +50 -0
  68. package/.cursor/skills/supabase-postgres-best-practices/references/lock-advisory.md +56 -0
  69. package/.cursor/skills/supabase-postgres-best-practices/references/lock-deadlock-prevention.md +68 -0
  70. package/.cursor/skills/supabase-postgres-best-practices/references/lock-short-transactions.md +50 -0
  71. package/.cursor/skills/supabase-postgres-best-practices/references/lock-skip-locked.md +54 -0
  72. package/.cursor/skills/supabase-postgres-best-practices/references/monitor-explain-analyze.md +45 -0
  73. package/.cursor/skills/supabase-postgres-best-practices/references/monitor-pg-stat-statements.md +55 -0
  74. package/.cursor/skills/supabase-postgres-best-practices/references/monitor-vacuum-analyze.md +55 -0
  75. package/.cursor/skills/supabase-postgres-best-practices/references/query-composite-indexes.md +44 -0
  76. package/.cursor/skills/supabase-postgres-best-practices/references/query-covering-indexes.md +40 -0
  77. package/.cursor/skills/supabase-postgres-best-practices/references/query-index-types.md +48 -0
  78. package/.cursor/skills/supabase-postgres-best-practices/references/query-missing-indexes.md +43 -0
  79. package/.cursor/skills/supabase-postgres-best-practices/references/query-partial-indexes.md +45 -0
  80. package/.cursor/skills/supabase-postgres-best-practices/references/schema-constraints.md +80 -0
  81. package/.cursor/skills/supabase-postgres-best-practices/references/schema-data-types.md +46 -0
  82. package/.cursor/skills/supabase-postgres-best-practices/references/schema-foreign-key-indexes.md +59 -0
  83. package/.cursor/skills/supabase-postgres-best-practices/references/schema-lowercase-identifiers.md +55 -0
  84. package/.cursor/skills/supabase-postgres-best-practices/references/schema-partitioning.md +55 -0
  85. package/.cursor/skills/supabase-postgres-best-practices/references/schema-primary-keys.md +61 -0
  86. package/.cursor/skills/supabase-postgres-best-practices/references/security-privileges.md +54 -0
  87. package/.cursor/skills/supabase-postgres-best-practices/references/security-rls-basics.md +50 -0
  88. package/.cursor/skills/supabase-postgres-best-practices/references/security-rls-performance.md +63 -0
  89. package/.kiro/KIRO.md +3 -0
  90. package/.kiro/references/supabase.md +55 -0
  91. package/.kiro/settings/mcp.json +4 -0
  92. package/.kiro/skills/supabase/SKILL.md +135 -0
  93. package/.kiro/skills/supabase/UPSTREAM.md +16 -0
  94. package/.kiro/skills/supabase/assets/feedback-issue-template.md +17 -0
  95. package/.kiro/skills/supabase/references/skill-feedback.md +17 -0
  96. package/.kiro/skills/supabase-postgres-best-practices/SKILL.md +64 -0
  97. package/.kiro/skills/supabase-postgres-best-practices/UPSTREAM.md +16 -0
  98. package/.kiro/skills/supabase-postgres-best-practices/references/_contributing.md +170 -0
  99. package/.kiro/skills/supabase-postgres-best-practices/references/_sections.md +39 -0
  100. package/.kiro/skills/supabase-postgres-best-practices/references/_template.md +34 -0
  101. package/.kiro/skills/supabase-postgres-best-practices/references/advanced-full-text-search.md +55 -0
  102. package/.kiro/skills/supabase-postgres-best-practices/references/advanced-jsonb-indexing.md +49 -0
  103. package/.kiro/skills/supabase-postgres-best-practices/references/conn-idle-timeout.md +46 -0
  104. package/.kiro/skills/supabase-postgres-best-practices/references/conn-limits.md +44 -0
  105. package/.kiro/skills/supabase-postgres-best-practices/references/conn-pooling.md +41 -0
  106. package/.kiro/skills/supabase-postgres-best-practices/references/conn-prepared-statements.md +46 -0
  107. package/.kiro/skills/supabase-postgres-best-practices/references/data-batch-inserts.md +54 -0
  108. package/.kiro/skills/supabase-postgres-best-practices/references/data-n-plus-one.md +53 -0
  109. package/.kiro/skills/supabase-postgres-best-practices/references/data-pagination.md +50 -0
  110. package/.kiro/skills/supabase-postgres-best-practices/references/data-upsert.md +50 -0
  111. package/.kiro/skills/supabase-postgres-best-practices/references/lock-advisory.md +56 -0
  112. package/.kiro/skills/supabase-postgres-best-practices/references/lock-deadlock-prevention.md +68 -0
  113. package/.kiro/skills/supabase-postgres-best-practices/references/lock-short-transactions.md +50 -0
  114. package/.kiro/skills/supabase-postgres-best-practices/references/lock-skip-locked.md +54 -0
  115. package/.kiro/skills/supabase-postgres-best-practices/references/monitor-explain-analyze.md +45 -0
  116. package/.kiro/skills/supabase-postgres-best-practices/references/monitor-pg-stat-statements.md +55 -0
  117. package/.kiro/skills/supabase-postgres-best-practices/references/monitor-vacuum-analyze.md +55 -0
  118. package/.kiro/skills/supabase-postgres-best-practices/references/query-composite-indexes.md +44 -0
  119. package/.kiro/skills/supabase-postgres-best-practices/references/query-covering-indexes.md +40 -0
  120. package/.kiro/skills/supabase-postgres-best-practices/references/query-index-types.md +48 -0
  121. package/.kiro/skills/supabase-postgres-best-practices/references/query-missing-indexes.md +43 -0
  122. package/.kiro/skills/supabase-postgres-best-practices/references/query-partial-indexes.md +45 -0
  123. package/.kiro/skills/supabase-postgres-best-practices/references/schema-constraints.md +80 -0
  124. package/.kiro/skills/supabase-postgres-best-practices/references/schema-data-types.md +46 -0
  125. package/.kiro/skills/supabase-postgres-best-practices/references/schema-foreign-key-indexes.md +59 -0
  126. package/.kiro/skills/supabase-postgres-best-practices/references/schema-lowercase-identifiers.md +55 -0
  127. package/.kiro/skills/supabase-postgres-best-practices/references/schema-partitioning.md +55 -0
  128. package/.kiro/skills/supabase-postgres-best-practices/references/schema-primary-keys.md +61 -0
  129. package/.kiro/skills/supabase-postgres-best-practices/references/security-privileges.md +54 -0
  130. package/.kiro/skills/supabase-postgres-best-practices/references/security-rls-basics.md +50 -0
  131. package/.kiro/skills/supabase-postgres-best-practices/references/security-rls-performance.md +63 -0
  132. package/.kiro/steering/tech-stack.md +2 -1
  133. package/AGENTS.md +1 -1
  134. package/README.md +11 -7
  135. package/bin/class-ai-agent.cjs +8 -2
  136. package/package.json +4 -2
@@ -0,0 +1,50 @@
1
+ ---
2
+ title: Enable Row Level Security for Multi-Tenant Data
3
+ impact: CRITICAL
4
+ impactDescription: Database-enforced tenant isolation, prevent data leaks
5
+ tags: rls, row-level-security, multi-tenant, security
6
+ ---
7
+
8
+ ## Enable Row Level Security for Multi-Tenant Data
9
+
10
+ Row Level Security (RLS) enforces data access at the database level, ensuring users only see their own data.
11
+
12
+ **Incorrect (application-level filtering only):**
13
+
14
+ ```sql
15
+ -- Relying only on application to filter
16
+ select * from orders where user_id = $current_user_id;
17
+
18
+ -- Bug or bypass means all data is exposed!
19
+ select * from orders; -- Returns ALL orders
20
+ ```
21
+
22
+ **Correct (database-enforced RLS):**
23
+
24
+ ```sql
25
+ -- Enable RLS on the table
26
+ alter table orders enable row level security;
27
+
28
+ -- Create policy for users to see only their orders
29
+ create policy orders_user_policy on orders
30
+ for all
31
+ using (user_id = current_setting('app.current_user_id')::bigint);
32
+
33
+ -- Force RLS even for table owners
34
+ alter table orders force row level security;
35
+
36
+ -- Set user context and query
37
+ set app.current_user_id = '123';
38
+ select * from orders; -- Only returns orders for user 123
39
+ ```
40
+
41
+ Policy for authenticated role:
42
+
43
+ ```sql
44
+ create policy orders_user_policy on orders
45
+ for all
46
+ to authenticated
47
+ using (user_id = auth.uid());
48
+ ```
49
+
50
+ Reference: [Row Level Security](https://supabase.com/docs/guides/database/postgres/row-level-security)
@@ -0,0 +1,63 @@
1
+ ---
2
+ title: Optimize RLS Policies for Performance
3
+ impact: HIGH
4
+ impactDescription: 5-10x faster RLS queries with proper patterns
5
+ tags: rls, performance, security, optimization
6
+ ---
7
+
8
+ ## Optimize RLS Policies for Performance
9
+
10
+ Poorly written RLS policies can cause severe performance issues. Use subqueries and indexes strategically.
11
+
12
+ **Incorrect (function called for every row):**
13
+
14
+ ```sql
15
+ create policy orders_policy on orders
16
+ using (auth.uid() = user_id); -- auth.uid() called per row!
17
+
18
+ -- With 1M rows, auth.uid() is called 1M times
19
+ ```
20
+
21
+ **Correct (wrap functions in SELECT):**
22
+
23
+ ```sql
24
+ create policy orders_policy on orders
25
+ using ((select auth.uid()) = user_id); -- Called once, cached
26
+
27
+ -- 100x+ faster on large tables
28
+ ```
29
+
30
+ Use security definer functions for complex checks:
31
+
32
+ `SECURITY DEFINER` functions run with the creator's privileges and bypass RLS on any tables they touch — which is what makes them useful for internal lookups, but also what makes them dangerous if misused. Always include an explicit `auth.uid()` check inside the function body, keep them in a non-exposed schema, and revoke `EXECUTE` from any role that shouldn't call them directly.
33
+
34
+ ```sql
35
+ -- Create helper function in a private schema
36
+ create or replace function private.is_team_member(team_id bigint)
37
+ returns boolean
38
+ language sql
39
+ security definer
40
+ set search_path = ''
41
+ as $$
42
+ select exists (
43
+ select 1 from public.team_members
44
+ -- always check the calling user's identity inside the function
45
+ where team_id = $1 and user_id = (select auth.uid())
46
+ );
47
+ $$;
48
+
49
+ -- Revoke direct execution from public roles
50
+ revoke execute on function private.is_team_member(bigint) from PUBLIC, anon, authenticated, service_role;
51
+
52
+ -- Use in policy (indexed lookup, not per-row check)
53
+ create policy team_orders_policy on orders
54
+ using ((select private.is_team_member(team_id)));
55
+ ```
56
+
57
+ Always add indexes on columns used in RLS policies:
58
+
59
+ ```sql
60
+ create index orders_user_id_idx on orders (user_id);
61
+ ```
62
+
63
+ Reference: [RLS Performance](https://supabase.com/docs/guides/database/postgres/row-level-security#rls-performance-recommendations)
@@ -23,8 +23,9 @@ description: "Technology Stack — Selection & Standards"
23
23
  | **Backend Framework** | Express.js + Node | Fastify | Hapi, Koa |
24
24
  | **API Style** | REST (default) | tRPC (fullstack TS) | GraphQL (unless needed) |
25
25
  | **Language** | TypeScript (always) | — | Plain JavaScript |
26
- | **Database** | PostgreSQL | | MySQL (prefer PG) |
26
+ | **Database** | PostgreSQL | Supabase (managed Postgres + bundled `supabase` skills) | MySQL (prefer PG) |
27
27
  | **ORM** | Prisma | Drizzle | Sequelize, TypeORM |
28
+ | **BaaS (Auth, DB, Storage, Realtime)** | — | Supabase | Firebase |
28
29
  | **Cache** | Redis (ioredis) | Upstash Redis | Memcached |
29
30
  | **Queue — Simple jobs** | BullMQ (Redis-backed) | — | — |
30
31
  | **Queue — Enterprise/Microservices** | RabbitMQ | Kafka (high-throughput streams) | — |
package/AGENTS.md CHANGED
@@ -14,4 +14,4 @@ Project guidance for AI coding agents:
14
14
 
15
15
  **Cross-tool continuity:** committed [`.agent/SESSION.md`](.agent/README.md) — use `/resume` at session start and `/handoff` at session end (see hub docs and `.agent/README.md`).
16
16
 
17
- Keep **`.claude/`**, **`.cursor/`**, and **`.kiro/`** in sync when you change workflows or standards. After editing `.cursor/`, run `npm run sync:kiro` in the **class-ai-agent** repo to refresh `.kiro/`.
17
+ Keep **`.claude/`**, **`.cursor/`**, and **`.kiro/`** in sync when you change workflows or standards. After editing `.cursor/`, run `npm run sync:kiro` in the **class-ai-agent** repo to refresh `.kiro/`. To refresh vendored Supabase skills from upstream, run `npm run sync:supabase-skills`.
package/README.md CHANGED
@@ -18,7 +18,7 @@ Open-source AI agent scaffolding by **Royal Solution** — use it in your own pr
18
18
  <a href="https://www.npmjs.com/package/class-ai-agent"><img src="https://img.shields.io/npm/v/class-ai-agent?label=npm&logo=npm&style=flat-square" alt="npm version" /></a>
19
19
  <img src="https://img.shields.io/badge/node-%3E%3D16.7-339933?logo=node.js&logoColor=white&style=flat-square" alt="Node.js 16.7+" />
20
20
  <img src="https://img.shields.io/badge/license-MIT-blue?style=flat-square" alt="License MIT" />
21
- <img src="https://img.shields.io/badge/version-1.3.0-blue?style=flat-square" alt="Version" />
21
+ <img src="https://img.shields.io/badge/version-1.4.0-blue?style=flat-square" alt="Version" />
22
22
  </p>
23
23
 
24
24
  </div>
@@ -152,10 +152,10 @@ What is inside:
152
152
  - **10 specialized agents** (markdown personas under `agents/`)
153
153
  - **13 mandatory topic rules** (plus **`cursor-overview.mdc`** under `.cursor/rules/`)
154
154
  - **11 workflow prompts** under `commands/` (includes `handoff`, `resume`)
155
- - **7 skills** (TDD, code review, incremental implementation, deploy, security review, agent continuity, UI/UX Pro Max)
156
- - **6 reference docs** (security, testing, performance, accessibility, codegraph, agent-continuity)
155
+ - **9 skills** (TDD, code review, incremental implementation, deploy, security review, agent continuity, UI/UX Pro Max, **supabase**, **supabase-postgres-best-practices**)
156
+ - **7 reference docs** (security, testing, performance, accessibility, codegraph, agent-continuity, **supabase**)
157
157
  - **`.agent/SESSION.md`** for cross-tool session handoff
158
- - **CodeGraph MCP** for Cursor and Kiro (`.cursor/mcp.json`, `.kiro/settings/mcp.json`)
158
+ - **CodeGraph + Supabase MCP** for Cursor and Kiro (`.cursor/mcp.json`, `.kiro/settings/mcp.json`)
159
159
 
160
160
  Keep **`.claude/`**, **`.cursor/`**, and **`.kiro/`** in sync when you change standards. After editing `.cursor/`, run **`npm run sync:kiro`** (or `node scripts/sync-kiro-from-cursor.mjs`) to refresh `.kiro/`.
161
161
 
@@ -224,7 +224,7 @@ Same ideas as `.claude/` for `commands/`, `agents/`, `skills/`, `references/`. D
224
224
  ```
225
225
  .cursor/
226
226
  ├── CURSOR.md
227
- ├── mcp.json # CodeGraph MCP (npx @colbymchenry/codegraph)
227
+ ├── mcp.json # CodeGraph + Supabase MCP
228
228
  ├── settings.json
229
229
  ├── commands/
230
230
  ├── agents/
@@ -250,7 +250,7 @@ Mirrors `.cursor/` for `commands/`, `agents/`, `skills/`, `references/`. Kiro us
250
250
  .kiro/
251
251
  ├── KIRO.md
252
252
  ├── settings/
253
- │ └── mcp.json # CodeGraph MCP
253
+ │ └── mcp.json # CodeGraph + Supabase MCP
254
254
  ├── settings.json
255
255
  ├── steering/ # kiro-overview.md, security.md, codegraph.md, …
256
256
  ├── commands/
@@ -364,7 +364,11 @@ Ship thin end-to-end slices (DB + API + UI), not “all models first, then all r
364
364
 
365
365
  ## Release notes
366
366
 
367
+ ### 1.4.0 — 2026-06-02
367
368
 
369
+ - Bundle official **Supabase Agent Skills** (`supabase`, `supabase-postgres-best-practices`) for Cursor, Claude Code, and Kiro
370
+ - Add **Supabase MCP** (`https://mcp.supabase.com/mcp?features=docs`) alongside CodeGraph in `.cursor/mcp.json` and `.kiro/settings/mcp.json`
371
+ - Add `.cursor/references/supabase.md`, `THIRD_PARTY_NOTICES.md`, and maintainer command `npm run sync:supabase-skills` (pinned to [supabase/agent-skills](https://github.com/supabase/agent-skills) v0.1.5)
368
372
 
369
373
  ### 1.3.0 — 2026-06-02
370
374
 
@@ -380,7 +384,7 @@ Ship thin end-to-end slices (DB + API + UI), not “all models first, then all r
380
384
  2. Keep tests green.
381
385
  3. Run **`/review`** before opening a PR.
382
386
  4. Use [conventional commits](https://www.conventionalcommits.org/).
383
- 5. Update **`.claude/`**, **`.cursor/`**, and **`.kiro/`** when rules or workflows change (run `npm run sync:kiro` after `.cursor/` edits).
387
+ 5. Update **`.claude/`**, **`.cursor/`**, and **`.kiro/`** when rules or workflows change (run `npm run sync:kiro` after `.cursor/` edits; run `npm run sync:supabase-skills` to refresh vendored Supabase skills).
384
388
 
385
389
  ---
386
390
 
@@ -37,6 +37,10 @@ CodeGraph:
37
37
  After install, runs "npx @colbymchenry/codegraph init -i" in the target directory
38
38
  (Node 20+ recommended). Set CODEGRAPH_SKIP_INIT=1 to skip indexing.
39
39
 
40
+ Supabase:
41
+ Bundled skills under skills/supabase/ and skills/supabase-postgres-best-practices/.
42
+ MCP: https://mcp.supabase.com/mcp (OAuth on first use). Reload Cursor / restart Kiro after install.
43
+
40
44
  Examples:
41
45
  npx class-ai-agent
42
46
  npx class-ai-agent --dir ./my-app
@@ -304,10 +308,12 @@ function run(opts) {
304
308
  if (installKiro) hints.push('.kiro/KIRO.md');
305
309
  console.log(`\nDone. Next steps: read ${hints.join(', ')}.`);
306
310
  if (installCursor) {
307
- console.log(' Cursor: reload the window so CodeGraph MCP loads (.cursor/mcp.json).');
311
+ console.log(' Cursor: reload the window so MCP loads (.cursor/mcp.json — CodeGraph + Supabase).');
312
+ console.log(' Supabase: complete OAuth in the browser when you first use Supabase MCP tools.');
308
313
  }
309
314
  if (installKiro) {
310
- console.log(' Kiro: restart IDE/CLI so CodeGraph MCP loads (.kiro/settings/mcp.json).');
315
+ console.log(' Kiro: restart IDE/CLI so MCP loads (.kiro/settings/mcp.json — CodeGraph + Supabase).');
316
+ console.log(' Supabase: complete OAuth when you first use Supabase MCP tools.');
311
317
  }
312
318
  if (shouldInstallAgentDir(opts)) {
313
319
  console.log(' Continuity: edit .agent/SESSION.md at session end (/handoff); read at start (/resume).');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "class-ai-agent",
3
- "version": "1.3.0",
3
+ "version": "1.4.0",
4
4
  "description": "Production-grade AI agent configuration for Claude Code, Cursor & Kiro",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -17,6 +17,7 @@
17
17
  "cursor",
18
18
  "kiro",
19
19
  "codegraph",
20
+ "supabase",
20
21
  "ai",
21
22
  "agent",
22
23
  "scaffold"
@@ -39,7 +40,8 @@
39
40
  "scripts": {
40
41
  "prepack": "node -e \"const fs=require('fs');['.agent','.claude','.cursor','.kiro','AGENTS.md'].forEach(p=>{if(!fs.existsSync(p))process.exit(1)})\"",
41
42
  "sync:kiro": "node scripts/sync-kiro-from-cursor.mjs",
43
+ "sync:supabase-skills": "node scripts/sync-supabase-skills.mjs",
42
44
  "release:readme": "node scripts/update-readme-release.mjs",
43
- "test:cli": "node bin/class-ai-agent.cjs --help && node bin/class-ai-agent.cjs --version && node -e \"const fs=require('fs');const c=JSON.parse(fs.readFileSync('.cursor/mcp.json','utf8'));const k=JSON.parse(fs.readFileSync('.kiro/settings/mcp.json','utf8'));if(!c.mcpServers?.codegraph||!k.mcpServers?.codegraph)throw new Error('missing codegraph MCP');if(!fs.existsSync('.cursor/rules/codegraph.mdc'))throw new Error('missing codegraph.mdc');if(!fs.existsSync('.kiro/steering/codegraph.md'))throw new Error('missing kiro codegraph steering');if(!fs.existsSync('.agent/SESSION.template.md'))throw new Error('missing SESSION.template');if(!fs.existsSync('.cursor/rules/agent-continuity.mdc'))throw new Error('missing agent-continuity.mdc');if(!fs.existsSync('.kiro/steering/agent-continuity.md'))throw new Error('missing kiro agent-continuity steering');if(!fs.existsSync('.cursor/commands/handoff.md')||!fs.existsSync('.cursor/commands/resume.md'))throw new Error('missing handoff/resume commands');\""
45
+ "test:cli": "node bin/class-ai-agent.cjs --help && node bin/class-ai-agent.cjs --version && node -e \"const fs=require('fs');const c=JSON.parse(fs.readFileSync('.cursor/mcp.json','utf8'));const k=JSON.parse(fs.readFileSync('.kiro/settings/mcp.json','utf8'));if(!c.mcpServers?.codegraph||!k.mcpServers?.codegraph)throw new Error('missing codegraph MCP');if(!c.mcpServers?.supabase?.url?.includes('mcp.supabase.com')||!k.mcpServers?.supabase?.url?.includes('mcp.supabase.com'))throw new Error('missing supabase MCP');if(!fs.existsSync('.cursor/skills/supabase/SKILL.md')||!fs.existsSync('.cursor/skills/supabase-postgres-best-practices/SKILL.md'))throw new Error('missing supabase skills');if(!fs.existsSync('.claude/skills/supabase/SKILL.md'))throw new Error('missing claude supabase skill');if(!fs.existsSync('.cursor/references/supabase.md'))throw new Error('missing supabase reference');if(!fs.existsSync('scripts/sync-supabase-skills.mjs'))throw new Error('missing sync-supabase-skills');if(!fs.existsSync('.cursor/rules/codegraph.mdc'))throw new Error('missing codegraph.mdc');if(!fs.existsSync('.kiro/steering/codegraph.md'))throw new Error('missing kiro codegraph steering');if(!fs.existsSync('.agent/SESSION.template.md'))throw new Error('missing SESSION.template');if(!fs.existsSync('.cursor/rules/agent-continuity.mdc'))throw new Error('missing agent-continuity.mdc');if(!fs.existsSync('.kiro/steering/agent-continuity.md'))throw new Error('missing kiro agent-continuity steering');if(!fs.existsSync('.cursor/commands/handoff.md')||!fs.existsSync('.cursor/commands/resume.md'))throw new Error('missing handoff/resume commands');\""
44
46
  }
45
47
  }