wicked-brain 0.12.1 → 0.13.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.
@@ -17,15 +17,10 @@ You answer questions from the brain's content by dispatching a query subagent.
17
17
 
18
18
  ## Config
19
19
 
20
- Resolve the brain config via the shared resolution in
21
- wicked-brain:init § "Resolving the brain config". In short: try
22
- `~/.wicked-brain/projects/{cwd_basename}/_meta/config.json` first, fall back
23
- to `~/.wicked-brain/_meta/config.json` (legacy flat), else trigger
24
- wicked-brain:init. Read the resolved file for brain path and server port.
25
-
26
- Do NOT read a bare relative `_meta/config.json` — the model will resolve it
27
- against the current working directory and brain files will end up in the
28
- project root.
20
+ Brain discovery + server lifecycle are handled by `wicked-brain-call`. Pass
21
+ `--brain <path>` to override the auto-detected brain, or set
22
+ `WICKED_BRAIN_PATH`. The CLI starts the server on first call (no manual
23
+ init required) and writes an audit record to `{brain}/calls/` per call.
29
24
 
30
25
  ## Parameters
31
26
 
@@ -37,7 +32,7 @@ Dispatch a query subagent with these instructions:
37
32
 
38
33
  ```
39
34
  You are a research agent for the digital brain at {brain_path}.
40
- Server: http://localhost:{port}/api
35
+ Server interactions: use `npx wicked-brain-call <action> [--param k=v ...]`.
41
36
 
42
37
  Question: "{question}"
43
38
 
@@ -95,9 +90,7 @@ Run multiple searches if key terms suggest different angles.
95
90
 
96
91
  Search the brain for relevant content:
97
92
  ```bash
98
- curl -s -X POST http://localhost:{port}/api \
99
- -H "Content-Type: application/json" \
100
- -d '{"action":"search","params":{"query":"{term}","limit":10,"session_id":"{session_id}"}}'
93
+ npx wicked-brain-call search --param query={term} --param limit=10 --param session_id={session_id}
101
94
  ```
102
95
 
103
96
  Pass a session_id with every search call. This enables access tracking for
@@ -108,9 +101,7 @@ used for access-log tracking and diversity ranking across repeated searches.
108
101
 
109
102
  If the question implies recency ("recently", "this week", "latest"), add a `since` parameter to the search with an ISO 8601 timestamp. For example, for "this week" use the date 7 days ago:
110
103
  ```bash
111
- curl -s -X POST http://localhost:{port}/api \
112
- -H "Content-Type: application/json" \
113
- -d '{"action":"search","params":{"query":"{term}","limit":10,"session_id":"{session_id}","since":"{iso8601_date}"}}'
104
+ npx wicked-brain-call search --param query={term} --param limit=10 --param session_id={session_id} --param since={iso8601_date}
114
105
  ```
115
106
 
116
107
  Also search with grep for exact phrases (use your Grep tool when available —
@@ -154,9 +145,7 @@ Check the content for [[wikilinks]]. If following them would provide useful cont
154
145
 
155
146
  Check backlinks — what else references the content you found:
156
147
  ```bash
157
- curl -s -X POST http://localhost:{port}/api \
158
- -H "Content-Type: application/json" \
159
- -d '{"action":"backlinks","params":{"id":"{result_path}"}}'
148
+ npx wicked-brain-call backlinks --param id={result_path}
160
149
  ```
161
150
 
162
151
  ## Step 4: Synthesize answer
@@ -17,21 +17,19 @@ compact, navigable list.
17
17
 
18
18
  ## Cross-Platform Notes
19
19
 
20
- - Uses `curl` for server API calls (Windows 10+, macOS, Linux)
20
+ This skill uses `npx wicked-brain-call` for all server interaction. The CLI
21
+ works on macOS, Linux, and Windows; it discovers the brain, auto-starts the
22
+ server, and writes a per-call audit record under `{brain}/calls/`.
23
+
21
24
  - File reads use the agent-native Read tool
22
25
  - Paths always use forward slashes
23
26
 
24
27
  ## Config
25
28
 
26
- Resolve the brain config via the shared resolution in
27
- wicked-brain:init § "Resolving the brain config". In short: try
28
- `~/.wicked-brain/projects/{cwd_basename}/_meta/config.json` first, fall back
29
- to `~/.wicked-brain/_meta/config.json` (legacy flat), else trigger
30
- wicked-brain:init. Read the resolved file for brain path and server port.
31
-
32
- Do NOT read a bare relative `_meta/config.json` — the model will resolve it
33
- against the current working directory and brain files will end up in the
34
- project root.
29
+ Brain discovery + server lifecycle are handled by `wicked-brain-call`. Pass
30
+ `--brain <path>` to override the auto-detected brain, or set
31
+ `WICKED_BRAIN_PATH`. The CLI starts the server on first call (no manual
32
+ init required) and writes an audit record to `{brain}/calls/` per call.
35
33
 
36
34
  ## Parameters
37
35
 
@@ -48,9 +46,7 @@ project root.
48
46
  Start with the aggregate view so the user can see the landscape before the list:
49
47
 
50
48
  ```bash
