mnemos-capture 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +315 -223
- package/dist/cli/config.js +34 -15
- package/dist/cli/hooks.js +3 -3
- package/dist/cli/index.js +22 -20
- package/dist/cli/kos.js +8 -8
- package/dist/cli/mcp-server.js +68 -33
- package/dist/cli/version-check.js +1 -1
- package/package.json +18 -10
- package/dist/cli/__tests__/config.test.js +0 -49
- package/dist/cli/__tests__/hooks.test.js +0 -276
- package/dist/cli/__tests__/kos.test.js +0 -65
package/README.md
CHANGED
|
@@ -1,347 +1,439 @@
|
|
|
1
|
-
<
|
|
2
|
-
<
|
|
3
|
-
|
|
1
|
+
<div align="center">
|
|
2
|
+
<br>
|
|
3
|
+
<a href="https://mnemos-capture.vercel.app">
|
|
4
|
+
<picture>
|
|
5
|
+
<source media="(prefers-color-scheme: dark)" srcset="public/mnemos-hero-dark.gif">
|
|
6
|
+
<img src="public/mnemos-hero-light.gif" width="160" height="160" alt="Xmu">
|
|
7
|
+
</picture>
|
|
8
|
+
</a>
|
|
9
|
+
<br>
|
|
10
|
+
<br>
|
|
11
|
+
<p>
|
|
12
|
+
<a href="https://www.npmjs.com/package/mnemos-capture"><img src="https://img.shields.io/npm/v/mnemos-capture?color=1c74d8&labelColor=000820&style=flat" alt="npm" /></a>
|
|
13
|
+
<img src="https://img.shields.io/badge/MCP-compatible-9dd8f5?labelColor=000820&style=flat" alt="MCP" />
|
|
14
|
+
<img src="https://img.shields.io/badge/license-MIT-f0f4f8?labelColor=000820&style=flat" alt="MIT" />
|
|
15
|
+
</p>
|
|
16
|
+
</div>
|
|
17
|
+
|
|
18
|
+
## Xmu
|
|
19
|
+
|
|
20
|
+
Humans are constantly exposed to useful knowledge, domain expertise, and external input. But there is no bridge between what humans know and what their AI workers know and do.
|
|
21
|
+
|
|
22
|
+
Xmu is the knowledge graph for AI workers that bridges human knowledge into context they can use.
|
|
23
|
+
|
|
24
|
+
## Table of Contents
|
|
25
|
+
|
|
26
|
+
- [Xmu](#xmu)
|
|
27
|
+
- [How it works](#how-it-works)
|
|
28
|
+
- [Start here](#start-here)
|
|
29
|
+
- [Connect your AI workers](#connect-your-ai-workers)
|
|
30
|
+
- [On the web](#on-the-web)
|
|
31
|
+
- [Claude](#claude)
|
|
32
|
+
- [ChatGPT](#chatgpt)
|
|
33
|
+
- [Grok](#grok)
|
|
34
|
+
- [In the terminal](#in-the-terminal)
|
|
35
|
+
- [Cursor](#cursor)
|
|
36
|
+
- [VS Code](#vs-code)
|
|
37
|
+
- [Codex](#codex)
|
|
38
|
+
- [Gemini CLI](#gemini-cli)
|
|
39
|
+
- [Claude Code](#claude-code)
|
|
40
|
+
- [Claude Desktop](#claude-desktop)
|
|
41
|
+
- [Anything MCP](#anything-mcp)
|
|
42
|
+
- [Workflow](#workflow)
|
|
43
|
+
- [What's inside](#whats-inside)
|
|
44
|
+
- [Your context stays in GitHub](#your-context-stays-in-github)
|
|
45
|
+
- [CLI](#cli)
|
|
46
|
+
- [Roadmap](#roadmap)
|
|
47
|
+
- [License](#license)
|
|
4
48
|
|
|
5
|
-
|
|
49
|
+
## How it works
|
|
6
50
|
|
|
7
|
-
|
|
8
|
-
<img src="https://img.shields.io/npm/v/mnemos-capture" alt="npm" />
|
|
9
|
-
<img src="https://img.shields.io/badge/license-MIT-blue" alt="License" />
|
|
10
|
-
<img src="https://img.shields.io/badge/MCP-compatible-green" alt="MCP" />
|
|
11
|
-
</p>
|
|
51
|
+
You find useful stuff, you capture through the web app, then Xmu connects it into a knowledge graph, and makes it available to the AI workers you already use.
|
|
12
52
|
|
|
13
|
-
|
|
53
|
+
Xmu will continuously compound that knowledge over time — keeping AI workers' context up to date as human knowledge evolves.
|
|
14
54
|
|
|
15
|
-
|
|
55
|
+
> [!IMPORTANT]
|
|
56
|
+
> We are migrating from **mnemos** to **Xmu**. The app URL, this GitHub repo, and the npm package still say `mnemos-capture`. Sorry for the inconvenience.
|
|
16
57
|
|
|
17
|
-
|
|
58
|
+
## Start here
|
|
18
59
|
|
|
19
|
-
|
|
60
|
+
You do not need a terminal to start.
|
|
20
61
|
|
|
21
|
-
|
|
62
|
+
### 1. Create your account
|
|
22
63
|
|
|
64
|
+
Open **[mnemos-capture.vercel.app](https://mnemos-capture.vercel.app)** and sign in with GitHub.
|
|
23
65
|
|
|
24
|
-
|
|
66
|
+
Xmu will:
|
|
25
67
|
|
|
26
|
-
|
|
68
|
+
1. Create a **private** GitHub repo for your knowledge (you can opt to make it public)
|
|
69
|
+
2. Ask for your LLM provider API key — Anthropic, OpenAI, or Google. Your key, your cost.
|
|
70
|
+
3. Let you set a PIN (6+ characters) for quick unlock on this device
|
|
71
|
+
4. Show your **Xmu API key** once — save it if you want to connect an AI worker
|
|
27
72
|
|
|
28
|
-
|
|
73
|
+
That's the whole setup. No repo to clone. No database. No CLI required.
|
|
29
74
|
|
|
30
|
-
|
|
75
|
+
### 2. Capture something
|
|
31
76
|
|
|
32
|
-
|
|
33
|
-
- Ask for your API key (your provider, your key — Mnemos never pays for your API calls)
|
|
34
|
-
- Set a PIN so you can unlock the app quickly on mobile
|
|
77
|
+
In the app, paste a URL, a note, a doc excerpt, a transcript, or an idea, then hit **Capture**.
|
|
35
78
|
|
|
36
|
-
|
|
79
|
+
Xmu extracts the **core idea**, **key takeaways**, **where to apply it**, and the **capture type**, then commits Markdown to your GitHub repo.
|
|
37
80
|
|
|
38
|
-
|
|
81
|
+
On a phone: open the app → **Share → Add to Home Screen**. It runs like a native app.
|
|
39
82
|
|
|
40
|
-
|
|
83
|
+
### 3. Connect a worker (optional)
|
|
41
84
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
85
|
+
Skip this if you only want the app today. When you're ready, pick your tool under [Connect your AI workers](#connect-your-ai-workers). Capture now, connect later — the knowledge is already in your repo.
|
|
86
|
+
|
|
87
|
+
## Connect your AI workers
|
|
88
|
+
|
|
89
|
+
Xmu is LLM-agnostic. Any worker that speaks MCP can use the same knowledge.
|
|
90
|
+
|
|
91
|
+
Two primitives:
|
|
92
|
+
|
|
93
|
+
```text
|
|
94
|
+
https://mnemos-capture.vercel.app/api/mcp
|
|
45
95
|
```
|
|
46
96
|
|
|
47
|
-
**Any MCP-compatible client** (Cursor, Continue, Gemini CLI, etc.) — point it at the stdio proxy:
|
|
48
97
|
```bash
|
|
49
|
-
npx -y mnemos-capture@latest serve-mcp --key
|
|
98
|
+
npx -y mnemos-capture@latest serve-mcp --key YOUR_API_KEY
|
|
50
99
|
```
|
|
51
100
|
|
|
52
|
-
The
|
|
101
|
+
The CLI binary is **`xmu`** (also `mnemos-capture`). `npx` still uses the package name until a standalone `xmu` package ships. An MCP server already registered as `mnemos` keeps working.
|
|
53
102
|
|
|
54
|
-
|
|
103
|
+
**On the web** — paste the URL (no terminal). **In the terminal** — run the command. Finish Xmu onboarding first, then ask: *list my inbox* or *brief me*.
|
|
55
104
|
|
|
56
|
-
|
|
105
|
+
### On the web
|
|
57
106
|
|
|
58
|
-
|
|
59
|
-
capture "The Mom Test — don't ask if your idea is good, ask about their life."
|
|
60
|
-
```
|
|
107
|
+
Name the connector `Xmu`, paste `https://mnemos-capture.vercel.app/api/mcp`, sign in with GitHub when asked.
|
|
61
108
|
|
|
62
|
-
|
|
109
|
+
#### Claude
|
|
63
110
|
|
|
111
|
+
1. Settings → Connectors → Add custom connector
|
|
64
112
|
|
|
65
|
-
|
|
113
|
+
#### ChatGPT
|
|
66
114
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
C -->|session start| D["Briefing\nranked suggestions + plan"]
|
|
72
|
-
D -->|generate_plan| E["Implementation plan\nsaved to plans/"]
|
|
73
|
-
E -->|mnemos kos| F["Your AI assistant\nexecutes in isolated worktree"]
|
|
74
|
-
F -->|verify| G["Branch ready\nto review & merge"]
|
|
75
|
-
|
|
76
|
-
style A fill:#1a1a2e,stroke:#444,color:#fff
|
|
77
|
-
style B fill:#2A62C6,stroke:#1a4a9e,color:#fff
|
|
78
|
-
style C fill:#2d8a4e,stroke:#1e6b3a,color:#fff
|
|
79
|
-
style D fill:#d4a843,stroke:#b8912e,color:#fff
|
|
80
|
-
style E fill:#2A62C6,stroke:#1a4a9e,color:#fff
|
|
81
|
-
style F fill:#1a1a2e,stroke:#444,color:#fff
|
|
82
|
-
style G fill:#2d8a4e,stroke:#1e6b3a,color:#fff
|
|
83
|
-
```
|
|
115
|
+
1. Settings → Plugins → Browse plugins
|
|
116
|
+
2. Name it Xmu
|
|
117
|
+
3. Paste `https://mnemos-capture.vercel.app/api/mcp`
|
|
118
|
+
4. Sign in with GitHub when asked
|
|
84
119
|
|
|
85
|
-
|
|
86
|
-
2. **Brief** — at session start, the `--briefing` flag sends your project context (branch, recent commits, CLAUDE.md) to Mnemos. It returns ranked suggestions — *why* each insight matters now, *what* applying it achieves, *where* in your codebase.
|
|
87
|
-
3. **Plan** — `generate_plan` reads your selected captures and produces a structured Markdown plan: Codebase Mapping table, per-file steps with effort tiers (`simple` / `complex` / `architectural`), and a Verification Checklist.
|
|
88
|
-
4. **Execute** — `mnemos kos` (coming) creates an isolated git worktree, launches your configured AI assistant with the plan as its contract, and runs the verification checklist when it's done.
|
|
120
|
+
#### Grok
|
|
89
121
|
|
|
122
|
+
1. Open [grok.com/connectors](https://grok.com/connectors) → New Connector → Custom
|
|
90
123
|
|
|
91
|
-
|
|
124
|
+
### In the terminal
|
|
92
125
|
|
|
93
|
-
|
|
126
|
+
The same command works in every CLI — Cursor, Codex, Gemini CLI, VS Code, Claude Code, or anything that can launch a local MCP server:
|
|
94
127
|
|
|
95
|
-
|
|
96
|
-
-
|
|
97
|
-
|
|
98
|
-
- **Optimization techniques** — prompt engineering, caching strategies, latency improvements
|
|
99
|
-
- **Your own ideas** — architecture decisions, workflow changes, things you want your agents to act on later
|
|
100
|
-
- **Transcripts and talks** — signal extracted, ready to apply
|
|
128
|
+
```bash
|
|
129
|
+
npx -y mnemos-capture@latest serve-mcp --key YOUR_API_KEY
|
|
130
|
+
```
|
|
101
131
|
|
|
132
|
+
Register that command in the tool you use.
|
|
102
133
|
|
|
103
|
-
|
|
134
|
+
#### Cursor
|
|
104
135
|
|
|
105
|
-
|
|
136
|
+
Add this to `.cursor/mcp.json` (project) or `~/.cursor/mcp.json` (all projects):
|
|
106
137
|
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
---
|
|
138
|
+
```json
|
|
139
|
+
{
|
|
140
|
+
"mcpServers": {
|
|
141
|
+
"xmu": {
|
|
142
|
+
"command": "npx",
|
|
143
|
+
"args": ["-y", "mnemos-capture@latest", "serve-mcp", "--key", "YOUR_API_KEY"]
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
```
|
|
118
148
|
|
|
119
|
-
|
|
149
|
+
Or Cursor Settings → MCP → Add new MCP server, same command.
|
|
120
150
|
|
|
121
|
-
|
|
122
|
-
Opaque error messages make every fix a guess. Adding source context to every
|
|
123
|
-
error — which handler, which step, which input — turns debugging from archaeology
|
|
124
|
-
into a directed search.
|
|
151
|
+
#### VS Code
|
|
125
152
|
|
|
126
|
-
|
|
127
|
-
- Every catch block should prefix messages with where it came from
|
|
128
|
-
- "The string did not match the expected pattern" is useless; "[github-write] ..." is actionable
|
|
129
|
-
- Instrument before you fix — opaque errors cause repeated misdiagnoses
|
|
153
|
+
Add this to `.vscode/mcp.json`:
|
|
130
154
|
|
|
131
|
-
|
|
132
|
-
|
|
155
|
+
```json
|
|
156
|
+
{
|
|
157
|
+
"servers": {
|
|
158
|
+
"xmu": {
|
|
159
|
+
"command": "npx",
|
|
160
|
+
"args": ["-y", "mnemos-capture@latest", "serve-mcp", "--key", "YOUR_API_KEY"]
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
133
164
|
```
|
|
134
165
|
|
|
135
|
-
|
|
166
|
+
GitHub Copilot Chat in VS Code uses the same file.
|
|
136
167
|
|
|
168
|
+
#### Codex
|
|
137
169
|
|
|
138
|
-
|
|
170
|
+
Codex CLI — add this to `~/.codex/config.toml`:
|
|
139
171
|
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
▼
|
|
145
|
-
┌─────────┐ ┌──────────┐
|
|
146
|
-
│ Inbox │────▶│ Applied │ Insight used — plan executed, rule added, code changed
|
|
147
|
-
└────┬─────┘ └──────────┘
|
|
148
|
-
│
|
|
149
|
-
├──────────▶┌──────────┐
|
|
150
|
-
│ │ Archived │ Reviewed, not actionable right now
|
|
151
|
-
│ └──────────┘
|
|
152
|
-
│
|
|
153
|
-
└──────────▶┌──────────┐
|
|
154
|
-
│ Deleted │ Not useful, permanently removed
|
|
155
|
-
└──────────┘
|
|
172
|
+
```toml
|
|
173
|
+
[mcp_servers.xmu]
|
|
174
|
+
command = "npx"
|
|
175
|
+
args = ["-y", "mnemos-capture@latest", "serve-mcp", "--key", "YOUR_API_KEY"]
|
|
156
176
|
```
|
|
157
177
|
|
|
158
|
-
|
|
178
|
+
Codex App: Settings → MCP → add the same `npx` command.
|
|
159
179
|
|
|
180
|
+
#### Gemini CLI
|
|
160
181
|
|
|
161
|
-
|
|
182
|
+
```bash
|
|
183
|
+
gemini mcp add xmu npx -y mnemos-capture@latest serve-mcp --key YOUR_API_KEY
|
|
184
|
+
```
|
|
162
185
|
|
|
163
|
-
|
|
186
|
+
#### Claude Code
|
|
164
187
|
|
|
165
|
-
```
|
|
166
|
-
|
|
188
|
+
```bash
|
|
189
|
+
claude mcp add xmu -- npx -y mnemos-capture@latest serve-mcp --key YOUR_API_KEY
|
|
167
190
|
```
|
|
168
191
|
|
|
169
|
-
|
|
192
|
+
Or the URL, no API key:
|
|
170
193
|
|
|
171
|
-
|
|
194
|
+
```bash
|
|
195
|
+
claude mcp add --transport http xmu https://mnemos-capture.vercel.app/api/mcp
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
Optional session hooks (MCP works without them):
|
|
172
199
|
|
|
173
200
|
```bash
|
|
174
|
-
npx -y mnemos-capture@latest setup-hooks --key
|
|
201
|
+
npx -y mnemos-capture@latest setup-hooks --key YOUR_API_KEY --briefing --vault
|
|
175
202
|
```
|
|
176
203
|
|
|
177
|
-
|
|
204
|
+
Hooks are local files — they run in the CLI and editor extensions, not in the browser.
|
|
205
|
+
|
|
206
|
+
#### Claude Desktop
|
|
178
207
|
|
|
179
|
-
|
|
180
|
-
2. Relevant synthesized rules
|
|
181
|
-
3. A `generate_plan` prompt pre-loaded with the captures to apply
|
|
208
|
+
Settings → Developer → Edit Config. Add the same `npx` block to `claude_desktop_config.json`, then fully restart:
|
|
182
209
|
|
|
210
|
+
```json
|
|
211
|
+
{
|
|
212
|
+
"mcpServers": {
|
|
213
|
+
"xmu": {
|
|
214
|
+
"command": "npx",
|
|
215
|
+
"args": ["-y", "mnemos-capture@latest", "serve-mcp", "--key", "YOUR_API_KEY"]
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
183
219
|
```
|
|
184
|
-
3 insights to apply now:
|
|
185
220
|
|
|
186
|
-
|
|
187
|
-
Why: Your current branch rewrites the capture pipeline and all catch blocks are opaque
|
|
188
|
-
Benefit: Every error will identify its source in < 1 line
|
|
221
|
+
#### Anything MCP
|
|
189
222
|
|
|
190
|
-
|
|
223
|
+
If the tool can launch a local process, register the same `npx` command. If it has **custom connectors** instead, paste the URL (that's the [web](#on-the-web) path).
|
|
224
|
+
|
|
225
|
+
```json
|
|
226
|
+
{
|
|
227
|
+
"mcpServers": {
|
|
228
|
+
"xmu": {
|
|
229
|
+
"command": "npx",
|
|
230
|
+
"args": ["-y", "mnemos-capture@latest", "serve-mcp", "--key", "YOUR_API_KEY"]
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
191
234
|
```
|
|
192
235
|
|
|
193
|
-
|
|
236
|
+
No MCP support yet? Capture in the [Xmu app](https://mnemos-capture.vercel.app) and connect later.
|
|
194
237
|
|
|
195
|
-
|
|
238
|
+
## Workflow
|
|
196
239
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
240
|
+
<p align="center">
|
|
241
|
+
<img src="public/flow-workflow.svg" width="720" alt="Docs and notes → Capture → GitHub Markdown → Brief → Plan → Execute → Mark applied" />
|
|
242
|
+
</p>
|
|
200
243
|
|
|
201
|
-
|
|
244
|
+
1. **Capture** — Paste anything text-based: papers, docs, posts, GitHub repos, notes, decisions, ideas, transcripts. Xmu detects a URL, a short note, or longer text. No manual tagging.
|
|
202
245
|
|
|
203
|
-
|
|
246
|
+
From a connected worker:
|
|
204
247
|
|
|
205
|
-
|
|
248
|
+
```text
|
|
249
|
+
capture "The Mom Test: don't ask if your idea is good. Ask about the person's real behavior, current workflow, and past spending."
|
|
250
|
+
```
|
|
206
251
|
|
|
207
|
-
|
|
208
|
-
|---|---|
|
|
209
|
-
| Claude Code CLI, VS Code / JetBrains extensions, desktop app | Yes |
|
|
210
|
-
| Claude Code on the web | No — `~/.claude/settings.json` is local only |
|
|
211
|
-
| Cursor / other MCP clients | No — distinct hook systems |
|
|
252
|
+
2. **Brief** — At the start of a work session, ask your worker for a briefing. Xmu looks at your project (branch, recent commits, `CLAUDE.md`, repo context) and ranks captures that could help now: **why** it matters, **what** applying it could achieve, **where** it could land. You decide what to apply.
|
|
212
253
|
|
|
213
|
-
|
|
254
|
+
3. **Plan** — Select the captures you want and ask your worker to call `generate_plan`. Each plan is Markdown: codebase mapping, implementation steps with effort tiers (`simple`, `complex`, `architectural`), and a verification checklist.
|
|
214
255
|
|
|
215
|
-
|
|
256
|
+
4. **Execute** — Hand the plan to your worker in the current session, or run it in an isolated git worktree:
|
|
216
257
|
|
|
258
|
+
```bash
|
|
259
|
+
npx -y mnemos-capture@latest config set agent "claude -p"
|
|
260
|
+
npx -y mnemos-capture@latest kos --key YOUR_API_KEY
|
|
261
|
+
```
|
|
217
262
|
|
|
218
|
-
|
|
263
|
+
`kos` creates a worktree, loads the plan as the contract, launches the assistant you configured, and prints the verification checklist when it finishes.
|
|
219
264
|
|
|
220
|
-
|
|
265
|
+
```bash
|
|
266
|
+
npx -y mnemos-capture@latest config set agent "codex exec"
|
|
267
|
+
```
|
|
221
268
|
|
|
222
|
-
###
|
|
269
|
+
### Example capture
|
|
223
270
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
271
|
+
```text
|
|
272
|
+
The Mom Test: don't ask if your idea is good. Ask about the person's real behavior, current workflow, and past spending.
|
|
273
|
+
```
|
|
227
274
|
|
|
228
|
-
|
|
275
|
+
```markdown
|
|
276
|
+
---
|
|
277
|
+
date: 2026-06-05
|
|
278
|
+
source: The Mom Test note
|
|
279
|
+
type: note
|
|
280
|
+
tags: customer-discovery, product, research
|
|
281
|
+
status: inbox
|
|
282
|
+
---
|
|
229
283
|
|
|
230
|
-
|
|
231
|
-
|------|-------------|
|
|
232
|
-
| `list_inbox` | Unprocessed captures with summaries — title, type, tags, core idea. |
|
|
233
|
-
| `search_captures` | Keyword + tag search across inbox, applied, and archived. |
|
|
234
|
-
| `read_capture` | Full Markdown of any capture. |
|
|
235
|
-
| `recall` | Semantic search — describe your task, get the most relevant captures back. More powerful than keyword search. |
|
|
284
|
+
# The Mom Test
|
|
236
285
|
|
|
237
|
-
|
|
286
|
+
## Core idea
|
|
238
287
|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
| `archive_capture` | Moves inbox → archived. Reviewed but not actionable now. |
|
|
243
|
-
| `delete_capture` | Permanently removes a capture and its index entry. |
|
|
244
|
-
| `apply_to_context` | Paste task + stack + code snippet → get concrete, file-level suggestions for applying your captured knowledge. |
|
|
288
|
+
Do not ask people to judge your idea. Ask about their real life,
|
|
289
|
+
recent behavior, current workaround, and what they have already
|
|
290
|
+
tried or paid for.
|
|
245
291
|
|
|
246
|
-
|
|
292
|
+
## Key takeaways
|
|
247
293
|
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
| `generate_plan` | Reads selected captures + optional codebase files → structured Markdown plan with Codebase Mapping table, effort tiers per step, and Verification Checklist. Saved to `plans/`. |
|
|
252
|
-
| `list_plans` | Lists saved plans, or reads a specific plan in full. |
|
|
294
|
+
- Avoid compliments and future promises
|
|
295
|
+
- Ask about specific past behavior
|
|
296
|
+
- Look for existing pain, workarounds, and spending
|
|
253
297
|
|
|
254
|
-
|
|
298
|
+
## Where to apply
|
|
255
299
|
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
| `get_rules` | Returns synthesized rules — filtered by tag or all. Use to populate `CLAUDE.md` or a system prompt. |
|
|
300
|
+
Discovery interview scripts, landing page tests, and product
|
|
301
|
+
validation prompts.
|
|
302
|
+
```
|
|
260
303
|
|
|
261
|
-
|
|
304
|
+
Plain Markdown in a repo you own. Readable, editable, versioned, portable.
|
|
262
305
|
|
|
263
|
-
|
|
264
|
-
|------|-------------|
|
|
265
|
-
| `curate` | Validates inbox captures: HEAD-checks URLs (404/410 → stale), flags low-confidence extractions. Optional `auto_archive`. Batch cap: 20 files. |
|
|
266
|
-
| `vault_scan` | Scans the full vault for captures relevant to your current activity (score ≥ 0.7). Used by the vault hook. |
|
|
306
|
+
## What's inside
|
|
267
307
|
|
|
308
|
+
You don't have to memorize these. Ask in plain language: "save this", "what do I have on payments?", "brief me for this repo".
|
|
309
|
+
|
|
310
|
+
| Tool | What it does |
|
|
311
|
+
| --- | --- |
|
|
312
|
+
| `capture` | Save new knowledge from pasted text or a URL |
|
|
313
|
+
| `list_inbox` | List captures waiting for review |
|
|
314
|
+
| `search_captures` | Keyword search across your captures |
|
|
315
|
+
| `read_capture` | Read a capture in full |
|
|
316
|
+
| `recall` | Find relevant context from a description of your task |
|
|
317
|
+
| `briefing` | Get project-specific recommendations |
|
|
318
|
+
| `generate_plan` | Turn selected captures into an implementation plan |
|
|
319
|
+
| `list_plans` | List or read saved plans |
|
|
320
|
+
| `apply_capture` | Mark a capture as applied |
|
|
321
|
+
| `archive_capture` | Archive a capture |
|
|
322
|
+
| `delete_capture` | Delete a capture |
|
|
323
|
+
| `apply_to_context` | Get file-level suggestions for the current task |
|
|
324
|
+
| `synthesize` | Combine related captures into reusable rules |
|
|
325
|
+
| `get_rules` | Retrieve those rules |
|
|
326
|
+
| `curate` | Review and clean up captures |
|
|
327
|
+
| `vault_scan` | Find relevant context for what you're about to edit |
|
|
268
328
|
|
|
269
329
|
## CLI
|
|
270
330
|
|
|
331
|
+
No global install required. The binary is **`xmu`** (also `mnemos-capture`). Via npx:
|
|
332
|
+
|
|
333
|
+
```bash
|
|
334
|
+
npx -y mnemos-capture@latest <command>
|
|
271
335
|
```
|
|
272
|
-
mnemos-capture Open hosted app
|
|
273
|
-
mnemos-capture serve-mcp --key KEY Run local MCP proxy (auto-installs hook)
|
|
274
|
-
mnemos-capture setup-hooks --key KEY [--briefing] [--vault] Install session hooks
|
|
275
|
-
mnemos-capture inbox-check --key KEY [--briefing] Debug what the hook runs
|
|
276
|
-
mnemos-capture vault-check --key KEY Debug what the vault hook runs
|
|
277
|
-
mnemos-capture help Show help
|
|
278
|
-
```
|
|
279
336
|
|
|
280
|
-
|
|
337
|
+
| Command | What it does |
|
|
338
|
+
| --- | --- |
|
|
339
|
+
| `npx -y mnemos-capture@latest` | Open the hosted app |
|
|
340
|
+
| `serve-mcp --key YOUR_API_KEY` | Run the local MCP proxy |
|
|
341
|
+
| `setup-hooks --key YOUR_API_KEY [--briefing] [--vault]` | Install Claude Code hooks |
|
|
342
|
+
| `config set agent "claude -p"` | Set which assistant `kos` should drive |
|
|
343
|
+
| `kos --key YOUR_API_KEY` | Implement the latest plan in an isolated worktree |
|
|
344
|
+
| `inbox-check --key YOUR_API_KEY [--briefing]` | Debug the session hook |
|
|
345
|
+
| `vault-check --key YOUR_API_KEY` | Debug the vault hook |
|
|
346
|
+
| `help` | Show help |
|
|
347
|
+
|
|
348
|
+
## Your context stays in GitHub
|
|
349
|
+
|
|
350
|
+
Captures live as structured Markdown in **your** GitHub repository. Private by default.
|
|
281
351
|
|
|
352
|
+
- **No lock-in** — clone it, move it, delete Xmu, keep the files
|
|
353
|
+
- **No proprietary format** — every capture is a readable `.md` file
|
|
354
|
+
- **No training on your data** — captures are sent only to the LLM provider you chose, with the key you supplied, to extract the insight you asked for
|
|
355
|
+
- **Any tool can read it** — anything that reads Git or speaks MCP
|
|
356
|
+
- **BYOK** — your provider, your key, your cost
|
|
357
|
+
- **Never commit your Xmu API key** to source control
|
|
282
358
|
|
|
283
|
-
|
|
359
|
+
### What Xmu stores, and where
|
|
284
360
|
|
|
285
|
-
|
|
361
|
+
The whole point of this repo being public is that you can check these claims rather than trust them.
|
|
286
362
|
|
|
363
|
+
**Your captures are never stored by Xmu.** They are written straight to your own GitHub repo as Markdown (`src/lib/github.ts`). There is no captures table. Delete the app and your knowledge is untouched.
|
|
287
364
|
|
|
288
|
-
|
|
365
|
+
**The database holds only account plumbing** (`src/lib/db.ts`):
|
|
289
366
|
|
|
290
|
-
|
|
367
|
+
| Stored | What it is |
|
|
368
|
+
| --- | --- |
|
|
369
|
+
| `github_id`, `github_username` | who you are |
|
|
370
|
+
| `github_token` | encrypted (`src/lib/crypto.ts`) |
|
|
371
|
+
| `github_repo` | the *name* of your hub, not its contents |
|
|
372
|
+
| `pin_hash` | salted scrypt (`src/lib/pin.ts`) |
|
|
373
|
+
| `api_key` | hashed — not recoverable |
|
|
374
|
+
| `llm_provider`, `llm_api_key` | encrypted |
|
|
375
|
+
| `token_version` | bumped to revoke everything |
|
|
376
|
+
| login attempts, OAuth clients/codes, refresh-token ids | auth plumbing |
|
|
291
377
|
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
378
|
+
When you capture, the server talks to exactly three kinds of destination:
|
|
379
|
+
|
|
380
|
+
1. **GitHub** — to write the capture into your repo
|
|
381
|
+
2. **Your LLM provider**, with *your* key — Anthropic, OpenAI, or Google
|
|
382
|
+
3. **The page you captured** — if you paste a bare URL, so the model reads real content. Only http/https, never an internal address
|
|
383
|
+
|
|
384
|
+
No analytics, no telemetry, no third-party tracking.
|
|
297
385
|
|
|
386
|
+
### How your credentials are stored
|
|
387
|
+
|
|
388
|
+
| Secret | How it's stored |
|
|
389
|
+
| --- | --- |
|
|
390
|
+
| GitHub token | Encrypted at rest (AES-256-GCM). Uses the `repo` scope, required to read and write a **private** knowledge hub |
|
|
391
|
+
| Your LLM API key | Encrypted at rest (AES-256-GCM) |
|
|
392
|
+
| Your MCP API key | Hashed — never recoverable, not even by Xmu |
|
|
393
|
+
| Your PIN | Salted scrypt hash |
|
|
394
|
+
|
|
395
|
+
Your MCP key is shown exactly once. If you lose it, generate a new one.
|
|
396
|
+
|
|
397
|
+
**PIN unlock is device-bound.** It only works on a device that has already signed in with GitHub. A PIN on its own is not enough to reach your account.
|
|
398
|
+
|
|
399
|
+
**Revoking access.** Generating a new MCP key invalidates the old key, every signed-in session, and every connected MCP client. Sessions also expire after 30 days.
|
|
298
400
|
|
|
299
401
|
## Cost
|
|
300
402
|
|
|
301
|
-
|
|
403
|
+
Xmu is BYOK. You bring your own API key. Xmu never charges you for inference.
|
|
302
404
|
|
|
303
|
-
Extraction runs on a fast, low-cost model (Claude Haiku 4.5 by default)
|
|
405
|
+
Extraction runs on a fast, low-cost model (Claude Haiku 4.5 by default):
|
|
304
406
|
|
|
305
407
|
| Usage | Estimated monthly cost |
|
|
306
|
-
|
|
408
|
+
| --- | --- |
|
|
307
409
|
| 50 captures/month | ~$0.15 |
|
|
308
410
|
| 100 captures/month | ~$0.30 |
|
|
309
411
|
| 200 captures/month | ~$0.60 |
|
|
310
412
|
|
|
311
|
-
Briefing and
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
## Tech stack
|
|
315
|
-
|
|
316
|
-
Next.js · TypeScript · Vercel Postgres · GitHub OAuth · GitHub Content API · MCP protocol · Anthropic SDK · Tailwind CSS · Vitest
|
|
317
|
-
|
|
413
|
+
Briefing, planning, and synthesis only run when you ask for them.
|
|
318
414
|
|
|
319
415
|
## Roadmap
|
|
320
416
|
|
|
321
|
-
-
|
|
322
|
-
- **
|
|
323
|
-
- **Chrome extension** —
|
|
324
|
-
- Voice memo capture
|
|
417
|
+
- **Learning Graph** — Applied work feeds the next brief. The graph compounds.
|
|
418
|
+
- **Knowledge Graph for Teams** — One graph the team and their AI workers share and compound.
|
|
419
|
+
- **Chrome extension** — Capture from the page you are on, without leaving the browser.
|
|
420
|
+
- **Voice memo** — Speak it. Xmu turns it into a capture.
|
|
325
421
|
|
|
422
|
+
Working on the code? See [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
326
423
|
|
|
327
|
-
##
|
|
328
|
-
|
|
329
|
-
[Sofía Padrón Valdez](https://github.com/Soph20) — builder, AI systems architect.
|
|
424
|
+
## License
|
|
330
425
|
|
|
426
|
+
[MIT License](./LICENSE)
|
|
331
427
|
|
|
332
|
-
|
|
428
|
+
If you use Xmu in published work:
|
|
333
429
|
|
|
334
|
-
```
|
|
430
|
+
```bibtex
|
|
335
431
|
@misc{2026mnemos,
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
432
|
+
title = {Xmu: A Knowledge Graph for AI workers},
|
|
433
|
+
author = {Sofia Padron Valdez},
|
|
434
|
+
year = 2026,
|
|
435
|
+
journal = {GitHub repository},
|
|
436
|
+
publisher = {GitHub},
|
|
437
|
+
howpublished = {\url{https://github.com/Soph20/mnemos-capture}}
|
|
438
|
+
}
|
|
343
439
|
```
|
|
344
|
-
|
|
345
|
-
## License
|
|
346
|
-
|
|
347
|
-
[MIT License - see LICENSE file for details](./LICENSE)
|