Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
193 commits
Select commit Hold shift + click to select a range
4949aab
fix: guard None metadata/doc in tool_check_duplicate and Layer1/Layer2
eldar702 Apr 19, 2026
35b033d
fix(mcp): force UTF-8 on stdio to fix -32000 on non-ASCII payloads
alonehobo Apr 21, 2026
c2e0531
fix: add total count to tool_list_drawers pagination response
Sathvik-1007 Apr 22, 2026
0b8c2c1
fix(kg): reject inverted intervals in add_triple (valid_to < valid_from)
arnoldwender Apr 26, 2026
f30fdf2
fix: serialize ChromaCollection writes through palace lock
imtylervo Apr 27, 2026
db28bf1
fix: paginate closet_llm col.get (#1073)
sha2fiddy Apr 29, 2026
4d98b05
fix(kg): validate ISO-8601 date formats at MCP boundary
arnoldwender Apr 24, 2026
abe8576
fix(kg): reject partial ISO dates to avoid silent empty result sets
arnoldwender Apr 26, 2026
10a0bc1
chore(deps): bump actions/configure-pages from 5 to 6
dependabot[bot] May 1, 2026
c3e1104
fix(chroma): harden HNSW startup preflight
mjc Apr 30, 2026
7fa27bd
fix(repair): rebuild collections through temp staging
mjc Apr 30, 2026
2f509b4
fix(cli): restore backup on repair failure
mjc Apr 30, 2026
f57f300
fix(repair): close active backend before rollback restore
mjc Apr 30, 2026
0e32b96
fix: avoid false hnsw divergence fallback
mjc May 1, 2026
ac6c2b6
fix(mcp_server): pass embedding_function= on collection reopen (#1299)
igorls May 1, 2026
cd98d66
fix(mcp_server): address copilot review on #1303
igorls May 1, 2026
5ddaf7a
Merge pull request #1303 from MemPalace/fix/mcp-server-missing-embedd…
igorls May 1, 2026
6509071
feat(searcher): add candidate_strategy="union" for vector∪BM25 rerank…
igorls May 2, 2026
d07b730
fix(hooks): quote CLAUDE_PLUGIN_ROOT / CODEX_PLUGIN_ROOT in hooks.jso…
mvalentsev May 3, 2026
8472d55
fix(hooks): treat absent ~/.mempalace as auto-save off
lcatlett May 1, 2026
2d50b21
fix(hooks): use is_dir() for palace root check (review feedback)
lcatlett May 3, 2026
cbd6e5d
fix(cli): write compress output to mempalace_closets so palace can re…
igorls May 3, 2026
e4e25ed
fix(mcp): forward valid_to and source params in kg_add/kg_invalidate …
igorls May 3, 2026
01b3183
fix(cli): honor --palace flag in cmd_init (#1313)
igorls May 3, 2026
10733f1
fix(backends/chroma): wire quarantine_stale_hnsw into _client() to pr…
igorls May 3, 2026
e9222b4
fix(mcp): case-insensitive agent name in diary_write/diary_read (#1243)
igorls May 3, 2026
4b0fc44
style: ruff format cli.py (#1244)
igorls May 3, 2026
b4a9f2a
style: ruff format touched files (PR #1322)
igorls May 3, 2026
6ffbf6f
style: ruff format test_mcp_server.py (PR #1320)
igorls May 3, 2026
2857948
style: ruff format tests/test_cli.py (PR #1319)
igorls May 3, 2026
f854d86
style: ruff format tests/test_backends.py (PR #1322)
igorls May 3, 2026
2397481
style: ruff format tests/test_mcp_server.py (PR #1323)
igorls May 3, 2026
339924a
fix(cli): cmd_compress writes to mempalace_closets (#1244) (#1319)
igorls May 3, 2026
a690eb3
Merge pull request #1323 from MemPalace/fix/1243-diary-case-insensitive
igorls May 3, 2026
6f88b2a
Merge pull request #1322 from MemPalace/fix/1121-1132-1263-client-qua…
igorls May 3, 2026
b2f259c
fix(mcp): omit palace_path from tool_status responses (+ docs)
icciaaron Apr 19, 2026
7fc260f
fix(mcp): basename source_file in tool_get_drawer responses
igorls May 3, 2026
3e6f648
Merge pull request #1325 from MemPalace/security/mcp-omit-absolute-paths
igorls May 3, 2026
3eb7980
fix(searcher): address Copilot review on #1306
igorls May 3, 2026
2ad379b
Merge pull request #1306 from MemPalace/feat/hybrid-candidate-union
igorls May 3, 2026
a91b7ee
test(cli): prime monkeypatch undo so palace env doesn't leak
igorls May 3, 2026
1888b67
Merge pull request #1321 from MemPalace/fix/1313-init-palace-flag
igorls May 3, 2026
0e65c54
docs(mcp): drop §5.5 from kg_add docstring/schema
igorls May 3, 2026
5380189
Merge pull request #1320 from MemPalace/fix/1314-kg-temporal-params
igorls May 3, 2026
beac5d9
refactor(mcp): replace eager _kg with lazy per-path cache (#1136)
mvalentsev Apr 24, 2026
9e73009
test(mcp): migrate _kg monkeypatches to _get_kg (#1136)
mvalentsev Apr 24, 2026
c69a622
test(mcp): add multi-tenant and lazy-init tests for KG (#1136)
mvalentsev Apr 24, 2026
84f9726
test(mcp): fix Windows subprocess env in KG lazy-init test
mvalentsev Apr 24, 2026
19f8a4f
style(mcp): drop issue-tracker comments from KG cache block
mvalentsev Apr 24, 2026
0a62658
fix(mcp): drain KG cache on tool_reconnect
mvalentsev May 2, 2026
45df1a2
fix(backends/chroma): release SQLite file lock on close_palace/close …
mvalentsev Apr 22, 2026
7cee74c
fix(fact-checker): reconfigure stdio to UTF-8 on Windows
mvalentsev Apr 30, 2026
32f4dfa
fix(cli): reconfigure stdio to UTF-8 on Windows
mvalentsev Apr 30, 2026
03643eb
fix(cli, fact-checker): per-stream stdio errors policy on Windows
mvalentsev May 3, 2026
b8816e0
fix(mcp): retry KG handlers once on concurrent close race
mvalentsev May 3, 2026
75ad8ae
ci: retrigger linux 3.13 (transient onnx download flake)
mvalentsev May 3, 2026
285b3b4
refactor(stdio): extract Windows UTF-8 reconfigure into shared helper
mvalentsev May 3, 2026
f9d939a
fix(storage): quarantine bloated HNSW link payloads
fatkobra May 4, 2026
4f36145
fix(entity_registry): atomic write to prevent partial corruption on c…
arnoldwender Apr 26, 2026
2e441d1
fix(entity_registry): fsync parent dir after rename for ext4 durability
arnoldwender Apr 28, 2026
eff844b
fix(storage): quarantine partial HNSW flush without metadata
fatkobra May 4, 2026
37e7d39
fix(repair): preflight poisoned max_seq_id
fatkobra May 5, 2026
bb40a52
fix(migrate): verify write roundtrip before bailout
fatkobra May 5, 2026
6b04298
fix(repair): preflight SQLite integrity before rebuild
fatkobra May 5, 2026
0cfb4b3
Merge pull request #1214 from arnoldwender/fix/kg-temporal-inversion-…
igorls May 6, 2026
ef0e45a
Merge pull request #1105 from mvalentsev/fix/chroma-backend-close-rel…
igorls May 6, 2026
e18981a
Merge pull request #1215 from arnoldwender/fix/entity-registry-atomic…
igorls May 6, 2026
778f830
Merge pull request #1107 from sha2fiddy/fix/1073-closet-llm-paginate
igorls May 6, 2026
3824ea6
Merge pull request #1282 from mvalentsev/fix/fact-checker-stdio-utf8
igorls May 6, 2026
7ede231
Merge pull request #1167 from arnoldwender/fix/kg-date-validation
igorls May 6, 2026
53675dd
Merge pull request #1160 from mvalentsev/fix/mcp-kg-lazy-per-path-cache
igorls May 6, 2026
2c0ef2c
docs(changelog): document v3.3.5 fixes from #1214 #1105 #1215 #1107 #…
igorls May 6, 2026
5ae83d8
Merge pull request #1370 from MemPalace/docs/changelog-v3.3.5-batch1
igorls May 6, 2026
d1e27b8
style: ruff format new test files (CI lint)
igorls May 6, 2026
ea6f2c0
Merge pull request #1162 from imtylervo/fix/palace-write-lock-queue-p…
igorls May 6, 2026
d9ab5b7
Merge pull request #1305 from lcatlett/upstream/respect-absent-palace…
igorls May 6, 2026
642a073
Merge pull request #1114 from Sathvik-1007/fix/list-drawers-paginatio…
igorls May 6, 2026
0c8314f
Merge pull request #1060 from alonehobo/fix/stdio-utf8
igorls May 6, 2026
67cda9d
Merge pull request #1030 from eldar702/fix/none-metadata-residual-guards
igorls May 6, 2026
f854da7
fix(lint): hoist hooks_cli_mod import to top of test_hooks_cli (E402)
igorls May 6, 2026
46d9eb5
Merge pull request #1375 from MemPalace/fix/lint-e402-test-hooks-cli
igorls May 6, 2026
733e435
fix(searcher): guard against None metadata/doc in search result loops
Apr 18, 2026
5347c2c
fix(searcher): clamp effective_distance to valid cosine range [0, 2]
eldar702 Apr 19, 2026
aac8437
style: ruff format tests/test_searcher.py (CI lint)
igorls May 6, 2026
0fdb480
fix(mcp): handle null JSON-RPC request payloads safely
alpiua Apr 17, 2026
55d79dc
fix: include null id in JSON-RPC invalid request error responses and …
alpiua Apr 18, 2026
a85d432
feat: add validation for missing name parameter in tools/call requests
alpiua Apr 18, 2026
869ab38
style: ruff format mcp_server.py + test_mcp_server.py (CI lint)
igorls May 6, 2026
7b49478
fix: MCP server JSON output ensure_ascii=False for non-ASCII support
May 1, 2026
74288f1
style: ruff format mcp_server.py (CI lint)
igorls May 6, 2026
eef053d
fix(mcp_server): clamp similarity to [0,1] to avoid negative values
bobo-xxx Apr 18, 2026
f2bed92
fix(layers): clamp similarity to [0,1] to avoid negative values
bobo-xxx Apr 18, 2026
f4617b3
Merge pull request #1029 from eldar702/fix/searcher-effective-distanc…
igorls May 6, 2026
9b24cfc
Merge pull request #987 from alpiua/fix-mcp-null-payload
igorls May 6, 2026
f3d9801
Merge pull request #1293 from hzx945627450-eng/fix/mcp-ensure-ascii
igorls May 6, 2026
8a9b2be
Merge pull request #988 from bobo-xxx/clawoss/fix/978-negative-simila…
igorls May 6, 2026
01880f6
Merge pull request #1019 from cantenesse/swe/session-1-bug-mempalace-…
igorls May 6, 2026
b68485d
fix(closet_llm): reject non-http(s) endpoints
anthonyonazure Apr 23, 2026
ca5899e
refactor: fix ruff bugbear and silent-except findings
anthonyonazure Apr 23, 2026
6741b69
Merge pull request #1138 from anthonyonazure/fix/bugbear-cleanup-and-…
igorls May 6, 2026
a7c4ed2
fix(repair): add --mode from-sqlite to recover palaces with corrupt H…
potterdigital May 2, 2026
cb6bfd5
chore: gitignore .envrc for direnv users
potterdigital May 2, 2026
d92c741
fix(repair): address PR #1310 review feedback
potterdigital May 2, 2026
e334e25
fix(mcp): retry _get_collection once on transient failure (#1286)
igorls May 6, 2026
f0d2360
Merge pull request #1377 from MemPalace/fix/get-collection-retry-on-e…
igorls May 6, 2026
e28ac94
docs: clarify contributor git identity setup
sjhddh May 6, 2026
bddba59
docs: add 30-day expiry callout + ship 4 auto-save tools
milla-jovovich May 6, 2026
921ff5a
fix(tools/render_jsonl): split chained statements per ruff 0.4.x
milla-jovovich May 6, 2026
7c679ba
fix(tools/render_jsonl): apply ruff format
milla-jovovich May 6, 2026
435f0ad
Merge pull request #1391 from MemPalace/docs/auto-save-tools-on-develop
igorls May 6, 2026
be95ea7
fix(mcp): retry tool_search once on Chroma "Error finding id" transie…
JPdeB61 May 7, 2026
8d8f54a
Merge remote-tracking branch 'origin/develop' into fix/1308-rebuild-f…
igorls May 7, 2026
670aba9
test(repair): close ChromaBackend in _seed_palace to release Windows …
igorls May 7, 2026
be6dc03
merge: develop into hnsw-repair (resolve chroma.py + test_backends.py…
igorls May 7, 2026
be05a2e
Merge pull request #1310 from potterdigital/fix/1308-rebuild-from-sqlite
igorls May 7, 2026
7cf9b17
fix(repair): quote ChromaBackend annotation for Python 3.9 compatibility
igorls May 7, 2026
88493ac
Merge pull request #1285 from mjc/hnsw-repair
igorls May 7, 2026
5488e7b
fix(miner): harden Windows mine against ONNX bad_alloc + silent parti…
igorls May 7, 2026
ec6d2dd
fix: use configured collection in recovery paths
mjc May 2, 2026
e9aee19
fix(tests): apply ruff format after rebase resolution
igorls May 7, 2026
52c70c9
Merge pull request #1402 from MemPalace/fix/1296-windows-mine-resilience
igorls May 7, 2026
72685f3
Merge pull request #1312 from mjc/stale-chroma-reconnect
igorls May 7, 2026
e272ed3
Merge pull request #1359 from fatkobra/fix/1099-migrate-write-roundtrip
igorls May 7, 2026
88a2ebb
Merge pull request #1339 from fatkobra/fix/1218-hnsw-link-payload-health
igorls May 7, 2026
bdaac9d
merge: develop into fix/1295-repair-max-seq-id-preflight
igorls May 7, 2026
a1e1908
merge: develop into fix/1274-missing-hnsw-metadata-gate
igorls May 7, 2026
f2291b0
merge: develop into fix/1362-repair-sqlite-integrity-preflight
igorls May 7, 2026
557b9b1
Merge pull request #1357 from fatkobra/fix/1295-repair-max-seq-id-pre…
igorls May 7, 2026
3893228
Merge pull request #1342 from fatkobra/fix/1274-missing-hnsw-metadata…
igorls May 7, 2026
aecd543
merge: develop into fix/1362-repair-sqlite-integrity-preflight (round 2)
igorls May 7, 2026
f38d9eb
Merge pull request #1364 from fatkobra/fix/1362-repair-sqlite-integri…
igorls May 7, 2026
5134a63
fix(repair): run SQLite integrity preflight before chromadb open
igorls May 7, 2026
7b15103
test(repair): page-align corruption offset in preflight regression test
igorls May 7, 2026
03ed4c4
Merge pull request #1403 from MemPalace/fix/sqlite-preflight-order
igorls May 7, 2026
2a0ed0c
fix(closet_llm): retry _call_llm on JSONDecodeError instead of bailing
igorls May 7, 2026
40e2c8b
fix(exporter): refuse symlinks at export targets
igorls May 7, 2026
0d1c1fb
fix(diary): detect same-size edits via content hash
igorls May 7, 2026
8e21b5a
test(closet_llm): use _ for unused return values per copilot review
igorls May 7, 2026
7545238
fix(exporter): refuse symlinks at file targets and skip tests on Windows
igorls May 7, 2026
2ff6283
fix(diary): rebuild closets on hash change + backfill legacy state
igorls May 7, 2026
83d5364
Merge pull request #1404 from MemPalace/fix/1155-call-llm-retry-on-js…
igorls May 7, 2026
ba30ab6
Merge pull request #1405 from MemPalace/fix/1156-exporter-reject-syml…
igorls May 7, 2026
26bc3d4
test(diary): write fixture with explicit utf-8 to fix Windows hash as…
igorls May 7, 2026
ead2c5d
fix(miner): use token-boundary matching in detect_room
coogie Apr 18, 2026
3d0d037
docs(changelog): add 3.3.5 entry for detect_room substring fix (#1004)
coogie May 5, 2026
ea36a00
Merge pull request #1406 from MemPalace/fix/925-diary-content-hash
igorls May 7, 2026
71804c0
fix(hooks): detach Popen children so the hook can exit on Windows
igorls May 8, 2026
ef8d83c
fix(mine): identify lock holder + exit non-zero on contention
igorls May 8, 2026
d5ce97c
fix(palace): reserve byte 0 as lock sentinel for Windows portability
igorls May 8, 2026
11a35de
test(palace): set USERPROFILE too so the lock-path test works on Windows
igorls May 8, 2026
25bfd37
chore(release): sync 3.3.4 version bump back into develop
igorls May 8, 2026
c35686c
docs(install): recommend uv as the package manager
igorls May 8, 2026
bc7392a
Merge pull request #1412 from MemPalace/fix/1268-popen-detach-windows
igorls May 8, 2026
c70d518
Merge pull request #1413 from MemPalace/fix/1264-mine-lock-holder-dia…
igorls May 8, 2026
c08ec00
fix: address Copilot review on PATH visibility (PR #1414)
igorls May 8, 2026
3a76360
fix(hooks): per-target PID guard with atomic claim (#1212, #1206)
igorls May 8, 2026
d4c476b
fix(hooks): use Optional[Path] for py39 compat
igorls May 8, 2026
424da24
Merge pull request #1415 from MemPalace/fix/1212-per-target-pid-guard
igorls May 8, 2026
018ded5
Merge pull request #1414 from MemPalace/chore/uv-and-3.3.4-housekeeping
igorls May 8, 2026
eebf48e
fix(kg): accept ISO datetimes for temporal inputs
fatkobra May 8, 2026
4adc99f
fix(kg): canonicalize temporal datetime support
fatkobra May 8, 2026
6694198
fix(kg): support Python 3.9 type annotations
fatkobra May 8, 2026
db69d1f
fix(kg): tighten canonical temporal datetime support
fatkobra May 8, 2026
29c0c80
fix(kg): close sqlite connections during cleanup
fatkobra May 8, 2026
1fbcb73
fix(kg): tighten temporal handling and cleanup
fatkobra May 8, 2026
02dd6dc
Merge pull request #1292 from MemPalace/dependabot/github_actions/act…
igorls May 8, 2026
1d3eecb
feat(sync): add gitignore-aware drawer prune (#1252)
mvalentsev May 8, 2026
0ff4121
fix(sync): symmetric source_file resolve + perf optimizations
mvalentsev May 8, 2026
18f8778
style(test_sync): match CI ruff 0.4.x format
mvalentsev May 8, 2026
1822756
fix(test_sync): use tmp_dir for elsewhere path so it stays absolute o…
mvalentsev May 8, 2026
5453ad7
Merge pull request #1421 from mvalentsev/feat/sync-gitignore-prune
igorls May 9, 2026
1c26ece
Merge pull request #1385 from sjhddh/docs/contributor-git-identity-1317
igorls May 9, 2026
2fc47a5
Merge pull request #1004 from coogie/coogie/fix/miner-routing
igorls May 9, 2026
f34b78c
Update conftest.py as part of fix(tests): isolate palace lock subproc…
fatkobra May 9, 2026
00041ca
Update test_palace_locks.py as part of fix(tests): isolate palace loc…
fatkobra May 9, 2026
710fa52
style: format test_palace_locks as part of fix(tests): isolate palace…
fatkobra May 9, 2026
03f9a73
fix(tests): format palace lock test
fatkobra May 9, 2026
b2ce45d
style: ruff format tests/test_mcp_server.py for ruff <0.5
igorls May 9, 2026
d9e60d8
Merge pull request #1396 from JPdeB61/fix/1315-mcp-search-retry-on-hn…
igorls May 9, 2026
11d0a64
fix(tests): use spawn instead of fork for lock-test subprocesses
igorls May 9, 2026
7d5e6c4
Merge pull request #1431 from MemPalace/fix/test-multiprocessing-spawn
igorls May 9, 2026
df5ca11
chore(tests): wrap sqlite3 connections in contextlib.closing
igorls May 9, 2026
b9cec32
Merge pull request #1430 from MemPalace/chore/test-sqlite-cleanup
igorls May 9, 2026
fa9b7e0
chore(release): 3.3.5
igorls May 10, 2026
b2bab38
Merge remote-tracking branch 'origin/develop' into pr-1417-fix-kg-dat…
igorls May 10, 2026
36100f8
Merge pull request #1417 from fatkobra/fix/1374-kg-iso-datetimes
igorls May 10, 2026
6e9d057
docs(changelog): backfill 3.3.4 release date
igorls May 10, 2026
1247e17
Merge pull request #1432 from MemPalace/chore/release-3.3.5
igorls May 10, 2026
40524d5
Merge develop into main for v3.3.5 release
igorls May 10, 2026
a5ec325
docs(changelog): correct KG date validator entry for 3.3.5
igorls May 10, 2026
d0163a7
Merge pull request #1434 from MemPalace/chore/release-3.3.5-prep
milla-jovovich May 10, 2026
acf57fe
Merge upstream v3.3.5 into kostadis-dev
kostadis May 18, 2026
edbec59
fix(sync): scope .mempalaceignore matchers per-wing + honor named pal…
kostadis May 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude-plugin/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ claude plugin add /path/to/mempalace

## Post-Install Setup

After installing the plugin, run the init command to complete setup (pip install, MCP configuration, etc.):
After installing the plugin, run the init command to complete setup (installs the `mempalace` package via `uv tool` or `pip`, configures MCP, etc.):

```
/mempalace:init
Expand Down
4 changes: 2 additions & 2 deletions .claude-plugin/hooks/hooks.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"hooks": [
{
"type": "command",
"command": "bash ${CLAUDE_PLUGIN_ROOT}/hooks/mempal-stop-hook.sh"
"command": "bash \"${CLAUDE_PLUGIN_ROOT}/hooks/mempal-stop-hook.sh\""
}
]
}
Expand All @@ -16,7 +16,7 @@
"hooks": [
{
"type": "command",
"command": "bash ${CLAUDE_PLUGIN_ROOT}/hooks/mempal-precompact-hook.sh"
"command": "bash \"${CLAUDE_PLUGIN_ROOT}/hooks/mempal-precompact-hook.sh\""
}
]
}
Expand Down
2 changes: 1 addition & 1 deletion .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"name": "mempalace",
"source": "./.claude-plugin",
"description": "AI memory system — mine projects and conversations into a searchable palace. 19 MCP tools, auto-save hooks, guided setup.",
"version": "3.3.4",
"version": "3.3.5",
"author": {
"name": "milla-jovovich"
}
Expand Down
2 changes: 1 addition & 1 deletion .claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "mempalace",
"version": "3.3.4",
"version": "3.3.5",
"description": "Give your AI a memory — mine projects and conversations into a searchable palace. 19 MCP tools, auto-save hooks, and guided setup.",
"author": {
"name": "milla-jovovich"
Expand Down
4 changes: 2 additions & 2 deletions .claude-plugin/skills/mempalace/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@ Ensure `mempalace` is installed:
mempalace --version
```

If not installed:
If not installed (uv recommended):

```bash
pip install mempalace
uv tool install mempalace # or: pip install mempalace
```

## Usage
Expand Down
11 changes: 8 additions & 3 deletions .codex-plugin/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ Give your AI a persistent memory -- mine projects and conversations into a searc

- Python 3.9+
- Codex CLI installed and configured
- `pip install mempalace`
- `uv tool install mempalace` (recommended) or `pip install mempalace`

## Installation

Expand Down Expand Up @@ -39,12 +39,17 @@ git clone https://github.com/MemPalace/mempalace.git
cd mempalace
```

2. Install the Python package:
2. Install the Python package so the `mempalace-mcp` script lands on
your PATH (the bundled `plugin.json` invokes it by bare name):

```bash
pip install -e .
uv tool install --editable . # or: pip install -e .
```

Plain `uv sync` is **not** enough here — it installs the scripts into
`.venv/bin/`, which Codex will not find unless you activate the venv
before launching Codex.

3. The `.codex-plugin` directory is already in the repo root. Codex CLI will detect it automatically when you run Codex from inside the repository.

4. Initialize your palace:
Expand Down
6 changes: 3 additions & 3 deletions .codex-plugin/hooks.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"hooks": [
{
"type": "command",
"command": "${CODEX_PLUGIN_ROOT}/hooks/mempal-hook.sh session-start"
"command": "\"${CODEX_PLUGIN_ROOT}/hooks/mempal-hook.sh\" session-start"
}
]
}
Expand All @@ -17,7 +17,7 @@
"hooks": [
{
"type": "command",
"command": "${CODEX_PLUGIN_ROOT}/hooks/mempal-hook.sh stop"
"command": "\"${CODEX_PLUGIN_ROOT}/hooks/mempal-hook.sh\" stop"
}
]
}
Expand All @@ -28,7 +28,7 @@
"hooks": [
{
"type": "command",
"command": "${CODEX_PLUGIN_ROOT}/hooks/mempal-hook.sh precompact"
"command": "\"${CODEX_PLUGIN_ROOT}/hooks/mempal-hook.sh\" precompact"
}
]
}
Expand Down
2 changes: 1 addition & 1 deletion .codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "mempalace",
"version": "3.3.4",
"version": "3.3.5",
"description": "Give your AI a memory — mine projects and conversations into a searchable palace. 19 MCP tools, auto-save hooks, and guided setup.",
"author": {
"name": "milla-jovovich"
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/deploy-docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ jobs:

- name: Configure GitHub Pages
id: pages
uses: actions/configure-pages@v5
uses: actions/configure-pages@v6

- uses: oven-sh/setup-bun@v2
with:
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ venv/

# ChromaDB local data
*.sqlite3-journal
.envrc

# MemPalace per-project files (issue #185)
mempalace.yaml
Expand Down
1 change: 1 addition & 0 deletions .python-version
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
3.12
38 changes: 31 additions & 7 deletions CHANGELOG.md

Large diffs are not rendered by default.

12 changes: 6 additions & 6 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,26 +36,26 @@ We do not accept summarization of user content, cloud storage/sync features, tel
## Setup

```bash
pip install -e ".[dev]"
uv sync --extra dev # recommended; or: pip install -e ".[dev]"
```

## Commands

```bash
# Run tests
python -m pytest tests/ -v --ignore=tests/benchmarks
uv run pytest tests/ -v --ignore=tests/benchmarks

# Run tests with coverage
python -m pytest tests/ -v --ignore=tests/benchmarks --cov=mempalace --cov-report=term-missing
uv run pytest tests/ -v --ignore=tests/benchmarks --cov=mempalace --cov-report=term-missing

# Lint
ruff check .
uv run ruff check .

# Format
ruff format .
uv run ruff format .

# Format check (CI mode)
ruff format --check .
uv run ruff format --check .
```

## Project Structure
Expand Down
26 changes: 21 additions & 5 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,17 @@ git clone https://github.com/<your-username>/mempalace.git
cd mempalace
git remote add upstream https://github.com/MemPalace/mempalace.git

pip install -e ".[dev]" # installs with dev dependencies (pytest, build, twine)
# Recommended: uv (https://docs.astral.sh/uv/) handles the venv for you
uv sync --extra dev

# Or with pip in your own venv:
# pip install -e ".[dev]"
```

## Running Tests

```bash
pytest tests/ -v
uv run pytest tests/ -v
```

All tests must pass before submitting a PR. Tests should run without API keys or network access.
Expand All @@ -25,10 +29,10 @@ All tests must pass before submitting a PR. Tests should run without API keys or

```bash
# Quick test (20 questions, ~30 seconds)
python benchmarks/longmemeval_bench.py /path/to/longmemeval_s_cleaned.json --limit 20
uv run python benchmarks/longmemeval_bench.py /path/to/longmemeval_s_cleaned.json --limit 20

# Full benchmark (500 questions, ~5 minutes)
python benchmarks/longmemeval_bench.py /path/to/longmemeval_s_cleaned.json
uv run python benchmarks/longmemeval_bench.py /path/to/longmemeval_s_cleaned.json
```

See [benchmarks/README.md](benchmarks/README.md) for data download instructions and reproduction guide.
Expand All @@ -49,7 +53,7 @@ assets/ ← logo + brand
1. Fork the repo and create a feature branch: `git checkout -b feat/my-thing`
2. Write your code
3. Add or update tests if applicable
4. Run `pytest tests/ -v` — everything must pass
4. Run `uv run pytest tests/ -v` — everything must pass
5. Commit with a clear message following [conventional commits](https://www.conventionalcommits.org/):
- `feat: add Notion export format`
- `fix: handle empty transcript files`
Expand Down Expand Up @@ -93,3 +97,15 @@ If you're planning a significant change, open an issue first to discuss the appr
## License

MIT — your contributions will be released under the same license.

## Git identity for contributions

Before pushing commits, verify that Git is configured with an email address that GitHub can associate with your account:

```bash
git config user.name
git config user.email
```

This is especially important when commits are created through agentic coding tools or automation, because those tools may not inherit your normal shell Git configuration. Avoid placeholder values such as `your@email.com` or localized template text; unresolved author emails can create avoidable provenance and SBOM review friction for downstream users.

17 changes: 13 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@
> domain — including `mempalace.tech` — is an impostor and may distribute
> malware. Details and timeline: [docs/HISTORY.md](docs/HISTORY.md).

> [!IMPORTANT]
> **🚨 Claude Code sessions expire in 30 days w/out auto-save hooks wired!** **[Read this →](https://github.com/MemPalace/mempalace/discussions/1388)**


<div align="center">

<img src="assets/mempalace_logo.png" alt="MemPalace" width="240">
Expand Down Expand Up @@ -45,11 +49,16 @@ Architecture, concepts, and mining flows:

## Install

We recommend [`uv`](https://docs.astral.sh/uv/) — `uv tool install` puts
the `mempalace` CLI in an isolated environment on your PATH:

```bash
pip install mempalace
uv tool install mempalace
mempalace init ~/projects/myapp
```

If you prefer pip, `pip install mempalace` still works.

## Quickstart

```bash
Expand Down Expand Up @@ -116,9 +125,9 @@ own research page for their published numbers.
```bash
git clone https://github.com/MemPalace/mempalace.git
cd mempalace
pip install -e ".[dev]"
uv sync --extra dev # or: pip install -e ".[dev]"
# see benchmarks/README.md for dataset download commands
python benchmarks/longmemeval_bench.py /path/to/longmemeval_s_cleaned.json
uv run python benchmarks/longmemeval_bench.py /path/to/longmemeval_s_cleaned.json
```

---
Expand Down Expand Up @@ -182,7 +191,7 @@ PRs welcome. See [CONTRIBUTING.md](CONTRIBUTING.md).
MIT — see [LICENSE](LICENSE).

<!-- Link Definitions -->
[version-shield]: https://img.shields.io/badge/version-3.3.4-4dc9f6?style=flat-square&labelColor=0a0e14
[version-shield]: https://img.shields.io/badge/version-3.3.5-4dc9f6?style=flat-square&labelColor=0a0e14
[release-link]: https://github.com/MemPalace/mempalace/releases
[python-shield]: https://img.shields.io/badge/python-3.9+-7dd8f8?style=flat-square&labelColor=0a0e14&logo=python&logoColor=7dd8f8
[python-link]: https://www.python.org/
Expand Down
6 changes: 3 additions & 3 deletions benchmarks/BENCHMARKS.md
Original file line number Diff line number Diff line change
Expand Up @@ -344,7 +344,7 @@ The palace classifies each question into one of 5 halls. Pass 1 searches only wi
```bash
git clone https://github.com/MemPalace/mempalace.git
cd mempalace
pip install -e ".[dev]"
uv sync --extra dev # or: pip install -e ".[dev]"
mkdir -p /tmp/longmemeval-data
curl -fsSL -o /tmp/longmemeval-data/longmemeval_s_cleaned.json \
https://huggingface.co/datasets/xiaowu0162/longmemeval-cleaned/resolve/main/longmemeval_s_cleaned.json
Expand Down Expand Up @@ -724,8 +724,8 @@ python benchmarks/longmemeval_bench.py /tmp/longmemeval-data/longmemeval_s_clean
The question: how much of the 96.6% → 99.4% improvement is the heuristics, and how much would come from just using a better embedding model?

```bash
pip install fastembed
python benchmarks/longmemeval_bench.py /tmp/longmemeval-data/longmemeval_s_cleaned.json \
uv pip install fastembed # or: pip install fastembed
uv run python benchmarks/longmemeval_bench.py /tmp/longmemeval-data/longmemeval_s_cleaned.json \
--mode raw --embed-model bge-large
```

Expand Down
2 changes: 1 addition & 1 deletion benchmarks/HYBRID_MODE.md
Original file line number Diff line number Diff line change
Expand Up @@ -198,7 +198,7 @@ python benchmarks/longmemeval_bench.py data/longmemeval_s_cleaned.json --mode hy
# Setup
git clone https://github.com/MemPalace/mempalace.git
cd mempalace
pip install -e ".[dev]"
uv sync --extra dev # or: pip install -e ".[dev]"

# Download data
mkdir -p /tmp/longmemeval-data
Expand Down
2 changes: 1 addition & 1 deletion benchmarks/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ Run the exact same benchmarks we report. Clone, install, run.
```bash
git clone https://github.com/MemPalace/mempalace.git
cd mempalace
pip install -e ".[dev]"
uv sync --extra dev # or: pip install -e ".[dev]"
```

## Benchmark 1: LongMemEval (500 questions)
Expand Down
19 changes: 13 additions & 6 deletions examples/gemini_cli_setup.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,24 @@ This guide explains how to set up MemPalace as a permanent memory for the [Gemin

## 1. Installation

On many Linux systems, installing Python packages globally is restricted. We recommend using a local virtual environment within the MemPalace directory.
On many Linux systems, installing Python packages globally is restricted. We
recommend [`uv`](https://docs.astral.sh/uv/), which creates and manages a
local virtual environment for you.

```bash
# Clone the repository (if you haven't already)
git clone https://github.com/MemPalace/mempalace.git
cd mempalace

# Create a virtual environment
python3 -m venv .venv
# Create the venv and install MemPalace + dependencies in editable mode
uv sync
```

This produces a `.venv/` directory inside the repo with everything installed.
If you prefer plain pip:

# Install dependencies and MemPalace in editable mode
```bash
python3 -m venv .venv
.venv/bin/pip install -e .
```

Expand All @@ -29,7 +36,7 @@ Set up your "Palace" (the database) and configure your identity.

```bash
# Initialize the palace in the current directory
.venv/bin/python3 -m mempalace init .
uv run python -m mempalace init .
```

### Identity and Wings (Optional but Recommended)
Expand Down Expand Up @@ -86,7 +93,7 @@ Once connected, Gemini CLI will automatically:
### Manual Mining
If you want the AI to learn from your existing code or docs immediately, run the "mine" command:
```bash
.venv/bin/python3 -m mempalace mine /path/to/your/project
uv run python -m mempalace mine /path/to/your/project
```

### Verification
Expand Down
4 changes: 2 additions & 2 deletions integrations/openclaw/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -102,10 +102,10 @@ You have access to a local memory palace via MCP tools. The palace stores verbat

## Setup

Install MemPalace and populate the palace:
Install MemPalace and populate the palace (uv recommended):

```bash
pip install mempalace
uv tool install mempalace # or: pip install mempalace
mempalace init ~/my-convos
mempalace mine ~/my-convos
```
Expand Down
Loading