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.
Serena is an MCP server and toolkit that gives an LLM agent IDE-like capabilities: finding and editing code at the symbol level rather than by lines. It relies on language servers (LSP) or a paid JetBrains plugin: 80+ language servers, name paths (Class/method), references, implementations, declarations, diagnostics, rename, safe delete, symbol-level edits with atomic writes. It offers two interfaces: individual MCP tools and a REPL (serena_repl with the facades s.lsp, s.edit, s.fs, s.mem, s.shell, s.cfg, s.ext, s.jb). It also has Markdown memory with mem: links, client hooks, a CLI, a dashboard and a JetBrains plugin. One active project per process; client-agnostic: Claude Code, Codex, Copilot CLI, JetBrains AI Assistant, Claude Desktop and others. License: GPL-3.0-or-later, with src/solidlsp under MIT.
Of all the projects we compare, Serena is the closest to Council in goal (giving the agent an understanding of code), but it gets there differently: precise symbols through a language server instead of a project graph. Serena doesn't keep knowledge, rules, review or tasks. It is a precision layer over the code, and Council complements it with a graph, knowledge and rules.
| AI Council | Serena | |
|---|---|---|
| Who reads the code | Council itself: it parses the repositories and builds the graph. No model is called during analysis | A language server (LSP or JetBrains), on the agent's request. No model is called, and there is no graph of its own either |
| 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 | At tool-call time; LSP runs live and symbol caches are kept on disk. No background analysis |
| 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 | Symbols, name paths, references, implementations, declarations, hover, diagnostics, rename and workspace edits. No layers, architecture, DDD, code smells or quality scoring |
| Precision | A graph from static analysis: broad, but approximate where type inference is needed | The exact answer from the compiler or indexer, but it depends on the language server and toolchain; some servers return incomplete results until indexing finishes |
| Languages | Python, PHP, TypeScript, JavaScript, Java, Kotlin, C#, C, C++, with full layer analysis | 80+ language servers; separately, docs and data (Markdown, LaTeX, YAML, JSON, TOML) |
| Multiple repositories | A project made of several repositories with a shared graph | One active project per process; monorepos via workspace folders; other projects via ProjectServer and s.ext; the JetBrains backend can serve several open projects |
| External analyzers | SonarQube: imports its findings; its own scanner (text-based languages, JVM, .NET, .NET Framework on Windows) | — |
| History | Edges are versioned after every run; architecture_as_of shows the architecture as of a date | No history, only symbol caches on disk |
| 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 | Symbol lookup by name path, references, implementations, declarations, text search_for_pattern. No semantic or vector search |
| AI Council | Serena | |
|---|---|---|
| Knowledge base | Decisions, notes, Mermaid diagrams, changelogs. Each entry is anchored to code and reaches the agent when it touches that file | Markdown memory in .serena/memories plus a global ~/.serena/memories/global; mem:name links; onboarding creates core, tech_stack, suggested_commands, conventions, task_completion. The agent reads memory on its own, as needed |
| 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 | serena memories check checks only the integrity of mem: links (stale / unmarked / fuzzy), not whether memory still matches the code. No code positions and no staleness check |
| 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 | Memory is files in the working tree, versioned with git; no per-branch visibility or knowledge merging. Global memory is shared |
| 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 | Contexts, modes, tool exclusions, project config, read_only, trust boundaries. Conventions live as text in memory (mem:conventions); there is no rule engine with levels, anchoring and checks |
| 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 | Client hooks: activate at session start, remind on PreToolUse (after 3 greps / 3 reads / 4 mixed calls it refuses and points the agent to symbol tools), auto-approve, plan-context and plan-guard for Codex, cleanup. Memory is pull-based: the agent reads it itself; no per-file knowledge delivery |
| MCP | Server: about 60 tools, profiles, modes, XML with a size budget | Server: about 50 tools in the registry plus a REPL (serena_repl); the tool set depends on context and modes; client-agnostic. The set exposed to the client is fixed per session |
| Moving knowledge | Bulk export and import of knowledge, copying between projects | Memory is plain files: you can copy or commit them. No knowledge bundle |
| AI Council | Serena | |
|---|---|---|
| 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: Serena is an MCP server for Claude Code, Codex, Copilot CLI, JetBrains AI Assistant, Claude Desktop and others; serena setup configures the client and contexts are tailored to it |
| 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: Serena is a tool inside the developer's environment. It has project activation, onboarding and modes |
| 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 | Modes interactive, editing, planning, one-shot, onboarding, no-onboarding, no-memories, query-projects, benchmark. No task process |
| AI Council | Serena | |
|---|---|---|
| Code review | A separate service: looks at what changed, a verdict for every file, a second pass, publishing to the MR without duplicates | No AI review. LSP diagnostics per file and symbol; post-edit diagnostics are implemented but off by default; project health-check checks that the language server works, not code quality |
| 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: it uses the client's LLM. tiktoken and anthropic are included only for token counting; the dashboard shows tool usage stats and estimated token savings |
| Agents | Claude Code and Codex (hooks, MCP); MCP is open to any client | Client-agnostic: Claude Code, Codex, Copilot CLI, JetBrains AI Assistant, Claude Desktop and others; per-client contexts, serena setup; the JetBrains backend is a paid plugin |
| Cost and usage tracking | Telemetry for every MCP call and hook; an agent repeating a search signals a poor first answer | Dashboard: tool stats, token counter, task queue; no billing |
| Risks and safeguards | SSRF protection, RBAC, task isolation, read-only knowledge reviewer | Trust boundaries, path confinement, ignore rules, SHA256 for downloaded dependencies. But it is not a sandbox: read_only removes edits through tools, yet the REPL can still write and run shell commands; shell is available by default |
| AI Council | Serena | |
|---|---|---|
| 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 | One user, local. No multi-user model, roles or license |
| Interface | About 50 pages: code, graph, branches, quality, rules, review, knowledge, tickets, tasks, MCP Live, administration, System Health | MCP tools and REPL, CLI, dashboard (Flask API + web UI + tray + pywebview), JetBrains plugin. No multi-user interface |
| Monitoring | Telemetry for every MCP call and hook without PII; about 22 Prometheus rules with tests; System Health, tracing | Dashboard: logs, tool stats, task queue; file logs. 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 | Restarts a dead language server (_ensure_functional_ls), retries a call once, on-disk caches, pdeathsig on Linux. No backup or restore check |
| Storage | Neo4j, Qdrant, PostgreSQL per service, Temporal, NATS, Redis | Files: the project's .serena/ (config, memory, caches), ~/.serena (global config, memory, logs, language servers), LSP processes. No graph or vector database |
| Isolation | A sysbox container per task, one-time credentials for push, read-only knowledge reviewer, permission checks in a single gateway, SSRF protection | Trust boundary, path confinement, ignore rules, SHA256 for dependencies; no sandbox. read_only removes edit tools but not the REPL; the dashboard and ProjectServer are local services with trusted hosts or a secret |
| Delivery | A distribution for self-hosted installation, or SaaS; on the developer's machine, MCP and hooks | PyPI serena-agent / uvx, serena setup for clients, Docker (the repo notes mismatches between compose and the Dockerfile), Nix, paid JetBrains plugin |
| License | Proprietary | GPL-3.0-or-later; src/solidlsp under MIT |
Serena is the closest to Council in goal (giving the agent an understanding of code), but it gets there differently: precise symbols through a language server instead of a project graph. It doesn't compete with Council's knowledge, rules, review and tasks. It is a precision layer over the code, and Council complements it with a graph, knowledge and rules.
Where Serena is stronger:
serena setup and per-client contexts;remind hook, which catches the agent drifting toward grep/read and steers it back to LSP symbol tools, plus plan mode and auto-approve. Council's hooks steer the agent toward the knowledge base and the graph, not toward LSP;Where Council is stronger:
mem: links, but they are not anchored to code positions or checked against the code.architecture_as_of, versioned edges, an external analyzer; ask_question returns excerpts with FQNs. Serena works with one active project through a language server.Can they work together? Yes, and they pair naturally: both are MCP servers, and one agent can connect to both. Serena provides precise symbol reads and edits; Council provides the graph, knowledge, rules and review. For example, Council finds the module and related knowledge, Serena reads and edits the exact symbol, and Council checks the diff against the rules and reviews it. They overlap on symbol and reference lookup: Council has find_usages, find_path, search_code; Serena has find_symbol, find_referencing_symbols. Serena is more precise at the LSP level, Council covers more of the project and its relationships. There is no built-in integration: for Council to deliver rules into Serena's context you need a shared layer, or both MCP servers connected to the same client.
Connect AI Council to one of your repositories and see the project graph, rules and review on your real code.