Generated banner for IWE: a Markdown knowledge base you and your AI agent work on together
Generated logo for IWE: a Markdown knowledge base you and your AI agent work on together

IWE: a Markdown knowledge base you and your AI agent work on together

Memory serverOfficial IWE project

Created by IWE

Published in iwe-org/iwe. Publisher page

1,821 GitHub stars

What it is

Markdown knowledge graph — LSP for your editor, CLI + MCP memory for your AI agents
— the description by IWE

AutoGineer overview, from the brain’s own files

IWE provides a shared workspace for humans and AI agents to collaborate on project documentation, specs, and decision logs. By treating a folder of Markdown files as a structured knowledge graph, it allows agents to read, write, and organize information that persists across sessions. It functions as a memory server via the Model Context Protocol (MCP), enabling compatibility with various AI agents while remaining accessible to users through a native Mac app, CLI, or standard text editors like Neovim and VS Code.

How it works

Memory model: Not stated

AutoGineer overview, from the brain’s own files

IWE organizes notes as a collection of Markdown files within a project folder. It uses a CLI and an MCP server to expose these files to AI agents, allowing them to perform operations like searching, creating, and updating notes. The system supports features such as backlinks, link autocomplete, and graph visualization, ensuring that both the user and the AI agent interact with the same underlying document structure.

Folders
FolderRoleFiles
.githubagent-config4
docsdocs70
.githooksfolder1
cratesfolder381
npmfolder15

Requirements

Runtimes: Rust

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Google Antigravity, Kiro, OpenCode, Amp, Roo Code, Cline, JetBrains Junie, Devin (ex-Windsurf)

Set it up

  1. This brain runs code automatically: 1 script. Review .githooks/pre-commit before opening the folder in Claude Code. No step below turns a hook on for you.

    • .githooks/pre-commit: runs on git pre-commit
  2. Not scanned by AutoGineerAutoGineer could not scan everything it runs. https://www.npmjs.com/package/@iwe-org/mcp
  3. Created by IWE. Published in iwe-org/iwe. Licence: Apache License 2.0.

Usage

AutoGineer overview, from the brain’s own files

  • Connect an AI agent to your project notes using the MCP server.
  • Use the CLI to search, create, or reorganize notes from the terminal.
  • Write and browse notes in the native Mac app while an agent works alongside you.
  • Integrate note navigation and autocomplete into your preferred text editor.
  • Maintain a persistent record of project decisions and lessons learned that both you and your agent can access.
“Explore my IWE notes and summarize what's here.”
The agent reads the Markdown files in the designated folder and provides a summary of the project context, decisions, or documentation found.
“Save the decision we just made about the database schema.”
The agent creates or updates a Markdown note in the IWE folder containing the details of the decision for future reference.

Documentation by IWE

IWE: a Markdown knowledge base you and your AI agent work on together

English · 简体中文 · 한국어

Your notes are your agent’s memory. IWE is where you work on them together.

iwe.md · Download for Mac · Docs · Reddit

Image: Crates.io Image: License Image: Documentation

Too many AI conversations start from zero. You explain your project, your decisions, your reasoning — then find yourself explaining it all again next session. Your own notes live somewhere else, out of the agent's reach.

Or worse, the agent “remembers” something in its own internal memory, but you can't easily see what it saved or correct what it got wrong. And that memory doesn't travel with you to the other agents you work with.

IWE gives you and your AI agents one shared place to work, right inside your project: a folder of connected Markdown documents — specs, plans, decisions, and more. Keep your own ideas there, ask your agent to save what you learn together, and return to that context as your work grows. You can read, edit, and organize those documents yourself — and they stay yours.

<br/> <p align="center"> <a href="https://www.youtube.com/watch?v=D58bPkOvbxE"> <img src="https://iwe.md/images/video-thumbnail.jpg" alt="Watch the IWE intro video on YouTube" width="600"> </a> </p> <br/>

Choose how you work

