memgit 0.12.0__tar.gz → 0.14.0__tar.gz
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.
- {memgit-0.12.0 → memgit-0.14.0}/PKG-INFO +40 -7
- {memgit-0.12.0 → memgit-0.14.0}/README.md +37 -4
- {memgit-0.12.0 → memgit-0.14.0}/memgit/__init__.py +1 -1
- {memgit-0.12.0 → memgit-0.14.0}/memgit/cli.py +299 -38
- memgit-0.14.0/memgit/cloud/__init__.py +7 -0
- memgit-0.14.0/memgit/cloud/auto.py +278 -0
- {memgit-0.12.0 → memgit-0.14.0}/memgit/cloud/commands.py +131 -4
- {memgit-0.12.0 → memgit-0.14.0}/memgit/cloud/sync.py +17 -0
- {memgit-0.12.0 → memgit-0.14.0}/memgit/delivery.py +3 -1
- memgit-0.14.0/memgit/drift.py +191 -0
- {memgit-0.12.0 → memgit-0.14.0}/memgit/env.py +13 -0
- memgit-0.14.0/memgit/gate.py +431 -0
- {memgit-0.12.0 → memgit-0.14.0}/memgit/hooks.py +166 -9
- {memgit-0.12.0 → memgit-0.14.0}/memgit/http_server.py +5 -0
- {memgit-0.12.0 → memgit-0.14.0}/memgit/links.py +76 -0
- memgit-0.14.0/memgit/markup.py +279 -0
- {memgit-0.12.0 → memgit-0.14.0}/memgit/mcp_server.py +186 -11
- {memgit-0.12.0 → memgit-0.14.0}/memgit/metrics.py +22 -1
- {memgit-0.12.0 → memgit-0.14.0}/memgit/models.py +5 -0
- {memgit-0.12.0 → memgit-0.14.0}/memgit/repo.py +64 -14
- {memgit-0.12.0 → memgit-0.14.0}/memgit/scorer.py +19 -0
- {memgit-0.12.0 → memgit-0.14.0}/memgit/toon.py +29 -0
- {memgit-0.12.0 → memgit-0.14.0}/memgit.egg-info/PKG-INFO +40 -7
- {memgit-0.12.0 → memgit-0.14.0}/memgit.egg-info/SOURCES.txt +9 -0
- {memgit-0.12.0 → memgit-0.14.0}/pyproject.toml +9 -2
- memgit-0.14.0/tests/test_action_gate.py +424 -0
- memgit-0.14.0/tests/test_cloud_autosync.py +248 -0
- memgit-0.14.0/tests/test_cloud_two_machines.py +136 -0
- memgit-0.14.0/tests/test_markup.py +233 -0
- memgit-0.14.0/tests/test_mcp_store_bootstrap.py +69 -0
- {memgit-0.12.0 → memgit-0.14.0}/tests/test_v030.py +3 -0
- {memgit-0.12.0 → memgit-0.14.0}/tests/test_version_stamps.py +16 -4
- memgit-0.12.0/memgit/cloud/__init__.py +0 -6
- {memgit-0.12.0 → memgit-0.14.0}/LICENSE +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/memgit/audit.py +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/memgit/backup.py +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/memgit/cloud/client.py +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/memgit/cloud/crypto.py +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/memgit/cloud/state.py +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/memgit/evaluate.py +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/memgit/gitdigest.py +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/memgit/graph.py +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/memgit/importer.py +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/memgit/license.py +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/memgit/org.py +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/memgit/project.py +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/memgit/sanitize.py +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/memgit/savings.py +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/memgit/store.py +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/memgit/tiers.py +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/memgit/tokens.py +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/memgit/usage.py +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/memgit.egg-info/dependency_links.txt +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/memgit.egg-info/entry_points.txt +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/memgit.egg-info/requires.txt +2 -2
- {memgit-0.12.0 → memgit-0.14.0}/memgit.egg-info/top_level.txt +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/setup.cfg +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/tests/test_accrue.py +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/tests/test_advanced.py +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/tests/test_aliases.py +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/tests/test_audit.py +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/tests/test_backup.py +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/tests/test_cloud_guard.py +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/tests/test_core.py +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/tests/test_delivery.py +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/tests/test_dependency_floor.py +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/tests/test_env_inventory.py +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/tests/test_git_args.py +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/tests/test_license.py +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/tests/test_lock_exclusion.py +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/tests/test_org.py +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/tests/test_savings.py +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/tests/test_server_lifecycle.py +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/tests/test_setup.py +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/tests/test_store_repo.py +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/tests/test_tiers.py +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/tests/test_toon.py +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/tests/test_v020.py +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/tests/test_v040.py +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/tests/test_v060.py +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/tests/test_v070.py +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/tests/test_v080.py +0 -0
- {memgit-0.12.0 → memgit-0.14.0}/tests/test_v081.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: memgit
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.14.0
|
|
4
4
|
Summary: Git for AI memory — version-controlled context persistence across Claude, GPT, Gemini, Cursor, Windsurf, and more
|
|
5
5
|
License: MIT
|
|
6
6
|
Project-URL: Homepage, https://memgit.dev
|
|
@@ -22,14 +22,14 @@ License-File: LICENSE
|
|
|
22
22
|
Requires-Dist: click>=8.0
|
|
23
23
|
Requires-Dist: rich>=13.0
|
|
24
24
|
Requires-Dist: mcp<2,>=1.28.1
|
|
25
|
+
Requires-Dist: pynacl>=1.5
|
|
26
|
+
Requires-Dist: httpx>=0.27
|
|
25
27
|
Provides-Extra: dev
|
|
26
28
|
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
27
29
|
Requires-Dist: pytest-anyio>=0.0.0; extra == "dev"
|
|
28
30
|
Provides-Extra: tokens
|
|
29
31
|
Requires-Dist: tiktoken>=0.7; extra == "tokens"
|
|
30
32
|
Provides-Extra: cloud
|
|
31
|
-
Requires-Dist: pynacl>=1.5; extra == "cloud"
|
|
32
|
-
Requires-Dist: httpx>=0.27; extra == "cloud"
|
|
33
33
|
Dynamic: license-file
|
|
34
34
|
|
|
35
35
|
<p align="center">
|
|
@@ -160,7 +160,7 @@ pip install memgit
|
|
|
160
160
|
```
|
|
161
161
|
(The Chocolatey package is live on community.chocolatey.org; newly pushed versions can take a few days to clear moderation — `pip install memgit` always has the latest.)
|
|
162
162
|
|
|
163
|
-
**Any AI tool config (
|
|
163
|
+
**Any AI tool config (needs Python 3.11+ on PATH; npx installs memgit into its own environment on first run and creates the store):**
|
|
164
164
|
```json
|
|
165
165
|
{ "mcpServers": { "memgit": { "command": "npx", "args": ["-y", "memgit-mcp"] } } }
|
|
166
166
|
```
|
|
@@ -216,15 +216,16 @@ memgit resume --json # for tooling
|
|
|
216
216
|
Wire it into Claude Code so memory becomes **automatic** — no tool call, no judgment required:
|
|
217
217
|
|
|
218
218
|
```bash
|
|
219
|
-
memgit setup hooks # installs all
|
|
219
|
+
memgit setup hooks # installs all six hooks (~/.claude/settings.json)
|
|
220
220
|
```
|
|
221
221
|
|
|
222
222
|
| Hook | What it enforces |
|
|
223
223
|
|---|---|
|
|
224
224
|
| `SessionStart` | every session opens with the resume digest in context — status board, checkpoints, critical rules, memory index |
|
|
225
225
|
| `UserPromptSubmit` | each prompt is BM25-matched against the store; relevant memories are injected, ending with a "+N more on '<topic>'" depth hint when more exists (silent when nothing clears the relevance bar; never repeats within a session) — `--no-recall` to skip |
|
|
226
|
+
| `PreToolUse` | a Bash or file-write call that matches a memory's triggers is refused with the rule as the reason (priority-3 feedback and conventions) or gets the rule as context (the rest). memgit allow SLUG opens a short override window. Trigger cache only, `--no-gate` to skip |
|
|
226
227
|
| `PostToolUse` | reading a file whose path matches a memory tag surfaces a one-line hint ("6 memories tagged 'x' relate to this path") — tagmap cache only, capped 3/session, `--no-ctx-recall` to skip |
|
|
227
|
-
| `Stop` (guard) | a session that did real work but saved nothing gets ONE
|
|
228
|
+
| `Stop` (guard) | a governed call that went through without the gate, or a session that did real work but saved nothing, gets ONE block before finishing. `--no-guard` to skip |
|
|
228
229
|
| `Stop` (sync) | markdown memories are checkpointed asynchronously at session end |
|
|
229
230
|
|
|
230
231
|
Why hooks and not just good tool descriptions? We measured it: across 166 real sessions, hook-injected context was delivered in **100%** of them while voluntary memory-tool calls happened in **6%**. What a hook enforces happens.
|
|
@@ -284,6 +285,8 @@ Once registered via MCP, every AI tool gets 6 tools:
|
|
|
284
285
|
|
|
285
286
|
The tool descriptions teach the AI **judgment** — "does this request depend on state you don't have in context?" — rather than keyword triggers. Measured cost of the whole tool surface: ~1,150 tokens once per session; a `resume_session` reply is ~335.
|
|
286
287
|
|
|
288
|
+
**A save that arrives damaged is refused, not stored** (v0.13.0). A model sometimes closes a value with a tag named after the field (`</rule>`), and the host then delivers the next parameters inside that value: `why`, `when`, `tags` and `type_code` never arrive, and the memory is stored with defaults. On one machine that was 748 of 3,025 saves. `save_memory` now refuses any value carrying tool-call markup, names the field and the parameters it swallowed, and the model retries in the same turn. Markup quoted on purpose inside backticks is allowed. Every successful save echoes the length of each field it stored, which fields arrived empty, and which values came from a default. Damaged memories already in a store are never served back into context: the digest, the recall hook and read results show each field cut at the damage. `memgit doctor` counts them, and `memgit doctor --repair-markup` splits them back into their fields.
|
|
289
|
+
|
|
287
290
|
---
|
|
288
291
|
|
|
289
292
|
## Core operating guide (v0.5.0)
|
|
@@ -323,6 +326,29 @@ memgit pro deactivate # remove the key from this machine
|
|
|
323
326
|
exports keep working.
|
|
324
327
|
- If this store is logged in to memgit cloud, `pro activate` also upgrades that account.
|
|
325
328
|
|
|
329
|
+
### Sync between machines and with a team
|
|
330
|
+
|
|
331
|
+
```bash
|
|
332
|
+
memgit cloud signup --email you@example.com # 14-day trial; keys are made on this machine
|
|
333
|
+
memgit cloud team create myteam
|
|
334
|
+
memgit cloud link myteam/memory # creates the cloud repo on first link
|
|
335
|
+
memgit cloud auto on # every save syncs in the background from now on
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
With autosync on, each save (including every `save_memory` your AI makes) starts one
|
|
339
|
+
background pull-then-push and returns immediately, and each session start pulls what other
|
|
340
|
+
machines saved. `memgit cloud auto status` shows the last run and why it would not run.
|
|
341
|
+
|
|
342
|
+
On a machine that runs an agent but no interactive sessions (a Mac mini, a VM), log in and
|
|
343
|
+
link once, then keep it current under systemd or launchd:
|
|
344
|
+
|
|
345
|
+
```bash
|
|
346
|
+
memgit cloud watch --interval 60 # pull and push forever, one JSON line per run
|
|
347
|
+
memgit cloud watch --export ~/agent/.hermes.md # also write the digest for agents that read context files
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
Everything leaves the machine end-to-end encrypted; the server stores ciphertext only.
|
|
351
|
+
|
|
326
352
|
---
|
|
327
353
|
|
|
328
354
|
## Backups that actually happen
|
|
@@ -415,6 +441,8 @@ memgit doctor # hygiene + scope losses: split labels, quaran
|
|
|
415
441
|
memgit doctor --audit # every split and stranded label, the save landing rate, throughput
|
|
416
442
|
memgit doctor --audit --json # the same report as JSON
|
|
417
443
|
memgit doctor --relabel map.json # bulk re-project memories ({"slug": "Label" | ""}); one checkpoint
|
|
444
|
+
memgit doctor --repair-markup # dry run: memories whose fields swallowed other parameters on save
|
|
445
|
+
memgit doctor --repair-markup --yes [--project LABEL] # split them back into their fields; one checkpoint
|
|
418
446
|
memgit lint # validate all memories (flags unknown provenance)
|
|
419
447
|
memgit fsck # verify store integrity
|
|
420
448
|
|
|
@@ -441,7 +469,9 @@ memgit setup cline
|
|
|
441
469
|
memgit setup continue
|
|
442
470
|
memgit setup gemini-cli
|
|
443
471
|
memgit setup hooks # Claude Code hooks: resume at start, per-prompt recall,
|
|
444
|
-
#
|
|
472
|
+
# action gate on Bash and file writes, compliance and
|
|
473
|
+
# capture guard + auto-sync at stop (--no-recall / --no-guard / --no-gate)
|
|
474
|
+
memgit doctor --rules # critical rules next to same-topic lines in CLAUDE.md, AGENTS.md, ...
|
|
445
475
|
|
|
446
476
|
# Pro (licence key)
|
|
447
477
|
memgit pro activate <key> # Polar-issued key; unlocks hosted E2E sync
|
|
@@ -506,6 +536,9 @@ memgit talks to nothing.
|
|
|
506
536
|
| Cloud sync | `MEMGIT_CLOUD_API` | Overrides the memgit cloud API base URL. |
|
|
507
537
|
| | `MEMGIT_CLOUD_APP` | Overrides the memgit cloud web app base URL used in printed links. |
|
|
508
538
|
| | `MEMGIT_CLOUD_NO_CACHE` | Set to 1/true/yes to keep decrypted keys out of credentials.json; the passphrase is then re-prompted per command. |
|
|
539
|
+
| | `MEMGIT_NO_AUTOSYNC` | Set to 1/true/yes to stop saves and session starts from syncing to memgit cloud in the background, for this process only. |
|
|
540
|
+
| | `MEMGIT_AUTOSYNC_MAX_AGE` | Seconds after which a read (search, recall, an MCP lookup) starts a background fetch from memgit cloud (default 300). 0 turns read-triggered fetching off; saves and session starts still sync. |
|
|
541
|
+
| | `MEMGIT_AUTOSYNC_WAIT` | Seconds a session start waits for the fetch from memgit cloud before rendering the digest (default 3). 0 never waits. |
|
|
509
542
|
| Tuning | `MEMGIT_LOCK_TIMEOUT` | Seconds a writer waits for the store lock before giving up (default 10). |
|
|
510
543
|
| | `MEMGIT_IDLE_EVICT_SECONDS` | Idle seconds before the MCP server drops its in-memory caches while staying connected (default 900). |
|
|
511
544
|
| | `MEMGIT_HOUSEKEEPING_INTERVAL` | Seconds between the MCP server's housekeeping passes. |
|
|
@@ -126,7 +126,7 @@ pip install memgit
|
|
|
126
126
|
```
|
|
127
127
|
(The Chocolatey package is live on community.chocolatey.org; newly pushed versions can take a few days to clear moderation — `pip install memgit` always has the latest.)
|
|
128
128
|
|
|
129
|
-
**Any AI tool config (
|
|
129
|
+
**Any AI tool config (needs Python 3.11+ on PATH; npx installs memgit into its own environment on first run and creates the store):**
|
|
130
130
|
```json
|
|
131
131
|
{ "mcpServers": { "memgit": { "command": "npx", "args": ["-y", "memgit-mcp"] } } }
|
|
132
132
|
```
|
|
@@ -182,15 +182,16 @@ memgit resume --json # for tooling
|
|
|
182
182
|
Wire it into Claude Code so memory becomes **automatic** — no tool call, no judgment required:
|
|
183
183
|
|
|
184
184
|
```bash
|
|
185
|
-
memgit setup hooks # installs all
|
|
185
|
+
memgit setup hooks # installs all six hooks (~/.claude/settings.json)
|
|
186
186
|
```
|
|
187
187
|
|
|
188
188
|
| Hook | What it enforces |
|
|
189
189
|
|---|---|
|
|
190
190
|
| `SessionStart` | every session opens with the resume digest in context — status board, checkpoints, critical rules, memory index |
|
|
191
191
|
| `UserPromptSubmit` | each prompt is BM25-matched against the store; relevant memories are injected, ending with a "+N more on '<topic>'" depth hint when more exists (silent when nothing clears the relevance bar; never repeats within a session) — `--no-recall` to skip |
|
|
192
|
+
| `PreToolUse` | a Bash or file-write call that matches a memory's triggers is refused with the rule as the reason (priority-3 feedback and conventions) or gets the rule as context (the rest). memgit allow SLUG opens a short override window. Trigger cache only, `--no-gate` to skip |
|
|
192
193
|
| `PostToolUse` | reading a file whose path matches a memory tag surfaces a one-line hint ("6 memories tagged 'x' relate to this path") — tagmap cache only, capped 3/session, `--no-ctx-recall` to skip |
|
|
193
|
-
| `Stop` (guard) | a session that did real work but saved nothing gets ONE
|
|
194
|
+
| `Stop` (guard) | a governed call that went through without the gate, or a session that did real work but saved nothing, gets ONE block before finishing. `--no-guard` to skip |
|
|
194
195
|
| `Stop` (sync) | markdown memories are checkpointed asynchronously at session end |
|
|
195
196
|
|
|
196
197
|
Why hooks and not just good tool descriptions? We measured it: across 166 real sessions, hook-injected context was delivered in **100%** of them while voluntary memory-tool calls happened in **6%**. What a hook enforces happens.
|
|
@@ -250,6 +251,8 @@ Once registered via MCP, every AI tool gets 6 tools:
|
|
|
250
251
|
|
|
251
252
|
The tool descriptions teach the AI **judgment** — "does this request depend on state you don't have in context?" — rather than keyword triggers. Measured cost of the whole tool surface: ~1,150 tokens once per session; a `resume_session` reply is ~335.
|
|
252
253
|
|
|
254
|
+
**A save that arrives damaged is refused, not stored** (v0.13.0). A model sometimes closes a value with a tag named after the field (`</rule>`), and the host then delivers the next parameters inside that value: `why`, `when`, `tags` and `type_code` never arrive, and the memory is stored with defaults. On one machine that was 748 of 3,025 saves. `save_memory` now refuses any value carrying tool-call markup, names the field and the parameters it swallowed, and the model retries in the same turn. Markup quoted on purpose inside backticks is allowed. Every successful save echoes the length of each field it stored, which fields arrived empty, and which values came from a default. Damaged memories already in a store are never served back into context: the digest, the recall hook and read results show each field cut at the damage. `memgit doctor` counts them, and `memgit doctor --repair-markup` splits them back into their fields.
|
|
255
|
+
|
|
253
256
|
---
|
|
254
257
|
|
|
255
258
|
## Core operating guide (v0.5.0)
|
|
@@ -289,6 +292,29 @@ memgit pro deactivate # remove the key from this machine
|
|
|
289
292
|
exports keep working.
|
|
290
293
|
- If this store is logged in to memgit cloud, `pro activate` also upgrades that account.
|
|
291
294
|
|
|
295
|
+
### Sync between machines and with a team
|
|
296
|
+
|
|
297
|
+
```bash
|
|
298
|
+
memgit cloud signup --email you@example.com # 14-day trial; keys are made on this machine
|
|
299
|
+
memgit cloud team create myteam
|
|
300
|
+
memgit cloud link myteam/memory # creates the cloud repo on first link
|
|
301
|
+
memgit cloud auto on # every save syncs in the background from now on
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
With autosync on, each save (including every `save_memory` your AI makes) starts one
|
|
305
|
+
background pull-then-push and returns immediately, and each session start pulls what other
|
|
306
|
+
machines saved. `memgit cloud auto status` shows the last run and why it would not run.
|
|
307
|
+
|
|
308
|
+
On a machine that runs an agent but no interactive sessions (a Mac mini, a VM), log in and
|
|
309
|
+
link once, then keep it current under systemd or launchd:
|
|
310
|
+
|
|
311
|
+
```bash
|
|
312
|
+
memgit cloud watch --interval 60 # pull and push forever, one JSON line per run
|
|
313
|
+
memgit cloud watch --export ~/agent/.hermes.md # also write the digest for agents that read context files
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
Everything leaves the machine end-to-end encrypted; the server stores ciphertext only.
|
|
317
|
+
|
|
292
318
|
---
|
|
293
319
|
|
|
294
320
|
## Backups that actually happen
|
|
@@ -381,6 +407,8 @@ memgit doctor # hygiene + scope losses: split labels, quaran
|
|
|
381
407
|
memgit doctor --audit # every split and stranded label, the save landing rate, throughput
|
|
382
408
|
memgit doctor --audit --json # the same report as JSON
|
|
383
409
|
memgit doctor --relabel map.json # bulk re-project memories ({"slug": "Label" | ""}); one checkpoint
|
|
410
|
+
memgit doctor --repair-markup # dry run: memories whose fields swallowed other parameters on save
|
|
411
|
+
memgit doctor --repair-markup --yes [--project LABEL] # split them back into their fields; one checkpoint
|
|
384
412
|
memgit lint # validate all memories (flags unknown provenance)
|
|
385
413
|
memgit fsck # verify store integrity
|
|
386
414
|
|
|
@@ -407,7 +435,9 @@ memgit setup cline
|
|
|
407
435
|
memgit setup continue
|
|
408
436
|
memgit setup gemini-cli
|
|
409
437
|
memgit setup hooks # Claude Code hooks: resume at start, per-prompt recall,
|
|
410
|
-
#
|
|
438
|
+
# action gate on Bash and file writes, compliance and
|
|
439
|
+
# capture guard + auto-sync at stop (--no-recall / --no-guard / --no-gate)
|
|
440
|
+
memgit doctor --rules # critical rules next to same-topic lines in CLAUDE.md, AGENTS.md, ...
|
|
411
441
|
|
|
412
442
|
# Pro (licence key)
|
|
413
443
|
memgit pro activate <key> # Polar-issued key; unlocks hosted E2E sync
|
|
@@ -472,6 +502,9 @@ memgit talks to nothing.
|
|
|
472
502
|
| Cloud sync | `MEMGIT_CLOUD_API` | Overrides the memgit cloud API base URL. |
|
|
473
503
|
| | `MEMGIT_CLOUD_APP` | Overrides the memgit cloud web app base URL used in printed links. |
|
|
474
504
|
| | `MEMGIT_CLOUD_NO_CACHE` | Set to 1/true/yes to keep decrypted keys out of credentials.json; the passphrase is then re-prompted per command. |
|
|
505
|
+
| | `MEMGIT_NO_AUTOSYNC` | Set to 1/true/yes to stop saves and session starts from syncing to memgit cloud in the background, for this process only. |
|
|
506
|
+
| | `MEMGIT_AUTOSYNC_MAX_AGE` | Seconds after which a read (search, recall, an MCP lookup) starts a background fetch from memgit cloud (default 300). 0 turns read-triggered fetching off; saves and session starts still sync. |
|
|
507
|
+
| | `MEMGIT_AUTOSYNC_WAIT` | Seconds a session start waits for the fetch from memgit cloud before rendering the digest (default 3). 0 never waits. |
|
|
475
508
|
| Tuning | `MEMGIT_LOCK_TIMEOUT` | Seconds a writer waits for the store lock before giving up (default 10). |
|
|
476
509
|
| | `MEMGIT_IDLE_EVICT_SECONDS` | Idle seconds before the MCP server drops its in-memory caches while staying connected (default 900). |
|
|
477
510
|
| | `MEMGIT_HOUSEKEEPING_INTERVAL` | Seconds between the MCP server's housekeeping passes. |
|