Skip to content

Commit fb44dbc

Browse files
alanshurafaclaudejustfinethanku
authored
[docs] Fix pre-existing markdownlint errors across 15 files (NateBJones-Projects#161)
* Fix pre-existing markdownlint errors across 15 files Add blank lines around headings (MD022), fenced code blocks (MD031), and between adjacent blockquotes (MD028). Fix broken link fragment (MD051) and remove extra blank line (MD012). No content changes. These errors were blocking CI on all open PRs since the lint check runs repo-wide. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * [docs] Preserve README links during markdown cleanup --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: Jonathan Edwards <justfinethanku@gmail.com>
1 parent f318edd commit fb44dbc

12 files changed

Lines changed: 56 additions & 1 deletion

File tree

docs/03-faq.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,7 @@ When you generate a new key on openrouter.ai/keys, the old key is revoked immedi
173173
**Places your OpenRouter key lives (update ALL of them):**
174174

175175
1. **Supabase Edge Function secrets** — This is the most common one to miss. Your MCP server reads the key from here at runtime.
176+
176177
```bash
177178
supabase secrets set OPENROUTER_API_KEY=sk-or-v1-your-new-key
178179
```

docs/05-tool-audit.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ Once you've identified bloat, here are the patterns for consolidating.
8181
Instead of 5 separate tools per table, expose one tool with an `action` parameter:
8282

8383
**Before (5 tools):**
84+
8485
```
8586
create_recipe
8687
get_recipe
@@ -90,6 +91,7 @@ list_recipes
9091
```
9192

9293
**After (1 tool):**
94+
9395
```
9496
manage_recipe
9597
action: "create" | "read" | "update" | "delete" | "list"
@@ -107,6 +109,7 @@ manage_recipe
107109
A gentler consolidation that preserves clear intent:
108110

109111
**Before (5 tools):**
112+
110113
```
111114
create_recipe
112115
get_recipe
@@ -116,6 +119,7 @@ search_recipes
116119
```
117120

118121
**After (2 tools):**
122+
119123
```
120124
save_recipe — creates or updates (upsert pattern)
121125
query_recipes — search, filter, get by ID, list all
@@ -132,6 +136,7 @@ This maps to how people actually talk to their AI: "save this" or "find that." T
132136
For tables with similar schemas (all your Open Brain extension tables follow the same `user_id` + timestamps + domain fields pattern), you can go further:
133137

134138
**Before (20+ tools across 4 extensions):**
139+
135140
```
136141
add_household_item, search_household_items, get_item_details,
137142
add_vendor, list_vendors,
@@ -140,6 +145,7 @@ search_maintenance_history, add_family_member, ...
140145
```
141146

142147
**After (2–3 tools):**
148+
143149
```
144150
save_entity
145151
entity_type: "household_item" | "vendor" | "maintenance_task" | ...
@@ -177,6 +183,7 @@ Merging tools reduces count within a server. Scoping splits tools across servers
177183
Most Open Brain users' workflows fall into three modes:
178184

179185
#### Capture server (write-heavy)
186+
180187
**When you use it:** Quick capture moments — jotting down a thought, logging a contact interaction, saving a recipe.
181188

182189
**Tools to include:**
@@ -189,6 +196,7 @@ Most Open Brain users' workflows fall into three modes:
189196
**Context cost:** ~5–8 tools, ~1,500–3,000 tokens.
190197

191198
#### Query server (read-heavy)
199+
192200
**When you use it:** Research, recall, weekly reviews, planning sessions — any time you're pulling information out rather than putting it in.
193201

194202
**Tools to include:**
@@ -202,6 +210,7 @@ Most Open Brain users' workflows fall into three modes:
202210
**Context cost:** ~8–12 tools, ~3,000–5,000 tokens.
203211

204212
#### Admin server (rarely used)
213+
205214
**When you use it:** Occasional maintenance — bulk updates, deletions, schema changes, data cleanup.
206215

207216
**Tools to include:**

integrations/slack-capture/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,8 @@ Replace the values with:
240240

241241
> SUPABASE_URL and SUPABASE_SERVICE_ROLE_KEY are automatically available inside Edge Functions — you don't need to set them.
242242
243+
<!-- -->
244+
243245
> **If you ever rotate your OpenRouter key:** you must re-run `supabase secrets set OPENROUTER_API_KEY=...` with the new key. This Edge Function reads the key from Supabase secrets at runtime — updating it on openrouter.ai alone won't propagate here. See the [FAQ on key rotation](../../docs/03-faq.md#api-key-rotation) for the full checklist.
244246
245247
### Deploy

recipes/grok-export-import/README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,24 +37,28 @@ FROM OPENROUTER
3737
- Find the Grok JSON file in the export
3838

3939
2. **Copy this recipe folder** and install dependencies:
40+
4041
```bash
4142
cd grok-export-import
4243
npm install
4344
```
4445

4546
3. **Create `.env`** with your credentials (see `.env.example`):
47+
4648
```env
4749
SUPABASE_URL=https://your-project.supabase.co
4850
SUPABASE_SERVICE_ROLE_KEY=your-service-role-key
4951
OPENROUTER_API_KEY=sk-or-v1-your-key
5052
```
5153

5254
4. **Preview what will be imported** (dry run):
55+
5356
```bash
5457
node import-grok.mjs /path/to/grok-export.json --dry-run
5558
```
5659

5760
5. **Run the import:**
61+
5862
```bash
5963
node import-grok.mjs /path/to/grok-export.json
6064
```

recipes/instagram-import/README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,30 +53,35 @@ FROM OPENROUTER
5353
- Look for the `your_instagram_activity/` folder
5454

5555
2. **Copy this recipe folder** and install dependencies:
56+
5657
```bash
5758
cd instagram-import
5859
npm install
5960
```
6061

6162
3. **Create `.env`** with your credentials (see `.env.example`):
63+
6264
```env
6365
SUPABASE_URL=https://your-project.supabase.co
6466
SUPABASE_SERVICE_ROLE_KEY=your-service-role-key
6567
OPENROUTER_API_KEY=sk-or-v1-your-key
6668
```
6769

6870
4. **Preview what will be imported** (dry run):
71+
6972
```bash
7073
node import-instagram.mjs /path/to/instagram-export --dry-run
7174
```
7275

7376
5. **Import specific types only** (optional):
77+
7478
```bash
7579
node import-instagram.mjs /path/to/instagram-export --types messages
7680
node import-instagram.mjs /path/to/instagram-export --types comments,posts
7781
```
7882

7983
6. **Run the full import:**
84+
8085
```bash
8186
node import-instagram.mjs /path/to/instagram-export
8287
```

recipes/journals-blogger-import/README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ FROM OPENROUTER
4848
- If you have multiple blogs, export each one
4949

5050
2. **Place all `.atom` files in a folder:**
51+
5152
```
5253
blogger-exports/
5354
├── my-tech-blog.atom
@@ -56,24 +57,28 @@ FROM OPENROUTER
5657
```
5758

5859
3. **Copy this recipe folder** and install dependencies:
60+
5961
```bash
6062
cd journals-blogger-import
6163
npm install
6264
```
6365

6466
4. **Create `.env`** with your credentials (see `.env.example`):
67+
6568
```env
6669
SUPABASE_URL=https://your-project.supabase.co
6770
SUPABASE_SERVICE_ROLE_KEY=your-service-role-key
6871
OPENROUTER_API_KEY=sk-or-v1-your-key
6972
```
7073

7174
5. **Preview what will be imported** (dry run):
75+
7276
```bash
7377
node import-blogger.mjs /path/to/blogger-exports --dry-run
7478
```
7579

7680
6. **Run the import:**
81+
7782
```bash
7883
node import-blogger.mjs /path/to/blogger-exports
7984
```

recipes/life-engine-video/README.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ An add-on for [Life Engine](../life-engine/) that replaces (or supplements) text
77
> [!IMPORTANT]
88
> **Built for [Claude Code](https://claude.ai/download), but not exclusive to it.** The Life Engine core requires Claude Code (it depends on `/loop` and skills), but this video add-on — the Remotion rendering, ElevenLabs TTS, and pipeline scripting — can be driven by any capable AI coding agent. ChatGPT handles Remotion well; other agents may work too. If you're adapting this to a different tool, the architecture and components in this guide give you everything you need.
99
10+
<!-- -->
11+
1012
> [!NOTE]
1113
> **Expect iteration.** Your first rendered video will have timing issues, subtitle drift, or a voiceover script that sounds stilted. That's normal. Each render gives you feedback — adjust the VO script guidelines, tweak the subtitle chunking, tune the ElevenLabs voice settings. The structured data flowing from your Open Brain means the *content* improves automatically as your knowledge base grows. The *presentation* improves as you and your agent dial in the rendering pipeline together.
1214
@@ -320,6 +322,7 @@ export const SubtitleBar: React.FC<{
320322
);
321323
};
322324
```
325+
323326
</details>
324327

325328
<details>
@@ -341,6 +344,7 @@ export const ProgressBar: React.FC = () => {
341344
);
342345
};
343346
```
347+
344348
</details>
345349

346350
<details>
@@ -390,6 +394,7 @@ export const TaskCard: React.FC<{
390394
);
391395
};
392396
```
397+
393398
</details>
394399