There are four ways to work with IWE. Mix and match them to fit your day:

ToolHow you'll use it
iWe for MacWrite and browse in a native app, and connect your existing Claude/Codex agent.
Your own editorStay in Neovim, Helix, VS Code, or Zed, with note navigation, backlinks, and autocomplete.
CLISearch and manage your notes from the terminal or scripts.
Claude/CodexLet your agent read, write, and organize memory while you work through conversation.

All four work with the same Markdown documents. Draft a spec in your editor, develop it with Claude/Codex, browse it in the iWe app, or search it from the CLI. Use any combination you like; each tool also works independently.

Bring your own AI. Neither the IWE CLI nor the iWe Mac app includes an AI model. Both work on their own as tools for your notes. When you want AI help, use your existing Claude/Codex agent — in terminal or directly in the Mac app.

<a href="https://iwe.md/?ref=readme-shot"><img src="https://iwe.md/images/app/GH-screen-1.1.png" alt="iWe for Mac showing project plans and connected documents" width="820"></a>

<p> <a href="https://iwe.md/?ref=readme-shot"><img src="https://iwe.md/images/app/GH-screen-2.png" alt="Bug tracking with charts" width="32%"></a> <a href="https://iwe.md/?ref=readme-shot"><img src="https://iwe.md/images/app/GH-screen-3.png" alt="Technical documents with code" width="32%"></a> <a href="https://iwe.md/?ref=readme-shot"><img src="https://iwe.md/images/app/GH-screen-4.png" alt="Release documents" width="32%"></a> </p>

Plans · Charts · Technical documents · Releases — click a screenshot to see the iWe app in action on iwe.md.

Why IWE

  • Shared context. Your agent can use the same notes you write for yourself. Notes link to each other, and one note can belong to several topics, so you can follow an idea wherever it connects.

  • Memory you can read. Decisions and lessons saved by your agent are ordinary notes you can browse, correct, or delete.

  • Your notes stay yours. Everything is Markdown in a folder on your machine. Back it up, sync it, or keep it in git. You don't need an IWE cloud account to keep your notes; connecting an AI agent involves that agent's own setup and account requirements.

See it working on iwe.md →

iWe for Mac

If you'd like a dedicated space for your notes, use the native Mac app. Open a folder of notes and you get a fast, keyboard-friendly space to write and browse. You can also connect your existing Claude/Codex agent to work alongside you.

  • Works with your Claude/Codex agent. Connect the agent you already use, ask questions about your notes, and have it draft or reorganize them. Watch its edits appear in the document as it works.

  • Room to experiment. Each agent run is one undo step — try an idea, and roll it back if you don't like it.

  • Follow your ideas. Jump between related notes, search in a few keystrokes, and view Mermaid diagrams right in your documents. Your editor and other tools can keep working on the same files.

See iWe for Mac on iwe.md →

Open a notes folder and start with a note about something you're working on. Once Claude/Codex is connected, try asking it to summarize that note or help you develop an idea.

Your Own Editor

Keep writing in Neovim, Helix, VS Code, or Zed. IWE adds link autocomplete, backlinks, search, and safe renaming across your notes.

Follow the guide for your editor, open your notes folder, and try linking two notes with autocomplete. You can use IWE for your own writing without connecting an AI agent.

CLI

Prefer the terminal? Use IWE to search, create, and reorganize notes, or work it into your scripts. The CLI has no AI built in: these commands work on their own. Your existing Claude/Codex agent can use IWE's tools too.

Install with Homebrew, or choose another option from the installation guide:

brew install iwe-org/iwe/iwe

Then run these commands inside your notes folder:

iwe init
iwe find
iwe find --lexical "project decisions"

iwe find lists your notes; --lexical searches their content. Explore more in the CLI reference and workflow examples.

Claude/Codex

You can use IWE entirely through your agent. Ask Claude/Codex to save decisions, look up past work, and organize what you've learned. The agent works with your notes through IWE, and you can open those files yourself whenever you want.

