Skip to content

Commit 7332ecb

Browse files
authored
Release 3.0.8
1 parent aa3c4d1 commit 7332ecb

10 files changed

Lines changed: 30 additions & 17 deletions

File tree

CHANGELOG.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,17 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [3.0.8] - 2026-08-23
9+
10+
### Fixed
11+
- `iai-mcp capture-hooks status` relabels the Claude Desktop line to
12+
"Claude Desktop MCP tools:" so it no longer implies ambient capture hooks
13+
are wired when the check only reflects MCP server registration. Reported
14+
by @oscampo (#114).
15+
- README doctor table now lists all 33 checks, adding `dd` (exact-index
16+
coercions) and `ee` (deferred-capture backlog at rest). Reported by
17+
@oscampo (#113).
18+
819
## [3.0.7] - 2026-08-21
920

1021
### Security

README.md

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<h3 align="center">Give your coding agent a brain that remembers exactly what you said — forever, on your machine.</h3>
88
<p align="center"><b>The best open-source personal memory engine for AI coding assistants.</b><br>Pays for itself in tokens: an injected memory pack costs ≈88% less than the agent search it displaces.<br>Every claim ships with the harness that proves it — run the benchmarks yourself.</p>
99

10-
<p align="center"><a href="https://pypi.org/project/iai-pme/"><img src="https://img.shields.io/pypi/v/iai-pme?style=flat-square&color=1f6feb&label=pypi&v=281" alt="iai-pme on PyPI"></a> <img src="https://img.shields.io/badge/release-v3.0.7-1f6feb?style=flat-square" alt="Release v3.0.7"> <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-1f6feb?style=flat-square" alt="License: MIT"></a> <img src="https://img.shields.io/badge/python-3.11%20|%203.12-3776ab?style=flat-square&logo=python&logoColor=white" alt="Python 3.11 | 3.12"> <img src="https://img.shields.io/badge/platform-macOS%20|%20Linux-555?style=flat-square" alt="Platform: macOS and Linux"> <img src="https://img.shields.io/badge/Windows-beta-dbab09?style=flat-square&logo=windows&logoColor=white" alt="Windows: beta"> <img src="https://img.shields.io/badge/engine-Rust%20native-dea584?style=flat-square&logo=rust&logoColor=black" alt="Rust-native engine"></p>
10+
<p align="center"><a href="https://pypi.org/project/iai-pme/"><img src="https://img.shields.io/pypi/v/iai-pme?style=flat-square&color=1f6feb&label=pypi&v=281" alt="iai-pme on PyPI"></a> <img src="https://img.shields.io/badge/release-v3.0.8-1f6feb?style=flat-square" alt="Release v3.0.7"> <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-1f6feb?style=flat-square" alt="License: MIT"></a> <img src="https://img.shields.io/badge/python-3.11%20|%203.12-3776ab?style=flat-square&logo=python&logoColor=white" alt="Python 3.11 | 3.12"> <img src="https://img.shields.io/badge/platform-macOS%20|%20Linux-555?style=flat-square" alt="Platform: macOS and Linux"> <img src="https://img.shields.io/badge/Windows-beta-dbab09?style=flat-square&logo=windows&logoColor=white" alt="Windows: beta"> <img src="https://img.shields.io/badge/engine-Rust%20native-dea584?style=flat-square&logo=rust&logoColor=black" alt="Rust-native engine"></p>
1111
<p align="center"><img src="https://img.shields.io/badge/LongMemEval%20R%405-0.962-2ea043?style=flat-square" alt="LongMemEval R@5 0.962"> <img src="https://img.shields.io/badge/Rescue%4010-1.000-2ea043?style=flat-square" alt="Rescue@10 1.000"> <img src="https://img.shields.io/badge/memory_pack-%E2%89%8888%25_cheaper_than_search-2ea043?style=flat-square" alt="An injected memory pack costs ≈88% less than the agent search it displaces"> <img src="https://img.shields.io/badge/at%20rest-AES--256--GCM-2ea043?style=flat-square" alt="AES-256-GCM"> <img src="https://img.shields.io/badge/local--only-no%20telemetry-2ea043?style=flat-square" alt="Local only, no telemetry"> <img src="https://img.shields.io/badge/MCP-compatible-8957e5?style=flat-square" alt="MCP compatible"> <a href="https://glama.ai/mcp/servers/CodeAbra/iai-mcp"><img src="https://glama.ai/mcp/servers/CodeAbra/iai-mcp/badges/score.svg" alt="Glama MCP score"></a></p>
1212
<p align="center"><a href="#quick-start"><b>Quick start</b></a> · <a href="#benchmarks"><b>Benchmarks</b></a> · <a href="#watch-it-think"><b>Dashboard</b></a> · <a href="https://github.com/CodeAbra/iai-personal-memory-engine/discussions"><b>Discussions</b></a> · <a href="./README_zh-CN.md"><b>中文</b></a></p>
1313

@@ -461,7 +461,7 @@ iai-mcp doctor · self-update · daemon {install,start,stop,restart,logs,paus
461461

462462
`entity-backfill` derives `entity:` anchor tags from records captured before anchoring shipped, so names in old turns become matchable; `--refresh` recomputes the whole corpus. `blob-quarantine` tombstones machine-notification blobs that drown real records on any cue sharing their vocabulary. Both are dry-run by default and journal every change when applied.
463463

464-
`doctor` runs 31 checks and repairs: `--apply` prompts before anything touching the store and renames corrupt state aside rather than deleting it; `--auto` is the unattended read-only subset your assistant invokes when the socket is unreachable 10s into a session. `self-update` upgrades the wheel, restarts the daemon and verifies by querying the running engine's version; it refuses source checkouts and leaves the running engine untouched if pip fails.
464+
`doctor` runs 33 checks and repairs: `--apply` prompts before anything touching the store and renames corrupt state aside rather than deleting it; `--auto` is the unattended read-only subset your assistant invokes when the socket is unreachable 10s into a session. `self-update` upgrades the wheel, restarts the daemon and verifies by querying the running engine's version; it refuses source checkouts and leaves the running engine untouched if pip fails.
465465

466466
### Deployment surface
467467

@@ -647,7 +647,7 @@ config file is something you can read.
647647

648648
## Doctor
649649

650-
`iai-mcp doctor` runs 31 checks against the local engine, the store, the native engine, and the runtime state. Output is one line per check: PASS, WARN, or FAIL.
650+
`iai-mcp doctor` runs 33 checks against the local engine, the store, the native engine, and the runtime state. Output is one line per check: PASS, WARN, or FAIL.
651651

652652
It also repairs what it finds. `--apply` walks the repairs it can make and asks before anything that touches your memory; corrupt state files and vector indexes are renamed aside so the engine rebuilds them, never deleted. `--auto` is the unattended subset — no prompts, no killed processes, no changes to the store — and your assistant runs it for you if the engine is still unreachable ten seconds into a session. In practice a stalled engine now fixes itself before you notice it stalled.
653653

@@ -658,7 +658,7 @@ iai-mcp doctor
658658
```
659659

660660
<details>
661-
<summary><b>All 31 checks, one line each</b></summary>
661+
<summary><b>All 33 checks, one line each</b></summary>
662662

663663
What it checks:
664664

@@ -686,11 +686,13 @@ What it checks:
686686
| t | hippo_compacted freshness | Compaction has run recently |
687687
| u | recall centrality regression | Recall ranking hasn't regressed |
688688
| v | configured embedder | The embedder the store is configured for is built and produces vectors |
689+
| dd | exact-index coercions | No non-finite (NaN/inf) vectors have been coerced to zero at the exact-cosine index |
689690
| w | no permanent-failed captures | No capture is stuck after exhausting its retries |
690691
| x | timestamps not collapsed | Record timestamps span a real range, not all-identical |
691692
| y | RSS 24h plateau | Resident memory has settled rather than climbing across the last day |
692693
| z | AVX2 CPU support | CPU supports the instructions the native libs need |
693694
| aa | capture-state hygiene | No stale or half-written files left in the capture-state directory |
695+
| ee | deferred-capture backlog at rest | No undrained events sitting in the deferred-capture spool |
694696
| bb | nightly insight mint | The nightly pass is actually minting insights, not just running |
695697
| cc | background liveness | Background sleep steps have completed over the last week |
696698
| ii | store embed identity | The store's vector-identity stamp matches the embedder the runtime would use |

README_zh-CN.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<p align="center">每一项声明都附带可复现的基准测试脚本。你可以自己跑一遍验证。</p>
1515

1616
<p align="center">
17-
<img src="https://img.shields.io/badge/release-v3.0.7-1f6feb?style=flat-square" alt="Release v3.0.7">
17+
<img src="https://img.shields.io/badge/release-v3.0.8-1f6feb?style=flat-square" alt="Release v3.0.7">
1818
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-1f6feb?style=flat-square" alt="License: MIT"></a>
1919
<img src="https://img.shields.io/badge/python-3.11%20|%203.12-3776ab?style=flat-square&logo=python&logoColor=white" alt="Python 3.11 | 3.12">
2020
<img src="https://img.shields.io/badge/platform-macOS%20|%20Linux-555?style=flat-square" alt="Platform: macOS and Linux">
@@ -226,7 +226,7 @@ tail ~/.iai-mcp/logs/capture-$(date -u +%Y-%m-%d).log
226226

227227
- **基准测试细节**(LongMemEval-S 对比 mempalace、Rescue@10、漂移、整合、延迟、内存占用) → [README.md#benchmarks](./README.md#benchmarks)
228228
- **配置项**(环境变量、调优旋钮) → [README.md#configuration](./README.md#configuration)
229-
- **Doctor 自检**31 项健康检查清单) → [README.md#doctor](./README.md#doctor)
229+
- **Doctor 自检**33 项健康检查清单) → [README.md#doctor](./README.md#doctor)
230230
- **故障排查**[README.md#troubleshooting](./README.md#troubleshooting)
231231
- **状态与限制**[README.md#status-and-limitations](./README.md#status-and-limitations)
232232
- **兼容性**(Claude Code / Codex CLI / Gemini CLI / Cursor CLI / Claude Desktop) → [README.md#compatibility](./README.md#compatibility)

mcp-wrapper/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "iai-mcp-wrapper",
3-
"version": "3.0.7",
3+
"version": "3.0.8",
44
"description": "TypeScript MCP wrapper for IAI-MCP Python core",
55
"author": "Areg Noya",
66
"type": "module",

mcp-wrapper/src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ export function buildServer(
7878
const server = new Server(
7979
{
8080
name: "iai-mcp",
81-
version: "3.0.7",
81+
version: "3.0.8",
8282
},
8383
{
8484
capabilities: { tools: {} },

mcp-wrapper/src/lifecycle.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ export const SOCKET_PROBE_DELAY_MS = 2_000;
2626

2727
export const HEARTBEAT_SCHEMA_VERSION = 1;
2828

29-
export const WRAPPER_VERSION = "3.0.7";
29+
export const WRAPPER_VERSION = "3.0.8";
3030

3131
const LAUNCHCTL_BIN = "/bin/launchctl";
3232

plugin/.claude-plugin/plugin.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "iai-memory",
33
"displayName": "iai-pme — personal memory engine",
4-
"version": "3.0.7",
4+
"version": "3.0.8",
55
"description": "Persistent local memory for your assistant: every turn captured verbatim, relevant memory injected at session start and before each turn, and fifteen memory tools over MCP. Requires the iai-pme package (pip install iai-pme).",
66
"author": {
77
"name": "Areg Aramovich Noya",

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "iai-pme"
3-
version = "3.0.7"
3+
version = "3.0.8"
44
description = "MCP server giving Claude persistent autistic-style memory + learning"
55
authors = [{ name = "Areg Noya" }]
66
requires-python = ">=3.11,<3.13"

src/iai_mcp/cli/_capture.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1183,18 +1183,18 @@ def _installed_state(template, installed) -> str:
11831183

11841184
desktop_cfg = _cli._claude_desktop_config_path()
11851185
if desktop_cfg is None:
1186-
desktop_line = "Claude Desktop: not installed"
1186+
desktop_line = "Claude Desktop MCP tools: not installed"
11871187
desktop_wired = False
11881188
elif not desktop_cfg.exists():
1189-
desktop_line = f"Claude Desktop: {desktop_cfg} MISSING"
1189+
desktop_line = f"Claude Desktop MCP tools: {desktop_cfg} MISSING"
11901190
desktop_wired = False
11911191
else:
11921192
try:
11931193
d = _json.loads(desktop_cfg.read_text(encoding="utf-8"))
11941194
desktop_wired = "iai-mcp" in d.get("mcpServers", {})
1195-
desktop_line = f"Claude Desktop: {desktop_cfg} {'WIRED' if desktop_wired else 'NOT WIRED'}"
1195+
desktop_line = f"Claude Desktop MCP tools: {desktop_cfg} {'WIRED' if desktop_wired else 'NOT WIRED'}"
11961196
except (OSError, ValueError):
1197-
desktop_line = f"Claude Desktop: {desktop_cfg} (unreadable)"
1197+
desktop_line = f"Claude Desktop MCP tools: {desktop_cfg} (unreadable)"
11981198
desktop_wired = False
11991199
print(desktop_line)
12001200

@@ -1208,7 +1208,7 @@ def _installed_state(template, installed) -> str:
12081208

12091209
if ok and not desktop_problem:
12101210
print(f"\nstatus: ACTIVE — Stop + UserPromptSubmit + SessionStart + per-turn hooks wired "
1211-
f"(Claude Code{'; Desktop also wired' if desktop_wired else ''})")
1211+
f"(Claude Code{'; Desktop MCP tools also wired' if desktop_wired else ''})")
12121212
return 0
12131213
msg = []
12141214
if not ok:

tests/test_iai_cli_version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
import pytest
88

9-
EXPECTED_VERSION = "3.0.7"
9+
EXPECTED_VERSION = "3.0.8"
1010

1111

1212
def test_canonical_version_is_expected():

0 commit comments

Comments
 (0)