<?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: arun bhat</title>
    <description>The latest articles on DEV Community by arun bhat (@arun_bhat).</description>
    <link>https://dev.to/arun_bhat</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%2F4077404%2F184d219a-95a1-423b-b262-f085e46df98d.jpg</url>
      <title>DEV Community: arun bhat</title>
      <link>https://dev.to/arun_bhat</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/arun_bhat"/>
    <language>en</language>
    <item>
      <title>We Invented a Layered Wiki Pattern on Top of Graphify — Here's the Concept and How to Approximate It Today</title>
      <dc:creator>arun bhat</dc:creator>
      <pubDate>Fri, 14 Aug 2026 09:15:00 +0000</pubDate>
      <link>https://dev.to/arun_bhat/we-invented-a-layered-wiki-pattern-on-top-of-graphify-heres-the-concept-and-how-to-approximate-32d9</link>
      <guid>https://dev.to/arun_bhat/we-invented-a-layered-wiki-pattern-on-top-of-graphify-heres-the-concept-and-how-to-approximate-32d9</guid>
      <description>&lt;h2&gt;
  
  
  "Graphify turns codebases into queryable knowledge graphs. We designed a layered monorepo wiki extension — per-layer .graphify/ folders with staleness hooks — that doesn't exist yet. Here's the full spec and how to get 90% of it right now."
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Transparency note:&lt;/strong&gt; This post describes a &lt;em&gt;design pattern&lt;/em&gt; we invented on top of &lt;a href="https://github.com/Graphify-Labs/graphify" rel="noopener noreferrer"&gt;graphify&lt;/a&gt;, an existing open-source tool. The core tool is real. The layered wiki structure and &lt;code&gt;.graphify/&lt;/code&gt; folder convention described here are &lt;strong&gt;not&lt;/strong&gt; official graphify features — they are a proposal. We'll clearly mark every invented part. The "how to approximate it today" sections use only real, working graphify commands.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Problem: One Graph, Many Layers
&lt;/h2&gt;

&lt;p&gt;If you haven't used graphify yet, the short version: you run &lt;code&gt;/graphify .&lt;/code&gt; inside Claude Code (or &lt;code&gt;graphify . --wiki&lt;/code&gt; from your terminal), and it turns your entire codebase into a queryable knowledge graph. Claude can then answer questions like &lt;em&gt;"how does the checkout flow work?"&lt;/em&gt; or &lt;em&gt;"what calls PaymentService?"&lt;/em&gt; with file-and-line citations instead of hallucinated guesses.&lt;/p&gt;

&lt;p&gt;It works brilliantly for single-service repos. But for a monorepo that looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;my-repo/
├── frontend/       ← TypeScript / React
├── api/            ← Java / Spring Boot
├── services/
│   ├── order-service/    ← .NET / C#
│   └── notification-worker/  ← Python
└── database/       ← SQL stored procedures
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;…you hit a wall. Run &lt;code&gt;graphify .&lt;/code&gt; at the root and everything lands in a single flat &lt;code&gt;graphify-out/&lt;/code&gt; folder. The community articles generated by the &lt;code&gt;--wiki&lt;/code&gt; flag end up mixing TypeScript React components with Java Spring controllers with SQL stored procedures. When you're deep inside the frontend layer fixing a component, Claude is also loading a wiki article about your database trigger — noise you don't need.&lt;/p&gt;

&lt;p&gt;The real question: &lt;strong&gt;what if each layer had its own scoped graph and wiki, colocated with the source it describes?&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Concept: Layered Graphify Wiki
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;Everything in this section is a design proposal — not official graphify.&lt;/strong&gt; The folder names, behaviours, and some commands below do not exist in the real tool. Skip to How to Approximate It Today if you only want working commands.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  The Proposed Folder Layout
&lt;/h3&gt;