IWE isn't tied to one AI. The same notes work with Claude Code, Claude Desktop, Codex, Gemini, Cursor, and any tool that supports the Model Context Protocol.

Give Claude/Codex a memory — for Claude Code, install the plugin, then run /iwe:init in any project you want remembered. For Codex, follow the agent connection steps below.

/plugin marketplace add iwe-org/skills
/plugin install iwe@iwe-org
/iwe:init

Then ask it to save a decision from your current work, and open the note it creates in your project.

Connect another agent — with Homebrew installed, install IWE:

brew install iwe-org/iwe/iwe

Run iwe init in your notes folder, then follow the agent connection guide to add the iwec MCP server with that folder as its working directory. For other installation options, see the installation guide.

Once connected, ask your agent: “Explore my IWE notes and summarize what's here.”

Or let the agent set itself up — paste this into any agent that can run commands:

Set up IWE for my notes: install it (brew install iwe-org/iwe/iwe,
npm install -g @iwe-org/iwe, or cargo install iwe iwes iwec), run `iwe init`
in my notes directory, then add the `iwec` MCP server with its working
directory set to that folder.
Docs: https://iwe.md/docs/agentic/

Learn More

Ready-made workspaces: dev-workspace — project memory for a coding agent · marketing-workspace — campaign memory for a marketing agent.

Get Involved

Trying IWE with your own notes? Tell us what felt useful and where you got stuck. Questions, rough edges, and examples of how you use it are all welcome in Discussions.

IWE is open source. You can also report a bug or help improve the documentation.

Community: Twitter/X · Reddit · Discussions

Building on IWE? The CLI and MCP server are the supported ways to integrate today. Tell us what you depend on so we know what not to break.

License

Apache License 2.0

docs/mcp.md

MCP Server

IWE provides an MCP (Model Context Protocol) server that gives AI agents direct access to your knowledge graph. The MCP server exposes the same operations as the CLI — search, retrieve, create, refactor — through a standardized protocol that AI tools can use natively.

Setup

You configure the server by pointing your AI tool to the iwec binary and setting the working directory to your knowledge graph. By default it communicates over stdio, which is what most editor and agent integrations expect.

Transport options

iwec accepts two flags that control how it serves the protocol:

FlagDefaultDescription
--transport <stdio|http>stdioServe over stdio, or over HTTP
--host <HOST>127.0.0.1Address to bind to (only used with --transport http)
--port <PORT>8000Port to listen on (only used with --transport http)

With --transport http the server listens for Streamable HTTP connections at http://<host>:<port>/mcp:

iwec --transport http --port 8000

By default the HTTP server binds to 127.0.0.1, so it only accepts connections from the local machine. To accept connections from other machines, bind to a reachable address:

iwec --transport http --host 0.0.0.0 --port 8000

The server speaks plain HTTP, so put a reverse proxy in front of it for TLS or authentication when exposing it beyond localhost.

Workspace and instructions
FlagDefaultDescription
--workspace <PATH>current directoryWorkspace to serve
--instructions <TEXT>noneText placed before the built-in instructions sent to the client
--instructions-file <PATH>noneSame as --instructions, but reads the text from a file

When several IWE servers are connected to one client, give each instructions that say what the workspace is for, so the agent picks the right one:

{
  "mcpServers": {
    "notes": {
      "command": "iwec",
      "args": [
        "--workspace", "/path/to/notes",
        "--instructions", "Personal notes. For engineering questions use the `docs` server."
      ]
    }
  }
}

For longer text, keep it in a file and pass --instructions-file /path/to/notes/.iwe/instructions.md instead. The two flags can't be used together.

Tools

The MCP server exposes 14 tools for reading, writing, querying, and refactoring documents.