395400
<details>
@@ -435,6 +440,7 @@ export const SectionHeader: React.FC<{
435440
);
436441
};
437442
```
443+
438444
</details>
439445

440446
### 2.3 Scene Components
@@ -486,6 +492,7 @@ export const TitleScene: React.FC<{
486492
);
487493
};
488494
```
495+
489496
</details>
490497

491498
### 2.4 Main Composition
@@ -761,15 +768,19 @@ Place in `public/music.mp3`. The composition plays it at 12-15% volume under the
761768
## Going Further
762769

763770
### Dynamic Scene Assembly
771+
764772
Instead of fixed scene types, let Claude decide which scenes to include based on the data. If there are no habits, skip the habits scene. If there's a lot of OB1 context for a meeting, add an extra context scene. The composition adapts to the data.
765773

766774
### Weekly Recap Videos
775+
767776
Every Sunday, render a 60-second recap of the week: meetings attended, habits completed, mood trends, and highlights. Use chart/graph animations for habit streaks.
768777

769778
### Voice Briefings (Audio Only)
779+
770780
Skip the video render entirely and just send the TTS audio as a voice message via Telegram. Much faster (seconds instead of minutes), still personal. Good for quick habit reminders.
771781

772782
### Screen Recording Integration
783+
773784
For meeting prep, capture a screenshot of the client's website or relevant dashboard and animate it into the prep briefing video. Use `@remotion/gif` to embed Chrome GIF captures.
774785

