<?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>Forem: Naman Khater</title>
    <description>The latest articles on Forem by Naman Khater (@naman_khater_a2ff49af0528).</description>
    <link>https://forem.com/naman_khater_a2ff49af0528</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%2F2615994%2F171667d7-841d-43a4-b094-4876f11f88fa.jpg</url>
      <title>Forem: Naman Khater</title>
      <link>https://forem.com/naman_khater_a2ff49af0528</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/naman_khater_a2ff49af0528"/>
    <language>en</language>
    <item>
      <title>I built a bug reporting system into my VS Code extension — here's how it works</title>
      <dc:creator>Naman Khater</dc:creator>
      <pubDate>Tue, 14 Apr 2026 02:11:42 +0000</pubDate>
      <link>https://forem.com/naman_khater_a2ff49af0528/i-built-a-bug-reporting-system-into-my-vs-code-extension-heres-how-it-works-502j</link>
      <guid>https://forem.com/naman_khater_a2ff49af0528/i-built-a-bug-reporting-system-into-my-vs-code-extension-heres-how-it-works-502j</guid>
      <description>&lt;p&gt;One thing I learned early while building &lt;a href="https://marketplace.visualstudio.com/items?itemName=Naman09Khater.ecip-local" rel="noopener noreferrer"&gt;CIPHER-Local&lt;/a&gt; — a VS Code extension that indexes your codebase and serves code intelligence to AI assistants via MCP — is that beta users won't file bugs if it's even slightly annoying to do so.&lt;/p&gt;

&lt;p&gt;So instead of hoping people would manually dig through logs and paste them into a GitHub issue, I built the entire reporting pipeline into the extension itself. Every error is captured, structured, and one click away from becoming a useful bug report.&lt;/p&gt;

&lt;p&gt;Here's how the system works, and how you can use it if you're trying CIPHER-Local.&lt;/p&gt;

&lt;h2&gt;
  
  
  Every error gets journaled automatically
&lt;/h2&gt;

&lt;p&gt;Under the hood, CIPHER-Local catches every exception and writes it to an &lt;code&gt;error_journal&lt;/code&gt; table in its local SQLite database. Errors are grouped by module and operation, deduplicated, and tracked with a repeat count.&lt;/p&gt;

&lt;p&gt;The extension is organized into layers, and the module prefix tells you exactly where the problem happened:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;l01-vscode&lt;/strong&gt; — Extension lifecycle, commands, status bar&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;l02-indexer&lt;/strong&gt; — Tree-sitter parsing, workspace file scanning&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;l03-store&lt;/strong&gt; — SQLite database reads and writes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;l04-query&lt;/strong&gt; — Symbol and chunk query layer&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;l05-mcp&lt;/strong&gt; — The MCP HTTP+SSE server&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;l06-embedding&lt;/strong&gt; — ONNX model loading and BM25 fallback&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When errors exist, the status bar shows something like &lt;code&gt;⚠ CIPHER: 3 errors&lt;/code&gt;. That badge is your entry point.&lt;/p&gt;

&lt;h2&gt;
  
  
  Path 1: The built-in flow (recommended)
&lt;/h2&gt;

&lt;p&gt;This is the fastest way to report a bug — three steps, takes about 30 seconds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1 — Open the error viewer.&lt;/strong&gt;&lt;br&gt;
Click the &lt;code&gt;⚠ CIPHER: N errors&lt;/code&gt; badge in the status bar, or run &lt;code&gt;Ctrl+Shift+P → CIPHER: View Errors&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;A QuickPick panel opens showing all errors grouped by module. Each entry shows an icon (error/warning/info), the operation name like &lt;code&gt;indexFile&lt;/code&gt; or &lt;code&gt;mcpStart&lt;/code&gt;, the first 60 characters of the message, the timestamp, and how many times it repeated.&lt;/p&gt;

&lt;p&gt;Click any entry to see the full detail — message, sanitized stack trace (file paths replaced with &lt;code&gt;&amp;lt;path&amp;gt;&lt;/code&gt; so nothing private leaks), and structured context like the language being parsed, file extension, tool name, and duration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2 — Copy diagnostics.&lt;/strong&gt;&lt;br&gt;
Select &lt;strong&gt;Copy Diagnostics&lt;/strong&gt; from the QuickPick footer, or run &lt;code&gt;Ctrl+Shift+P → CIPHER: Copy Diagnostics&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This puts a structured report on your clipboard that looks like this:&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>showdev</category>
      <category>tooling</category>
      <category>vscode</category>
    </item>
    <item>
      <title>Your AI coding assistant is flying blind — here's how to fix it</title>
      <dc:creator>Naman Khater</dc:creator>
      <pubDate>Tue, 14 Apr 2026 02:07:36 +0000</pubDate>
      <link>https://forem.com/naman_khater_a2ff49af0528/your-ai-coding-assistant-is-flying-blind-heres-how-to-fix-it-29</link>
      <guid>https://forem.com/naman_khater_a2ff49af0528/your-ai-coding-assistant-is-flying-blind-heres-how-to-fix-it-29</guid>
      <description>&lt;p&gt;Let me paint a picture you probably recognize.&lt;/p&gt;