&lt;p&gt;Instead of one &lt;code&gt;graphify-out/&lt;/code&gt; at the root, we imagined a two-level structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;my-repo/
│
├── .graphify/                    ← 🌐 global cross-layer graph
│   ├── graph.json                   commit this ✓
│   ├── GRAPH_REPORT.md              commit this ✓
│   ├── graph.html                   commit this ✓
│   ├── needs_update                 staleness marker (gitignored)
│   ├── .gitignore                   auto-generated exclude list
│   └── wiki/
│       ├── index.md                 commit this ✓
│       └── Community_0.md           commit this ✓
│
├── frontend/
│   └── .graphify/                ← 🎨 frontend-only graph
│       ├── graph.json
│       ├── GRAPH_REPORT.md
│       └── wiki/
│           └── index.md
│
├── api/
│   └── .graphify/                ← ☕ Java API graph
│       └── wiki/
│
├── services/order-service/
│   └── .graphify/                ← 🔷 .NET service graph
│       └── wiki/
│
└── database/
    └── .graphify/                ← 🗄️ SQL graph
        └── wiki/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two levels of granularity, both queryable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Global graph&lt;/strong&gt; — for cross-layer questions: &lt;em&gt;"how does the UI checkout call the Java payment endpoint?"&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Per-layer graph&lt;/strong&gt; — for day-to-day work: &lt;em&gt;"what React hooks does CheckoutForm use?"&lt;/em&gt; with no SQL noise&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why &lt;code&gt;.graphify/&lt;/code&gt; Instead of &lt;code&gt;graphify-out/&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;The real tool writes to &lt;code&gt;graphify-out/&lt;/code&gt;. We proposed renaming this to &lt;code&gt;.graphify/&lt;/code&gt; — a small but deliberate signal.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;graphify-out/&lt;/code&gt; reads like a build artefact — something to gitignore, like &lt;code&gt;dist/&lt;/code&gt; or &lt;code&gt;build/&lt;/code&gt;. Developers instinctively expect build artefacts to be throwaway, regenerated on demand, never committed.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;.graphify/&lt;/code&gt; reads like a tool-config directory — something to commit and version, like &lt;code&gt;.github/&lt;/code&gt;, &lt;code&gt;.husky/&lt;/code&gt;, or &lt;code&gt;.vscode/&lt;/code&gt;. The graph and the wiki are &lt;strong&gt;not&lt;/strong&gt; throwaway; they are knowledge artefacts that accumulate value over time, and they should live in git alongside the code they describe.&lt;/p&gt;

&lt;h3&gt;
  
  
  The &lt;code&gt;needs_update&lt;/code&gt; Staleness Marker
&lt;/h3&gt;

&lt;p&gt;The second invented piece was a &lt;code&gt;needs_update&lt;/code&gt; file inside each &lt;code&gt;.graphify/&lt;/code&gt; directory, written by a git hook after every commit, checkout, or merge. Claude Code would read this marker before answering a query and prompt: &lt;em&gt;"The graph for this layer is stale — run &lt;code&gt;graphify update api/&lt;/code&gt; to rebuild."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The proposed hooks:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Proposed commands (not real)&lt;/span&gt;
graphify hook &lt;span class="nb"&gt;install&lt;/span&gt;        &lt;span class="c"&gt;# registers post-commit, post-checkout, post-merge hooks&lt;/span&gt;
graphify check-update api/  &lt;span class="c"&gt;# reads needs_update and reports staleness&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The designed workflow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git commit  →  hook writes .graphify/needs_update
              ↓
Claude Code reads next query  →  detects needs_update  →  prompts rebuild
              ↓
graphify update api/  →  deletes needs_update, rebuilds graph
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The Invented CLAUDE.md Block
&lt;/h3&gt;

&lt;p&gt;With each layer having its own wiki, the proposed &lt;code&gt;CLAUDE.md&lt;/code&gt; entry gave Claude a lookup table of which wiki to open based on the layer being worked in:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## Graphify Knowledge Graph&lt;/span&gt;

| Layer | Language | Wiki |
|---|---|---|
| Global | all layers | &lt;span class="sb"&gt;`.graphify/wiki/index.md`&lt;/span&gt; |
| Frontend | TypeScript | &lt;span class="sb"&gt;`frontend/.graphify/wiki/index.md`&lt;/span&gt; |
| API | Java | &lt;span class="sb"&gt;`api/.graphify/wiki/index.md`&lt;/span&gt; |
| Order Service | .NET / C# | &lt;span class="sb"&gt;`services/order-service/.graphify/wiki/index.md`&lt;/span&gt; |
| Database | SQL | &lt;span class="sb"&gt;`database/.graphify/wiki/index.md`&lt;/span&gt; |
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Claude would pick the narrowest applicable wiki for each question, then widen to the global graph for cross-layer questions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Full List of Invented Commands
&lt;/h3&gt;

&lt;p&gt;These felt natural to design, but none of them exist in the real tool today:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Invented command&lt;/th&gt;
&lt;th&gt;What we wanted it to do&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;graphify update api/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Build/refresh a specific layer's graph&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;graphify export wiki --graph api/.graphify/graph.json --dir api/.graphify/wiki&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Regenerate wiki without rebuilding the full graph&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;graphify merge-graphs frontend/.graphify/graph.json api/.graphify/graph.json --out .graphify/graph.json&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Compose the global graph from layer graphs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;graphify hook install&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Register git hooks that stamp &lt;code&gt;needs_update&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;graphify check-update api/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Read &lt;code&gt;needs_update&lt;/code&gt; and report staleness&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;graphify install claude --project&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Project-local skill install&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;graphify migrate-state --root api/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Migrate a layer from &lt;code&gt;graphify-out/&lt;/code&gt; to &lt;code&gt;.graphify/&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;graphify summary&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Print a compact graph summary for AI context&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  How to Approximate It Today
&lt;/h2&gt;

