sage-wiki
Memory framework
First committed by xoai
Published in xoai/sage-wiki. Publisher page
652 GitHub stars
What it is
sage-wiki is a graph memory and knowledge base that AI agents and humans build and query together. Drop in documents; an LLM compiler turns them into an interlinked wiki with a knowledge graph. One Go binary scales it from a personal vault to a team hub to a company knowledge graph.
AutoGineer overview, from the brain’s own files
sage-wiki is a memory system that transforms raw documents into a structured, interlinked wiki and knowledge graph. It functions as an ingestion and retrieval layer for AI agents and human users, supporting multiple storage backends including SQLite and PostgreSQL. The system uses an LLM-based compiler to process various file formats—such as PDFs, code, and emails—into markdown articles. It features a hybrid retrieval approach that combines lexical, vector, and graph-based search to provide cited answers. The framework is designed to scale from personal vaults to team-wide knowledge hubs, offering tools for entity resolution, provenance tracking, and multi-hop relational querying.
How it works
Memory model: Hybrid
AutoGineer overview, from the brain’s own files
The system operates by ingesting documents from a source folder and running them through a compiler pipeline. This pipeline extracts concepts, summarizes content, and generates a knowledge graph where entities are linked by typed relations. The output is stored as markdown files compatible with Obsidian, while the underlying data is indexed in a database. Agents interact with this memory via MCP tools, allowing them to perform hybrid searches, query the graph for multi-hop relationships, and capture new information. The system supports optional graph passes for triple extraction and entity resolution, which add evidence and confidence scores to the graph edges.
| Folder | Role | Files |
|---|---|---|
| .github | agent-config | 10 |
| assets | attachments | 5 |
| docs | docs | 27 |
| examples | examples | 8 |
| pkg | source-code | 46 |
| scripts | scripts | 12 |
| skills | agent-instructions | 2 |
| tests | tests | 2 |
| tools | scripts | 21 |
| api | folder | 1 |
| ci | folder | 8 |
| clients | folder | 29 |
| cmd | folder | 49 |
| eval | folder | 48 |
| internal | folder | 755 |
| testdata | folder | 230 |
| web | folder | 28 |
Requirements
Runtimes: Go
Databases: PostgreSQL, SQLite
API keys (by name): AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN, SAGE_WIKI_TOKEN
Set it up
- Not scanned by AutoGineerThe author’s MCP configuration (README.md) also starts it in a way AutoGineer does not offer. Read that file: AutoGineer did not scan that path; what it runs is listed under “This brain runs”. https://github.com/xoai/sage-wiki/blob/63c9d7bd99da407d6f94f061ec138feae051c558/README.md
- Not scanned by AutoGineerThe author’s README also describes installing it from a clone of its repository. Read its install section: AutoGineer did not scan that path. https://github.com/xoai/sage-wiki/blob/63c9d7bd99da407d6f94f061ec138feae051c558/README.md#install
- Not scanned by AutoGineerThe author’s README also describes installing it with go install. Read its install section: AutoGineer did not scan that path. https://github.com/xoai/sage-wiki/blob/63c9d7bd99da407d6f94f061ec138feae051c558/README.md#install
First committed by xoai. Published in xoai/sage-wiki. Licence: MIT License.
Usage
AutoGineer overview, from the brain’s own files
- Integrate with AI agents via MCP to enable graph-based memory and retrieval.
- Use the CLI to compile local document collections into a searchable wiki.
- Query the knowledge graph to resolve multi-hop relationships between concepts.
- Maintain a shared knowledge base across teams using git or a self-hosted server.
- Overlay the system onto an existing Obsidian vault to enhance it with agent-accessible memory.
- “sage-wiki query 'How does the system handle entity resolution?'”
- The agent retrieves relevant passages and graph edges, providing a cited answer explaining the entity resolution process.
- “sage-wiki ontology query --entity 'Kubernetes' --depth 2”
- The system returns a list of related concepts and entities connected to Kubernetes within the knowledge graph.
Documentation by xoai
English | 中文 | 日本語 | 한국어 | Tiếng Việt | Français | Русский
sage-wiki
sage-wiki is a graph memory and knowledge base that AI agents and humans build and query together. Drop in documents; an LLM compiler turns them into an interlinked wiki with a knowledge graph — agents query it through MCP, humans browse it as plain markdown. Enable the opt-in graph passes and it becomes an evidenced graph: typed entities, provenance-bearing relations, resolved aliases, and per-fact citations on answers. One Go binary scales it from a personal vault to a team hub to a company knowledge graph.
→ Get started: Install · Quickstart
Grown from Andrej Karpathy's idea of an LLM-compiled personal knowledge base, built with the Sage Framework. Some lessons learned along the way here.
Graph memory with citations. Ask relational questions through
wiki_graph_query— answers are grounded only in serialized graph edges; with the evidenced graph enabled, each citation carries its source document and confidence.Built for agents and humans. 19 MCP tools plus generated skill files teach agents when to search, capture, and compile; humans get Obsidian-native markdown, a TUI, and a web UI over the same data.
Trust and provenance. Query outputs quarantine until verified; every evidenced relation records which document asserted it.
Your sources in, a wiki out. The compile pipeline reads papers, notes, code, and email; summarizes; extracts concepts; and writes interconnected articles — the ingestion layer for everything above. Every new source enriches existing articles; the wiki compounds as it grows.
Ask your wiki questions. Hybrid chunk-level search with LLM query expansion, re-ranking, and graph-aware context assembly returns cited answers.
Scales to 100K+ documents. Tiered compilation indexes everything fast and spends LLM budget only where it matters.
https://github.com/user-attachments/assets/c35ee202-e9df-4ccd-b520-8f057163ff26
Dots on the outer boundary represent summaries of all documents in the knowledge base, while dots in the inner circle represent concepts extracted from the knowledge base, with links showing how those concepts connect to one another.
From personal vault to company knowledge graph
Personal — overlay an existing Obsidian vault (
init --vault), run on local models for zero cost, and opt into the graph passes (ontology.triples+ontology.resolve) when you want the evidenced graph.Team — share one wiki via git or a self-hosted server, review entity-resolution proposals and output trust together, and federate multiple wikis with the hub. See Team Setup.
Company — move storage to PostgreSQL/pgvector, turn on metrics, front the server with auth, and scale ingestion with tiered compilation.
Knowledge graph & graph memory
Vector search retrieves passages that look like the query. A graph also records how things relate, so a question needing two or three hops is answered by traversal instead of hoping one chunk happens to contain the whole chain. sage-wiki builds that graph as a compile output — not a second database you have to keep in sync.
Entities and typed relations. Each compile extracts entities (concepts, sources, artifacts) and links them with typed relations. The relation vocabulary is yours to define — see configurable relations.
Evidenced edges. A relation can carry
evidence(the span that supports it),confidence(0–1), andsource_doc, so a conclusion traces to the sentence that justified the edge rather than to a whole document.Triples. An optional structured-output pass extracts subject → relation → object directly. Opt-in (
ontology.triples): it adds one LLM call per document, and defaults never spend your key without asking.Entity resolution. "K8s" and "Kubernetes" become one node. Proposals are review-gated by default rather than silently merged.
Concept curation. One opt-in pass (
dedup_strategy: "llm") sees the whole proposed concept set at once — the only stage with global view — and judges keep / fold / drop per concept. Semantic restatements fold (aliases and sources merge), enumerated entities never fold (mw-3is notmw-2, at any similarity), and drops stay logged proposals untilllm_dedup.allow_dropopts in. The judgment prompt is workspace-overridable (prompts/curate-concepts.md).
The graph is a retrieval channel, not a side view. Every search fuses three
channels — lexical (BM25), vector, and graph proximity: query terms seed
entities, a bounded traversal ranks their neighborhood, and the three fuse at
search.hybrid_weight_graph. An empty ontology costs nothing and leaves
results byte-identical, so the graph earns its place incrementally.
Query it directly, or let an agent do it over MCP:
sage-wiki ontology query --entity kubernetes --depth 3 --direction both
sage-wiki provenance "service mesh" # which sources produced this conceptEdges are bi-temporal: contradicting a fact invalidates the old edge instead
of colliding, default answers are contradiction-free, and as_of queries
answer "what did we believe in January?" Ambiguous contradictions still
surface through output trust review. For
corpus-wide questions ("main themes across everything?"), opt-in community
detection (ontology.communities.enabled) generates cached community
summaries and answers via wiki_graph_query mode: "global". Depth
and mechanics: graph memory.
Guides
| Guide | Description |
|---|---|
| Agent Memory Layer | MCP setup, skill files, capture workflows, read-capture-evolve loop |
| HTTP API | The /v1 REST surface: auth, error model, idempotency, async jobs |
| Graph Memory | Evidenced relations, triple extraction, entity resolution, graph QA |
| Configuration | The full annotated config.yaml, multi-provider setup, serve worker |
| Team Setup | Git-synced, shared server, and hub federation deployment patterns |
| Search Quality | Chunk indexing, query expansion, re-ranking, graph expansion, ANN |
| Large Vault Performance | Tiered compilation, backpressure, code parsers, 100K+ scaling |
| Output Trust | Grounding verification, consensus, promotion/demotion lifecycle |
| Subscription Auth | OAuth login, token import, credential management |
| Self-Hosted Server | Docker Compose, Syncthing, reverse proxy, VPS deployment |
| Storage Backends | SQLite vs PostgreSQL/pgvector setup, switching, pool sizing |
| Configurable Relations | Custom ontology types, multilingual synonyms, type restrictions |
| Customizing Prompts | Prompt scaffolding, per-type overrides, custom frontmatter fields |
| Local Models | Ollama setup, GPU/CPU routing, per-pass model config |
| Metrics | Log snapshots, /metrics endpoint, cardinality controls |
| Webhooks | HMAC-signed event delivery, signature recipe, retry/dead-letter |
| Security | Threat model, the limits table, prompt boundary, residual risks |
| Contribution Packs | Creating packs, parser authoring, registry submission |
Install
# CLI only (no web UI)
go install github.com/xoai/sage-wiki/cmd/sage-wiki@latest
# With web UI (requires Node.js for building frontend assets)
git clone https://github.com/xoai/sage-wiki.git && cd sage-wiki
cd web && npm install && npm run build && cd ..
go build -tags webui -o sage-wiki ./cmd/sage-wiki/Quickstart
Greenfield (new project)
sage-wiki init my-wiki && cd my-wiki
# Add sources to raw/
cp ~/papers/*.pdf raw/
# Edit config.yaml to add api key, and pick LLMs
sage-wiki compile # first compile
sage-wiki compile # second: zero LLM calls — unchanged docs are skipped
sage-wiki compile --explain raw/paper.pdf # why a doc compiles or skips
sage-wiki compile --force # recompile everything regardless
sage-wiki search "attention mechanism" # hybrid search
sage-wiki query "How does flash attention work?" # cited Q&A
sage-wiki tui # terminal dashboard
sage-wiki serve --ui # browser (webui build)
sage-wiki compile --watch # watch folderEvery config.yaml key, annotated line by line: Configuration.
Project layout (what init creates — selected entries, illustrative not exhaustive):
my-wiki/
├── config.yaml # providers, models, compiler, search, ontology
├── raw/ # drop sources here (articles, papers, code, images)
├── wiki/ # compiled output — Obsidian-compatible markdown
│ ├── summaries/ # per-source LLM summaries
│ ├── concepts/ # concept articles (the knowledge graph)
│ ├── images/ # vision-captioned image descriptions
│ ├── outputs/ # filed query answers (trust.include_outputs: "true")
│ ├── under_review/ # filed answers awaiting trust review (default)
│ └── archive/ # pruned articles
├── .sage/wiki.db # one SQLite file: FTS index, vectors, ontology, queue
└── .manifest.json # source↔article mapping + compile stateVault Overlay (existing Obsidian vault)
cd ~/Documents/MyVault
sage-wiki init --vault
# Edit config.yaml to set source/ignore folders, add api key, pick LLMs
sage-wiki compile --watchPrefer containers? Prebuilt multi-arch Docker images and compose files are covered in the self-hosted server guide.
Supported Source Formats
| Format | Extensions | What gets extracted |
|---|---|---|
| Markdown | .md | Body text with frontmatter parsed separately |
.pdf | Full text via pure-Go extraction | |
| Word | .docx | Document text from XML |
| Excel | .xlsx | Cell values and sheet data |
| PowerPoint | .pptx | Slide text content |
| CSV | .csv | Headers + rows (up to 1000 rows) |
| EPUB | .epub | Chapter text from XHTML |
.eml | Headers (from/to/subject/date) + body | |
| Plain text | .txt, .log | Raw content |
| Transcripts | .vtt, .srt | Raw content |
| Images | .png, .jpg, .gif, .webp, .svg, .bmp | Description via vision LLM (caption, content, visible text) |
| Code | .go, .py, .js, .ts, .rs, etc. | Source code |
Just drop files into your source folder — sage-wiki detects the format automatically. Images require a vision-capable LLM (Gemini, Claude, GPT-4o). Need a format not listed? sage-wiki supports external parsers — scripts in any language reading stdin, writing text to stdout.
Custom source types. Set type: on a source root in config.yaml and pair it with prompts/summarize-{type}.md to give any format — PDFs and Office documents included — its own summary prompt and source_type frontmatter. (image and code sources keep their built-in types — they select the vision and code pipelines, not a prompt variant.)
External source roots. A source path may point at an existing documents directory outside the project — Sage compiles it in place, no copy into raw/. Mark it read_only: true and ingestion refuses to write there. See configuration: external read-only source roots.
Graph memory
Out of the box the wiki builds a knowledge graph from keyword proximity —
concepts linked where relation keywords co-occur with a [[wikilink]] in
the same block. Enable the
opt-in graph passes to turn that into an evidenced graph:
Triple extraction (
ontology.triples.enabled) — one extra LLM call per fully-compiled document extracts typed entities and relations, each carrying an evidence span, confidence, and source document.Entity resolution (
ontology.resolve.enabled) — surface-form variants ("NASA" / "National Aeronautics and Space Administration") are linked to a canonical entity. High-confidence proposals apply automatically (threshold 0.85; set exactly1.0for review-only), and every link is exactly reversible withontology resolve --unlink.Graph QA — the
wiki_graph_queryMCP tool answers multi-hop relational questions grounded only in a bounded, serialized set of edges; citations carrysource_docandconfidencewhen the edge is evidenced (keyword-proximity edges carry neither). Regular Q&A context also names the connecting edge under each related article.
Depth, costs, review workflow, and undo semantics: Graph Memory.
Commands
The core surface; run sage-wiki <command> --help for flags.
| Command | Description |
|---|---|
sage-wiki init [dir] [--vault] [--skill <agent>] [--pack <name>] [--prompts] [--force] | Initialize project (greenfield or vault overlay); preserves existing config/manifest/gitignore unless --force |
sage-wiki compile [--watch] [--batch] [--estimate] [--dry-run] [--no-cache] [--fresh] [--re-embed] [--re-extract] [--prune] | Compile sources into wiki articles |
sage-wiki serve [--addr 127.0.0.1:8484] [--transport stdio|sse] [--ui] | HTTP REST + MCP server / web UI |
sage-wiki reindex [--drop-chunk-vectors] | Rebuild the chunk index from documents on disk with the current chunk_size/chunk_overlap_tokens |
sage-wiki index rebuild-vectors [--quantize none|int8] | Rebuild the on-disk vector index (.sage/vectors*.idx) from the stored embeddings — required once after enabling vectors.backend: mmap and again after compiles/re-embeds |
sage-wiki search "query" [--tags ...] [--boost-tags ...] [--limit N] [--channels bm25,vector,graph] [--expand] [--rerank] | Hybrid search (BM25 + vector + ontology graph) |
sage-wiki query "question" | Q&A against the wiki with citations |
sage-wiki tui | Interactive terminal dashboard |
sage-wiki ontology <query|list|add|resolve> | Query, manage, and resolve the ontology graph |
sage-wiki ingest <url|path> / sage-wiki add-source <path> | Add sources |
sage-wiki source <show|list> / sage-wiki coverage | Inspect sources and compile coverage |
sage-wiki status / sage-wiki doctor / sage-wiki diff | Health, config validation, pending changes |
sage-wiki lint [--fix] / sage-wiki list / sage-wiki write <summary|article> | Maintenance and manual writes |
sage-wiki hub <init|add|remove|search|status|list|compile> | Multi-project hub |
sage-wiki learn "text" / sage-wiki capture "text" / sage-wiki scribe <session-file> | Knowledge capture |
sage-wiki skill <refresh|preview> [--target <agent>] | Generate or refresh agent skill files |
sage-wiki provenance <source-or-concept> / sage-wiki version | Provenance mappings, version |
sage-wiki mirror <enable|status|snapshot|verify> | Remote mirror (S3-compatible backup, WAL shipping) — see Remote mirror |
sage-wiki hydrate s3://<bucket>/<prefix> <DIR> | Restore a workspace from a remote mirror into an empty dir (--generation, --at, --partial, --key-file) |
Topic-specific command families live with their guides: pack * in
CONTRIBUTING, auth * (login, import, status, logout,
migrate) in Subscription Auth, and
verify / outputs * in Output Trust.
TUI
sage-wiki tuiA full-featured terminal dashboard with 4 tabs:
[F1] Browse — Navigate articles by section (concepts, summaries, outputs). Arrow keys to select, Enter to read with glamour-rendered markdown, Esc to go back.
[F2] Search — Fuzzy search with split-pane preview. Type to filter, results ranked by hybrid score, Enter to open in
$EDITOR.[F3] Q&A — Conversational streaming Q&A. Ask questions, get LLM-synthesized answers with source citations. Ctrl+S saves answer to outputs/.
[F4] Compile — Live compile dashboard. Watches source directories for changes and auto-recompiles. Browse compiled files with preview.
Tab switching: F1-F4 from any tab, 1-4 on Browse/Compile, Esc returns to Browse. Quit with Ctrl+C.
Web UI
sage-wiki serve --ui # http://127.0.0.1:3333, requires -tags webui buildArticle browser with rendered markdown, syntax highlighting, and clickable
[[wikilinks]]Hybrid search with ranked results and snippets
Knowledge graph — interactive force-directed visualization of concepts and their connections
Streaming Q&A — ask questions and get LLM-synthesized answers with source citations
Table of contents with scroll-spy; dark/light mode with system preference detection; broken article links shown in gray
Built with Preact + Tailwind, embedded via go:embed (~1.2 MB, ~420 KB gzipped); omit -tags webui for a CLI/MCP-only binary. Auth tokens, allowed hosts, and deployment hardening: Self-Hosted Server.
MCP Integration
Add to .mcp.json (Claude Code; other agents in the Agent Memory Layer guide):
{
"mcpServers": {
"sage-wiki": {
"command": "sage-wiki",
"args": ["serve", "--transport", "stdio", "--project", "/path/to/wiki"]
}
}
}Network clients: sage-wiki serve --transport sse --port 3333. The server
exposes 19 tools — search, read, graph query, capture, wiki_query
(question answering with trust-reviewed filing), compile-on-demand and
more; setup per agent and capture workflows live in the
Agent Memory Layer guide.
HTTP API (/v1, experimental) — any language can call the same tools
over REST: sage-wiki serve --ui --port 3333 mounts 20 routes under /v1
(Bearer auth via SAGE_WIKI_TOKEN, structured errors, idempotent writes).
Long-running compile/lint run as async jobs: POST /v1/jobs/compile or
POST /v1/jobs/lint returns 202 + a job_id to poll.
Contract: api/openapi.yaml (OpenAPI 3.1, drift-checked
against the MCP tool set). Guide: docs/guides/http-api.md.
Pre-1.0 — pin a version.
Agent skill files — sage-wiki skill refresh --target <agent> writes
a behavioral section into the agent's instruction file (CLAUDE.md,
.cursorrules, …) teaching it when to search, what to capture, and how to
query, derived from your config. Targets: claude-code, cursor,
windsurf, agents-md (Antigravity), codex, gemini, generic.
Agent skills
Install sage-wiki's reference skill so a coding assistant knows the full
tool surface — all 19 MCP tools, the /v1 REST equivalents, opt-in flags,
tiers, async compile semantics, and error codes — without reading this
README:
# Claude Code
npx skills add https://github.com/xoai/sage-wiki --skill sage-wiki
# Or manually: copy skills/sage-wiki/SKILL.md to .claude/skills/The sage-wiki-integrate pipeline skill wires sage-wiki into a new repo
interactively (detect language → install client or configure MCP →
smoke-test store-and-retrieve):
npx skills add https://github.com/xoai/sage-wiki --skill sage-wiki-integrateBoth skills are generated from the live MCP registry
(go run ./tools/skillgen/) and drift-checked in CI — they cannot go stale
when tools change. Pre-1.0 — pin a version.
Knowledge capture — agents store insights back via wiki_capture /
wiki_learn, closing the read-capture-evolve loop. Workflows and tips:
Agent Memory Layer.
Client SDKs
Typed clients over the /v1 REST API (pre-1.0 — pin a version):
Python — pip install sagewiki (≥3.9, httpx only):
from sagewiki import SageWiki
c = SageWiki() # SAGE_WIKI_URL / SAGE_WIKI_TOKEN from env
for r in c.search("attention", limit=5).results:
print(r.final_score, r.content[:80])
job = c.compile(topic="attention")
job.wait(timeout=600) # explicit timeout requiredTypeScript — npm install sagewiki (zero runtime dependencies, global
fetch; Node ≥18, Deno, Bun, edge runtimes):
import { SageWikiClient } from "sagewiki";
const c = new SageWikiClient();
const results = await c.search("attention", { limit: 5 });
const job = await c.compile({ topic: "attention" });
await job.waitUntilDone({ timeoutMs: 600_000 });Both clients cover the full /v1 surface: search, provenance, graph
queries, the compiled wiki, captures/writes, and async compile/lint jobs
with a code-driven error taxonomy. Docs:
Python · TypeScript ·
HTTP API guide. Go programs can skip HTTP
entirely — see Embedding in a Go program.
Examples
Copy-paste framework integrations, exercised in CI against a live server:
examples/langgraph/— memory-backed LangGraph nodes (Python client): retrieval with theuncompiled_sources→ topic-compile pattern, plus capture.examples/vercel-ai-sdk/—search,graphQuery,provenanceas Vercel AI SDK tools (TypeScript client); edge-deployable.
Embedding in a Go program
To call the same tools from your own Go process — no subprocess, no stdio or
port to manage — use pkg/sagewiki with mcp-go's in-process transport:
srv, err := sagewiki.NewServer("/path/to/wiki") // project must already exist
if err != nil {
return err
}
defer srv.Close() // the caller owns the DB handle here
cli, err := client.NewInProcessClient(srv.MCPServer())
if err != nil {
return err
}
defer cli.Close()
if err := cli.Start(ctx); err != nil {
return err
}
if _, err := cli.Initialize(ctx, mcp.InitializeRequest{}); err != nil {
return err
}
res, err := cli.CallTool(ctx, mcp.CallToolRequest{
Params: mcp.CallToolParams{
Name: "wiki_search",
Arguments: map[string]any{"query": "attention", "limit": 5},
},
})The project must already exist and the caller owns the database handle, so
Close is required — unlike serve, nothing else closes it. Logs go to the
host's stderr, and initialize reports the sage-wiki build version (dev from
a plain go build); call sagewiki.SetVersion at startup to report your own
version string instead.
The package is experimental while sage-wiki is pre-1.0: the Go signatures
are meant to stay put, but tool names, argument schemas, and config.yaml
layout can change in any release. Pin a version.
Operations
Storage — SQLite by default (single file, zero config); PostgreSQL + pgvector for server deployments. Switching and pool sizing: Storage Backends.
Observability — structured log snapshots and an opt-in
/metricsendpoint: Metrics.Events & webhooks — the engine emits a typed event stream (captures, compile lifecycle, per-doc outcomes, graph edges, searches, LLM usage) to a rotating JSONL audit trail (
events:block); serve mode adds HMAC-SHA256-signed webhooks and an SSE stream at/events/stream. Events never carry document content or raw query text. See Webhooks and Configuration § events.Structured outputs — LLM extraction passes use each provider's native mechanism (Anthropic tool-use, OpenAI
response_format, GeminiresponseSchema) with a validating fence-strip fallback.Credentials — subscription tokens live in the OS keychain where available; run
sage-wiki auth migrateonce to move file-stored credentials over. Subscription Auth.Configuration — every key, annotated, with multi-provider recipes and the serve-mode compile worker: Configuration.
Entity resolution — 0.85 auto-apply, exactly reversible with
--unlink; see Graph memory above.Custom relation/entity types — extend built-ins or add your own (
ontology.relation_types), with multilingual synonyms and type restrictions: Configurable Relations.Output trust — query outputs quarantine until grounded, confirmed by consensus, or manually promoted: Output Trust.
Search tuning — chunking, expansion, re-ranking, graph expansion, and opt-in ANN: Search Quality.
Embedding (Go API)
sage-wiki can be embedded as a Go module — the same engine the CLI runs on, workspace-scoped and offline-capable:
w, err := engine.Open(ctx, dir) // one Workspace per directory
defer w.Close()
id, _ := w.Capture(ctx, engine.Source{Path: "doc.md"})
res, _ := w.Compile(ctx, engine.CompileRequest{Selector: "pending", Tier: 3})
hits, _ := w.Search(ctx, engine.SearchRequest{Query: "attention", Limit: 5})pkg/engine is the only supported surface (facade over internal/):
exclusive workspace lock (read-write Open fails fast with ErrLocked;
WithReadOnly for lock-free reads), v0.2.x workspaces open read-only
until adopted via WithUpgrade, and no internal/ type leaks into
exported signatures (lint-tested). Companion packages: pkg/provider
(LLM/embedding abstraction + providerfake for offline tests),
pkg/events, pkg/mirror. A full offline example lives in
examples/embed and runs in CI. The compile,
search, capture, and query commands themselves route through
pkg/engine. API stability note: pre-1.0, pin a version.
Cost
sage-wiki tracks token usage and estimates cost for every compile. Prompt caching (default on) reuses system prompts across calls within a compile pass — Anthropic and Gemini cache explicitly, OpenAI caches automatically — saving 50-90% on input tokens. Batch API (Anthropic, OpenAI, and Gemini) halves cost for large compiles:
sage-wiki compile --batch # submit batch, checkpoint, exit
sage-wiki compile # poll status, retrieve when donecompile --estimate previews cost; compiler.mode: auto batches
automatically past a threshold. Prices come from a provider:model
registry (embedded estimates → ~/.sage-wiki/prices.json →
compiler.price_table); models with no entry report unknown, never a
guessed number. Audit and review spend:
sage-wiki cost models # which price produced a number, and its source
sage-wiki cost report # recorded spend by model and pass/tierDetails: Configuration.
Resource limits
A single limits: block caps every ingestion, compile, query, and serve
surface. Zero (unset) values resolve to the defaults below — a zero never
means "disabled". Every violation fails fast with a typed error and emits a
limit_exceeded event. Threat model and residual risks:
Security.
limits:
max_doc_bytes: 10485760 # 10 MiB — max size of one ingested doc
max_docs_per_capture_batch: 10 # max docs per capture batch
max_compile_batch: 1000 # max docs per compile run
max_query_bytes: 32768 # 32 KiB — max question length
max_graph_traversal_nodes: 10000 # max nodes per graph traversal
max_concurrent_provider_calls: 20 # concurrent LLM/embed calls in a compile
max_concurrent_requests_per_conn: 8 # serve per-connection in-flight cap
provider_timeout: 120s # per-call LLM/embed deadline
compile_doc_timeout: 15m # per-doc compile budgetServe mode is additionally hardened at the HTTP layer: request/header/idle
timeouts, a 1 MiB request-header cap, a per-connection in-flight request
guard (429 on breach), and a 1 MiB body cap on /mcp. An operator-owned
rate-limit middleware slot (serve.Config.RateLimit, token-bucket example
included) is the hook for deployment-level policy.
Scaling to large vaults
Tiered compilation routes each source by type and usage instead of LLM-compiling everything:
| Tier | What happens | Cost | Time per doc |
|---|---|---|---|
| 0 — Index only | FTS5 full-text search | Free | ~5ms |
| 1 — Index + embed | FTS5 + vector embedding | ~$0.00002 | ~200ms |
| 2 — Code parse | Structural summary via regex parser (no LLM) | Free | ~10ms |
| 3 — Full compile | Summarize + extract concepts + write articles | ~$0.05-0.15 | ~5-8 min |
For large vaults: index everything at Tier 1 (a 100K-doc vault in ~5.5 hours), then compile on demand — auto-promotion, backpressure, and code parsers are covered in Large Vault Performance.
Bounded vector memory (opt-in)
By default every search loads the full vector matrix into memory per open
workspace (vectors.backend: memory). For very large vaults — or many
workspaces in one process — an on-disk, mmap-served index keeps resident
memory bounded instead:
vectors:
backend: mmap # memory (default) | mmap
quantization: none # none (default, fp32 exact) | int8 (4x smaller)Then build the index once (and after any compile/re-embed — a stale snapshot falls back to the in-memory cache with a warning, never to wrong results):
sage-wiki index rebuild-vectorsfp32 (
quantization: none) returns results identical to the in-memory backend (verified against the golden parity corpus).int8 is 4x smaller with a measured recall trade-off (recall@10 = 0.994 on the reference fixture; the gate is ≥ 0.95).
The memory ceiling is unix-only (real
mmap); other platforms serve the index from memory and warn once.Measured on a 50K×384 fixture: search heap 1.9 MB (mmap) vs 86.8 MB (memory) — ~2% resident; warm latency within 1.1x; cold search ~6x faster (no full cache load).
Multi-workspace serve
One process can serve many workspaces (personal/work/project vaults — and the seam a hosting setup composes around; this repo stays workspace-scoped, with no tenant/quota concepts):
sage-wiki serve --workspace-root /path/to/vaults --addr 127.0.0.1:8484GET /v1/workspaceslists the registry (subdirectories of the root containing a valid workspace)./w/{name}/...serves the full per-workspace surface (REST + MCP at/w/{name}/mcp). Workspace names are validated ([a-z0-9][a-z0-9-_]{0,63}) — invalid or unknown names get the sameWorkspaces open lazily;
--max-concurrent-compilesbounds compiles across all workspaces (one shared gate). Live workspaces are LRU-bounded by the engine Manager (engine.WithMaxOpenfor API users).Auth: the root
--token/--token-fileguards all/w/*routes. Per-workspace auth is a non-goal — compose it in front (reverse proxy) if you need it.--workspace-rootis HTTP-only and cannot be combined with--ui,--workspace, or--transport.Memory note: a served workspace opens up to 3 handles (engine, worker, MCP); the bounded-memory goal in multi-workspace serve requires
vectors.backend: mmap.
Remote mirror (S3 backup)
Continuous, crash-safe replication of a workspace to any S3-compatible bucket (S3, R2, MinIO) and fast restore from it. The local directory stays the operating surface — the mirror is durability and mobility, never a live query path.
# 1. Configure the mirror: block (below), then:
sage-wiki mirror enable # validates creds, writes manifest, bootstraps generation 1
sage-wiki mirror status # local + remote state, pending changes, lag
sage-wiki mirror snapshot # force a new generation
sage-wiki mirror verify # full re-hash invariant check (--fast for HEAD-only)
sage-wiki hydrate s3://bucket/prefix /path/to/empty-dirHow it ships: the serve process ships continuously (ship_interval);
every CLI command runs a best-effort ship pass after it finishes (success
or error). The db ships Litestream-style (snapshot + WAL segments);
markdown, prompts, sources, manifests, and vector indexes ship as
content-addressed objects. Crash safety: the commit pointer is written
last, so any kill leaves the previous committed state restorable —
mirror verify proves it (full re-download re-hash; --fast is
existence-only). Point-in-time restore: hydrate --at 2026-08-01T12:00:00Z
(segment granularity for the db; overshoot printed);
--generation N pins a generation; --partial restores in order
(manifest → db → markdown → vectors) so lexical/graph works before
vectors finish. PITR scope: the db restores at the selected
generation/segment; markdown and source objects restore from the same
generation's sealed object map (rotation points seal each generation's
doc set into its meta.json) — so a rotated-generation restore is a
consistent tree, not db@TIME with docs@newest. Docs restore at
per-generation granularity: a mid-generation delete may still be
present, a mid-generation create may be missing (bounded, and the
restore report prints both skews). Mirrors written before object maps
fall back to docs@newest with a printed note.
Credentials come from the environment (names configurable), never the workspace or config values:
mirror:
enabled: false # `mirror enable` sets this
endpoint: "" # e.g. https://<acct>.r2.cloudflarestorage.com or http://localhost:9000
addressing: "auto" # auto = virtual-host for amazonaws.com, path-style otherwise; "path"/"virtual" force
bucket: ""
prefix: "" # default: workspace directory name
region: "auto" # SigV4 region; "auto" works for R2/MinIO
access_key_env: "AWS_ACCESS_KEY_ID" # NAME of env var, never the value
secret_key_env: "AWS_SECRET_ACCESS_KEY"
session_token_env: "AWS_SESSION_TOKEN" # STS session token env var NAME (empty = absent)
credentials_file: "" # optional JSON {"access_key","secret_key","session_token"} outside the workspace
ship_interval: "1s" # WAL seal cadence while active
snapshot_interval: "1h" # scheduled generation cadence
min_rotation_interval: "60s" # debounce for fold-forced rotations
ship_lock_timeout: "5s" # ship-mutex wait for CLI passes
drain_timeout: "10s" # serve shutdown budget for the final ship pass
retain_generations: 2 # PITR depth in ROTATION COUNT, not time — raise for PITR-heavy use
max_consecutive_defers: 10 # busy-writer deferrals before status surfaces rotation_deferred
encryption:
enabled: false # AES-256-GCM client-side encryption
key_file: "" # 32-byte key file — MUST live outside the workspaceNotes:
config.yamlitself is not mirrored (it can hold secrets likeapi.api_key) — hydrate restores data only; runsage-wiki initor restore your own config after a migration.Optional encryption is AES-256-GCM with a keyfile;
mirror verifyworks without the key (integrity hashes cover shipped ciphertext).The standalone
sage-wiki tuihas no in-process shipper — its changes ship at TUI exit (kill -9 → at the next command).serveandserve --uiship continuously.RPO: with defaults, induced loss loses ≤
ship_intervalof writes (measured: 30.8ms of writes at a 50ms interval — see the testTestRPO_ServeShipper).
Ecosystem
Contribution Packs
Packs bundle ontology types, prompts, and skill triggers for a domain. Eight bundled packs work offline:
| Pack | Audience | Key ontology |
|---|---|---|
academic-research | Researchers | cites, contradicts, finding, research_hypothesis |
software-engineering | Dev teams | implements, depends_on, adr, runbook |
product-management | PMs | addresses, prioritizes, user_story |
personal-knowledge | Note-takers | relates_to, inspired_by, fleeting_note |
study-group | Students | explains, prerequisite_of, definition |
meeting-organizer | Managers | decided, assigned_to, action_item |
content-creation | Writers | references, revises, draft, published |
legal-compliance | Legal teams | regulates, supersedes, policy, control |
sage-wiki init --pack academic-research applies one at init;
pack install <name|url> adds more. Creating and publishing packs:
CONTRIBUTING.
External Parsers
Handle any file format with a script in any language (stdin → text on
stdout), declared in parsers/parser.yaml behind a double opt-in — they
run as unsandboxed subprocesses with timeout enforcement and environment
stripping. Authoring and hardening details: CONTRIBUTING;
the trust-boundary discussion: Team Setup.
Teams
Three sharing patterns — git-synced, shared server, hub federation — plus team trust review and cost management: Team Setup.
Benchmarks
Two suites answer different questions. Full detail: eval/benchmarks/REPORT.md and eval/REPORT.md.
Memory benchmarks — can it answer questions about a long conversation? Published datasets, LLM-judged, using the prompts and procedure from mem0ai/memory-benchmarks with sage-wiki as the backend (gpt-5 answerer/judge, scoped samples):
| Benchmark | Score | Mem0 Platform (published) |
|---|---|---|
| LOCOMO (150 q) | 92.0% @ top-50 | 91.8% @ top-50 |
| LongMemEval-S (30 q) | 93.3% @ top-50 | 94.8% @ top-50 |
| BEAM 100K (60 q) | 0.691 mean nugget | 0.641 @ 1M bucket |
Not a like-for-like ranking: mem0 runs their managed platform on full question sets, these are scoped samples (±4–5pp), and the compile pipelines differ. The caveats are spelled out in the report.
Quality + performance eval — is the wiki well-formed and fast? Runs on any compiled wiki, no API keys, seconds. Median across 10 real wikis: overall 87.4%, fact extraction 100%, search recall@10 100%, cross-reference integrity 100%. In-process retrieval: FTS5 top-10 0.035 ms, hybrid RRF 4.9 ms, graph BFS 0.001 ms.
python3 eval/eval.py . # quality + perf on your wiki
python3 -m pytest eval/eval_test.py -q # harness self-testsArchitecture
Storage: SQLite with FTS5 (BM25 search) + BLOB vectors (cosine similarity) + compile_items table for per-source tier/state tracking
Ontology: Typed entity-relation graph with BFS traversal and cycle detection
Search: Unified pipeline — document- and chunk-level FTS5 and vectors fused by weighted RRF with the ontology graph as a third channel, corpus-adaptive stopwording, title-proxy column weights, and a recency tie-breaker on documents with a known origin date. LLM query expansion and coverage-gated re-ranking are opt-in per call on the search surfaces and on by default for Q&A, which also gets 4-signal graph context expansion. Search responses signal uncompiled sources for compile-on-demand.
Compiler: Tiered pipeline (Tier 0: index, Tier 1: embed, Tier 2: code parse, Tier 3: full LLM compile) with adaptive backpressure, concurrent Pass 2 extraction, prompt caching, batch API (Anthropic + OpenAI + Gemini), cost tracking, compile-on-demand via MCP, quality scoring, and cascade awareness. Embedding includes retry with exponential backoff, optional rate limiting, and mean-pooling for long inputs. 10 built-in code parsers (Go via go/ast, 8 languages via regex, structured data key extraction).
MCP: 19 tools (7 read, 9 write, 3 compound) via stdio or SSE, including
wiki_graph_queryfor provenance-cited multi-hop graph QA,wiki_compile_topicfor on-demand compilation andwiki_capturefor knowledge extractionTUI: bubbletea + glamour 4-tab terminal dashboard (browse, search, Q&A, compile) with tier distribution display
Web UI: Preact + Tailwind CSS embedded via
go:embedwith build tag (-tags webui)Scribe: Extensible interface for ingesting knowledge from conversations. Session scribe processes Claude Code JSONL transcripts.
Packs: Contribution pack system with 8 bundled packs, Git-based registry, install/apply/remove/update lifecycle, transactional apply with snapshot rollback, fill-only merge, and config allowlist security.
External Parsers: Runtime-pluggable file format parsers via stdin/stdout subprocess protocol. Sandboxed execution with timeout, env stripping, and network isolation (Linux).
Zero CGO. Pure Go. Cross-platform.
License
internal/mirror/s3/testdata/aws4_testsuite/LICENSE
Shown as plain text.
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
512 files · 501 not served here
- .dockerignore (not served here)
- .gitattributes (not served here)
- .github/PULL_REQUEST_TEMPLATE.md (not served here)
- .github/dependabot.yml (not served here)
- .github/workflows/ci-diagnostics.yml (not served here)
- .github/workflows/ci.yml (not served here)
- .github/workflows/clients.yml (not served here)
- .github/workflows/docker.yml (not served here)
- .github/workflows/fuzz.yml (not served here)
- .github/workflows/publish-python.yml (not served here)
- .github/workflows/publish-typescript.yml (not served here)
- .github/workflows/release.yml (not served here)
- .gitignore (not served here)
- .golangci.yml (not served here)
- ATTRIBUTION.md
- CHANGELOG.md
- CONTRIBUTING.md
- Dockerfile (not served here)
- LICENSE
- Makefile (not served here)
- README.md
- api/openapi.yaml (not served here)
- assets/sage-wiki-architecture.png (not served here)
- assets/sage-wiki-compiler-pipeline.png (not served here)
- assets/sage-wiki-graph-engine.png (not served here)
- assets/sage-wiki-interfaces.png (not served here)
- assets/sage-wiki-webui.png (not served here)
- ci/fuzz-targets.yaml (not served here)
- ci/metrics-baseline.json (not served here)
- ci/package-ownership.yaml (not served here)
- ci/platform-contracts.yaml (not served here)
- ci/publication-policy.yaml (not served here)
- ci/qualification.json (not served here)
- ci/service-contracts.yaml (not served here)
- ci/standards.yaml (not served here)
- clients/python/README.md (not served here)
- clients/python/pyproject.toml (not served here)
- clients/python/src/sagewiki/__init__.py (not served here)
- clients/python/src/sagewiki/client.py (not served here)
- clients/python/src/sagewiki/errors.py (not served here)
- clients/python/src/sagewiki/jobs.py (not served here)
- clients/python/src/sagewiki/models.py (not served here)
- clients/python/src/sagewiki/py.typed (not served here)
- clients/python/tests/test_client.py (not served here)
- clients/python/tests/test_contract.py (not served here)
- clients/python/tests/test_errors.py (not served here)
- clients/python/tests/test_jobs.py (not served here)
- clients/python/tests/test_models.py (not served here)
- clients/typescript/README.md (not served here)
- clients/typescript/package-lock.json (not served here)
- clients/typescript/package.json (not served here)
- clients/typescript/src/client.ts (not served here)
- clients/typescript/src/errors.ts (not served here)
- clients/typescript/src/index.ts (not served here)
- clients/typescript/src/jobs.ts (not served here)
- clients/typescript/src/types.ts (not served here)
- clients/typescript/test/client.test.ts (not served here)
- clients/typescript/test/contract.test.ts (not served here)
- clients/typescript/test/errors.test.ts (not served here)
- clients/typescript/test/jobs.test.ts (not served here)
- clients/typescript/test/types.typecheck.ts (not served here)
- clients/typescript/tsconfig.cjs.json (not served here)
- clients/typescript/tsconfig.json (not served here)
- clients/typescript/tsconfig.test.json (not served here)
- cmd/sage-wiki/adapter_parity_test.go (not served here)
- cmd/sage-wiki/add_source.go (not served here)
- cmd/sage-wiki/auth_cmd.go (not served here)
- cmd/sage-wiki/auth_migrate_cmd.go (not served here)
- cmd/sage-wiki/capture.go (not served here)
- cmd/sage-wiki/cli_events.go (not served here)
- cmd/sage-wiki/cli_events_test.go (not served here)
- cmd/sage-wiki/compile_explain_test.go (not served here)
- cmd/sage-wiki/cost_cmd.go (not served here)
- cmd/sage-wiki/cost_cmd_test.go (not served here)
- cmd/sage-wiki/coverage_cmd.go (not served here)
- cmd/sage-wiki/defaults_off_test.go (not served here)
- cmd/sage-wiki/diff.go (not served here)
- cmd/sage-wiki/diff_drift_test.go (not served here)
- cmd/sage-wiki/hardening_test.go (not served here)
- cmd/sage-wiki/hub.go (not served here)
- cmd/sage-wiki/hydrate_cmd.go (not served here)
- cmd/sage-wiki/hydrate_cmd_test.go (not served here)
- cmd/sage-wiki/index_cmd.go (not served here)
- cmd/sage-wiki/index_cmd_test.go (not served here)
- cmd/sage-wiki/init_args_test.go (not served here)
- cmd/sage-wiki/learn.go (not served here)
- cmd/sage-wiki/list.go (not served here)
- cmd/sage-wiki/lock_surface_test.go (not served here)
- cmd/sage-wiki/main.go (not served here)
- cmd/sage-wiki/main_test.go (not served here)
- cmd/sage-wiki/mirror_cmd.go (not served here)
- cmd/sage-wiki/mirror_cmd_test.go (not served here)
- cmd/sage-wiki/mirror_hook.go (not served here)
- cmd/sage-wiki/mirror_hook_test.go (not served here)
- cmd/sage-wiki/ontology_cmd.go (not served here)
- cmd/sage-wiki/ontology_query_alias_test.go (not served here)
- cmd/sage-wiki/ontology_resolve.go (not served here)
- cmd/sage-wiki/ontology_resolve_test.go (not served here)
- cmd/sage-wiki/pack_cmd.go (not served here)
- cmd/sage-wiki/reconcile_startup_test.go (not served here)
- cmd/sage-wiki/reindex_cmd.go (not served here)
- cmd/sage-wiki/reindex_cmd_test.go (not served here)
- cmd/sage-wiki/search_e2e_test.go (not served here)
- cmd/sage-wiki/search_opts_test.go (not served here)
- cmd/sage-wiki/serve_deps_test.go (not served here)
- cmd/sage-wiki/serve_gate_test.go (not served here)
- cmd/sage-wiki/serve_multi_test.go (not served here)
- cmd/sage-wiki/skill_cmd.go (not served here)
- cmd/sage-wiki/source_cmd.go (not served here)
- cmd/sage-wiki/testdata/usage.jsonl (not served here)
- cmd/sage-wiki/trust_cmd.go (not served here)
- cmd/sage-wiki/version_test.go (not served here)
- cmd/sage-wiki/write_cmd.go (not served here)
- docs/determinism.md
- docs/guides/agent-memory-layer.md (not served here)
- docs/guides/configurable-relations.md (not served here)
- docs/guides/configuration.md (not served here)
- docs/guides/customizing-prompts.md (not served here)
- docs/guides/graph-memory.md (not served here)
- docs/guides/http-api.md (not served here)
- docs/guides/large-vault-performance.md (not served here)
- docs/guides/local-models.md (not served here)
- docs/guides/metrics.md (not served here)
- docs/guides/output-trust.md (not served here)
- docs/guides/parity-suite.md (not served here)
- docs/guides/remote-mirror.md (not served here)
- docs/guides/search-quality.md (not served here)
- docs/guides/self-hosted-server.md (not served here)
- docs/guides/serve-mode.md (not served here)
- docs/guides/storage-backends.md (not served here)
- docs/guides/subscription-auth.md (not served here)
- docs/guides/team-setup.md (not served here)
- docs/security.md
- docs/translations/README_fr.md (not served here)
- docs/translations/README_ja.md (not served here)
- docs/translations/README_ko.md (not served here)
- docs/translations/README_ru.md (not served here)
- docs/translations/README_vi.md (not served here)
- docs/translations/README_zh.md (not served here)
- docs/webhooks.md
- eval/README.md (not served here)
- eval/REPORT.md (not served here)
- eval/benchmarks/NOTICE
- eval/benchmarks/README.md (not served here)
- eval/benchmarks/REPORT.md (not served here)
- eval/benchmarks/__init__.py (not served here)
- eval/benchmarks/beam/__init__.py (not served here)
- eval/benchmarks/beam/prompts.py (not served here)
- eval/benchmarks/beam/run.py (not served here)
- eval/benchmarks/common/__init__.py (not served here)
- eval/benchmarks/common/checkpoints.py (not served here)
- eval/benchmarks/common/llm.py (not served here)
- eval/benchmarks/common/metrics.py (not served here)
- eval/benchmarks/common/ratelimit.py (not served here)
- eval/benchmarks/common/sagewiki.py (not served here)
- eval/benchmarks/locomo/__init__.py (not served here)
- eval/benchmarks/locomo/prompts.py (not served here)
- eval/benchmarks/locomo/run.py (not served here)
- eval/benchmarks/longmemeval/__init__.py (not served here)
- eval/benchmarks/longmemeval/prompts.py (not served here)
- eval/benchmarks/longmemeval/run.py (not served here)
- eval/benchmarks/report_check.py (not served here)
- eval/benchmarks/requirements.txt (not served here)
- eval/benchmarks/results/beam_full.json (not served here)
- eval/benchmarks/results/beam_gpt5.json (not served here)
- eval/benchmarks/results/beam_smoke.json (not served here)
- eval/benchmarks/results/locomo_full.json (not served here)
- eval/benchmarks/results/locomo_gpt5-150.json (not served here)
- eval/benchmarks/results/locomo_parity.json (not served here)
- eval/benchmarks/results/locomo_smoke.json (not served here)
- eval/benchmarks/results/longmemeval_full.json (not served here)
- eval/benchmarks/results/longmemeval_gpt5.json (not served here)
- eval/benchmarks/results/longmemeval_smoke.json (not served here)
- eval/benchmarks/retrieval_ab.py (not served here)
- eval/benchmarks/tests/__init__.py (not served here)
- eval/benchmarks/tests/fake_sage_wiki.sh (not served here)
- eval/benchmarks/tests/test_beam.py (not served here)
- eval/benchmarks/tests/test_checkpoints.py (not served here)
- eval/benchmarks/tests/test_llm.py (not served here)
- eval/benchmarks/tests/test_locomo.py (not served here)
- eval/benchmarks/tests/test_longmemeval.py (not served here)
- eval/benchmarks/tests/test_metrics.py (not served here)
- eval/benchmarks/tests/test_prompts.py (not served here)
- eval/benchmarks/tests/test_ratelimit.py (not served here)
- eval/benchmarks/tests/test_report_check.py (not served here)
- eval/benchmarks/tests/test_sagewiki.py (not served here)
- eval/eval.py (not served here)
- eval/eval_test.py (not served here)
- examples/embed/main.go (not served here)
- examples/langgraph/README.md (not served here)
- examples/langgraph/main.py (not served here)
- examples/langgraph/requirements.txt (not served here)
- examples/vercel-ai-sdk/README.md (not served here)
- examples/vercel-ai-sdk/main.ts (not served here)
- examples/vercel-ai-sdk/package-lock.json (not served here)
- examples/vercel-ai-sdk/package.json (not served here)
- go.mod (not served here)
- go.sum (not served here)
- integration_test.go (not served here)
- internal/api/dispatch.go (not served here)
- internal/api/dispatch_test.go (not served here)
- internal/api/drift_test.go (not served here)
- internal/api/errors.go (not served here)
- internal/api/handlers_jobs.go (not served here)
- internal/api/handlers_jobs_test.go (not served here)
- internal/api/handlers_read.go (not served here)
- internal/api/handlers_read_test.go (not served here)
- internal/api/handlers_write.go (not served here)
- internal/api/handlers_write_test.go (not served here)
- internal/api/idempotency.go (not served here)
- internal/api/idempotency_test.go (not served here)
- internal/api/jobrunner.go (not served here)
- internal/api/jobs.go (not served here)
- internal/api/jobs_test.go (not served here)
- internal/api/review_fixes_test.go (not served here)
- internal/api/router.go (not served here)
- internal/app/app.go (not served here)
- internal/app/app_test.go (not served here)
- internal/auth/auth.go (not served here)
- internal/auth/auth_test.go (not served here)
- internal/auth/backend.go (not served here)
- internal/auth/backend_test.go (not served here)
- internal/auth/browser.go (not served here)
- internal/auth/import.go (not served here)
- internal/auth/import_test.go (not served here)
- internal/auth/keyring.go (not served here)
- internal/auth/keyring_test.go (not served here)
- internal/auth/lockfile.go (not served here)
- internal/auth/migrate.go (not served here)
- internal/auth/migrate_test.go (not served here)
- internal/auth/oauth.go (not served here)
- internal/auth/oauth_test.go (not served here)
- internal/auth/providers.go (not served here)
- internal/auth/refresh.go (not served here)
- internal/auth/refresh_test.go (not served here)
- internal/auth/resolve.go (not served here)
- internal/auth/store.go (not served here)
- internal/auth/store_test.go (not served here)
- internal/auth/transport.go (not served here)
- internal/auth/transport_test.go (not served here)
- internal/capturefmt/capturefmt.go (not served here)
- internal/capturefmt/capturefmt_test.go (not served here)
- internal/cli/output.go (not served here)
- internal/cli/output_test.go (not served here)
- internal/compiler/backfill.go (not served here)
- internal/compiler/backfill_overlap_test.go (not served here)
- internal/compiler/backpressure.go (not served here)
- internal/compiler/backpressure_test.go (not served here)
- internal/compiler/batch_id_test.go (not served here)
- internal/compiler/batch_resume_test.go (not served here)
- internal/compiler/batch_state.go (not served here)
- internal/compiler/batch_state_test.go (not served here)
- internal/compiler/characterization_test.go (not served here)
- internal/compiler/checkpoint_deprecation_test.go (not served here)
- internal/compiler/cli_queue_test.go (not served here)
- internal/compiler/communities.go (not served here)
- internal/compiler/communities_test.go (not served here)
- internal/compiler/compile_cancel_test.go (not served here)
- internal/compiler/compilekey.go (not served here)
- internal/compiler/compilekey_test.go (not served here)
- internal/compiler/concepts.go (not served here)
- internal/compiler/concepts_test.go (not served here)
- internal/compiler/confidence.go (not served here)
- internal/compiler/confidence_test.go (not served here)
- internal/compiler/coordinator.go (not served here)
- internal/compiler/coordinator_test.go (not served here)
- internal/compiler/curate.go (not served here)
- internal/compiler/curate_test.go (not served here)
- internal/compiler/dedup.go (not served here)
- internal/compiler/dedup_alias_test.go (not served here)
- internal/compiler/dedup_skip_test.go (not served here)
- internal/compiler/dedup_test.go (not served here)
- internal/compiler/determinism_integration_test.go (not served here)
- internal/compiler/determinism_order_test.go (not served here)
- internal/compiler/diff.go (not served here)
- internal/compiler/diff_test.go (not served here)
- internal/compiler/docbudget.go (not served here)
- internal/compiler/docbudget_test.go (not served here)
- internal/compiler/events_test.go (not served here)
- internal/compiler/evidence_gate.go (not served here)
- internal/compiler/evidence_gate_test.go (not served here)
- internal/compiler/extract_triples.go (not served here)
- internal/compiler/extract_triples_test.go (not served here)
- internal/compiler/fullpipeline.go (not served here)
- internal/compiler/fuzz_alias_test.go (not served here)
- internal/compiler/fuzz_canonical_test.go (not served here)
- internal/compiler/fuzz_frontmatter_test.go (not served here)
- internal/compiler/fuzz_wikilink_test.go (not served here)
- internal/compiler/gate_integration_test.go (not served here)
- internal/compiler/images.go (not served here)
- internal/compiler/index.go (not served here)
- internal/compiler/index_test.go (not served here)
- internal/compiler/items.go (not served here)
- internal/compiler/items_clock_test.go (not served here)
- internal/compiler/items_compilekey_test.go (not served here)
- internal/compiler/items_t8_test.go (not served here)
- internal/compiler/items_test.go (not served here)
- internal/compiler/limits_test.go (not served here)
- internal/compiler/main_test.go (not served here)
- internal/compiler/metrics_labels_test.go (not served here)
- internal/compiler/metrics_test.go (not served here)
- internal/compiler/migrate_checkpoint.go (not served here)
- internal/compiler/migrate_checkpoint_test.go (not served here)
- internal/compiler/normalize_triples_test.go (not served here)
- internal/compiler/ondemand.go (not served here)
- internal/compiler/ondemand_test.go (not served here)
- internal/compiler/persist_triples_test.go (not served here)
- internal/compiler/pipeline.go (not served here)
- internal/compiler/pipeline_curate_test.go (not served here)
- internal/compiler/pipeline_test.go (not served here)
- internal/compiler/progress.go (not served here)
- internal/compiler/progress_events_test.go (not served here)
- internal/compiler/prompt_injection_test.go (not served here)
- internal/compiler/quality_retry_test.go (not served here)
- internal/compiler/reembed.go (not served here)
- internal/compiler/reextract.go (not served here)
- internal/compiler/reextract_test.go (not served here)
- internal/compiler/resolve_entities.go (not served here)
- internal/compiler/resolve_entities_test.go (not served here)
- internal/compiler/resolve_pass_test.go (not served here)
- internal/compiler/skip.go (not served here)
- internal/compiler/skip_test.go (not served here)
- internal/compiler/source_path.go (not served here)
- internal/compiler/source_path_test.go (not served here)
- internal/compiler/spanverify_test.go (not served here)
- internal/compiler/spike_determinism_test.go (not served here)
- internal/compiler/strip_links_test.go (not served here)
- internal/compiler/summarize.go (not served here)
- internal/compiler/summarize_force_test.go (not served here)
- internal/compiler/summarize_test.go (not served here)
- internal/compiler/summary_path.go (not served here)
- internal/compiler/summary_path_test.go (not served here)
- internal/compiler/temperature_wire_test.go (not served here)
- internal/compiler/temporal_trigger_test.go (not served here)
- internal/compiler/testdata/benchmark/README.md (not served here)
- internal/compiler/testdata/compile_snapshot_golden.json (not served here)
- internal/compiler/tiers.go (not served here)
- internal/compiler/tiers_test.go (not served here)
- internal/compiler/triples_pass_test.go (not served here)
- internal/compiler/triples_wiring_test.go (not served here)
- internal/compiler/typedetect.go (not served here)
- internal/compiler/typedetect_test.go (not served here)
- internal/compiler/unlink_chain_test.go (not served here)
- internal/compiler/validfrom_test.go (not served here)
- internal/compiler/walk.go (not served here)
- internal/compiler/walk_test.go (not served here)
- internal/compiler/watch.go (not served here)
- internal/compiler/watch_test.go (not served here)
- internal/compiler/worker.go (not served here)
- internal/compiler/worker_cycle.go (not served here)
- internal/compiler/worker_cycle_test.go (not served here)
- internal/compiler/worker_enqueue_test.go (not served here)
- internal/compiler/worker_test.go (not served here)
- internal/compiler/write.go (not served here)
- internal/compiler/write_deferred_test.go (not served here)
- internal/compiler/write_test.go (not served here)
- internal/compiler/zz_m1_test.go (not served here)
- internal/config/chunk_overlap_test.go (not served here)
- internal/config/clock_test.go (not served here)
- internal/config/communities_config_test.go (not served here)
- internal/config/config.go (not served here)
- internal/config/config_test.go (not served here)
- internal/config/limits_test.go (not served here)
- internal/config/merge.go (not served here)
- internal/config/merge_test.go (not served here)
- internal/config/min_concept_sources_test.go (not served here)
- internal/config/mirror_config_test.go (not served here)
- internal/config/result_max_chars_test.go (not served here)
- internal/config/storage_test.go (not served here)
- internal/config/temperature_test.go (not served here)
- internal/config/temporal_config_test.go (not served here)
- internal/config/vectors_config_test.go (not served here)
- internal/embed/dims_test.go (not served here)
- internal/embed/embed.go (not served here)
- internal/embed/embed_test.go (not served here)
- internal/embed/metrics.go (not served here)
- internal/embed/metrics_labels_test.go (not served here)
- internal/embed/metrics_test.go (not served here)
- internal/embed/timeout_test.go (not served here)
- internal/export/tar.go (not served here)
- internal/export/tar_test.go (not served here)
- internal/extract/chunk_overlap_test.go (not served here)
- internal/extract/email.go (not served here)
- internal/extract/epub.go (not served here)
- internal/extract/external.go (not served here)
- internal/extract/external_test.go (not served here)
- internal/extract/extract.go (not served here)
- internal/extract/extract_test.go (not served here)
- internal/extract/fuzz_frontmatter_test.go (not served here)
- internal/extract/fuzz_test.go (not served here)
- internal/extract/limits_test.go (not served here)
- internal/extract/office.go (not served here)
- internal/extract/parsers/c.go (not served here)
- internal/extract/parsers/go_parser.go (not served here)
- internal/extract/parsers/java.go (not served here)
- internal/extract/parsers/parser.go (not served here)
- internal/extract/parsers/parser_test.go (not served here)
- internal/extract/parsers/python.go (not served here)
- internal/extract/parsers/ruby.go (not served here)
- internal/extract/parsers/rust.go (not served here)
- internal/extract/parsers/structured.go (not served here)
- internal/extract/parsers/typescript.go (not served here)
- internal/extract/pdf.go (not served here)
- internal/extract/readhead.go (not served here)
- internal/extract/sandbox_linux.go (not served here)
- internal/extract/sandbox_other.go (not served here)
- internal/extract/seeds_test.go (not served here)
- internal/extract/split.go (not served here)
- internal/extract/split_test.go (not served here)
- internal/extract/testdata/fuzz/FuzzExtractPdfGo/58b650d07ea9426f (not served here)
- internal/extract/testdata/fuzz/FuzzExtractPdfGo/aa4b8811c5b90d86 (not served here)
- internal/extract/ziplimits.go (not served here)
- internal/fsutil/atomic.go (not served here)
- internal/fsutil/atomic_test.go (not served here)
- internal/git/git.go (not served here)
- internal/git/git_test.go (not served here)
- internal/graph/community/input.go (not served here)
- internal/graph/community/input_test.go (not served here)
- internal/graph/community/louvain.go (not served here)
- internal/graph/community/louvain_test.go (not served here)
- internal/graph/relevance.go (not served here)
- internal/graph/relevance_alias_test.go (not served here)
- internal/graph/relevance_test.go (not served here)
- internal/graph/serialize.go (not served here)
- internal/graph/serialize_test.go (not served here)
- internal/hub/hub.go (not served here)
- internal/hub/hub_test.go (not served here)
- internal/hub/search.go (not served here)
- internal/hub/search_test.go (not served here)
- internal/hybrid/metrics_labels_test.go (not served here)
- internal/hybrid/metrics_test.go (not served here)
- internal/hybrid/search.go (not served here)
- internal/hybrid/search_test.go (not served here)
- internal/limits/limits.go (not served here)
- internal/limits/limits_test.go (not served here)
- internal/linter/learning.go (not served here)
- internal/linter/linter_test.go (not served here)
- internal/linter/passes.go (not served here)
- internal/linter/runner.go (not served here)
- internal/llm/anthropic.go (not served here)
- internal/llm/anthropic_structured.go (not served here)
- internal/llm/anthropic_structured_test.go (not served here)
- internal/llm/anthropic_test.go (not served here)
- internal/llm/batch.go (not served here)
- internal/llm/batch_retry_test.go (not served here)
- internal/llm/batch_test.go (not served here)
- internal/llm/cache.go (not served here)
- internal/llm/cache_test.go (not served here)
- internal/llm/client.go (not served here)
- internal/llm/client_ctx_test.go (not served here)
- internal/llm/client_test.go (not served here)
- internal/llm/concurrency_repro_test.go (not served here)
- internal/llm/cost.go (not served here)
- internal/llm/cost_test.go (not served here)
- internal/llm/gemini.go (not served here)
- internal/llm/gemini_structured.go (not served here)
- internal/llm/gemini_structured_test.go (not served here)
- internal/llm/gemini_test.go (not served here)
- internal/llm/injected.go (not served here)
- internal/llm/injected_test.go (not served here)
- internal/llm/issue114_retry_test.go (not served here)
- internal/llm/metrics_labels_test.go (not served here)
- internal/llm/metrics_test.go (not served here)
- internal/llm/nonbatch.go (not served here)
- internal/llm/openai.go (not served here)
- internal/llm/openai_response_test.go (not served here)
- internal/llm/openai_structured.go (not served here)
- internal/llm/openai_structured_test.go (not served here)
- internal/llm/price_table_test.go (not served here)
- internal/llm/prices/default.json (not served here)
- internal/llm/pricing.go (not served here)
- internal/llm/pricing_test.go (not served here)
- internal/llm/schema.go (not served here)
- internal/llm/schema_test.go (not served here)
- internal/llm/stream.go (not served here)
- internal/llm/structured.go (not served here)
- internal/llm/structured_acceptance_test.go (not served here)
- internal/llm/structured_cache_test.go (not served here)
- internal/llm/structured_gate3_test.go (not served here)
- internal/llm/structured_stubs.go (not served here)
- internal/llm/structured_stubs_test.go (not served here)
- internal/llm/structured_test.go (not served here)
- internal/llm/timeout_test.go (not served here)
- internal/llm/usage.go (not served here)
- internal/llm/usage_test.go (not served here)
- internal/log/log.go (not served here)
- internal/log/log_test.go (not served here)
- internal/manifest/aliases_test.go (not served here)
- internal/manifest/clock_test.go (not served here)
- internal/manifest/concurrency_test.go (not served here)
- internal/manifest/format_version_test.go (not served here)
- internal/manifest/lock.go (not served here)
- internal/manifest/lock_test.go (not served here)
- internal/manifest/manifest.go (not served here)
- internal/manifest/manifest_test.go (not served here)
- internal/manifest/merge.go (not served here)
- internal/manifest/merge_test.go (not served here)
- internal/manifest/testdata/v02x.manifest.json (not served here)
- internal/mcp/graph_query_test.go (not served here)
- internal/mcp/query_limits_test.go (not served here)
- internal/mcp/query_tool_test.go (not served here)
- internal/mcp/server.go (not served here)
- internal/mcp/server_test.go (not served here)
- internal/mcp/server_truncate_test.go (not served here)
- internal/mcp/testdata/mcp_tool_schemas.json (not served here)
- internal/mcp/tools_compound.go (not served here)
- internal/mcp/tools_graph.go (not served here)
- internal/mcp/tools_write.go (not served here)
- internal/mcp/tools_write_hardening_test.go (not served here)
- internal/mcp/tools_write_test.go (not served here)
- internal/mirror/s3/testdata/aws4_testsuite/LICENSE
- internal/mirror/s3/testdata/aws4_testsuite/NOTICE
Advantages
- Provides evidenced graph edges with citations, allowing users to trace conclusions back to specific source documents. evidence: README.md
- Supports hybrid retrieval by fusing lexical, vector, and graph proximity search channels. evidence: README.md
- Offers a unified interface for both humans and AI agents, with Obsidian-compatible markdown output and MCP tool support. evidence: README.md
Limitations
- Requires an LLM provider for compilation and graph extraction tasks, which may incur costs. evidence: README.md
- Advanced graph features like triple extraction and entity resolution are opt-in and require additional LLM calls. evidence: README.md
Security
Risk level: Low risk
This brain runs
MCP servers (1)
README.md(sage-wiki):sage-wiki serve --transport stdio --project /path/to/wiki
Agent instructions that run or fetch something (6)
skills/sage-wiki-integrate/SKILL.md:| Marker | Language | Integration path | |--------|----------|-----------------| | `pyproject.toml` | Python | `pip install sagewiki` (Python client, P4-3) | | `package.json` | TypeScript / JavaScript | `npm install sagewiki` (TypeScript client, P4-4) | | Neither | Any | MCP stdio config |skills/sage-wiki-integrate/SKILL.md:pip install sagewikiskills/sage-wiki-integrate/SKILL.md:npm install sagewikiskills/sage-wiki-integrate/SKILL.md:Execute the chosen smoke test.skills/sage-wiki/SKILL.md:Run the full compile pipeline: diff → summarize → extract concepts → write articles.skills/sage-wiki/SKILL.md:Run linting passes on the wiki.
- Low risk: scripts-present (scripts/check-determinism.sh)
- Low risk: scripts-present (scripts/check-readme-translations.sh)
- Low risk: scripts-present (scripts/ci/check-format.sh)
- Low risk: scripts-present (scripts/ci/check-modules.sh)
- Low risk: network-instructions (skills/sage-wiki-integrate/SKILL.md:18)
Attribution and licence
- First committed by
xoai
- Publisher
- xoai (Community)
- Source
- xoai/sage-wiki · commit 63c9d7b
- Licence
- MIT License (files served here)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
- Contributors
- xoai, kailunguu-code, mazhehotmailcouk, mpestritto, ystyle
AutoGineer is not affiliated with or endorsed by xoai.
Install from source
501 of its files are not served here, so there is no ZIP. xoai/sage-wiki at 63c9d7b