<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

 <title>Tom Liu</title>
 <link href="https://tom5610.github.io/atom.xml" rel="self"/>
 <link href="https://tom5610.github.io/"/>
 <updated>2026-05-06T09:07:15+00:00</updated>
 <id>https://tom5610.github.io</id>
 <author>
   <name>Tom Liu</name>
   <email></email>
 </author>

 
 <entry>
   <title>Building Your Second Brain using Claude Code and Obsidian - Part 1</title>
   <link href="https://tom5610.github.io/2026/05/06/building-second-brain-claude-code-obsidian-part-1/"/>
   <updated>2026-05-06T00:00:00+00:00</updated>
   <id>https://tom5610.github.io/2026/05/06/building-second-brain-claude-code-obsidian-part-1</id>
   <content type="html">&lt;p&gt;The bottleneck in my learning was never finding good content - it was the grunt work after reading it - summarizing, connecting ideas across articles, filing things where I’d actually find them again. I read technical blogs constantly, but I just… didn’t do any of that. For years, knowledge entered, sparked something, and faded - scattered across browser tabs and half-started notes I’d never reopen.&lt;/p&gt;

&lt;p&gt;Then I came across Andrej Karpathy’s &lt;a href=&quot;https://x.com/karpathy/status/2039805659525644595&quot;&gt;tweet&lt;/a&gt; and something clicked. What if the LLM didn’t just &lt;em&gt;answer questions&lt;/em&gt; about my documents - what if it &lt;em&gt;transformed&lt;/em&gt; them into structured knowledge? A persistent wiki where concepts are linked, connections are surfaced, and rationale is made explicit. From there, I could drill down into the relationships between ideas, and bring my own lens to deep-dive into the topics that matter to me.&lt;/p&gt;

&lt;p&gt;The idea is awesome; however, Andrej didn’t share ‘step-by-step’ guidance. Others have reproduced his method in different forms — using the llm-wiki gist as a system prompt, creating reusable skills, even building apps. I wasn’t happy with the results, so I decided to build my own approach using Claude Code and Obsidian.&lt;/p&gt;

&lt;p&gt;Here’s a sneak peek before we dive in. Say you’re reading Anthropic’s engineering blog -  &lt;a href=&quot;https://www.anthropic.com/engineering/building-effective-agents&quot;&gt;Building effective agents&lt;/a&gt;, what if you could transform it into a wiki and navigate the key parts using Obsidian:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/building-second-brain/obsidian-note-output-example.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;andrejs-llm-wiki&quot;&gt;Andrej’s llm-wiki&lt;/h2&gt;

&lt;p&gt;The purpose of &lt;a href=&quot;https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f&quot;&gt;llm-wiki&lt;/a&gt; is to build personal wiki knowledge bases for topics you care about. It has three flows: ingest (transform documents into structured wiki pages), query (ask questions with citations), and maintenance (keep the wiki healthy over time). This post covers ingest, Obsidian and Obsidian Web Clipper setup. The rest will be covered in Part 2.&lt;/p&gt;

&lt;p&gt;Here’s a reference architecture:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/building-second-brain/llm-wiki-architecture.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;how-it-works&quot;&gt;How It Works&lt;/h2&gt;

&lt;p&gt;The whole process standardizes the wiki generation, from flat documents to structured knowledge. I built a plugin so you can do this repeatably.&lt;/p&gt;

&lt;p&gt;Here’s what the pipeline looks like conceptually:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/building-second-brain/llm-sausage-maker.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;To build the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ingest&lt;/code&gt; process, the handy way is to use an AI coding agent (Claude Code, Kiro, Codex, etc.) with Andrej’s recipe.&lt;/p&gt;

&lt;p&gt;Luckily, Andrej shared his recipe - &lt;a href=&quot;https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f&quot;&gt;llm-wiki&lt;/a&gt; gist. The simplest approach: paste the gist into Claude Code and point it at your source document. This works, but doesn’t guarantee consistent quality and ties you to a single session. To make it repeatable, I built a plugin - &lt;a href=&quot;https://github.com/tom5610/llm-wiki/tree/main&quot;&gt;llm-wiki plugin&lt;/a&gt; - that encodes the pipeline as reusable skills I can refine over time.&lt;/p&gt;

&lt;h2 id=&quot;try-it&quot;&gt;Try It&lt;/h2&gt;