&lt;p&gt;The real tool (installed as &lt;code&gt;pip install graphifyy&lt;/code&gt;, used as &lt;code&gt;graphify&lt;/code&gt;) supports none of the invented commands above. But you can get to about 90% of the layered wiki pattern right now using only real commands.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1 — Install graphify
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;graphifyy       &lt;span class="c"&gt;# PyPI package is graphifyy (double-y)&lt;/span&gt;
graphify &lt;span class="nt"&gt;--version&lt;/span&gt;          &lt;span class="c"&gt;# should print 0.9.41&lt;/span&gt;
graphify &lt;span class="nb"&gt;install&lt;/span&gt;            &lt;span class="c"&gt;# registers the /graphify skill in Claude Code&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2 — Build per-layer graphs
&lt;/h3&gt;

&lt;p&gt;Run &lt;code&gt;graphify&lt;/code&gt; separately from each layer. Each invocation produces its own &lt;code&gt;graphify-out/&lt;/code&gt; inside that directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Global — from repo root&lt;/span&gt;
graphify &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;--wiki&lt;/span&gt;

&lt;span class="c"&gt;# Per layer&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;frontend &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; graphify &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;--wiki&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; ..
&lt;span class="nb"&gt;cd &lt;/span&gt;api &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; graphify &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;--wiki&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; ..
&lt;span class="nb"&gt;cd &lt;/span&gt;services/order-service &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; graphify &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;--wiki&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; ../..
&lt;span class="nb"&gt;cd &lt;/span&gt;database &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; graphify &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;--wiki&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; ..
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run layers in parallel (separate terminals) to save time on large repos.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3 — Rename to the &lt;code&gt;.graphify/&lt;/code&gt; convention (optional)
&lt;/h3&gt;

&lt;p&gt;The real tool doesn't care what the output folder is named once it's written. Rename freely:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mv &lt;/span&gt;frontend/graphify-out frontend/.graphify
&lt;span class="nb"&gt;mv &lt;/span&gt;api/graphify-out api/.graphify
&lt;span class="nb"&gt;mv &lt;/span&gt;services/order-service/graphify-out services/order-service/.graphify
&lt;span class="nb"&gt;mv &lt;/span&gt;database/graphify-out database/.graphify
&lt;span class="nb"&gt;mv &lt;/span&gt;graphify-out .graphify
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Query against the renamed folder using &lt;code&gt;--graph&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;graphify query &lt;span class="s2"&gt;"auth flow"&lt;/span&gt; &lt;span class="nt"&gt;--graph&lt;/span&gt; frontend/.graphify/graph.json
graphify explain &lt;span class="s2"&gt;"OrderController"&lt;/span&gt; &lt;span class="nt"&gt;--graph&lt;/span&gt; api/.graphify/graph.json
graphify path &lt;span class="s2"&gt;"CheckoutForm"&lt;/span&gt; &lt;span class="s2"&gt;"PaymentService"&lt;/span&gt; &lt;span class="nt"&gt;--graph&lt;/span&gt; .graphify/graph.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4 — Commit the artefacts
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Exclude only the incremental cache&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"cache/"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; .graphify/.gitignore
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"cache/"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; frontend/.graphify/.gitignore
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"cache/"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; api/.graphify/.gitignore

git add .graphify/ frontend/.graphify/ api/.graphify/ database/.graphify/
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"chore: add graphify knowledge graphs and layer wikis"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 5 — Wire up CLAUDE.md
&lt;/h3&gt;

&lt;p&gt;Add this to your project's &lt;code&gt;CLAUDE.md&lt;/code&gt; so Claude knows where each wiki lives:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## Graphify Knowledge Graph&lt;/span&gt;

| Layer | Language | Wiki |
|---|---|---|
| Global | all layers | &lt;span class="sb"&gt;`.graphify/wiki/index.md`&lt;/span&gt; |
| Frontend | TypeScript | &lt;span class="sb"&gt;`frontend/.graphify/wiki/index.md`&lt;/span&gt; |
| API | Java | &lt;span class="sb"&gt;`api/.graphify/wiki/index.md`&lt;/span&gt; |
| Database | SQL | &lt;span class="sb"&gt;`database/.graphify/wiki/index.md`&lt;/span&gt; |