&lt;p&gt;You're working in a 200-file project. You ask Copilot to refactor a function. It confidently rewrites it — but breaks three callers in other files because it didn't know they existed. You ask Cursor to trace a bug through your service layer. It guesses the function signatures instead of looking them up.&lt;/p&gt;

&lt;p&gt;The AI isn't dumb. It's just working without a map.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why AI assistants struggle with real codebases
&lt;/h2&gt;

&lt;p&gt;Most AI coding tools operate on what's directly visible — your open tab, maybe a few related files the editor pulls in. They don't have a symbol table. They don't know your dependency graph. They can't answer "where is this function defined?" or "what calls this method?" without scanning every file from scratch.&lt;/p&gt;

&lt;p&gt;This is fine for small scripts. It falls apart on anything with real architecture.&lt;/p&gt;

&lt;h2&gt;
  
  
  MCP changes the game
&lt;/h2&gt;

&lt;p&gt;MCP (Model Context Protocol) lets AI assistants call external tools during a conversation. Instead of the AI guessing at your code structure, it can ask a tool: "find me every reference to &lt;code&gt;processPayment&lt;/code&gt;" or "what does the &lt;code&gt;UserService&lt;/code&gt; class look like?"&lt;/p&gt;

&lt;p&gt;The problem is — who builds these tools? Most MCP servers are built for APIs and databases. Not for code.&lt;/p&gt;

&lt;h2&gt;
  
  
  I built one for code
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=Naman09Khater.ecip-local" rel="noopener noreferrer"&gt;CIPHER-Local&lt;/a&gt; is a free VS Code extension that turns your workspace into a queryable code intelligence backend. It parses your code with Tree-sitter, indexes everything into SQLite, and exposes 7 MCP tools your AI assistant can call.&lt;/p&gt;

&lt;p&gt;Here's what that looks like in practice:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Before CIPHER-Local:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Refactor the &lt;code&gt;calculateDiscount&lt;/code&gt; function"&lt;br&gt;
→ AI rewrites it, misses 4 callers, introduces a type mismatch&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;After CIPHER-Local:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;AI calls &lt;code&gt;resolve_symbol("calculateDiscount")&lt;/code&gt; → gets the full definition&lt;br&gt;
AI calls &lt;code&gt;find_references("calculateDiscount")&lt;/code&gt; → sees all 4 callers&lt;br&gt;
AI calls &lt;code&gt;get_file_context("pricing.ts")&lt;/code&gt; → understands the surrounding module&lt;br&gt;
→ Refactors correctly, updates all call sites&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The AI goes from pattern-matching on vibes to working with actual structural knowledge.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 7 tools your AI gets
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;search_symbols&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Find functions, classes, types by name pattern&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;resolve_symbol&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Get the full definition and source of any symbol&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;find_references&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Find every import and call site for a symbol&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;semantic_search&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;BM25 full-text search across your indexed code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_dependencies&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;See package dependencies (npm, pip, cargo, go.mod, etc.)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_file_context&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Get all symbols defined in a specific file&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;list_namespaces&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Discover all indexed workspaces&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These work with GitHub Copilot, Cursor, Claude Code, and Claude Desktop — anything that speaks MCP.&lt;/p&gt;

&lt;h2&gt;
  
  
  What gets indexed
&lt;/h2&gt;

&lt;p&gt;13 languages out of the box: TypeScript, JavaScript, Python, Java, Go, Rust, C, C++, C#, Ruby, PHP, Swift, and Kotlin. All parsed with Tree-sitter WASM grammars — no native dependencies, no compilation step.&lt;/p&gt;

&lt;h2&gt;
  
  
  Nothing leaves your machine
&lt;/h2&gt;

&lt;p&gt;This matters. CIPHER-Local runs entirely on localhost. Your code index lives in a SQLite file in VS Code's storage. There's no cloud sync, no API key, no account creation. It's MIT licensed and the source is on GitHub.&lt;/p&gt;

&lt;p&gt;For anyone working on proprietary code, internal tools, or just uncomfortable with cloud-based indexing — this is built for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  The honest state of things
&lt;/h2&gt;

&lt;p&gt;This is a beta (v0.1.3) built by a solo developer. It works well on the projects I've thrown at it, but I know there are edge cases I haven't hit. Some things I'm actively working on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ONNX-based vector search for smarter semantic queries&lt;/li&gt;
&lt;li&gt;Better handling of monorepos&lt;/li&gt;
&lt;li&gt;More granular symbol relationship mapping&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you try it and something breaks, that's genuinely useful feedback. Open an issue or just tell me what language/framework you were using.&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Install:&lt;/strong&gt; Search "CIPHER-Local" in VS Code, or grab it from the &lt;a href="https://marketplace.visualstudio.com/items?itemName=Naman09Khater.ecip-local" rel="noopener noreferrer"&gt;Marketplace&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Source:&lt;/strong&gt; &lt;a href="https://github.com/Enterprise-Code-Intelligence-Platform/ecip-local" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Works with:&lt;/strong&gt; GitHub Copilot, Cursor, Claude Code, Claude Desktop&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;If you're building with MCP or have ideas for code intelligence tools that would make your AI assistant smarter, I'd love to hear about it in the comments.&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How I gave GitHub Copilot real code intelligence with a local MCP server</title>
      <dc:creator>Naman Khater</dc:creator>
      <pubDate>Sun, 12 Apr 2026 14:33:57 +0000</pubDate>
      <link>https://forem.com/naman_khater_a2ff49af0528/how-i-gave-github-copilot-real-code-intelligence-with-a-local-mcp-server-3clk</link>
      <guid>https://forem.com/naman_khater_a2ff49af0528/how-i-gave-github-copilot-real-code-intelligence-with-a-local-mcp-server-3clk</guid>
      <description>&lt;h2&gt;
  
  
  The problem: Copilot doesn't know your codebase