&lt;p&gt;The &lt;a href=&quot;https://github.com/tom5610/llm-wiki/tree/main&quot;&gt;llm-wiki plugin&lt;/a&gt; is ready to use. Here’s the process step by step:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#initial-working-folder-setup&quot;&gt;#Initial working folder setup&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#porting-web-pages-to-obsidian&quot;&gt;#Porting web page(s) to Obsidian&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#transforming-flat-documents-to-wiki&quot;&gt;#Transforming flat documents to wiki&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#navigate-wiki-with-obsidian&quot;&gt;#Navigate wiki with Obsidian&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Prerequisites&lt;/strong&gt;: &lt;a href=&quot;https://obsidian.md/download&quot;&gt;Obsidian&lt;/a&gt; installed,  &lt;a href=&quot;https://obsidian.md/clipper&quot;&gt;Obsidian Web Clipper&lt;/a&gt; extension installed on browser (e.g. Chrome), Claude Code installed (with subscription or using API), terminal familiarity.&lt;/p&gt;

&lt;h3 id=&quot;initial-working-folder-setup&quot;&gt;Initial working folder setup&lt;/h3&gt;

&lt;p&gt;Open a terminal and create the working folder:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;mkdir&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;test&lt;/span&gt;/raw/assets  
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This gives you the folder structure:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;test/
  ├── raw/                 # Source documents (articles, assets)
  │   └── assets/          # Images referenced by source docs
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Next, download a blog (e.g. &lt;a href=&quot;https://www.anthropic.com/engineering/building-effective-agents&quot;&gt;Building effective agents&lt;/a&gt;) into the raw folder, and save related images into ‘raw/assets’. The next section shows how to do this with Obsidian Web Clipper.&lt;/p&gt;

&lt;p&gt;For reference, here’s what the folder looks like after ingestion is complete:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;test/
  ├── .claude/              # Claude Code configuration
  │   ├── settings.json
  │   └── skills/active-learning/
  ├── .llm-wiki/            # Wiki system config
  │   └── lenses/
  ├── .obsidian/            # Obsidian vault settings
  ├── wiki/                 # Structured knowledge base
  │   ├── index.md
  │   ├── overview.md
  │   ├── log.md
  │   ├── concepts/        # Core concepts (augmented LLM, agentic systems, etc.)
  │   ├── techniques/      # Implementation patterns (routing, parallelization, etc.)
  │   ├── synthesis/       # Cross-cutting analyses
  │   └── entities/
  ├── raw/                 # Source documents (articles, assets)
  │   ├── Building Effective AI Agents.md
  │   └── assets/          # Images referenced by source docs

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;porting-web-pages-to-obsidian&quot;&gt;Porting web page(s) to Obsidian&lt;/h3&gt;

&lt;p&gt;Follow the steps to configure Obsidian &amp;amp; Web Clipper extension:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;On Obsidian, create an Obsidian vault with ‘Open folder as vault’ and select the ‘test’ folder&lt;/p&gt;

    &lt;p&gt;&lt;img src=&quot;/assets/building-second-brain/llm-wiki-obsidian-vault.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;On Obsidian, configure a hotkey to download attachments. When you clip a note, this lets you download its images as local attachments for the wiki.
    &lt;ul&gt;
      &lt;li&gt;Select ‘Setting’ (On macOS, it’s under top-left ‘Obsidian’ menu)&lt;/li&gt;
      &lt;li&gt;Select ‘Hotkeys’ menu, and input ‘attachment’ in the filter at the panel&lt;/li&gt;
      &lt;li&gt;Click the ‘+’ button at the item ‘Download attachments for the current file’, then press ‘Cmd’ + ‘Shift’ + ‘D’ (or your preference.)&lt;/li&gt;
      &lt;li&gt;&lt;img src=&quot;/assets/building-second-brain/obsidian-setting-hotkey-download.png&quot; alt=&quot;&quot; /&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;On Obsidian Web Clipper extension setting, configure vault settings for note import.
    &lt;ul&gt;
      &lt;li&gt;Under ‘General’, add the newly created vault ‘test’ (when creating vault on folder, by default the name will be the folder name.) into ‘Vaults’ section, and select ‘Add to Obsidian’ in ‘Save behavior’&lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;&lt;img src=&quot;/assets/building-second-brain/obsidian-web-clipper-vault.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;Configure the vault:
        &lt;ul&gt;
          &lt;li&gt;Input ‘raw’ for the ‘Note location’ - match to the raw folder under your vault&lt;/li&gt;
          &lt;li&gt;Select ‘test’ from ‘Vault’&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;img src=&quot;/assets/building-second-brain/obsidian-web-clipper-template.png&quot; alt=&quot;&quot; /&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Open your target web page, e.g. &lt;a href=&quot;https://www.anthropic.com/engineering/building-effective-agents&quot;&gt;Building effective agents&lt;/a&gt; on Chrome, then click ‘Obsidian Web Clipper ‘, or press ‘Cmd’ + ‘Shift’ + ‘O’
    &lt;ul&gt;
      &lt;li&gt;&lt;img src=&quot;/assets/building-second-brain/obsidian-web-clipper-add-note.png&quot; alt=&quot;&quot; /&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Press the ‘Add to Obsidian’ button, Obsidian fires up automatically and you can view the document. At the moment, the images in the note are backed by URLs. To download the images, use the hotkey for ‘Download Attachments for the current file’ - pressing ‘Cmd’ + ‘Shift’ + ‘D’ (per your setup before). Once you confirm and click the ‘Download’ button, all the images will be saved under ‘assets’ folder
    &lt;ul&gt;
      &lt;li&gt;&lt;img src=&quot;/assets/building-second-brain/obsidian-attachments-download.png&quot; alt=&quot;&quot; /&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;transforming-flat-documents-to-wiki&quot;&gt;Transforming flat documents to wiki&lt;/h3&gt;

&lt;p&gt;Now that we have the ingredients - “Building Effective AI Agent” note and images under the ‘raw’ folder, we are ready to kick off the pipeline. Open a terminal in the ‘test’ folder and run &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;claude&lt;/code&gt;, and install my &lt;a href=&quot;https://github.com/tom5610/llm-wiki/tree/main&quot;&gt;llm-wiki plugin&lt;/a&gt; to ingest documents.&lt;/p&gt;

&lt;p&gt;To set up the environment, run these commands on Claude Code, or refer to the screen dump.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;# register the plugin &lt;/span&gt;
/plugin marketplace add tom5610/llm-wiki

&lt;span class=&quot;c&quot;&gt;# install the plugin &lt;/span&gt;
/plugin &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;llm-wiki@llm-wiki-plugins

&lt;span class=&quot;c&quot;&gt;# reload the plugin so that the skills could be loaded&lt;/span&gt;
/reload-plugins

&lt;span class=&quot;c&quot;&gt;# [optional] use &apos;max&apos; effort&lt;/span&gt;
/effort max

&lt;span class=&quot;c&quot;&gt;# about model, highly recommend &apos;Opus&apos; / &apos;Sonnet&apos;&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# /model&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Reference Claude Code terminal&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/building-second-brain/cc-terminal-llm-wiki-installation.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Once the llm-wiki skill(s) are ready,  use the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ingest&lt;/code&gt; skill to transform the document to wiki.&lt;/p&gt;

&lt;p&gt;Run this in Claude Code:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;/ingest &lt;span class=&quot;s2&quot;&gt;&quot;raw/Building Effective AI Agents.md&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;What happens during ingest:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ingest&lt;/code&gt; skill standardizes the transformation pipeline. Claude Code will think and plan between steps.&lt;/li&gt;
  &lt;li&gt;When starting from scratch, Claude Code will instruct to create the related folders under ‘wiki’, and ask for permission before doing so. For file editing, press ‘shift + tab’ to allow all.&lt;/li&gt;
  &lt;li&gt;There are 5 steps in the process:
    &lt;ul&gt;
      &lt;li&gt;Read &amp;amp; Comprehend&lt;/li&gt;
      &lt;li&gt;Discuss with User (build wiki by lens?)&lt;/li&gt;
      &lt;li&gt;Plan the Transform&lt;/li&gt;
      &lt;li&gt;Write and Integrate&lt;/li&gt;
      &lt;li&gt;File &amp;amp; Report&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Reference process details:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/building-second-brain/llm-wiki-ingest-process.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;navigate-wiki-with-obsidian&quot;&gt;Navigate wiki with Obsidian&lt;/h3&gt;

&lt;p&gt;Once wiki creation is done, open the ‘test’ vault in Obsidian to navigate your knowledge base.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What does a generated wiki page look like?&lt;/strong&gt; Here’s a sample concept page generated from the “Building Effective Agents” article. Notice how the LLM extracts a focused concept, adds cross-references via wiki-links, and cites the source:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/building-second-brain/obsidian-note-output-example.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;And here’s the full graph view - each node is a concept page, each edge a wiki-link:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/building-second-brain/obsidian-note-graph.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;
&lt;h2 id=&quot;whats-next&quot;&gt;What’s Next&lt;/h2&gt;

&lt;p&gt;You now have a working pipeline: clip an article, run /ingest, and browse structured knowledge in Obsidian. One article in, a connected wiki out - in about 4-8 minutes.&lt;/p&gt;

&lt;p&gt;A few things to try from here:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;em&gt;Ingest 2-3 more articles&lt;/em&gt; on a related topic and watch the cross-references multiply&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Open Obsidian’s graph view&lt;/em&gt; and look for unexpected connections between concepts&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Ask questions against&lt;/em&gt; your wiki using the query skill (covered in Part 2)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Part 2 will cover:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;em&gt;Query flow&lt;/em&gt; - asking questions against your wiki with citations&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Feeding insights back&lt;/em&gt; - promoting good answers into new wiki pages&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Maintenance&lt;/em&gt; - keeping your wiki healthy as it grows (orphan detection, missing links, stale pages)&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Extract insights&lt;/em&gt; - extract knowledge / insights for your downstream tasks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The pipeline does the heavy lifting, but the learning still happens when you decide which connections matter, which concepts to dive deeper on, and what lens to bring.
The tool builds the scaffolding - you build the &lt;strong&gt;understanding&lt;/strong&gt;.&lt;/p&gt;

&lt;h2 id=&quot;reference-resources&quot;&gt;Reference Resources&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/tom5610/llm-wiki/tree/main&quot;&gt;llm-wiki plugin&lt;/a&gt; - my curated llm-wiki skills&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f&quot;&gt;llm-wiki&lt;/a&gt; gist - Andrej Karpathy’s llm-wiki recipe&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.anthropic.com/engineering/building-effective-agents&quot;&gt;Building effective agents&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>Building Clip Buddy with Claude Code</title>
   <link href="https://tom5610.github.io/2026/04/06/building-clip-buddy-with-claude-code/"/>
   <updated>2026-04-06T00:00:00+00:00</updated>
   <id>https://tom5610.github.io/2026/04/06/building-clip-buddy-with-claude-code</id>
   <content type="html">&lt;blockquote&gt;
  &lt;p&gt;This blog shares my experience building &lt;a href=&quot;https://github.com/tom5610/clip-buddy&quot;&gt;Clip Buddy&lt;/a&gt;, backed by Lenny and Boris’s awesome podcast — &lt;a href=&quot;https://www.youtube.com/watch?v=We7BZVKbCVw&quot;&gt;Head of Claude Code: What happens after coding is solved - Boris Cherny&lt;/a&gt;.&lt;/p&gt;

  &lt;p&gt;&lt;a href=&quot;https://github.com/tom5610/clip-buddy&quot;&gt;Clip Buddy&lt;/a&gt; takes any video URL, extracts the audio, transcribes it, and produces structured analysis — key arguments, speaker identification, and an interactive chat for deep-diving into specific topics.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;my-problem&quot;&gt;My Problem&lt;/h2&gt;

&lt;p&gt;One day, my account manager threw me a customer CEO’s podcast link, talking about their growth journey, business strategies, and technical challenges. I knew I had to listen. This was critical context for understanding their trajectory and potential needs. But between travel schedules and competing priorities, I knew I wouldn’t give it the deep attention it deserved.&lt;/p&gt;

&lt;p&gt;I started thinking why not use AI to back me up, help me navigate the listening / watching journey, and coach me to deep-dive into clips collaboratively. That would be ideal, but I couldn’t find any tools doing exactly that. Hence, I wanted to build one, maybe with Claude Code?&lt;/p&gt;

&lt;h2 id=&quot;the-engineers-paradox-17-years-of-proper-engineering&quot;&gt;The Engineer’s Paradox: 17+ Years of “Proper” Engineering&lt;/h2&gt;

&lt;p&gt;But I believe in craftsmanship. I have 17 years of backend development experience. I built systems the “right way” — choosing language(s) carefully, selecting tech stacks thoughtfully, designing POCs methodically. I knew these choices would paralyze me — and they did.&lt;/p&gt;

&lt;p&gt;I had the idea. I had the outcome I wanted. But the process felt like climbing a mountain just to start.&lt;/p&gt;

&lt;p&gt;I knew Claude Code may be useful, but I was so reluctant to give it a shot because of my concerns:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Would it rob me of the joy of building?&lt;/li&gt;
  &lt;li&gt;Would I end up shipping something I didn’t actually understand?&lt;/li&gt;
  &lt;li&gt;Would I just become a prompt engineer rather than a real engineer?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then I heard Boris talk about the printing press analogy (FYI — &lt;a href=&quot;https://www.youtube.com/watch?v=We7BZVKbCVw&amp;amp;t=1959s&quot;&gt;reference clip timestamp&lt;/a&gt;).&lt;/p&gt;

&lt;h2 id=&quot;the-turning-point-the-printing-press-analogy&quot;&gt;The Turning Point: The Printing Press Analogy&lt;/h2&gt;

&lt;p&gt;Boris described how the printing press transformed literacy:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Before&lt;/strong&gt;:&lt;br /&gt;
Literacy was ~1% globally (mostly scribes who manually copied texts)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;After&lt;/strong&gt;:&lt;br /&gt;
Literacy expanded to ~70% in about 50 years&lt;/p&gt;

&lt;p&gt;But here’s the part that struck me: the printing press didn’t make scribes obsolete. It freed them from manual copying so they could focus on craft — on thinking about what they were copying rather than just copying it.&lt;/p&gt;

&lt;p&gt;A scribe might have worried: “Will the printing press steal my job? Will I stop being a craftsman?”&lt;/p&gt;

&lt;p&gt;The answer was no. Scribes who adopted the printing press became more valuable, not less. They could focus on editing, translating, designing beautiful layouts — the meaningful work. As Boris put it, “in the 50 years after the printing press was built, there was more printed material created than in the 1,000 years before.” (&lt;a href=&quot;https://www.youtube.com/watch?v=We7BZVKbCVw&amp;amp;t=2002&quot;&gt;reference clip timestamp&lt;/a&gt;) The tool didn’t diminish output — it multiplied it.&lt;/p&gt;

&lt;p&gt;Something shifted in my mind.&lt;/p&gt;

&lt;p&gt;Maybe Claude Code wasn’t about speed. Maybe it was about democratization freeing me to stop worrying about boilerplate &amp;amp; tech stack selection, and start focusing on thinking — on the architecture, the user experience, the learning.&lt;/p&gt;

&lt;p&gt;If scribes could use the printing press to free time from manual copying and focus on craft, then maybe I could use Claude Code to free time from tedious implementation and focus on building something I understand deeply.&lt;/p&gt;

&lt;p&gt;I decided to try.&lt;/p&gt;

&lt;h2 id=&quot;the-workflow-three-steps-that-changed-everything&quot;&gt;The Workflow: Three Steps That Changed Everything&lt;/h2&gt;

&lt;p&gt;In the podcast, Boris emphasized always using the most capable model, not boxing the model in, and leveraging Plan Mode. In addition, he envisioned a near-term future where traditional role boundaries dissolve — ‘software engineer’ gives way to ‘builder’.&lt;/p&gt;

&lt;p&gt;Could a tool really shift that identity? Here’s the workflow that changed my mind.&lt;/p&gt;

&lt;h2 id=&quot;step-1-start-with-outcome-not-specs-yet&quot;&gt;Step 1: Start with Outcome, Not Specs (yet)&lt;/h2&gt;

&lt;p&gt;I started with the following prompt on the app development, with Claude Code coaching me to drive a clear outcome:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Hi Claude, please brainstorm with me without writing any code. Strictly follow a structured process to inspire me to clarify business value and requirements of an application. Remember one question at a time. Once we finish, please summarize our discussion and requirements into ‘./doc/uclip-intro.md’. Let’s start.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Notice what I didn’t do:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Didn’t specify features (“build audio download, transcripts, and chat”)&lt;/li&gt;
  &lt;li&gt;Didn’t prescribe a tech component / stack (“use Python with FastAPI”)&lt;/li&gt;
  &lt;li&gt;Didn’t write step-by-step instructions (“first do X, then do Y”)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I used Plan Mode to steer collaborative iteration before execution, then auto-accepted edits to produce the product intro in one shot.&lt;/p&gt;

&lt;p&gt;Claude Code asked clarifying questions:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Who are the users? (Me, busy professionals)&lt;/li&gt;
  &lt;li&gt;What’s the core objective? (Extract insights efficiently; deep-dive on specific topics)&lt;/li&gt;
  &lt;li&gt;What interactions do users need? (Summary, argument flow, structural insights, real-time Q&amp;amp;A)&lt;/li&gt;
  &lt;li&gt;What technical constraints exist? (I don’t need to scale to millions; I need something I can iterate on fast)&lt;/li&gt;
  &lt;li&gt;What technical components are being used? (python, streamlit with yt-dlp package, etc.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As we discussed, Claude Code designed the product intro, which I used as the basis for a more detailed design spec, and tried Plan Mode to produce a draft.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key insight&lt;/strong&gt;: By not boxing Claude Code in with prescriptive steps, it could reason about the full picture — user needs, architecture, scalability — and propose something more coherent than I would have in isolation.&lt;/p&gt;

&lt;h2 id=&quot;step-2-iterate-on-outcomes-not-code&quot;&gt;Step 2: Iterate on Outcomes, Not Code&lt;/h2&gt;

&lt;p&gt;While Claude Code may generate surprisingly strong results, the real unlock is iterating on outcomes, not code.&lt;/p&gt;

&lt;p&gt;The initial implementation of Chat function (the feature allowing users to chat with AI on the clip content) was not useful — the interaction was not conversational style and each turn could take 20–30s, e.g. when I asked for “brainstorm a problem, one question at a time”, Chat function threw multiple questions at once, rather than one at a time. Likely the system prompt and prompt template in Chat function weren’t good enough. Instead of jumping to solutions, I collaborated with Claude Code to understand the problem first.&lt;/p&gt;

&lt;p&gt;Then, I used this outcome-focused feedback:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;In the Chat function, I tried to guide the chat service to collaborate with me one question at a time, but it responds with a bunch of questions. Could you please review the chat prompt and analyze what I may improve? Please don’t implement any solutions, but collaborate with me, help me understand, until I confirm to implement it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Notice what I did here:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Described the outcome I wanted (one question at a time)&lt;/li&gt;
  &lt;li&gt;Described the current behavior (bunch of questions)&lt;/li&gt;
  &lt;li&gt;Asked Claude Code to analyze, not execute (“don’t implement”)&lt;/li&gt;
  &lt;li&gt;Invited collaboration (help me understand)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Claude Code helped me think through the UX philosophy. I learned why one question at a time matters for conversational flow. When I was happy with the collaborative suggestion, I let Claude Code act on it.&lt;/p&gt;

&lt;p&gt;In addition, it turned out the initial implementation passed the entire transcript as context. What a naive approach! Maybe I could ask it to brainstorm with me on better options, but I paused and reflected how I actually converse with people — listening first, understanding intent, then responding. Could Chat function do the same? I tried this:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Would it be possible to review the user’s question, clarify the intention, then decide what context we need to provide to answer the question / coach the user? THINK HARD on this. Don’t implement anything until my confirmation.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Claude Code redesigned the entire chat flow:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Before&lt;/strong&gt;:&lt;br /&gt;
User asks question → Retrieve entire transcript as context → LLM generates response (slow, generic)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;After&lt;/strong&gt;:&lt;br /&gt;
User asks question → Intention discovery → Context construction (retrieve only relevant parts for the intention) → LLM invocation → Answer (fast, targeted, collaborative)&lt;/p&gt;

&lt;p&gt;This redesign taught me more about systems thinking than I expected. This kind of insight felt more natural when arrived at collaboratively than when designed in isolation.&lt;/p&gt;

&lt;p&gt;Meanwhile, the redesign improved latency. Rather than putting entire transcript as context, it became frugal with context usage and achieved faster response each turn.&lt;/p&gt;

&lt;p&gt;Overall, the chat changed everything about the user experience, from a Q&amp;amp;A function to a thoughtful interaction: Question → Intention Discovery → Context Construction → LLM Invocation → Answer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key insight&lt;/strong&gt;: My building process is to collaborate with Claude Code and iterate on outcomes, rather than coding.&lt;/p&gt;

&lt;h2 id=&quot;step-3-when-it-breaks-collaborate-dont-command&quot;&gt;Step 3: When It Breaks: Collaborate, Don’t Command&lt;/h2&gt;

&lt;p&gt;Over the app building process, not every session was smooth — Claude Code sometimes went in circles on edge cases, and I had to learn when to reset context vs. push forward.&lt;/p&gt;

&lt;p&gt;Hence, I managed context carefully. On one hand, once I finished a task, I always used ‘/clear’ to clear up the session so that I could start a brand-new conversation on the next. I wanted to keep it simple and avoid unnecessary context pollution. On the other hand, working on context is interesting. Given Claude models are so good at using tools, very often Claude Code could use bash commands to find information / context to complete tasks autonomously. However, there were some edge cases.&lt;/p&gt;

&lt;p&gt;There was a bug when doing speaker identification in ‘Deep Dive’ analysis, and it prompted “Expecting value: line 1 column 1 (char 0)”. I took it easy and just asked Claude Code to “please investigate the error” with the error message. Claude Code worked like a charm — it formed a structured process to resolve the bug, and confirmed the fix worked. Everything sounded perfect, but the fix didn’t work at all. Next, I tried to be patient — “your fix doesn’t work, please investigate again”. Then, Claude Code worked harder but didn’t deliver any proper fixes…&lt;/p&gt;

&lt;p&gt;Maybe not every session was as smooth as steps 1 &amp;amp; 2 suggest. I got frustrated, and kept asking Claude Code to “FIX It…”. Guess what?! The bug still existed.&lt;/p&gt;

&lt;p&gt;So I did what most frustrated engineers do — I kept slamming the same button. Then, I heard this voice in my mind — “Ask not what the model can do for you”, from Boris (&lt;a href=&quot;https://www.youtube.com/watch?v=We7BZVKbCVw&amp;amp;t=3857s&quot;&gt;reference clip timestamp&lt;/a&gt;). Maybe I should “ask what I can do for the model”?! First, I googled the error message, but I couldn’t get much useful information. Then, I decided to collaborate with Claude Code to know more -&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;your fix doesn’t work, could you please analyze the issue and explain what may be missed. If you need more information for the investigation, please let me know.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This one did change the game a bit. Claude Code shifted to focus on analyzing the problem (but not implementing the fix). It nailed down the culprit as an empty string being parsed by JSON. Then, where was the empty string from and what was that for? While reading the code, I started realizing that the function made an LLM call to identify speakers — the system prompt had a dedicated instruction for multi-speaker transcript — “You are analyzing a multi-speaker transcript to identify speakers …”. However, when I tried to analyze a single-speaker clip, the LLM call returned an empty string instead of proper JSON, and resulted in the JSON parsing error.&lt;/p&gt;

&lt;p&gt;I tuned the prompt template to support single-speaker clip explicitly, and gave this instruction to improve further -&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The speaker identification fails on single-speaker videos — the model seems confused when there’s only one speaker label. I think the prompt saying ‘multi-speaker transcript’ is misleading it. Can you fix the prompt to handle both single and multi-speaker cases?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Claude Code did better prompt engineering — being specific and direct on return value — “Always return the JSON array even if there is only one speaker.” Surely, the fix worked perfectly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key insight&lt;/strong&gt;: When Claude Code fails, the fix is usually better context, not more pressure.&lt;/p&gt;

&lt;h2 id=&quot;not-the-end-but-a-new-builder-path&quot;&gt;Not the End, But a New Builder Path&lt;/h2&gt;

&lt;p&gt;Remember that CEO podcast I couldn’t properly digest? It was a 53-minute podcast with 2 hosts and the CEO. It took me about 10 minutes to run through &lt;a href=&quot;https://github.com/tom5610/clip-buddy&quot;&gt;Clip Buddy&lt;/a&gt;; in addition, I conducted an in-depth chat session to explore the business strategy and planning, then shared the analysis with my account manager. He was thrilled.&lt;/p&gt;

&lt;p&gt;Did Claude Code rob me of the joy of building? No — the joy shifted from typing to thinking. Did I ship something I didn’t understand? I understand it more deeply than most code I’ve written, because I had to articulate my intent clearly enough for a collaborator to act on it. Am I just a prompt engineer? No — I’m still the architect. Claude Code is the printing press.&lt;/p&gt;

&lt;p&gt;That’s not the end, but it paved a new path for me to build, to learn from, and to collaborate with Claude Code.&lt;/p&gt;
</content>
 </entry>
 

</feed>
