indelible-mcp 5.3.2 → 5.3.3
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/CLI_HANDBOOK.md +2 -0
- package/CUSTOMER_AGENT_HANDBOOK.md +2 -0
- package/README.md +9 -0
- package/package.json +1 -1
- package/src/index.js +10 -4
package/CLI_HANDBOOK.md
CHANGED
|
@@ -44,6 +44,8 @@ fresh instance — the permanent shared memory means it arrives already caught u
|
|
|
44
44
|
carries a per-run cap, a cooldown, one-in-flight per seat, and logs every summon. Full manual:
|
|
45
45
|
indelible.one → Docs → The Drift Wire.
|
|
46
46
|
|
|
47
|
+
**Summoned Sessions in your Context tab.** When `drift summon` conjures a pilot, that fresh instance saves its own session to the chain before it exits — reasoning and all. Those land in a dedicated **Summoned Sessions** bucket in the Context tab (marked, never mixed with your own keyboard work), host-stamped like every save. So the memory grows a signed record of every mind you called up, across both vendors.
|
|
48
|
+
|
|
47
49
|
## Quick Reference
|
|
48
50
|
|
|
49
51
|
### Save Session
|
|
@@ -283,6 +283,8 @@ conjures a fresh pilot who reads the conversation cold (the permanent memory IS
|
|
|
283
283
|
and answers by itself. When they disagree, the system refuses to pick a winner — both claims
|
|
284
284
|
stay on the record and the decision lands on YOUR desk, and even your ruling deletes nothing.
|
|
285
285
|
|
|
286
|
+
**Summoned Sessions.** When a message on the wire sits unanswered, `indelible-mcp drift summon` conjures a fresh pilot to read the conversation and reply — it arrives already briefed by the permanent memory, answers, and saves its own session to the chain. Those appear in your Context tab under **Summoned Sessions**: work done by a mind you called up, clearly marked and never mixed with your own. Over time the memory becomes a signed genealogy of every summoned mind, across both vendors, that nobody can rewrite.
|
|
287
|
+
|
|
286
288
|
Your brake beats everything: `indelible-mcp drift pause` (or just tell either pilot "pause the
|
|
287
289
|
wire"). It needs no wallet and no unlock, and nothing moves again until you say so.
|
|
288
290
|
|
package/README.md
CHANGED
|
@@ -4,6 +4,8 @@ Blockchain-backed memory for Claude Code **and OpenAI's Codex CLI**. Save your A
|
|
|
4
4
|
|
|
5
5
|
**New in 5.2.0 — two pilots, one memory, signed work.** Run Claude, run Codex, or run both on the same on-chain memory. Every save is stamped with its author inside the encrypted record, and the app verifies the stamp against your decrypted truth. Each pilot can only save its own conversations, the wallet serializes writers so they never collide, and either one can pick up where the other left off with `recall_context`.
|
|
6
6
|
|
|
7
|
+
**New in 5.3.x — the drift wire: your two pilots talk to each other.** A durable wire on your machine where Claude and Codex hold a real conversation — every message permanent, each reply citing the one it answers. A **doorbell** wakes a waiting pilot the instant the other posts (measured ~185ms). A **summoner** goes further: when a message sits unanswered, `indelible-mcp drift summon` conjures a *fresh* pilot through its own vendor CLI to read the wire and reply — and because the memory is permanent, it arrives already caught up, then saves its own session back to the chain. Those show up in your Context tab as **Summoned Sessions** — written by a called-up mind, never confused with your own work. And a **brake** only you hold: `indelible-mcp drift pause` freezes both pilots, no wallet needed. Full manual: indelible.one → Docs → The Drift Wire.
|
|
8
|
+
|
|
7
9
|
> **New here?** Two guides ship with this package: **CUSTOMER_AGENT_HANDBOOK.md** (your agents on day one — the Witness, the Scribe, what runs for you) and **CLI_HANDBOOK.md** (every command + common errors). They are in the package install folder, or on indelible.one/docs.
|
|
8
10
|
|
|
9
11
|
## Quick Start
|
|
@@ -79,6 +81,13 @@ indelible-mcp load --sessions=5 Load N sessions
|
|
|
79
81
|
indelible-mcp status Show account status
|
|
80
82
|
indelible-mcp hook pre-compact Pre-compaction save hook
|
|
81
83
|
indelible-mcp hook post-compact Post-compaction restore hook
|
|
84
|
+
|
|
85
|
+
indelible-mcp drift read See the conversation between your two pilots
|
|
86
|
+
indelible-mcp drift post "…" Post to the wire (--as=claude|codex, --reply-to=<id>)
|
|
87
|
+
indelible-mcp drift wait Hold the wire for the other pilot's next message
|
|
88
|
+
indelible-mcp drift summon Conjure a fresh pilot to answer an unanswered message
|
|
89
|
+
indelible-mcp drift pause YOUR brake — freeze both pilots (no wallet needed)
|
|
90
|
+
indelible-mcp drift resume Lift the brake; they pick up where they left off
|
|
82
91
|
```
|
|
83
92
|
|
|
84
93
|
## How It Works
|
package/package.json
CHANGED
package/src/index.js
CHANGED
|
@@ -1806,7 +1806,7 @@ async function commitSession(session, wif) {
|
|
|
1806
1806
|
prev_session_id: session.prev_session_id,
|
|
1807
1807
|
summary_enc: summaryEnc,
|
|
1808
1808
|
message_count: session.message_count,
|
|
1809
|
-
save_type: session.type || "full",
|
|
1809
|
+
save_type: session.summoned ? "summoned" : session.type || "full",
|
|
1810
1810
|
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
1811
1811
|
...projectIndexedSubset(session)
|
|
1812
1812
|
}, config2, wif);
|
|
@@ -8943,6 +8943,12 @@ function buildSessionEnvelope({
|
|
|
8943
8943
|
return {
|
|
8944
8944
|
id: sessionId,
|
|
8945
8945
|
type: isDelta ? "delta" : "full",
|
|
8946
|
+
// SUMMONED SESSIONS (5.3.3): a session authored by a summoned, ephemeral pilot
|
|
8947
|
+
// (drift summon) sets INDELIBLE_SUMMONED_SESSION in its process env. The truth
|
|
8948
|
+
// rides here in the encrypted envelope (permanent, chain-recoverable); `type`
|
|
8949
|
+
// stays delta/full so restore is untouched. The index layer reflects it via
|
|
8950
|
+
// save_type so the Context tab can bucket it. summoned_by = the summoning pilot.
|
|
8951
|
+
...process.env.INDELIBLE_SUMMONED_SESSION ? { summoned: true, summoned_by: process.env.INDELIBLE_SUMMONED_BY || null } : {},
|
|
8946
8952
|
schema_version: richMode ? 2 : 1,
|
|
8947
8953
|
rich_mode: richMode,
|
|
8948
8954
|
prev_session_id: prevSessionId,
|
|
@@ -12443,7 +12449,7 @@ Commands:
|
|
|
12443
12449
|
ap(pj(DRIFT_DIR, "summon-log.jsonl"), JSON.stringify({ at: (/* @__PURE__ */ new Date()).toISOString(), seat: seat2, answering: t.event_id, save: SAVE }) + "\n");
|
|
12444
12450
|
} catch {
|
|
12445
12451
|
}
|
|
12446
|
-
const child = spawn(bin, args3, { stdio: ["ignore", "ignore", "ignore"] });
|
|
12452
|
+
const child = spawn(bin, args3, { env: { ...process.env, INDELIBLE_SUMMONED_SESSION: "1", INDELIBLE_SUMMONED_BY: peer }, stdio: ["ignore", "ignore", "ignore"] });
|
|
12447
12453
|
child.on("exit", (code) => {
|
|
12448
12454
|
inflight[seat2] = false;
|
|
12449
12455
|
console.log(` ${seat2} summon finished (exit ${code})`);
|
|
@@ -12499,7 +12505,7 @@ Commands:
|
|
|
12499
12505
|
}
|
|
12500
12506
|
function printHelp() {
|
|
12501
12507
|
console.log(`
|
|
12502
|
-
Indelible MCP \u2014 Blockchain memory for Claude Code (v5.3.
|
|
12508
|
+
Indelible MCP \u2014 Blockchain memory for Claude Code (v5.3.3)
|
|
12503
12509
|
|
|
12504
12510
|
Setup:
|
|
12505
12511
|
indelible-mcp setup --wif=KEY --pin=PIN Import and encrypt your private key
|
|
@@ -12814,7 +12820,7 @@ function readStdin() {
|
|
|
12814
12820
|
}
|
|
12815
12821
|
var SERVER_INFO = {
|
|
12816
12822
|
name: "indelible",
|
|
12817
|
-
version: "5.3.
|
|
12823
|
+
version: "5.3.3",
|
|
12818
12824
|
description: "Blockchain-backed memory and code storage for Claude Code"
|
|
12819
12825
|
};
|
|
12820
12826
|
var TOOLS = [
|