diff --git a/.claude/commands/overnight.md b/.claude/commands/overnight.md deleted file mode 100644 index 459a148e..00000000 --- a/.claude/commands/overnight.md +++ /dev/null @@ -1,11 +0,0 @@ -Prepare and launch the overnight automation loop. Do ALL of these steps in order: - -1. Commit all uncommitted changes on the current branch with message: `chore: pre-overnight snapshot` -2. Push the current branch to origin -3. Check if branch `overnight/$DATE` exists (where $DATE is today's date YYYY-MM-DD). If it does, check it out. If not, run `./loop/prepare.sh` to create it. -4. Commit `loop/plan.md` and `loop/prompt.md` on the overnight branch: `chore: overnight plan $DATE` -5. Push the overnight branch: `git push -u origin overnight/$DATE` -6. Start the loop in the background: run `caffeinate -i ./loop/loop.sh` using Bash with `run_in_background: true` -7. Report: branch name, task count from plan.md, and confirm the loop is running - -If any step fails, stop and report the error — do not continue. diff --git a/.claude/skills/overnight/SKILL.md b/.claude/skills/overnight/SKILL.md new file mode 100644 index 00000000..128e9384 --- /dev/null +++ b/.claude/skills/overnight/SKILL.md @@ -0,0 +1,19 @@ +--- +name: overnight +description: Commit, branch, and start the overnight automation loop +disable-model-invocation: true +allowed-tools: Bash(*), Read, Write, Edit, Glob, Grep +--- + +Prepare and launch the overnight automation loop. Do ALL steps in order, stopping on any failure: + +1. Stage and commit all uncommitted changes: `git add -A && git commit -m "chore: pre-overnight snapshot"` (skip if working tree is clean) +2. Push current branch to origin +3. Get today's date as YYYY-MM-DD. Check if `overnight/$DATE` branch exists: + - If yes: `git checkout overnight/$DATE` + - If no: run `./loop/prepare.sh` +4. Verify `loop/plan.md` has unchecked tasks (`grep -c '^\- \[ \]' loop/plan.md`) +5. Commit plan files if modified: `git add loop/plan.md loop/prompt.md && git commit -m "chore: overnight plan $DATE"` (skip if clean) +6. Push: `git push -u origin overnight/$DATE` +7. Start the loop: run `caffeinate -i ./loop/loop.sh` with `run_in_background: true` +8. Report: branch name, number of tasks, and confirm the loop is running in background diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6a2a56da..5a0b3cae 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -85,6 +85,9 @@ importers: '@types/markdown-it': specifier: ^14.1.2 version: 14.1.2 + '@vitejs/plugin-basic-ssl': + specifier: ^2.1.4 + version: 2.1.4(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) '@vitejs/plugin-vue': specifier: ^6.0.4 version: 6.0.4(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.29(typescript@5.8.3)) @@ -1820,6 +1823,12 @@ packages: resolution: {integrity: sha512-KiROIzYdEV85YygXw6BI/Dx4fnBlFQu6Mq4QE4MOH9fFnhohw6wX/OAvDY2/C+ut0I3RSPKenvZJIVYqJNkhEw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@vitejs/plugin-basic-ssl@2.1.4': + resolution: {integrity: sha512-HXciTXN/sDBYWgeAD4V4s0DN0g72x5mlxQhHxtYu3Tt8BLa6MzcJZUyDVFCdtjNs3bfENVHVzOsmooTVuNgAAw==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + peerDependencies: + vite: ^6.0.0 || ^7.0.0 + '@vitejs/plugin-vue@6.0.4': resolution: {integrity: sha512-uM5iXipgYIn13UUQCZNdWkYk+sysBeA97d5mHsAoAt1u/wpN3+zxOmsVJWosuzX+IMGRzeYUNytztrYznboIkQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -5795,6 +5804,10 @@ snapshots: '@typescript-eslint/types': 8.56.1 eslint-visitor-keys: 5.0.1 + '@vitejs/plugin-basic-ssl@2.1.4(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + dependencies: + vite: 7.3.1(@types/node@25.3.3)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + '@vitejs/plugin-vue@6.0.4(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.29(typescript@5.8.3))': dependencies: '@rolldown/pluginutils': 1.0.0-rc.2