Reading
ToolDescription
iwe_findSearch documents with fuzzy matching and relationship filters
iwe_retrieveFetch documents with search seeds and graph expansion
iwe_treeView hierarchical document structure
iwe_statsGet knowledge graph statistics and broken link reports
iwe_squashExpand block references into a single flat document
Writing
ToolDescription
iwe_createCreate a document at a key from a complete markdown document
iwe_updateReplace the full content of an existing document
iwe_deleteDelete a document and clean up all references
iwe_create

iwe_create takes the complete document and writes it verbatim — the server adds nothing and moves nothing.

{
  "key": "people/ada",
  "content": "---\ntype: person\ntags: [pioneer]\n---\n\n# Ada Lovelace\n\nFirst English computer programmer.\n",
  "if_exists": "fail"
}

→ { "key": "people/ada", "created": true }

ParameterDescription
keyRequired. The document's stable identity — draw it from metadata (an entity name, a session date), not the title wording. Subdirectory keys such as people/ada are allowed; omit the file extension.
contentRequired. Frontmatter block first (when there is one), then the markdown, normally starting with # Title.
if_exists"fail" (default) errors when the key is taken; "skip" leaves the existing document untouched and returns created: false, which makes retries idempotent.

Because content is the whole file, frontmatter belongs at its first byte — that is where other tools read it. There is no separate frontmatter parameter to place it for you, and nothing is inserted above or below what you send. iwe_update has the same contract, with the opposite existence precondition.

The template, variables and frontmatter parameters are reserved for a later template mode and are rejected today.

Stats warnings

A successful iwe_create, iwe_update, or iwe_query (update / delete) may carry stats warnings alongside its result — one warning content block per finding, of the form <key> › <rule>: <message>:

  • orphan — a page nothing links to (no inclusion or inline reference points at it). index pages (root index or any <dir>/index) are intentional entry points and are never reported as orphans.

  • dangling-link — a link whose target document does not exist.

  • similar-page — a just-authored page that is near-identical to another (only on create / update; see Detecting similar pages).

These warnings are advisory — nothing is ever blocked by them (schema validation remains the only hard reject). Each finding is reported once per session, so the first mutation surfaces the store's standing issues and later calls surface only what changed. Resolve reported warnings before ending the session; each carries the fix in its message.

The per-document iwe_stats result (call iwe_stats with a key) also carries a similarPages array — other documents near-identical to that page.

Query
ToolDescription
iwe_queryRun a Query Language operation document verbatim

iwe_query takes an operation kind (find, count, update, or delete) and the operation document as a YAML string, plus an optional dry_run for the mutating kinds. It exposes the full query surface: frontmatter and graph filters, the $content block-membership operator, the search stage on find (search: { lexical, fuzzy }), the $content / $blocks / $matches projection sources, and the block update operators ($replace, $replaceText, $insertBefore, $insertAfter, $append, $delete). find and count read; update applies frontmatter and block edits atomically per document; delete removes documents with reference cleanup.

The tool is always strict: every mutating application must carry an expect guard — the document-level expect on update / delete, plus one per block operator — or the operation is refused with the missing guards named. Use find with $blocks / $matches to locate targets and learn the counts before mutating. See Strict mode.

iwe_retrieve search and expansion

iwe_retrieve assembles reading context in one call. Beyond the selector parameters and token budgets, it accepts:

ParameterDescription
searchBM25 full-text seed query (lexical). Present → the tool searches the candidate set (keys / selector) and reads the ordered seeds.
fuzzyFuzzy seed query on title + key. Combine with search to fuse (RRF).
expandObject over includes / includedBy / references / referencedBy → integer depths (0 = unbounded, omitted key = not followed). Follows those edges out from each seed. Expansion is doc-only when omitted.
limitCap the number of seed documents kept before expansion — top-N by relevance when searching, the first N of the selection otherwise (0 = unlimited).
max_documentsCap the number of documents returned after expansion, trimming periphery documents first (0 = unlimited).

Output is seeds first (relevance order), then expansion. The edge-list toggles (backlinks, children) are unchanged. The pre-existing depth, context, and links parameters are deprecated aliases for expand's includes / includedBy / references; passing expand together with any of them is an error.