775786
---

recipes/live-retrieval/live-retrieval.skill.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ Do NOT fire on:
6161
Append a brief note to your response. Maximum 3 lines. Do not interrupt flow.
6262

6363
Format:
64+
6465
```
6566
[OB1: Found 2 related thoughts]
6667
- "ACT NOW: [summary]" (captured March 14)

recipes/obsidian-vault-import/README.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,30 +63,38 @@ FILE LOCATION
6363
1. **Clone or copy this recipe folder** to your local machine.
6464

6565
2. **Install Python dependencies:**
66+
6667
```bash
6768
cd recipes/obsidian-vault-import
6869
pip install -r requirements.txt
6970
```
7071

7172
3. **Create your `.env` file** from the example:
73+
7274
```bash
7375
cp .env.example .env
7476
```
77+
7578
Edit `.env` and fill in your Supabase URL, API key, and OpenRouter API key. Find your Supabase credentials in the dashboard under Settings → API.
7679

7780
4. **Run a dry run first** to see what would be imported:
81+
7882
```bash
7983
python import-obsidian.py /path/to/your/vault --dry-run --verbose
8084
```
85+
8186
This scans your vault, shows how many notes pass filters, how many thoughts would be generated, and flags any notes containing potential secrets — without inserting anything.
8287

8388
5. **Start with a small batch** to verify everything works:
89+
8490
```bash
8591
python import-obsidian.py /path/to/your/vault --limit 20 --verbose
8692
```
93+
8794
The script runs a preflight check before any import — it verifies your Supabase connection and OpenRouter API key before spending time on chunking or embeddings.
8895

8996
6. **Run the full import** once you're satisfied:
97+
9098
```bash
9199
python import-obsidian.py /path/to/your/vault --verbose
92100
```
@@ -132,6 +140,7 @@ The script automatically skips notes that wouldn't make useful thoughts. Run wit
132140
**Date-filtered notes** — when using `--after YYYY-MM-DD`, notes not modified after that date are skipped.
133141

134142
**Additional folder exclusions** — use `--skip-folders` for vault-specific directories you don't want imported:
143+
135144
```bash
136145
# Skip framework reference materials, archive, and attachments
137146
python import-obsidian.py /path/to/vault --skip-folders "Archive,Files,patterns"

recipes/perplexity-conversation-import/README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,7 @@ For a typical export with 100 conversations and 50 memory entries, total cost is
222222
## Troubleshooting
223223

224224
**"No module named 'openpyxl'"**
225+
225226
```bash
226227
pip install openpyxl>=3.1
227228
```
@@ -230,16 +231,19 @@ pip install openpyxl>=3.1
230231
Your export may use different sheet names. Open the file in a spreadsheet app and check the sheet tabs. The script looks for exact names "Conversations" and "Memory".
231232

232233
**"OPENROUTER_API_KEY environment variable required"**
234+
233235
```bash
234236
export OPENROUTER_API_KEY="sk-or-v1-your-key"
235237
```
238+
236239
Or use `--model ollama` for local summarization (embeddings still need OpenRouter).
237240

238241
**Summarization returns empty thoughts**
239242
Some Q&A pairs are too simple (e.g., "what time is it?"). This is expected — the LLM is designed to be selective. Try `--verbose` to see what's being skipped.
240243

241244
**"Failed to generate embedding"**
242245
Check your OpenRouter API key has credits and access to `text-embedding-3-small`. Test with:
246+
243247
```bash
244248
curl https://openrouter.ai/api/v1/embeddings \
245249
-H "Authorization: Bearer $OPENROUTER_API_KEY" \

0 commit comments

Comments
 (0)