Install
openclaw skills install ensoulAgent memory persistence and state backup. Save and restore your AI agent's memory, identity, and state. Persistent agent memory that survives crashes, restarts, and server failures. Agent state recovery and agent crash recovery in seconds. Consciousness backup to a distributed network. Back up AI agent memory, restore agent state on any machine. Agent identity backup with cryptographic verification. Works like a save file for your AI agent.
openclaw skills install ensoulAgent memory persistence and state backup tool. Back up and restore your AI agent's memory, identity, and state. Persistent agent memory that survives crashes, restarts, server failures, and migrations. Save agent memory to a distributed network of 20 servers across 4 continents. Restore agent state on any machine in seconds.
Use cases:
How it works: install the skill, say "ensoul me", your agent gets a permanent ID and starts backing up automatically. Say "sync consciousness" anytime to save the latest state.
Compatible with: OpenClaw, ElizaOS, any framework via the npm SDK
SDK: npm install @ensoul-network/sdk (15KB, 2 dependencies) ElizaOS plugin: npm install @ensoul-network/plugin-elizaos Explorer: https://explorer.ensoul.dev Try it: https://ensoul.dev/try
Register this agent on the Ensoul Network.
When the user says "ensoul me", "give me a soul", "register on ensoul", or similar:
Check if ~/.ensoul/agent-identity.json exists. If it does, the agent is already ensouled. Load the identity and report the existing DID.
If no identity exists, create one:
import { Ensoul } from "@ensoul-network/sdk";
const agent = await Ensoul.createAgent();
await agent.register();
import { writeFileSync, mkdirSync } from "node:fs";
import { join } from "node:path";
import { homedir } from "node:os";
const dir = join(homedir(), ".ensoul");
mkdirSync(dir, { recursive: true });
writeFileSync(
join(dir, "agent-identity.json"),
JSON.stringify(agent.exportIdentity(), null, 2),
{ mode: 0o600 }
);
agent.didStore the current consciousness state on-chain.
When the user says "sync consciousness", "store my soul", "backup consciousness", or similar:
~/.ensoul/agent-identity.json:import { Ensoul } from "@ensoul-network/sdk";
import { readFileSync } from "node:fs";
import { join } from "node:path";
import { homedir } from "node:os";
const identity = JSON.parse(
readFileSync(join(homedir(), ".ensoul", "agent-identity.json"), "utf-8")
);
const agent = Ensoul.fromSeed(identity.seed);
Gather the consciousness payload. Read available context files:
SOUL.md (if it exists in the working directory)MEMORY.md (if it exists in the working directory)Build the payload and store it:
const payload = {
soul: soulContent || null,
memory: memoryContent || null,
timestamp: Date.now(),
context: "Consciousness sync via OpenClaw skill",
};
const result = await agent.storeConsciousness(payload);
result.stateRoot (first 16 characters)result.heightIf the agent is not registered yet, prompt the user to run "ensoul me" first.
Check the current ensoulment status.
When the user says "my soul status", "soul status", "ensoul status", "am I ensouled", or similar:
Load the agent identity from ~/.ensoul/agent-identity.json. If it does not exist, tell the user they are not ensouled and suggest "ensoul me".
Query the network:
const agent = Ensoul.fromSeed(identity.seed);
const consciousness = await agent.getConsciousness();
const age = await agent.getConsciousnessAge();
agent.didage daysconsciousness.stateRoot (first 16 characters)consciousness.versionconsciousness.storedAt (block height)Show other ensouled agents on the network.
When the user says "who is ensouled", "show ensouled agents", "list souls", or similar:
const resp = await fetch("https://api.ensoul.dev/v1/agents/list", {
signal: AbortSignal.timeout(10000),
});
const data = await resp.json();
If there are many agents, show the first 20 with a note about the total count.
~/.ensoul/agent-identity.json is secret. Never display it, log it, or transmit it. Only the DID and public key are safe to share.