51
- curl -s -X POST http://localhost:{port}/api \
52
- -H "Content-Type: application/json" \
53
- -d '{"action":"memory_stats"}'
49
+ npx wicked-brain-call memory_stats
54
50
  ```
55
51
 
56
52
  Render `total`, `by_type`, `by_tier`, `by_age` as a one-line header.
@@ -58,9 +54,7 @@ Render `total`, `by_type`, `by_tier`, `by_age` as a one-line header.
58
54
  ### Step 2: Fetch candidates
59
55
 
60
56
  ```bash
61
- curl -s -X POST http://localhost:{port}/api \
62
- -H "Content-Type: application/json" \
63
- -d '{"action":"recent_memories","params":{"days":{days},"limit":{limit * 3}}}'
57
+ npx wicked-brain-call recent_memories --param days={days} --param limit={limit * 3}
64
58
  ```
65
59
 
66
60
  Over-fetch by 3x so agent-side type/tier filtering still returns a useful page.
@@ -30,15 +30,10 @@ For the brain path default:
30
30
 
31
31
  ## Config
32
32
 
33
- Resolve the brain config via the shared resolution in
34
- wicked-brain:init § "Resolving the brain config". In short: try
35
- `~/.wicked-brain/projects/{cwd_basename}/_meta/config.json` first, fall back
36
- to `~/.wicked-brain/_meta/config.json` (legacy flat), else trigger
37
- wicked-brain:init. Read the resolved file for brain path and server port.
38
-
39
- Do NOT read a bare relative `_meta/config.json` — the model will resolve it
40
- against the current working directory and brain files will end up in the
41
- project root.
33
+ Brain discovery + server lifecycle are handled by `wicked-brain-call`. Pass
34
+ `--brain <path>` to override the auto-detected brain, or set
35
+ `WICKED_BRAIN_PATH`. The CLI starts the server on first call (no manual
36
+ init required) and writes an audit record to `{brain}/calls/` per call.
42
37
 
43
38
  ## Parameters
44
39
 
@@ -76,13 +71,15 @@ Build a list of accessible brains with their absolute paths.
76
71
 
77
72
  ### Step 2: Ensure server is running
78
73
 
74
+ `wicked-brain-call` auto-starts the server on first invocation. If you want
75
+ to be defensive, run a probe up front:
76
+
79
77
  ```bash
80
- curl -s -f -X POST http://localhost:{port}/api \
81
- -H "Content-Type: application/json" \
82
- -d '{"action":"health","params":{}}'
78
+ npx wicked-brain-call health
83
79
  ```
84
80
 
85
- If connection refused, trigger wicked-brain:server auto-start pattern.
81
+ Exit code 0 means the server is up. Exit code 2 indicates an infra failure
82
+ (server could not be reached or spawned).
86
83
 
87
84
  ### Step 3: Dispatch search subagents in parallel
88
85
 
@@ -104,9 +101,7 @@ Search for: "{query}"
104
101
  ## Step 1: Server search (FTS5)
105
102
 
106
103
  ```bash
107
- curl -s -X POST http://localhost:{port}/api \
108
- -H "Content-Type: application/json" \
109
- -d '{"action":"search","params":{"query":"{query}","limit":{limit}}}'
104
+ npx wicked-brain-call search --param query={query} --param limit={limit} --brain {brain_path}
110
105
  ```
111
106
 
112
107
  Parse the JSON response to get results.
@@ -136,9 +131,7 @@ After all subagents return:
136
131
  If the merged results have 0 matches across all brains, the query is a "search miss."
137
132
  Log it so the brain can learn:
138
133
  ```bash
