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.
agent-memory-mcp is a single Go binary that works as both an MCP server and a CLI. It gives the agent three things: typed long-term memory in SQLite, RAG search over the repository's documents (docs, ADRs, RFCs, changelogs, runbooks, postmortems, CI, Helm, Terraform, K8s), and a knowledge maintenance layer: session consolidation, steward scans, verification, a canonical layer, a temporal model and a knowledge graph. 50 MCP tools, or 8 when grouped; three Claude Code hooks; a session tracker; two SQLite files and zero external databases. MIT.
Of the projects we compared, it is the closest to Council's knowledge layer: it has trust, a canonical layer, a review queue, drift detection, verification, temporal validity and knowledge maintenance. But it is a project knowledge bank, not a code understanding tool: it doesn't build a symbol graph, keep conventions, review diffs, run tasks on a VM, or know about companies and roles.
| AI Council | agent-memory-mcp | |
|---|---|---|
| Who reads the code | Council itself: it parses the repositories and builds the graph. No model is called during analysis | Nobody: there is no code graph. RAG indexes documents and configs, memory stores knowledge about the project, and repo_read/repo_search read files as text. No symbols, calls, dependencies or architecture. The knowledge graph is subj → rel → obj triples about the domain, not about the code |
| 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 | The RAG index on index/index_documents, at startup (auto-indexing) and via a watcher every 5 minutes; memory on store_memory/engineering tools, hooks and close_session; the steward per its manual/scheduled/event_driven policy; archive sweep hourly |
| 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: type (episodic/semantic/procedural/working), engineering type (decision/runbook/incident/postmortem/caveat/migration-note/procedure/dead_end), tags, context, importance, trust metadata, temporal fields, sediment layer, embedding. RAG: document chunks with breadcrumbs and source type. Graph: triples. Nothing about code, its structure or metrics |
| What's missing | — | Code graph, dependencies, calls, architecture layers, DDD, patterns, style, code smells, ISO 25010 and architecture diagrams. RAG sees documentation and configs, not the source AST |
| Languages | Python, PHP, TypeScript, JavaScript, Java, Kotlin, C#, C, C++, with full layer analysis | Code languages aren't parsed. RAG classifies document and config types (Markdown, ADR, RFC, changelog, runbook, postmortem, CI, Helm, Terraform, K8s), not programming languages |
| Multiple repositories | A project made of several repositories with a shared graph | One MCP_ROOT and an MCP_ALLOW_DIRS allowlist; one bank and one index per root. No shared graph across repositories |
| History | Edges are versioned after every run; architecture_as_of shows the architecture as of a date | No code history. Knowledge has a temporal model: valid_from/valid_until, superseded_by, replaces, recall_as_of, knowledge_timeline |
| 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 | Two searches: memory recall (centered cosine + trust + importance + freshness + sediment) and hybrid RAG (semantic + BM25, weighted fusion or RRF, an optional reranker, capped at 1 chunk per document). Plus multihop over the triple graph. No search over code symbols |
| AI Council | agent-memory-mcp | |
|---|---|---|
| Knowledge base | Decisions, notes, Mermaid diagrams, changelogs. Each entry is anchored to code and reaches the agent when it touches that file | A strong project knowledge bank: typed memory, engineering entities (decision, runbook, incident, postmortem, caveat, migration-note, procedure, dead_end), a triple graph, a canonical layer, a project bank with 8 views, a review queue. Entries aren't anchored to code positions; the link to code is through path mentions, which the drift scan checks |
| 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 | Layered freshness: last_verified_at and freshness_score, the canonical layer, steward scanners for stale and expired working entries, a drift scan over file references (source_missing, source_changed, stale_unverified), verification_candidates, verify_entry, a review queue, temporal validity. Checks work on files and structural signals, not on code positions with a reviewer's quote |
| 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 | No per-branch knowledge: one bank per root. The temporal model describes versions of knowledge, not git branches |
| 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 is a steward policy (thresholds for duplicates, stale, canonical, working TTL), which is a knowledge maintenance policy, not code rules. 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 | Three Claude Code hooks: SessionStart → context-inject (recent knowledge and pending summaries into the system prompt), PreCompact → checkpoint (transcript, Jaccard dedup), SessionEnd → auto-capture (sessionclose extract, plan, apply). Plus a session tracker based on MCP calls. No KB gate |
| MCP | Server: about 60 tools, profiles, modes, XML with a size budget | 50 tools; with MCP_TOOL_GROUPING=true, 6 groups and 2 standalone tools (8 instead of 50), while tools/call always accepts both the group and the legacy name. Also HTTP /mcp, /health, /console |
| Moving knowledge | Bulk export and import of knowledge, copying between projects | export produces portable JSON of memory only; the index is rebuilt with index. No knowledge bundle with import. Backup means copying the whole directory or sqlite3 .backup, because of WAL |
| AI Council | agent-memory-mcp | |
|---|---|---|
| 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 only mode: solo stdio, MCP, CLI, Claude Code hooks, a Homebrew service on macOS. Shared HTTP is for a trusted team, but without roles |
| 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 workspace. There is a task lifecycle: end_task, sweep_archive, archive sweep over tasks/archive, but a task doesn't run on a VM or carry a diff through to an MR |
| 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 knowledge loop: capture, sessionclose extract, plan, apply, review queue, steward/drift/verify, canonical, recall. Archive sweep closes tasks but doesn't drive them |
| AI Council | agent-memory-mcp | |
|---|---|---|
| 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. There is knowledge review: the review_queue_item queue, resolve_review_item, steward_inbox_resolve, verify_entry, conflicts, drift. This checks knowledge, not the diff |
| 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 in consolidation: sessionclose and the steward are deterministic heuristics. Embeddings are needed for semantics: Jina → OpenAI → llama.cpp → Ollama; local-only mode turns off hosted providers. An optional triple extractor is the only LLM call, off by default. The Jina reranker is optional and off |
| Agents | Claude Code and Codex (hooks, MCP); MCP is open to any client | MCP clients and Claude Code via three hooks; CLI; HTTP JSON-RPC. No agent runtime of its own |
| Measurement | Telemetry for every MCP call and hook; an agent repeating a search signals a poor first answer | 692 tests, 14 benchmarks. We ran go build ./... and the tests of nine core packages (October 26, 2026); the eval suite (make eval, make eval-recall) was not run. Measured defaults: mean-centering Hit@5 0.6232 → 0.7217; age decay is off (0.1942 vs 0.7217); a cap of 1 chunk per document takes R@5 0.5104 → 0.8676 and nDCG 0.6184 → 0.8927; RRF doesn't move Hit@5/MRR |
| Guarantees | Test gates, review, conventions | CI: build → make vet → go test -race ./... → make eval → GoReleaser deprecation gate; go vet with the eval and corpus tags; 692 tests; the TestDispatchTableCompleteness contract checks for exactly 50 tools; MCP Registry publishing via GitHub OIDC |
| AI Council | agent-memory-mcp | |
|---|---|---|
| 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. Shared HTTP uses a single bearer token per instance, with no users, roles, rate limiting or mTLS. No companies or license |
| Interface | About 50 pages: code, graph, branches, quality, rules, review, knowledge, tickets, tasks, MCP Live, administration, System Health | MCP with 50 tools (8 in grouped mode), CLI, three Claude Code hooks, HTTP /mcp, /health, /console (a static page), a project bank view with 8 views. No UI of its own |
| Monitoring | Telemetry for every MCP call and hook without PII; about 22 Prometheus rules with tests; System Health, tracing | stats JSONL, memory_stats, steward_status, drift_scan, RetrievalPath and Degraded, 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 | WAL and a foreign-write watcher (cache reload by data_version), index_state=dirty and re-indexing, orphan cleanup, inbox reconciliation, archive sweep, documented backup/restore. No nightly backup or restore check |
| Storage | Neo4j, Qdrant, PostgreSQL per service, Temporal, NATS, Redis | Two SQLite files: memories.db (memory, triples, steward) and vectors.db (chunks, index). No external databases; vector search is a linear cosine scan over an in-memory copy |
| Isolation | A sysbox container per task, one-time credentials for push, read-only knowledge reviewer, permission checks in a single gateway, SSRF protection | PathGuard (root + allowlist, no .. or absolute paths), bearer auth on non-loopback, constant-time comparison, secret redaction, local-only embeddings. No sandbox; Docker runs as root; prompt injection through stored content isn't modeled |
| Delivery | A distribution for self-hosted installation, or SaaS; on the developer's machine, MCP and hooks | A Go binary, Docker Compose with an Ollama sidecar and an nginx TLS proxy, Homebrew + launchd, GoReleaser, MCP Registry; MIT |
| License | Proprietary | MIT |
Of the projects we compared, agent-memory-mcp is the closest to Council's knowledge layer. It has things most local tools don't: trust, a canonical layer with a provenance gate, a review queue, a steward with scanners and an inbox, a drift scan, verification, temporal validity, sedimentation and a knowledge graph. But it doesn't understand code: there is no symbol graph, RAG reads documentation and configs, there are no conventions or diff review, and no tasks on a VM or team model.
Where agent-memory-mcp is stronger:
resolve_review_item and steward_inbox_resolve;valid_from/valid_until, superseded_by, replaces, recall_as_of, knowledge_timeline;Where Council is stronger:
merge_knowledge/supersede_knowledge preserve history. agent-memory has trust metadata and temporal validity, but no anchoring to code positions and no check against the code.architecture_as_of shows the architecture as of a date, edges are versioned after every run, and SonarQube findings are imported as an external analyzer. agent-memory stores knowledge, not the project's architecture.Can they work together? Yes, they are different layers. agent-memory-mcp is a project knowledge bank and document RAG for the agent; Council is the code graph, conventions, review and tasks. Both are MCP servers, so one agent can connect to both. They overlap on knowledge and the review queue: agent-memory stores decisions, runbooks and session lessons; Council stores knowledge anchored to code positions and team rules. There is no built-in integration. A practical setup: agent-memory for "what we know and what we discussed", Council for "where it is in the code, which rules apply, and what review says". Don't run the same review queue in both systems: each one should own its own subject.
Connect AI Council to one of your repositories and see the project graph, rules and review on your real code.