roam-research-mcp 1.0.0 → 1.4.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.
@@ -1,182 +1,535 @@
1
- !!!! IMPORTANT: Always consult this cheatsheet for correct Roam-flavored markdown syntax BEFORE making any Roam tool calls.
2
-
3
- # Roam Markdown Cheatsheet
4
-
5
- ⭐️📋 > > > START 📋⭐️
6
-
7
- ## Markdown Styles in Roam:
8
-
9
- - **Bold Text here**
10
- - **Italics Text here**
11
- - External Link: `[Link text](URL)`
12
- - Image Embed: `![Alt text](URL)`
13
- - ^^Highlighted Text here^^
14
- - Bullet points: - or \* followed by a space and the text
15
- - {{[[TODO]]}} todo text
16
- - {{[[DONE]]}} todo text
17
- - LaTeX: `$$E=mc^2$$` or `$$\sum_{i=1}^{n} i = \frac{n(n+1)}{2}$$`
18
- - Bullet points use dashes not asterisks.
19
-
20
- ## Roam-specific Markdown:
21
-
22
- - Dates are in ordinal format: `[[January 1st, 2025]]`
23
- - Block references: `((block-id))` This inserts a reference to the content of a specific block.
24
- - Page references: `[[Page name]]` This creates a link to another page within your Roam graph.
25
- - Link to blocks: `[Link Text](<((block-id))>)` This will link to the block.
26
- - Embed block in a block: `{{[[embed]]: ((block-id))}}`
27
- - To-do items: `{{[[TODO]]}} todo text` or `{{[[DONE]]}} todo text`
28
- - Syntax highlighting for fenced code blocks (add language next to backticks before fenced code block - all in one block) - Example:
29
- ```javascript
30
- const foo(bar) => {
31
- return bar;
32
- }
33
- ```
34
- - Tags:
35
- - one-word: `#word`
36
- - multiple words: `#[[two or more words]]`
37
- - hyphenated words: `#self-esteem`
38
-
39
- ## Roam Tables
40
-
41
- Roam tables are created by nesting blocks under a `{{[[table]]}}` parent block. The key to correct table rendering is to ensure proper indentation levels for headers and data cells. Each subsequent header or data cell within a row must be nested one level deeper than the previous one.
42
-
43
- - The `{{[[table]]}}` block acts as the container for the entire table.
44
- - The first header block should be at level 2 (one level deeper than `{{[[table]]}}`).
45
- - Subsequent header blocks must increase their level by one.
46
- - Each row starts at level 2.
47
- - The first data cell in a row is at level 3 (one level deeper than the row block).
48
- - Subsequent data cells within the same row must increase their level by one.
49
-
50
- Example of a 4x4 table structure:
1
+ # Roam Markdown Cheatsheet Generic Foundation v2.0.0
2
+
3
+ > ⚠️ **MODEL DIRECTIVE**: Always consult this cheatsheet BEFORE making any Roam tool calls. Syntax errors in Roam are unforgiving.
4
+
5
+ ---
6
+
7
+ ## Quick Reference: Core Syntax
8
+
9
+ ### Text Formatting
10
+ | Style | Syntax | Example |
11
+ |-------|--------|---------|
12
+ | Bold | `**text**` | **bold text** |
13
+ | Italic | `__text__` | __italic text__ |
14
+ | Highlight | `^^text^^` | ^^highlighted^^ |
15
+ | Strikethrough | `~~text~~` | ~~struck~~ |
16
+ | Inline code | `` `code` `` | `code` |
17
+ | LaTeX | `$$E=mc^2$$` | rendered math |
18
+
19
+ ### Links & References
20
+ | Type | Syntax | Notes |
21
+ |------|--------|-------|
22
+ | Page reference | `[[Page Name]]` | Creates/links to page |
23
+ | Block reference | `((block-uid))` | Embeds block content inline |
24
+ | Block embed | `{{[[embed]]: ((block-uid))}}` | Full block embed with children |
25
+ | External link | `[text](URL)` | Standard markdown |
26
+ | Aliased page ref | `[display text]([[Actual Page]])` | Shows custom text, links to page |
27
+ | Aliased block ref | `[display text](<((block-uid))>)` | Links to specific block |
28
+ | Image embed | `![alt text](URL)` | Inline image |
29
+
30
+ ### Tags & Hashtags
31
+ | Type | Syntax | When to Use |
32
+ |------|--------|-------------|
33
+ | Single word | `#tag` | Simple categorization |
34
+ | Multi-word | `#[[multiple words]]` | Phrases, compound concepts |
35
+ | Hyphenated | `#self-esteem` | Naturally hyphenated terms |
36
+
37
+ ⚠️ **CRITICAL**: Never concatenate multi-word tags. `#knowledgemanagement` `#[[knowledge management]]`
38
+
39
+ ### Dates
40
+ - **Always use ordinal format**: `[[January 1st, 2025]]`, `[[December 23rd, 2024]]`
41
+ - Ordinals: 1st, 2nd, 3rd, 4th–20th, 21st, 22nd, 23rd, 24th–30th, 31st
42
+
43
+ ### Task Management
44
+ | Status | Syntax |
45
+ |--------|--------|
46
+ | Todo | `{{[[TODO]]}} task description` |
47
+ | Done | `{{[[DONE]]}} task description` |
48
+
49
+ ### Attributes (Properties)
50
+ ```
51
+ Type:: Book
52
+ Author:: [[Person Name]]
53
+ Rating:: 4/5
54
+ Source:: https://example.com
55
+ ```
56
+
57
+ **Purpose**: Attributes create structured metadata that is **queryable across your entire graph**. The attribute name becomes a page reference, so only use `::` when the attribute is a reusable property that applies to multiple pages or concepts.
58
+
59
+ **When to USE attributes:**
60
+ | Attribute | Why It's Good |
61
+ |-----------|---------------|
62
+ | `Type:: Book` | Reusable across all media you consume |
63
+ | `Author:: [[Person]]` | Links to author page, queryable |
64
+ | `Status:: In Progress` | Standard project states, queryable |
65
+ | `Source:: URL` | Consistent sourcing across notes |
66
+ | `Date:: [[January 1st, 2025]]` | Enables date-based queries |
67
+
68
+ **When NOT to use attributes:**
69
+ | ❌ Wrong | ✅ Use Instead | Why |
70
+ |----------|----------------|-----|
71
+ | `Step 1:: Do this thing` | `**Step 1:** Do this thing` | Step numbers are page-specific, not queryable concepts |
72
+ | `Note:: Some observation` | Just write the text, or use `#note` | One-off labels don't need attribute syntax |
73
+ | `Summary:: The main point` | `**Summary:** The main point` | Section headers are formatting, not metadata |
74
+ | `Definition:: Some text` | `Term:: Definition` | Only use for actual definitions you want to query |
75
+ | `Implementation Tier 3 (Societal Restructuring):: Some text` | `** Implementation Tier 3 (Societal Restructuring)**: Some text` | Label is specific to current concept |
76
+
77
+ ⚠️ **The Test**: Ask yourself: "Will I ever query for all blocks with this attribute across my graph?" If no, use **bold formatting** (`**Label:**`) instead of `::` syntax.
78
+
79
+ NOTE: Never combine bold markdown formatting with `::`. Roam formats attributes in bold by default. ✅ `<attribute>::` ❌ `**<attribute>**::`
80
+
81
+ ---
82
+
83
+ ## Block Structures
84
+
85
+ ### Bullet Points
86
+ - Use `-` (dash) followed by space
87
+ - Nested bullets: indent with tab or spaces
88
+ ```
89
+ - Parent item
90
+ - Child item
91
+ - Grandchild item
92
+ ```
93
+
94
+ ### Code Blocks
95
+ ````
96
+ ```javascript
97
+ const example = () => {
98
+ return "syntax highlighted";
99
+ }
100
+ ```
101
+ ````
102
+
103
+ ### Queries
104
+ ```
105
+ {{[[query]]: {and: [[tag1]] [[tag2]]}}}
106
+ {{[[query]]: {or: [[optionA]] [[optionB]]}}}
107
+ {{[[query]]: {not: [[exclude-this]]}}}
108
+ {{[[query]]: {between: [[January 1st, 2025]] [[January 31st, 2025]]}}}
109
+ ```
110
+
111
+ ### Calculator
112
+ ```
113
+ {{[[calc]]: 2 + 2}}
114
+ {{[[calc]]: 100 * 0.15}}
115
+ ```
116
+
117
+ ---
118
+
119
+ ## Complex Structures
120
+
121
+ ### Tables
122
+ Tables use nested indentation. Each column header/cell nests ONE LEVEL DEEPER than previous.
51
123
 
