<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Zhengxin</title>
    <description>The latest articles on DEV Community by Zhengxin (@_94be737e156beb4d74df2).</description>
    <link>https://dev.to/_94be737e156beb4d74df2</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4043494%2F624f59c0-0fbb-4fb6-a54b-92fb2d93c548.jpg</url>
      <title>DEV Community: Zhengxin</title>
      <link>https://dev.to/_94be737e156beb4d74df2</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/_94be737e156beb4d74df2"/>
    <language>en</language>
    <item>
      <title>How can I do，let more people read My post?</title>
      <dc:creator>Zhengxin</dc:creator>
      <pubDate>Sat, 25 Jul 2026 17:06:23 +0000</pubDate>
      <link>https://dev.to/_94be737e156beb4d74df2/how-can-i-dolet-more-people-read-my-post-13nc</link>
      <guid>https://dev.to/_94be737e156beb4d74df2/how-can-i-dolet-more-people-read-my-post-13nc</guid>
      <description></description>
    </item>
    <item>
      <title>From One-Shot LLM to Multi-Turn Agent: How I Rebuilt My Text-to-Diagram Tool</title>
      <dc:creator>Zhengxin</dc:creator>
      <pubDate>Sat, 25 Jul 2026 16:57:24 +0000</pubDate>
      <link>https://dev.to/_94be737e156beb4d74df2/from-one-shot-llm-to-multi-turn-agent-how-i-rebuilt-my-text-to-diagram-tool-204l</link>
      <guid>https://dev.to/_94be737e156beb4d74df2/from-one-shot-llm-to-multi-turn-agent-how-i-rebuilt-my-text-to-diagram-tool-204l</guid>
      <description>&lt;h2&gt;
  
  
  The problem: one LLM call isn't enough
&lt;/h2&gt;

&lt;p&gt;I built an AI tool that turns natural language into editable diagrams. You describe a flow, an LLM generates Mermaid code, and the result renders in real time.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;v1&lt;/strong&gt; was a single LLM call: &lt;code&gt;user input → LLM → diagram&lt;/code&gt;. After a few days in production, two failure modes kept showing up:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Syntax errors with no recovery.&lt;/strong&gt; The generated Mermaid code &lt;em&gt;looks&lt;/em&gt; correct, but Mermaid throws a &lt;code&gt;Parse error&lt;/code&gt; and the user sees a red stack trace. They leave.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Silent semantic drift.&lt;/strong&gt; The user asks for "a login flow" — the LLM helpfully adds a "send verification code" actor. It doesn't ask. It doesn't tell you it added anything.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Neither problem can be reliably fixed by "tweaking the prompt." The first needs &lt;strong&gt;a second chance&lt;/strong&gt;; the second needs &lt;strong&gt;an audit trail&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So v2 became an &lt;strong&gt;agent&lt;/strong&gt;: multi-turn dialogue, self-correction, and — critically — a memory of what the user said and didn't say. This post is about what that agent actually looks like.&lt;/p&gt;

&lt;h2&gt;
  
  
  Core insight: this isn't one loop, it's two
&lt;/h2&gt;

&lt;p&gt;What looks like "a multi-turn diagram generator" is actually two loops with different goals:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Outer loop · Understand the request
User speaks → extract facts → detect gaps → ask → refine