Refactoring
ToolDescription
iwe_renameRename a document key with automatic link updates
iwe_extractExtract a section into a new document with block reference
iwe_inlineReplace a block reference with the referenced content
iwe_normalizeRe-format all documents for consistent formatting
iwe_attachAttach a document to a target using configured actions

All write and refactoring tools support a dry_run parameter to preview changes before applying them. Schema validation still runs under dry_run, so a preview is rejected exactly when the real call would be.

Selector parameters

iwe_find, iwe_retrieve, and iwe_tree accept a structural selector embedded in their tool input: in, in_any, not_in, and max_depth. Each entry is either a bare key or { key, depth }. These are a convenience for the most common selection patterns; the full query surface — --filter-style documents, $-prefixed graph operators, block predicates, frontmatter and block mutation — is iwe_query, documented in the Query Language reference.

Unknown keys

keys on iwe_retrieve and iwe_tree, and key on every single-document tool and on the review / refactor prompts, name documents: an unknown key is an invalid_params error that lists every missing key. Selector anchors, exclude, and keys used as the candidate set for search / fuzzy are filters and may match nothing. See Named Keys vs Filters.

Prompts

The server provides three built-in prompts that guide AI agents through common workflows:

PromptDescription
exploreGet an overview of the knowledge graph with key statistics
reviewReview a specific document with full context
refactorAnalyze a document and suggest restructuring operations

Resources

The server exposes knowledge graph data as MCP resources:

URIDescription
iwe://documents/{key}Individual document content
iwe://treeFull hierarchical document tree
iwe://statsAggregate knowledge graph statistics
iwe://configConfiguration with templates and actions

File watching

The MCP server watches the knowledge graph directory for changes. When you edit markdown files in your editor, the server automatically updates its in-memory graph. There is no need to restart the server after making changes.

Consistency

  • Each tool call works on the graph in one step. Writes run one at a time; reads run alongside each other but never alongside a write, including updates from the file watcher. A read that arrives while a write is waiting runs after that write.

  • A call that starts after an MCP write returned sees that write. A multi-file operation (rename, delete, extract, inline, attach, query update or delete) that succeeds becomes visible as a whole.

  • A call runs to completion even if the client cancels it.

  • If writing files fails, the tool returns an error. Some files may already be changed; the server re-reads every note the call touched, so the graph shows what reached disk.

  • Edits made outside the server (CLI, editor, git) are picked up by the file watcher shortly after, with no ordering across files. A note that another program is still writing can briefly appear incomplete until its next change event. Hidden and gitignored files are not watched.

  • Clients that need to share one graph should connect to a single --transport http server: all its sessions share one graph. With stdio each client starts its own server with its own graph.

  • A sequence of calls is not a transaction. To publish several related notes, write the new notes first, then one note that points to them.

485 files · 414 not served here

Advantages

  • Shared context allows agents to access and build upon the same notes written by the user. evidence: README.md
  • Memory is stored as human-readable Markdown files that can be easily browsed, corrected, or deleted. evidence: README.md
  • Data remains under user control in local folders, avoiding dependency on proprietary cloud storage. evidence: README.md

Limitations

  • Requires manual setup of the MCP server or CLI tools to enable agent connectivity. evidence: README.md
  • The system does not include an AI model, requiring the user to bring their own agent. evidence: README.md

Security

Risk level: Low risk

This brain runs

Git hooks (1)

  • .githooks/pre-commit (pre-commit): runs on git pre-commit
  • Low risk: scripts-present (.githooks/pre-commit)

Attribution and licence

Created by
IWE
Publisher
IWE (Official IWE project)
Source
iwe-org/iwe · commit b733afe
Licence
Apache License 2.0 (files served here)
  • ATTRIBUTION.md (written by AutoGineer)
Synced

AutoGineer is not affiliated with or endorsed by IWE.

Install from source

414 of its files are not served here, so there is no ZIP. iwe-org/iwe at b733afe