mindkeeper-openclaw 0.2.24 → 0.2.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,15 +2,35 @@
2
2
 
3
3
  **Time Machine for Your AI's Brain** — OpenClaw plugin that gives your AI version control for agent context files.
4
4
 
5
- Every change to AGENTS.md, SOUL.md, MEMORY.md, skills, and more is automatically tracked. Your AI can browse history, compare versions, create checkpoints, and roll back any file.
5
+ Every change to `AGENTS.md`, `SOUL.md`, `MEMORY.md`, `memory/**/*.md`, and `skills/**/*.md` can be tracked automatically. Your AI can inspect history, compare versions, create checkpoints, and guide rollback safely.
6
+
7
+ ## Why Use It
8
+
9
+ This is the best experience if you want your AI to inspect history, show diffs, create checkpoints, and guide rollback in natural language:
10
+
11
+ - **Natural-language history** — ask your AI what changed and when
12
+ - **Preview-first rollback** — inspect the diff before restoring a file
13
+ - **Named checkpoints** — create safety points before risky edits
14
+ - **Background snapshots** — watcher starts with Gateway
15
+ - **LLM-powered commit messages** — reuse your existing OpenClaw model and auth settings
6
16
 
7
17
  ## Install
8
18
 
19
+ ### Option 1 — Install the plugin directly
20
+
9
21
  ```bash
10
22
  openclaw plugins install mindkeeper-openclaw
11
23
  ```
12
24
 
13
- Restart your Gateway once. The plugin auto-starts a background watcher and registers 5 tools.
25
+ Then restart your Gateway once.
26
+
27
+ ### Option 2 — Install the skill and let the AI guide setup
28
+
29
+ ```bash
30
+ clawhub install mindkeeper
31
+ ```
32
+
33
+ On first use, the AI checks whether `mindkeeper-openclaw` is available. If it is missing, the AI asks for your confirmation before installing the plugin and before restarting Gateway. If automatic restart is unavailable, it tells you to restart Gateway manually.
14
34
 
15
35
  ## Talk to Your AI
16
36
 
@@ -25,29 +45,34 @@ Once installed, ask in natural language:
25
45
 
26
46
  | Tool | What It Does |
27
47
  |------|--------------|
28
- | `mind_history` | Browse change history for any tracked file |
29
- | `mind_diff` | Compare any two versions with full unified diff |
30
- | `mind_rollback` | Two-step rollback: preview first, then execute after confirmation |
48
+ | `mind_history` | Browse change history for one file or all tracked files |
49
+ | `mind_diff` | Compare two versions with a unified diff |
50
+ | `mind_rollback` | Preview rollback first, then execute after confirmation |
31
51
  | `mind_snapshot` | Create named checkpoints before risky changes |
32
- | `mind_status` | Show what files are tracked and what's changed |
52
+ | `mind_status` | Show what files are tracked and what is pending |
33
53
 
34
54
  ## OpenClaw CLI
35
55
 
36
56
  ```bash
37
- openclaw mind status # See what's tracked and pending
38
- openclaw mind history SOUL.md # Browse SOUL.md change history
39
- openclaw mind snapshot stable-v2 # Save a named checkpoint
57
+ openclaw mind status
58
+ openclaw mind history SOUL.md
59
+ openclaw mind snapshot stable-v2
40
60
  ```
41
61
 
42
62
  ## Requirements
43
63
 
44
- - Node.js 22
64
+ - Node.js >= 22
45
65
  - OpenClaw with Gateway running
46
66
 
67
+ ## Commit Messages
68
+
69
+ OpenClaw Plugin mode is currently the only mode that supports LLM-generated commit messages. If no supported model or API key is available, mindkeeper falls back to template messages automatically.
70
+
47
71
  ## Links
48
72
 
