Skip to main content
← Blog/Ecosystem

Why 70,000 Developers
Build Claude Code Plugins
and Why Memory Is Missing

Jason Sosa9 min read

On March 31, 2026, Claude Code's source leaked through an npm sourcemap in v2.1.88, exposing 512,000 lines of internal implementation. Developers immediately began dissecting the hooks system, the agent architecture, the tool dispatch loop. The community reaction was telling: this was not outrage about a security incident. It was excitement about what the internals revealed. A platform this extensible invites builders. Over 70,000 developers are now building on top of Claude Code, and the ecosystem shows no signs of slowing. But every extension they ship has the same structural gap: it starts from zero on every run. OMEGA is the layer that closes that gap.

What the Claude Code Ecosystem Actually Looks Like

Claude Code exposes four primary extension points. Each one solves a different problem, and together they form a remarkably complete platform for building AI-native developer tooling.

Slash Commands
Custom commands defined in CLAUDE.md or .claude/ directories. Invoked with /name. Can embed static context, trigger agents, or run bash snippets. The simplest extension point: write markdown, get a command.
Hooks
Scripts that fire at specific lifecycle events: PreToolUse, PostToolUse, Stop, SubagentStop. Hooks can inspect tool calls, inject context into responses, block dangerous operations, or trigger side effects. The leaked sourcemap confirmed what power users suspected: hooks are deeply integrated into the dispatch loop.
MCP Servers
Model Context Protocol servers that expose tools to Claude Code over stdio or HTTP. Claude Code treats each MCP tool like a native capability. Developers ship MCP servers for databases, APIs, memory systems, code analysis, deployment pipelines, and more.
Agent Definitions
Reusable agent configurations with specific roles, tool access, and instruction sets. Projects like oh-my-claudecode ship 19 pre-built agents for roles like security reviewer, PR summarizer, and test generator.

The most prominent community project illustrating this ecosystem is oh-my-claudecode by Yeachan Heo. At 19,798 GitHub stars, MIT licensed, currently at v4.9.3, it packages 885 TypeScript files worth of configuration, hooks, and agent definitions into a single install. It ships 19 agents and three execution modes: standard, parallel, and orchestrated. The star count is not the interesting part. What is interesting is the architecture: it treats Claude Code as a runtime and ships a layer on top of it, like a framework for a framework.

This is exactly the kind of thing developers do when a platform is extensible enough to warrant it. The question is what the next layer looks like.

The Amnesia Problem Every Plugin Inherits

Claude Code is stateless between sessions. This is not a bug; it is a deliberate consequence of how LLMs work. Context windows fill and flush. Every new invocation of claude starts with whatever is in the current working directory, whatever CLAUDE.md files are present, and whatever the user types. Nothing more.

For simple tasks, this is fine. For building anything that compounds over time, it is a fundamental constraint. Consider what gets lost at the end of every Claude Code session:

Architectural decisions
Why did you choose this approach over that one? The reasoning exists in chat history that disappears the moment the session ends.
Discovered failure modes
You learned that a certain pattern causes flaky tests in this codebase. Next session, Claude Code will suggest the same pattern again.
User preferences
You corrected the agent three times on naming conventions. Tomorrow it will make the same mistakes.
Cross-session context
An agent wrote a module last Tuesday. Today a different agent is working on a feature that depends on it. Without memory, the second agent has no awareness of the first.
Hook-injected intelligence
Hooks can inject static rules, but they cannot inject dynamic context that accumulated over fifty sessions of working in the same codebase.
Agent coordination state
oh-my-claudecode ships 19 agents. When they hand off work to each other, the handoff carries only what fits in a single context window. Prior history is truncated.

Developers have built workarounds. CLAUDE.md files accumulate project-specific rules. Hooks inject boilerplate context. Some teams maintain handoff documents that agents are instructed to read and update. These work up to a point. At scale, they break down: CLAUDE.md becomes unwieldy, hooks inject the same stale context regardless of what is actually relevant, and handoff documents require discipline to maintain that most workflows lack.

The workarounds treat the symptom. The problem is that there is no memory layer.

OMEGA: Memory as a First-Class MCP Server

OMEGA runs as an MCP server. Claude Code connects to it via stdio, the same way it connects to any other MCP server. From Claude Code's perspective, OMEGA tools look identical to any other tool: named functions with parameters and return values.

What makes OMEGA different from a generic MCP server is what those tools do. They give Claude Code a persistent, semantically searchable store that survives across every session, every tool invocation, and every agent handoff.

~/.claude.json (add OMEGA as MCP server)
{
  "mcpServers": {
    "omega": {
      "command": "python3",
      "args": ["-m", "omega", "serve"]
    }
  }
}

That is the entire setup. Once connected, Claude Code has access to OMEGA's public tool tier: 17 MCP tools covering storage, semantic retrieval, knowledge graph operations, session coordination, and memory querying. The Pro tier exposes 116+ tools including multi-agent coordination, entity memory, and advisory functions.

omega_store(content, type, metadata={}, entity_id=None)
Store a memory with type tagging and optional metadata. Types include decision, user_preference, lesson, code_pattern, and more. Memories are embedded immediately and available for semantic retrieval.
omega_query(query, mode='semantic', limit=10)
Retrieve memories by semantic similarity. Query with natural language: 'prior decisions about authentication' returns the most relevant stored decisions, not just keyword matches. 95.4% accuracy on LongMemEval.
omega_welcome()
Called at session start. Returns a briefing of recent activity, pending tasks, and relevant context for the current working directory. Replaces manual review of handoff documents.
omega_protocol()
Returns the operating protocol for the current session: coordination rules, memory discipline, project context. Plugins and agents call this to get consistent behavioral guidelines across sessions.

What This Enables for Plugin Developers

