<?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: GZOO</title>
    <description>The latest articles on DEV Community by GZOO (@gzoo).</description>
    <link>https://dev.to/gzoo</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3810556%2F2e3fa6fa-9b4c-46f9-9e81-720791335fa8.png</url>
      <title>DEV Community: GZOO</title>
      <link>https://dev.to/gzoo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gzoo"/>
    <language>en</language>
    <item>
      <title>Forge – Turn Dev Conversations into Structured Decisions</title>
      <dc:creator>GZOO</dc:creator>
      <pubDate>Thu, 26 Mar 2026 22:55:34 +0000</pubDate>
      <link>https://dev.to/gzoo/forge-turn-dev-conversations-into-structured-decisions-56i9</link>
      <guid>https://dev.to/gzoo/forge-turn-dev-conversations-into-structured-decisions-56i9</guid>
      <description>&lt;p&gt;Every dev conversation contains decisions. Requirements shift, constraints surface, tradeoffs get made. But most of it disappears into Slack threads and meeting notes that nobody reads again.&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;Forge&lt;/strong&gt; to fix that.&lt;/p&gt;

&lt;p&gt;Forge is persistent project intelligence. It takes conversations — standups, design reviews, planning sessions — and converts them into structured decisions, constraints, and artifacts that your project can actually use.&lt;/p&gt;

&lt;h2&gt;
  
  
  The flow
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;conversation → structured meaning → decision → artifact → system change
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A builder talks. The product thinks. The system evolves.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Ingests conversation transcripts (meetings, chats, design sessions)&lt;/li&gt;
&lt;li&gt;Extracts structured entities: decisions, constraints, requirements, risks&lt;/li&gt;
&lt;li&gt;Tracks decision history with full context and rationale&lt;/li&gt;
&lt;li&gt;Generates artifacts: specs, ADRs, requirement docs&lt;/li&gt;
&lt;li&gt;Detects when new conversations contradict previous decisions&lt;/li&gt;
&lt;li&gt;Maintains a living project knowledge base&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;p&gt;You feed Forge your conversations (paste, API, or file watch). It uses LLMs to extract meaning, then structures that meaning into a queryable knowledge base. When you need to know "why did we decide X?" or "what constraints apply to Y?" — Forge has the answer with source citations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick start
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @gzoo/forge init
npx @gzoo/forge ingest ./meeting-notes/
npx @gzoo/forge query &lt;span class="s2"&gt;"what did we decide about the auth flow?"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why this matters
&lt;/h2&gt;

&lt;p&gt;Teams make hundreds of decisions a week. Most are never recorded. When someone asks "why is it like this?" six months later, nobody remembers. Forge captures the reasoning automatically so your project has a memory.&lt;/p&gt;

&lt;p&gt;Open source, MIT licensed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/gzoonet/forge" rel="noopener noreferrer"&gt;github.com/gzoonet/forge&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;npm:&lt;/strong&gt; &lt;a href="https://www.npmjs.com/package/@gzoo/forge" rel="noopener noreferrer"&gt;npmjs.com/package/@gzoo/forge&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you've ever wasted time re-litigating a decision that was already made — this is for you. Feedback welcome.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>typescript</category>
      <category>ai</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Cortex – A Local-First Knowledge Graph for Developers</title>
      <dc:creator>GZOO</dc:creator>
      <pubDate>Thu, 26 Mar 2026 22:55:12 +0000</pubDate>
      <link>https://dev.to/gzoo/cortex-a-local-first-knowledge-graph-for-developers-4gd7</link>
      <guid>https://dev.to/gzoo/cortex-a-local-first-knowledge-graph-for-developers-4gd7</guid>
      <description>&lt;p&gt;I work on multiple projects. Decisions, patterns, and context end up scattered across hundreds of files. I forget what I decided three months ago. I re-solve problems I already solved in another repo.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;Cortex&lt;/strong&gt; — a local-first knowledge graph for developers.&lt;/p&gt;

&lt;p&gt;It watches your project directories, extracts knowledge automatically using LLMs, and gives it back to you when you need it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Watches your project files (md, ts, js, json, yaml) for changes&lt;/li&gt;
&lt;li&gt;Extracts entities: decisions, patterns, components, dependencies, constraints&lt;/li&gt;
&lt;li&gt;Infers relationships between entities across projects&lt;/li&gt;
&lt;li&gt;Detects contradictions when decisions conflict&lt;/li&gt;
&lt;li&gt;Queries in natural language with source citations&lt;/li&gt;
&lt;li&gt;Routes intelligently between cloud and local LLMs&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;p&gt;Cortex runs locally. You point it at your project directories and it builds a knowledge graph in the background. When you query it, you get answers grounded in your actual codebase — not hallucinated guesses.&lt;/p&gt;

