OB1 Local HTTP
Problem
The canonical Open Brain stack assumes Claude Code can talk to a remote
Supabase MCP server. In environments that disable MCP entirely -- corporate
networks, air-gapped offices, restricted Claude Code builds -- that path is
not available. This skill replaces it with curl calls to a LAN-resident
Open Brain (see the local-brain-no-mcp recipe), keeping the same
capture-and-recall behavior without any MCP protocol involvement.
When to Use
- The user wants to remember, record, save, capture, or note something.
- The user wants to search, recall, retrieve, find, or look up something they previously captured.
- The user wants to see recent thoughts (e.g. "what have I been thinking about", "show me today's notes").
When Not to Use
- The environment has a working remote Open Brain MCP connection -- prefer the canonical MCP-based capture/search tools.
- The required environment variables
BRAIN_URLandBRAIN_ANON_KEYare not set on the dev host -- this skill cannot function without them; ask the user to followlocal-brain-no-mcp's install instructions first.
Required Environment
On each dev host that will use this skill, the user must export:
export BRAIN_URL="http://<brain-host>:8000" # Supabase Kong gateway
export BRAIN_ANON_KEY="eyJhbGciOi..." # written by setup.sh
If either is missing, stop and tell the user. Do not guess values.
Process
Capture
When the user says something like "remember X" or "save this thought":
curl -fsS -X POST "$BRAIN_URL/functions/v1/capture" \
-H "apikey: $BRAIN_ANON_KEY" \
-H "Authorization: Bearer $BRAIN_ANON_KEY" \
-H "Content-Type: application/json" \
-d '{"content":"<the thought>","metadata":{"source":"claude-code"}}'
Optional metadata fields: source, tags (array of strings),
thread_id, anything else useful. The server fingerprints content and
de-duplicates -- re-capturing identical text returns the existing id.
Search
When the user wants to recall:
curl -fsS -X POST "$BRAIN_URL/functions/v1/search" \
-H "apikey: $BRAIN_ANON_KEY" \
-H "Authorization: Bearer $BRAIN_ANON_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"<what to find>","match_count":10,"match_threshold":0.65}'
match_threshold defaults to 0.7. Lower it to 0.5-0.65 for broader recall;
raise to 0.8+ for precision. Cap match_count at 100.
Browse recent
When the user asks "what have I been thinking about" or wants a list rather than a similarity search:
curl -fsS "$BRAIN_URL/functions/v1/list?limit=20" \
-H "apikey: $BRAIN_ANON_KEY" \
-H "Authorization: Bearer $BRAIN_ANON_KEY"
Output
- For captures: confirm the id and the de-dupe fingerprint to the user in one sentence. Don't paraphrase the captured content back at them.
- For searches: surface the top results with similarity scores and created_at timestamps. Order by similarity descending. If no results cross the threshold, say so plainly and suggest lowering it.
- For browse: a compact bullet list with truncated content (first ~120 chars) and timestamps.
Failure Modes
- HTTP 502 with "unable to reach Ollama": the brain host's Ollama service
is down. Tell the user to
docker compose pson the brain host. - HTTP 502 with "did you 'ollama pull...'": the embedding model isn't
loaded. Tell the user to run the documented
ollama pullstep. - HTTP 502 with "embedding-dim mismatch": the brain's
EMBED_DIMenv was changed after the volume was initialized. Tell the user to read the "one-way door" section oflocal-brain-no-mcp's README. - HTTP 401 or 403:
BRAIN_ANON_KEYis wrong or expired. Tell the user to checksupabase-docker/docker/.envon the brain host. - Network timeout: the brain host is unreachable. Tell the user to ping the brain host from this dev host.
Notes
- Never log or echo
BRAIN_ANON_KEY-- it's a long-lived JWT. - This skill never installs or invokes any MCP server, by design.
- The brain host generates embeddings itself; this dev host doesn't need Ollama or any model files.