Inner loop · Generate and repair
Structured spec → generate code → validate → fix → output
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The outer loop asks, &lt;strong&gt;"Do I understand the request well enough?"&lt;/strong&gt; The inner loop asks, &lt;strong&gt;"Is the generated code correct?"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Trying to do both in one loop leads to the question &lt;strong&gt;"should the agent ask the user about this ambiguity?"&lt;/strong&gt; — a question with no answer, because outer-loop ambiguity (user hasn't specified) and inner-loop ambiguity (generation went off-script) are fundamentally different.&lt;/p&gt;

&lt;h2&gt;
  
  
  The agent is a team — divide the work
&lt;/h2&gt;

&lt;p&gt;I model the agent as &lt;strong&gt;a law firm handling a case&lt;/strong&gt;. Each role does exactly one thing:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;th&gt;Does&lt;/th&gt;
&lt;th&gt;Does NOT&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Clerk&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Records facts the user explicitly stated&lt;/td&gt;
&lt;td&gt;Never guesses or infers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Auditor&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Notes which fields in the record are empty&lt;/td&gt;
&lt;td&gt;Doesn't decide whether to ask&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Planner&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Decides whether/what to ask the user&lt;/td&gt;
&lt;td&gt;Doesn't ask directly&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Lawyer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Drafts Mermaid, filling reasonable gaps&lt;/td&gt;
&lt;td&gt;Leaves assumptions unrecorded&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Reviewer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Checks syntax + flags unauthorized additions&lt;/td&gt;
&lt;td&gt;Rewrites the user's requirements&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Front Desk&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Sequences the roles, maintains the case file&lt;/td&gt;
&lt;td&gt;Makes no judgment calls&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Initially I stuffed all of this into a single mega-prompt. Debugging was hell — I couldn't tell whether the &lt;strong&gt;Clerk hallucinated a fact&lt;/strong&gt; or whether the &lt;strong&gt;Lawyer improvised a character&lt;/strong&gt;. Splitting them out means each role is a pure function: same input → same output, testable in isolation.&lt;/p&gt;

&lt;h3&gt;
  
  
  The call graph: Front Desk orchestrates everyone
&lt;/h3&gt;

&lt;p&gt;The six roles don't operate in parallel — they're a pipeline, and &lt;strong&gt;Front Desk is the sole orchestrator&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User message
    ↓
  Front Desk  (append to conversation history)
    ↓
  Clerk    ──→ extract facts from history, populate the case file
    ↓
  Auditor  ──→ list which fields are still empty
    ↓
  Planner  ──→ decide next action using (missing list + budget + past questions)
    │
    ├─ "Ask one"     ──→ Front Desk renders question ──→ User
    │                                 ↑  (next turn loops back to top)
    │
    └─ "We have enough" ──→ Lawyer  ──→ generate Mermaid code
                                          ↓
                                    Reviewer · syntax check
                                          │
                                          ├─ FAIL ──→ inner repair loop (back to Lawyer)
                                          │
                                          └─ OK   ──→ Reviewer · semantic check
                                                          ↓
                                                    Unauthorized additions?
                                                          │
                                                    ├─ Yes → diagram + follow-up question
                                                    │
                                                    └─ No  → diagram only
                                                              ↓
                                                             User
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A few points worth noting:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Front Desk is the only stateful component.&lt;/strong&gt; Every other role is a pure function. Multi-turn memory lives entirely in the case file that Front Desk maintains.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Planner is the only branching point.&lt;/strong&gt; The agent's "ask vs draw" decision happens in one function, nowhere else.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The inner repair loop runs between Lawyer and Reviewer&lt;/strong&gt; without bothering the user. Mermaid syntax self-healing lives here.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Semantic issues don't block output&lt;/strong&gt; — they're delivered &lt;em&gt;alongside&lt;/em&gt; the diagram ("here's your diagram, by the way, I added this thing — want to keep it?"). Users find it easier to judge with the picture in front of them.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The foundation rule: Clerk is conservative, Lawyer can improvise
&lt;/h3&gt;

&lt;p&gt;If you take one thing away from this post, take this.&lt;/p&gt;

&lt;p&gt;User says: &lt;em&gt;"Draw a login flow. User enters password, system verifies, returns result."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Clerk&lt;/strong&gt; outputs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;actors&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;system&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="nx"&gt;events&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;system&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;action&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;enter password&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;system&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;action&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;return result&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="nx"&gt;sync&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;unknown&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;    &lt;span class="c1"&gt;// ← user didn't say sync/async. NEVER guess.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That &lt;code&gt;sync: "unknown"&lt;/code&gt; is the &lt;strong&gt;signal that triggers a question&lt;/strong&gt; — the Auditor flags it, the Planner decides whether to ask.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If the Clerk "helpfully" fills it in&lt;/strong&gt; ("login is usually sync"), that signal is destroyed. The agent can no longer distinguish "user actually said sync" from "I made it up." Every follow-up decision downstream is corrupted.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Lawyer operates under a different constraint:&lt;/strong&gt; it may fill in a "verification service" as a reasonable assumption, but that assumption &lt;strong&gt;must be written to the case file's &lt;code&gt;assumptions&lt;/code&gt; slot&lt;/strong&gt;. Later the Reviewer reconciles every element in the diagram: it must trace back to either "the user said this" or "the Lawyer assumed this." Anything that traces to neither is called an &lt;strong&gt;unauthorized addition&lt;/strong&gt;, and it becomes a follow-up question ("I added X. Keep it?").&lt;/p&gt;

&lt;p&gt;This one rule solves a class of nasty bugs by itself — including the classic "user said 'no X', LLM keeps re-adding X on regeneration." Because unauthorized additions are &lt;em&gt;detectable&lt;/em&gt;, the agent surfaces them proactively instead of leaving the user to catch them.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Planner: one function, one decision
&lt;/h2&gt;

&lt;p&gt;My favorite architectural decision: &lt;strong&gt;every "should we ask the user?" judgment lives in a single pure function&lt;/strong&gt; — the Planner.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Auditor and Reviewer &lt;strong&gt;only identify problems&lt;/strong&gt; — what's missing, what's wrong.&lt;/li&gt;
&lt;li&gt;Planner &lt;strong&gt;takes three inputs&lt;/strong&gt;: candidate question pool, remaining budget, and past questions asked.&lt;/li&gt;
&lt;li&gt;Planner &lt;strong&gt;outputs one of three&lt;/strong&gt;: &lt;code&gt;AskOne&lt;/code&gt; / &lt;code&gt;ProceedToDraw&lt;/code&gt; / &lt;code&gt;AskConfirm&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each session has a &lt;strong&gt;global budget&lt;/strong&gt; (say, 5 agent-initiated questions). Note the framing: &lt;strong&gt;only the agent's proactive questions consume the budget.&lt;/strong&gt; User-initiated changes — modifying the spec, tweaking the diagram, requesting a redraw — do not consume it. This prevents the kind of UX where users become more reluctant to speak the longer they use the tool.&lt;/p&gt;

&lt;p&gt;The practical payoff: &lt;strong&gt;want to change ask frequency or budget policy? Edit one function.&lt;/strong&gt; No other component moves.&lt;/p&gt;

&lt;h2&gt;
  
  
  A walkthrough — 4 turns of dialogue
&lt;/h2&gt;

&lt;p&gt;Architecture is easier when you see it in motion:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Turn 1  User: "Draw a user registration sequence diagram"
        Clerk    → { actors: ["user"], events: [], sync: unknown }
        Auditor  → missing: actors / events / sync
        Planner (budget=5) → ask actors
        Agent: "Besides the user, which other roles are involved?"
        [budget: 5 → 4]

Turn 2-3  User: frontend / backend / database, plus each step
          Planner asks per turn, budget: 4 → 3 → 2

Turn 4  User: "Just draw it and see"  ← skip clarification, no budget cost
        Lawyer  gen #1 → helpfully adds "send email notification" (never mentioned)
        Reviewer syntax check → FAIL (undeclared email actor)
        Inner repair loop → Lawyer gen #2, drops email → syntax OK
        Reviewer semantic check → 3 response arrows not grounded in the case file
                                → unauthorized additions
        Output: diagram + prompt "I added a full response flow. Keep it?"

Turn 5  User: "No responses. Just draw up to the database write."
        Agent records "response flow" as a negative fact (explicitly rejected)
        Regenerate → no response arrows
        [budget unchanged — this is user reviewing output, not agent asking]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;5-unit budget, 3 agent-initiated questions used, 2 in reserve.&lt;/strong&gt; That's the flexibility of a global budget with clean semantics.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it takes to add a new diagram type
&lt;/h2&gt;

&lt;p&gt;The system supports 8 diagram types: Sequence · Flowchart · ERD · State · Class · Mindmap · Gantt · Architecture.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Adding a new type&lt;/strong&gt; means implementing four type-specific pieces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Clerk&lt;/strong&gt; — how to extract facts from natural language for this type&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auditor&lt;/strong&gt; — which fields are required vs optional&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reviewer&lt;/strong&gt; — what counts as an unauthorized addition&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Question templates&lt;/strong&gt; — how to phrase prompts (a sequence diagram asks about "actors", a class diagram asks about "entities")&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Planner / Front Desk / state store don't move&lt;/strong&gt; — they don't care what type of diagram is being drawn.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three takeaways worth stealing
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Split the two loops.&lt;/strong&gt; "Understand the request" and "generate the code" are different problems that happen to share state. Fusing them creates the unanswerable "should we ask about this ambiguity?" trap.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Clerk conservative + Lawyer improvises, strictly separated.&lt;/strong&gt; If your Clerk fills in gaps, you've handed the agent's judgment to the LLM's intuition. Every Lawyer assumption must be written down so the Reviewer can audit it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;All policy lives in one Planner function.&lt;/strong&gt; Want to change ask cadence, budget policy, or the "when to confirm" heuristic? One file. Zero downstream ripples.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;I'm currently working on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Auto-classification confidence calibration (when the user doesn't state the diagram type, how often does the LLM guess wrong?)&lt;/li&gt;
&lt;li&gt;Extending the "unauthorized addition" rule set for each diagram type&lt;/li&gt;
&lt;li&gt;One-click session replay: serialize &lt;code&gt;prompt + spec + generated diagram&lt;/code&gt; into a shareable link, so bug reports can replay the entire agent state&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're building a similar multi-turn LLM agent — whether for diagrams, SQL, API mocks, or something else — these three principles saved me weeks of pain. &lt;strong&gt;An agent is not just "call the LLM more times."&lt;/strong&gt; It's a team designed to self-correct, remember negative feedback, and produce an audit trail for every decision.&lt;/p&gt;

&lt;p&gt;Try it: &lt;a href="https://text2everything.vip/" rel="noopener noreferrer"&gt;text2everything.vip&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
    </item>
    <item>
      <title>Beyond the IDE: Building an AI-Native Development Workflow with Obsidian</title>
      <dc:creator>Zhengxin</dc:creator>
      <pubDate>Thu, 23 Jul 2026 10:23:52 +0000</pubDate>
      <link>https://dev.to/_94be737e156beb4d74df2/beyond-the-ide-building-an-ai-native-development-workflow-with-obsidian-14mp</link>
      <guid>https://dev.to/_94be737e156beb4d74df2/beyond-the-ide-building-an-ai-native-development-workflow-with-obsidian-14mp</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Code is no longer the primary artifact. Context is.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  1. AI Has Outgrown the IDE: From an IDE to a "Cognitive Layer"
&lt;/h2&gt;

&lt;p&gt;Using IntelliJ IDEA with AI plugins exposes several limitations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You ask a question, AI generates a code snippet, and you manually review the result.&lt;/li&gt;
&lt;li&gt;Previous conversations with AI are difficult to search.&lt;/li&gt;
&lt;li&gt;As conversations grow longer, the AI loses focus due to accumulated context. Start a new session, and its memory resets—you have to teach it the project all over again.&lt;/li&gt;
&lt;li&gt;A single feature often spans multiple microservices, meaning the implementation lives across several codebases.&lt;/li&gt;
&lt;li&gt;From IDEA's perspective, there's only code. It has no awareness of database schemas, middleware, infrastructure, or architecture documentation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Traditional IDEs are no longer sufficient for AI-assisted software development.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. What Is Obsidian? A Local-First Markdown Knowledge Base
&lt;/h2&gt;

&lt;p&gt;Official website: &lt;a href="https://obsidian.md/" rel="noopener noreferrer"&gt;https://obsidian.md/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Obsidian is a &lt;strong&gt;local-first knowledge management tool built entirely on plain Markdown files&lt;/strong&gt;. Its core strengths include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Local ownership.&lt;/strong&gt; Every note is simply a &lt;code&gt;.md&lt;/code&gt; file stored on your disk. Nothing is locked inside a proprietary cloud service. Everything works offline and remains fully under your control.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bidirectional links (Wiki-links).&lt;/strong&gt; &lt;code&gt;[[note-name]]&lt;/code&gt; connects notes into a knowledge graph, while backlinks automatically show every page that references the current one.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Graph View.&lt;/strong&gt; Visualize the relationships between notes to understand the structure of your knowledge base at a glance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rich plugin ecosystem.&lt;/strong&gt; Community plugins extend Obsidian into a task manager, calendar, Dataview database, AI workspace, and much more.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI-friendly plain text.&lt;/strong&gt; Since everything is UTF-8 Markdown, AI models can read, write, diff, and edit notes directly—without requiring the specialized plugin bridges typical IDEs need.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Looking back at the pain points of using IDEA with AI, Obsidian addresses every one of them:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;IDEA + AI Problem&lt;/th&gt;
&lt;th&gt;Obsidian Solution&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AI conversations become disposable and difficult to review&lt;/td&gt;
&lt;td&gt;Notes are persistent documents. Every AI edit is preserved, traceable, and reviewable.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Conversation history is hard to search&lt;/td&gt;
&lt;td&gt;Full-text search, backlinks, and tags turn conversations into searchable knowledge assets.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Context grows too large, while new sessions lose memory&lt;/td&gt;
&lt;td&gt;Project context is explicitly stored in notes. Simply have the AI read the notes to restore context.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;One feature spans multiple microservices&lt;/td&gt;
&lt;td&gt;A single vault can contain documentation for Services A, B, and C, with links connecting them.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IDEA only understands source code&lt;/td&gt;
&lt;td&gt;The vault can hold architecture notes, database schemas, Kafka topics, deployment diagrams, and more alongside the code.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;In other words, Obsidian is &lt;strong&gt;not replacing IDEA as your code editor&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It replaces IDEA as your &lt;strong&gt;cognitive layer&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You continue writing code inside IDEA, while &lt;strong&gt;everything surrounding the code&lt;/strong&gt;—design decisions, AI conversations, database schemas, architectural diagrams, and cross-service relationships—lives permanently inside Obsidian.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Environment Setup: Obsidian + Claudian
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Install Obsidian and enable community plugins.&lt;/li&gt;
&lt;li&gt;Install the &lt;strong&gt;Claudian&lt;/strong&gt; plugin from GitHub,&lt;a href="https://github.com/YishenTu/claudian" rel="noopener noreferrer"&gt;https://github.com/YishenTu/claudian&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  4. The Theory: Karpathy's "Wiki as Codebase"
&lt;/h2&gt;

&lt;p&gt;Source: &lt;a href="https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f" rel="noopener noreferrer"&gt;https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f&lt;/a&gt;&lt;br&gt;
Andrej Karpathy's &lt;em&gt;Wiki as Codebase&lt;/em&gt; gist.&lt;/p&gt;

&lt;p&gt;He summarizes the idea in a single sentence:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Obsidian is the IDE; the LLM is the programmer; the wiki is the codebase."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Every note you write is no longer just documentation.&lt;/p&gt;

&lt;p&gt;Instead, it becomes part of the &lt;strong&gt;codebase maintained by an LLM&lt;/strong&gt;—except that instead of executable instructions, it stores structured knowledge about your project.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.1 The Three-Layer Architecture
&lt;/h3&gt;

&lt;p&gt;Karpathy divides the system into three layers, corresponding to three types of files inside your vault.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Definition&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Raw Sources&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Immutable source material. Read-only for the LLM.&lt;/td&gt;
&lt;td&gt;Meeting notes, PDFs, code diffs, web clippings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;The Wiki&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Markdown pages generated and maintained by the LLM&lt;/td&gt;
&lt;td&gt;Analysis notes, architecture documentation, ADRs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;The Schema&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Rules that make the LLM a disciplined maintainer&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;CLAUDE.md&lt;/code&gt; at the vault root&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The important insight is that &lt;strong&gt;&lt;code&gt;CLAUDE.md&lt;/code&gt; is much more than project instructions.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It acts as the &lt;strong&gt;schema&lt;/strong&gt; governing the knowledge base.&lt;/p&gt;

&lt;p&gt;The schema determines whether the LLM behaves like an ordinary chatbot—or like a disciplined maintainer of a living wiki.&lt;/p&gt;




&lt;h3&gt;
  
  
  4.2 Three Core Operations
&lt;/h3&gt;

&lt;p&gt;Within this wiki, the LLM performs three kinds of work.&lt;/p&gt;

&lt;h4&gt;
  
  
  Ingest
&lt;/h4&gt;

&lt;p&gt;Consume new raw materials, update multiple wiki pages, and maintain cross-references.&lt;/p&gt;

&lt;h4&gt;
  
  
  Query
&lt;/h4&gt;

&lt;p&gt;Search the wiki, synthesize answers, and write valuable results back as new knowledge pages.&lt;/p&gt;

&lt;h4&gt;
  
  
  Lint
&lt;/h4&gt;

&lt;p&gt;Detect inconsistencies, outdated information, orphan pages, and missing links.&lt;/p&gt;

&lt;p&gt;Most people already perform the first two.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linting is the new capability.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Just as source code benefits from linting, so does your knowledge base.&lt;/p&gt;




&lt;h3&gt;
  
  
  4.3 Why This Is Finally Practical
&lt;/h3&gt;

&lt;p&gt;Organizations have long abandoned internal wikis because &lt;strong&gt;the maintenance cost exceeded the benefit&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Keeping links updated, eliminating contradictions, and maintaining structure simply required too much human effort.&lt;/p&gt;

&lt;p&gt;LLMs remove that bottleneck.&lt;/p&gt;

&lt;p&gt;Humans now focus on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;selecting high-quality source material,&lt;/li&gt;
&lt;li&gt;directing the analysis,&lt;/li&gt;
&lt;li&gt;asking good questions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Meanwhile, the LLM performs all the bookkeeping:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;updating dozens of pages,&lt;/li&gt;
&lt;li&gt;maintaining links,&lt;/li&gt;
&lt;li&gt;synchronizing knowledge,&lt;/li&gt;
&lt;li&gt;resolving inconsistencies.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The breakthrough isn't that Obsidian became more powerful.&lt;/p&gt;

&lt;p&gt;It's that &lt;strong&gt;the cost of maintaining a wiki has shifted from humans to LLMs.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fopkk45rqt048pxa1c7dj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fopkk45rqt048pxa1c7dj.png" alt="Three-Layer Architecture" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Workflow: One Vault, One &lt;code&gt;CLAUDE.md&lt;/code&gt;, Four Everyday Habits
&lt;/h2&gt;

&lt;h3&gt;
  
  
  5.1 One Vault per Project
&lt;/h3&gt;

&lt;p&gt;Instead of storing everything in one giant vault, create one vault for each project.&lt;/p&gt;

&lt;p&gt;Place a &lt;code&gt;CLAUDE.md&lt;/code&gt; file at the root containing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;technology stack&lt;/li&gt;
&lt;li&gt;repository structure&lt;/li&gt;
&lt;li&gt;commit conventions&lt;/li&gt;
&lt;li&gt;common pitfalls&lt;/li&gt;
&lt;li&gt;recurring project context&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Claudian automatically loads this file whenever a new session starts, eliminating the need to repeatedly explain your project.&lt;/p&gt;




&lt;h3&gt;
  
  
  5.2 Typical Development Workflow
&lt;/h3&gt;

&lt;p&gt;The traditional workflow looked like this:&lt;/p&gt;

&lt;p&gt;Open AI sidebar → Ask a question → Copy code → Close sidebar → Lose context.&lt;/p&gt;

&lt;p&gt;The new workflow becomes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a requirement note containing the background, objectives, and constraints.&lt;/li&gt;
&lt;li&gt;Have the AI read the relevant context by linking architecture docs, database schemas, and previous requirement notes with &lt;code&gt;[[...]]&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Collaboratively analyze the problem through conversation.&lt;/li&gt;
&lt;li&gt;Let the AI write important decisions back into the notes.&lt;/li&gt;
&lt;li&gt;Return to IDEA and implement the code.&lt;/li&gt;
&lt;li&gt;Once implementation is complete, record:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;why the design changed,&lt;/li&gt;
&lt;li&gt;lessons learned,&lt;/li&gt;
&lt;li&gt;commit hash.

&lt;ol&gt;
&lt;li&gt;Future work simply reuses these notes as project context.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The mindset changes fundamentally.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI output is no longer disposable conversation.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It becomes permanent project documentation.&lt;/p&gt;




&lt;h3&gt;
  
  
  5.3 High-Frequency Workflows
&lt;/h3&gt;

&lt;p&gt;Some particularly useful habits include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;@&lt;/code&gt;-reference notes&lt;/strong&gt; to inject documents directly into AI conversations, especially for coordinating across services.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Paste code into notes&lt;/strong&gt; and let AI edit it, preserving the entire discussion history.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Architecture Decision Records (ADRs)&lt;/strong&gt; with one note per architectural decision, linked together via wiki links.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Daily Notes&lt;/strong&gt; for debugging and investigation, allowing AI to follow your reasoning process over time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Graph View&lt;/strong&gt; to quickly identify densely connected core modules and isolated knowledge gaps.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  5.4 Division of Responsibilities
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Task&lt;/th&gt;
&lt;th&gt;IntelliJ IDEA&lt;/th&gt;
&lt;th&gt;Obsidian + Claudian&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Coding, debugging, testing&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Breakpoint debugging, profiling&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Requirements analysis&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Architecture design&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Database documentation&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Long AI conversations&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cross-service context&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Team knowledge sharing&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;In short:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IDEA writes the code.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Obsidian manages the brain.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Case Study: A Two-Week Refactoring Project
&lt;/h2&gt;

&lt;p&gt;One local project involved:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Six implementation phases (P1–P6)&lt;/li&gt;
&lt;li&gt;Four rounds of architectural refactoring&lt;/li&gt;
&lt;li&gt;Fifteen technical decisions (D1–D15)&lt;/li&gt;
&lt;li&gt;Thirteen commits&lt;/li&gt;
&lt;li&gt;Two weeks of continuous work&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Managing this entirely inside an IDE would have been nearly impossible.&lt;/p&gt;

&lt;p&gt;Each new AI session would require reconstructing the project's context from scratch.&lt;/p&gt;

&lt;p&gt;Obsidian solved this in five ways:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;A master planning note&lt;/strong&gt; guided every conversation and was continuously updated by the AI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;All fifteen architectural decisions&lt;/strong&gt; were documented, including background, alternatives, final choice, and rationale.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Session continuity&lt;/strong&gt; became effortless. On day seven, a simple "Read this note and continue" restored the entire project context.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Commit hashes&lt;/strong&gt; were written back into the notes, turning them into a living changelog.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lessons learned&lt;/strong&gt; were ultimately incorporated into &lt;code&gt;CLAUDE.md&lt;/code&gt;, allowing future sessions to begin with full project knowledge.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Without this workflow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Design decisions would be scattered across dozens of conversations.&lt;/li&gt;
&lt;li&gt;Every new AI session would waste twenty minutes rebuilding context.&lt;/li&gt;
&lt;li&gt;The architectural intent behind each commit would be forgotten within a few months.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The larger and longer a project becomes, the more valuable the Obsidian + Claudian workflow proves to be.&lt;/p&gt;

&lt;p&gt;It isn't just a productivity enhancement.&lt;/p&gt;

&lt;p&gt;It is the infrastructure that makes &lt;strong&gt;long-running, AI-assisted software engineering&lt;/strong&gt; practical.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Practice: Linting Your Obsidian Vault
&lt;/h2&gt;

&lt;p&gt;The most practical habit is to &lt;strong&gt;regularly let AI lint your vault&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Treat your knowledge base the same way you treat your source code.&lt;/p&gt;

&lt;p&gt;Two simple linting tasks provide enormous value.&lt;/p&gt;




&lt;h3&gt;
  
  
  7.1 Dead-Link Scan
&lt;/h3&gt;

&lt;p&gt;Prompt:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Scan the entire vault and find every &lt;code&gt;[[wiki-link]]&lt;/code&gt; whose target file does not exist. Sort the results by reference count. Output the top 30. Ignore image embeds, code blocks, and Templater variables.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The results generally fall into six categories.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Daily note navigation&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[[2026-05-14]]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Usually harmless&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Template placeholders&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[[&amp;lt;% after_date %&amp;gt;]]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Ignore&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Web clipping artifacts&lt;/td&gt;
&lt;td&gt;URLs or usernames converted into wiki links&lt;/td&gt;
&lt;td&gt;Batch cleanup&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Missing concept pages&lt;/td&gt;
&lt;td&gt;Frequently referenced but nonexistent notes&lt;/td&gt;
&lt;td&gt;Create the missing note&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Typos&lt;/td&gt;
&lt;td&gt;Incorrect capitalization or trailing characters&lt;/td&gt;
&lt;td&gt;Fix immediately&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Missing MOC pages&lt;/td&gt;
&lt;td&gt;Referenced index pages that don't exist&lt;/td&gt;
&lt;td&gt;Create an index page&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The most valuable category is the fourth.&lt;/p&gt;

&lt;p&gt;Frequently referenced dead links reveal concepts you've repeatedly intended to document—but never actually did.&lt;/p&gt;

&lt;p&gt;They become a concrete to-do list generated by your own knowledge graph.&lt;/p&gt;




&lt;h3&gt;
  
  
  7.2 Orphan Page Scan
&lt;/h3&gt;

&lt;p&gt;Prompt:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Find every note that is never referenced by another note via wiki links. Exclude daily notes, entry pages, &lt;code&gt;CLAUDE.md&lt;/code&gt;, and empty notes. Sort by file size, largest first.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Typical results include:&lt;/p&gt;

&lt;h4&gt;
  
  
  Large orphan clusters
&lt;/h4&gt;

&lt;p&gt;Entire collections—such as book notes or article series—remain disconnected.&lt;/p&gt;

&lt;p&gt;The solution isn't adding one link.&lt;/p&gt;

&lt;p&gt;You likely need a &lt;strong&gt;Map of Content (MOC)&lt;/strong&gt; to organize the entire collection.&lt;/p&gt;

&lt;h4&gt;
  
  
  Orphan entry pages
&lt;/h4&gt;

&lt;p&gt;Pages intended as dashboards or indexes receive no incoming links.&lt;/p&gt;

&lt;p&gt;An entrance nobody reaches isn't an entrance at all.&lt;/p&gt;

&lt;h4&gt;
  
  
  Empty notes
&lt;/h4&gt;

&lt;p&gt;Drafts containing only a title should simply be deleted.&lt;/p&gt;




&lt;h3&gt;
  
  
  7.3 Why Regular Linting Matters
&lt;/h3&gt;

&lt;p&gt;A single lint run provides four concrete benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A prioritized list of missing core notes&lt;/li&gt;
&lt;li&gt;Discovery of structural weaknesses in your knowledge organization&lt;/li&gt;
&lt;li&gt;Cleanup of stale data, typos, and clipping artifacts&lt;/li&gt;
&lt;li&gt;Validation that important entry pages are actually reachable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A practical cadence is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;once per month, or&lt;/li&gt;
&lt;li&gt;after importing a large amount of new material into your vault.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without periodic linting, most vaults eventually become graveyards of broken links and isolated notes.&lt;/p&gt;

&lt;p&gt;With regular linting, every page remains connected, discoverable, and useful.&lt;/p&gt;

&lt;p&gt;This is precisely what Karpathy means by treating a wiki like a codebase.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. Conclusion: IDEA Handles the Code; Obsidian + Claudian Handle the Thinking
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;IntelliJ IDEA&lt;/strong&gt; remains an excellent code editor.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Obsidian&lt;/strong&gt; provides the missing cognitive layer, preserving design intent, AI conversations, architecture, database knowledge, and cross-service context.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claudian&lt;/strong&gt; serves as the bridge, allowing AI to directly maintain your knowledge graph rather than acting as a disposable question-and-answer tool.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;CLAUDE.md&lt;/code&gt;&lt;/strong&gt; functions as the schema that transforms an LLM from a chatbot into a disciplined knowledge-base maintainer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Linting&lt;/strong&gt; is the essential maintenance routine that keeps your vault healthy over the long term.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Together, they form what can truly be called an &lt;strong&gt;AI-native development environment&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of simply embedding AI into an IDE sidebar, this workflow &lt;strong&gt;reimagines software development around knowledge organization&lt;/strong&gt;, making AI a first-class participant in long-term, complex engineering projects.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