&lt;p&gt;The extraction pipeline uses configurable LLM providers (OpenAI, Anthropic, Ollama, LM Studio) so you can keep everything local if you want.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick start
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @gzoo/cortex init
npx @gzoo/cortex watch ~/projects
npx @gzoo/cortex query &lt;span class="s2"&gt;"what patterns am I using for error handling?"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why I built this
&lt;/h2&gt;

&lt;p&gt;I kept losing context. Not code — context. The reasoning behind decisions, the constraints I discovered, the patterns I settled on. Cortex captures that stuff automatically so I can actually find it later.&lt;/p&gt;

&lt;p&gt;It's open source, MIT licensed, and on npm.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/gzoonet/cortex" rel="noopener noreferrer"&gt;github.com/gzoonet/cortex&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;npm:&lt;/strong&gt; &lt;a href="https://www.npmjs.com/package/@gzoo/cortex" rel="noopener noreferrer"&gt;npmjs.com/package/@gzoo/cortex&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Would love feedback. What kinds of knowledge do you lose track of across projects?&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>typescript</category>
      <category>ai</category>
      <category>devtools</category>
    </item>
    <item>
      <title>I Got Tired of Losing Context Between Projects, So I Built a Knowledge Graph</title>
      <dc:creator>GZOO</dc:creator>
      <pubDate>Fri, 06 Mar 2026 20:34:41 +0000</pubDate>
      <link>https://dev.to/gzoo/i-got-tired-of-losing-context-between-projects-so-i-built-a-knowledge-graph-4j9b</link>
      <guid>https://dev.to/gzoo/i-got-tired-of-losing-context-between-projects-so-i-built-a-knowledge-graph-4j9b</guid>
      <description>&lt;p&gt;I run a consultancy. At any given time I'm working on 4-5 different projects. Three months into project B, I need to remember what I decided about authentication in project A. The answer is somewhere in my files — a README, a design doc, a conversation export — but I have no idea where.&lt;/p&gt;

&lt;p&gt;I tried grep. I tried notes apps. I tried "just remember better." None of it worked at scale.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;GZOO Cortex&lt;/strong&gt; — a local-first knowledge graph that watches your project files, extracts entities and relationships using LLMs, and lets you query across everything in natural language.&lt;/p&gt;

&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;

&lt;p&gt;Cortex runs a pipeline on every file change:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Parse&lt;/strong&gt; — tree-sitter for code, remark for markdown. Language-aware chunking.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extract&lt;/strong&gt; — LLM identifies entities: decisions, patterns, components, dependencies, constraints.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Relate&lt;/strong&gt; — LLM infers relationships between new entities and everything already in the graph.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Detect&lt;/strong&gt; — contradictions and duplicates are flagged automatically.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Store&lt;/strong&gt; — entities, relationships, and vector embeddings go into SQLite + LanceDB.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Query&lt;/strong&gt; — natural language queries assemble relevant context and synthesize answers with source citations.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The key insight: your project files already contain the knowledge. You just need something that reads them, understands the structure, and makes it queryable.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Architecture
&lt;/h2&gt;

&lt;p&gt;It's a TypeScript monorepo with 8 packages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;@cortex/core&lt;/strong&gt; — shared types, EventBus (inter-package communication), config loader, error classes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;@cortex/ingest&lt;/strong&gt; — Chokidar file watcher, parsers (Markdown, TypeScript, JSON, YAML, conversation exports), chunker&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;@cortex/graph&lt;/strong&gt; — SQLite store for entities/relationships, LanceDB for vector embeddings, FTS5 query engine&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;@cortex/llm&lt;/strong&gt; — provider abstraction (Anthropic, Gemini, OpenAI-compatible, Ollama), smart router, prompt templates, response cache&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;@cortex/cli&lt;/strong&gt; — Commander.js CLI with 17 commands&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;@cortex/mcp&lt;/strong&gt; — MCP server for Claude Code integration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;@cortex/server&lt;/strong&gt; — Express REST API + WebSocket relay&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;@cortex/web&lt;/strong&gt; — React + Vite + D3 web dashboard&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Packages communicate only via the EventBus — no direct cross-package imports. All LLM calls go through the Router, which runs the privacy pipeline before every cloud request.&lt;/p&gt;

&lt;h2&gt;
  
  
  Provider-Agnostic LLM Routing
&lt;/h2&gt;