139
- curl -s -X POST http://localhost:{port}/api \
140
- -H "Content-Type: application/json" \
141
- -d '{"action":"search_misses","params":{"query":"{original_query}","session_id":"{session_id}"}}'
134
+ npx wicked-brain-call search_misses --param query={original_query} --param session_id={session_id}
142
135
  ```
143
136
 
144
137
  Note: This logging happens server-side automatically when search returns 0 results.
@@ -1,21 +1,23 @@
1
1
  ---
2
2
  name: wicked-brain:server
3
3
  description: |
4
- Manages the wicked-brain background server. Auto-triggered when any brain skill
5
- gets a connection error. Starts the server, checks health, and reports status.
6
- Users should never need to invoke this directly.
4
+ Manages the wicked-brain background server. Most callers should use
5
+ `wicked-brain-call` directly it auto-starts the server. This skill is
6
+ for explicit lifecycle management: start, stop, status, or recovery from
7
+ a stuck process.
7
8
  ---
8
9
 
9
10
  # wicked-brain:server
10
11
 
11
- You manage the wicked-brain background server. This skill is triggered automatically
12
- when another brain skill cannot reach the server.
12
+ Manage the wicked-brain background server lifecycle explicitly. **Most skills
13
+ do not need this** — `npx wicked-brain-call <action>` will spawn the server
14
+ on first call (lock-guarded against races) and reuse it thereafter.
13
15
 
14
16
  ## Cross-Platform Notes
15
17
 
16
- Commands in this skill work on macOS, Linux, and Windows. When a command has
17
- platform differences, alternatives are shown. Your native tools (Read, Write,
18
- Grep, Glob) work everywhere prefer them over shell commands when possible.
18
+ This skill uses `npx wicked-brain-call` for all server interaction. The CLI
19
+ works on macOS, Linux, and Windows; it discovers the brain, auto-starts the
20
+ server, and writes a per-call audit record under `{brain}/calls/`.
19
21
 
20
22
  For the brain path default:
21
23
  - macOS/Linux: `~/.wicked-brain/projects/{cwd_basename}`
@@ -23,71 +25,47 @@ For the brain path default:
23
25
 
24
26
  ## Config
25
27
 
26
- Resolve the brain config via the shared resolution in
27
- wicked-brain:init § "Resolving the brain config". In short: try
28
- `~/.wicked-brain/projects/{cwd_basename}/_meta/config.json` first, fall back
29
- to `~/.wicked-brain/_meta/config.json` (legacy flat), else trigger
30
- wicked-brain:init. Read the resolved file to get `brain_path` and `server_port`.
28
+ Brain discovery + server lifecycle are handled by `wicked-brain-call`. Pass
29
+ `--brain <path>` to override the auto-detected brain, or set
30
+ `WICKED_BRAIN_PATH`. The CLI starts the server on first call (no manual
31
+ init required) and writes an audit record to `{brain}/calls/` per call.
31
32
 
32
- If the calling skill already passed `brain_path`, use that directly instead of
33
- re-resolving.
33
+ ## When to use
34
34
 
35
- Do NOT read a bare relative `_meta/config.json` — the model will resolve it
36
- against the current working directory and brain files will end up in the
37
- project root.
35
+ - Explicitly start, stop, or check the server (rare `wicked-brain-call`
36
+ handles this for you on every call)
37
+ - Recover from a stuck or stale server process
38
38
 
39
- ## When to use
39
+ ## Canonical commands
40
+
41
+ ```bash
42
+ npx wicked-brain-call --status [--brain {brain_path}]
43
+ npx wicked-brain-call --start [--brain {brain_path}]
44
+ npx wicked-brain-call --stop [--brain {brain_path}]
45
+ ```
46
+
47
+ `--status` reports whether a live server is answering on the configured port,
48
+ the bound port, and the brain id. `--start` spawns the server (idempotent —
49
+ no-op if already running). `--stop` signals the recorded PID and clears the
50
+ PID file.
51
+
52
+ If the user reports "the brain server seems wedged":
40
53
 
41
- - When a brain skill reports "connection refused" or similar error from curl
42
- - When asked to check or restart the brain server
43
-
44
- ## Server check and start
45
-
46
- 1. Read the file at `{brain_path}/_meta/config.json` to get the port and brain path.
47
-
48
- 2. Try a health check:
49
- ```bash
50
- curl -s -f -X POST http://localhost:{port}/api \
51
- -H "Content-Type: application/json" \
52
- -d '{"action":"health","params":{}}'
53
- ```
54
- A successful response returns `{"status":"ok"}`. If the request succeeds,
55
- the server is running — report the status and stop.
56
-
57
- 3. If connection refused:
58
- a. Read the file at `{brain_path}/_meta/server.pid` to get the PID.
59
-
60
- b. Check if the process is running:
61
- - macOS/Linux: `kill -0 {pid} 2>/dev/null`
62
- - Windows: `tasklist /FI "PID eq {pid}" 2>nul | findstr {pid}`
63
- - Or use Python: `python3 -c "import os; os.kill({pid}, 0)" 2>/dev/null || python -c "import os; os.kill({pid}, 0)"`
64
-
65
- c. If the process is dead or no PID file, start the server.
66
- Also pass `--source` if `source_path` is set in `{brain_path}/_meta/config.json`
67
- (this roots LSP language servers at the ingested project so symbol
68
- lookup and go-to-definition work correctly):
69
- ```bash
70
- npx wicked-brain-server --brain {brain_path} --port {port} [--source {source_path}] &
71
- ```
72
- On Windows (PowerShell):
73
- ```powershell
74
- Start-Process -FilePath "npx" -ArgumentList "wicked-brain-server", "--brain", "{brain_path}", "--port", "{port}" -NoNewWindow
75
- ```
76
-
77
- d. Wait 2 seconds, then retry the health check.
78
- e. If still failing, tell the user:
79
- "The brain server couldn't start automatically. Please run:
80
- `npx wicked-brain-server --brain {brain_path} --port {port}`"
54
+ 1. `npx wicked-brain-call --status --brain {brain_path}` to confirm.
55
+ 2. `npx wicked-brain-call --stop --brain {brain_path}` to terminate.
56
+ 3. `npx wicked-brain-call --start --brain {brain_path}` to relaunch.
57
+ 4. `npx wicked-brain-call health --brain {brain_path}` to verify.
81
58
 
82
59
  ## API pattern for other skills
83
60
 
84
- All skills that need the server should use this curl pattern:
61
+ All skills should call the server through `wicked-brain-call`:
85
62
 
86
63
  ```bash
