wickedagilewicked-estate
wicked-estate · the foundation · 0.16.6 · crates.io

Code graph.
Memory.
Knowledge.
One binary.

The system of record for your codebase — the record every plane (crew · garden · studio) queries before it acts and writes after. One local-first MCP server, 29 tools across 3 domains. What breaks if you change it, the decision behind it, the doc that explains it — including the injected edges grep never sees. Every fact stamped with confidence and provenance: a heuristic is never handed to an agent as a fact.

Zero infrastructure by default — one SQLite file, nothing leaves your box. And it earned the job: its hybrid retrieval is parity-benchmarked in the open against the dedicated search system it replaced.

CORE LOG · applyDiscountone identity
−0.0m01Code graph
−4.2m02Injected edges
−7.8m03Memory
−11.5m04Knowledge
−14.0m05Provenance

One continuous record — five bands, one symbol identity.

The record every plane reads

The agent doesn't grep. It edits in an IDE that knows your whole system.

The same record crew, garden, and studio query before they act and write after — here shown the way an agent works it. Right-click a symbol for every caller, click a class for its whole picture, trace the requirement it satisfies, recall the decision behind it, pull the wiki, see the blast radius — what an agent can do while editing when it reads the record instead of grepping. Code intelligence, memory and knowledge, every answer a live fact with confidence + provenance; drop the dial and the low-confidence guesses fall out, labeled — never silently promoted.

wicked-estate — the agent's workspace
TSPricingService.tscheckout/ · right-click a symbol → the record answers
1export class  {2  (cart, coupon) {3    const price = cartTotal(cart)4    return clamp(price - coupon.value, 0)5  }6}
confidence ≥0.550.30 · heuristics1.00 · SCIP only
Find all callersapplyDiscount · 3 found
1checkout() → applyDiscountSCIP1.00checkout/Checkout.ts:41
2api/price route → applyDiscountSCIP1.00routes/price.ts:18
3referralFlow → applyDiscountTags0.30below cutofftag-scan guess · cross-file, unverified
Find all callers2/3 resultsconfidence-gatedprovenanceParsedAST · 1.0SCIPindexer · 1.0InjectedExtraEdge ruleMemoryrecalled · salienceKnowledgewiki · RRFTagstag-scan · 0.3
The five strata

Five bands. One record. One symbol identity.

Not a pile of scanners — a single continuous body, cut into bands. Each keyed to the same stable (scheme, qualified-name) that survives reformatting, moves, and re-index.

01
Code graph
−0.0m · 103 languages

Symbols, calls, imports, heritage — tree-sitter extraction across 103 wired languages. Languages are data, not code: a new one is a manifest row + a query file, zero core change.

02
Injected edges
−4.2m · ExtraEdge TOML

The relationships grep never sees — event→consumer, command→agent — injected by plain-TOML ExtraEdge rules. A new domain edge type is a rule block, zero Rust; blast-radius crosses the event-bus boundary.

03
Memory
−7.8m · scoped

Episodic, semantic, procedural — captured under scopes, recalled on a token budget, distilled by reflection. Erasable by subtree: one call hard-deletes everything under a scope prefix. Erasability is governance.

04
Knowledge
−11.5m · RRF-fused

Docs and wiki as retrievable nodes with typed, confidence-scored relations — linked to the code symbols they describe. Hybrid FTS + vector recall, RRF-fused, benchmarked in the open.

05
Provenance
−14.0m · every edge

Every edge carries {confidence, provenance, resolved_by}. When tiers disagree, the highest wins and the losers are superseded — a 0.3 tag-scan guess is never handed to an agent as a 1.0 fact.

Code graph · injected edges · memory · knowledge · provenance — one binary, every fact stamped with confidence and provenance.

Everything an agent can call

29 MCP tools. 6 agent skills. One binary.

Not one “search” tool bolted onto a repo — the full MCP surface every plane calls, plus the skills (playbooks) that drive them. The graph domain is the code graph; memory and knowledge are where the wicked-brain consolidation landed — one store, one identity, a lossless import contract so nothing tuned was dropped; and the proposal queue — the memory domain's governance surface — is where agents propose and humans promote. Grounded to 0.16.6.

