Scripts become thin CLIs over kb_framework (graph, query, query_tools,
vault, instructions) so the hosted read-only connector shares one
implementation with the stdio server. The MCP server builds the graph
from Markdown on demand and invalidates it on writes; refresh_graph
rebuilds in memory and reports validation problems. Pre-commit hook
validates only; index/graph.json is no longer read, written or staged
(generate-graph.py --write remains for operators). Golden fixtures pin
graph and tool payloads to the previous output. Agent and skill docs
updated to match.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Ports two changes from the knowledge-base vault this skeleton is extracted
from, keeping the shared scripts byte-identical across the pair:
- `graph_summary` reports `by_tag` and `tag_count`, sized by `topTags`, and
drops the `by_type`/`by_status` breakdowns. An MCP-only agent could not
otherwise discover the tag spellings that `graph_search_nodes` matches
verbatim.
- `generate-graph.py --validate` now enforces a controlled vocabulary for a
note's `type`, which is where the drift signal `by_type` used to give now
lives. `AGENT_QUERY_GUIDE.md`, both skills and the-knowing-one quote the
enforced enum.
`tests/test_generate_graph.py` is new; `make test` is 50 tests. Regenerating
the graph also drops a stale `GLOBAL_AGENTS` node for a file this skeleton
does not carry.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>