diff --git a/get-shit-done/references/checkpoints.md b/get-shit-done/references/checkpoints.md
index 232817480..23f90e99c 100644
--- a/get-shit-done/references/checkpoints.md
+++ b/get-shit-done/references/checkpoints.md
@@ -50,7 +50,7 @@ Plans execute autonomously. Checkpoints formalize interaction points where human
Start dev server for verification
Run `npm run dev` in background, wait for "ready" message, capture port
- curl http://localhost:3000 returns 200
+ fetch http://localhost:3000 returns 200
Dev server running at http://localhost:3000
@@ -240,7 +240,7 @@ Plans execute autonomously. Checkpoints formalize interaction points where human
Deploy to Vercel
.vercel/, vercel.json
Run `vercel --yes` to deploy
- vercel ls shows deployment, curl returns 200
+ vercel ls shows deployment, fetch returns 200
@@ -261,7 +261,7 @@ Plans execute autonomously. Checkpoints formalize interaction points where human
Retry Vercel deployment
Run `vercel --yes` (now authenticated)
- vercel ls shows deployment, curl returns 200
+ vercel ls shows deployment, fetch returns 200
```
@@ -455,8 +455,8 @@ I'll verify: vercel whoami returns your account
npm run dev &
DEV_SERVER_PID=$!
-# Wait for ready (max 30s)
-timeout 30 bash -c 'until curl -s localhost:3000 > /dev/null 2>&1; do sleep 1; done'
+# Wait for ready (max 30s) — uses fetch() for cross-platform compatibility
+timeout 30 bash -c 'until node -e "fetch(\"http://localhost:3000\").then(r=>{process.exit(r.ok?0:1)}).catch(()=>process.exit(1))" 2>/dev/null; do sleep 1; done'
```
**Port conflicts:** Kill stale process (`lsof -ti:3000 | xargs kill`) or use alternate port (`--port 3001`).
@@ -489,7 +489,9 @@ timeout 30 bash -c 'until curl -s localhost:3000 > /dev/null 2>&1; do sleep 1; d
| Auth error | Create auth gate checkpoint |
| Network timeout | Retry with backoff, then checkpoint if persistent |
-**Never present a checkpoint with broken verification environment.** If `curl localhost:3000` fails, don't ask user to "visit localhost:3000".
+**Never present a checkpoint with broken verification environment.** If the local server isn't responding, don't ask user to "visit localhost:3000".
+
+> **Cross-platform note:** Use `node -e "fetch('http://localhost:3000').then(r=>console.log(r.status))"` instead of `curl` for health checks. `curl` is broken on Windows MSYS/Git Bash due to SSL/path mangling issues.
```xml
@@ -502,7 +504,7 @@ timeout 30 bash -c 'until curl -s localhost:3000 > /dev/null 2>&1; do sleep 1; d
Fix server startup issue
Investigate error, fix root cause, restart server
- curl http://localhost:3000 returns 200
+ fetch http://localhost:3000 returns 200
@@ -608,7 +610,7 @@ timeout 30 bash -c 'until curl -s localhost:3000 > /dev/null 2>&1; do sleep 1; d
Start dev server for auth testing
Run `npm run dev` in background, wait for ready signal
- curl http://localhost:3000 returns 200
+ fetch http://localhost:3000 returns 200
Dev server running at http://localhost:3000
@@ -651,7 +653,7 @@ timeout 30 bash -c 'until curl -s localhost:3000 > /dev/null 2>&1; do sleep 1; d
Start dev server
Run `npm run dev` in background
- curl localhost:3000 returns 200
+ fetch http://localhost:3000 returns 200
@@ -677,7 +679,7 @@ timeout 30 bash -c 'until curl -s localhost:3000 > /dev/null 2>&1; do sleep 1; d
Deploy to Vercel
Run `vercel --yes`. Capture URL.
- vercel ls shows deployment, curl returns 200
+ vercel ls shows deployment, fetch returns 200
diff --git a/get-shit-done/templates/phase-prompt.md b/get-shit-done/templates/phase-prompt.md
index 6d23160dd..b242dc15e 100644
--- a/get-shit-done/templates/phase-prompt.md
+++ b/get-shit-done/templates/phase-prompt.md
@@ -341,7 +341,7 @@ Output: User model, API endpoints, and UI components.
Task 2: Create User API endpoints
src/features/user/api.ts
GET /users (list), GET /users/:id (single), POST /users (create). Use User type from model.
- curl tests pass for all endpoints
+ fetch tests pass for all endpoints
All CRUD operations work
@@ -407,7 +407,7 @@ Output: Working dashboard component.
Start dev server
Run `npm run dev` in background, wait for ready
- curl localhost:3000 returns 200
+ fetch http://localhost:3000 returns 200