01Graph11 estate tools
SearchEntityFind symbols by name or kind; optional source inline.
RetrieveEntityOne symbol’s full dossier — callers, edges, annotations, requirement.
TraverseGraphBounded walk out over calls and imports.
BlastRadiusEvery dependent — what breaks if you change it.
LineageThe dependency chain a symbol rests on, transitively.
RankHotspotsMost-connected symbols by PageRank — where to start reading.
CommunitiesClusters the graph into modules.
ContextBundleScoped, prompt-ready context pack for a symbol.
FetchContentThe stored source for a symbol or file.
RulesInventoryRules engines (ODM · DMN · Drools · CLIPS) + the code that calls them.
rules.recallWhich steering rules apply — the seven doctrine types projected as citable rules; faceted, severity-ordered, every hit citing its source. The acceptance gate reads this governed record.
02Memory7 memory + 4 proposal tools
memory.captureCapture a memory node (episodic / semantic / procedural / archival).
memory.recallToken-budgeted recall relevant to a query in scope.
memory.listThe complete faceted set — for management, browse, and promote.
memory.learnStore a semantic fact and link it to code symbols atomically.
memory.reflectDistil episodic memories in a scope into semantic facts.
memory.coverageNode counts by tier and kind.
memory.eraseHard-delete every memory under a scope prefix — erasability as governance.
proposal.submitThe governance queue: an agent proposes a memory capture or a steering-rule change — never a direct write to the record.
proposal.listThe review queue — every proposal awaiting a human decision.
proposal.approveA human promotes a proposal into the record.
proposal.rejectA human declines it — the record stays clean.
03Knowledge7 knowledge tools
knowledge.ingestIngest a document as a doc + retrievable chunk nodes.
knowledge.writeWrite one node (doc / section / chunk / concept).
knowledge.relateAdd a typed, confidence-scored relation between nodes.
knowledge.recallHybrid FTS + vector recall, RRF-fused.
knowledge.relate_codeLink a knowledge node to code symbols in the graph.
knowledge.recall_about_codeRecall knowledge linked to given code symbols.
knowledge.coverageNode counts per class.
The retrieval receiptparity bench · 60 queries × 5 classes · identical 357-doc corpus · vs the dedicated FTS search it replaced
overall r@100.849vs0.437overall MRR0.810vs0.571Ahead on four of five query classes; within 2.2% on the fifth (identifier-shaped queries — the FTS system’s home turf).
Agent skills · in-repo playbooks6 skills
codebase-expeditionHotspot-first tour: RankHotspots → TraverseGraph → FetchContent.
knowledge-ingestChunk and ingest a document into the knowledge base.
cited-answerAnswer with a grounded, cited slice — never from model memory.
ontology-expeditionConnect concepts with typed relations — structure over a flat store.
knowledge-curationDedup as the base grows — collapse-but-surface, never delete.
gap-huntingTurn recall misses into ingest tasks — close the loop.
Injected edges · ExtraEdge TOML rules · event→consumer · command→agentEvery edge: confidence + provenance + resolved_byTiered resolution · Parsed & SCIP 1.0 → Tags 0.3 · highest winsRules engines in the same graph · ODM · DMN · DroolsSteering doctrine · seven rule types projected as citable rules · the acceptance gate reads the governed recordGoverned knowledge · agents propose · humans promoteRequirements graph · requirement ↔ code, the forward view of the app as source of truthTyped annotations · survive re-indexMemory scopes · subtree recall + eraseSQLite by default · Postgres for teams103 wired languages — a manifest row + a query file+ SemanticSearch, an 11th graph tool, when an embedder is wired
The rest of the binary

The MCP surface is how agents read it. The CLI ships the long tail.

Thirty-three subcommands in the same binary, against the same record: a watch mode that re-indexes as you edit, a precise SCIP tier, multi-repo federation, IaC drift against live Terraform state, drop-in language plugins. No sidecar, no daemon farm — one wicked-estate.

Keep it freshreactive
watchFull index once, then re-index on every file change.
subscribePoll the change log since a sequence number — JSON lines.
changed-sinceSymbols in files changed since a git SHA.
index --historyOpt-in edge-history archival — off by default, no bloat.
Sharpen itopt-in precision
scipIngest a SCIP index — precise, confidence-1.0 resolution.
index --embeddingsCompute and store embedding vectors at index time.
semanticEmbedding-based symbol search over that index.
clustersLouvain communities over calls + imports; semantic weighting too.
Scale it outmulti-repo
index --repoCo-locate many repos in one db — paths namespaced, nothing collides.
cross-graphFederated search + blast radius across separate graphs.
correspondScore matching symbols across two graphs.
exportThe whole graph as NDJSON or JSON.
Read the shapeone-liners
entrypointsSymbols with no callers or importers.
leavesSymbols that call or import nothing.
dead-codeSymbols with no edges at all.
contextRanked context for a symbol, within a character budget.
fingerprintA stable hex fingerprint per symbol.
Pin the meaningsemantics
annotateTyped, confidence-scored notes — they survive re-index.
annotationsRead them back by type, advisory-flagged.
stale-annotationsWhat needs re-verification, by last-verified cutoff.
semanticsSet a symbol’s description, requirement, validated flag.
by-requirementEvery symbol satisfying a requirement id.
resolveA name → its stable SymbolId(s), before any write.
Map the estateIaC · ADR-004
iac as languagesHCL · Bicep · ARM · Kubernetes YAML — resource declarations indexed like code.
tfstateIngest live Terraform state as resource nodes.
driftIaC vs live — managed · undeployed · unmanaged.
Runtime language plugins · drop-in tree-sitter grammars · no rebuild · license-isolatedskill:// · the six playbooks served as MCP resourcesimport-telemetry · bulk access-log + search-miss importstats · graph counts + git provenancesource · bulk source slices by file, cluster, or symbol listcompact · prune cruft + VACUUM
The provenance seam

Every edge carries where it came from.

No edge ships without confidence, provenance and resolved_by. When the same (source, target, kind) edge is proposed by several tiers, the highest tier wins — a 0.3 tag-scan guess is never presented as a 1.0 fact.