Consider what the oh-my-claudecode architecture looks like with OMEGA in the stack. The project ships 19 agents. Each agent currently operates with the context it receives at invocation time. With OMEGA:

Agents share a memory substrate
Without OMEGA
Agent A finishes a refactor. Agent B starts a related task with no awareness of what A changed or why.
With OMEGA
Agent A stores its decisions in OMEGA. Agent B calls omega_query('recent refactor decisions') at the start of its session and gets the relevant context immediately.
Hooks become adaptive
Without OMEGA
A PreToolUse hook injects the same static rules every time, regardless of what the agent has learned.
With OMEGA
A PreToolUse hook calls omega_query('relevant patterns for this file type') and injects dynamically retrieved, session-specific context.
Slash commands carry history
Without OMEGA
/review runs a code review from scratch with no memory of prior reviews in the same codebase.
With OMEGA
/review calls omega_query('prior review findings this repo') and incorporates patterns observed over weeks of reviews.
Orchestrators coordinate without truncation
Without OMEGA
An orchestrator passes a context window worth of state to subagents. Anything beyond the window is dropped.
With OMEGA
The orchestrator stores coordination state in OMEGA. Subagents retrieve only what they need, by relevance, not by position in a context window.

Local-First: Your Intelligence, Your Machine

When you build a plugin that accumulates memory over time, the question of where that memory lives matters. The sourcemap leak reminded the community that even trusted tools can expose internals unexpectedly. Memory compounds that surface area: every architectural decision stored, every codebase pattern learned, every user preference captured represents information worth protecting.

OMEGA is local-first by design. There is no API key required, no cloud account, no data leaving the machine. The storage engine is SQLite at ~/.omega/. The embedding engine is bge-small-en-v1.5 compiled to ONNX, running entirely in-process. A full OMEGA install with the embedding model is under 50MB.

installation
$ pip install omega-memory
$ omega setup

# That's it. No API keys. No cloud config.
# Storage: ~/.omega/omega.db (SQLite)
# Embeddings: ~/.omega/models/ (ONNX, ~33MB)

The Apache-2.0 license means plugin developers can bundle OMEGA into their own tooling without restriction. The local-first architecture means the memory you accumulate is owned by the person running the tool, not by a vendor. This distinction matters more as agents become longer-running and the intelligence they accumulate becomes more valuable.

The alternative, renting memory from a cloud service, creates a dependency that compounds over time. The longer an agent runs, the more its value derives from accumulated context. If that context lives in a vendor's database, the agent's intelligence is not yours: it is theirs, licensed back to you at their pricing and their terms.

19,798
oh-my-claudecode stars
95.4%
LongMemEval score
17
Public MCP tools
0
Cloud dependencies

What the Leaked Sourcemap Revealed

The v2.1.88 sourcemap leak on March 31, 2026, was significant not because it exposed a vulnerability but because of what 512,000 lines of internal implementation told the community about the platform they were building on.

Developers who read the internals found confirmation of what they had been assuming: the hooks system is deeply integrated, the tool dispatch architecture is well-designed for extension, and the agent coordination logic is more sophisticated than the public documentation implied. The community response was largely constructive: better documentation requests, architectural pattern analysis, and new plugin ideas informed by the internals.

One thing the sourcemap cannot reveal, because it does not exist yet in the codebase: a native memory layer. Claude Code ships with tools for reading files, executing commands, and calling external services. It does not ship with a mechanism for accumulating knowledge across sessions. That is not an oversight. It is a boundary that MCP servers are designed to fill.

The plugin ecosystem exists because Anthropic built Claude Code to be extended. OMEGA is an extension. The install is one line.

CapabilityClaude Code (native)Claude Code + OMEGA
Session memoryNone (resets on exit)Persistent across sessions
Cross-agent contextContext window onlyShared memory substrate
Knowledge retrievalFile read / grepSemantic search (95.4% LongMemEval)
Decision trackingChat history (ephemeral)Typed memory store (permanent)
Hook intelligenceStatic rule injectionDynamic context retrieval
Data sovereigntyAnthropic serversLocal SQLite, no cloud
Plugin memoryNot available17 MCP tools (public tier)

Frequently Asked Questions

What is the Claude Code plugin ecosystem?

Claude Code supports extensions via slash commands, hooks, MCP servers, and agent definitions. Projects like oh-my-claudecode (19,798 stars, v4.9.3, 885 TypeScript files, 19 agents) package these into reusable configurations. Over 70,000 developers are building or using Claude Code extensions.

Why do Claude Code plugins lack persistent memory?

Claude Code is stateless between sessions. Each invocation starts from the current directory, CLAUDE.md files, and the current prompt. Hooks can inject static context, but nothing accumulates dynamically. Every session starts from zero.

How does OMEGA add memory to Claude Code?

OMEGA runs as an MCP server. Add it to your .claude.json mcpServers config. It exposes 17 tools (public tier) for storing memories, querying by semantic similarity, and coordinating across agents. Data stays in local SQLite. No API key required.

Does OMEGA work with oh-my-claudecode?

Yes. OMEGA is an MCP server, which is one of Claude Code's standard extension points. It works alongside any other hooks, slash commands, or agent definitions you have configured, including oh-my-claudecode's 19 agents.

What is the LongMemEval benchmark?

LongMemEval is a benchmark for testing memory retrieval accuracy in long-horizon tasks: recalling facts from early in a conversation, tracking user preferences, and retrieving decisions made sessions ago. OMEGA scores 95.4% on LongMemEval, using local ONNX embeddings with no cloud dependencies.

Give your Claude Code plugins memory.
Persistent, local-first, semantically searchable. One install, 17 tools, zero cloud dependencies.
pip install omega-memory

OMEGA is free, local-first, and Apache 2.0 licensed.