&lt;p&gt;This was a deliberate design choice. Cortex doesn't lock you into any LLM provider:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Anthropic Claude&lt;/strong&gt; (Sonnet for reasoning, Haiku for extraction)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Gemini&lt;/strong&gt; (via OpenAI-compatible API)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Any OpenAI-compatible API&lt;/strong&gt; (OpenRouter, local proxies, etc.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ollama&lt;/strong&gt; (Mistral, Llama, etc.) — fully local, no cloud required&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Router supports four modes:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mode&lt;/th&gt;
&lt;th&gt;How it works&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;cloud-first&lt;/td&gt;
&lt;td&gt;Everything goes to your cloud provider&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;hybrid&lt;/td&gt;
&lt;td&gt;High-volume tasks (extraction) -&amp;gt; Ollama, reasoning (queries) -&amp;gt; cloud&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;local-first&lt;/td&gt;
&lt;td&gt;Default to Ollama, escalate to cloud when confidence &amp;lt; 0.6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;local-only&lt;/td&gt;
&lt;td&gt;Everything local. $0 cloud cost.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;In practice, I run hybrid mode. Entity extraction runs locally on Mistral 7B and the quality is surprisingly good — structured output parsing handles most variance. Relationship inference and natural language queries go to the cloud provider where the reasoning matters more.&lt;/p&gt;

&lt;h2&gt;
  
  
  Privacy Is Not Optional
&lt;/h2&gt;

&lt;p&gt;When you're working on client projects, privacy matters. Cortex has a three-tier classification:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;standard&lt;/strong&gt; — full content sent to cloud LLM&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;sensitive&lt;/strong&gt; — content sent with secrets redacted (regex-based scanning)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;restricted&lt;/strong&gt; — zero data leaves your machine. Ever.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Files like &lt;code&gt;.env&lt;/code&gt;, &lt;code&gt;.pem&lt;/code&gt;, &lt;code&gt;.key&lt;/code&gt; are auto-classified as restricted regardless of directory settings. Every cloud API call is logged to a transmission audit log.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Web Dashboard
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;cortex serve&lt;/code&gt; starts a React dashboard at localhost:3710 with five views:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dashboard Home&lt;/strong&gt; — graph stats, recent activity, entity type breakdown&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Knowledge Graph&lt;/strong&gt; — interactive D3-force graph with smart clustering&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live Feed&lt;/strong&gt; — real-time file change and entity extraction events via WebSocket&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Query Explorer&lt;/strong&gt; — natural language queries with streaming responses&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contradiction Resolver&lt;/strong&gt; — review and resolve conflicting decisions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The knowledge graph visualization uses D3-force with automatic clustering: no clustering under 100 nodes, type-based clustering under 500, and type+directory clustering above 500.&lt;/p&gt;

&lt;h2&gt;
  
  
  MCP Server for Claude Code
&lt;/h2&gt;

&lt;p&gt;This is the feature I use most. Cortex includes an MCP server that gives Claude Code direct access to your knowledge graph:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add cortex &lt;span class="nt"&gt;--scope&lt;/span&gt; user &lt;span class="nt"&gt;--&lt;/span&gt; node /path/to/packages/mcp/dist/index.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Four tools: &lt;code&gt;get_status&lt;/code&gt;, &lt;code&gt;list_projects&lt;/code&gt;, &lt;code&gt;find_entity&lt;/code&gt;, &lt;code&gt;query_cortex&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Instead of Claude guessing about your project, it can look up what you actually decided. Real decisions from real files, with citations.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned Building It
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Structured output from LLMs is more reliable than I expected.&lt;/strong&gt; With good prompt engineering and JSON schema validation (Zod), you can get consistent entity extraction even from smaller models.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The hard part isn't extraction — it's relationships.&lt;/strong&gt; Getting an LLM to identify that "we chose JWT for auth" in file A relates to "the auth module uses token-based validation" in file B requires genuine reasoning. This is where cloud models still win.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;FTS5 is underrated.&lt;/strong&gt; SQLite's full-text search handles most queries without needing vector search. Vector similarity is useful for semantic matching, but keyword search with good tokenization covers 80% of use cases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;File watching is a solved problem.&lt;/strong&gt; Chokidar just works. The real complexity is in the pipeline: debouncing, deduplication, content hashing to skip unchanged files, and dead letter queues for failed ingestions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @gzoo/cortex
cortex init
cortex watch
cortex query &lt;span class="s2"&gt;"what architecture decisions have I made?"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It's MIT licensed. The code is at &lt;a href="https://github.com/gzoonet/cortex" rel="noopener noreferrer"&gt;github.com/gzoonet/cortex&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I've been using it daily for months on real client projects. It genuinely changed how I work — I query past decisions instead of grep-ing through repos or trying to remember.&lt;/p&gt;

&lt;p&gt;If you work on more than one project, give it a shot. I'd love to hear what you think.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>webdev</category>
      <category>ai</category>
      <category>devdiscuss</category>
    </item>
  </channel>
</rss>
