codebyplan 1.13.39 → 1.13.41

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 (86) hide show
  1. package/dist/cli.js +24631 -354
  2. package/package.json +4 -2
  3. package/templates/agents/cbp-cc-executor.md +4 -4
  4. package/templates/agents/cbp-database-agent.md +15 -4
  5. package/templates/agents/cbp-round-executor.md +2 -10
  6. package/templates/agents/cbp-task-check.md +2 -0
  7. package/templates/agents/cbp-task-planner.md +2 -5
  8. package/templates/hooks/README.md +14 -2
  9. package/templates/hooks/cbp-session-start-hook.sh +32 -0
  10. package/templates/hooks/cbp-test-coverage-gate.sh +20 -6
  11. package/templates/hooks/cbp-test-hooks.sh +72 -0
  12. package/templates/hooks/hooks.json +11 -0
  13. package/templates/hooks/validate-structure-patterns.sh +5 -3
  14. package/templates/hooks/validate-structure.sh +3 -2
  15. package/templates/settings.project.base.json +12 -0
  16. package/templates/skills/cbp-checkpoint-check/SKILL.md +10 -10
  17. package/templates/skills/cbp-checkpoint-complete/SKILL.md +7 -7
  18. package/templates/skills/cbp-checkpoint-create/SKILL.md +11 -9
  19. package/templates/skills/cbp-checkpoint-end/SKILL.md +7 -10
  20. package/templates/skills/cbp-checkpoint-plan/SKILL.md +10 -10
  21. package/templates/skills/cbp-checkpoint-start/SKILL.md +6 -6
  22. package/templates/skills/cbp-checkpoint-update/SKILL.md +9 -9
  23. package/templates/skills/cbp-git-commit/SKILL.md +8 -4
  24. package/templates/skills/cbp-merge-main/SKILL.md +2 -5
  25. package/templates/skills/cbp-round-check/SKILL.md +12 -8
  26. package/templates/skills/cbp-round-complete/SKILL.md +16 -10
  27. package/templates/skills/cbp-round-end/SKILL.md +9 -10
  28. package/templates/skills/cbp-round-execute/SKILL.md +7 -6
  29. package/templates/skills/cbp-round-input/SKILL.md +24 -12
  30. package/templates/skills/cbp-round-start/SKILL.md +36 -16
  31. package/templates/skills/cbp-round-update/SKILL.md +14 -10
  32. package/templates/skills/cbp-session-end/SKILL.md +22 -12
  33. package/templates/skills/cbp-session-start/SKILL.md +20 -47
  34. package/templates/skills/cbp-ship/SKILL.md +4 -4
  35. package/templates/skills/cbp-ship-main/SKILL.md +4 -5
  36. package/templates/skills/cbp-supabase-branch-check/SKILL.md +1 -0
  37. package/templates/skills/cbp-supabase-migrate/SKILL.md +14 -9
  38. package/templates/skills/cbp-supabase-setup/SKILL.md +1 -0
  39. package/templates/skills/cbp-task-check/SKILL.md +10 -10
  40. package/templates/skills/cbp-task-complete/SKILL.md +11 -9
  41. package/templates/skills/cbp-task-create/SKILL.md +7 -5
  42. package/templates/skills/cbp-task-start/SKILL.md +15 -17
  43. package/templates/skills/cbp-task-testing/SKILL.md +18 -18
  44. package/templates/skills/cbp-todo/SKILL.md +21 -21
  45. package/templates/skills/supabase/CHANGELOG.md +35 -0
  46. package/templates/skills/supabase/PROVENANCE.md +50 -0
  47. package/templates/skills/supabase/SKILL.md +136 -0
  48. package/templates/skills/supabase/assets/feedback-issue-template.md +17 -0
  49. package/templates/skills/supabase/references/skill-feedback.md +17 -0
  50. package/templates/skills/supabase-postgres-best-practices/CHANGELOG.md +29 -0
  51. package/templates/skills/supabase-postgres-best-practices/PROVENANCE.md +52 -0
  52. package/templates/skills/supabase-postgres-best-practices/SKILL.md +65 -0
  53. package/templates/skills/supabase-postgres-best-practices/references/_contributing.md +170 -0
  54. package/templates/skills/supabase-postgres-best-practices/references/_sections.md +39 -0
  55. package/templates/skills/supabase-postgres-best-practices/references/_template.md +34 -0
  56. package/templates/skills/supabase-postgres-best-practices/references/advanced-full-text-search.md +55 -0
  57. package/templates/skills/supabase-postgres-best-practices/references/advanced-jsonb-indexing.md +49 -0
  58. package/templates/skills/supabase-postgres-best-practices/references/conn-idle-timeout.md +46 -0
  59. package/templates/skills/supabase-postgres-best-practices/references/conn-limits.md +44 -0
  60. package/templates/skills/supabase-postgres-best-practices/references/conn-pooling.md +41 -0
  61. package/templates/skills/supabase-postgres-best-practices/references/conn-prepared-statements.md +46 -0
  62. package/templates/skills/supabase-postgres-best-practices/references/data-batch-inserts.md +54 -0
  63. package/templates/skills/supabase-postgres-best-practices/references/data-n-plus-one.md +53 -0
  64. package/templates/skills/supabase-postgres-best-practices/references/data-pagination.md +50 -0
  65. package/templates/skills/supabase-postgres-best-practices/references/data-upsert.md +50 -0
  66. package/templates/skills/supabase-postgres-best-practices/references/lock-advisory.md +56 -0
  67. package/templates/skills/supabase-postgres-best-practices/references/lock-deadlock-prevention.md +68 -0
  68. package/templates/skills/supabase-postgres-best-practices/references/lock-short-transactions.md +50 -0
  69. package/templates/skills/supabase-postgres-best-practices/references/lock-skip-locked.md +54 -0
  70. package/templates/skills/supabase-postgres-best-practices/references/monitor-explain-analyze.md +45 -0
  71. package/templates/skills/supabase-postgres-best-practices/references/monitor-pg-stat-statements.md +55 -0
  72. package/templates/skills/supabase-postgres-best-practices/references/monitor-vacuum-analyze.md +55 -0
  73. package/templates/skills/supabase-postgres-best-practices/references/query-composite-indexes.md +44 -0
  74. package/templates/skills/supabase-postgres-best-practices/references/query-covering-indexes.md +40 -0
  75. package/templates/skills/supabase-postgres-best-practices/references/query-index-types.md +48 -0
  76. package/templates/skills/supabase-postgres-best-practices/references/query-missing-indexes.md +43 -0
  77. package/templates/skills/supabase-postgres-best-practices/references/query-partial-indexes.md +45 -0
  78. package/templates/skills/supabase-postgres-best-practices/references/schema-constraints.md +80 -0
  79. package/templates/skills/supabase-postgres-best-practices/references/schema-data-types.md +46 -0
  80. package/templates/skills/supabase-postgres-best-practices/references/schema-foreign-key-indexes.md +59 -0
  81. package/templates/skills/supabase-postgres-best-practices/references/schema-lowercase-identifiers.md +55 -0
  82. package/templates/skills/supabase-postgres-best-practices/references/schema-partitioning.md +55 -0
  83. package/templates/skills/supabase-postgres-best-practices/references/schema-primary-keys.md +61 -0
  84. package/templates/skills/supabase-postgres-best-practices/references/security-privileges.md +54 -0
  85. package/templates/skills/supabase-postgres-best-practices/references/security-rls-basics.md +50 -0
  86. package/templates/skills/supabase-postgres-best-practices/references/security-rls-performance.md +63 -0
