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.
skillmem is a local procedural memory layer for coding agents (Claude Code, Codex CLI, Cursor, Windsurf, Gemini CLI, opencode). It stores procedures rather than facts about the user: trigger, steps, outcome, lessons. Writing costs $0: no LLM calls on write or read, data lives in SQLite, and semantics come from a local 384-dimension ONNX model. The product loop is learn, recall, reinforce, decay. Only external evidence moves an entry's strength (a test passed, a diff was accepted, a person confirmed); the agent's self-assessment doesn't. Nightly decay moves entries active → stale → archived. It has a trust model (origin, trusted_at, owner_seal, an UNTRUSTED frame), five Claude Code hooks (auto-recall, tool-recall, session-recap, pending-rules), 9 MCP tools, an HTTP API with tokens, a CLI, Markdown export, and 16 invariants with property tests. Apache-2.0.
It is the closest to Council in its memory and delivery layer, but not in code understanding: skillmem stores procedures and notes, not knowledge anchored to positions in the code. Council builds a graph and checks knowledge against the code; skillmem checks where a text came from and whether the owner approved it.
| AI Council | skillmem | |
|---|---|---|
| Who reads the code | Council itself: it parses the repositories and builds the graph. No model is called during analysis | Nobody: skillmem doesn't analyze code. It stores text procedures and notes; they may quote code, but there is no code index |
| 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 | When the agent writes a procedure (mem_learn) or a recap runs; no code parsing |
| 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 | Nothing about code structure: only trigger/steps/outcome/lessons, notes, feedback and session recap summaries |
| Languages | Python, PHP, TypeScript, JavaScript, Java, Kotlin, C#, C, C++, with full layer analysis | Not applicable: memory is language-agnostic |
| Multiple repositories | A project made of several repositories with a shared graph | A project field on the entry; no shared graph |
| History | Edges are versioned after every run; architecture_as_of shows the architecture as of a date | Entry history is a hash chain in memory_history; no code 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 search over memory: FTS5 BM25 + Snowball + local embeddings, RRF k=60, recap entries down-weighted ×0.5, a strength bonus. It doesn't search code |
| AI Council | skillmem | |
|---|---|---|
| Knowledge base | Decisions, notes, Mermaid diagrams, changelogs. Each entry is anchored to code and reaches the agent when it touches that file | Procedural memory: skill (trigger/steps/outcome/lessons), feedback, user, note, reference, project, document, session-recap. Entries are not anchored to code positions; they have project, topics, tags |
| 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 | Staleness is based on inactivity: strength ×0.85 per threshold, active → stale (>30 days) → archived (>90 days and strength at the floor). Archived entries are excluded from search but can be restored. No check of whether the code still matches |
| 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 | A project field; no per-branch knowledge or merging. The working copy is a single SQLite file |
| 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 | Rules are user/feedback entries; they have no MUST/SHOULD levels, no anchoring to entities or paths, and no diff check. Trust in them comes from trusted_at (explicit owner approval), owner_seal (can't be removed) and an UNTRUSTED frame for anything unapproved |
| 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 | Five Claude Code hooks: SessionStart (mcp-guard, inject, session-history), UserPromptSubmit (verify-gate, auto-recall), PreToolUse (tool-recall), Stop (session-recap, pending-rules), SessionEnd (session-recap). Recall has a budget (1500/1000 characters) and fails open; tool-recall is lexical only (no model) |
| MCP | Server: about 60 tools, profiles, modes, XML with a size budget | Server: 9 tools, mem_search, mem_get, mem_list, mem_write, mem_update, mem_learn, mem_recall, mem_reinforce, mem_pin |
| Moving knowledge | Bulk export and import of knowledge, copying between projects | export-all to a Markdown dump with a manifest, import-vault, migrate from auto-memory, packs from SKILL.md; round-trip is guarded by an invariant |
| AI Council | skillmem | |
|---|---|---|
| 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: memory for Claude Code, Codex CLI, Cursor, Windsurf, Gemini CLI and opencode via hooks and 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 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 the learn, recall, reinforce, decay loop and nightly maintenance |
| AI Council | skillmem | |
|---|---|---|
| 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. Only memory gets reviewed: pending-rules shows the owner unapproved rules, and the owner's explicit approval sets trusted_at; the recap summarizer runs without tools |
| 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 | Zero LLM calls on write or read: a local 384d ONNX model and BM25. Recap calls claude -p (Haiku by default) with mandatory --tools "" and --strict-mcp-config; if the CLI doesn't support the safety flag, recap doesn't run |
| Agents | Claude Code and Codex (hooks, MCP); MCP is open to any client | Hooks and MCP for Claude Code, Codex CLI, Cursor, Windsurf, Gemini CLI, opencode; CLI and HTTP API |
| Measurement | Telemetry for every MCP call and hook; an agent repeating a search signals a poor first answer | LongMemEval: hit@5 0.871 (0.889 after 0.13), MRR 0.622, n=479; outcome A/B: 17–18/18 with recall, 6–7/18 without. The project itself notes that samples are small and the database is the author's own |
| Guarantees | Test gates, review, conventions | 16 invariants (docs/INVARIANTS.md), property tests with Hypothesis; the release gate requires each new regression test to fail on the parent commit |
| AI Council | skillmem | |
|---|---|---|
| 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. The HTTP API supports several tokens with public/shared/private visibility, but there are no organizations, roles or license |
| Interface | About 50 pages: code, graph, branches, quality, rules, review, knowledge, tickets, tasks, MCP Live, administration, System Health | The skillmem CLI (~40 commands), MCP (9 tools), HTTP FastAPI, hooks, a Claude Code plugin; no separate UI |
| Monitoring | Telemetry for every MCP call and hook without PII; about 22 Prometheus rules with tests; System Health, tracing | hooks-status (runs/skips/failed), doctor, hook logs, benchmarks; 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 | Fail-open hooks with a watchdog, atomic writes, a weekly export-all to a vault, import-vault, nightly maintenance (decay/sweep/backup), DB isolation by db_id, JSONL backup of the archive |
| Storage | Neo4j, Qdrant, PostgreSQL per service, Temporal, NATS, Redis | One SQLite file (schema v12) plus content-addressed body files, a Markdown vault and a local ONNX model |
| Isolation | A sysbox container per task, one-time credentials for push, read-only knowledge reviewer, permission checks in a single gateway, SSRF protection | Local DB, secrets scrubbed on write, the UNTRUSTED frame, TTY-based owner gates, 0600 tokens, path confinement. No sandbox: the project itself calls TTY a guard against accidents, not a wall |
| Delivery | A distribution for self-hosted installation, or SaaS; on the developer's machine, MCP and hooks | pip install 'skillmem[semantic]', install.sh/install.ps1, Claude Code plugin, MCP Registry, Docker; Apache-2.0 |
| License | Proprietary | Apache-2.0 |
skillmem is the closest to Council in its memory and delivery layer, but not in code understanding. It stores procedures and lessons, while Council stores knowledge about decisions anchored to code positions, plus team rules. They define truth differently: Council checks an entry against the code with a reviewer's quote; skillmem checks where the text came from and whether the owner explicitly approved it. The two approaches complement each other.
Where skillmem is stronger:
origin, trusted_at, owner_seal, the UNTRUSTED frame, TTY-based owner gates; unapproved text doesn't become a rule;import-vault, packs, migrate with round-trip;Where Council is stronger:
architecture_as_of, versioned edges, an external analyzer; ask_question returns excerpts with FQNs. skillmem works with text, not architecture.Can they work together? Yes, they are different layers. skillmem stores "how to do it": procedures, lessons, confirmed rules. Council stores "why it's done this way": decisions anchored to code, and team conventions. Both work through Claude Code hooks and MCP, so they can live in the same session. They overlap on delivery at prompt and tool time: skillmem injects procedures and feedback, Council injects rules and per-file knowledge. There is no built-in integration, but connecting both to one agent is easy.
Connect AI Council to one of your repositories and see the project graph, rules and review on your real code.