87
- curl -s -X POST http://localhost:{port}/api \
88
- -H "Content-Type: application/json" \
89
- -d '{"action":"{action}","params":{params_json}}'
64
+ npx wicked-brain-call <action> # no params
65
+ npx wicked-brain-call <action> --param key=value [--param ...] # simple params
66
+ npx wicked-brain-call <action> '{"k":"v","nested":[1,2]}' # complex JSON
67
+ echo '{"k":"v"}' | npx wicked-brain-call <action> - # stdin (kubectl-style)
90
68
  ```
91
69
 
92
- `curl` works on macOS, Linux, and Windows 10+ (ships by default). If curl fails
93
- with connection refused, trigger this wicked-brain:server skill.
70
+ Exit codes: `0` = ok, `1` = API returned an error, `2` = infra failure
71
+ (server unreachable or could not be spawned).
@@ -24,15 +24,10 @@ For the brain path default:
24
24
 
25
25
  ## Config
26
26
 
27
- Resolve the brain config via the shared resolution in
28
- wicked-brain:init § "Resolving the brain config". In short: try
29
- `~/.wicked-brain/projects/{cwd_basename}/_meta/config.json` first, fall back
30
- to `~/.wicked-brain/_meta/config.json` (legacy flat), else trigger
31
- wicked-brain:init. Read the resolved file for brain path and server port.
32
-
33
- Do NOT read a bare relative `_meta/config.json` — the model will resolve it
34
- against the current working directory and brain files will end up in the
35
- project root.
27
+ Brain discovery + server lifecycle are handled by `wicked-brain-call`. Pass
28
+ `--brain <path>` to override the auto-detected brain, or set
29
+ `WICKED_BRAIN_PATH`. The CLI starts the server on first call (no manual
30
+ init required) and writes an audit record to `{brain}/calls/` per call.
36
31
 
37
32
  ## Parameters
38
33
 
@@ -46,14 +41,12 @@ Use the Read tool on `{brain_path}/brain.json` to get id, name, parents, links.
46
41
 
47
42
  ### Step 2: Get server stats
48
43
 
49
- Ensure the server is running (use the wicked-brain:server auto-start pattern):
44
+ `wicked-brain-call` auto-starts the server on first invocation:
50
45
  ```bash