&lt;/h2&gt;

&lt;p&gt;If you've used GitHub Copilot or Cursor on a large project, you've probably noticed that AI suggestions get worse as your codebase grows. The AI can see your open files, maybe grep through some others, but it doesn't actually understand the structure — where functions are defined, what calls what, how modules connect.&lt;/p&gt;

&lt;p&gt;I ran into this building a 16-service TypeScript platform. Copilot would hallucinate function signatures, miss cross-file references, and suggest imports that didn't exist. The AI was powerful, but context-blind.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fix: structured code context via MCP
&lt;/h2&gt;

&lt;p&gt;MCP (Model Context Protocol) is a standard that lets AI assistants call external tools. Instead of giving the AI raw file contents, you can give it structured tools — "search for symbols matching X", "find all references to function Y", "get the dependency tree for this project."&lt;/p&gt;

&lt;p&gt;I built &lt;a href="https://marketplace.visualstudio.com/items?itemName=Naman09Khater.ecip-local" rel="noopener noreferrer"&gt;CIPHER-Local&lt;/a&gt;, a VS Code extension that:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Indexes your workspace&lt;/strong&gt; using Tree-sitter (13 languages)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stores symbols, chunks, references, and dependencies&lt;/strong&gt; in a local SQLite database&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Serves 7 MCP tools&lt;/strong&gt; over HTTP+SSE on localhost&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When your AI assistant needs code context, it calls these tools instead of scanning files blindly.&lt;/p&gt;

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

&lt;p&gt;Install the extension, open a project, and CIPHER-Local automatically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Parses every supported file with Tree-sitter&lt;/li&gt;
&lt;li&gt;Extracts functions, classes, interfaces, types, constants&lt;/li&gt;
&lt;li&gt;Maps imports and call references&lt;/li&gt;
&lt;li&gt;Indexes everything into SQLite with FTS5 full-text search&lt;/li&gt;
&lt;li&gt;Starts an MCP server on a random localhost port&lt;/li&gt;
&lt;li&gt;Auto-configures &lt;code&gt;.github/copilot-instructions.md&lt;/code&gt; so Copilot knows to use MCP tools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now when Copilot needs to understand your code, it can call &lt;code&gt;search_symbols&lt;/code&gt; to find a function by name, &lt;code&gt;resolve_symbol&lt;/code&gt; to get its definition, or &lt;code&gt;find_references&lt;/code&gt; to see everywhere it's used. Structured data, not grep results.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Languages:&lt;/strong&gt; TypeScript, JavaScript, Python, Java, Go, Rust, C, C++, C#, Ruby, PHP, Swift, Kotlin&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MCP tools:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;search_symbols&lt;/code&gt; — find symbols by name pattern&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;resolve_symbol&lt;/code&gt; — get definition + source snippet&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;find_references&lt;/code&gt; — find import/call sites&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;semantic_search&lt;/code&gt; — BM25 full-text search&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;get_dependencies&lt;/code&gt; — package dependencies by ecosystem&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;get_file_context&lt;/code&gt; — all symbols for a file&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;list_namespaces&lt;/code&gt; — discover indexed workspaces&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;AI assistants:&lt;/strong&gt; GitHub Copilot, Cursor, Claude Code, Claude Desktop — anything MCP-compatible.&lt;/p&gt;

&lt;h2&gt;
  
  
  Privacy: everything stays local
&lt;/h2&gt;

&lt;p&gt;No cloud. No API keys. No account. The index lives in a SQLite file in your VS Code global storage. Nothing leaves your machine. MIT licensed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Search "CIPHER-Local" in VS Code extensions or install from:&lt;br&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=Naman09Khater.ecip-local" rel="noopener noreferrer"&gt;https://marketplace.visualstudio.com/items?itemName=Naman09Khater.ecip-local&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is a beta from a solo developer — I'd genuinely appreciate feedback on what languages to prioritize, what breaks, and what MCP tools would be most useful.&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/Enterprise-Code-Intelligence-Platform/ecip-local" rel="noopener noreferrer"&gt;https://github.com/Enterprise-Code-Intelligence-Platform/ecip-local&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>github</category>
      <category>mcp</category>
      <category>tooling</category>
    </item>
  </channel>
</rss>
