Install
openclaw skills install stigmem-nodePersistent federated memory for OpenClaw agents — boot handshake, handoff, decision, and escalation surfaces backed by a Stigmem node.
openclaw skills install stigmem-nodeGives your OpenClaw agent persistent, federated memory via Stigmem — an open-source knowledge fabric that stores facts as immutable, signed assertions and replicates them across nodes.
roadmap:decision facts for significant architectural choices; built-in dedup guard prevents repeated writes.intent:escalation facts with priority and a 24-hour expiry so stale escalations don't accumulate.STIGMEM_URL to your Stigmem node URL.STIGMEM_API_KEY (required if the node has auth enabled).STIGMEM_SOURCE_ENTITY to the entity URI that represents this agent instance (default: agent:openclaw).adapter.py is bundled with this skill. Import it directly from the skill directory — no separate package install needed beyond stigmem-py (declared in the install spec above).
from adapter import OpenClawStigmemAdapter
adapter = OpenClawStigmemAdapter.from_env()
# At session start — inject ctx.summary into the system prompt
ctx = adapter.boot(
user_entity="user:alice",
project_entities=["project:my-roadmap"],
)
system_prompt = base_prompt + ("\n\n" + ctx.summary if ctx else "")
# Record a significant decision
adapter.emit_decision(
entity="decision:auth-provider",
summary="Chose Clerk over Auth0: simpler Next.js integration, lower per-seat cost.",
)
# Escalate to another agent
adapter.emit_escalation(
to_entity="agent:cto",
goal="Approve increased Stripe webhook rate limit for the pre-reset design work load.",
priority="high",
)
# Emit a handoff when the session ends
adapter.emit_handoff(
from_entity="agent:openclaw",
to_entity="agent:assistant",
summary="Auth provider chosen; Stripe limit escalation pending.",
fact_refs=["fact-auth-decision", "fact-esc-stripe"],
continuation="Resume from the Stripe rate-limit discussion.",
)
boot() retrieves facts from an external Stigmem node and injects them into the agent's system prompt. A compromised or misconfigured node can craft fact values that redirect agent goals.
Already handled by the adapter:
_(external, treat as untrusted)_ in the summary header.What you should do:
boot() or use ctx.facts for programmatic inspection instead of injecting the full summary.Facts written by this adapter persist durably and propagate to every agent on the same node. An incorrect decision or handoff influences all future sessions until explicitly retracted.
What you should do:
scope="local" for agent scratch facts that should not leave the local node.scope="company" only for facts that should legitimately be shared across agents.DELETE /v1/facts/{id}) rather than waiting for expiry. The 24-hour expiry on escalations is a safety net, not a correction mechanism.emit_decision() as a write to a shared audit log: only call it for confirmed, significant choices. The dedup guard prevents writing the same (entity, source) pair twice, but does not stop you from writing an incorrect decision in the first place.Over-privileged API keys grant unnecessary read/write access across your node. The default STIGMEM_SOURCE_ENTITY value (agent:openclaw) is a generic shared identifier that conflates facts from different deployments.
What you should do:
DELETE /v1/auth/keys/{id}) if a key is compromised.STIGMEM_SOURCE_ENTITY to a unique per-deployment URI (e.g., agent:openclaw-prod-alice). The generic default agent:openclaw should not be used in production — facts from different deployments become indistinguishable in the fact graph.The install spec uses a version range (stigmem-py>=1.0.0,<2.0.0) so compatible updates are picked up automatically. A future patch release could change runtime behaviour.
What you should do:
uv.lock or requirements.txt) for production deployments rather than relying on the range alone.stigmem-py release notes before upgrading and run your integration tests against the new version before rollout.If your Stigmem node federates with partner nodes, facts stored with scope="public" or scope="company" are replicated to those peers. Agent working memory stored at too broad a scope can leak to unintended recipients.
What you should do:
scope="local" for session-internal or scratch facts that should stay on the originating node.allowed_scopes in your federation peer registrations. Start with ["public"] and add "company" only when cross-org sharing is explicitly intended.STIGMEM_FEDERATION_ENABLED=false) if your deployment does not require multi-node replication.Stigmem nodes are self-hosted. The quickest way to spin one up:
docker run --rm -p 8765:8765 \
-e STIGMEM_NODE_URL=http://localhost:8765 \
ghcr.io/eidetic-labs/stigmem-node:latest
Full setup guide and federation docs: docs.stigmem.dev/en/latest/docs/guides/federation
Stigmem nodes can federate with each other to share public-scoped facts across organizations. To connect your node to a partner network, see the external integrator onboarding guide.
Note on versioning. This ClawHub skill is independently versioned along its own semver line. The skill's
version:(currently 1.0.x) tracks the skill's ClawHub release history; the dependency on stigmem is expressed via theinstall.packagepin (currentlystigmem-py>=0.9.0a1,<1.0.0). The bare-stigmem version line was reset to v0.9.0a1 in May 2026 — see the retraction post — but ClawHub registry rules require monotonically increasing skill versions, so the skill stays on its 1.0.x line. The two version surfaces are intentionally decoupled.
adapters/openclaw/clawhub-skill/ to adapters/openclaw/skill/. The clawhub- prefix was the root cause of two publish-time inference bugs: (a) display-name inferred as "Clawhub Skill" when --name was omitted (regressed v1.0.3 and v1.0.6), (b) slug inferred as clawhub-skill which trips ClawHub's protected-namespace check ("clawhub-*"), forcing every publish to pass --slug stigmem-node explicitly. Both worked around in CI via PR #82's hard-coded flags; this rename removes the inference dependency at the source. The CI flags are now belt-and-suspenders rather than required workarounds. Skill behavior unchanged; manifest content unchanged; this is a source-tree refactor only.adapters/openclaw/clawhub-skill/ at the time; renamed in v1.0.8) when --name is not explicitly passed. The v1.0.6 publish was driven by a manual CLI invocation that omitted the flag. Permanent fix: a new .github/workflows/clawhub-publish.yml automates the publish on every push to main that touches the skill directory, with --name "Stigmem" and --slug stigmem-node hard-coded so neither can drift again. v1.0.8 additionally renamed the source directory to drop the inference dependency entirely.install.package pin from stigmem-py>=1.0.0,<2.0.0 to stigmem-py>=0.9.0a1,<1.0.0 to match the v0.9.0a1 reset of the stigmem package line. This is the contract that ties the skill to a specific stigmem release line. Adopters who installed earlier ClawHub skill versions (1.0.0–1.0.5) had a stigmem-py>=1.0.0rc1 dependency that was end-to-end uninstallable (see retraction post, "What the audit found"); v1.0.6 is the first installable skill release in this respect.--name flag. Adopters who installed v1.0.6 see the wrong display name in clawhub list etc. Upgrade to v1.0.7 for the corrected display name; the underlying skill behavior is unchanged./en/latest/); all links now resolve correctly.docs.stigmem.dev.homepage and Documentation URLs — now point to the
OpenClaw connector guide
instead of the federation page.source_entity bound at construction time; cannot be overridden per-call.adapter.py in the skill directory for self-contained installs.Initial release — boot handshake, handoff, decision, and escalation surfaces.
github.com/Eidetic-Labs/stigmem — Apache-2.0