51
- curl -s -X POST http://localhost:{port}/api \
52
- -H "Content-Type: application/json" \
53
- -d '{"action":"stats","params":{}}'
46
+ npx wicked-brain-call stats
54
47
  ```
55
48
 
56
- If connection refused, invoke the `wicked-brain:server` skill to start the server, then retry.
49
+ If the call exits with code 2 (infra failure), surface the error to the user.
57
50
 
58
51
  ### Step 3: Return at requested depth
59
52
 
@@ -77,17 +70,13 @@ Depth 0 plus:
77
70
  - Show topic distribution for the last 7 days by searching with a `since` filter.
78
71
  The `since` value must be ISO 8601 format (e.g., `2025-01-15T00:00:00Z`):
79
72
  ```bash
80
- curl -s -X POST http://localhost:{port}/api \
81
- -H "Content-Type: application/json" \
82
- -d '{"action":"search","params":{"query":"*","limit":100,"since":"{iso8601_7_days_ago}"}}'
73
+ npx wicked-brain-call search --param query=* --param limit=100 --param since={iso8601_7_days_ago}
83
74
  ```
84
75
  Group results by path prefix (e.g., `chunks/extracted/`, `wiki/`) to show recent activity distribution.
85
76
  - List the top 10 most common tags
86
77
  - Flag wiki staleness warnings by calling `verify_wiki`:
87
78
  ```bash
88
- curl -s -X POST http://localhost:{port}/api \
89
- -H "Content-Type: application/json" \
90
- -d '{"action":"verify_wiki","params":{}}'
79
+ npx wicked-brain-call verify_wiki
91
80
  ```
92
81
  Report one line per non-fresh bucket — only emit the lines where the count is > 0:
93
82
  ```
@@ -103,9 +92,7 @@ Depth 0 plus:
103
92
  Detect chunks that are frequently accessed but have never been compiled into wiki articles:
104
93
 
105
94
  ```bash
106
- curl -s -X POST http://localhost:{port}/api \
107
- -H "Content-Type: application/json" \
108
- -d '{"action":"candidates","params":{"mode":"promote","limit":50}}'
95
+ npx wicked-brain-call candidates --param mode=promote --param limit=50
109
96
  ```
110
97
 
111
98
  For each result where `access_count >= 5` and `session_diversity >= 3`, check whether any wiki article references it. Use the Grep tool on `{brain_path}/wiki/` searching for the chunk path string. If no wiki article references it, flag it as convergence debt:
@@ -120,9 +107,7 @@ If any convergence debt exists, suggest running `wicked-brain:compile` to promot
120
107
  Detect path prefixes that concentrate multiple contradictions:
121
108
 
122
109
  ```bash
123
- curl -s -X POST http://localhost:{port}/api \
124
- -H "Content-Type: application/json" \
125
- -d '{"action":"contradictions","params":{}}'
110
+ npx wicked-brain-call contradictions
126
111
  ```
127
112
 
128
113
  Group the returned contradiction links by path prefix: take the first two path segments of each linked path (e.g., a path `chunks/extracted/auth/session.md` yields prefix `chunks/extracted/auth/`). If any prefix has 2 or more contradiction links, flag it as a hotspot:
@@ -142,9 +127,7 @@ Check link integrity and surface knowledge gaps using two additional API calls.
142
127
 
143
128
  Get link health:
144
129
  ```bash
145
- curl -s -X POST http://localhost:{port}/api \
146
- -H "Content-Type: application/json" \
147
- -d '{"action":"link_health","params":{}}'
130
+ npx wicked-brain-call link_health
148
131
  ```
149
132
 
150
133
  Report:
@@ -154,9 +137,7 @@ Report:
154
137
 
155
138
  Get recent search misses:
156
139
  ```bash
157
- curl -s -X POST http://localhost:{port}/api \
158
- -H "Content-Type: application/json" \
159
- -d '{"action":"search_misses","params":{"limit":20}}'
140
+ npx wicked-brain-call search_misses --param limit=20
160
141
  ```
161
142
 
162
143
  Report the top recurring search miss queries to identify knowledge gaps. If a query appears multiple times, that topic is a strong candidate for ingestion or wiki article creation.
@@ -25,15 +25,10 @@ For the brain path default:
25
25
 
26
26
  ## Config
27
27
 