collisioncheckout → applyDiscountcalls
resolved_by →Parsed2 lower tier(s) superseded
cycling
Parsed
1.0
SCIP
1.0
ImportMap
0.6
Heuristic
0.5
Tags
0.3

The right-hand label lights when its tier is the one in scope.

One record, solo or shared

SQLite by default. One profile switch to a shared team backend.

The engine's store path — the CLI, indexing, the full graph surface — runs on either backend through one open_store(spec) factory: no caller changes, no re-index, and the Postgres backend passes the same store-conformance suite in CI. The WICKED_RUNTIME=team profile seam retargets it with one environment variable. The MCP server — the 29 tools — is SQLite-only today: under the team profile it fails loud at startup instead of silently falling back to local; Postgres for the MCP surface is the named follow-up. Local-first is a feature, not a ceiling.

wicked-estate index . --db graph.db
storegraph.db — one local file, repo-scoped
writerssingle-writer — no daemon, no races
traversalbounded recursive CTE
infrastructurenone — nothing to run, nothing leaves your box
FTS5 · sqlite-vec · WAL · the zero-infra default
New in this release

What v0.15.0 ships.

The release this page is grounded to. Two shipped changes to the record itself, the accepted design for the next resolution consumer, and the runbook for bringing a 0.14.x graph across. Full detail: the CHANGELOG.

Scheme-3 symbol identityshipped

Definitions now nest under their owning type — Repo#save()., not a module-flat save(). — so same-named definitions in one module no longer collapse into a single node that calls then “resolved” into at 0.65. Rust impl methods, Go receiver methods, Ruby singleton members, and C++ out-of-line members all move from module-flat to type-nested.

ADR-002 (amendment) →
Parser-plugin overridesshipped

“Built-ins always win” is repealed. A drop-in plugin can now override a built-in language: query-only — a manifest plus your .scm on the shipped grammar, no shared library — or a full grammar swap behind an explicit double opt-in (override = true + WICKED_ESTATE_PLUGIN_OVERRIDE). Patch a query gap locally without waiting for a release.

ADR-010 →
Intent-routed LSPaccepted design

The sanctioned consumer for the in-tree LSP client library, defined so bulk routing can’t happen by accident: edit-plane queries (exactly one file · line · col) go LSP-first, and a missing server warns and serves graph results — never a silent substitution; understand-plane queries (blast radius, lineage, search) never consult LSP. Phase-0 fixes (transport timeout, didOpen) landed with the ADR; implementation is the W3.6 lane.

ADR-009 →
Migration: one re-index per reporunbook

Scheme 3 re-mints definition ids, so each previously-indexed repo is fully re-extracted on its next index — two per-repo gates, loud on stderr, crash-idempotent. No schema migration: the database file opens unchanged; rows rebuild. Re-run scip and --embeddings, and re-inject overlay edges after.

docs/MIGRATION-0.15.md →
The wicked platform

One surface. One control plane.
One catalog. One record.

Four planes, four contracts. Hover or tab through a plane to see its role and what crosses its seams — every cross-plane interaction goes through the contract, never around it.

ExperienceWhere product work happensRendering and editing surfaces — nothing semantic lives here.
wicked-studiothe surface

Brainstorm it, build it under a check nothing self-approves, then produce the doc, deck or demo.

submit intent · watch the run · answer gates — one crew API, the surface is a pure client
ControlIntent in, verified work outOrchestration, governance, gates — your coding agents as governed workers.
wicked-crewthe control plane

Evaluator ≠ creator — no agent grades its own homework. “Done” is re-derived from evidence, never asserted.

invokes skills as governed workers — deny dominates, every verdict lands in the record
CapabilityWhat agents can doSkills, tools, playbooks, councils, the QE fleet — how agents touch the record.
wicked-gardenthe catalog

Multi-model review councils, graph-aware refactors, repo playbooks — plus an open naming contract to ship your own pack.

reads & writes the record through its contract — never around it
FoundationThe system of recordCode graph · memory · knowledge · evidence · events. Zero-infra, local-first.
wicked-estatethe record

A 102-language code graph, memory, and knowledge in one binary (MCP) — including the injected edges grep never sees.

you are here
wicked-interactivethe document engine

Doc storage and lineage, HTML/PDF/PPTX rendering, demo recording. crew proxies it — you depend on it, you don’t visit it.

Get started

Zero to a queried record in two minutes.

Recommended · the whole familynpm
$ npx wicked-installer

Interactive: pick estate (and any siblings), choose your agent CLIs, and it wires everything and ships the cross-family wicked CLI.

Or install just this directlycrates.io
# the CLI + the MCP server
$ cargo install wicked-estate wicked-estate-mcp
# index your repo
$ wicked-estate index . --db graph.db
# connect your agent (Claude Code shown)
$ claude mcp add wicked-estate -s project \ -- wicked-estate-mcp --db "$PWD/graph.db"

Use an absolute DB path — clients launch from an unpredictable working directory. Same 29 tools in Claude Code, Antigravity, Codex, OpenCode, and Pi.