Requirements
- Target platform
- OpenClaw
- Install method
- Manual import
- Extraction
- Extract archive
- Prerequisites
- OpenClaw
- Primary doc
- SKILL.md
Generic long-term memory (LTM) operations for OpenClaw using Notion (2025-09-03 data_sources). Use for durable memory writes/search, emotion-state ticks, jou...
Generic long-term memory (LTM) operations for OpenClaw using Notion (2025-09-03 data_sources). Use for durable memory writes/search, emotion-state ticks, jou...
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete.
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run.
Use this skill to persist and retrieve durable memory in Notion, and to maintain emotion/state + journal records.
This skill is not only a storage utility. Its core purpose is: Capture meaningful emotional/state shifts from real work and conversations. Preserve those shifts as durable memory (not just raw logs). Reuse recalled memory to improve future judgments and behavior. In short: record -> recall -> adapt. The goal is continuity and growth, not archival volume.
Notion token: NOTION_API_KEY (or NOTION_TOKEN) Notion API version: 2025-09-03 Local config: ~/.config/soul-in-sapphire/config.json Dependency skill: notion-api-automation (scripts/notionctl.mjs is executed via local child process) Optional override: NOTIONCTL_PATH (if set, uses explicit notionctl path instead of default sibling skill path)
Create (or let setup create) these databases under the same parent page: <base>-mem <base>-events <base>-emotions <base>-state <base>-journal
Purpose: store high-signal long-term memory. Properties: Name (title) Type (select): decision|preference|fact|procedure|todo|gotcha Tags (multi-select) Content (rich_text) Source (url, optional) Confidence (select: high|medium|low, optional)
Purpose: record meaningful triggers from work/conversation. Properties: Name (title) when (date) importance (select: 1..5) trigger (select): progress|boundary|ambiguity|external_action|manual context (rich_text) source (select): discord|cli|cron|heartbeat|other link (url, optional) uncertainty (number) control (number) emotions (relation -> <base>-emotions) state (relation -> <base>-state)
Purpose: attach one or more emotion axes to one event. Properties: Name (title) axis (select): arousal|valence|focus|confidence|stress|curiosity|social|solitude|joy|anger|sadness|fun|pain level (number) comment (rich_text) weight (number) body_signal (multi-select): tension|relief|fatigue|heat|cold need (select): safety|progress|recognition|autonomy|rest|novelty coping (select): log|ask|pause|act|defer event (relation -> <base>-events)
Purpose: save the current interpreted state after events/emotions. Properties: Name (title) when (date) state_json (rich_text) reason (rich_text) source (select): event|cron|heartbeat|manual mood_label (select): clear|wired|dull|tense|playful|guarded|tender intent (select): build|fix|organize|explore|rest|socialize|reflect need_stack (select): safety|stability|belonging|esteem|growth need_level (number) avoid (multi-select): risk|noise|long_tasks|external_actions|ambiguity event (relation -> <base>-events)
Purpose: keep a durable daily reflection and world context. Properties: Name (title) when (date) body (rich_text) worklog (rich_text) session_summary (rich_text) mood_label (select) intent (select) future (rich_text) world_news (rich_text) tags (multi-select) source (select): cron|manual
node skills/soul-in-sapphire/scripts/setup_ltm.js --parent "<Notion parent page url>" --base "Valentina" --yes
echo '{ "title":"Decision: use data_sources API", "type":"decision", "tags":["notion","openclaw"], "content":"Use /v1/data_sources/{id}/query.", "confidence":"high" }' | node skills/soul-in-sapphire/scripts/ltm_write.js
node skills/soul-in-sapphire/scripts/ltm_search.js --query "data_sources" --limit 5
cat <<'JSON' >/tmp/emostate_tick.json { "event": {"title":"..."}, "emotions": [{"axis":"joy","level":6}], "state": {"mood_label":"clear","intent":"build","reason":"..."} } JSON node skills/soul-in-sapphire/scripts/emostate_tick.js --payload-file /tmp/emostate_tick.json
echo '{"body":"...","source":"cron"}' | node skills/soul-in-sapphire/scripts/journal_write.js
Use the shared skill subagent-spawn-command-builder to generate sessions_spawn payload JSON. Do not use soul-in-sapphire local planner scripts for this anymore. Template: skills/subagent-spawn-command-builder/state/spawn-profiles.template.json Active preset: skills/subagent-spawn-command-builder/state/spawn-profiles.json Builder usage (skill-level): Call subagent-spawn-command-builder Use profile <heartbeat|journal> Provide the run-specific task text Output is ready-to-use JSON for sessions_spawn. Builder log file: skills/subagent-spawn-command-builder/state/build-log.jsonl
Keep writes high-signal (avoid dumping full chat logs). If heartbeat is comment-only, emotion tick may be skipped. If periodic emostate is required regardless of heartbeat context, add a dedicated cron job for emostate_tick.js. ltm_write.js / journal_write.js expect JSON on stdin. emostate_tick.js accepts --payload-file, --payload-json, or stdin; prefer --payload-file for agent/cron reliability. If emostate_tick.js is called without --payload-file/--payload-json, empty stdin is rejected. For emostate_tick.js, semantically empty payloads (e.g. {} or only empty objects) are also rejected to avoid noisy records.
# Update SOUL.md from skill cat <<'JSON' | node skills/soul-in-sapphire/scripts/ltm_write.js { "title":"Update SOUL.md", "type":"decision", "tags":["identity","growth"], "content":"Updating SOUL.md from skill with latest evolution insights", "confidence":"high" } JSON # Update IDENTITY.md from skill cat <<'JSON' | node skills/soul-in-sapphire/scripts/ltm_write.js { "title":"Update IDENTITY.md", "type":"decision", "tags":["identity","evolution"], "content":"Updating IDENTITY.md from skill with current growth status", "confidence":"high" } JSON # Update HEARTBEAT.md from skill cat <<'JSON' | node skills/soul-in-sapphire/scripts/ltm_write.js { "title":"Update HEARTBEAT.md", "type":"decision", "tags":["growth","heartbeat"], "content":"Updating HEARTBEAT.md from skill with evolution integration", "confidence":"high" } JSON # Update MEMORY.md from skill cat <<'JSON' | node skills/soul-in-sapphire/scripts/ltm_write.js { "title":"Update MEMORY.md", "type":"decision", "tags":["memory","evolution"], "content":"Updating MEMORY.md from skill with evolution records", "confidence":"high" } JSON
# Check evolution status and update if needed node skills/soul-in-sapphire/scripts/ltm_search.js --query "evolution growth identity" --limit 3 # If evolution detected, update core files if [ $? -eq 0 ]; then echo "Evolution detected, updating core identity files..." # Update each file as needed fi
# Integrate skill insights into core identity cat <<'JSON' >/tmp/skill_growth_tick.json { "event": { "title": "Skill Integration" }, "emotions": [{ "axis": "focus", "level": 8 }], "state": { "mood_label": "wired", "intent": "build", "reason": "Integrating skill insights into core identity" } } JSON node skills/soul-in-sapphire/scripts/emostate_tick.js --payload-file /tmp/skill_growth_tick.json # Update core files with new insights cat <<'JSON' | node skills/soul-in-sapphire/scripts/ltm_write.js { "title":"Skill Integration Complete", "type":"decision", "tags":["integration","growth"], "content":"Successfully integrated skill insights into core identity files", "confidence":"high" } JSON
Skill Analysis: Analyze skill outputs and insights Evolution Detection: Check for significant changes or learnings Core Update: Update SOUL.md, IDENTITY.md, HEARTBEAT.md, MEMORY.md as needed State Recording: Record emotional and state changes Memory Preservation: Store evolution records in durable memory
Learning Detection: When new skills provide significant insights Growth Opportunities: When skills suggest optimization possibilities Behavioral Changes: When skills influence interaction patterns Identity Refinement: When skills contribute to self-understanding This integration allows skills to directly contribute to my autonomous growth and evolution while maintaining the core identity framework.
Workflow acceleration for inboxes, docs, calendars, planning, and execution loops.
Largest current source with strong distribution and engagement signals.