@@ -40,7 +40,7 @@ Parse the argument using the canonical chk-task-round notation (see `cbp-round-s
40
40
  | Shape | Regex | Resolves to |
41
41
  |-------|-------|-------------|
42
42
  | `{chk}-{task}` (e.g. `108-1`) | `^[0-9]+-[0-9]+$` | Checkpoint-bound: CHK-{chk} TASK-{task} |
43
- | _(empty)_ | — | Use MCP `get_current_task` to find the active in-progress task |
43
+ | _(empty)_ | — | Resolve from local state per Step 1.5/2 (MCP `get_current_task` break-glass) the active in-progress task |
44
44
  | `{task}` (bare number) | — | **Error**: "Use /cbp-standalone-task-check {N} instead — bare numbers no longer route to standalone tasks." |
45
45
 
46
46
  Anything else is malformed — surface this error and stop:
@@ -70,14 +70,14 @@ Given the parse from Step 1:
70
70
 
71
71
  | Parse | Resolution path |
72
72
  |-------|-----------------|
73
- | `{chk}-{task}` | MCP `get_checkpoints(repo_id)` → filter `number === {chk}`. MCP `get_tasks(checkpoint_id)` → filter `number === {task}`. |
74
- | _(empty)_ | MCP `get_current_task(repo_id)` finds the active in-progress task. |
73
+ | `{chk}-{task}` | Read `.codebyplan/state/checkpoints/*.json` → filter `number === {chk}`. Read `.codebyplan/state/checkpoints/<id>/tasks/*.json` → filter `number === {task}`. If missing/stale, run `npx codebyplan sync` once and re-read. Break-glass fallback: MCP `get_checkpoints`/`get_tasks` when state dir absent and sync fails. |
74
+ | _(empty)_ | Read `.codebyplan/state/todos.json` find the active in-progress task. If missing/stale, run `npx codebyplan sync` once and re-read. Break-glass fallback: MCP `get_current_task(repo_id)` when state dir absent and sync fails. |
75
75
 
76
76
  If no in-progress task, show error and stop.
77
77
 
78
78
  ### Step 2: Quick Gate — Verify All Rounds Complete
79
79
 
80
- Use MCP `get_rounds` for the task. Verify all rounds are `completed`.
80
+ Read `.codebyplan/state/checkpoints/<checkpointId>/tasks/<taskId>/rounds/*.json` (local-first). If missing/stale, run `npx codebyplan sync` once and re-read. Break-glass fallback: MCP `get_rounds` when state dir absent and sync fails. Verify all rounds are `completed`.
81
81
 
82
82
  If any rounds still in_progress:
83
83
 
@@ -92,9 +92,9 @@ Stop here.
92
92
 
93
93
  ### Step 3: Load All Context
94
94
 
95
- 1. Get checkpoint details (id, title, goal, context)
96
- 2. Get task details (id, title, requirements, context, files_changed, qa)
97
- 3. Get all rounds via MCP `get_rounds` (number, requirements, context, qa, files_changed)
95
+ 1. Checkpoint details — from `.codebyplan/state/checkpoints/<checkpointId>.json` (already read in Step 1.5)
96
+ 2. Task details — from `.codebyplan/state/checkpoints/<checkpointId>/tasks/<taskId>.json` (already read in Step 1.5)
97
+ 3. All rounds from `.codebyplan/state/checkpoints/<checkpointId>/tasks/<taskId>/rounds/*.json` (already read in Step 2)
98
98
 
99
99
  ### Step 4: Spawn Task Check Agent
100
100
 
@@ -113,7 +113,7 @@ Wait for agent to complete. Agent handles all 10 phases including user satisfact
113
113
 
114
114
  ### Step 5: Save Agent Output
115
115
 
116
- Save agent output to task context via MCP `update_task`:
116
+ Save agent output to task context: `codebyplan task update --id <taskId> --checkpoint-id <checkpointId> --context '{"check_verdict": ...}'` (CLI write-through: local state file + REST). Break-glass fallback: MCP `update_task` when CLI is unavailable.
117
117
 
118
118
  - `task.context.check_verdict` = agent output (verdict, requirements_check, etc.)
119
119
 
@@ -160,7 +160,7 @@ Suggest: Approve files, then re-run `/cbp-task-check`. **STOP HERE** — wait fo
160
160
 
161
161
  ## Integration
162
162
 
163
- - **Reads**: MCP `get_current_task`, `get_rounds`, all changed files (via agent)
164
- - **Writes**: MCP `update_task` (context.check_verdict)
163
+ - **Reads**: `.codebyplan/state/checkpoints/*.json`, `checkpoints/<id>/tasks/*.json`, `checkpoints/<id>/tasks/<id>/rounds/*.json`, `todos.json` (local-first; `npx codebyplan sync` on miss; MCP `get_current_task`/`get_rounds` break-glass), plus all changed files (via agent)
164
+ - **Writes**: `codebyplan task update` (CLI write-through; MCP `update_task` break-glass)
165
165
  - **Triggers**: emits directive `Next: /clear, then /cbp-task-testing {chk-task}` on READY + satisfied (cross-context — testing is heavyweight, fresh context helps)
166
166
  - **Triggered by**: `/cbp-round-complete` (auto, when all files approved)
@@ -21,7 +21,7 @@ Parse the argument using the canonical chk-task-round notation (see `cbp-round-s
21
21
  | Shape | Regex | Resolves to |
22
22
  |-------|-------|-------------|
23
23
  | `{chk}-{task}` (e.g. `108-1`) | `^[0-9]+-[0-9]+$` | Checkpoint-bound: CHK-{chk} TASK-{task} |
24
- | _(empty)_ | — | Use MCP `get_current_task` to find the active in-progress task |
24
+ | _(empty)_ | — | Resolve from local state per Step 1.5/2 (MCP `get_current_task` break-glass) the active in-progress task |
25
25
  | `{task}` (bare number) | — | **Error**: "Use /cbp-standalone-task-complete {N} instead — bare numbers no longer route to standalone tasks." |
26
26
 
27
27
  Anything else is malformed — surface this error and stop:
@@ -51,14 +51,14 @@ Given the parse from Step 1:
51
51
 
52
52
  | Parse | Resolution path |
53
53
  |-------|-----------------|
54
- | `{chk}-{task}` | MCP `get_checkpoints(repo_id)` → filter `number === {chk}`. MCP `get_tasks(checkpoint_id)` → filter `number === {task}`. |
55
- | _(empty)_ | MCP `get_current_task(repo_id)` finds the active in-progress task. |
54
+ | `{chk}-{task}` | Read `.codebyplan/state/checkpoints/*.json` → filter `number === {chk}`. Read `.codebyplan/state/checkpoints/<id>/tasks/*.json` → filter `number === {task}`. If missing/stale, run `npx codebyplan sync` once and re-read. Break-glass fallback: MCP `get_checkpoints`/`get_tasks` when state dir absent and sync fails. |
55
+ | _(empty)_ | Read `.codebyplan/state/todos.json` find the active in-progress task. If missing/stale, run `npx codebyplan sync` once and re-read. Break-glass fallback: MCP `get_current_task(repo_id)` when state dir absent and sync fails. |
56
56
 
57
57
  If no in-progress task, show error and stop.
58
58
 
59
59
  ### Step 2: Verify Rounds Complete and Validated
60
60
 
61
- Use MCP `get_rounds` for the task. Verify all rounds are `completed`.
61
+ Read `.codebyplan/state/checkpoints/<checkpointId>/tasks/<taskId>/rounds/*.json` (local-first). If missing/stale, run `npx codebyplan sync` once and re-read. Break-glass fallback: MCP `get_rounds` when state dir absent and sync fails. Verify all rounds are `completed`.
62
62
 
63
63
  If any round is `in_progress`:
64
64
 
@@ -132,11 +132,11 @@ Skip the push only when nothing was committed in Step 5 AND `/cbp-merge-main` re
132
132
 
133
133
  ### Step 6: Update Task Files
134
134
 
135
- `update_task(task_id, files_changed: aggregated_files)`.
135
+ `codebyplan task update --id <taskId> --checkpoint-id <checkpointId> --files-changed '<json>'` (CLI write-through: local state file + REST). Break-glass fallback: MCP `update_task(task_id, files_changed: aggregated_files)` when CLI is unavailable.
136
136
 
137
137
  ### Step 7: Complete Task
138
138
 
139
- Call `complete_task(task_id)`. `caller_worktree_id` (CHK-140 TASK-7) identifies the calling worktree and is auto-injected by the `cbp-mcp-caller-worktree-inject.sh` PreToolUse hook (CHK-198 TASK-2); the server falls back to the repo `main` worktree only when it is absent, then enforces the mutate-lock. The server auto-clears `assigned_user_id` + `assigned_worktree_id` on the task; if this was the last sibling task, it also clears the parent checkpoint's assignment. (Per CHK-104 hard-lock.)
139
+ MCP `complete_task(task_id)` — kept on MCP because the CLI `codebyplan task complete` sends an empty POST body and cannot forward `caller_worktree_id`, which the server uses to enforce the mutate-lock. `caller_worktree_id` is auto-injected by the `cbp-mcp-caller-worktree-inject.sh` PreToolUse hook (CHK-198 TASK-2); the server falls back to the repo `main` worktree only when it is absent, then enforces the mutate-lock. The server auto-clears `assigned_user_id` + `assigned_worktree_id` on the task; if this was the last sibling task, it also clears the parent checkpoint's assignment. (Per CHK-104 hard-lock.)
140
140
 
141
141
  ### Step 8: Run Cleanup + Migration (inline)
142
142
 
@@ -164,7 +164,9 @@ Then route. Same-context transitions (next task in this checkpoint) auto-trigger
164
164
  checkpoint_id := current_task.checkpoint_id
165
165
  if checkpoint_id is null → error (should never happen — standalone tasks use /cbp-standalone-task-complete)
166
166
  else
167
- siblings := get_tasks(checkpoint_id) minus current_task
167
+ // Read sibling tasks from local state (already synced by Step 1.5)
168
+ siblings := .codebyplan/state/checkpoints/<checkpointId>/tasks/*.json minus current_task
169
+ // Break-glass: MCP get_tasks(checkpoint_id) when state dir absent and sync fails
168
170
  all_done := every sibling has status === 'completed'
169
171
  if all_done → CHECKPOINT-DONE; go to 9c
170
172
  else → MORE-TASKS-IN-CHECKPOINT; go to 9b
@@ -193,8 +195,8 @@ Do NOT use AskUserQuestion here — this is a directive, not a menu. The user ru
193
195
 
194
196
  - **Triggered by**: `/cbp-task-testing` (auto, when ALL PASS) — NOT directly from `/cbp-task-check`
195
197
  - **Chain**: `/cbp-task-check` → `/cbp-task-testing` → `/cbp-task-complete`
196
- - **Reads**: MCP `get_current_task`, `get_rounds`, `get_tasks`
197
- - **Writes**: MCP `update_task`, `complete_task`
198
+ - **Reads**: `.codebyplan/state/checkpoints/*.json`, `checkpoints/<id>/tasks/*.json`, `checkpoints/<id>/tasks/<id>/rounds/*.json`, `todos.json` (local-first; `npx codebyplan sync` on miss; MCP `get_current_task`/`get_rounds`/`get_tasks` break-glass)
199
+ - **Writes**: `codebyplan task update` for `files_changed` (CLI write-through; MCP `update_task` break-glass); MCP `complete_task` for task completion (kept MCP — CLI cannot forward `caller_worktree_id`)
198
200
  - **Uses skills (inline, no sub-agent)**: `cleanup` (if deletions), `migration` (if exports renamed)
199
201
  - **Triggers**: Same-context transitions auto-trigger via the Skill tool (next task in checkpoint → `/cbp-task-start {N}`). Cross-context transitions emit a directive `Next: /clear, then /cbp-X` for the user to invoke.
200
202
  - **Checkpoint-bound only** — for standalone tasks use `/cbp-standalone-task-complete`
@@ -32,7 +32,7 @@ Stop and redirect to `/cbp-standalone-task-create`.
32
32
 
33
33
  ### Step 1: Get Current Checkpoint
34
34
 
35
- Use MCP `get_current_task` with repo_id to find the active checkpoint.
35
+ Read local state `.codebyplan/state/checkpoints/<id>.json` to find the active checkpoint; on miss run `npx codebyplan sync` once and re-read. Use MCP `get_current_task` as documented break-glass when the state dir is absent and sync fails (daemon-dead + CLI-unavailable).
36
36
 
37
37
  If no active checkpoint, show error and stop.
38
38
 
@@ -56,7 +56,7 @@ Please describe:
56
56
 
57
57
  ### Step 3: Load Existing Tasks
58
58
 
59
- Use MCP `get_tasks` for the checkpoint. Review:
59
+ Read local state `.codebyplan/state/checkpoints/<id>/tasks/*.json` to load existing tasks for the checkpoint; on miss run `npx codebyplan sync` once and re-read. Use MCP `get_tasks` as documented break-glass when the state dir is absent and sync fails. Review:
60
60
  - Existing task titles and requirements
61
61
  - Task statuses (completed, in_progress, pending)
62
62
  - Dependencies between tasks
@@ -90,6 +90,8 @@ Before calling `create_task` for a finding, run a two-step dedup + bundle check:
90
90
  mcp__codebyplan__get_tasks(repo_id, standalone=true, status="pending")
91
91
  ```
92
92
 
93
+ > **Note**: this `get_tasks(standalone=true)` call stays MCP — there is no local-state equivalent for cross-checkpoint standalone task listing.
94
+
93
95
  Compare the proposed task to each pending standalone task on these match dimensions:
94
96
 
95
97
  | Match dimension | Action if matched |
@@ -140,7 +142,7 @@ Find logical position in task order:
140
142
 
141
143
  ### Step 7: Create Task
142
144
 
143
- Use MCP `create_task` with:
145
+ Use `codebyplan task create --checkpoint-id <id> ...` (CLI write-through) to create the task. Use MCP `create_task` as documented break-glass when the CLI is unavailable. Provide:
144
146
  - **title**: Concise task title
145
147
  - **requirements**: Numbered requirements list
146
148
  - **context**: Include decisions from Q&A, dependencies, source findings
@@ -190,7 +192,7 @@ Waiting for user to decide next step.
190
192
 
191
193
  ## Integration
192
194
 
193
- - **Reads**: MCP `get_current_task`, `get_tasks`
194
- - **Writes**: MCP `create_task`
195
+ - **Reads**: Local state `.codebyplan/state/checkpoints/<id>.json` + `.../tasks/<id>.json`; on miss `npx codebyplan sync` once; MCP `get_current_task` / `get_tasks` as documented break-glass when the state dir is absent and sync fails. Step 3.5 dedup `get_tasks(standalone=true)` stays MCP — no local-state equivalent for standalone listing.
196
+ - **Writes**: `codebyplan task create --checkpoint-id <id> ...` (CLI write-through); MCP `create_task` break-glass.
195
197
  - **Triggered by**: `/cbp-task-check` (suggested), `/cbp-task-testing` (suggested), user manual
196
198
  - **Does NOT auto-trigger** next command — user decides
@@ -20,7 +20,7 @@ Parse the argument using the canonical chk-task-round notation (see `cbp-round-s
20
20
  | Shape | Regex | Resolves to |
21
21
  |-------|-------|-------------|
22
22
  | `{chk}-{task}` (e.g. `108-1`) | `^[0-9]+-[0-9]+$` | Checkpoint-bound: CHK-{chk} TASK-{task} |
23
- | _(empty)_ | — | Use MCP `get_current_task` to find the next pending task |
23
+ | _(empty)_ | — | Resolve from local state per Step 1.5/2 (MCP `get_current_task` break-glass) the next pending task |
24
24
  | `{task}` (bare number) | — | **Error**: "Use /cbp-standalone-task-start {N} instead — bare numbers no longer route to standalone tasks." |
25
25
 
26
26
  Anything else is malformed — surface this error and stop:
@@ -51,8 +51,8 @@ Given the parse from Step 1:
51
51
 
52
52
  | Parse | Resolution path |
53
53
  |-------|-----------------|
54
- | `{chk}-{task}` | MCP `get_checkpoints(repo_id)` → filter `number === {chk}` (must exist). MCP `get_tasks(checkpoint_id)` → filter `number === {task}` (must exist). |
55
- | _(empty)_ | MCP `get_current_task(repo_id)` output gives both checkpoint (if any) and task. When multiple checkpoints are active and the result is ambiguous, surface the disambiguation prompt and stop. |
54
+ | `{chk}-{task}` | Read `.codebyplan/state/checkpoints/*.json` (local-first) → filter `number === {chk}`. Read `.codebyplan/state/checkpoints/<id>/tasks/*.json` → filter `number === {task}`. If the state dir is missing or stale, run `npx codebyplan sync` once and re-read. Break-glass fallback: MCP `get_checkpoints`/`get_tasks` when the state dir is absent and sync fails (daemon-dead + CLI-unavailable). |
55
+ | _(empty)_ | Read `.codebyplan/state/todos.json` (local-first) → find the next pending task. If missing/stale, run `npx codebyplan sync` once and re-read. Break-glass fallback: MCP `get_current_task(repo_id)` when the state dir is absent and sync fails. When multiple checkpoints are active and the result is ambiguous, surface the disambiguation prompt and stop. |
56
56
 
57
57
  If any required row is missing, surface this and stop:
58
58
 
@@ -135,7 +135,7 @@ After successful switch:
135
135
 
136
136
  1. Re-run `git branch --show-current` to confirm `current == TARGET`. If not, fail loudly — something raced.
137
137
  2. **Persist for next time**:
138
- - Checkpoint with `branch_name: null` → `update_checkpoint(checkpoint_id, branch_name: TARGET)`
138
+ - Checkpoint with `branch_name: null` → `codebyplan checkpoint update --id <checkpoint-id> --branch-name TARGET` (CLI write-through; break-glass: MCP `update_checkpoint`)
139
139
  - Checkpoint with existing `branch_name` → no write (already canonical)
140
140
  3. One-line confirmation in output: `Branch: [TARGET] (switched from [previous])`. No prompt, no waiting.
141
141
 
@@ -157,8 +157,8 @@ Skip this step if the task title and requirements contain no CVE ID (`CVE-YYYY-N
157
157
 
158
158
  1. Run `pnpm audit --json` from the monorepo root. If it fails (network, registry), surface the error and stop — do NOT start a CVE task without a clean snapshot.
159
159
  2. Parse the advisory list from the JSON output.
160
- 3. Call MCP `get_tasks(repo_id)`; for each advisory, match by ID in task title/requirements.
161
- 4. For every advisory with no matching open task, call MCP `create_task` per `cbp-task-create` Step 3.5 "Immediate Issue Capture Contract".
160
+ 3. Read `.codebyplan/state/checkpoints/<checkpointId>/tasks/*.json` (local-first; if missing/stale run `npx codebyplan sync` once; break-glass: MCP `get_tasks`); for each advisory, match by ID in task title/requirements.
161
+ 4. For every advisory with no matching open task, run `codebyplan task create --checkpoint-id <id> ...` (CLI write-through; break-glass: MCP `create_task`) per `cbp-task-create` Step 3.5 "Immediate Issue Capture Contract".
162
162
  5. Report the sweep result:
163
163
  ```
164
164
  ## CVE/GHSA Audit Sweep
@@ -175,7 +175,7 @@ Before activating the task, verify the caller's worktree matches the assigned wo
175
175
 
176
176
  1. Read caller worktree: `CALLER_WT=$(npx codebyplan resolve-worktree 2>/dev/null)`.
177
177
  2. Determine target worktree:
178
- - **Checkpoint-bound tasks**: `TARGET_WT = checkpoint.worktree_id` (read from MCP `get_checkpoints`). Note: checkpoint-bound tasks may have a NULL `task.assigned_worktree_id` because the lock lives on the parent checkpoint — fall through to `checkpoint.worktree_id`.
178
+ - **Checkpoint-bound tasks**: `TARGET_WT = checkpoint.worktree_id` (read from the local checkpoint file already loaded in Step 2). Note: checkpoint-bound tasks may have a NULL `task.assigned_worktree_id` because the lock lives on the parent checkpoint — fall through to `checkpoint.worktree_id`.
179
179
  3. If `TARGET_WT IS NOT NULL AND TARGET_WT != CALLER_WT`, surface this error and abort:
180
180
 
181
181
  ```
@@ -206,12 +206,12 @@ Before loading context, check if the feat branch has drifted from the production
206
206
 
207
207
  ### Step 4: Load Context
208
208
 
209
- Load context from DB:
209
+ Load context from local state files:
210
210
 
211
- 1. **Checkpoint context**: decisions, discoveries, dependencies, constraints
212
- 2. **Task context**: task-specific decisions and requirements
213
- 3. **Task research**: if any research was done
214
- 4. **Previous rounds**: check for completed rounds via MCP `get_rounds`
211
+ 1. **Checkpoint context**: decisions, discoveries, dependencies, constraints — from `.codebyplan/state/checkpoints/<checkpointId>.json`
212
+ 2. **Task context**: task-specific decisions and requirements — from `.codebyplan/state/checkpoints/<checkpointId>/tasks/<taskId>.json`
213
+ 3. **Task research**: if any research was done — from the task file's `context` field
214
+ 4. **Previous rounds**: check for completed rounds read `.codebyplan/state/checkpoints/<checkpointId>/tasks/<taskId>/rounds/*.json`. If missing/stale, run `npx codebyplan sync` once and re-read. Break-glass fallback: MCP `get_rounds` when state dir absent and sync fails.
215
215
 
216
216
  Display context summary:
217
217
 
@@ -230,9 +230,7 @@ Display context summary:
230
230
 
231
231
  ### Step 5: Set Task Status
232
232
 
233
- Use MCP `update_task(task_id, status: "in_progress")`.
234
-
235
- If worktree_id present, include `claim_worktree_id` to auto-claim the checkpoint. `caller_worktree_id` (CHK-140 TASK-7) identifies the calling worktree and is auto-injected by the `cbp-mcp-caller-worktree-inject.sh` PreToolUse hook (CHK-198 TASK-2); the server falls back to the repo `main` worktree only when it is absent.
233
+ `codebyplan task update --id <taskId> --checkpoint-id <checkpointId> --status in_progress` (CLI write-through: local state file + REST). If a worktree_id is present, also pass `--claim-worktree-id <worktreeId>` to auto-claim the checkpoint (the CLI passes all flags as snake-case PATCH fields). Break-glass fallback: MCP `update_task(task_id, status: "in_progress", claim_worktree_id: ..., caller_worktree_id: ...)` when the CLI is unavailable — note `caller_worktree_id` is auto-injected by the `cbp-mcp-caller-worktree-inject.sh` PreToolUse hook only on the MCP path.
236
234
 
237
235
  ### Step 6: Auto-trigger Round Start
238
236
 
@@ -247,6 +245,6 @@ Trigger `/cbp-round-start` with **no argument**. Do NOT pass the task identifier
247
245
  ## Integration
248
246
 
249
247
  - **Gates**: Step 2.5 permission gate — asks the user to confirm before any side effect; **Cancel** aborts cleanly with no writes. Fires on every invocation (manual, auto-trigger, auto-loop).
250
- - **Reads**: MCP `get_current_task`, `get_tasks`, `get_rounds`
251
- - **Writes**: MCP `update_task`
248
+ - **Reads**: `.codebyplan/state/checkpoints/*.json`, `checkpoints/<id>/tasks/*.json`, `checkpoints/<id>/tasks/<id>/rounds/*.json`, `todos.json` (local-first; `npx codebyplan sync` on miss; MCP `get_current_task`/`get_tasks`/`get_rounds` break-glass)
249
+ - **Writes**: `codebyplan task update` (CLI write-through; MCP `update_task` break-glass)
252
250
  - **Triggers**: `/cbp-round-start` (auto, round 1, no argument)
@@ -30,7 +30,7 @@ Parse the argument using the canonical chk-task-round notation (see `cbp-round-s
30
30
  | Shape | Regex | Resolves to |
31
31
  |-------|-------|-------------|
32
32
  | `{chk}-{task}` (e.g. `108-1`) | `^[0-9]+-[0-9]+$` | Checkpoint-bound: CHK-{chk} TASK-{task} |
33
- | _(empty)_ | — | Use MCP `get_current_task` to find the active in-progress task |
33
+ | _(empty)_ | — | Resolve from local state per Step 1.5/2 (MCP `get_current_task` break-glass) the active in-progress task |
34
34
  | `{task}` (bare number) | — | **Error**: "Use /cbp-standalone-task-testing {N} instead — bare numbers no longer route to standalone tasks." |
35
35
 
36
36
  Anything else is malformed — surface this error and stop:
@@ -60,14 +60,14 @@ Given the parse from Step 1:
60
60
 
61
61
  | Parse | Resolution path |
62
62
  |-------|-----------------|
63
- | `{chk}-{task}` | MCP `get_checkpoints(repo_id)` → filter `number === {chk}`. MCP `get_tasks(checkpoint_id)` → filter `number === {task}`. |
64
- | _(empty)_ | MCP `get_current_task(repo_id)` finds the active in-progress task. |
63
+ | `{chk}-{task}` | Read `.codebyplan/state/checkpoints/*.json` → filter `number === {chk}`. Read `.codebyplan/state/checkpoints/<id>/tasks/*.json` → filter `number === {task}`. If missing/stale, run `npx codebyplan sync` once and re-read. Break-glass fallback: MCP `get_checkpoints`/`get_tasks` when state dir absent and sync fails. |
64
+ | _(empty)_ | Read `.codebyplan/state/todos.json` find the active in-progress task. If missing/stale, run `npx codebyplan sync` once and re-read. Break-glass fallback: MCP `get_current_task(repo_id)` when state dir absent and sync fails. |
65
65
 
66
66
  If no in-progress task, show error and stop.
67
67
 
68
68
  ### Step 2: Verify All Rounds Complete
69
69
 
70
- Use MCP `get_rounds(task_id)`. Verify all rounds are `completed`. If any still `in_progress`:
70
+ Read `.codebyplan/state/checkpoints/<checkpointId>/tasks/<taskId>/rounds/*.json` (local-first). If missing/stale, run `npx codebyplan sync` once and re-read. Break-glass fallback: MCP `get_rounds(task_id)` when state dir absent and sync fails. Verify all rounds are `completed`. If any still `in_progress`:
71
71
 
72
72
  ```
73
73
  ## Cannot Run Task Testing
@@ -202,20 +202,20 @@ Collect failures from automated tests (Step 6), cross-round code review (Step 6.
202
202
 
203
203
  ### Step 10: Save Results
204
204
 
205
+ `codebyplan task update --id <taskId> --checkpoint-id <checkpointId> --context '<json>'` (CLI write-through: local state file + REST), merging `task_testing_output` into the existing context object. Break-glass fallback: MCP `update_task` when CLI is unavailable.
206
+
205
207
  ```ts
206
- update_task(task_id, {
207
- context: {
208
- ...existing,
209
- task_testing_output: {
210
- claude_tests: [...],
211
- cross_round_code_findings: [...], // from Step 6.5
212
- user_tests: [...],
213
- problems_found: [...],
214
- all_passed: boolean,
215
- summary: { total, passed, failed, pending }
216
- }
208
+ // context payload to merge:
209
+ {
210
+ task_testing_output: {
211
+ claude_tests: [...],
212
+ cross_round_code_findings: [...], // from Step 6.5
213
+ user_tests: [...],
214
+ problems_found: [...],
215
+ all_passed: boolean,
216
+ summary: { total, passed, failed, pending }
217
217
  }
218
- })
218
+ }
219
219
  ```
220
220
 
221
221
  ### Step 11: Route Based on Results
@@ -269,7 +269,7 @@ Waiting for user to run `/cbp-task-create`.
269
269
 
270
270
  ## Integration
271
271
 
272
- - **Reads**: MCP `get_current_task`, `get_rounds`, all aggregated files
273
- - **Writes**: MCP `update_task` (context.task_testing_output)
272
+ - **Reads**: `.codebyplan/state/checkpoints/*.json`, `checkpoints/<id>/tasks/*.json`, `checkpoints/<id>/tasks/<id>/rounds/*.json`, `todos.json` (local-first; `npx codebyplan sync` on miss; MCP `get_current_task`/`get_rounds` break-glass), plus all aggregated files
273
+ - **Writes**: `codebyplan task update` (CLI write-through; MCP `update_task` break-glass)
274
274
  - **Triggers**: `/cbp-task-complete` (auto, when ALL PASS)
275
275
  - **Triggered by**: user runs `/cbp-task-testing {chk-task}` per directive from `/cbp-task-check` on READY verdict (after `/cbp-round-execute`-driven validation completed all rounds)
@@ -40,7 +40,7 @@ npx codebyplan whoami --json # → {"user_id":"<uuid>","email":"…"} or null
40
40
 
41
41
  ### Step 1: Read the Todo Queue (pure-read)
42
42
 
43
- With `USER_ID` resolved, call MCP `get_todos({ repo_id, user_id, worktree_id })` (omit `worktree_id` when `WORKTREE_ID` is `null` or unresolved — that returns only unscoped rows). Take **`rows[0]`** as the queue head (ordered by `sort_order`).
43
+ With `USER_ID` resolved, read `.codebyplan/state/todos.json` (local-first). If missing or stale (`_cursor.json` absent or `sync_status !== "synced"`), run `npx codebyplan sync` once and re-read. Break-glass fallback: MCP `get_todos({ repo_id, user_id, worktree_id })` when the state dir is absent and sync fails. Filter by `user_id` and `worktree_id` (omit `worktree_id` when `WORKTREE_ID` is `null` or unresolved). Take **`rows[0]`** as the queue head (ordered by `sort_order`).
44
44
 
45
45
  - The head carries `command`, `instructions`, `state`, `metadata`, `worktree_id`, `checkpoint_id`, `task_id`.
46
46
  - The routing context (checkpoint/task) lives in **`rows[0].metadata`**.
@@ -53,7 +53,7 @@ Queue `command` values may use the `/codebyplan:<name>` plugin-namespace form (e
53
53
 
54
54
  Resolve the routing target's checkpoint and gate on ownership BEFORE any auto-trigger — including the Step 1.6 planning hand-offs. Refuse to route into, plan, or start work locked to a different worktree.
55
55
 
56
- Resolve the checkpoint from `rows[0].metadata` (or MCP `get_current_task`), then load its `worktree_id` + `plan` + `status` via MCP `get_checkpoints` and its task count via MCP `get_tasks(checkpoint_id)`. This single load is reused by the Step 1.6 planning gate. Skip this gate when the routing target has no checkpoint (idle — see Step 3) or the command is `/cbp-session-start`.
56
+ Resolve the checkpoint from `rows[0].metadata` (or read `.codebyplan/state/session/current.json` for the active task, falling back to MCP `get_current_task`), then load its `worktree_id` + `plan` + `status` from `.codebyplan/state/checkpoints/<id>.json` (falling back to MCP `get_checkpoints`) and its task count from `.codebyplan/state/checkpoints/<id>/tasks/` files (falling back to MCP `get_tasks(checkpoint_id)`). This single load is reused by the Step 1.6 planning gate. Skip this gate when the routing target has no checkpoint (idle — see Step 3) or the command is `/cbp-session-start`.
57
57
 
58
58
  Two ownership signals:
59
59
 
@@ -64,7 +64,7 @@ Two ownership signals:
64
64
  - target `worktree_id` non-null **AND** caller `WORKTREE_ID` is `null`/unresolved → **block** (deliberate safety: identity cannot be confirmed. This does not contradict Step 0 — reading the queue is fine, auto-triggering INTO assigned work is not. Run `npx codebyplan setup` to register this worktree).
65
65
  - target `worktree_id` non-null and differs from a non-null caller → **block**.
66
66
 
67
- On block, resolve the owning worktree's `name` + `path` via MCP `get_worktrees({ repo_id })` (match by id), then emit and STOP:
67
+ On block, resolve the owning worktree's `name` + `path` via MCP `get_worktrees({ repo_id })` (display-only ownership-block path — no CLI verb exists for worktrees; stays MCP), then emit and STOP:
68
68
 
69
69
  ```
70
70
  ⚠ Work mismatch: CHK-<NNN> TASK-<N> is assigned to worktree <name> (<short-uuid>), not this one (<this-name> / <this-short-uuid>).
@@ -83,7 +83,7 @@ Ownership passed (Step 1.5). Now guard against a lagging queue routing into alre
83
83
  Reject the auto-trigger when EITHER holds:
84
84
 
85
85
  - The target checkpoint's `status` is `completed` or `cancelled`.
86
- - Every task returned by `get_tasks(checkpoint_id)` (loaded in Step 1.5) has status `completed` or `cancelled` — no actionable task remains.
86
+ - Every task from `.codebyplan/state/checkpoints/<id>/tasks/` (loaded in Step 1.5; fallback MCP `get_tasks(checkpoint_id)`) has status `completed` or `cancelled` — no actionable task remains.
87
87
 
88
88
  On reject, surface the mismatch — naming the head command and the stale entity — then **STOP** (do not auto-trigger the head command). Use the variant matching the trigger condition:
89
89
 
@@ -123,33 +123,33 @@ Skip this gate when the routing target has no checkpoint (idle — see Step 3) o
123
123
 
124
124
  Once the gates pass, load the context the head command needs. This ensures `/clear` + `/cbp-todo` reliably restores full working context.
125
125
 
126
- **Use the context loading matrix below.** Match the `command` (in its `/cbp-<name>` form) to determine what to load.
126
+ **Use the context loading matrix below.** Match the `command` (in its `/cbp-<name>` form) to determine what to load. For all reads: use `.codebyplan/state/` local files first; run `npx codebyplan sync` and re-read if stale; MCP break-glass when state dir absent and sync fails.
127
127
 
128
128
  | Command Pattern | Context to Load |
129
129
  |----------------|-----------------|
130
130
  | `/cbp-session-start` | None — `/cbp-session-start` handles its own loading |
131
- | `/cbp-checkpoint-create` | If checkpoint exists in `rows[0].metadata`: load checkpoint via MCP `get_checkpoints` (filter by number). Display checkpoint title, goal, ideas summary |
132
- | `/cbp-checkpoint-plan` | Load checkpoint via MCP `get_checkpoints` (filter by number) + `get_tasks(checkpoint_id)`. Display checkpoint title, goal, ideas, existing task count |
133
- | `/cbp-checkpoint-start` | Load checkpoint via MCP `get_checkpoints` + `get_tasks(checkpoint_id)`. Display checkpoint title, status, claim state, first pending task |
134
- | `/cbp-task-start [N]` | Load via MCP `get_current_task`. Display checkpoint title + task title/requirements summary |
135
- | `/cbp-round-start` | Load via MCP `get_current_task` + `get_rounds(task_id)`. Display checkpoint + task + round count + last round summary |
136
- | `/cbp-round-update` | Load via MCP `get_current_task` + `get_rounds(task_id)`. Display checkpoint + task + files_changed triage summary (claude_approved, findings, hard_fail) |
131
+ | `/cbp-checkpoint-create` | If checkpoint exists in `rows[0].metadata`: load checkpoint from `.codebyplan/state/checkpoints/<id>.json` (fallback MCP `get_checkpoints`). Display checkpoint title, goal, ideas summary |
132
+ | `/cbp-checkpoint-plan` | Load checkpoint from `.codebyplan/state/checkpoints/<id>.json` + task files under `checkpoints/<id>/tasks/` (fallback MCP `get_checkpoints` + `get_tasks`). Display checkpoint title, goal, ideas, existing task count |
133
+ | `/cbp-checkpoint-start` | Load checkpoint + task files from local state (fallback MCP `get_checkpoints` + `get_tasks`). Display checkpoint title, status, claim state, first pending task |
134
+ | `/cbp-task-start [N]` | Load from `.codebyplan/state/session/current.json` (fallback MCP `get_current_task`). Display checkpoint title + task title/requirements summary |
135
+ | `/cbp-round-start` | Load from local state session + round files (fallback MCP `get_current_task` + `get_rounds`). Display checkpoint + task + round count + last round summary |
136
+ | `/cbp-round-update` | Load from local state session + round files (fallback MCP `get_current_task` + `get_rounds`). Display checkpoint + task + files_changed triage summary (claude_approved, findings, hard_fail) |
137
137
  | `/cbp-round-input` | **Full context load** (see Step 2b) |
138
- | `/cbp-task-check` | Load via MCP `get_current_task`. Display checkpoint + task + files summary |
139
- | `/cbp-task-testing` | Load via MCP `get_current_task` + `get_rounds(task_id)`. Display checkpoint + task + testing status summary |
140
- | `/cbp-task-create` | Load via MCP `get_current_task`. Display checkpoint + task list summary |
141
- | `/cbp-task-complete` | Load via MCP `get_current_task`. Display checkpoint + task summary |
142
- | `/cbp-checkpoint-complete` | Load via MCP `get_current_task`. Display checkpoint summary |
138
+ | `/cbp-task-check` | Load from local state session (fallback MCP `get_current_task`). Display checkpoint + task + files summary |
139
+ | `/cbp-task-testing` | Load from local state session + round files (fallback MCP `get_current_task` + `get_rounds`). Display checkpoint + task + testing status summary |
140
+ | `/cbp-task-create` | Load from local state session (fallback MCP `get_current_task`). Display checkpoint + task list summary |
141
+ | `/cbp-task-complete` | Load from local state session (fallback MCP `get_current_task`). Display checkpoint + task summary |
142
+ | `/cbp-checkpoint-complete` | Load from local state session (fallback MCP `get_current_task`). Display checkpoint summary |
143
143
  | *(no command / idle)* | See Step 3 — suggest `/cbp-session-end` |
144
144
 
145
- **For any unrecognized command:** Load via MCP `get_current_task` as a safe default. Display whatever context is available.
145
+ **For any unrecognized command:** Load from local state session (fallback MCP `get_current_task`) as a safe default. Display whatever context is available.
146
146
 
147
147
  ### Step 2b: Full Context Load (for `/cbp-round-input`)
148
148
 
149
149
  This is the most context-dependent command. Load everything:
150
150
 
151
- 1. **MCP `get_current_task`** checkpoint (title, goal, context with decisions/discoveries) + task (title, requirements, context, files_changed, QA)
152
- 2. **MCP `get_rounds(task_id)`** — all rounds for the task (requirements, context with executor_output/testing_qa_output, QA)
151
+ 1. **Local state** `.codebyplan/state/session/current.json` checkpoint + task (title, goal, context with decisions/discoveries, requirements, files_changed, QA). Fallback: MCP `get_current_task`.
152
+ 2. **Local round files** `.codebyplan/state/checkpoints/<id>/tasks/<id>/rounds/*.json` — all rounds for the task. Fallback: MCP `get_rounds(task_id)`.
153
153
 
154
154
  Display a brief context summary:
155
155
 
@@ -172,7 +172,7 @@ Display a brief context summary:
172
172
 
173
173
  Reached when `get_todos` returns `[]` or `USER_ID` was unavailable.
174
174
 
175
- 1. **Fallback discovery** (worktree-scoped): MCP `get_current_task({ repo_id, worktree_id })` and `get_checkpoints({ repo_id, worktree_id, status: 'active' })` to discover whether actionable work exists for this caller.
175
+ 1. **Fallback discovery** (worktree-scoped): read `.codebyplan/state/session/current.json` and scan `.codebyplan/state/checkpoints/` for active checkpoints (fallback: MCP `get_current_task` + `get_checkpoints`) to discover whether actionable work exists for this caller.
176
176
  2. **Actionable work found** → treat the discovered checkpoint as the routing target and apply BOTH the Step 1.5 ownership gate and the Step 1.6 planning gate to it, using the `worktree_id` + `plan` + `status` returned by `get_checkpoints` (the fallback has no `rows[0]` — substitute the discovered checkpoint). If both gates pass, route via Step 2 → Step 4.
177
177
  3. **Nothing actionable** → suggest ending the session:
178
178
 
@@ -193,5 +193,5 @@ Reached only when the Step 1.5 ownership gate allowed routing to continue, the S
193
193
 
194
194
  - **Called by**: `/cbp-session-start`, `/cbp-task-complete`, `/cbp-checkpoint-complete`, manual, after `/clear`
195
195
  - **Resolves**: `npx codebyplan resolve-worktree --json` (worktree id + distress signal), `npx codebyplan whoami --json` (user id)
196
- - **Reads**: MCP `get_todos`, `get_current_task`, `get_rounds`, `get_checkpoints`, `get_tasks`, `get_worktrees`
196
+ - **Reads**: `.codebyplan/state/todos.json`, `session/current.json`, `checkpoints/<id>.json`, `checkpoints/<id>/tasks/<id>.json`, `checkpoints/<id>/tasks/<id>/rounds/<id>.json`, `worktrees.json`. If missing/stale, run `npx codebyplan sync` once and re-read. Break-glass: MCP `get_todos`, `get_current_task`, `get_rounds`, `get_checkpoints`, `get_tasks` when state dir absent and sync fails. `get_worktrees` stays MCP (display-only ownership-block path; no CLI verb).
197
197
  - **Triggers**: `rows[0].command` (auto, after the Step 1.5 ownership gate and Step 1.55 stale-entity guard pass, and the Step 1.6 planning gate falls through); Step 1.55 overrides to STOP (stale completed/cancelled entity); Step 1.6 overrides to `/cbp-checkpoint-plan` (unplanned) or `/cbp-checkpoint-start` (planned-but-pending)
@@ -0,0 +1,35 @@
1
+ # Changelog
2
+
3
+ ## [0.1.4](https://github.com/supabase/agent-skills/compare/v0.1.3...v0.1.4) (2026-06-05)
4
+
5
+
6
+ ### Features
7
+
8
+ * add instructions to check changelog ([#74](https://github.com/supabase/agent-skills/issues/74)) ([4bb13d8](https://github.com/supabase/agent-skills/commit/4bb13d858d19f1f848505a66f46fc9603fdcde95))
9
+ * add npm supply-chain security guidance to supabase skill ([#94](https://github.com/supabase/agent-skills/issues/94)) ([82df90a](https://github.com/supabase/agent-skills/commit/82df90a5de1cd84386d8bc192746e50343b86dc0))
10
+ * instructions on exposing tables to the data api ([#71](https://github.com/supabase/agent-skills/issues/71)) ([f15a5a4](https://github.com/supabase/agent-skills/commit/f15a5a40779072a530c9e53c3f14ec4131118ea6))
11
+ * using Supabase agent skills ([#12](https://github.com/supabase/agent-skills/issues/12)) ([7c2e389](https://github.com/supabase/agent-skills/commit/7c2e3894fddfde8eb6c77d2a8921904543b9be7a))
12
+
13
+
14
+ ### Bug Fixes
15
+
16
+ * bump supabase skill to v0.1.1 and fix Data API broken link ([#72](https://github.com/supabase/agent-skills/issues/72)) ([5a6542e](https://github.com/supabase/agent-skills/commit/5a6542e08fc026d90c9a6a0f5a67749e9ceb9946))
17
+ * cover SECURITY DEFINER, auth.role() deprecation, and BOLA in security checklist ([#85](https://github.com/supabase/agent-skills/issues/85)) ([133f43e](https://github.com/supabase/agent-skills/commit/133f43e8c2ffc48823ff0630c692cabecea3e3a3))
18
+ * update Data API doc link and bump supabase skill to v0.1.1 ([#73](https://github.com/supabase/agent-skills/issues/73)) ([e5f7a7c](https://github.com/supabase/agent-skills/commit/e5f7a7cfd697765848ffd6a4505f3c02e1ee17ee))
19
+
20
+ ## [0.1.3](https://github.com/supabase/agent-skills/compare/v0.1.2...v0.1.3) (2026-06-02)
21
+
22
+
23
+ ### Features
24
+
25
+ * add instructions to check changelog ([#74](https://github.com/supabase/agent-skills/issues/74)) ([4bb13d8](https://github.com/supabase/agent-skills/commit/4bb13d858d19f1f848505a66f46fc9603fdcde95))
26
+ * add npm supply-chain security guidance to supabase skill ([#94](https://github.com/supabase/agent-skills/issues/94)) ([82df90a](https://github.com/supabase/agent-skills/commit/82df90a5de1cd84386d8bc192746e50343b86dc0))
27
+ * instructions on exposing tables to the data api ([#71](https://github.com/supabase/agent-skills/issues/71)) ([f15a5a4](https://github.com/supabase/agent-skills/commit/f15a5a40779072a530c9e53c3f14ec4131118ea6))
28
+ * using Supabase agent skills ([#12](https://github.com/supabase/agent-skills/issues/12)) ([7c2e389](https://github.com/supabase/agent-skills/commit/7c2e3894fddfde8eb6c77d2a8921904543b9be7a))
29
+
30
+
31
+ ### Bug Fixes
32
+
33
+ * bump supabase skill to v0.1.1 and fix Data API broken link ([#72](https://github.com/supabase/agent-skills/issues/72)) ([5a6542e](https://github.com/supabase/agent-skills/commit/5a6542e08fc026d90c9a6a0f5a67749e9ceb9946))
34
+ * cover SECURITY DEFINER, auth.role() deprecation, and BOLA in security checklist ([#85](https://github.com/supabase/agent-skills/issues/85)) ([133f43e](https://github.com/supabase/agent-skills/commit/133f43e8c2ffc48823ff0630c692cabecea3e3a3))
35
+ * update Data API doc link and bump supabase skill to v0.1.1 ([#73](https://github.com/supabase/agent-skills/issues/73)) ([e5f7a7c](https://github.com/supabase/agent-skills/commit/e5f7a7cfd697765848ffd6a4505f3c02e1ee17ee))
@@ -0,0 +1,50 @@
1
+ # Provenance
2
+
3
+ This skill is vendored from the official Supabase **agent-skills** project.
4
+
5
+ | Field | Value |
6
+ |-------|-------|
7
+ | Upstream | https://github.com/supabase/agent-skills |
8
+ | Upstream path | `skills/supabase/` |
9
+ | Pinned commit | `1356046015476711a769601079262b5635929427` |
10
+ | Vendored on | 2026-06-08 |
11
+ | Skill version | `0.1.2` in `SKILL.md` frontmatter — but the vendored content is current to release **`0.1.4`** (2026-06-05) per `CHANGELOG.md`; upstream does not bump `metadata.version` per release, so trust the pinned commit + `CHANGELOG.md`, not the frontmatter field, when assessing drift |
12
+ | License | MIT |
13
+
14
+ The **only** CodeByPlan modification is the added `scope: org-shared` line in the
15
+ `SKILL.md` frontmatter (required by the CBP `.claude/` scope-marker convention —
16
+ `rules/scope-vocabulary.md`). Everything else — the `SKILL.md` body, `references/`,
17
+ `assets/`, and `CHANGELOG.md` — is upstream-verbatim.
18
+
19
+ ## Refresh
20
+
21
+ Re-vendor when upstream publishes a newer version (typically on a `codebyplan`
22
+ package release):
23
+
24
+ 1. Re-fetch every file under the upstream path above, pinned to the latest commit.
25
+ 2. Re-inject the single `scope: org-shared` frontmatter line into `SKILL.md`.
26
+ 3. Copy the result into **both** `packages/codebyplan-package/templates/skills/supabase/`
27
+ and the byte-identical `.claude/skills/supabase/` twin (GATE 6 sibling-identity).
28
+ 4. Update the pinned commit + version in this file.
29
+
30
+ ## License (MIT)
31
+
32
+ Copyright (c) 2026 Supabase
33
+
34
+ Permission is hereby granted, free of charge, to any person obtaining a copy
35
+ of this software and associated documentation files (the "Software"), to deal
36
+ in the Software without restriction, including without limitation the rights
37
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
38
+ copies of the Software, and to permit persons to whom the Software is
39
+ furnished to do so, subject to the following conditions:
40
+
41
+ The above copyright notice and this permission notice shall be included in all
42
+ copies or substantial portions of the Software.
43
+
44
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
45
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
46
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
47
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
48
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
49
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
50
+ SOFTWARE.