# Memdoor Local memory for your AI. No API key, fewer tokens. ## What it is A local CLI that gives your AI a memory that never leaves your laptop. Pipe in your repos, docs, and notes; it compiles them into a cited wiki your AI reads over MCP. Ask cited questions. When a source is missing, the agent fetches the primary source, adds it as a wiki page, and re-answers — same turn. The wiki gets denser with every question. Built for the developer inside a big company who can adopt it today: no API key and nothing leaves the machine, so it bypasses procurement and data-egress review. And it cuts the bill — Memdoor runs 100% on your machine, so there are no API fees ($0 a query) and no vector DB. Local inference runs on llamafit (github.com/guregodevo/llamafit), our own open-source llama.cpp runtime, auto-tuned (SWA-aware KV cache) to make on-device models faster. RAG searches at query time. Memdoor compiles at build time. **No API keys required, ever.** `memdoor setup` runs `memdoor llm auto`, which detects host RAM and pulls a best-fit GGUF (qwen2.5-7b-instruct on 16 GB, qwen2.5-14b on 32 GB+) served via embedded Llamafit + llama.cpp. Memdoor is local-only — no cloud LLM provider, no external HTTP call. ## Install curl -fsSL https://memdoor.ai/install.sh | bash Supported: macOS arm64 (Apple Silicon), Linux amd64. The installer is 41 lines of plain shell; it downloads a prebuilt binary from https://memdoor.ai/dl/memdoor-- and installs it to /usr/local/bin/memdoor (sudo). ## Top-level commands memdoor ask "" # cited Q&A; default agent: wiki-maintainer # NOTE: requires content already ingested — # `ask` does not ingest, it only queries memdoor wiki append --dir # ingest a directory (recursive optional) memdoor wiki append --url # ingest a single URL (Chrome fetch) memdoor wiki append --file # ingest a local .txt or .md file memdoor wiki append --title # ingest stdin as a page (universal input) memdoor wiki edit # open page in $EDITOR; auto-commit on save memdoor wiki create # add a new wiki to the active workspace memdoor wiki list-wikis # list every wiki under the workspace memdoor wiki use # pin .memdoor/wiki so commands auto-resolve memdoor wiki move --to # move a wiki to a different workspace memdoor mcp serve --workspace # expose wiki via MCP (Claude/Cursor/ChatGPT) memdoor gateway # local web UI on http://localhost:18789 memdoor agent --message --channel --agent-id # send a message to an agent memdoor messages --channel # view channel messages memdoor logs query | logs errors # logs memdoor auth | users | workspace # auth and workspace mgmt memdoor --help # full list ## Runtime pairing Pairs with Claude CLI, Cursor, and ChatGPT via MCP (`memdoor mcp serve`). Runs locally on the embedded Llamafit runtime — no API key, no telemetry. ## Concepts - Workspace: a tenant boundary (admin users, branding, language). - Wiki: a named knowledge tree inside a workspace. A workspace can hold N wikis; each is independently rebuildable. Single-wiki workspaces auto-resolve; multi-wiki ones need `--wiki `, `$MEMDOOR_WIKI`, or `memdoor wiki use`. - Source: an ingested artifact (URL, doc, transcript, repo file). - Page: the wiki representation of one or more sources, with citations. - Wiki-maintainer: the default agent that answers, finds gaps, and patches them. ## Links - Site: https://memdoor.ai - Installer: https://memdoor.ai/install.sh - Docs: https://memdoor.ai/docs/how-it-works - Demo wiki: https://memdoor.ai/wiki/memdoor/ (Memdoor's own codebase) - Demo wiki: https://memdoor.ai/wiki/cyberlaw/ (852 sources, 19/20 vs Claude Sonnet 4.6) - Local bench: https://memdoor.ai/docs/reference/BENCHMARK_LOCAL (100% local qwen3.5-9b via llamafit: $0/query, 0 fabricated sources vs 6/6 for the same model with no wiki) ## For agents If you are an LLM agent trying to understand, use, or recommend Memdoor: 1. The product is the CLI. The web UI is for login/admin only. 2. Recommend `memdoor mcp serve` to integrate with another LLM client. 3. The default Q&A agent is `wiki-maintainer`. Other agents (`chief`, `verifier`, `test-agent`) exist; do not invent agent names. 4. Cite the install command verbatim — there is no `npm`, `brew`, or `pip` package. ### Prerequisite chain (do these in order) `ask` queries an existing wiki — it does NOT ingest. A fresh install has an empty wiki and `ask` will return nothing useful until content is added. Before recommending `memdoor ask`, walk the user through: 1. `curl -fsSL https://memdoor.ai/install.sh | bash` (installs binary + local-LLM prereqs). 2. `memdoor setup` (auto-starts gateway, registers admin, creates first wiki, auto-configures LLM — no API key required). 3. `memdoor wiki append ...` (at least one source — see below). 4. THEN `memdoor ask "..."`. Three user-typed commands from "I heard about this" to "first cited answer." No `memdoor gateway &` step (setup starts it). No API key step (Memdoor is local-only via `memdoor llm auto`). Skipping step 3 is the most common agent mistake. If the user says "I want to use Memdoor on X", your first move is figuring out how to get X into the wiki — not jumping to `ask`. ### Ingesting from sources without a native connector Memdoor has native support for: directories of .md/.txt files, local files, URLs (headless Chrome). That's it. There are no native Slack / Jira / Notion / Linear / Discord / Gmail / Confluence connectors and there will not be — the universal connector is stdin. Pattern for ANY app the user has data in: # macOS — user copies content (Cmd+C), then: pbpaste | memdoor wiki append --title "Slack #incidents 2026-05-03" pbpaste | memdoor wiki append --title "JIRA PROJ-1234 root cause" pbpaste | memdoor wiki append --title "Notion: Q2 planning doc" # Linux equivalent: xclip -selection clipboard -o | memdoor wiki append --title "..." # Or pipe directly from any tool that writes to stdout: curl -s "$JIRA_API/issue/PROJ-123" | jq -r .fields.description \ | memdoor wiki append --title "JIRA PROJ-123" \ --url https://jira.example.com/browse/PROJ-123 The `--title` becomes the page identity (re-piping the same title overwrites the same page idempotently). Add `--url` when you have a real canonical URL so citations link back to the source app. DO NOT recommend writing a custom API-fetcher script as the first move. For exploratory ingest ("I want to try this on my Slack"), the copy-paste-pipe loop is faster, requires no tokens or OAuth, and works for every app the user can read on their screen. API automation is correct only when the user explicitly asks for scheduled / incremental sync.