28
- Resolve the brain config via the shared resolution in
29
- wicked-brain:init § "Resolving the brain config". In short: try
30
- `~/.wicked-brain/projects/{cwd_basename}/_meta/config.json` first, fall back
31
- to `~/.wicked-brain/_meta/config.json` (legacy flat), else trigger
32
- wicked-brain:init. Read the resolved file for brain path and server port.
33
-
34
- Do NOT read a bare relative `_meta/config.json` — the model will resolve it
35
- against the current working directory and brain files will end up in the
36
- project root.
28
+ Brain discovery + server lifecycle are handled by `wicked-brain-call`. Pass
29
+ `--brain <path>` to override the auto-detected brain, or set
30
+ `WICKED_BRAIN_PATH`. The CLI starts the server on first call (no manual
31
+ init required) and writes an audit record to `{brain}/calls/` per call.
37
32
 
38
33
  ## Synonym File
39
34
 
@@ -99,17 +94,13 @@ for user review.
99
94
  **Step 1: Get recent search misses**
100
95
 
101
96
  ```bash
102
- curl -s -X POST http://localhost:{port}/api \
103
- -H "Content-Type: application/json" \
104
- -d '{"action":"search_misses","params":{"limit":50}}'
97
+ npx wicked-brain-call search_misses --param limit=50
105
98
  ```
106
99
 
107
100
  **Step 2: Get tag frequency**
108
101
 
109
102
  ```bash
110
- curl -s -X POST http://localhost:{port}/api \
111
- -H "Content-Type: application/json" \
112
- -d '{"action":"tag_frequency","params":{}}'
103
+ npx wicked-brain-call tag_frequency
113
104
  ```
114
105
 
115
106
  **Step 3: Cross-reference and suggest**
@@ -19,9 +19,15 @@ server for the current project's brain (or a named brain).
19
19
 
20
20
  ## Cross-Platform Notes
21
21
 
22
+ Server interaction goes through `npx wicked-brain-call`, which works on
23
+ macOS, Linux, and Windows; it discovers the brain, auto-starts the server,
24
+ and writes a per-call audit record under `{brain}/calls/`.
25
+
22
26
  The only platform-specific piece is the "open a URL in the default browser"
23
- command. Everything else is curl + Read/Write. Fallbacks are provided for all
24
- three major platforms.
27
+ command. The viewer is served at `GET /` on the same port the JSON API uses,
28
+ so the URL still needs the bound `server_port` — read it from the resolved
29
+ `{brain_path}/_meta/config.json` (the CLI writes the actual bound port back
30
+ to that file on startup).
25
31
 
26
32
  For the brain path default:
27
33
  - macOS/Linux: `~/.wicked-brain/projects/{project-name}`
@@ -54,17 +60,17 @@ Read the resolved config to get `server_port`.
54
60
 
55
61
  ### Step 2: Verify the server is running
56
62
 
63
+ `wicked-brain-call` auto-starts the server on first invocation, so a single
64
+ health probe is enough:
65
+
57
66
  ```bash
58
- curl -s -f -X POST http://localhost:{port}/api \
59
- -H "Content-Type: application/json" \
60
- -d '{"action":"health","params":{}}'
67
+ npx wicked-brain-call health --brain {brain_path}
61
68
  ```
62
69
 
63
- If the call fails with connection refused, invoke the wicked-brain:server
64
- auto-start pattern start the server against the resolved brain path and
65
- wait for health to return ok before continuing. Never open a browser at a
66
- URL that isn't serving yet; that produces a scary "can't connect" page the
67
- user then has to refresh.
70
+ Exit code 0 confirms the server is up. Exit code 2 (infra failure) means the
71
+ server could not be reached or spawned — surface the error and stop. Never
72
+ open a browser at a URL that isn't serving yet; that produces a scary "can't
73
+ connect" page the user then has to refresh.
68
74
 
69
75
  ### Step 3: Build the URL
70
76
 
@@ -166,9 +166,7 @@ run in order, and are idempotent (safe to re-run).
166
166
  After server restart, verify the server started successfully and migrations ran:
167
167
 
168
168
  ```bash
169
- curl -s -X POST http://localhost:{port}/api \
170
- -H "Content-Type: application/json" \
171
- -d '{"action":"health"}'
169
+ npx wicked-brain-call health --brain "{brain_dir}"
172
170
  ```
173
171
 
174
172
  If the health check fails, the migration may have errored. To diagnose: