fastrmemory 0.4.0 → 0.5.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.
Files changed (38) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +2 -2
  3. package/.cursor/mcp.json +1 -1
  4. package/.cursor/skills/fastr-setup/SKILL.md +4 -4
  5. package/.cursor/skills/skills.json +1 -1
  6. package/README.md +72 -31
  7. package/dist/bin/fastr.js +9 -3
  8. package/dist/bin/fastr.js.map +1 -1
  9. package/dist/src/installer/mcp-command.d.ts +19 -0
  10. package/dist/src/installer/mcp-command.d.ts.map +1 -0
  11. package/dist/src/installer/mcp-command.js +57 -0
  12. package/dist/src/installer/mcp-command.js.map +1 -0
  13. package/dist/src/installer/mcp-init.d.ts +16 -0
  14. package/dist/src/installer/mcp-init.d.ts.map +1 -1
  15. package/dist/src/installer/mcp-init.js +32 -10
  16. package/dist/src/installer/mcp-init.js.map +1 -1
  17. package/dist/src/installer/setup.d.ts +1 -12
  18. package/dist/src/installer/setup.d.ts.map +1 -1
  19. package/dist/src/installer/setup.js +2 -31
  20. package/dist/src/installer/setup.js.map +1 -1
  21. package/dist/src/ui/server.d.ts.map +1 -1
  22. package/dist/src/ui/server.js +10 -0
  23. package/dist/src/ui/server.js.map +1 -1
  24. package/dist-ui/assets/{ActionsPage-B3quzFNF.js → ActionsPage-CI-IRMeS.js} +1 -1
  25. package/dist-ui/assets/{GraphPage-DetiATmC.js → GraphPage-BdYMF7yz.js} +1 -1
  26. package/dist-ui/assets/{ObservatoryPage-QIGMwENf.js → ObservatoryPage-BG_vg8B9.js} +1 -1
  27. package/dist-ui/assets/{TreemapPage-C7uLZd37.js → TreemapPage-CZreyyLA.js} +1 -1
  28. package/dist-ui/assets/index-Ca9pma3Q.css +1 -0
  29. package/dist-ui/assets/{index-DWAH--Fu.js → index-MlNuiu0T.js} +17 -17
  30. package/dist-ui/assets/{maximize-2-BebkGbZA.js → maximize-2-_nvSvCC7.js} +1 -1
  31. package/dist-ui/build-manifest.json +11 -11
  32. package/dist-ui/index.html +2 -2
  33. package/llms-install.md +3 -3
  34. package/package.json +1 -1
  35. package/server.json +1 -1
  36. package/skills/fastr-setup/SKILL.md +4 -4
  37. package/skills/skills.json +1 -1
  38. package/dist-ui/assets/index-BJnPINTu.css +0 -1
@@ -8,7 +8,7 @@
8
8
  "name": "fastrmemory",
9
9
  "source": "./",
10
10
  "description": "Local-first agent memory for Claude Code: MCP server plus Agent Skills for pre-edit trap checks, recall, trap logging, curation, and session handoffs.",
11
- "version": "0.4.0"
11
+ "version": "0.5.0"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fastrmemory",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "Local-first agent memory for Claude Code: MCP server plus Agent Skills for pre-edit trap checks, recall, trap logging, curation, and session handoffs.",
5
5
  "author": {
6
6
  "name": "Fastrsoft"
@@ -12,7 +12,7 @@
12
12
  "mcpServers": {
13
13
  "fastrmemory": {
14
14
  "command": "npx",
15
- "args": ["-y", "fastrmemory@0.4.0", "mcp"]
15
+ "args": ["-y", "fastrmemory@0.5.0", "mcp"]
16
16
  }
17
17
  }
18
18
  }
package/.cursor/mcp.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "command": "npx",
5
5
  "args": [
6
6
  "-y",
7
- "fastrmemory@0.3.1",
7
+ "fastrmemory@0.5.0",
8
8
  "mcp"
9
9
  ]
10
10
  }
@@ -14,7 +14,7 @@ allowed-tools: Bash(fastr *), Bash(fastrmemory *), Bash(npx -y fastrmemory*)
14
14
  ## 1. Project install (recommended)
15
15
  Run from the project root:
16
16
  ```bash
17
- npx -y fastrmemory@0.3.1 hook install
17
+ npx -y fastrmemory@0.5.0 hook install
18
18
  ```
19
19
  This is idempotent and backs up files it changes. It writes:
20
20
  - `.mcp.json`: a project-scoped `fastrmemory` MCP server.
@@ -25,13 +25,13 @@ Commit `.mcp.json` and `.claude/settings.json` so the team shares the setup. Res
25
25
 
26
26
  ## 2. Manual MCP registration (alternative)
27
27
  ```bash
28
- claude mcp add fastrmemory -- npx -y fastrmemory@0.3.1 mcp
28
+ claude mcp add fastrmemory -- npx -y fastrmemory@0.5.0 mcp
29
29
  ```
30
- On native Windows use `-- cmd /c npx -y fastrmemory@0.3.1 mcp`. Pass `--scope project` (before the name) to write `.mcp.json`. For a user-scoped registration (the default when `--scope project` is omitted), append `--project <absolute-project-path>` so the server does not use the client's launch directory; `fastr setup` writes that path automatically. This adds tools only, not hooks.
30
+ On native Windows use `-- cmd /c npx -y fastrmemory@0.5.0 mcp`. Pass `--scope project` (before the name) to write `.mcp.json`. For a user-scoped registration (the default when `--scope project` is omitted), append `--project <absolute-project-path>` so the server does not use the client's launch directory; `fastr setup` writes that path automatically. This adds tools only, not hooks.
31
31
 
32
32
  ## 3. Verify
33
33
  ```bash
34
- npx -y fastrmemory@0.3.1 status
34
+ npx -y fastrmemory@0.5.0 status
35
35
  claude mcp list
36
36
  ```
37
37
  `status` prints the project ID, memory counts, and database path (`.fastr/` under the project). Inside a session, call:
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://skills.sh/schema/v1.json",
3
3
  "name": "fastrmemory-skills",
4
- "version": "0.4.0",
4
+ "version": "0.5.0",
5
5
  "description": "Agent Skills that teach coding agents when to recall, log traps, curate, and commit FastrMemory.",
6
6
  "author": "Fastrsoft",
7
7
  "license": "Apache-2.0",
package/README.md CHANGED
@@ -10,11 +10,11 @@
10
10
  [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg?style=flat-square)](LICENSE)
11
11
  [![Node](https://img.shields.io/badge/Node-%3E%3D22.16.0-339933?style=flat-square&logo=node.js&logoColor=white)](https://nodejs.org)
12
12
  [![Protocol](https://img.shields.io/badge/Protocol-MCP%20v2-7C3AED?style=flat-square)](https://modelcontextprotocol.io)
13
- [![Tests](https://img.shields.io/badge/Tests-293%20Passed-brightgreen?style=flat-square)](tests/)
13
+ [![Tests](https://img.shields.io/badge/Tests-297%20Passed-brightgreen?style=flat-square)](tests/)
14
14
  [![MCP Setup](https://img.shields.io/badge/MCP%20Setup-fastr%20mcp%20init-7C3AED?style=flat-square)](#-one-click-agent-mcp-configuration)
15
15
  [![Architecture](https://img.shields.io/badge/Architecture-Zero--Daemon%20WAL-orange?style=flat-square)](#-architecture)
16
16
 
17
- > **Status (2026-10-23):** **`fastrmemory@0.3.1` is published and is `latest`; `0.4.0` is prepared on `main` and is not tagged or published.** Evidence for 0.3.1: `npm view fastrmemory version` -> `0.3.1`; `npm view fastrmemory dist-tags --json` -> `{"latest":"0.3.1"}`; tag `v0.3.1` (`3a3cac6`); published 2026-10-22 23:02 UTC via GitHub Actions OIDC with npm provenance; GitHub Release tarball SHA-256 `747f61791dcb7c5694f3cf5cc8705152892a5b16cb33bec51a356fc22112a7b8`; `npm install -g fastrmemory@0.3.1` + `fastr --version` -> `0.3.1`. Caveat: Node.js >=22.16.0; the npm README for 0.3.1 was rendered at the release tag and still labels 0.3.1 the release target; this post-release docs commit is not part of that render; `0.3.0` remains published historical. This release replaces the stale `0.3.0` npm README, fixes Windows MCP commands, pins user-scoped clients to the project root, and adds the Node runtime guard. The old scoped npm entries (`@atifjubaer/fastrmemory` and `fastrmemory@0.0.0-stage`) were removed on 2026-10-23; the GitHub `v0.2.1` tag and release remain as history. This README tracks current `main`; published release evidence remains **0.3.1**. Use the exact `0.3.1` version for reproducibility. `0.4.0` adds `fastr mcp init` and LF checkout enforcement; those changes are not in the published `0.3.1` tarball. Until `0.4.0` is published, `npx fastrmemory@latest mcp init` still resolves to `0.3.1` and does not include the command; use the source-checkout path in the MCP setup section. CI run `39879595191` at `098100e` (the 0.4.0 preparation commit) passed all six matrix jobs on 2026-10-23, including Windows Node `22.x` and `24.x`. The release post for 0.2.1 remains at [docs/blog/2026-10-21-fastrmemory-0.2.1.md](docs/blog/2026-10-21-fastrmemory-0.2.1.md). The exact release surface is in [CHANGELOG.md](CHANGELOG.md). The headline benchmark uses **240 deterministic synthetic cases with a 20% holdout**, not SWE-bench or LongMemEval. Public LongMemEval, LoCoMo, and self-repository retrieval-only results plus pinned external baselines are in [BENCHMARKS.md](BENCHMARKS.md); no QA-leaderboard parity is claimed. Performance, packaging, and retrieval claims are tracked in [CLAIMS.md](CLAIMS.md); every README section is mapped to claim IDs in the README claim trace at the end of that ledger. Methodology, caveats, and raw JSON are in [BENCHMARKS.md](BENCHMARKS.md).
17
+ > **Status (2026-10-23):** **`fastrmemory@0.4.0` is published and is `latest`.** Evidence: `npm view fastrmemory version` -> `0.4.0`; `npm view fastrmemory dist-tags --json` -> `{"latest":"0.4.0"}`; tag `v0.4.0` (`bb365c2`); published 2026-10-23 07:32 UTC via GitHub Actions OIDC with npm provenance; release workflow run `39918288792` passed the full gate, clean tarball install, registry verification, and GitHub Release upload; GitHub Release tarball SHA-256 `b784e3e12b8a50deaee3b38dbc1f45c756bc37462f2d40433fdda5288cf554ad`; `npm install -g fastrmemory@0.4.0` + `fastr --version` -> `0.4.0`; `npm audit signatures` reports 5 verified registry signatures and 4 verified attestations. Caveat: Node.js >=22.16.0; `0.3.1` remains published historical and `0.3.0` remains historical. This release adds `fastr mcp init` and LF checkout enforcement, with no schema migration. The old scoped npm entries (`@atifjubaer/fastrmemory` and `fastrmemory@0.0.0-stage`) were removed on 2026-10-23; the GitHub `v0.2.1` tag and release remain as history. This README tracks current `main`. Current `main` is **`0.5.0`** and adds `fastr mcp init --source local`; it has **297 tests / 53 files**. `0.5.0` is prepared but not yet published, so `--source local` remains unavailable from npm `latest` until the `v0.5.0` release workflow completes. Until then, use the exact `0.4.0` version for reproducibility. CI run `39935705994` at `6c2a53a` passed all six matrix jobs on 2026-10-23, including Windows Node `22.x` and `24.x`; the `0.4.0` release commit `bb365c2` passed run `39879913968`. The release post for 0.2.1 remains at [docs/blog/2026-10-21-fastrmemory-0.2.1.md](docs/blog/2026-10-21-fastrmemory-0.2.1.md). The exact release surface is in [CHANGELOG.md](CHANGELOG.md). The headline benchmark uses **240 deterministic synthetic cases with a 20% holdout**, not SWE-bench or LongMemEval. Public LongMemEval, LoCoMo, and self-repository retrieval-only results plus pinned external baselines are in [BENCHMARKS.md](BENCHMARKS.md); no QA-leaderboard parity is claimed. Performance, packaging, and retrieval claims are tracked in [CLAIMS.md](CLAIMS.md); every README section is mapped to claim IDs in the README claim trace at the end of that ledger. Methodology, caveats, and raw JSON are in [BENCHMARKS.md](BENCHMARKS.md).
18
18
 
19
19
  <p align="center">
20
20
  <a href="#-overview">Overview</a> &bull;
@@ -39,15 +39,15 @@
39
39
 
40
40
  | Claim | Current result | Evidence |
41
41
  |---|---|---|
42
- | Install path | Published `fastrmemory@0.3.1`; `0.4.0` prepared on `main`, not published | `npm view fastrmemory version` -> `0.3.1`; `npm view fastrmemory dist-tags --json` -> `{"latest":"0.3.1"}`; `npm install -g fastrmemory@0.3.1`; `fastr --version` -> `0.3.1`; GitHub Release tarball SHA-256 `747f6179...`; old scoped npm entries removed |
43
- | Synthetic retrieval | Holdout `95.8%` Hit@1, `100%` Hit@5, MRR `0.969` | `npx tsx scripts/eval-bench.ts --split all --embeddings minilm --out bench/results/minilm.json` |
44
- | Test suite | `293` tests across `53` files on current HEAD; published `0.3.1` is `282` / `52`; v0.2.1 is `235` / `43` | `npm test` |
45
- | MCP setup (0.4.0 prepared) | `fastr mcp init` merges portable configs for 9 JSON clients and prints a Codex TOML snippet | `npm test -- tests/mcp-init.test.ts` -> `11 passed`; `fastr mcp init --client claude --dry-run` |
42
+ | Install path | Published `fastrmemory@0.4.0` | `npm view fastrmemory version` -> `0.4.0`; `npm view fastrmemory dist-tags --json` -> `{"latest":"0.4.0"}`; `npm install -g fastrmemory@0.4.0`; `fastr --version` -> `0.4.0`; GitHub Release tarball SHA-256 `b784e3e1...`; old scoped npm entries removed |
43
+ | Synthetic retrieval (optional MiniLM) | Holdout `95.8%` Hit@1, `100%` Hit@5, MRR `0.969` | `npx tsx scripts/eval-bench.ts --split all --embeddings minilm --out bench/results/minilm.json` |
44
+ | Test suite | `297` tests across `53` files on current `main` (`0.5.0`); published `0.4.0` is `293` / `53`; `0.3.1` is `282` / `52`; v0.2.1 is `235` / `43` | `npm test`; `npm run check:ci` |
45
+ | MCP setup | `fastr mcp init` merges portable registry configs or active-CLI local configs for 9 JSON clients and prints a Codex TOML snippet; `--source local` ships in `0.5.0` (prepared; `0.4.0` remains published until `v0.5.0`) | `npm test -- tests/mcp-init.test.ts` -> `15 passed`; `fastr mcp init --client claude --source local --dry-run --json` -> `node .../dist/bin/fastr.js mcp --project ...` |
46
46
  | Crash safety | 10/10 runs, 0 lost, 0 duplicate ids/titles | `npm run test:crash`; `bench/results/crash-test.json` |
47
47
  | Public retrieval (0.3.0) | LongMemEval `+10.4pp` / `+11.0pp` Hit@5; LoCoMo `+4.4pp` / `+2.3pp` (target missed) | [docs/EXTERNAL_BASELINE.md](docs/EXTERNAL_BASELINE.md) |
48
48
  | Release score | Provisional `9.4 / 10`; `9.2` target met; Retrieval remains Partial | [SCORECARD.md](SCORECARD.md) |
49
49
 
50
- The synthetic table is not SWE-bench or LongMemEval. Public numbers are retrieval-only and are not QA-leaderboard results. Full provenance is in [CLAIMS.md](CLAIMS.md).
50
+ The synthetic table is not SWE-bench or LongMemEval. Public numbers are retrieval-only and are not QA-leaderboard results. The `95.8%` row uses optional MiniLM; the default offline hash path scores `77.1%` Hit@1 / `93.8%` Hit@5 on the same holdout. Full provenance is in [CLAIMS.md](CLAIMS.md).
51
51
 
52
52
  ---
53
53
 
@@ -110,42 +110,68 @@ Clients commonly used with FastrMemory include Codex CLI, Gemini CLI, OpenCode,
110
110
 
111
111
  ### ⚡ Run Without a Global Install
112
112
 
113
- The canonical package target is unscoped `fastrmemory@0.3.1`. `0.4.0` is prepared on `main` but is not published; keep using `0.3.1` for installs until the release workflow completes. The old scoped npm entries were removed on 2026-10-23.
113
+ The canonical package target is unscoped `fastrmemory@0.4.0`. `0.3.1` remains published historical. The old scoped npm entries were removed on 2026-10-23.
114
114
 
115
115
  ```bash
116
116
  # Canonical one-shot (pins the exact release):
117
- npx -y fastrmemory@0.3.1 setup
117
+ npx -y fastrmemory@0.4.0 setup
118
118
 
119
119
  # Or launch the local Web UI:
120
- npx -y fastrmemory@0.3.1 ui
120
+ npx -y fastrmemory@0.4.0 ui
121
121
  ```
122
122
 
123
- The GitHub source path remains available for development only: `npx github:atifjubaer/fastrmemory setup`. For a reproducible source install, pin the tag: `npx github:atifjubaer/fastrmemory#v0.3.1 setup`. The current `main` contains the unpublished `0.4.0` source. Do not use either GitHub form in generated MCP or hook configs; those must use the npm package. The default `latest` channel tracks new releases, and `--channel pinned` records the exact version for reproducibility.
123
+ The GitHub source path remains available for development only: `npx github:atifjubaer/fastrmemory setup`. For a reproducible source install, pin the tag: `npx github:atifjubaer/fastrmemory#v0.4.0 setup`. Do not use either GitHub form in generated MCP or hook configs; those must use the npm package. The default `latest` channel tracks new releases, and `--channel pinned` records the exact version for reproducibility.
124
124
 
125
125
  ---
126
126
 
127
127
  ### Install from npm
128
128
 
129
129
  ```bash
130
- # Canonical install (latest is 0.3.1):
130
+ # Canonical install (latest is 0.4.0):
131
131
  npm install -g fastrmemory
132
132
  fastr --version
133
133
 
134
134
  # Exact release:
135
- npm install -g fastrmemory@0.3.1
135
+ npm install -g fastrmemory@0.4.0
136
136
  ```
137
137
 
138
138
  For a one-shot run without a global install:
139
139
 
140
140
  ```bash
141
- npx -y fastrmemory@0.3.1 --version
141
+ npx -y fastrmemory@0.4.0 --version
142
142
  ```
143
143
 
144
- `0.3.1` is built from tag `v0.3.1` by `.github/workflows/release.yml`, which runs the full gate, publishes with npm provenance, and attaches the same tarball to the GitHub Release. Verify the registry result with `npm view fastrmemory@0.3.1 version` and `npm view fastrmemory dist-tags --json`; a first E404 for a few minutes is registry propagation, not a failed publish. The old scoped npm entries remain removed. Do not republish `0.3.0`. `0.4.0` is prepared on `main`; no tag `v0.4.0` and no npm publication exist as of 2026-10-23.
144
+ `0.4.0` is built from tag `v0.4.0` by `.github/workflows/release.yml`, which runs the full gate, publishes with npm provenance, and attaches the same tarball to the GitHub Release. Verify the registry result with `npm view fastrmemory@0.4.0 version` and `npm view fastrmemory dist-tags --json`; a first E404 for a few minutes is registry propagation, not a failed publish. The old scoped npm entries remain removed. Do not republish `0.3.0`. `0.3.1` remains published historical.
145
+
146
+ ### Update an Existing Install
147
+
148
+ Stop every agent, hook, `fastr ui`, and `fastr daemon` before changing versions. Run this from the project root:
149
+
150
+ ```bash
151
+ # 1. Back up memory before changing versions
152
+ fastr backup fastr-backup.jsonl
153
+ fastr backup --verify fastr-backup.jsonl
154
+
155
+ # 2. Update the global CLI
156
+ npm install -g fastrmemory@latest
157
+ fastr --version
158
+
159
+ # 3. Refresh project integration (choose what you use)
160
+ fastr mcp init --client all --scope project # portable npx configs only
161
+ fastr mcp init --client all --scope user --source local --profile core # installed CLI
162
+ fastr setup # MCP configs, AGENTS.md, and skills
163
+ fastr hook install # lifecycle hooks plus MCP for hook clients
164
+
165
+ # 4. Verify
166
+ fastr status
167
+ fastr hygiene
168
+ ```
169
+
170
+ `0.5.0` has no schema migration. If you use `--channel pinned`, rerun `fastr mcp init` after each update; with the default `latest` channel, restart the client to pick up the new release. If you use `--source local`, the config points at the installed CLI, so updating the global package updates the server without rewriting the config. `fastr setup` refreshes copied skills, overwrites same-named skill files, removes retired skills, and leaves user-owned directories. `fastr hook install` does not copy skills. See [MIGRATION.md](MIGRATION.md) for rollback.
145
171
 
146
172
  ### One-Command MCP Setup
147
173
 
148
- `fastr mcp init` is the shadcn-style setup path. It is config-only: it merges the `fastrmemory` MCP entry into an existing client config, preserves unrelated keys, writes a one-time `.fastr.bak` backup, and is idempotent. It does not install lifecycle hooks, skills, or the OpenCode plugin; use `fastr hook install` for those.
174
+ `fastr mcp init` is the shadcn-style setup path. It is config-only: it merges the `fastrmemory` MCP entry into an existing client config, preserves unrelated keys, writes a one-time `.fastr.bak` backup, and is idempotent. It does not install lifecycle hooks, skills, or the OpenCode plugin; use `fastr hook install` for hooks and the OpenCode plugin, and `fastr setup` for skills.
149
175
 
150
176
  ```bash
151
177
  # Claude Code (project-scoped .mcp.json)
@@ -175,31 +201,41 @@ yarn dlx fastrmemory@latest mcp init --client claude
175
201
  bunx fastrmemory@latest mcp init --client claude
176
202
  ```
177
203
 
178
- The default `--channel latest` writes `fastrmemory@latest`, so a client restart picks up the newest npm release. Use `--channel pinned` for a reproducible config containing the exact version that ran the command; on current `main` that writes `fastrmemory@0.4.0`, which is not installable from npm until the release publishes. `--runner pnpm|yarn|bunx` changes the generated runner, `--profile core` selects the 12-tool surface, `--dry-run` prints targets without writing, and `--scope user` writes user-level configs with an explicit `--project /absolute/path` so the server always opens the intended database. Codex prints a `[mcp_servers.fastrmemory]` TOML block for `~/.codex/config.toml` instead of rewriting a user-owned TOML file.
204
+ The default `--channel latest` writes `fastrmemory@latest`, so a client restart picks up the newest npm release. Use `--channel pinned` for a reproducible config containing the exact version that ran the command; on current `main` that writes `fastrmemory@0.5.0` (pending publication). `--runner pnpm|yarn|bunx` changes the generated runner, `--profile core` selects the 12-tool surface, `--dry-run` prints targets without writing, and `--scope user` writes user-level configs with an explicit `--project /absolute/path` so the server always opens the intended database. Codex prints a `[mcp_servers.fastrmemory]` TOML block for `~/.codex/config.toml` instead of rewriting a user-owned TOML file.
179
205
 
180
- > `mcp init` is prepared in `0.4.0` on `main`; `0.4.0` is not tagged or published as of 2026-10-23, and `npx fastrmemory@latest mcp init` still resolves to published `0.3.1`. Until `0.4.0` publishes, run the same commands from a source checkout (`npx --yes github:atifjubaer/fastrmemory#main mcp init ...`) or after `npm run build:core` with `node bin/fastr-guard.mjs mcp init ...`.
206
+ For a globally installed CLI, use `--source local` to write the active CLI path instead of an npx command. It always appends an absolute `--project`, so the config is machine-specific but starts without an npx cold start:
207
+
208
+ ```bash
209
+ fastr mcp init --client all --scope user --source local --profile core
210
+ ```
211
+
212
+ Updating the global package updates the server; rerun the command only if the CLI path changes. Use the default `--source registry` for portable project configs that are committed and shared across machines.
213
+
214
+ > `--source local` ships in `0.5.0`. Until the `v0.5.0` release workflow completes, published `0.4.0` remains the install target; use `fastr setup` on `0.4.0` for an installed-CLI config.
215
+
216
+ > `mcp init` ships in `0.4.0`; `npx fastrmemory@latest mcp init ...` now resolves to published `0.4.0`. If you need the previous release, use `fastr setup` or pin `fastrmemory@0.3.1`.
181
217
 
182
218
  ### Install from GitHub
183
219
 
184
220
  For a one-shot source run, pin the release tag:
185
221
 
186
222
  ```bash
187
- npx --yes github:atifjubaer/fastrmemory#v0.3.1 --version
188
- npx --yes github:atifjubaer/fastrmemory#v0.3.1 setup
223
+ npx --yes github:atifjubaer/fastrmemory#v0.4.0 --version
224
+ npx --yes github:atifjubaer/fastrmemory#v0.4.0 setup
189
225
  ```
190
226
 
191
227
  For a global CLI without npm's Git resolver, download the release tarball:
192
228
 
193
229
  ```bash
194
- curl -L -o fastrmemory-0.3.1.tgz \
195
- https://github.com/atifjubaer/fastrmemory/releases/download/v0.3.1/fastrmemory-0.3.1.tgz
196
- npm install -g ./fastrmemory-0.3.1.tgz
230
+ curl -L -o fastrmemory-0.4.0.tgz \
231
+ https://github.com/atifjubaer/fastrmemory/releases/download/v0.4.0/fastrmemory-0.4.0.tgz
232
+ npm install -g ./fastrmemory-0.4.0.tgz
197
233
  fastr --version
198
234
  ```
199
235
 
200
- On Windows, download the same URL with `Invoke-WebRequest` or a browser, then run `npm install -g .\fastrmemory-0.3.1.tgz`. For a local project install, use `npm install --no-save ./fastrmemory-0.3.1.tgz` instead of the global flag.
236
+ On Windows, download the same URL with `Invoke-WebRequest` or a browser, then run `npm install -g .\fastrmemory-0.4.0.tgz`. For a local project install, use `npm install --no-save ./fastrmemory-0.4.0.tgz` instead of the global flag.
201
237
 
202
- > Git installs build from source and are slower than the npm tarball; for a global CLI, prefer the npm package or the release tarball above. `npm install -g git+https://...` is not recommended with npm 11 because the `prepare` build does not receive dev dependencies. Both `fastrmemory` and `fastr` (short alias) are executable after installation. The canonical package is unscoped `fastrmemory@0.3.1`; the old scoped npm entries are gone. Use npm for generated MCP and hook configs so installs stay reproducible.
238
+ > Git installs build from source and are slower than the npm tarball; for a global CLI, prefer the npm package or the release tarball above. `npm install -g git+https://...` is not recommended with npm 11 because the `prepare` build does not receive dev dependencies. Both `fastrmemory` and `fastr` (short alias) are executable after installation. The canonical package is unscoped `fastrmemory@0.4.0`; the old scoped npm entries are gone. Use npm for generated MCP and hook configs so installs stay reproducible.
203
239
 
204
240
  ### 2. Verify Database Health
205
241
 
@@ -299,9 +335,10 @@ fastrmemory daemon start
299
335
  fastrmemory daemon status
300
336
  fastrmemory daemon stop
301
337
 
302
- # Auto-wire MCP configs, lifecycle hooks, and Planetary Skills into Claude Code, Cursor,
303
- # Gemini CLI, GitHub Copilot CLI, and OpenCode; setup also wires Antigravity, Claude Desktop, and Windsurf:
338
+ # Auto-wire MCP + lifecycle hooks for Claude Code, Cursor, Gemini CLI, Copilot CLI, and OpenCode:
304
339
  fastrmemory hook install
340
+
341
+ # Auto-wire MCP + AGENTS.md + Planetary Skills; setup also wires Antigravity, Claude Desktop, and Windsurf:
305
342
  fastrmemory setup
306
343
 
307
344
  # Mine past Git bug fixes directly into staging error traps:
@@ -344,7 +381,7 @@ fastrmemory guard --strict
344
381
 
345
382
  ## 🔌 One-Click Agent MCP Configuration
346
383
 
347
- `fastr mcp init` is the one-command path for MCP-only wiring. It writes the platform-correct runner (`npx`, `pnpm dlx`, `yarn dlx`, or `bunx`; `cmd /c ...` on native Windows), preserves unrelated config keys, and is idempotent. `fastr setup` remains the full installer for `.fastr/`, `AGENTS.md`, skills, and lifecycle hooks; `fastr hook install` remains the hook-only path.
384
+ `fastr mcp init` is the one-command path for MCP-only wiring. By default it uses `--source registry` and writes the platform-correct portable runner (`npx`, `pnpm dlx`, `yarn dlx`, or `bunx`; `cmd /c ...` on native Windows). Pass `--source local` to write the active CLI path plus an absolute `--project`, which is useful for a globally installed CLI but makes the config machine-specific. It preserves unrelated config keys and is idempotent. `fastr setup` remains the full installer for `.fastr/`, `AGENTS.md`, MCP configs, and skills; `fastr hook install` adds lifecycle hooks plus MCP configs for Claude Code, Cursor, Gemini CLI, Copilot CLI, and OpenCode.
348
385
 
349
386
  `fastr hook install` merges lifecycle hooks for Claude Code, Cursor, Gemini CLI, GitHub Copilot CLI, and OpenCode, and writes the OpenCode context/compaction plugin. Gemini CLI requires strict JSON on hook stdout; Copilot returns `permissionDecision: "ask"` for an active trap because it has no model-facing advisory field for `preToolUse`.
350
387
 
@@ -376,13 +413,15 @@ Example POSIX project config generated by `fastr mcp init --client cursor` (Wind
376
413
 
377
414
  VS Code uses `servers` instead of `mcpServers`; OpenCode uses `mcp.servers` with a command array and `"type": "local"`. Existing `opencode.json(c)` settings are preserved, but a JSONC config is reported for manual wiring rather than rewritten. Codex is always printed as a `[mcp_servers.fastrmemory]` TOML block because rewriting a user-owned TOML file safely requires a dedicated parser.
378
415
 
379
- For user-scoped clients, the generated entry includes `--project /absolute/path/to/repo`; this prevents the client's launch directory from selecting the wrong database. `fastr setup` also writes the absolute `node` path and is the recommended path when the client cannot launch package-runner shims. On native Windows, `fastr mcp init` automatically emits `"command": "cmd"` with `"/c"` and the runner, so manual `npx.cmd` fixes are not needed.
416
+ For user-scoped clients, the generated entry includes `--project /absolute/path/to/repo`; this prevents the client's launch directory from selecting the wrong database. `fastr setup` also writes the absolute `node` path and is the recommended path when the client cannot launch package-runner shims. `--source local` is the `mcp init` equivalent for an installed CLI: it writes the active CLI path and an absolute `--project`; use `--source registry` (the default) when the config will be committed or shared. `--source local` ships in `0.5.0`; on published `0.4.0`, use `fastr setup` for an installed-CLI config. On native Windows, `fastr mcp init` automatically emits `"command": "cmd"` with `"/c"` and the runner, so manual `npx.cmd` fixes are not needed.
417
+
418
+ `--client all --scope project` covers the six project-scoped clients in the table. `--client all --scope user` covers the eight user-scoped clients; OpenCode and Copilot CLI are project-only, while Codex prints a TOML block for manual insertion. User-scoped entries pin one `--project` database, so use project scope when each developer may open a different checkout.
380
419
 
381
420
  ---
382
421
 
383
422
  ## 🛠️ MCP Server: Tools & Resources
384
423
 
385
- Built using the official **v2 `@modelcontextprotocol/server`** SDK. The tool list below describes **0.4.0** (prepared; unchanged from 0.3.1); the v0.2.1 release has 4 resources.
424
+ Built using the official **v2 `@modelcontextprotocol/server`** SDK. The tool list below describes **0.5.0** (tool surface unchanged from 0.4.0); the v0.2.1 release has 4 resources.
386
425
 
387
426
  ### 41 MCP Tools
388
427
 
@@ -516,6 +555,8 @@ FastrMemory ships 10 Agent Skills (in `skills/`, mirrored to `.cursor/skills/`)
516
555
 
517
556
  Run `npm run check:skills` to validate every tool call in the skills against `src/mcp/server.ts`.
518
557
 
558
+ After updating the CLI, re-run `fastr setup` to refresh the copied skills. The installer overwrites same-named skill files, removes retired skills, and leaves unrelated user-owned directories. `fastr hook install` does not copy skills. Restart the client after setup. If you install the Claude Code plugin instead, update the plugin rather than maintaining a second copied skill set.
559
+
519
560
  ---
520
561
 
521
562
  ## 🏗️ Architecture
@@ -560,7 +601,7 @@ Run the comprehensive unit test suite:
560
601
  npm test
561
602
  ```
562
603
 
563
- All **293 tests pass** across **53 test files** on current HEAD (`0.4.0` prepared); published `0.3.1` has **282 tests / 52 files**, and v0.2.1 has **235 tests / 43 files**. Coverage includes database schema, WAL locking, offline spooling, bi-temporal supersession, secret scrubbing, two-zone rendering, automated benchmarks, snapshots/rollback, branch merge conflict reports, replay/diff, memory envelopes, confidence tiers and 3-bad dormancy, memory hygiene checks, Memory CI, conflict-aware recall, portable backup manifests and verified restore, local rule import, OpenCode V2, Gemini CLI, and Copilot CLI wiring, git-learner, cognitive blame, commit synthesis, hybrid background daemon, token compression, self-healing doctor, multimodal vision, web dashboard server, pre-merge trap guardian, UI loopback security boundaries, atomic installer configuration safety, and shadcn-style `mcp init` client config merges.
604
+ All **297 tests pass** across **53 test files** on current `main` (`0.5.0`); published `0.4.0` has **293 tests / 53 files**, `0.3.1` has **282 / 52**, and v0.2.1 has **235 / 43**. Coverage includes database schema, WAL locking, offline spooling, bi-temporal supersession, secret scrubbing, two-zone rendering, automated benchmarks, snapshots/rollback, branch merge conflict reports, replay/diff, memory envelopes, confidence tiers and 3-bad dormancy, memory hygiene checks, Memory CI, conflict-aware recall, portable backup manifests and verified restore, local rule import, OpenCode V2, Gemini CLI, and Copilot CLI wiring, git-learner, cognitive blame, commit synthesis, hybrid background daemon, token compression, self-healing doctor, multimodal vision, web dashboard server, pre-merge trap guardian, UI loopback security boundaries, atomic installer configuration safety, and shadcn-style `mcp init` client config merges, including local-source entries.
564
605
 
565
606
  **CI performance gates:** `check:query-plans`, `check:recall-latency`, and `check:install-size` run inside `check:ci`. CI executes them on the canonical Ubuntu/Node 24 job; other matrix jobs set `FASTR_PERF_GATE=0` because timing is runner-sensitive, while functional tests still run on every matrix entry.
566
607
 
package/dist/bin/fastr.js CHANGED
@@ -10,7 +10,7 @@ import { runInteractiveSetup } from '../src/installer/setup.js';
10
10
  import { formatBenchmarkMarkdown } from '../src/bench/benchmark.js';
11
11
  import { startUiServer } from '../src/ui/server.js';
12
12
  import { installAgentHooks } from '../src/installer/hooks.js';
13
- import { formatMcpInitResult, initMcpClients, parseMcpChannel, parseMcpClients, parseMcpProfile, parseMcpRunner, parseMcpScope, } from '../src/installer/mcp-init.js';
13
+ import { formatMcpInitResult, initMcpClients, parseMcpChannel, parseMcpClients, parseMcpProfile, parseMcpRunner, parseMcpScope, parseMcpSource, } from '../src/installer/mcp-init.js';
14
14
  import { learnFromGitHistory } from '../src/learn/git-learner.js';
15
15
  import { exportToObsidianVault } from '../src/export/obsidian.js';
16
16
  import { runLifecycleHook, toClaudeHookStdout, toGeminiHookStdout, toCopilotHookStdout } from '../src/hooks/runner.js';
@@ -87,6 +87,7 @@ mcpCmd
87
87
  .option('--channel <channel>', 'latest (auto-update) or pinned (exact version)', 'latest')
88
88
  .option('--runner <runner>', 'npx, pnpm, yarn, or bunx', 'npx')
89
89
  .option('--profile <profile>', 'Tool surface: full or core', 'full')
90
+ .option('--source <source>', 'registry (portable npx) or local (active CLI)', 'registry')
90
91
  .option('--project <path>', 'Project root for user-scoped configs', process.cwd())
91
92
  .option('--dry-run', 'Print the target files without writing', false)
92
93
  .option('--json', 'Print a machine-readable result', false)
@@ -96,7 +97,10 @@ Examples:
96
97
  $ fastrmemory mcp init --client cursor,vscode --channel pinned
97
98
  $ fastrmemory mcp init --client opencode --runner pnpm
98
99
  $ fastrmemory mcp init --client all --scope project
99
- $ fastrmemory mcp init --client codex --scope user`)
100
+ $ fastrmemory mcp init --client all --scope user --source local --profile core
101
+ $ fastrmemory mcp init --client codex --scope user
102
+
103
+ --source local writes the active CLI and an absolute --project; project configs are machine-specific.`)
100
104
  .action((options) => {
101
105
  try {
102
106
  const scope = parseMcpScope(options.scope);
@@ -104,6 +108,7 @@ Examples:
104
108
  const channel = parseMcpChannel(options.channel);
105
109
  const runner = parseMcpRunner(options.runner);
106
110
  const profile = parseMcpProfile(options.profile);
111
+ const source = parseMcpSource(options.source);
107
112
  const results = initMcpClients({
108
113
  clients,
109
114
  scope,
@@ -111,10 +116,11 @@ Examples:
111
116
  channel,
112
117
  runner,
113
118
  profile,
119
+ source,
114
120
  dryRun: options.dryRun,
115
121
  });
116
122
  if (options.json) {
117
- console.log(JSON.stringify({ scope, channel, runner, profile, results }, null, 2));
123
+ console.log(JSON.stringify({ scope, channel, runner, profile, source, results }, null, 2));
118
124
  return;
119
125
  }
120
126
  for (const result of results) {