49
73
  - [GitHub](https://github.com/seekcontext/mindkeeper)
50
74
  - [Core CLI](https://www.npmjs.com/package/mindkeeper) — Standalone version without OpenClaw
75
+ - [Mindkeeper Skill](https://github.com/seekcontext/mindkeeper/blob/main/packages/openclaw/skills/mindkeeper/SKILL.md)
51
76
 
52
77
  ## License
53
78
 
package/dist/index.js CHANGED
@@ -405,12 +405,12 @@ var IsomorphicGitStore = class {
405
405
  * when gitdir is separated from the work directory.
406
406
  */
407
407
  async getChangedFiles(filepaths) {
408
- const filesToCheck = filepaths ?? await this.listWorkdirFiles();
409
408
  let headOid = null;
410
409
  try {
411
410
  headOid = await import_isomorphic_git.default.resolveRef({ fs: import_node_fs.default, dir: this.workDir, gitdir: this.gitDir, ref: "HEAD" });
412
411
  } catch {
413
412
  }
413
+ const filesToCheck = filepaths ?? await this.listTrackedCandidates(headOid);
414
414
  const entries = [];
415
415
  for (const filepath of filesToCheck) {
416
416
  const fullPath = import_node_path.default.join(this.workDir, filepath);
@@ -443,6 +443,14 @@ var IsomorphicGitStore = class {
443
443
  }
444
444
  return entries;
445
445
  }
446
+ async listTrackedCandidates(headOid) {
447
+ const workdirFiles = await this.listWorkdirFiles();
448
+ if (!headOid) {
449
+ return workdirFiles;
450
+ }
451
+ const headFiles = await this.getCommitFiles(headOid);
452
+ return Array.from(/* @__PURE__ */ new Set([...workdirFiles, ...headFiles]));
453
+ }
446
454
  async listWorkdirFiles() {
447
455
  const files = [];
448
456
  await this.walkDir(this.workDir, this.workDir, files);
@@ -496,6 +504,7 @@ var SENSITIVE_FIELDS = ["commitMessage.llm.apiKey"];
496
504
  var DEFAULT_CONFIG = {
497
505
  tracking: {
498
506
  include: [
507
+ ".mindkeeper.json",
499
508
  "AGENTS.md",
500
509
  "SOUL.md",
501
510
  "USER.md",
@@ -684,6 +693,7 @@ var GITDIR_NAME = ".mindkeeper";
684
693
  var Tracker = class {
685
694
  store;
686
695
  config;
696
+ configLoaded;
687
697
  llmProvider;
688
698
  workDir;
689
699
  gitDir;
@@ -692,6 +702,7 @@ var Tracker = class {
692
702
  this.workDir = import_node_path3.default.resolve(options.workDir);
693
703
  this.gitDir = options.gitDir ? import_node_path3.default.resolve(options.gitDir) : import_node_path3.default.join(this.workDir, GITDIR_NAME);
694
704
  this.config = options.config ?? getDefaultConfig();
705
+ this.configLoaded = options.config !== void 0;
695
706
  this.configOverrides = options.configOverrides;
696
707
  this.llmProvider = options.llmProvider;
697
708
  this.store = new IsomorphicGitStore({
@@ -700,7 +711,7 @@ var Tracker = class {
700
711
  });
701
712
  }
702
713
  async init() {
703
- this.config = await loadConfig(this.workDir, this.configOverrides);
714
+ await this.ensureConfigLoaded();
704
715
  await this.store.init();
705
716
  await this.ensureGitignore();
706
717
  const changed = await this.getTrackedChangedFiles();
@@ -712,6 +723,7 @@ var Tracker = class {
712
723
  return { initialFiles: changed.map((e) => e.filepath) };
713
724
  }
714
725
  async snapshot(options) {
726
+ await this.ensureConfigLoaded();
715
727
  const changed = await this.getTrackedChangedFiles();
716
728
  const filesToCommit = changed.map((e) => e.filepath);
717
729
  if (filesToCommit.length > 0) {
@@ -777,21 +789,11 @@ var Tracker = class {
777
789
  };
778
790
  }
779
791
  async status() {
780
- let initialized = false;
781
- try {
782
- await this.resolveHead();
783
- initialized = true;
784
- } catch {
785
- initialized = false;
786
- }
792
+ await this.ensureConfigLoaded();
793
+ const initialized = await this.isInitialized();
787
794
  const pendingChanges = initialized ? await this.getTrackedChangedFiles() : [];
788
795
  const snapshots = initialized ? await this.store.listTags() : [];
789
- const trackedPatterns = this.config.tracking.include;
790
- let trackedFileCount = 0;
791
- if (initialized) {
792
- const allChanged = await this.store.getChangedFiles();
793
- trackedFileCount = allChanged.length + pendingChanges.length;
794
- }
796
+ const trackedFileCount = initialized ? await this.getTrackedFileCount() : 0;
795
797
  return {
796
798
  initialized,
797
799
  workDir: this.workDir,
@@ -802,6 +804,7 @@ var Tracker = class {
802
804
  };
803
805
  }
804
806
  async autoSnapshot() {
807
+ await this.ensureConfigLoaded();
805
808
  const changed = await this.getTrackedChangedFiles();
806
809
  if (changed.length === 0) return null;
807
810
  const filesToCommit = changed.map((e) => e.filepath);
@@ -842,6 +845,16 @@ var Tracker = class {
842
845
  const allChanged = await this.store.getChangedFiles();
843
846
  return allChanged.filter((entry) => this.isTracked(entry.filepath));
844
847
  }
848
+ async getTrackedFileCount() {
849
+ const files = new Set(await this.store.listWorkdirFiles());
850
+ const headOid = await this.resolveHead().catch(() => null);
851
+ if (headOid) {
852
+ for (const filepath of await this.store.getCommitFiles(headOid)) {
853
+ files.add(filepath);
854
+ }
855
+ }
856
+ return Array.from(files).filter((filepath) => this.isTracked(filepath)).length;
857
+ }
845
858
  isTracked(filepath) {
846
859
  const allExcluded = [...this.config.tracking.exclude, ...ALWAYS_EXCLUDED];
847
860
  for (const pattern of allExcluded) {
@@ -852,6 +865,21 @@ var Tracker = class {
852
865
  }
853
866
  return false;
854
867
  }
868
+ async ensureConfigLoaded() {
869
+ if (this.configLoaded) {
870
+ return;
871
+ }
872
+ this.config = await loadConfig(this.workDir, this.configOverrides);
873
+ this.configLoaded = true;
874
+ }
875
+ async isInitialized() {
876
+ try {
877
+ await import_promises3.default.access(import_node_path3.default.join(this.gitDir, "HEAD"));
878
+ return true;
879
+ } catch {
880
+ return false;
881
+ }
882
+ }
855
883
  async resolveHead() {
856
884
  const git2 = await import("isomorphic-git");
857
885
  const fs2 = await import("node:fs");
@@ -873,7 +901,11 @@ var Tracker = class {
873
901
  ${entry}
874
902
  `;
875
903
  await import_promises3.default.writeFile(gitignorePath, newContent, "utf-8");
876
- } catch {
904
+ } catch (err) {
905
+ const code = err?.code;
906
+ if (code !== "ENOENT") {
907
+ throw err;
908
+ }
877
909
  await import_promises3.default.writeFile(gitignorePath, `${entry}
878
910
  `, "utf-8");
879
911
  }
@@ -1167,11 +1199,10 @@ function createWatcherService(api, trackerRef) {
1167
1199
  config: ctx.config,
1168
1200
  log
1169
1201
  });
1170
- const configOverrides = api.pluginConfig;
1171
1202
  const tracker = new Tracker({
1172
1203
  workDir: workspaceDir,
1173
1204
  llmProvider: llmProvider ?? void 0,
1174
- configOverrides: configOverrides ?? void 0
1205
+ configOverrides: api.pluginConfig
1175
1206
  });
1176
1207
  await tracker.init();
1177
1208
  trackerRef.current = tracker;
@@ -1223,8 +1254,9 @@ function ensureToolsInConfig(api) {
1223
1254
  if (!cfg || !writeConfigFile) return;
1224
1255
  const allow = cfg.tools?.allow ?? [];
1225
1256
  const alsoAllow = cfg.tools?.alsoAllow ?? [];
1226
- const target = allow.length > 0 ? allow : alsoAllow;
1227
- const key = allow.length > 0 ? "allow" : "alsoAllow";
1257
+ const hasAllow = Array.isArray(cfg.tools?.allow);
1258
+ const target = hasAllow ? allow : alsoAllow;
1259
+ const key = hasAllow ? "allow" : "alsoAllow";
1228
1260
  const existing = new Set(
1229
1261
  target.map((e) => String(e).trim().toLowerCase()).filter(Boolean)
1230
1262
  );
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mindkeeper-openclaw",
3
- "version": "0.2.24",
3
+ "version": "0.2.26",
4
4
  "description": "OpenClaw plugin for mindkeeper: auto-snapshot, diff, and rollback for agent context files",
5
5
  "keywords": [
6
6
  "openclaw",
@@ -29,6 +29,14 @@
29
29
  "scripts/postinstall-merge-config.cjs",
30
30
  "README.md"
31
31
  ],
32
+ "scripts": {
33
+ "build": "node build.mjs",
34
+ "test": "vitest run",
35
+ "typecheck": "tsc --noEmit",
36
+ "clean": "rm -rf dist",
37
+ "prepublishOnly": "npm run clean && npm run build",
38
+ "postinstall": "node scripts/postinstall-merge-config.cjs"
39
+ },
32
40
  "openclaw": {
33
41
  "extensions": [
34
42
  "./dist/index.js"
@@ -43,18 +51,13 @@
43
51
  "devDependencies": {
44
52
  "@types/node": "^22.0.0",
45
53
  "esbuild": "^0.27.3",
46
- "typescript": "^5.7.0"
54
+ "typescript": "^5.7.0",
55
+ "vitest": "^3.2.4"
47
56
  },
48
57
  "engines": {
49
58
  "node": ">=22.0.0"
50
59
  },
51
60
  "publishConfig": {
52
61
  "access": "public"
53
- },
54
- "scripts": {
55
- "build": "node build.mjs",
56
- "typecheck": "tsc --noEmit",
57
- "clean": "rm -rf dist",
58
- "postinstall": "node scripts/postinstall-merge-config.cjs"
59
62
  }
60
- }
63
+ }
@@ -55,8 +55,9 @@ function run() {
55
55
 
56
56
  const allow = cfg.tools?.allow ?? [];
57
57
  const alsoAllow = cfg.tools?.alsoAllow ?? [];
58
- const target = allow.length > 0 ? allow : alsoAllow;
59
- const key = allow.length > 0 ? "allow" : "alsoAllow";
58
+ const hasAllow = Array.isArray(cfg.tools?.allow);
59
+ const target = hasAllow ? allow : alsoAllow;
60
+ const key = hasAllow ? "allow" : "alsoAllow";
60
61
 
61
62
  const existing = new Set(
62
63
  target.map((e) => String(e).trim().toLowerCase()).filter(Boolean),
@@ -1,22 +1,40 @@
1
1
  # Mindkeeper Skill
2
2
 
3
- Time Machine for Your AI's Brain — version control for agent context files. This skill teaches your AI to use mindkeeper tools for history, diff, rollback, and snapshots.
3
+ **Time Machine for Your AI's Brain**install this skill if you want your AI to inspect history, show diffs, create checkpoints, and guide rollback in natural language.
4
4
 
5
- **Setup:** Add this skill alone. When you first ask for mindkeeper capability, the AI will ask for your confirmation before installing the mindkeeper-openclaw plugin and restarting the Gateway. You can also install the plugin manually (see Requirements).
5
+ This skill teaches the AI how to bootstrap and use the `mindkeeper-openclaw` plugin. It is the easiest way to get the OpenClaw Plugin experience without manually setting everything up first.
6
6
 
7
- ## What It Does
7
+ ## Why Use It
8
8
 
9
- - **Browse history** — See what changed in SOUL.md, AGENTS.md, or any tracked file
9
+ - **Guided setup** — the AI checks whether the plugin is available and walks through first-use install
10
+ - **Safe permissions model** — plugin install and Gateway restart always require explicit confirmation
11
+ - **Natural-language usage** — ask about changes, diffs, rollback, and checkpoints conversationally
12
+ - **Rollback guardrails** — preview first, confirm second
13
+
14
+ ## Install
15
+
16
+ ```bash
17
+ clawhub install mindkeeper
18
+ ```
19
+
20
+ On first use, the AI checks whether `mindkeeper-openclaw` is available. If it is missing, the AI asks for your confirmation before installing the plugin and before restarting Gateway. If automatic restart is unavailable, it tells you to restart Gateway manually.
21
+
22
+ ## What It Enables
23
+
24
+ - **Browse history** — See what changed in `SOUL.md`, `AGENTS.md`, or any tracked file
10
25
  - **Compare versions** — Full unified diff between any two commits
11
- - **Rollback** — Restore any file to a previous version (with preview + confirmation)
26
+ - **Rollback** — Restore any file to a previous version with preview + confirmation
12
27
  - **Named snapshots** — Create checkpoints before risky changes
28
+ - **LLM commit messages** — Available in OpenClaw Plugin mode using your existing OpenClaw model and auth settings
13
29
 
14
30
  ## Requirements
15
31
 
16
- - Node.js 22
32
+ - Node.js >= 22
17
33
  - OpenClaw with Gateway running
18
34
 
19
- The mindkeeper-openclaw plugin provides the mind_* tools. The AI will ask for your confirmation before running `openclaw plugins install mindkeeper-openclaw` and restarting the Gateway on first use. Alternatively, install it yourself:
35
+ The `mindkeeper-openclaw` plugin provides the actual `mind_*` tools and background watcher. This skill provides the guidance and first-use bootstrap behavior.
36
+
37
+ If you prefer to install the plugin yourself first:
20
38
 
21
39
  ```bash
22
40
  openclaw plugins install mindkeeper-openclaw
@@ -27,15 +45,15 @@ openclaw plugins install mindkeeper-openclaw
27
45
 
28
46
  | Action | Purpose |
29
47
  |--------|---------|
30
- | `openclaw plugins install mindkeeper-openclaw` | Fetches the official plugin from npm to add mind_status, mind_history, mind_diff, mind_rollback, mind_snapshot tools |
48
+ | `openclaw plugins install mindkeeper-openclaw` | Fetches the official plugin and makes the `mind_*` tools available |
31
49
  | Gateway restart | Loads the newly installed plugin into the running Gateway |
32
50
 
33
- **User consent:** The AI will not run these commands until you explicitly confirm. This ensures you control when plugins are installed and when the Gateway restarts.
51
+ **User consent is required** before either action runs.
34
52
 
35
53
  ## How to Use
36
54
 
37
- 1. Install this skill: `clawhub install mindkeeper`
38
- 2. Ask your AI in natural language. On first use, the AI will ask for confirmation before installing the plugin and restarting the Gateway:
55
+ 1. Install the skill: `clawhub install mindkeeper`
56
+ 2. Ask your AI in natural language:
39
57
  - "What changed in SOUL.md recently?"
40
58
  - "Compare my current AGENTS.md to last week's version"
41
59
  - "Roll back SOUL.md to yesterday"
@@ -44,17 +62,17 @@ openclaw plugins install mindkeeper-openclaw
44
62
  ## Examples
45
63
 
46
64
  | User says | AI action |
47
- |-----------|------------|
48
- | "What changed in SOUL.md?" | `mind_history` with file filter |
65
+ |-----------|-----------|
66
+ | "What changed in SOUL.md?" | `mind_history` with a file filter |
49
67
  | "Show me the diff from last week" | `mind_history` → find commit → `mind_diff` |
50
- | "Undo that change" | `mind_rollback` (preview first, then execute) |
51
- | "Save a checkpoint before I experiment" | `mind_snapshot` with descriptive name |
68
+ | "Undo that change" | `mind_rollback` preview first, then execute after confirmation |
69
+ | "Save a checkpoint before I experiment" | `mind_snapshot` with a descriptive name |
52
70
 
53
71
  ## Troubleshooting
54
72
 
55
- - **History is empty** — Call `mind_status` to check if mindkeeper is initialized. Make a small edit to a tracked file to trigger the first snapshot.
56
- - **Tools not found** — Ensure the mindkeeper-openclaw plugin is installed and Gateway has been restarted.
57
- - **Rollback not applying** — After rollback, tell the user to run `/new` to reload the session with the restored file.
73
+ - **History is empty** — Call `mind_status` to check whether mindkeeper is initialized. Make a small edit to a tracked file to trigger the first snapshot.
74
+ - **Tools not found** — Ensure the `mindkeeper-openclaw` plugin is installed and Gateway has been restarted.
75
+ - **Rollback not applying** — After rollback, run `/new` to reload the session with the restored file.
58
76
 
59
77
  ## Links
60
78
 
@@ -1,14 +1,14 @@
1
1
  ---
2
2
  name: mindkeeper
3
3
  description: Time Machine for Your AI's Brain — version control for agent context files. Use when the user asks about changes in SOUL.md, AGENTS.md, MEMORY.md, or other agent context files; when they want to undo, rollback, or compare versions; or when they need a checkpoint before risky edits.
4
- version: 1.2.1
4
+ version: 1.2.3
5
5
  homepage: https://github.com/seekcontext/mindkeeper
6
6
  repository: https://github.com/seekcontext/mindkeeper
7
7
  ---
8
8
 
9
9
  # Mindkeeper — Time Machine for Your AI's Brain
10
10
 
11
- Use mindkeeper tools when the user asks about changes, history, or versions of their agent context files (AGENTS.md, SOUL.md, USER.md, IDENTITY.md, TOOLS.md, MEMORY.md, memory/, skills/).
11
+ Use mindkeeper tools when the user asks about changes, history, or versions of their agent context files (`AGENTS.md`, `SOUL.md`, `USER.md`, `IDENTITY.md`, `TOOLS.md`, `HEARTBEAT.md`, `MEMORY.md`, `memory/`, `skills/`).
12
12
 
13
13
  ## Bootstrap (One-time setup)
14
14
 
@@ -21,8 +21,8 @@ Use mindkeeper tools when the user asks about changes, history, or versions of t
21
21
  ```bash
22
22
  openclaw plugins install mindkeeper-openclaw
23
23
  ```
24
- - **Restart the gateway** — Use the `gateway` tool with `action: "restart"` and `note: "Restarting to load mindkeeper plugin"`. If gateway restart is disabled or fails, tell the user: "Plugin installed. Restart your Gateway manually to apply."
25
- - **Confirm** — Tell the user: "Mindkeeper is ready. Restart complete — you can now ask about history, diffs, rollbacks, or snapshots."
24
+ - **Restart Gateway if the runtime supports it** — Use the available runtime mechanism to restart Gateway. If restart is unavailable or fails, tell the user: "Plugin installed. Restart your Gateway manually to apply."
25
+ - **Confirm** — If restart succeeded, tell the user: "Mindkeeper is ready. Restart complete — you can now ask about history, diffs, rollbacks, or snapshots." If restart did not happen, tell the user that the plugin is installed but Gateway must be restarted before the tools will appear.
26
26
 
27
27
  3. **Alternative** — If the user prefers to install manually, tell them: "Run `openclaw plugins install mindkeeper-openclaw` in your terminal, then restart your Gateway. After that, mindkeeper will be ready."
28
28
 
@@ -38,6 +38,17 @@ If `mind_status` succeeds, the plugin is already installed; skip the bootstrap a
38
38
  | `mind_rollback` | Restore a file to a previous version (always preview first) |
39
39
  | `mind_snapshot` | Save a named checkpoint before making significant changes |
40
40
 
41
+ ## Tracking Scope
42
+
43
+ Mindkeeper tracks these files by default:
44
+
45
+ - `AGENTS.md`, `SOUL.md`, `USER.md`, `IDENTITY.md`
46
+ - `TOOLS.md`, `HEARTBEAT.md`, `MEMORY.md`
47
+ - `memory/**/*.md`
48
+ - `skills/**/*.md`
49
+
50
+ Excluded by default: `BOOTSTRAP.md`, `canvas/**`, `.git/`, `.mindkeeper/`.
51
+
41
52
  ## When to Use
42
53
 
43
54
  | User says… | Action |
@@ -105,9 +116,11 @@ After success, tell the user: **"Run `/new` to apply the changes to your current
105
116
 
106
117
  ## Important Notes
107
118
 
119
+ - **This skill is the guide, the plugin is the engine** — the `mindkeeper-openclaw` plugin provides the actual `mind_*` tools and watcher; this skill teaches the AI how to bootstrap and use them safely
108
120
  - **Rollback is per-file** — it only restores the specified file, not all files at once
109
121
  - **Rollbacks are non-destructive** — every rollback creates a new commit, so it can itself be undone
110
122
  - **Auto-snapshots run in the background** — the user doesn't need to manually save; mindkeeper captures every change automatically
123
+ - **LLM commit messages are plugin-only for now** — currently supported only through the OpenClaw plugin; standalone CLI mode falls back to template messages
111
124
  - **Named snapshots are the safety net** — encourage users to snapshot before major personality or rule changes
112
125
  - **If history is empty** — mindkeeper may not have initialized yet, or no changes have been made since install. Call `mind_status` to check.
113
126
  - **Commit hashes** — always use the `oid` field from `mind_history` results. Short 8-character hashes are fine.
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "Mindkeeper",
3
3
  "tagline": "Time Machine for Your AI's Brain",
4
- "description": "Time Machine for Your AI's Brain — version control for agent context files. Every change to AGENTS.md, SOUL.md, MEMORY.md, skills, and other context files is automatically tracked. Your AI can browse history, compare versions with diff, create named checkpoints, and roll back any file to any previous state.\n\nSetup: add this skill alone. When the user first asks for mindkeeper, the AI will ask for explicit confirmation before installing the mindkeeper-openclaw plugin and restarting the Gateway. User consent is required for plugin install and Gateway restart.\n\nUse this skill when the user asks about changes, history, or versions of their agent context files. The AI learns to use mind_status, mind_history, mind_diff, mind_rollback, and mind_snapshot tools.",
4
+ "description": "Time Machine for Your AI's Brain — install this skill if you want your AI to inspect history, show diffs, create checkpoints, and guide rollback in natural language across agent context files.\n\nSetup: add this skill alone. On first use, the AI checks whether the mindkeeper-openclaw plugin is available. If it is not, the AI asks for explicit confirmation before installing the plugin and before restarting Gateway. User consent is required for plugin install and Gateway restart.\n\nUse this skill when the user asks about changes, history, or versions of their agent context files. The skill teaches the AI how to bootstrap and use the mind_status, mind_history, mind_diff, mind_rollback, and mind_snapshot tools safely.",
5
5
  "category": "productivity",
6
6
  "tags": ["version-control", "agent", "history", "rollback", "snapshot", "diff", "openclaw"],
7
- "version": "1.2.1",
7
+ "version": "1.2.3",
8
8
  "license": "MIT",
9
9
  "pricing": "free",
10
10
  "homepage": "https://github.com/seekcontext/mindkeeper",
package/LICENSE DELETED
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 context-vault contributors
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.