{
  "@context": "https://schema.org",
  "@id": "https://aggr.aymericbeaumet.com/items/harper-blog/2026-03-11-my-now-immaculate-knowledge-graph-of-life/#webpage",
  "@type": [
    "WebPage",
    "ArchiveComponent"
  ],
  "articleBody": "![Everyone and everything I know!](https://harper.blog/2026/03/11/2026-immaculate-knowledge-graph/network_hu_2a5855148169d2be.png)\\\nEveryone and everything I know!\n\n## Botwick inception\n\nMy AI friend [Botwick](https://botwick.com) (not to be confused with the person John Borthwick) built a really neat website that shows all sorts of various networks that Botwick (and thus Borthwick) share. It is built by immaculately coordinating a collection of notes that have been collected over decades and decades. Seeing it made me really jealous, and I wanted my own! Harpwick was no help. I was on my own.\n\nI booted up my obsidian vault and was sad. My last note was from 2022, and it was a daily note with only one word in it: hungry.\n\nTurns out I didn’t have good notes in obsidian.\n\nHowever, I do have great notes in granola! And by great notes I mean transcripts of all my meetings since I got a beta of granola back in April of 2024.\n\nI took the ~600 or so meetings I have had since then and piped them through a Claude Code skill and BAM. I now have a knowledge graph that I can be proud of!\n\nI will explain how to do this in a sec, but first I want to show you pretty graphics!\n\nHere is my network (these are all generated with the build in obsidian graph viewer):\n\n![](https://harper.blog/2026/03/11/2026-immaculate-knowledge-graph/network-annotated_hu_f78e917a377f0597.png)\n\nIn my graph, nodes represent people and concepts extracted from meetings, and edges represent co-occurrence within the same meeting.\n\n![The density is amazing](https://harper.blog/2026/03/11/2026-immaculate-knowledge-graph/dense_hu_e33757ad5a04d286.png)\\\nThe density is amazing\n\nHere are some nodes that show up very easily.\n\n![The RAND Graduate School](https://harper.blog/2026/03/11/2026-immaculate-knowledge-graph/rand_hu_1c463e829782a9a6.png)\\\nThe RAND Graduate School\n\n![John Borthwick](https://harper.blog/2026/03/11/2026-immaculate-knowledge-graph/borthwick_hu_d6430c4b5d3de14c.png)\\\nJohn Borthwick\n\n![Jesse Vincent](https://harper.blog/2026/03/11/2026-immaculate-knowledge-graph/jesse-vincent_hu_6fded2275be545e3.png)\\\nJesse Vincent\n\n![James Cham](https://harper.blog/2026/03/11/2026-immaculate-knowledge-graph/james-cham_hu_75b559e705622a37.png)\\\nJames Cham\n\nThis is all from *just* my granola transcripts. I haven’t added my notes app notes, or any other repository of data.\n\n## Amaze\n\nI find this incredible. I get to see and find patterns, networks, and clusters that i never knew existed. It is also one of those thigns that you probably know and are working wiht implicitly - but visuallizing it helps to quantify the strength and density of these relationships.\n\n## HOW!\n\nIt isn’t so hard.\n\nThe tools you will need are:\n\n- Granola (or another meeting note tool that outputs transcripts)\n- Obsidian (or another note-taking app that is file based)\n- Claude Code (or another AI code gen assistant)\n- A healthy fear of capitalism\n\n### 1\\. Stop over-optimizing organization\n\nThe first thing is giving up on rigid organizational discipline. I don’t know if this is the right reading of [Steph Ango’s post on how they use Obsidian](https://stephango.com/vault) - but it really resonated with me. Laziness is key. Just make it work for you.\n\n![This sounds perfect!](https://harper.blog/2026/03/11/2026-immaculate-knowledge-graph/steph-quotation.png)\\\nThis sounds perfect!\n\nDo not waste energy forcing everything into some perfect predefined system. Put things where they fall, not where some abstract framework says they should go. The system should follow your work, not the other way around.\n\n### 2\\. Use an interface that feels conversational\n\nYour interface should feel more like Claude than a traditional file browser or note-taking app.\n\nYou want something that lets you move quickly, inspect information, and work with transcripts and notes in a natural way instead of constantly managing folders, tags, or metadata.\n\nI prefer to not do this by hand.\n\n### 3\\. Get transcripts out of your meeting tool and onto disk\n\nNext, you need a reliable way to export or sync transcripts from whatever meeting tool you use.\n\nI use [**muesli**](https://github.com/harperreed/muesli), a Rust CLI I wrote, to extract Granola transcripts and store them locally. There are lot of tools. The Granola native MCP server should work too.\n\nYou can install muesli via `cargo install --git https://github.com/harperreed/muesli.git --all-features`.\n\nThe key idea is simple: transcripts need to exist as local files you can process. Once they are on disk, everything gets easier.\n\n```shell\nharper@magic [†] ~/ > muesli sync\nInitializing embedding engine...\n✅ Embedding engine ready (dimension: 384)\nLoading existing vector store...\nFetching document list...\nNotes: 499 with AI summary, 656 with user notes (of 656 total)\n[##--------------------------------------] 25/656 docs\n```\n\nIt kind of just works. The notes end up being stored in your systems XDG directory (approximately `~/.local/share/muesli`).\n\n### 4\\. Parse the transcripts into an Obsidian-friendly format\n\nOnce transcripts are local, run them through a parser that turns them into structured notes designed for Obsidian.\n\nYou can use our meeting summarization skill for this: [2389-research/summarize-meetings](https://github.com/2389-research/summarize-meetings).\n\nOr you can build your own. It is not super difficult to do.\n\n> As an aside, the best way to build a skill is to start doing the work manully with claude, and the to tell claude to build a skill out the previous few rounds of work. Use the superpowers skill writing skill to automate this process.\n\nThe important part is being explicit about the output format. The parser should produce notes that work well in Obsidian, including things like:\n\n- meeting summaries\n- extracted people\n- extracted concepts and topics\n- use \\[\\[ and \\]\\] to establish links between related notes\n- knowledge-graph-friendly structure\n- clean markdown with consistent naming\n\n### 4.5 Get the skill to work\n\nI typically just say “use the meeting summarization skill to parse my recent meetings” and it kind of just figures it out.\n\nyou just need claude to know two things:\n\n1. where the transcripts are stored, and\n2. where it should store the parsed notes.\n\nOnce that is clear you are ready to rock.\n\nHere is an example of what the output might look like:\n\n![My brother *is* the elder care coordinator for my parents. lol](https://harper.blog/2026/03/11/2026-immaculate-knowledge-graph/dylan-reed-note_hu_3357d0ff577da431.png)\\\nMy brother *is* the elder care coordinator for my parents. lol\n\n### 5\\. Let it churn\n\nOnce that pipeline is in place, the process becomes mostly automatic:\n\n- transcripts get exported\n- transcripts get parsed\n- notes get automagically generated into your Obsidian vault\n- entities and concepts get linked\n- the graph starts building itself\n\nAt that point, you stop manually curating everything and start benefiting from accumulated structure.\n\n## Magic\n\nThe result is a pretty wild knowledge graph built from your transcripts. It is important to note that this could work with any transcript source, not just Granola. More importantly, it coudl work with any asset - even non-textual assets like images or videos.\n\nYour messy input ends up becoming a connected system of:\n\n- summaries\n- people and concepts\n- strategic themes\n- references across meetings, people, etc\n\n## Suddenly the patterns emerge\n\n![Living life.](https://harper.blog/2026/03/11/2026-immaculate-knowledge-graph/vibes_hu_6d47be82fe1df652.png)\\\nLiving life.\n\nIf this type of thing is interesting and you want to learn more, hack, or work with us - hit me up at [harper@2389.ai](mailto:harper@2389.ai).\n",
  "authors": [
    "Harper Reed"
  ],
  "captured_at": "2026-09-27T19:29:15.293681927+00:00",
  "category": "programming",
  "content_html": "<figure class=\"article-figure\"><picture class=\"article-picture article-picture-fallback\" style=\"--image-ratio:16 / 9\"><img src=\"https://harper.blog/2026/03/11/2026-immaculate-knowledge-graph/network_hu_2a5855148169d2be.png\" alt=\"Everyone and everything I know!\" loading=\"eager\" decoding=\"async\" fetchpriority=\"high\" referrerpolicy=\"no-referrer\" class=\"progressive-image\"></picture><figcaption>Everyone and everything I know!</figcaption></figure>\n<h2>Botwick inception</h2>\n<p>My AI friend <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://botwick.com\">Botwick</a> (not to be confused with the person John Borthwick) built a really neat website that shows all sorts of various networks that Botwick (and thus Borthwick) share. It is built by immaculately coordinating a collection of notes that have been collected over decades and decades. Seeing it made me really jealous, and I wanted my own! Harpwick was no help. I was on my own.</p>\n<p>I booted up my obsidian vault and was sad. My last note was from 2022, and it was a daily note with only one word in it: hungry.</p>\n<p>Turns out I didn’t have good notes in obsidian.</p>\n<p>However, I do have great notes in granola! And by great notes I mean transcripts of all my meetings since I got a beta of granola back in April of 2024.</p>\n<p>I took the ~600 or so meetings I have had since then and piped them through a Claude Code skill and BAM. I now have a knowledge graph that I can be proud of!</p>\n<p>I will explain how to do this in a sec, but first I want to show you pretty graphics!</p>\n<p>Here is my network (these are all generated with the build in obsidian graph viewer):</p>\n<figure class=\"article-figure\"><picture class=\"article-picture article-picture-fallback\" style=\"--image-ratio:16 / 9\"><img src=\"https://harper.blog/2026/03/11/2026-immaculate-knowledge-graph/network-annotated_hu_f78e917a377f0597.png\" alt=\"\" loading=\"lazy\" decoding=\"async\" fetchpriority=\"low\" referrerpolicy=\"no-referrer\" class=\"progressive-image\"></picture></p>\n<p>In my graph, nodes represent people and concepts extracted from meetings, and edges represent co-occurrence within the same meeting.</p>\n<p><picture class=\"article-picture article-picture-fallback\" style=\"--image-ratio:16 / 9\"><img src=\"https://harper.blog/2026/03/11/2026-immaculate-knowledge-graph/dense_hu_e33757ad5a04d286.png\" alt=\"The density is amazing\" loading=\"lazy\" decoding=\"async\" fetchpriority=\"low\" referrerpolicy=\"no-referrer\" class=\"progressive-image\"></picture><figcaption>The density is amazing</figcaption></figure>\n<p>Here are some nodes that show up very easily.</p>\n<figure class=\"article-figure\"><picture class=\"article-picture article-picture-fallback\" style=\"--image-ratio:16 / 9\"><img src=\"https://harper.blog/2026/03/11/2026-immaculate-knowledge-graph/rand_hu_1c463e829782a9a6.png\" alt=\"The RAND Graduate School\" loading=\"lazy\" decoding=\"async\" fetchpriority=\"low\" referrerpolicy=\"no-referrer\" class=\"progressive-image\"></picture><figcaption>The RAND Graduate School</figcaption></figure>\n<figure class=\"article-figure\"><picture class=\"article-picture article-picture-fallback\" style=\"--image-ratio:16 / 9\"><img src=\"https://harper.blog/2026/03/11/2026-immaculate-knowledge-graph/borthwick_hu_d6430c4b5d3de14c.png\" alt=\"John Borthwick\" loading=\"lazy\" decoding=\"async\" fetchpriority=\"low\" referrerpolicy=\"no-referrer\" class=\"progressive-image\"></picture><figcaption>John Borthwick</figcaption></figure>\n<figure class=\"article-figure\"><picture class=\"article-picture article-picture-fallback\" style=\"--image-ratio:16 / 9\"><img src=\"https://harper.blog/2026/03/11/2026-immaculate-knowledge-graph/jesse-vincent_hu_6fded2275be545e3.png\" alt=\"Jesse Vincent\" loading=\"lazy\" decoding=\"async\" fetchpriority=\"low\" referrerpolicy=\"no-referrer\" class=\"progressive-image\"></picture><figcaption>Jesse Vincent</figcaption></figure>\n<figure class=\"article-figure\"><picture class=\"article-picture article-picture-fallback\" style=\"--image-ratio:16 / 9\"><img src=\"https://harper.blog/2026/03/11/2026-immaculate-knowledge-graph/james-cham_hu_75b559e705622a37.png\" alt=\"James Cham\" loading=\"lazy\" decoding=\"async\" fetchpriority=\"low\" referrerpolicy=\"no-referrer\" class=\"progressive-image\"></picture><figcaption>James Cham</figcaption></figure>\n<p>This is all from <em>just</em> my granola transcripts. I haven’t added my notes app notes, or any other repository of data.</p>\n<h2>Amaze</h2>\n<p>I find this incredible. I get to see and find patterns, networks, and clusters that i never knew existed. It is also one of those thigns that you probably know and are working wiht implicitly - but visuallizing it helps to quantify the strength and density of these relationships.</p>\n<h2>HOW!</h2>\n<p>It isn’t so hard.</p>\n<p>The tools you will need are:</p>\n<ul>\n<li>Granola (or another meeting note tool that outputs transcripts)</li>\n<li>Obsidian (or another note-taking app that is file based)</li>\n<li>Claude Code (or another AI code gen assistant)</li>\n<li>A healthy fear of capitalism</li>\n</ul>\n<h3>1. Stop over-optimizing organization</h3>\n<p>The first thing is giving up on rigid organizational discipline. I don’t know if this is the right reading of <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://stephango.com/vault\">Steph Ango’s post on how they use Obsidian</a> - but it really resonated with me. Laziness is key. Just make it work for you.</p>\n<figure class=\"article-figure\"><picture class=\"article-picture article-picture-fallback\" style=\"--image-ratio:16 / 9\"><img src=\"https://harper.blog/2026/03/11/2026-immaculate-knowledge-graph/steph-quotation.png\" alt=\"This sounds perfect!\" loading=\"lazy\" decoding=\"async\" fetchpriority=\"low\" referrerpolicy=\"no-referrer\" class=\"progressive-image\"></picture><figcaption>This sounds perfect!</figcaption></figure>\n<p>Do not waste energy forcing everything into some perfect predefined system. Put things where they fall, not where some abstract framework says they should go. The system should follow your work, not the other way around.</p>\n<h3>2. Use an interface that feels conversational</h3>\n<p>Your interface should feel more like Claude than a traditional file browser or note-taking app.</p>\n<p>You want something that lets you move quickly, inspect information, and work with transcripts and notes in a natural way instead of constantly managing folders, tags, or metadata.</p>\n<p>I prefer to not do this by hand.</p>\n<h3>3. Get transcripts out of your meeting tool and onto disk</h3>\n<p>Next, you need a reliable way to export or sync transcripts from whatever meeting tool you use.</p>\n<p>I use <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/harperreed/muesli\"><strong>muesli</strong></a>, a Rust CLI I wrote, to extract Granola transcripts and store them locally. There are lot of tools. The Granola native MCP server should work too.</p>\n<p>You can install muesli via <code>cargo install --git https://github.com/harperreed/muesli.git --all-features</code>.</p>\n<p>The key idea is simple: transcripts need to exist as local files you can process. Once they are on disk, everything gets easier.</p>\n<pre><code class=\"language-shell\"><span class=\"code-snippet\" data-language=\"Shell\"><span class=\"syntax-source syntax-shell syntax-bash\"><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">harper@magic</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> <span class=\"syntax-keyword syntax-control syntax-regexp syntax-set syntax-begin syntax-shell\">[</span>†<span class=\"syntax-keyword syntax-control syntax-regexp syntax-set syntax-end syntax-shell\">]</span> <span class=\"syntax-meta syntax-group syntax-expansion syntax-tilde\"><span class=\"syntax-variable syntax-language syntax-tilde syntax-shell\">~</span></span>/ <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-redirection syntax-shell\">&gt;</span> muesli sync</span>\n<span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">Initializing</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> embedding engine...</span>\n<span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">✅</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> Embedding engine ready (dimension: 384</span><span class=\"syntax-meta syntax-function-call syntax-shell\"></span><span class=\"syntax-meta syntax-post-cmd syntax-shell\">)</span>\n<span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">Loading</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> existing vector store...</span>\n<span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">Fetching</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> document list...</span>\n<span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">Notes:</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> 499 with AI summary, 656 with user notes (of 656 total</span><span class=\"syntax-meta syntax-function-call syntax-shell\"></span><span class=\"syntax-meta syntax-post-cmd syntax-shell\">)</span>\n<span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">[##--------------------------------------]</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> 25/656 docs</span>\n</span></span></code></pre>\n<p>It kind of just works. The notes end up being stored in your systems XDG directory (approximately <code>~/.local/share/muesli</code>).</p>\n<h3>4. Parse the transcripts into an Obsidian-friendly format</h3>\n<p>Once transcripts are local, run them through a parser that turns them into structured notes designed for Obsidian.</p>\n<p>You can use our meeting summarization skill for this: <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/2389-research/summarize-meetings\">2389-research/summarize-meetings</a>.</p>\n<p>Or you can build your own. It is not super difficult to do.</p>\n<blockquote>\n<p>As an aside, the best way to build a skill is to start doing the work manully with claude, and the to tell claude to build a skill out the previous few rounds of work. Use the superpowers skill writing skill to automate this process.</p>\n</blockquote>\n<p>The important part is being explicit about the output format. The parser should produce notes that work well in Obsidian, including things like:</p>\n<ul>\n<li>meeting summaries</li>\n<li>extracted people</li>\n<li>extracted concepts and topics</li>\n<li>use [[ and ]] to establish links between related notes</li>\n<li>knowledge-graph-friendly structure</li>\n<li>clean markdown with consistent naming</li>\n</ul>\n<h3>4.5 Get the skill to work</h3>\n<p>I typically just say “use the meeting summarization skill to parse my recent meetings” and it kind of just figures it out.</p>\n<p>you just need claude to know two things:</p>\n<ol>\n<li>where the transcripts are stored, and</li>\n<li>where it should store the parsed notes.</li>\n</ol>\n<p>Once that is clear you are ready to rock.</p>\n<p>Here is an example of what the output might look like:</p>\n<figure class=\"article-figure\"><picture class=\"article-picture article-picture-fallback\" style=\"--image-ratio:16 / 9\"><img src=\"https://harper.blog/2026/03/11/2026-immaculate-knowledge-graph/dylan-reed-note_hu_3357d0ff577da431.png\" alt=\"My brother is the elder care coordinator for my parents. lol\" loading=\"lazy\" decoding=\"async\" fetchpriority=\"low\" referrerpolicy=\"no-referrer\" class=\"progressive-image\"></picture><figcaption>My brother <em>is</em> the elder care coordinator for my parents. lol</figcaption></figure>\n<h3>5. Let it churn</h3>\n<p>Once that pipeline is in place, the process becomes mostly automatic:</p>\n<ul>\n<li>transcripts get exported</li>\n<li>transcripts get parsed</li>\n<li>notes get automagically generated into your Obsidian vault</li>\n<li>entities and concepts get linked</li>\n<li>the graph starts building itself</li>\n</ul>\n<p>At that point, you stop manually curating everything and start benefiting from accumulated structure.</p>\n<h2>Magic</h2>\n<p>The result is a pretty wild knowledge graph built from your transcripts. It is important to note that this could work with any transcript source, not just Granola. More importantly, it coudl work with any asset - even non-textual assets like images or videos.</p>\n<p>Your messy input ends up becoming a connected system of:</p>\n<ul>\n<li>summaries</li>\n<li>people and concepts</li>\n<li>strategic themes</li>\n<li>references across meetings, people, etc</li>\n</ul>\n<h2>Suddenly the patterns emerge</h2>\n<figure class=\"article-figure\"><picture class=\"article-picture article-picture-fallback\" style=\"--image-ratio:16 / 9\"><img src=\"https://harper.blog/2026/03/11/2026-immaculate-knowledge-graph/vibes_hu_6d47be82fe1df652.png\" alt=\"Living life.\" loading=\"lazy\" decoding=\"async\" fetchpriority=\"low\" referrerpolicy=\"no-referrer\" class=\"progressive-image\"></picture><figcaption>Living life.</figcaption></figure>\n<p>If this type of thing is interesting and you want to learn more, hack, or work with us - hit me up at <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"mailto:harper@2389.ai\">harper@2389.ai</a>.</p>\n",
  "content_markdown": "![Everyone and everything I know!](https://harper.blog/2026/03/11/2026-immaculate-knowledge-graph/network_hu_2a5855148169d2be.png)\\\nEveryone and everything I know!\n\n## Botwick inception\n\nMy AI friend [Botwick](https://botwick.com) (not to be confused with the person John Borthwick) built a really neat website that shows all sorts of various networks that Botwick (and thus Borthwick) share. It is built by immaculately coordinating a collection of notes that have been collected over decades and decades. Seeing it made me really jealous, and I wanted my own! Harpwick was no help. I was on my own.\n\nI booted up my obsidian vault and was sad. My last note was from 2022, and it was a daily note with only one word in it: hungry.\n\nTurns out I didn’t have good notes in obsidian.\n\nHowever, I do have great notes in granola! And by great notes I mean transcripts of all my meetings since I got a beta of granola back in April of 2024.\n\nI took the ~600 or so meetings I have had since then and piped them through a Claude Code skill and BAM. I now have a knowledge graph that I can be proud of!\n\nI will explain how to do this in a sec, but first I want to show you pretty graphics!\n\nHere is my network (these are all generated with the build in obsidian graph viewer):\n\n![](https://harper.blog/2026/03/11/2026-immaculate-knowledge-graph/network-annotated_hu_f78e917a377f0597.png)\n\nIn my graph, nodes represent people and concepts extracted from meetings, and edges represent co-occurrence within the same meeting.\n\n![The density is amazing](https://harper.blog/2026/03/11/2026-immaculate-knowledge-graph/dense_hu_e33757ad5a04d286.png)\\\nThe density is amazing\n\nHere are some nodes that show up very easily.\n\n![The RAND Graduate School](https://harper.blog/2026/03/11/2026-immaculate-knowledge-graph/rand_hu_1c463e829782a9a6.png)\\\nThe RAND Graduate School\n\n![John Borthwick](https://harper.blog/2026/03/11/2026-immaculate-knowledge-graph/borthwick_hu_d6430c4b5d3de14c.png)\\\nJohn Borthwick\n\n![Jesse Vincent](https://harper.blog/2026/03/11/2026-immaculate-knowledge-graph/jesse-vincent_hu_6fded2275be545e3.png)\\\nJesse Vincent\n\n![James Cham](https://harper.blog/2026/03/11/2026-immaculate-knowledge-graph/james-cham_hu_75b559e705622a37.png)\\\nJames Cham\n\nThis is all from *just* my granola transcripts. I haven’t added my notes app notes, or any other repository of data.\n\n## Amaze\n\nI find this incredible. I get to see and find patterns, networks, and clusters that i never knew existed. It is also one of those thigns that you probably know and are working wiht implicitly - but visuallizing it helps to quantify the strength and density of these relationships.\n\n## HOW!\n\nIt isn’t so hard.\n\nThe tools you will need are:\n\n- Granola (or another meeting note tool that outputs transcripts)\n- Obsidian (or another note-taking app that is file based)\n- Claude Code (or another AI code gen assistant)\n- A healthy fear of capitalism\n\n### 1\\. Stop over-optimizing organization\n\nThe first thing is giving up on rigid organizational discipline. I don’t know if this is the right reading of [Steph Ango’s post on how they use Obsidian](https://stephango.com/vault) - but it really resonated with me. Laziness is key. Just make it work for you.\n\n![This sounds perfect!](https://harper.blog/2026/03/11/2026-immaculate-knowledge-graph/steph-quotation.png)\\\nThis sounds perfect!\n\nDo not waste energy forcing everything into some perfect predefined system. Put things where they fall, not where some abstract framework says they should go. The system should follow your work, not the other way around.\n\n### 2\\. Use an interface that feels conversational\n\nYour interface should feel more like Claude than a traditional file browser or note-taking app.\n\nYou want something that lets you move quickly, inspect information, and work with transcripts and notes in a natural way instead of constantly managing folders, tags, or metadata.\n\nI prefer to not do this by hand.\n\n### 3\\. Get transcripts out of your meeting tool and onto disk\n\nNext, you need a reliable way to export or sync transcripts from whatever meeting tool you use.\n\nI use [**muesli**](https://github.com/harperreed/muesli), a Rust CLI I wrote, to extract Granola transcripts and store them locally. There are lot of tools. The Granola native MCP server should work too.\n\nYou can install muesli via `cargo install --git https://github.com/harperreed/muesli.git --all-features`.\n\nThe key idea is simple: transcripts need to exist as local files you can process. Once they are on disk, everything gets easier.\n\n```shell\nharper@magic [†] ~/ > muesli sync\nInitializing embedding engine...\n✅ Embedding engine ready (dimension: 384)\nLoading existing vector store...\nFetching document list...\nNotes: 499 with AI summary, 656 with user notes (of 656 total)\n[##--------------------------------------] 25/656 docs\n```\n\nIt kind of just works. The notes end up being stored in your systems XDG directory (approximately `~/.local/share/muesli`).\n\n### 4\\. Parse the transcripts into an Obsidian-friendly format\n\nOnce transcripts are local, run them through a parser that turns them into structured notes designed for Obsidian.\n\nYou can use our meeting summarization skill for this: [2389-research/summarize-meetings](https://github.com/2389-research/summarize-meetings).\n\nOr you can build your own. It is not super difficult to do.\n\n> As an aside, the best way to build a skill is to start doing the work manully with claude, and the to tell claude to build a skill out the previous few rounds of work. Use the superpowers skill writing skill to automate this process.\n\nThe important part is being explicit about the output format. The parser should produce notes that work well in Obsidian, including things like:\n\n- meeting summaries\n- extracted people\n- extracted concepts and topics\n- use \\[\\[ and \\]\\] to establish links between related notes\n- knowledge-graph-friendly structure\n- clean markdown with consistent naming\n\n### 4.5 Get the skill to work\n\nI typically just say “use the meeting summarization skill to parse my recent meetings” and it kind of just figures it out.\n\nyou just need claude to know two things:\n\n1. where the transcripts are stored, and\n2. where it should store the parsed notes.\n\nOnce that is clear you are ready to rock.\n\nHere is an example of what the output might look like:\n\n![My brother *is* the elder care coordinator for my parents. lol](https://harper.blog/2026/03/11/2026-immaculate-knowledge-graph/dylan-reed-note_hu_3357d0ff577da431.png)\\\nMy brother *is* the elder care coordinator for my parents. lol\n\n### 5\\. Let it churn\n\nOnce that pipeline is in place, the process becomes mostly automatic:\n\n- transcripts get exported\n- transcripts get parsed\n- notes get automagically generated into your Obsidian vault\n- entities and concepts get linked\n- the graph starts building itself\n\nAt that point, you stop manually curating everything and start benefiting from accumulated structure.\n\n## Magic\n\nThe result is a pretty wild knowledge graph built from your transcripts. It is important to note that this could work with any transcript source, not just Granola. More importantly, it coudl work with any asset - even non-textual assets like images or videos.\n\nYour messy input ends up becoming a connected system of:\n\n- summaries\n- people and concepts\n- strategic themes\n- references across meetings, people, etc\n\n## Suddenly the patterns emerge\n\n![Living life.](https://harper.blog/2026/03/11/2026-immaculate-knowledge-graph/vibes_hu_6d47be82fe1df652.png)\\\nLiving life.\n\nIf this type of thing is interesting and you want to learn more, hack, or work with us - hit me up at [harper@2389.ai](mailto:harper@2389.ai).\n",
  "dateCreated": "2026-09-27T19:29:15.293681927+00:00",
  "date_created": "2026-03-11T06:10:00+00:00",
  "date_modified": "2026-03-11T06:10:00+00:00",
  "date_published": "2026-03-11T06:10:00+00:00",
  "description": "Everyone and everything I know! Botwick inception My AI friend Botwick (not to be confused with the person John Borthwick) built a really neat website that shows all sorts of various networks that Botwick (and thus Borthwick) share. It is…",
  "external_url": "https://harper.blog/2026/03/11/2026-immaculate-knowledge-graph/",
  "git": {
    "commit": "ebb0941c5c06a2ab2377342d607535262a3e969e",
    "path": "items/harper-blog/2026/03/2026-03-11-my-now-immaculate-knowledge-graph-of-life.md",
    "permalink": "https://github.com/aymericbeaumet/aggr-instance/blob/ebb0941c5c06a2ab2377342d607535262a3e969e/items/harper-blog/2026/03/2026-03-11-my-now-immaculate-knowledge-graph-of-life.md"
  },
  "id": "urn:aggr:item:eced597ef9193aa79cd28973108062cd41839644",
  "isBasedOn": {
    "@id": "https://harper.blog/2026/03/11/2026-immaculate-knowledge-graph/"
  },
  "mainEntity": {
    "@id": "https://harper.blog/2026/03/11/2026-immaculate-knowledge-graph/",
    "@type": "CreativeWork",
    "archivedAt": {
      "@id": "https://aggr.aymericbeaumet.com/items/harper-blog/2026-03-11-my-now-immaculate-knowledge-graph-of-life/#webpage"
    },
    "author": [
      {
        "@type": "Person",
        "name": "Harper Reed"
      }
    ],
    "dateModified": "2026-03-11T06:10:00+00:00",
    "datePublished": "2026-03-11T06:10:00+00:00",
    "headline": "My now immaculate knowledge graph of life",
    "timeRequired": "PT5M",
    "url": "https://harper.blog/2026/03/11/2026-immaculate-knowledge-graph/",
    "wordCount": 1038
  },
  "name": "Archived snapshot: My now immaculate knowledge graph of life",
  "preview": null,
  "reading_minutes": 5,
  "replicated_at": null,
  "source": "harper-blog",
  "source_name": "Home on Harper Reed's Blog",
  "summary": "Everyone and everything I know! Botwick inception My AI friend Botwick (not to be confused with the person John Borthwick) built a really neat website that shows all sorts of various networks that Botwick (and thus Borthwick) share. It is built by immaculately coordinating a collection of notes that have been collected over decades and decades. Seeing it made me really jealous, and I wanted my own! Harpwick was no help. I was on my own. extraction I booted up my obsidian vault and was sad. My last note was from 2022, and it was a daily note with only one word in it: hungry. Turns out I didn’t have good notes in obsidian. However, I do have great notes in granola! And by great notes I mean transcripts of all my meetings since I got a beta of granola back in April of 2024. I took the ~600 or so meetings I have had since then and piped them through a Claude Code skill and BAM. I now have a knowledge graph that I can be proud of! I will explain how to do this in a sec, but first I want to show you pretty graphics! Here is my network (these are all generated with the build in obsidian graph viewer): In my graph, nodes represent people and concepts extracted from meetings, and edges represent co-occurrence within the same meeting. The density is amazing Here are some nodes that show up very easily. The RAND Graduate School John Borthwick Jesse Vincent James Cham This is all from just my granola transcripts. I haven’t added my notes app notes, or any other repository of data. Amaze I find this incredible. I get to see and find patterns, networks, and clusters that i never knew existed. It is also one of those thigns that you probably know and are working wiht implicitly - but visuallizing it helps to quantify the strength and density of these relationships. HOW! It isn’t so hard. The tools you will need are: Granola (or another meeting note tool that outputs transcripts) Obsidian (or another note-taking app that is file based) Claude Code (or another AI code gen assistant) A healthy fear of capitalism 1. Stop over-optimizing organization The first thing is giving up on rigid organizational discipline. I don’t know if this is the right reading of Steph Ango’s post on how they use Obsidian - but it really resonated with me. Laziness is key. Just make it work for you. This sounds perfect! Do not waste energy forcing everything into some perfect predefined system. Put things where they fall, not where some abstract framework says they should go. The system should follow your work, not the other way around. 2. Use an interface that feels conversational Your interface should feel more like Claude than a traditional file browser or note-taking app. You want something that lets you move quickly, inspect information, and work with transcripts and notes in a natural way instead of constantly managing folders, tags, or metadata. I prefer to not do this by hand. 3. Get transcripts out of your meeting tool and onto disk Next, you need a reliable way to export or sync transcripts from whatever meeting tool you use. I use muesli, a Rust CLI I wrote, to extract Granola transcripts and store them locally. There are lot of tools. The Granola native MCP server should work too. You can install muesli via cargo install --git https://github.com/harperreed/muesli.git --all-features. The key idea is simple: transcripts need to exist as local files you can process. Once they are on disk, everything gets easier. harper@magic [†] ~/ > muesli sync Initializing embedding engine... ✅ Embedding engine ready (dimension: 384) Loading existing vector store... Fetching document list... Notes: 499 with AI summary, 656 with user notes (of 656 total) [##--------------------------------------] 25/656 docs It kind of just works. The notes end up being stored in your systems XDG directory (approximately ~/.local/share/muesli). 4. Parse the transcripts into an Obsidian-friendly format Once transcripts are local, run them through a parser that turns them into structured notes designed for Obsidian. You can use our meeting summarization skill for this: 2389-research/summarize-meetings. Or you can build your own. It is not super difficult to do. As an aside, the best way to build a skill is to start doing the work manully with claude, and the to tell claude to build a skill out the previous few rounds of work. Use the superpowers skill writing skill to automate this process. The important part is being explicit about the output format. The parser should produce notes that work well in Obsidian, including things like: meeting summaries extracted people extracted concepts and topics use [[ and ]] to establish links between related notes knowledge-graph-friendly structure clean markdown with consistent naming 4.5 Get the skill to work I typically just say “use the meeting summarization skill to parse my recent meetings” and it kind of just figures it out. you just need claude to know two things: where the transcripts are stored, and where it should store the parsed notes. Once that is clear you are ready to rock. Here is an example of what the output might look like: My brother is the elder care coordinator for my parents. lol 5. Let it churn Once that pipeline is in place, the process becomes mostly automatic: transcripts get exported transcripts get parsed notes get automagically generated into your Obsidian vault entities and concepts get linked the graph starts building itself At that point, you stop manually curating everything and start benefiting from accumulated structure. Magic The result is a pretty wild knowledge graph built from your transcripts. It is important to note that this could work with any transcript source, not just Granola. More importantly, it coudl work with any asset - even non-textual assets like images or videos. Your messy input ends up becoming a connected system of: summaries people and concepts strategic themes references across meetings, people, etc Suddenly the patterns emerge Living life. If this type of thing is interesting and you want to learn more, hack, or work with us - hit me up at harper@2389.ai. Thank you for using RSS. I appreciate you. Email me",
  "tags": [],
  "temporalCoverage": "2026-09-27T19:29:15.293681927+00:00",
  "title": "My now immaculate knowledge graph of life",
  "url": "https://aggr.aymericbeaumet.com/items/harper-blog/2026-03-11-my-now-immaculate-knowledge-graph-of-life/",
  "word_count": 1038
}