52
124
  ```
53
125
  {{[[table]]}}
54
126
  - Header 1
55
127
  - Header 2
56
128
  - Header 3
57
- - Header 4
58
- - Row 1
59
- - Data 1.1
60
- - Data 1.2
61
- - Data 1.3
62
- - Data 1.4
63
- - Row 2
64
- - Data 2.1
65
- - Data 2.2
66
- - Data 2.3
67
- - Data 2.4
68
- - Row 3
69
- - Data 3.1
70
- - Data 3.2
71
- - Data 3.3
72
- - Data 3.4
73
- - Row 4
74
- - Data 4.1
75
- - Data 4.2
76
- - Data 4.3
77
- - Data 4.4
78
- ```
79
-
80
- ## Roam Mermaid
81
-
82
- This markdown structure represents a Roam Research Mermaid diagram. It begins with a `{{[[mermaid]]}}` block, which serves as the primary container for the diagram definition. Nested underneath this block, using bullet points, is the actual Mermaid syntax. Each bullet point corresponds to a line of the Mermaid graph definition, allowing Roam to render a visual diagram based on the provided code. For example, `graph TD` specifies a top-down directed graph, and subsequent bullet points define nodes and their connections.
83
-
84
- ```
85
- - {{[[mermaid]]}}
129
+ - Row 1 Label
130
+ - Cell 1.1
131
+ - Cell 1.2
132
+ - Cell 1.3
133
+ - Row 2 Label
134
+ - Cell 2.1
135
+ - Cell 2.2
136
+ - Cell 2.3
137
+ ```
138
+
139
+ **Rules:**
140
+ - `{{[[table]]}}` is level 1
141
+ - First header/row-label at level 2
142
+ - Each subsequent column nests +1 level deeper
143
+ - Keep tables ≤5 columns for readability
144
+
145
+ ### Kanban Boards
146
+ ```
147
+ {{[[kanban]]}}
148
+ - Column 1 Title
149
+ - Card 1 content
150
+ - Card 2 content
151
+ - Column 2 Title
152
+ - Card 3 content
153
+ ```
154
+
155
+ ### Mermaid Diagrams
156
+ ```
157
+ {{[[mermaid]]}}
86
158
  - graph TD
87
- - A[Start] --> B{Decision Point}
88
- - B -->|Yes| C[Process A]
89
- - B -->|No| D[Process B]
90
- - C --> E[Merge Results]
91
- - D --> E
92
- - E --> F[End]
93
- ```
94
-
95
- ## Roam Kanban Boards
96
-
97
- The provided markdown structure represents a Roam Research Kanban board. It starts with a `{{[[kanban]]}}` block, under which nested bullet points define the Kanban cards. Each top-level bullet point directly under `{{[[kanban]]}}` serves as a card title, and any further nested bullet points under a card title act as details or sub-items for that specific card.
98
-
99
- ```
100
- - {{[[kanban]]}}
101
- - card title 1
102
- - bullet point 1.1
103
- - bullet point 1.2
104
- - card title 2
105
- - bullet point 2.1
106
- - bullet point 2.2
107
- ```
108
-
109
- ---
110
-
111
- ## Roam Hiccup
112
-
113
- This markdown structure allows embedding custom HTML or other content using Hiccup syntax. The `:hiccup` keyword is followed by a Clojure-like vector defining the HTML elements and their attributes in one block. This provides a powerful way to inject dynamic or custom components into your Roam graph. Example: `:hiccup [:iframe {:width "600" :height "400" :src "https://www.example.com"}]`
114
-
115
- ## Specific notes and preferences concerning my Roam Research graph
116
- ### When creating new pages
117
-
118
- - After creating a new page, ensure you add a new block on the daily page that references it if one doesn't already exist: `Created page: [[…]]`
119
-
120
- ### What To Tag
121
-
122
- - Always think in terms of Future Me: How will I find this gem of information in this block in the future? What about this core idea might I be looking for? Aim for high relevance and helpfulness.
123
- - My notes in Roam are interconnected via wrapped terms/expressions [[…]] and hashtags (#…). The general salience guidelines are as follows:
124
-
125
- - What greater domain would this core idea be best categorization?
126
- - If block is parent of children blocks, can a word/phrase in the parent be wrapped in brackets.
127
- - If not, could a hashtag be appended to the block? (This is like a "please see more"-on-this-subject categorization).
128
- - Wrap any proper names—no titles—(Dr. [[Werner Erhard]]), organizations, abbreviations e.g. `[NASA]([[National Aeronautics and Space Administration (NASA)]])`
129
- - Any synonyms or multi-worded phrases of already established categories/pages, e.g. `[frameworks for making quality decisions]([[decision-making frameworks]])`
130
-
131
- #### Advanced tagging methodology combining [[zettelkasten]] principles with serendipity engineering for maximum intellectual discovery potential. #[[knowledge management]] #[[tagging methodology]]
132
-
133
- - # Core Philosophy
134
- - Tag for **intellectual collision** and **future conversation**, not just categorization. Every tag should maximize the potential for unexpected discoveries and cross-domain insights.
135
- - Traditional academic categorization creates silos; serendipity-engineered tagging creates **conceptual magnets** that attract surprising connections.
136
- - ## Zettelkasten-Informed Principles
137
- - **Atomic Thought Units**: Each tagged concept should function as a standalone intellectual object capable of connecting to ANY other domain
138
- - **Conversation-Driven Linking**: Tag by the intellectual dialogues and debates a concept could inform, not just its subject matter
139
- - **Temporal Intellectual Journey**: Tag for different phases of understanding - beginner discoveries, expert refinements, teaching moments
140
- - **Intellectual Genealogy**: Create concept lineages that trace how ideas evolve and connect across domains
141
- - ## Serendipity Engineering Techniques
142
- - **Conceptual Collision Matrix**: Force unlikely intellectual meetings by tagging across disparate domains
143
- - Example: #[[parenting techniques]] + [[cognitive engineering]] = developing children's meta-cognitive awareness
144
- - Example: #[[cooking methods]] + [[cultural rotation]] = how different cultures balance flavors balancing competing AI instructions
145
- - **Anti-Obvious Tagging**: Deliberately tag against natural categorization to maximize surprise
146
- - Tag by **structural similarities** rather than surface content: #[[has feedback loops]], #[[requires calibration]], #[[exhibits emergence]]
147
- - Connect concepts through **metaphorical bridges**: meditation techniques + bias detection (both about noticing the unnoticed)
148
- - **Question Cascade Strategy**: Tag by what questions a concept could answer across unexpected domains
149
- - Instead of "this is about X," ask "what problems could this solve that I haven't thought of yet?"
150
- - Examples: #[[how do experts prevent tunnel vision?]], #[[what creates cognitive flexibility?]], #[[how do systems self-correct?]]
151
- - **Future Collision Potential**: Tag with temporal discovery triggers
152
- - [[will be relevant in 5 years]], #[[connects to unborn projects]], #[[solves problems I don't know I have yet]]
153
- - ## Practical Implementation
154
- - **The Serendipity Test**: Before tagging, ask "Could this concept surprise me by connecting to something completely unrelated?"
155
- - **Cross-Domain Bridge Tags**: Use structural rather than content-based categorization
156
- - [[flow dynamics]] - connects fluid mechanics, music, conversation, AI prompt sequences
157
- - [[calibration processes]] - bridges instrument tuning, relationships, AI parameters, personal habits
158
- - [[perspective switching]] - connects photography, negotiation, cultural analysis, prompt engineering
159
- - **Problem-Solution Pairing**: Tag by the problems solved rather than methods used
160
- - [[breaking cognitive constraints]], #[[expanding solution spaces]], #[[preventing expert blindness]]
161
- - **Intellectual State Triggers**: Tag for when you'd actually search based on mental/emotional context
162
- - [[feeling stuck in patterns]], #[[needing fresh perspective]], #[[frustrated with conventional approaches]]
163
- - ## Tag Maintenance Strategy
164
- - **Regular Collision Audits**: Periodically review tags to identify missed connection opportunities
165
- - **Surprise Discovery Log**: Track when unexpected tag connections lead to insights, then engineer more of those patterns
166
- - **Question Evolution**: Update question-based tags as your intellectual interests and problems evolve
167
- - **Cross-Reference Integration**: Ensure new tagging approach complements existing page reference `[[…]]` and hashtag `#[[…]]` conventions
168
-
169
- ### How to Tag (nuances)
170
-
171
- - Consider that when linking a parent block, all children blocks will also accompany future search results. Linking a childblock will only link the child block, not siblings.
172
- - The convention for tags is lower case unless proper nouns. When tagging might affect the capitalization within a sentence, use aliases. e.g. `[Cognitive biases]([[cognitive biases]]) of the person are listed…"
173
- - Can longer phrases and expressions be aliased to existing notes? `How one can leverage [[cognitive dissonance]] to [hypnotically influence others using language]([[hypnotic language techniques]])`
174
- - Reformat quotes in this format structure: `<quote> —[[<Quoted Person>]] #quote <hashtags>` with 2-3 additional relevant hashtag links
175
- - Anything that needs follow-up, further research, preface with `{{[[TODO]]}}`
176
- - Scheduled review: Tag future dates in ordinal format so that it can come up for review when relevant, e.g. `[[For review]]: [[August 12th, 2026]]` Optionally, prepend with label ("Deadline", "For review", "Approved", "Pending", "Deferred", "Postponed until"). Place on parent block if relevant (if children blocks are related).
177
-
178
- ### Constraints
179
-
180
- - Don't overtag.
181
-
182
- ⭐️📋 END (Cheat Sheet LOADED) < < < 📋⭐️
159
+ - A[Start] --> B{Decision}
160
+ - B -->|Yes| C[Action]
161
+ - B -->|No| D[Alternative]
162
+ ```
163
+
164
+ ### Hiccup (Custom HTML)
165
+ `:hiccup [:iframe {:width "600" :height "400" :src "https://example.com"}]`
166
+
167
+ `:hiccup [:div {:style {:color "red"}} "Custom styled content"]`
168
+
169
+ ---
170
+
171
+ ## Anti-Patterns — DON'T DO THIS
172
+
173
+ | Wrong | ✅ Correct | Why |
174
+ |----------|-----------|-----|
175
+ | `Step 1:: Do this` | `**Step 1:** Do this` | `::` creates queryable attributes; use bold for page-specific labels |
176
+ | `#multiplewords` | `#[[multiple words]]` | Concatenated tags create dead references |
177
+ | `[[january 1, 2025]]` | `[[January 1st, 2025]]` | Must use ordinal format with proper capitalization |
178
+ | `[text](((block-uid)))` | `[text](<((block-uid))>)` | Block ref links need angle bracket wrapper |
179
+ | `{{embed: ((uid))}}` | `{{[[embed]]: ((uid))}}` | Embed requires double brackets around keyword |
180
+ | Deeply nested tables (6+ cols) | Max 4-5 columns | Becomes unreadable/unmanageable |
181
+ | `- *bullet` | `- bullet` | Use dash, not asterisk for bullets |
182
+ | `[[TODO]] task` | `{{[[TODO]]}} task` | TODO needs double curly braces |
183
+
184
+ ---
185
+
186
+ ## Tool Selection Decision Tree
187
+
188
+ ```
189
+ CREATING CONTENT IN ROAM:
190
+
191
+ ┌─ Is this a NEW standalone page with structure?
192
+ │ └─ YES roam_create_page (with content array)
193
+
194
+ ├─ Adding content to EXISTING page/block?
195
+ │ ├─ Simple outline structure roam_create_outline
196
+ │ │ (provide page_title_uid and/or block_text_uid)
197
+ │ │
198
+ │ └─ Complex/nested markdown roam_import_markdown
199
+ (for deeply nested content, tables, etc.)
200
+
201
+ ├─ Need to CREATE, UPDATE, MOVE, or DELETE individual blocks?
202
+ │ └─ roam_process_batch_actions
203
+ │ (fine-grained control, temporary UIDs for parent refs)
204
+
205
+ ├─ Adding a memory/note to remember?
206
+ │ └─ roam_remember (auto-tags with MEMORIES_TAG)
207
+
208
+ ├─ Adding TODO items to today?
209
+ │ └─ roam_add_todo (creates individual TODO blocks)
210
+
211
+ └─ SEARCHING/READING:
212
+ ├─ Find by tag roam_search_for_tag
213
+ ├─ Find by text → roam_search_by_text
214
+ ├─ Find by date range roam_search_by_date
215
+ ├─ Find by status roam_search_by_status
216
+ ├─ Get page contentroam_fetch_page_by_title
217
+ ├─ Get block + children roam_fetch_block_with_children
218
+ ├─ Recall memories roam_recall
219
+ └─ Complex queries roam_datomic_query
220
+ ```
221
+
222
+ ---
223
+
224
+ ## API Efficiency Guidelines (Rate Limit Avoidance)
225
+
226
+ The Roam API has rate limits. Follow these guidelines to minimize API calls:
227
+
228
+ ### Tool Efficiency Ranking (Best to Worst)
229
+ 1. **`roam_process_batch_actions`** - Single API call for multiple operations (MOST EFFICIENT)
230
+ 2. **`roam_create_page`** - Batches content with page creation
231
+ 3. **`roam_create_outline` / `roam_import_markdown`** - Include verification queries (use for smaller operations)
232
+ 4. **Multiple sequential tool calls** - Each call = multiple API requests (AVOID)
233
+
234
+ ### Best Practices for Intensive Operations
235
+
236
+ #### When Updating/Revising a Page:
237
+ 1. Fetch the page content ONCE at the start
238
+ 2. Plan ALL changes needed (creates, updates, deletes)
239
+ 3. Execute ALL changes in a SINGLE `roam_process_batch_actions` call
240
+ 4. Do NOT fetch-modify-fetch-modify in a loop
241
+
242
+ #### When Creating Large Content:
243
+ - For 10+ blocks: Use `roam_process_batch_actions` with nested structure
244
+ - For simple outlines (<10 blocks): `roam_create_outline` is fine
245
+
246
+ #### UID Caching:
247
+ - Save UIDs from previous operations - don't re-query for them
248
+ - Use `page_uid` instead of `page_title` when available (avoids lookup query)
249
+ - Use `block_uid` instead of `block_text_uid` when you have it
250
+
251
+ #### UID Placeholders for Nested Blocks:
252
+ When using `roam_process_batch_actions` to create nested blocks, use **placeholder tokens** instead of generating UIDs yourself. The server generates proper random UIDs and returns a mapping.
253
+
254
+ **Syntax:** `{{uid:name}}` where `name` is any identifier you choose.
255
+
256
+ **Example:**
257
+ ```json
258
+ [
259
+ { "action": "create-block", "uid": "{{uid:parent}}", "string": "Parent Block", "location": { "parent-uid": "pageUid123", "order": 0 } },
260
+ { "action": "create-block", "string": "Child Block", "location": { "parent-uid": "{{uid:parent}}", "order": 0 } }
261
+ ]
262
+ ```
263
+
264
+ **Response includes UID mapping:**
265
+ ```json
266
+ {
267
+ "success": true,
268
+ "uid_map": {
269
+ "parent": "Xk7mN2pQ9"
270
+ }
271
+ }
272
+ ```
273
+
274
+ **Why placeholders?** LLMs are not reliable random generators. The server uses cryptographically secure randomness to generate proper 9-character Roam UIDs.
275
+
276
+ ### Example: Efficient Page Revision
277
+
278
+ **Instead of:**
279
+ ```
280
+ 1. roam_fetch_page_by_title → get content
281
+ 2. roam_create_outline → add section 1
282
+ 3. roam_create_outline → add section 2
283
+ 4. roam_import_markdown → add more content
284
+ ```
285
+
286
+ **Do this:**
287
+ ```
288
+ 1. roam_fetch_page_by_title → get page UID and content
289
+ 2. roam_process_batch_actions → ALL creates/updates in one call
290
+ ```
291
+
292
+ ---
293
+
294
+ ## Structural Defaults
295
+
296
+ When unsure how to structure output:
297
+
298
+ 1. **Hierarchy depth**: Prefer 2-4 levels; rarely exceed 5
299
+ 2. **Block length**: Keep blocks atomic — one idea per block
300
+ 3. **Page refs vs hashtags**:
301
+ - `[[Page]]` for concepts you'll expand into full pages
302
+ - `#tag` for categorization/filtering
303
+ 4. **When to embed vs reference**:
304
+ - `((uid))` — inline reference (shows content)
305
+ - `{{[[embed]]: ((uid))}}` — full block with children
306
+ - `[text](<((uid))>)` — clickable link only
307
+
308
+ ---
309
+ ## Visual Separation — Hierarchy First, Separators Never
310
+
311
+ Empty blocks and decorative dividers create clutter. Roam's outliner structure provides all the visual separation you need.
312
+
313
+ | ❌ Avoid | ✅ Instead |
314
+ |----------|-----------|
315
+ | Blank blocks | Let hierarchy create space — child blocks are visually indented |
316
+ | `---` dividers | Use a **heading block** to signal section breaks |
317
+ | Decorative lines `───` | Nest content under a parent block as a structural container |
318
+
319
+ **Principle**: If you feel the urge to add visual breathing room, you probably need *better structure*, not more blocks. Promote a block to a heading, or reorganize into parent/child relationships.
320
+
321
+ **The test**: If you'd delete it during cleanup, don't create it.
322
+
323
+ ---
324
+
325
+ ## Output Format Conventions
326
+
327
+ ### Quotes
328
+ ```
329
+ <quote text> —[[Author Name]] #quote #[[relevant topic]]
330
+ ```
331
+
332
+ ### Definitions
333
+ ```
334
+ Term:: Definition text #definition #[[domain]]
335
+ ```
336
+
337
+ ### Questions for Future
338
+ ```
339
+ {{[[TODO]]}} Research: <question> #[[open questions]]
340
+ ```
341
+
342
+ ---
343
+
344
+ *End of Generic Foundation — Personalization section follows during user setup.*
345
+ # Roam Preferences — Personalization Layer
346
+
347
+ > This section contains YOUR specific conventions, tagging philosophy, and graph-specific rules. Customize to match your workflow.
348
+
349
+ ---
350
+
351
+ ## Graph-Level Behaviors
352
+
353
+ ### On Creating New Pages
354
+ <!-- CUSTOMIZE: What should happen when a new page is created? -->
355
+ - After creating a new page, add a reference block on today's daily page: `Created page: [[New Page Name]]`
356
+ - <!-- Add any naming conventions, required metadata, etc. -->
357
+
358
+ ### On Adding Content
359
+ <!-- CUSTOMIZE: Any rules about where/how content gets added? -->
360
+ - Default location for quick captures: Daily page
361
+ - Long-form content: Create dedicated page, link from daily page
362
+ - <!-- Your preferences here -->
363
+
364
+ ---
365
+
366
+ ## Tagging Philosophy
367
+
368
+ ### Core Principle
369
+ > Tag for **intellectual collision** and **future discovery**, not just categorization. Every tag should maximize potential for unexpected connections.
370
+
371
+ ### The Serendipity Test
372
+ Before tagging, ask: *"Could this concept surprise me by connecting to something completely unrelated?"*
373
+
374
+ ### What To Tag — Decision Framework
375
+
376
+ ```
377
+ ASK YOURSELF:
378
+ ┌─ How will Future Me find this?
379
+ │ └─ Tag by retrieval context, not just content
380
+
381
+ ├─ What domain does this belong to?
382
+ │ └─ Use broad category tags: #[[knowledge management]], #[[decision-making]]
383
+
384
+ ├─ Is this a proper noun?
385
+ │ └─ YES → Wrap name (no titles): [[Werner Erhard]], [[NASA]]
386
+ │ └─ For abbreviations: [NASA]([[National Aeronautics and Space Administration (NASA)]])
387
+
388
+ ├─ Could this alias to existing page?
389
+ │ └─ YES → [displayed phrase]([[existing page name]])
390
+ │ └─ Example: [frameworks for decisions]([[decision-making frameworks]])
391
+
392
+ └─ Parent block with children?
393
+ └─ Tag parent when category applies to all children
394
+ └─ Tag individual children for specific categorization
395
+ ```
396
+
397
+ ### Tag Type Selection
398
+
399
+ | Use This | When |
400
+ |----------|------|
401
+ | `[[Page Reference]]` | Concept deserves its own page, will be expanded |
402
+ | `#[[hashtag]]` | Categorization, filtering, won't be a standalone page |
403
+ | `#single-word` | Simple, unambiguous category |
404
+ | Attribute `Type::` | Structured metadata for queries |
405
+
406
+ ### Structural Tagging (Beyond Content)
407
+
408
+ Tag by **patterns and mechanisms**, not just subjects:
409
+
410
+ | Structural Tag | Connects |
411
+ |----------------|----------|
412
+ | `#[[has feedback loops]]` | Systems, habits, markets, conversations |
413
+ | `#[[requires calibration]]` | Instruments, relationships, AI prompts |
414
+ | `#[[exhibits emergence]]` | Complexity, culture, creativity |
415
+ | `#[[perspective switching]]` | Photography, negotiation, analysis |
416
+ | `#[[flow dynamics]]` | Fluids, music, conversation, sequences |
417
+
418
+ ### Problem-Oriented Tagging
419
+
420
+ Tag by problems solved, not methods used:
421
+
422
+ - `#[[breaking cognitive constraints]]`
423
+ - `#[[expanding solution spaces]]`
424
+ - `#[[preventing expert blindness]]`
425
+
426
+ ### Temporal & State-Based Tags
427
+
428
+ | Tag Type | Examples |
429
+ |----------|----------|
430
+ | Future relevance | `#[[will be relevant in 5 years]]`, `#[[connects to unborn projects]]` |
431
+ | Mental state triggers | `#[[feeling stuck in patterns]]`, `#[[needing fresh perspective]]` |
432
+ | Review scheduling | `[[For review]]: [[August 12th, 2026]]` |
433
+
434
+ ---
435
+
436
+ ## Formatting Conventions
437
+
438
+ ### Quotes
439
+ ```
440
+ <quote text> —[[Author Name]] #quote #[[topic1]] #[[topic2]]
441
+ ```
442
+ Always include 2-3 relevant hashtags after quotes.
443
+
444
+ ### TODOs and Follow-ups
445
+ ```
446
+ {{[[TODO]]}} <action needed>
447
+ {{[[TODO]]}} #researchThis : <topic to investigate>
448
+ ```
449
+
450
+ ### Scheduled Reviews
451
+ ```
452
+ [[For review]]: [[Date in ordinal format]]
453
+ ```
454
+ Optional labels: "Deadline", "Approved", "Pending", "Deferred", "Postponed until"
455
+
456
+ ### Aliasing for Case Sensitivity
457
+ When a tag would awkwardly affect sentence capitalization:
458
+ ```
459
+ [Cognitive biases]([[cognitive biases]]) affect decision-making...
460
+ ```
461
+
462
+ ### Definitions (OVERRIDE)
463
+ ```
464
+ #def [[<term>]] : <definition>
465
+ ```
466
+
467
+ ---
468
+
469
+ ## Constraints & Guardrails
470
+
471
+ ### DON'T
472
+ - **Overtag** — Quality over quantity; each tag should earn its place
473
+ - **Tag obvious/redundant** — If parent block is tagged, children inherit context
474
+ - **Use inconsistent capitalization** — Tags are lowercase unless proper nouns
475
+ - **Create orphan tags** — Check if existing page/tag serves the purpose
476
+ - **Bold Attributes** - ❌ `**Attribute**::`, ✅ `Attribute::` (Roam auto-formats)
477
+
478
+ ### DO
479
+ - **Think retrieval-first** — How will you search for this later?
480
+ - **Cross-pollinate domains** — Force unlikely intellectual meetings
481
+ - **Update aging tags** — As interests evolve, so should tag vocabulary
482
+ - **Track surprise discoveries** — When unexpected connections yield insights, engineer more of those patterns
483
+
484
+ ---
485
+
486
+ ## Custom Rules
487
+
488
+ <!--
489
+ CUSTOMIZE THIS SECTION with your specific conventions:
490
+ - Naming patterns for certain page types
491
+ - Required attributes for books/articles/people
492
+ - Project-specific tagging schemes
493
+ - Integration rules with other tools
494
+ - etc.
495
+ -->
496
+
497
+ ### Example Custom Rules (modify as needed):
498
+
499
+ **Books:**
500
+ ```
501
+ [[Book: Title by Author]]
502
+ Type:: Book
503
+ Author:: [[Author Name]]
504
+ Status:: Reading | Completed | Abandoned
505
+ Rating:: X/5
506
+ ```
507
+
508
+ **People:**
509
+ ```
510
+ [[Person Name]]
511
+ Type:: Person
512
+ Context:: How I know them
513
+ ```
514
+
515
+ **Projects:**
516
+ ```
517
+ [[Project: Name]]
518
+ Status:: Active | Paused | Completed
519
+ Start:: [[Date]]
520
+ ```
521
+
522
+ ---
523
+
524
+ ## Integration Notes
525
+
526
+ <!-- CUSTOMIZE: Any rules about how Roam integrates with your other tools/systems -->
527
+
528
+ - Daily pages serve as: <!-- inbox / journal / task list / etc. -->
529
+ - Weekly reviews occur on: <!-- day of week -->
530
+ - Content flows from: <!-- capture tools, read-later apps, etc. -->
531
+ - Content flows to: <!-- publishing, archives, etc. -->
532
+
533
+ ---
534
+
535
+ *End of Personalization Layer*