Query commands:
graphify query "&lt;span class="nt"&gt;&amp;lt;question&amp;gt;&lt;/span&gt;" --graph &lt;span class="nt"&gt;&amp;lt;layer&amp;gt;&lt;/span&gt;/.graphify/graph.json
graphify explain "&lt;span class="nt"&gt;&amp;lt;class&lt;/span&gt; &lt;span class="na"&gt;or&lt;/span&gt; &lt;span class="na"&gt;function&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;" --graph &lt;span class="nt"&gt;&amp;lt;layer&amp;gt;&lt;/span&gt;/.graphify/graph.json
graphify path "&lt;span class="nt"&gt;&amp;lt;source&amp;gt;&lt;/span&gt;" "&lt;span class="nt"&gt;&amp;lt;target&amp;gt;&lt;/span&gt;" --graph &lt;span class="nt"&gt;&amp;lt;layer&amp;gt;&lt;/span&gt;/.graphify/graph.json

Refresh a layer:
cd &lt;span class="nt"&gt;&amp;lt;layer&amp;gt;&lt;/span&gt; &amp;amp;&amp;amp; graphify . --update --wiki
mv &lt;span class="nt"&gt;&amp;lt;layer&amp;gt;&lt;/span&gt;/graphify-out &lt;span class="nt"&gt;&amp;lt;layer&amp;gt;&lt;/span&gt;/.graphify
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 6 — Manual staleness check (in place of the invented hook)
&lt;/h3&gt;

&lt;p&gt;Since &lt;code&gt;graphify hook install&lt;/code&gt; doesn't exist, use a simple git alias as a substitute:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Add to .git/hooks/post-commit (make it executable)&lt;/span&gt;
&lt;span class="c"&gt;#!/bin/sh&lt;/span&gt;
&lt;span class="nb"&gt;touch&lt;/span&gt; .graphify/needs_update
&lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="nb"&gt;dir &lt;/span&gt;&lt;span class="k"&gt;in &lt;/span&gt;frontend api services/order-service database&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$dir&lt;/span&gt;&lt;span class="s2"&gt;/.graphify"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;touch&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$dir&lt;/span&gt;&lt;span class="s2"&gt;/.graphify/needs_update"&lt;/span&gt;
&lt;span class="k"&gt;done
&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"graphify: graphs marked stale — run 'cd &amp;lt;layer&amp;gt; &amp;amp;&amp;amp; graphify . --update --wiki' to refresh"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod&lt;/span&gt; +x .git/hooks/post-commit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is a manual implementation of what we designed as &lt;code&gt;graphify hook install&lt;/code&gt;. It's eight lines of shell instead of one command, but it works.&lt;/p&gt;




&lt;h2&gt;
  
  
  What We'd Love to See in Official Graphify
&lt;/h2&gt;

&lt;p&gt;If you've made it this far and agree this pattern is worth having, the graphify team is active on GitHub. The features we'd most want upstreamed:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;graphify update &amp;lt;path&amp;gt;&lt;/code&gt;&lt;/strong&gt; — build/refresh a specific subdirectory without &lt;code&gt;cd&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;graphify hook install&lt;/code&gt;&lt;/strong&gt; — register git hooks that stamp a staleness marker&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;graphify merge-graphs&lt;/code&gt;&lt;/strong&gt; — compose a global graph from per-layer graphs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Official support for a configurable output directory&lt;/strong&gt; — so &lt;code&gt;.graphify/&lt;/code&gt; can be the default instead of &lt;code&gt;graphify-out/&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Feel free to open or upvote issues for these on &lt;a href="https://github.com/Graphify-Labs/graphify" rel="noopener noreferrer"&gt;github.com/Graphify-Labs/graphify&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Official graphify today&lt;/th&gt;
&lt;th&gt;Layered wiki pattern (this post)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Output folder&lt;/td&gt;
&lt;td&gt;&lt;code&gt;graphify-out/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;.graphify/&lt;/code&gt; (renamed)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Granularity&lt;/td&gt;
&lt;td&gt;one graph per &lt;code&gt;graphify .&lt;/code&gt; run&lt;/td&gt;
&lt;td&gt;one graph per layer (manual runs)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wiki&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;graphify-out/wiki/&lt;/code&gt; with &lt;code&gt;--wiki&lt;/code&gt; flag&lt;/td&gt;
&lt;td&gt;per-layer &lt;code&gt;.graphify/wiki/&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Staleness&lt;/td&gt;
&lt;td&gt;none&lt;/td&gt;
&lt;td&gt;manual git hook writing &lt;code&gt;needs_update&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CLAUDE.md&lt;/td&gt;
&lt;td&gt;your choice&lt;/td&gt;
&lt;td&gt;layer lookup table&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cross-layer graph&lt;/td&gt;
&lt;td&gt;run at root&lt;/td&gt;
&lt;td&gt;run at root + merge (no merge command yet)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The real tool is excellent as-is. This pattern is about taking it one step further for teams running large polyglot monorepos with Claude Code as their primary AI assistant.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;If you try this pattern and improve on it, please share — especially if you find a cleaner way to handle staleness detection or the CLAUDE.md layer routing.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>monorepo</category>
      <category>devtools</category>
    </item>
  </channel>
</rss>
