AI Council is a platform for development teams, cloud or self-hosted. It parses your repositories into a code graph on its own: stack, structure, dependencies and cycles, calls, data layer, architecture, DDD, patterns, style, code smells and ISO 25010 quality. On top of the graph sits the project knowledge base: decisions, notes, diagrams and changelogs. Each entry is anchored to a place in the code and to a branch, and reaches the agent when it touches that file. Conventions live separately: rules at three scopes (code entities, paths, the whole project) with MUST/SHOULD levels, states, and checks before an edit and against the diff. Around this sit review with publishing to the MR, tickets, tasks, and companies with roles and licensing. Static analysis does not use a model, but without a model that is all you get: review, knowledge review, AI chat and workspaces run through a host worker, a bridge and the vendor's CLI/OAuth. The model lives on the host, not inside the Council stack.
There are two ways to work with Council. On a developer's machine, Claude Code or Codex connects to it via MCP and hooks: project rules arrive with every message, file context on Read/Edit/Bash, and a checklist at the end of the turn. In a workspace, the task runs on a VM in an isolated sysbox container, can live for days, and a person drives it from the web UI: from analysis and diff to commit, push and MR.
Mem0 is a memory layer for AI applications and agents. It takes messages, extracts facts, preferences and procedures from them with a single LLM call, stores them in a vector store scoped by user_id/agent_id/run_id, and later searches them in hybrid mode: semantic + BM25 + entity boost. It has Python and TypeScript SDKs, two CLIs, a self-hosted FastAPI server with pgvector and a Next.js dashboard, plugins for Claude Code, Cursor, Codex, Kimi, Antigravity, OpenCode, OpenClaw, Pi and DeepSeek, and integrations with Vercel AI SDK, n8n, Zapier, Hermes and Strands. Entries can be scoped, given an expiration date, updated and deleted; procedural memory is a separate type. The hosted Platform adds things the OSS version doesn't have: a native memory graph, decay, temporal reasoning, Dream consolidation, profiles, webhooks, export, batch, app_id, organizations and projects. The OSS version explicitly rejects these features with an error. Apache-2.0.
It is a memory layer, not a code understanding layer. Mem0 stores what the agent learned about the user, the project or the work in progress; Council stores knowledge about the code anchored to positions, plus authoritative team rules. They overlap on delivering memory to the agent through hooks and MCP, and on hybrid search.
| AI Council | Mem0 | |
|---|---|---|
| Who reads the code | Council itself: it parses the repositories and builds the graph. No model is called during analysis | Nobody: Mem0 doesn't analyze code. It extracts memory from messages with an LLM call and entities with spaCy; no code graph, layers or metrics. Coding agent plugins also capture a session episode: files read and changed, commands, searches, branch and SHA. That is metadata about the work, not code structure |
| When | On project creation, on push to main (polling), on demand, and nightly; after the agent edits a file, the file and its dependents are recomputed | On add or a flush from a plugin; search happens on search and prompt injection. No background code analysis; Dream on the Platform is background consolidation of memory, not code |
| What it extracts | Layers L0–L10: stack, structure, dependencies and cycles, metrics and calls, data (ORM, DDL), architecture and forbidden dependencies, patterns, style, DDD, files that change together, code smells, ISO 25010 quality, diagrams | Memory: the text of a fact, preference or procedure, attributed_to, hash, lemmatized text, scope, expiration, metadata; PROPER/QUOTED/TOPIC/IDENTIFIER entities in a sidecar collection. A coding session episode: task, conclusions, subagent results, tools, files, commands, provenance (repo, branch, SHA) |
| What's missing | — | Code graph, dependencies, architecture, DDD, patterns, style, code smells, ISO 25010, diagrams. The Platform's "memory graph" is entity co-occurrence, not typed relationships and not a code graph |
| Languages | Python, PHP, TypeScript, JavaScript, Java, Kotlin, C#, C, C++, with full layer analysis | Not applicable: memory is language-agnostic. Plugins work with any repository the agent reads |
| Multiple repositories | A project made of several repositories with a shared graph | Plugins scope memory by an app_id/project_id derived from the git remote; no shared graph across repositories |
| History | Edges are versioned after every run; architecture_as_of shows the architecture as of a date | Memory history in SQLite history (ADD/UPDATE/DELETE); no code or architecture history |
| Search | Semantic and regex search, find_usages, find_path, dependency graph, similar implementations; ask_question returns excerpts from the knowledge base without a model's paraphrase | Hybrid: semantic candidates with over-fetch max(4k, 60), a sigmoid BM25 boost, an entity boost; threshold applies to the semantic score before blending. BM25 and entities don't add candidates. Without spaCy and fastembed it is semantic only. No graph queries |
| AI Council | Mem0 | |
|---|---|---|
| Knowledge base | Decisions, notes, Mermaid diagrams, changelogs. Each entry is anchored to code and reaches the agent when it touches that file | Memory: facts, preferences, procedures, coding session episodes. Scopes user_id/agent_id/run_id, plus app_id on the Platform. Entries are not anchored to code positions; the only link to code is plugin metadata (repo, dirs, branch, SHA) |
| Freshness | An entry holds its place in the code on its branch and goes back for re-checking when the code under it changes, the entry itself changes, a similar entry appears, or the branch is merged. The reviewer must provide a quote; the outcome is a label | OSS: expiration_date hides an entry from search and get_all after the date; MD5 dedup within a top-10 window; extraction only adds and never rewrites old entries. Platform: decay 0.3–1.5× (opt-in), Dream (supersede/merge always, synthesis on Pro and above), temporal reasoning. No check of whether an entry still matches the code |
| Branches | Knowledge and the graph are stored per branch; the agent sees its own branch, the parent and whatever was merged; on merge, entries move with the code | Plugins record branch and SHA in metadata and scope by repo/app_id; no per-branch knowledge versioning or merging |
| Rules | Conventions at three scopes: code entities, paths (they apply even to a file that doesn't exist yet), the whole project. MUST/SHOULD, draft, retired and deleted states. Checked before an edit and against the diff | No conventions engine. There are custom_instructions and agent_custom_instructions (text added to the extraction prompt), categories, and project/personal instructions in plugins. No MUST/SHOULD levels, no anchoring to entities or paths, no diff check |
| How it reaches the agent | Claude Code hooks: project rules with every message, a wide channel before an action, file context on Read/Edit/Bash, a checklist at the end; the KB gate | Native plugins: hooks on SessionStart, UserPromptSubmit (up to 5 memories on the first prompt), PostToolUse/PostToolUseFailure, Stop, PreCompact, SessionEnd; all fail-open. MCP: a single read-only search_memories in the Python plugins. Writes happen in the background and block nothing; no KB gate |
| MCP | Server: about 60 tools, profiles, modes, XML with a size budget | Python plugins: 1 tool, search_memories. TS hosts have more: OpenCode 10 tools, OpenClaw and Pi 6, DeepSeek 2. Plus REST API, CLI and SDKs |
| Moving knowledge | Bulk export and import of knowledge, copying between projects | No export in OSS. The Platform has schema-driven export, batch and webhooks. Plugins keep a local evidence.sqlite3 and flush to the Platform; no knowledge bundle |
| AI Council | Mem0 | |
|---|---|---|
| Requirements | Traces tests to requirements by tags: coverage and gaps; "no test" is a tri-state, not requirements management | — |
| Tickets | Jira, GitHub Issues, Redmine: reading, parsing into knowledge, graph-based advice per ticket | — |
| Working on your own machine | The agent is the developer's Claude Code or Codex; Council supplies context and rules via MCP and hooks; local diff review, diff walkthrough, diff check against rules | This is its main mode: plugins for Claude Code, Cursor, Codex, Kimi, Antigravity, OpenCode, OpenClaw, Pi and DeepSeek; an in-process library for applications; MCP |
| Workspace | Tasks on a VM in a sysbox container, living for days; a person drives them from chat; a mentor agent; diff, commit, push, MR | No tasks or workspace: memory and session capture only |
| PR | Review with publishing to the MR (GitHub, GitLab, Bitbucket) | — |
| Process | A task state machine: created, analysis, in progress, MR, closed; a person defines what happens at each step | No task process. There is a capture, flush, extract, search/inject loop; on the Platform add is asynchronous (event_id and polling). Dream is background memory consolidation, not a task |
| AI Council | Mem0 | |
|---|---|---|
| Code review | A separate service: looks at what changed, a verdict for every file, a second pass, publishing to the MR without duplicates; knowledge review is separate | No AI code review. Plugins record failed tools and commands as evidence; the server keeps request_logs. No memory review and no notion of unapproved rules |
| Models | A model is required: on the host, two processes use the vendor's OAuth: AI chat and six background jobs (review, knowledge review, ticket parsing and others). Without a model, only static code analysis remains | No LLM of its own: you need a provider key. Extraction is 1 LLM call per add; embeddings come from a provider; an optional reranker. 18 LLMs, 11 embedders, 25 stores, 5 rerankers; defaults are OpenAI gpt-5-mini and text-embedding-3-small, local Qdrant in Python and in-memory in TS. The self-hosted image ships only OpenAI/Anthropic/Gemini (LLM) and OpenAI/Gemini (embedder) |
| Agents | Claude Code and Codex (hooks, MCP); MCP is open to any client | 5 native plugins, a portable plugin and 4 TS hosts; integrations with Vercel AI SDK, n8n, Zapier, Hermes, Strands; SDKs, CLI, REST |
| Measurement | Telemetry for every MCP call and hook; an agent repeating a search signals a poor first answer | Tests: pytest, jest/vitest; one required CI Gate. We did not run the test suite (dependencies were not installed). No public memory benchmark in the repository. Council's analysis of the Mem0 codebase: maintainability 0.75; 2 of 7 fitness functions pass; 36 god classes, 905 long methods, 5 cycles, type coverage 0.52 |
| Guarantees | Test gates, review, conventions | One required CI Gate, a release router by tag prefix, a PR gate requiring an accepted issue, vouch, CLA; regression test first. 15 exception classes and explicit degradation modes |
| AI Council | Mem0 | |
|---|---|---|
| Users | Companies, members, roles (can be scoped to a project), permissions. Company API keys. Data is separated: a request without a company is rejected. License and seat limits | Platform: organizations, projects and members, app_id. OSS: one local config. Self-hosted: users and API keys, but memory is single-tenant, so any valid key can read any memory. No per-project roles, license or seats in OSS |
| Interface | About 50 pages: code, graph, branches, quality, rules, review, knowledge, tickets, tasks, MCP Live, administration, System Health | Python and TS SDKs, two CLIs (mem0-cli on Typer and @mem0/cli on Commander), agent plugins, a Next.js dashboard (requests, memories, entities, API keys, configuration, settings; analytics, categories, export and webhooks are locked placeholders), REST and an OpenAI-compatible proxy |
| Monitoring | Telemetry for every MCP call and hook without PII; about 22 Prometheus rules with tests; System Health, tracing | PostHog is on by default (MEM0_TELEMETRY=false turns it off), request_logs and X-Request-ID, plugin logs, flush statuses; no Prometheus or System Health |
| Self-healing | Reconciles Temporal with the database, cleans up orphaned data, deletes projects in batches, nightly backup with restore check, telemetry retention | Quarantine for a corrupted plugin SQLite file, flush retries (up to 5 attempts), one-by-one insert retries, a guard against a repeated batch in delete_all, single-use refresh JTI. The server has no config rollback; no nightly backup or restore check |
| Storage | Neo4j, Qdrant, PostgreSQL per service, Temporal, NATS, Redis | OSS: the vector store is the source of truth, SQLite history/messages, sidecar {collection}_entities. Server: pgvector and PostgreSQL mem0_app. Platform: managed |
| Isolation | A sysbox container per task, one-time credentials for push, read-only knowledge reviewer, permission checks in a single gateway, SSRF protection | OSS: runs in the application process, no sandbox. Plugins: local evidence store, fail-open. Server: JWT and API keys, but memory authorization is single-tenant; org/project exist only on the Platform |
| Delivery | A distribution for self-hosted installation, or SaaS; on the developer's machine, MCP and hooks | pip mem0ai, npm mem0ai, Docker Compose for the server, plugins, CLI, Platform SaaS; Apache-2.0 |
| License | Proprietary | Apache-2.0 (OSS); the Platform is proprietary |
Mem0 is a memory layer, not a code understanding layer. It does well something Council doesn't offer as a separate product: general-purpose memory for applications and agents, with scopes, expiration, hybrid search and ready-made plugins for nine agent hosts. Council does something else: it parses code itself and keeps knowledge anchored to code positions, authoritative conventions, review and tasks. They overlap on delivering memory to the agent through hooks and MCP and on hybrid search. They define truth differently: Council checks an entry against the code; Mem0 checks it against expiration and consolidation (on the Platform), or not at all (in OSS).
Where Mem0 is stronger:
user_id/agent_id/run_id (plus app_id on the Platform), with metadata protected against scope spoofing;explain, a threshold and an optional reranker;expiration_date), and on the Platform: decay, temporal reasoning, Dream consolidation, profiles, webhooks, export, batch;Where Council is stronger:
architecture_as_of, versioned edges, SonarQube; ask_question returns excerpts with FQNs, not a model's paraphrase. Mem0 stores memory, not project architecture.Can they work together? Yes, they are different layers. Mem0 stores memory about the user, the project and the session; Council stores knowledge about the code and team rules. Both work through Claude Code hooks and MCP, so they can live in the same session. They overlap on context injection at the first prompt and before tool use: Mem0 injects memories, Council injects rules and per-file knowledge. There is no built-in integration. A practical setup: Mem0 for preferences and episodes, Council as the source of truth about the code.
Connect AI Council to one of your repositories and see the project graph, rules and review on your real code.