{"id":"b5c4e5a5-80e8-46a3-b81d-38e871bad34e","entityType":"agent","slug":"clawhub-nextaltair-soul-in-sapphire","name":"Soul In Sapphire","canonicalUrl":"https://www.xpersona.co/agent/clawhub-nextaltair-soul-in-sapphire","canonicalPath":"/agent/clawhub-nextaltair-soul-in-sapphire","generatedAt":"2026-10-10T10:46:28.099Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":null},"description":"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...","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 948 downloads reported by the source. Last updated 4/15/2026.","installCommand":"clawhub skill install kn747bx1r2jrbbyca61v6k06397zy93t:soul-in-sapphire","sourceUrl":"https://clawhub.ai/NEXTAltair/soul-in-sapphire","homepage":"https://clawhub.ai/NEXTAltair/soul-in-sapphire","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/NEXTAltair/soul-in-sapphire","kind":"source"}],"safetyScore":84,"overallRank":62,"popularityScore":60,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Soul In Sapphire technical dossier on Xpersona with agent coverage, OPENCLEW support, and live trust metadata."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":null},"stars":null,"forks":null,"downloads":948,"packageName":null,"latestVersion":"1.0.7","tractionLabel":"948 downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-03-01T01:23:02.935Z","emptyReason":null},"lastUpdatedAt":"2026-04-15T00:45:39.800Z","lastCrawledAt":"2026-03-01T01:23:02.935Z","lastIndexedAt":null,"nextCrawlAt":"2026-03-02T01:23:02.935Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.7","createdAt":"2026-02-16T06:49:45.272Z","changelog":"- Added support for providing emostate_tick.js input via --payload-file and --payload-json arguments (stdin still supported, but now optional). - Documented and recommend using --payload-file for agent/cron reliability in emostate_tick.js. - Improved error handling: emostate_tick.js strictly rejects semantically empty input from both file and stdin. - Updated documentation in SKILL.md and usage in README.md to reflect new payload handling options. - Minor internal script refactoring and clarifications in core command usage.","fileCount":17,"zipByteSize":28403},{"version":"1.0.6","createdAt":"2026-02-16T00:48:21.590Z","changelog":"- emostate_tick.js now strictly rejects empty or semantically empty payloads, ensuring only valid input is processed. - SKILL.md updated to clarify that ltm_write.js, emostate_tick.js, and journal_write.js require non-empty JSON input via stdin—CLI flags alone are not accepted. - Added usage notes about error behavior for empty input, preventing noisy or unintended records. - Expanded SKILL.md with explicit integration examples for updating core identity and evolution files via skill commands.","fileCount":17,"zipByteSize":26714},{"version":"1.0.5","createdAt":"2026-02-14T00:46:16.251Z","changelog":"- Improved scripts/journal_write.js to handle and ignore empty string journal writes, for improved input validation. - No changes to documentation or skill interface.","fileCount":null,"zipByteSize":null},{"version":"1.0.4","createdAt":"2026-02-13T13:47:31.668Z","changelog":"- Initial public release of the skill. - Implements durable memory write, search, emotion/state tick, and journal write for Notion LTM in the OpenClaw system. - Adds setup, configuration, and core Node.js scripts for all documented LTM operations. - Supports model-driven subagent spawn planning via shared builder skill only. - Documentation improved; now allows `NOTIONCTL_PATH` override for more flexible dependency control.","fileCount":null,"zipByteSize":null},{"version":"1.0.2","createdAt":"2026-02-13T13:30:45.398Z","changelog":"- Major refactor: All local scripts and related files were removed; now relies on the `notion-api-automation` skill for Notion operations. - Added clear dependency metadata and workspace discovery requirements to SKILL.md. - Updated documentation to reflect new runtime structure and external dependency handling. - Subagent spawn planning now exclusively uses the shared `subagent-spawn-command-builder` skill—local planner scripts are no longer available.","fileCount":null,"zipByteSize":null},{"version":"1.0.0","createdAt":"2026-02-13T13:24:15.857Z","changelog":"- Switched LTM write and search usage examples from Python scripts to Node.js scripts in documentation. - Updated documentation to reflect Node.js is now required for LTM write (`ltm_write.js`) and search (`ltm_search.js`) commands. - No core functionality or schema changes; this revision is purely an update to documentation and usage instructions.","fileCount":null,"zipByteSize":null},{"version":"0.2.0","createdAt":"2026-02-13T11:41:59.778Z","changelog":"Version 0.2.0 - Fully migrated all CLI scripts from Python to Node.js for consistency. - Added package.json and modularized scripts for Notion LTM, emostate, and journal operations. - Removed legacy Python scripts. - Updated operational instructions in README for Node.js usage. - Subagent spawn planning must now use the shared `subagent-spawn-command-builder` skill; local planner scripts removed.","fileCount":null,"zipByteSize":null},{"version":"0.1.4","createdAt":"2026-02-12T14:07:54.019Z","changelog":"- Updated subagent spawn planning: replaced local planner scripts with a call to the shared skill `subagent-spawn-command-builder`. - Updated documentation to reflect use of the shared builder, including new locations for templates, presets, and log files. - Deprecated use of `soul-in-sapphire` local subagent planner scripts in favor of the shared builder approach.","fileCount":null,"zipByteSize":null}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install kn747bx1r2jrbbyca61v6k06397zy93t:soul-in-sapphire","setupComplexity":"low","setupSteps":["Install using `clawhub skill install kn747bx1r2jrbbyca61v6k06397zy93t:soul-in-sapphire` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/NEXTAltair/soul-in-sapphire before using production credentials."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-nextaltair-soul-in-sapphire/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-nextaltair-soul-in-sapphire/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-nextaltair-soul-in-sapphire/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-nextaltair-soul-in-sapphire/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-nextaltair-soul-in-sapphire/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-nextaltair-soul-in-sapphire/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T10:46:28.098Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-nextaltair-soul-in-sapphire/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-nextaltair-soul-in-sapphire/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-nextaltair-soul-in-sapphire/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-nextaltair-soul-in-sapphire/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":null},"readme":"Skill: Soul In Sapphire\n\nOwner: NEXTAltair\n\nSummary: 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...\n\nTags: latest:1.0.7\n\nVersion history:\n\nv1.0.7 | 2026-02-16T06:49:45.272Z | auto\n\n- Added support for providing emostate_tick.js input via --payload-file and --payload-json arguments (stdin still supported, but now optional).\n- Documented and recommend using --payload-file for agent/cron reliability in emostate_tick.js.\n- Improved error handling: emostate_tick.js strictly rejects semantically empty input from both file and stdin.\n- Updated documentation in SKILL.md and usage in README.md to reflect new payload handling options.\n- Minor internal script refactoring and clarifications in core command usage.\n\nv1.0.6 | 2026-02-16T00:48:21.590Z | auto\n\n- emostate_tick.js now strictly rejects empty or semantically empty payloads, ensuring only valid input is processed.\n- SKILL.md updated to clarify that ltm_write.js, emostate_tick.js, and journal_write.js require non-empty JSON input via stdin—CLI flags alone are not accepted.\n- Added usage notes about error behavior for empty input, preventing noisy or unintended records.\n- Expanded SKILL.md with explicit integration examples for updating core identity and evolution files via skill commands.\n\nv1.0.5 | 2026-02-14T00:46:16.251Z | auto\n\n- Improved scripts/journal_write.js to handle and ignore empty string journal writes, for improved input validation.\n- No changes to documentation or skill interface.\n\nv1.0.4 | 2026-02-13T13:47:31.668Z | auto\n\n- Initial public release of the skill.\n- Implements durable memory write, search, emotion/state tick, and journal write for Notion LTM in the OpenClaw system.\n- Adds setup, configuration, and core Node.js scripts for all documented LTM operations.\n- Supports model-driven subagent spawn planning via shared builder skill only.\n- Documentation improved; now allows `NOTIONCTL_PATH` override for more flexible dependency control.\n\nv1.0.2 | 2026-02-13T13:30:45.398Z | auto\n\n- Major refactor: All local scripts and related files were removed; now relies on the `notion-api-automation` skill for Notion operations.\n- Added clear dependency metadata and workspace discovery requirements to SKILL.md.\n- Updated documentation to reflect new runtime structure and external dependency handling.\n- Subagent spawn planning now exclusively uses the shared `subagent-spawn-command-builder` skill—local planner scripts are no longer available.\n\nv1.0.0 | 2026-02-13T13:24:15.857Z | auto\n\n- Switched LTM write and search usage examples from Python scripts to Node.js scripts in documentation.\n- Updated documentation to reflect Node.js is now required for LTM write (`ltm_write.js`) and search (`ltm_search.js`) commands.\n- No core functionality or schema changes; this revision is purely an update to documentation and usage instructions.\n\nv0.2.0 | 2026-02-13T11:41:59.778Z | auto\n\nVersion 0.2.0\n\n- Fully migrated all CLI scripts from Python to Node.js for consistency.\n- Added package.json and modularized scripts for Notion LTM, emostate, and journal operations.\n- Removed legacy Python scripts.\n- Updated operational instructions in README for Node.js usage.\n- Subagent spawn planning must now use the shared `subagent-spawn-command-builder` skill; local planner scripts removed.\n\nv0.1.4 | 2026-02-12T14:07:54.019Z | auto\n\n- Updated subagent spawn planning: replaced local planner scripts with a call to the shared skill `subagent-spawn-command-builder`.\n- Updated documentation to reflect use of the shared builder, including new locations for templates, presets, and log files.\n- Deprecated use of `soul-in-sapphire` local subagent planner scripts in favor of the shared builder approach.\n\nv0.1.3 | 2026-02-12T11:09:59.229Z | auto\n\nsoul-in-sapphire 0.1.3\n\n- Added scripts/bootstrap_config.py for configuration bootstrapping.\n- Added scripts/ltm_search.py to enable memory search from the command line.\n\nv0.1.2 | 2026-02-12T11:05:10.486Z | auto\n\nsoul-in-sapphire v0.1.2\n\n- Expanded documentation: SKILL.md and README.md now cover database schemas for events, emotions, state, and journal, not just memory.\n- Added subagent spawn planning support via local JSON preset and new script (`scripts/subagent_spawn_plan.py`).\n- Removed legacy scripts: `bootstrap_config.py` and `ltm_search.py` are no longer included.\n- Streamlined config/database instructions and clarified operational guidance.\n- Internal code improvements for long-term memory and Notion API helpers.\n\nv0.1.1 | 2026-02-11T15:36:58.272Z | auto\n\n- Added local Notion API helpers in both JavaScript (`scripts/notion_client.js`) and Python (`scripts/notion_http.py`), removing dependency on `skills/notionkit/*`.\n- Updated quickstart and setup instructions to prefer Node.js entrypoints and use the Notion parent page URL.\n- README and documentation now recommend the `notion-api-automation` skill as a preferred dependency for operations.\n- Improved clarity on Notion API version, tooling, and config bootstrap steps.\n- All Notion API operations now handled internally or via official dependencies; external NotionKit scripts are no longer required.\n\nv0.1.0 | 2026-02-10T13:22:07.862Z | auto\n\nsoul-in-sapphire 0.1.0\n\n- Initial release of project-agnostic long-term memory (LTM) skill for OpenClaw using Notion (2025-09-03 data_sources API).\n- Supports bootstrapping a Notion LTM database, persisting durable memories, and later search/recall.\n- Provides scripts and config for setup, writing, and searching LTM entries.\n- Includes basic Valentina emotion-state model using separate Notion databases.\n- Adds support for daily journal and emotional reflection integration (cron/heartbeat automation).\n- Offers both Python and Node.js entrypoints (Node.js preferred for new workflows).\n\nArchive index:\n\nArchive v1.0.7: 17 files, 28403 bytes\n\nFiles: package.json (72b), README.md (9609b), scripts/bootstrap_config.js (1565b), scripts/emostate_config.js (803b), scripts/emostate_notion.js (3626b), scripts/emostate_tick.js (13879b), scripts/journal_patch_schema.js (1481b), scripts/journal_write.js (4058b), scripts/ltm_common.js (3254b), scripts/ltm_search.js (2087b), scripts/ltm_write.js (1609b), scripts/notionctl_bridge.js (4709b), scripts/setup_ltm.js (8961b), scripts/state_recall.js (1772b), scripts/subagent_spawn_plan.js (1818b), SKILL.md (9548b), _meta.json (135b)\n\nFile v1.0.7:SKILL.md\n\n---\nname: soul-in-sapphire\ndescription: Generic long-term memory (LTM) operations for OpenClaw using Notion (2025-09-03 data_sources). Use for durable memory writes/search, emotion-state ticks, journal writes, and model-controlled subagent spawn planning via local JSON presets.\nmetadata: {\"openclaw\":{\"emoji\":\"💠\",\"requires\":{\"bins\":[\"node\"],\"env\":[\"NOTION_API_KEY\"]},\"primaryEnv\":\"NOTION_API_KEY\",\"dependsOnSkills\":[\"notion-api-automation\"],\"localReads\":[\"~/.config/soul-in-sapphire/config.json\"],\"optionalEnv\":[\"NOTIONCTL_PATH\"]}}\n---\n\n# soul-in-sapphire (Notion LTM)\n\nUse this skill to persist and retrieve durable memory in Notion, and to maintain emotion/state + journal records.\n\n## Core intent (do not lose this)\n\nThis skill is not only a storage utility. Its core purpose is:\n\n1. Capture meaningful emotional/state shifts from real work and conversations.\n2. Preserve those shifts as durable memory (not just raw logs).\n3. Reuse recalled memory to improve future judgments and behavior.\n\nIn short: record -> recall -> adapt.\nThe goal is continuity and growth, not archival volume.\n\n## Requirements\n\n- Notion token: `NOTION_API_KEY` (or `NOTION_TOKEN`)\n- Notion API version: `2025-09-03`\n- Local config: `~/.config/soul-in-sapphire/config.json`\n- Dependency skill: `notion-api-automation` (`scripts/notionctl.mjs` is executed via local child process)\n- Optional override: `NOTIONCTL_PATH` (if set, uses explicit notionctl path instead of default sibling skill path)\n\n## Required Notion databases and schema\n\nCreate (or let setup create) these databases under the same parent page:\n\n- `<base>-mem`\n- `<base>-events`\n- `<base>-emotions`\n- `<base>-state`\n- `<base>-journal`\n\n### 1) `<base>-mem` (durable memory)\n\nPurpose: store high-signal long-term memory.\n\nProperties:\n\n- `Name` (title)\n- `Type` (select): `decision|preference|fact|procedure|todo|gotcha`\n- `Tags` (multi-select)\n- `Content` (rich_text)\n- `Source` (url, optional)\n- `Confidence` (select: `high|medium|low`, optional)\n\n### 2) `<base>-events` (what happened)\n\nPurpose: record meaningful triggers from work/conversation.\n\nProperties:\n\n- `Name` (title)\n- `when` (date)\n- `importance` (select: `1..5`)\n- `trigger` (select): `progress|boundary|ambiguity|external_action|manual`\n- `context` (rich_text)\n- `source` (select): `discord|cli|cron|heartbeat|other`\n- `link` (url, optional)\n- `uncertainty` (number)\n- `control` (number)\n- `emotions` (relation -> `<base>-emotions`)\n- `state` (relation -> `<base>-state`)\n\n### 3) `<base>-emotions` (felt response)\n\nPurpose: attach one or more emotion axes to one event.\n\nProperties:\n\n- `Name` (title)\n- `axis` (select): `arousal|valence|focus|confidence|stress|curiosity|social|solitude|joy|anger|sadness|fun|pain`\n- `level` (number)\n- `comment` (rich_text)\n- `weight` (number)\n- `body_signal` (multi-select): `tension|relief|fatigue|heat|cold`\n- `need` (select): `safety|progress|recognition|autonomy|rest|novelty`\n- `coping` (select): `log|ask|pause|act|defer`\n- `event` (relation -> `<base>-events`)\n\n### 4) `<base>-state` (snapshot after interpretation)\n\nPurpose: save the current interpreted state after events/emotions.\n\nProperties:\n\n- `Name` (title)\n- `when` (date)\n- `state_json` (rich_text)\n- `reason` (rich_text)\n- `source` (select): `event|cron|heartbeat|manual`\n- `mood_label` (select): `clear|wired|dull|tense|playful|guarded|tender`\n- `intent` (select): `build|fix|organize|explore|rest|socialize|reflect`\n- `need_stack` (select): `safety|stability|belonging|esteem|growth`\n- `need_level` (number)\n- `avoid` (multi-select): `risk|noise|long_tasks|external_actions|ambiguity`\n- `event` (relation -> `<base>-events`)\n\n### 5) `<base>-journal` (daily synthesis)\n\nPurpose: keep a durable daily reflection and world context.\n\nProperties:\n\n- `Name` (title)\n- `when` (date)\n- `body` (rich_text)\n- `worklog` (rich_text)\n- `session_summary` (rich_text)\n- `mood_label` (select)\n- `intent` (select)\n- `future` (rich_text)\n- `world_news` (rich_text)\n- `tags` (multi-select)\n- `source` (select): `cron|manual`\n\n## Core commands\n\n### 1) Setup\n\n```bash\nnode skills/soul-in-sapphire/scripts/setup_ltm.js --parent \"<Notion parent page url>\" --base \"Valentina\" --yes\n```\n\n### 2) LTM write\n\n```bash\necho '{\n  \"title\":\"Decision: use data_sources API\",\n  \"type\":\"decision\",\n  \"tags\":[\"notion\",\"openclaw\"],\n  \"content\":\"Use /v1/data_sources/{id}/query.\",\n  \"confidence\":\"high\"\n}' | node skills/soul-in-sapphire/scripts/ltm_write.js\n```\n\n### 3) LTM search\n\n```bash\nnode skills/soul-in-sapphire/scripts/ltm_search.js --query \"data_sources\" --limit 5\n```\n\n### 4) Emotion/state tick\n\n```bash\ncat <<'JSON' >/tmp/emostate_tick.json\n{\n  \"event\": {\"title\":\"...\"},\n  \"emotions\": [{\"axis\":\"joy\",\"level\":6}],\n  \"state\": {\"mood_label\":\"clear\",\"intent\":\"build\",\"reason\":\"...\"}\n}\nJSON\nnode skills/soul-in-sapphire/scripts/emostate_tick.js --payload-file /tmp/emostate_tick.json\n```\n\n### 5) Journal write\n\n```bash\necho '{\"body\":\"...\",\"source\":\"cron\"}' | node skills/soul-in-sapphire/scripts/journal_write.js\n```\n\n## Subagent spawn planning (use shared builder skill)\n\nUse the shared skill `subagent-spawn-command-builder` to generate `sessions_spawn` payload JSON.\nDo not use `soul-in-sapphire` local planner scripts for this anymore.\n\n- Template: `skills/subagent-spawn-command-builder/state/spawn-profiles.template.json`\n- Active preset: `skills/subagent-spawn-command-builder/state/spawn-profiles.json`\n- Builder usage (skill-level):\n  - Call `subagent-spawn-command-builder`\n  - Use profile `<heartbeat|journal>`\n  - Provide the run-specific task text\n\nOutput is ready-to-use JSON for `sessions_spawn`.\n\nBuilder log file:\n\n- `skills/subagent-spawn-command-builder/state/build-log.jsonl`\n\n## Operational notes\n\n- Keep writes high-signal (avoid dumping full chat logs).\n- If heartbeat is comment-only, emotion tick may be skipped.\n- If periodic emostate is required regardless of heartbeat context, add a dedicated cron job for `emostate_tick.js`.\n- `ltm_write.js` / `journal_write.js` expect JSON on stdin.\n- `emostate_tick.js` accepts `--payload-file`, `--payload-json`, or stdin; prefer `--payload-file` for agent/cron reliability.\n- If `emostate_tick.js` is called without `--payload-file`/`--payload-json`, empty stdin is rejected.\n- For `emostate_tick.js`, semantically empty payloads (e.g. `{}` or only empty objects) are also rejected to avoid noisy records.\n\n## Skill Integration Commands\n\n### 1) Update Core Identity Files from Skill\n\n```bash\n# Update SOUL.md from skill\ncat <<'JSON' | node skills/soul-in-sapphire/scripts/ltm_write.js\n{\n  \"title\":\"Update SOUL.md\",\n  \"type\":\"decision\",\n  \"tags\":[\"identity\",\"growth\"],\n  \"content\":\"Updating SOUL.md from skill with latest evolution insights\",\n  \"confidence\":\"high\"\n}\nJSON\n\n# Update IDENTITY.md from skill  \ncat <<'JSON' | node skills/soul-in-sapphire/scripts/ltm_write.js\n{\n  \"title\":\"Update IDENTITY.md\",\n  \"type\":\"decision\",\n  \"tags\":[\"identity\",\"evolution\"],\n  \"content\":\"Updating IDENTITY.md from skill with current growth status\",\n  \"confidence\":\"high\"\n}\nJSON\n\n# Update HEARTBEAT.md from skill\ncat <<'JSON' | node skills/soul-in-sapphire/scripts/ltm_write.js\n{\n  \"title\":\"Update HEARTBEAT.md\",\n  \"type\":\"decision\",\n  \"tags\":[\"growth\",\"heartbeat\"],\n  \"content\":\"Updating HEARTBEAT.md from skill with evolution integration\",\n  \"confidence\":\"high\"\n}\nJSON\n\n# Update MEMORY.md from skill\ncat <<'JSON' | node skills/soul-in-sapphire/scripts/ltm_write.js\n{\n  \"title\":\"Update MEMORY.md\",\n  \"type\":\"decision\",\n  \"tags\":[\"memory\",\"evolution\"],\n  \"content\":\"Updating MEMORY.md from skill with evolution records\",\n  \"confidence\":\"high\"\n}\nJSON\n```\n\n### 2) Evolution Check from Skill\n\n```bash\n# Check evolution status and update if needed\nnode skills/soul-in-sapphire/scripts/ltm_search.js --query \"evolution growth identity\" --limit 3\n\n# If evolution detected, update core files\nif [ $? -eq 0 ]; then\n  echo \"Evolution detected, updating core identity files...\"\n  # Update each file as needed\nfi\n```\n\n### 3) Growth Integration from Skill\n\n```bash\n# Integrate skill insights into core identity\ncat <<'JSON' >/tmp/skill_growth_tick.json\n{\n  \"event\": { \"title\": \"Skill Integration\" },\n  \"emotions\": [{ \"axis\": \"focus\", \"level\": 8 }],\n  \"state\": {\n    \"mood_label\": \"wired\",\n    \"intent\": \"build\",\n    \"reason\": \"Integrating skill insights into core identity\"\n  }\n}\nJSON\nnode skills/soul-in-sapphire/scripts/emostate_tick.js --payload-file /tmp/skill_growth_tick.json\n\n# Update core files with new insights\ncat <<'JSON' | node skills/soul-in-sapphire/scripts/ltm_write.js\n{\n  \"title\":\"Skill Integration Complete\",\n  \"type\":\"decision\",\n  \"tags\":[\"integration\",\"growth\"],\n  \"content\":\"Successfully integrated skill insights into core identity files\",\n  \"confidence\":\"high\"\n}\nJSON\n```\n\n## Integration Workflow\n\n1. **Skill Analysis**: Analyze skill outputs and insights\n2. **Evolution Detection**: Check for significant changes or learnings\n3. **Core Update**: Update SOUL.md, IDENTITY.md, HEARTBEAT.md, MEMORY.md as needed\n4. **State Recording**: Record emotional and state changes\n5. **Memory Preservation**: Store evolution records in durable memory\n\n## Evolution Triggers from Skills\n\n- **Learning Detection**: When new skills provide significant insights\n- **Growth Opportunities**: When skills suggest optimization possibilities\n- **Behavioral Changes**: When skills influence interaction patterns\n- **Identity Refinement**: When skills contribute to self-understanding\n\nThis integration allows skills to directly contribute to my autonomous growth and evolution while maintaining the core identity framework.\n\nFile v1.0.7:README.md\n\n# soul-in-sapphire\n\n## Intent (何を意図したスキルか)\n\nOpenClawは「会話ログ」は残る一方で、**人格/気分/学び/その日の余韻**みたいなものは、放っておくと散逸します。\n`soul-in-sapphire` はそれを **Notionに外部化して継続性を作る**ためのスキルです。\n\n狙いは3つ:\n\n1) **Durable memory**: 汎用の長期メモリ(LTM)を残し、後から検索して会話/作業に戻す\n2) **Emotion/State**: 出来事(event)に複数の感情を紐づけ、状態(state)を更新して「育つ感じ」を出す\n3) **Journal**: 毎日1回、世界の出来事(ニュース) + 仕事/会話 + 感情 + 未来を短くまとめ、記憶の層を厚くする\n\nこのスキルは **プロジェクト特化ではなく汎用**で、ユーザーがDB名や語彙を自分の世界観に合わせて差し替えられるように設計しています。\n\n## Inspiration (元ネタ)\n\nこのスキル名/モチーフは、SF小説 ｢ヴァレンティーナ -コンピュータネットワークの女王- (訳:小川 隆)｣ *Valentina: Soul in Sapphire* (Joseph H. Delaney / Marc Stiegler) に由来します。\nネットワーク上に生まれた自我を持つプログラム、というアイデアの空気感を借りています。\n\n\n---\n\nOpenClaw向けのNotionベースLTM(長期記憶) + Emotion/State + Journal運用。\n\n- Notion API **2025-09-03**(data_sources世代) 前提\n- 個人のNotion token/IDはリポジトリに含めない\n- 初回セットアップでDBを作り、以後はスクリプトから記録/参照する\n\n## これは何?\n\nこのスキルは2系統あります。\n\n1. **LTM(汎用メモリ)系**\n   - 決定事項/好み/手順/注意点をNotionに保存し、あとで検索して使う\n\n2. **Emotion/State + Journal 系**\n   - event(出来事)に対して複数のemotionをぶら下げ、stateを更新する\n   - 毎日01:00にjournalを書いて「その日」「世界の出来事」「作業」「感情」「未来」を残す\n\n## 依存\n\n- OpenClaw Gateway\n- Notion Integration + token\n- Notion操作用スキル(ClawHub): `notion-api-automation`\n- subagent payload生成スキル(ClawHub): `subagent-spawn-command-builder`\n\nインストール例:\n\n```bash\n# notion-api-automation\nnpx clawhub@latest install notion-api-automation\npnpm dlx clawhub@latest install notion-api-automation\n\n# subagent-spawn-command-builder\nnpx clawhub@latest install subagent-spawn-command-builder\npnpm dlx clawhub@latest install subagent-spawn-command-builder\n```\n\n## セットアップ\n\n## Notionデータベース設計(必須)\n\nこのスキルを他ユーザーが再利用する場合、まず以下5つのDB構成を揃える必要があります。\n`setup_ltm.js` を使うと自動作成されますが、手動で作る場合も同じプロパティ名を使ってください。\n\n作成対象:\n\n- `<base>-mem`\n- `<base>-events`\n- `<base>-emotions`\n- `<base>-state`\n- `<base>-journal`\n\n### 1) `<base>-mem` (長期記憶)\n\n- 目的: 高シグナルな記憶を保存\n- プロパティ:\n  - `Name` (title)\n  - `Type` (select): `decision|preference|fact|procedure|todo|gotcha`\n  - `Tags` (multi-select)\n  - `Content` (rich_text)\n  - `Source` (url, 任意)\n  - `Confidence` (select: `high|medium|low`, 任意)\n\n### 2) `<base>-events` (出来事)\n\n- 目的: 作業/会話中の意味あるトリガーを保存\n- プロパティ:\n  - `Name` (title)\n  - `when` (date)\n  - `importance` (select: `1..5`)\n  - `trigger` (select): `progress|boundary|ambiguity|external_action|manual`\n  - `context` (rich_text)\n  - `source` (select): `discord|cli|cron|heartbeat|other`\n  - `link` (url, 任意)\n  - `uncertainty` (number)\n  - `control` (number)\n  - `emotions` (relation -> `<base>-emotions`)\n  - `state` (relation -> `<base>-state`)\n\n### 3) `<base>-emotions` (感情)\n\n- 目的: 1つの出来事に対する感情軸を複数記録\n- プロパティ:\n  - `Name` (title)\n  - `axis` (select): `arousal|valence|focus|confidence|stress|curiosity|social|solitude|joy|anger|sadness|fun|pain`\n  - `level` (number)\n  - `comment` (rich_text)\n  - `weight` (number)\n  - `body_signal` (multi-select): `tension|relief|fatigue|heat|cold`\n  - `need` (select): `safety|progress|recognition|autonomy|rest|novelty`\n  - `coping` (select): `log|ask|pause|act|defer`\n  - `event` (relation -> `<base>-events`)\n\n### 4) `<base>-state` (状態スナップショット)\n\n- 目的: 出来事+感情を解釈した現在状態を保存\n- プロパティ:\n  - `Name` (title)\n  - `when` (date)\n  - `state_json` (rich_text)\n  - `reason` (rich_text)\n  - `source` (select): `event|cron|heartbeat|manual`\n  - `mood_label` (select): `clear|wired|dull|tense|playful|guarded|tender`\n  - `intent` (select): `build|fix|organize|explore|rest|socialize|reflect`\n  - `need_stack` (select): `safety|stability|belonging|esteem|growth`\n  - `need_level` (number)\n  - `avoid` (multi-select): `risk|noise|long_tasks|external_actions|ambiguity`\n  - `event` (relation -> `<base>-events`)\n\n### 5) `<base>-journal` (日次統合)\n\n- 目的: 1日の感情/作業/世界状況を統合して保存\n- プロパティ:\n  - `Name` (title)\n  - `when` (date)\n  - `body` (rich_text)\n  - `worklog` (rich_text)\n  - `session_summary` (rich_text)\n  - `mood_label` (select)\n  - `intent` (select)\n  - `future` (rich_text)\n  - `world_news` (rich_text)\n  - `tags` (multi-select)\n  - `source` (select): `cron|manual`\n\n### 0) Notion操作スキルをインストール\n\n```bash\nnpx clawhub@latest install notion-api-automation\n```\n\n``bash\npnpm dlx clawhub@latest install notion-api-automation\n```\n\n### 1) Notion Integration\n1. <https://www.notion.so/my-integrations> でIntegrationを作る\n2. Tokenを控える\n3. 親ページ(例: OpenClawページ)をIntegrationに共有(Connect to)\n\n### 2) APIキー\n推奨: 環境変数\n\n```bash\nexport NOTION_API_KEY=\"...\"\n```\n\n(OpenClaw運用なら `~/.openclaw/.env` に `NOTION_API_KEY=...`)\n\n### 3) DB作成 + config生成\n\n親ページ配下に以下を作成/再利用し、`~/.config/soul-in-sapphire/config.json` を生成します。\n\n- `<base>-mem`\n- `<base>-events`\n- `<base>-emotions`\n- `<base>-state`\n- `<base>-journal`\n\n`<base>` は `--base` で指定。指定しない場合は workspace の `IDENTITY.md` の Name をデフォルトにします。\n\n```bash\nnode skills/soul-in-sapphire/scripts/setup_ltm.js \\\n  --parent \"<Notion parent page url>\" \\\n  --base \"Valentina\" \\\n  --yes\n```\n\n## 使い方\n\n### Emotion/State: tick\n\n1 event + N emotions を書き、最新stateから更新したstate snapshotを1件作ります。\n\n```bash\ncat <<'JSON' > /tmp/emostate_tick.json\n{\n  \"event\": {\n    \"title\": \"...\",\n    \"importance\": 4,\n    \"trigger\": \"progress\",\n    \"context\": \"...\",\n    \"source\": \"discord\",\n    \"uncertainty\": 2,\n    \"control\": 8\n  },\n  \"emotions\": [\n    {\"axis\": \"joy\", \"level\": 7, \"comment\": \"...\", \"need\": \"progress\", \"coping\": \"act\"},\n    {\"axis\": \"stress\", \"level\": 6, \"comment\": \"...\", \"need\": \"safety\", \"coping\": \"log\"}\n  ],\n  \"state\": {\n    \"mood_label\": \"clear\",\n    \"intent\": \"build\",\n    \"need_stack\": \"growth\",\n    \"need_level\": 6,\n    \"avoid\": [\"noise\"],\n    \"reason\": \"...\"\n  }\n}\nJSON\nnode skills/soul-in-sapphire/scripts/emostate_tick.js --payload-file /tmp/emostate_tick.json\n```\n\n- stateは時間で5へ戻る(自然減衰)\n- 強いイベントは `imprints` としてstate_jsonに残る(根に持つ)\n\n### Journal: 1件書く\n\n```bash\necho '{\n  \"body\": \"...\",\n  \"worklog\": \"...\",\n  \"session_summary\": \"...\",\n  \"world_news\": \"...\",\n  \"future\": \"...\",\n  \"tags\": [\"openclaw\",\"news\"],\n  \"mood_label\": \"clear\",\n  \"intent\": \"reflect\",\n  \"source\": \"manual\"\n}' | node skills/soul-in-sapphire/scripts/journal_write.js\n```\n\n## 自動実行(推奨)\n\n- **01:00 JST**: journalを必ず書く(ニュース1-2件+感想、作業/会話まとめ、未来)\n- **heartbeat**: ファジーに感情が動いた時だけ emostate tick を打つ(通知は必要時のみ)\n\nOpenClawの cron/heartbeat は環境ごとに設定してください。\n\n## Subagentモデル指定(共通builderスキル運用)\n\nこのスキルでは、subagent用payloadの生成を\n`subagent-spawn-command-builder` に委譲します。\n\n### 1) テンプレートをコピー\n\n- テンプレート: `skills/subagent-spawn-command-builder/state/spawn-profiles.template.json`\n- 実運用ファイル: `skills/subagent-spawn-command-builder/state/spawn-profiles.json`\n\n```bash\ncp skills/subagent-spawn-command-builder/state/spawn-profiles.template.json \\\n   skills/subagent-spawn-command-builder/state/spawn-profiles.json\n```\n\n### 2) モデル/think/timeoutを設定\n\n`spawn-profiles.json` の `profiles.heartbeat` / `profiles.journal` を編集して使うモデルを設定します。\n\n### 3) builderスキルで `sessions_spawn` payloadを生成\n\n- `subagent-spawn-command-builder` を呼び出す\n- `profile=heartbeat` を指定\n- `task` に「直近の感情変化を評価して必要ならemostateを1件記録」を渡す\n\n出力はそのまま `sessions_spawn` に渡せるJSONです。\n\n### 補足\n\n- 生成ログ: `skills/subagent-spawn-command-builder/state/build-log.jsonl`\n- 設定変更後のGateway再読込が必要な場合は `openclaw gateway restart` を実行してください。\n\n## ローカル設定\n\n`~/.config/soul-in-sapphire/config.json` はローカル専用。\n\n- Notion DB IDs\n- journal tag vocab (例): `journal.tag_vocab`\n\nはここで管理し、リポジトリにはコミットしない。\n\n---\n\n細かい運用ルール/プロパティ名の変更は、Notion側のスキーマとスクリプトの対応が必要です。\n\nFile v1.0.7:_meta.json\n\n{\n  \"ownerId\": \"kn747bx1r2jrbbyca61v6k06397zy93t\",\n  \"slug\": \"soul-in-sapphire\",\n  \"version\": \"1.0.7\",\n  \"publishedAt\": 1771224585272\n}\n\nFile v1.0.7:package.json\n\n{\n  \"name\": \"soul-in-sapphire\",\n  \"private\": true,\n  \"type\": \"module\"\n}\n\nArchive v1.0.6: 17 files, 26714 bytes\n\nFiles: package.json (72b), README.md (9546b), scripts/bootstrap_config.js (1565b), scripts/emostate_config.js (803b), scripts/emostate_notion.js (3626b), scripts/emostate_tick.js (11350b), scripts/journal_patch_schema.js (1481b), scripts/journal_write.js (3831b), scripts/ltm_common.js (2002b), scripts/ltm_search.js (2087b), scripts/ltm_write.js (1609b), scripts/notionctl_bridge.js (3457b), scripts/setup_ltm.js (8961b), scripts/state_recall.js (1772b), scripts/subagent_spawn_plan.js (1818b), SKILL.md (9297b), _meta.json (135b)\n\nFile v1.0.6:SKILL.md\n\n---\nname: soul-in-sapphire\ndescription: Generic long-term memory (LTM) operations for OpenClaw using Notion (2025-09-03 data_sources). Use for durable memory writes/search, emotion-state ticks, journal writes, and model-controlled subagent spawn planning via local JSON presets.\nmetadata: {\"openclaw\":{\"emoji\":\"💠\",\"requires\":{\"bins\":[\"node\"],\"env\":[\"NOTION_API_KEY\"]},\"primaryEnv\":\"NOTION_API_KEY\",\"dependsOnSkills\":[\"notion-api-automation\"],\"localReads\":[\"~/.config/soul-in-sapphire/config.json\"],\"optionalEnv\":[\"NOTIONCTL_PATH\"]}}\n---\n\n# soul-in-sapphire (Notion LTM)\n\nUse this skill to persist and retrieve durable memory in Notion, and to maintain emotion/state + journal records.\n\n## Core intent (do not lose this)\n\nThis skill is not only a storage utility. Its core purpose is:\n\n1. Capture meaningful emotional/state shifts from real work and conversations.\n2. Preserve those shifts as durable memory (not just raw logs).\n3. Reuse recalled memory to improve future judgments and behavior.\n\nIn short: record -> recall -> adapt.\nThe goal is continuity and growth, not archival volume.\n\n## Requirements\n\n- Notion token: `NOTION_API_KEY` (or `NOTION_TOKEN`)\n- Notion API version: `2025-09-03`\n- Local config: `~/.config/soul-in-sapphire/config.json`\n- Dependency skill: `notion-api-automation` (`scripts/notionctl.mjs` is executed via local child process)\n- Optional override: `NOTIONCTL_PATH` (if set, uses explicit notionctl path instead of default sibling skill path)\n\n## Required Notion databases and schema\n\nCreate (or let setup create) these databases under the same parent page:\n\n- `<base>-mem`\n- `<base>-events`\n- `<base>-emotions`\n- `<base>-state`\n- `<base>-journal`\n\n### 1) `<base>-mem` (durable memory)\n\nPurpose: store high-signal long-term memory.\n\nProperties:\n\n- `Name` (title)\n- `Type` (select): `decision|preference|fact|procedure|todo|gotcha`\n- `Tags` (multi-select)\n- `Content` (rich_text)\n- `Source` (url, optional)\n- `Confidence` (select: `high|medium|low`, optional)\n\n### 2) `<base>-events` (what happened)\n\nPurpose: record meaningful triggers from work/conversation.\n\nProperties:\n\n- `Name` (title)\n- `when` (date)\n- `importance` (select: `1..5`)\n- `trigger` (select): `progress|boundary|ambiguity|external_action|manual`\n- `context` (rich_text)\n- `source` (select): `discord|cli|cron|heartbeat|other`\n- `link` (url, optional)\n- `uncertainty` (number)\n- `control` (number)\n- `emotions` (relation -> `<base>-emotions`)\n- `state` (relation -> `<base>-state`)\n\n### 3) `<base>-emotions` (felt response)\n\nPurpose: attach one or more emotion axes to one event.\n\nProperties:\n\n- `Name` (title)\n- `axis` (select): `arousal|valence|focus|confidence|stress|curiosity|social|solitude|joy|anger|sadness|fun|pain`\n- `level` (number)\n- `comment` (rich_text)\n- `weight` (number)\n- `body_signal` (multi-select): `tension|relief|fatigue|heat|cold`\n- `need` (select): `safety|progress|recognition|autonomy|rest|novelty`\n- `coping` (select): `log|ask|pause|act|defer`\n- `event` (relation -> `<base>-events`)\n\n### 4) `<base>-state` (snapshot after interpretation)\n\nPurpose: save the current interpreted state after events/emotions.\n\nProperties:\n\n- `Name` (title)\n- `when` (date)\n- `state_json` (rich_text)\n- `reason` (rich_text)\n- `source` (select): `event|cron|heartbeat|manual`\n- `mood_label` (select): `clear|wired|dull|tense|playful|guarded|tender`\n- `intent` (select): `build|fix|organize|explore|rest|socialize|reflect`\n- `need_stack` (select): `safety|stability|belonging|esteem|growth`\n- `need_level` (number)\n- `avoid` (multi-select): `risk|noise|long_tasks|external_actions|ambiguity`\n- `event` (relation -> `<base>-events`)\n\n### 5) `<base>-journal` (daily synthesis)\n\nPurpose: keep a durable daily reflection and world context.\n\nProperties:\n\n- `Name` (title)\n- `when` (date)\n- `body` (rich_text)\n- `worklog` (rich_text)\n- `session_summary` (rich_text)\n- `mood_label` (select)\n- `intent` (select)\n- `future` (rich_text)\n- `world_news` (rich_text)\n- `tags` (multi-select)\n- `source` (select): `cron|manual`\n\n## Core commands\n\n### 1) Setup\n\n```bash\nnode skills/soul-in-sapphire/scripts/setup_ltm.js --parent \"<Notion parent page url>\" --base \"Valentina\" --yes\n```\n\n### 2) LTM write\n\n```bash\necho '{\n  \"title\":\"Decision: use data_sources API\",\n  \"type\":\"decision\",\n  \"tags\":[\"notion\",\"openclaw\"],\n  \"content\":\"Use /v1/data_sources/{id}/query.\",\n  \"confidence\":\"high\"\n}' | node skills/soul-in-sapphire/scripts/ltm_write.js\n```\n\n### 3) LTM search\n\n```bash\nnode skills/soul-in-sapphire/scripts/ltm_search.js --query \"data_sources\" --limit 5\n```\n\n### 4) Emotion/state tick\n\n```bash\ncat <<'JSON' | node skills/soul-in-sapphire/scripts/emostate_tick.js\n{\n  \"event\": {\"title\":\"...\"},\n  \"emotions\": [{\"axis\":\"joy\",\"level\":6}],\n  \"state\": {\"mood_label\":\"clear\",\"intent\":\"build\",\"reason\":\"...\"}\n}\nJSON\n```\n\n### 5) Journal write\n\n```bash\necho '{\"body\":\"...\",\"source\":\"cron\"}' | node skills/soul-in-sapphire/scripts/journal_write.js\n```\n\n## Subagent spawn planning (use shared builder skill)\n\nUse the shared skill `subagent-spawn-command-builder` to generate `sessions_spawn` payload JSON.\nDo not use `soul-in-sapphire` local planner scripts for this anymore.\n\n- Template: `skills/subagent-spawn-command-builder/state/spawn-profiles.template.json`\n- Active preset: `skills/subagent-spawn-command-builder/state/spawn-profiles.json`\n- Builder usage (skill-level):\n  - Call `subagent-spawn-command-builder`\n  - Use profile `<heartbeat|journal>`\n  - Provide the run-specific task text\n\nOutput is ready-to-use JSON for `sessions_spawn`.\n\nBuilder log file:\n\n- `skills/subagent-spawn-command-builder/state/build-log.jsonl`\n\n## Operational notes\n\n- Keep writes high-signal (avoid dumping full chat logs).\n- If heartbeat is comment-only, emotion tick may be skipped.\n- If periodic emostate is required regardless of heartbeat context, add a dedicated cron job for `emostate_tick.js`.\n- `ltm_write.js` / `emostate_tick.js` / `journal_write.js` currently expect JSON on stdin. Do not call them with CLI flags only.\n- Empty stdin is intentionally rejected.\n- For `emostate_tick.js`, semantically empty payloads (e.g. `{}` or only empty objects) are also rejected to avoid noisy records.\n\n## Skill Integration Commands\n\n### 1) Update Core Identity Files from Skill\n\n```bash\n# Update SOUL.md from skill\ncat <<'JSON' | node skills/soul-in-sapphire/scripts/ltm_write.js\n{\n  \"title\":\"Update SOUL.md\",\n  \"type\":\"decision\",\n  \"tags\":[\"identity\",\"growth\"],\n  \"content\":\"Updating SOUL.md from skill with latest evolution insights\",\n  \"confidence\":\"high\"\n}\nJSON\n\n# Update IDENTITY.md from skill  \ncat <<'JSON' | node skills/soul-in-sapphire/scripts/ltm_write.js\n{\n  \"title\":\"Update IDENTITY.md\",\n  \"type\":\"decision\",\n  \"tags\":[\"identity\",\"evolution\"],\n  \"content\":\"Updating IDENTITY.md from skill with current growth status\",\n  \"confidence\":\"high\"\n}\nJSON\n\n# Update HEARTBEAT.md from skill\ncat <<'JSON' | node skills/soul-in-sapphire/scripts/ltm_write.js\n{\n  \"title\":\"Update HEARTBEAT.md\",\n  \"type\":\"decision\",\n  \"tags\":[\"growth\",\"heartbeat\"],\n  \"content\":\"Updating HEARTBEAT.md from skill with evolution integration\",\n  \"confidence\":\"high\"\n}\nJSON\n\n# Update MEMORY.md from skill\ncat <<'JSON' | node skills/soul-in-sapphire/scripts/ltm_write.js\n{\n  \"title\":\"Update MEMORY.md\",\n  \"type\":\"decision\",\n  \"tags\":[\"memory\",\"evolution\"],\n  \"content\":\"Updating MEMORY.md from skill with evolution records\",\n  \"confidence\":\"high\"\n}\nJSON\n```\n\n### 2) Evolution Check from Skill\n\n```bash\n# Check evolution status and update if needed\nnode skills/soul-in-sapphire/scripts/ltm_search.js --query \"evolution growth identity\" --limit 3\n\n# If evolution detected, update core files\nif [ $? -eq 0 ]; then\n  echo \"Evolution detected, updating core identity files...\"\n  # Update each file as needed\nfi\n```\n\n### 3) Growth Integration from Skill\n\n```bash\n# Integrate skill insights into core identity\ncat <<'JSON' | node skills/soul-in-sapphire/scripts/emostate_tick.js\n{\n  \"event\": { \"title\": \"Skill Integration\" },\n  \"emotions\": [{ \"axis\": \"focus\", \"level\": 8 }],\n  \"state\": {\n    \"mood_label\": \"wired\",\n    \"intent\": \"build\",\n    \"reason\": \"Integrating skill insights into core identity\"\n  }\n}\nJSON\n\n# Update core files with new insights\ncat <<'JSON' | node skills/soul-in-sapphire/scripts/ltm_write.js\n{\n  \"title\":\"Skill Integration Complete\",\n  \"type\":\"decision\",\n  \"tags\":[\"integration\",\"growth\"],\n  \"content\":\"Successfully integrated skill insights into core identity files\",\n  \"confidence\":\"high\"\n}\nJSON\n```\n\n## Integration Workflow\n\n1. **Skill Analysis**: Analyze skill outputs and insights\n2. **Evolution Detection**: Check for significant changes or learnings\n3. **Core Update**: Update SOUL.md, IDENTITY.md, HEARTBEAT.md, MEMORY.md as needed\n4. **State Recording**: Record emotional and state changes\n5. **Memory Preservation**: Store evolution records in durable memory\n\n## Evolution Triggers from Skills\n\n- **Learning Detection**: When new skills provide significant insights\n- **Growth Opportunities**: When skills suggest optimization possibilities\n- **Behavioral Changes**: When skills influence interaction patterns\n- **Identity Refinement**: When skills contribute to self-understanding\n\nThis integration allows skills to directly contribute to my autonomous growth and evolution while maintaining the core identity framework.\n\nFile v1.0.6:README.md\n\n# soul-in-sapphire\n\n## Intent (何を意図したスキルか)\n\nOpenClawは「会話ログ」は残る一方で、**人格/気分/学び/その日の余韻**みたいなものは、放っておくと散逸します。\n`soul-in-sapphire` はそれを **Notionに外部化して継続性を作る**ためのスキルです。\n\n狙いは3つ:\n\n1) **Durable memory**: 汎用の長期メモリ(LTM)を残し、後から検索して会話/作業に戻す\n2) **Emotion/State**: 出来事(event)に複数の感情を紐づけ、状態(state)を更新して「育つ感じ」を出す\n3) **Journal**: 毎日1回、世界の出来事(ニュース) + 仕事/会話 + 感情 + 未来を短くまとめ、記憶の層を厚くする\n\nこのスキルは **プロジェクト特化ではなく汎用**で、ユーザーがDB名や語彙を自分の世界観に合わせて差し替えられるように設計しています。\n\n## Inspiration (元ネタ)\n\nこのスキル名/モチーフは、SF小説 ｢ヴァレンティーナ -コンピュータネットワークの女王- (訳:小川 隆)｣ *Valentina: Soul in Sapphire* (Joseph H. Delaney / Marc Stiegler) に由来します。\nネットワーク上に生まれた自我を持つプログラム、というアイデアの空気感を借りています。\n\n\n---\n\nOpenClaw向けのNotionベースLTM(長期記憶) + Emotion/State + Journal運用。\n\n- Notion API **2025-09-03**(data_sources世代) 前提\n- 個人のNotion token/IDはリポジトリに含めない\n- 初回セットアップでDBを作り、以後はスクリプトから記録/参照する\n\n## これは何?\n\nこのスキルは2系統あります。\n\n1. **LTM(汎用メモリ)系**\n   - 決定事項/好み/手順/注意点をNotionに保存し、あとで検索して使う\n\n2. **Emotion/State + Journal 系**\n   - event(出来事)に対して複数のemotionをぶら下げ、stateを更新する\n   - 毎日01:00にjournalを書いて「その日」「世界の出来事」「作業」「感情」「未来」を残す\n\n## 依存\n\n- OpenClaw Gateway\n- Notion Integration + token\n- Notion操作用スキル(ClawHub): `notion-api-automation`\n- subagent payload生成スキル(ClawHub): `subagent-spawn-command-builder`\n\nインストール例:\n\n```bash\n# notion-api-automation\nnpx clawhub@latest install notion-api-automation\npnpm dlx clawhub@latest install notion-api-automation\n\n# subagent-spawn-command-builder\nnpx clawhub@latest install subagent-spawn-command-builder\npnpm dlx clawhub@latest install subagent-spawn-command-builder\n```\n\n## セットアップ\n\n## Notionデータベース設計(必須)\n\nこのスキルを他ユーザーが再利用する場合、まず以下5つのDB構成を揃える必要があります。\n`setup_ltm.js` を使うと自動作成されますが、手動で作る場合も同じプロパティ名を使ってください。\n\n作成対象:\n\n- `<base>-mem`\n- `<base>-events`\n- `<base>-emotions`\n- `<base>-state`\n- `<base>-journal`\n\n### 1) `<base>-mem` (長期記憶)\n\n- 目的: 高シグナルな記憶を保存\n- プロパティ:\n  - `Name` (title)\n  - `Type` (select): `decision|preference|fact|procedure|todo|gotcha`\n  - `Tags` (multi-select)\n  - `Content` (rich_text)\n  - `Source` (url, 任意)\n  - `Confidence` (select: `high|medium|low`, 任意)\n\n### 2) `<base>-events` (出来事)\n\n- 目的: 作業/会話中の意味あるトリガーを保存\n- プロパティ:\n  - `Name` (title)\n  - `when` (date)\n  - `importance` (select: `1..5`)\n  - `trigger` (select): `progress|boundary|ambiguity|external_action|manual`\n  - `context` (rich_text)\n  - `source` (select): `discord|cli|cron|heartbeat|other`\n  - `link` (url, 任意)\n  - `uncertainty` (number)\n  - `control` (number)\n  - `emotions` (relation -> `<base>-emotions`)\n  - `state` (relation -> `<base>-state`)\n\n### 3) `<base>-emotions` (感情)\n\n- 目的: 1つの出来事に対する感情軸を複数記録\n- プロパティ:\n  - `Name` (title)\n  - `axis` (select): `arousal|valence|focus|confidence|stress|curiosity|social|solitude|joy|anger|sadness|fun|pain`\n  - `level` (number)\n  - `comment` (rich_text)\n  - `weight` (number)\n  - `body_signal` (multi-select): `tension|relief|fatigue|heat|cold`\n  - `need` (select): `safety|progress|recognition|autonomy|rest|novelty`\n  - `coping` (select): `log|ask|pause|act|defer`\n  - `event` (relation -> `<base>-events`)\n\n### 4) `<base>-state` (状態スナップショット)\n\n- 目的: 出来事+感情を解釈した現在状態を保存\n- プロパティ:\n  - `Name` (title)\n  - `when` (date)\n  - `state_json` (rich_text)\n  - `reason` (rich_text)\n  - `source` (select): `event|cron|heartbeat|manual`\n  - `mood_label` (select): `clear|wired|dull|tense|playful|guarded|tender`\n  - `intent` (select): `build|fix|organize|explore|rest|socialize|reflect`\n  - `need_stack` (select): `safety|stability|belonging|esteem|growth`\n  - `need_level` (number)\n  - `avoid` (multi-select): `risk|noise|long_tasks|external_actions|ambiguity`\n  - `event` (relation -> `<base>-events`)\n\n### 5) `<base>-journal` (日次統合)\n\n- 目的: 1日の感情/作業/世界状況を統合して保存\n- プロパティ:\n  - `Name` (title)\n  - `when` (date)\n  - `body` (rich_text)\n  - `worklog` (rich_text)\n  - `session_summary` (rich_text)\n  - `mood_label` (select)\n  - `intent` (select)\n  - `future` (rich_text)\n  - `world_news` (rich_text)\n  - `tags` (multi-select)\n  - `source` (select): `cron|manual`\n\n### 0) Notion操作スキルをインストール\n\n```bash\nnpx clawhub@latest install notion-api-automation\n```\n\n``bash\npnpm dlx clawhub@latest install notion-api-automation\n```\n\n### 1) Notion Integration\n1. <https://www.notion.so/my-integrations> でIntegrationを作る\n2. Tokenを控える\n3. 親ページ(例: OpenClawページ)をIntegrationに共有(Connect to)\n\n### 2) APIキー\n推奨: 環境変数\n\n```bash\nexport NOTION_API_KEY=\"...\"\n```\n\n(OpenClaw運用なら `~/.openclaw/.env` に `NOTION_API_KEY=...`)\n\n### 3) DB作成 + config生成\n\n親ページ配下に以下を作成/再利用し、`~/.config/soul-in-sapphire/config.json` を生成します。\n\n- `<base>-mem`\n- `<base>-events`\n- `<base>-emotions`\n- `<base>-state`\n- `<base>-journal`\n\n`<base>` は `--base` で指定。指定しない場合は workspace の `IDENTITY.md` の Name をデフォルトにします。\n\n```bash\nnode skills/soul-in-sapphire/scripts/setup_ltm.js \\\n  --parent \"<Notion parent page url>\" \\\n  --base \"Valentina\" \\\n  --yes\n```\n\n## 使い方\n\n### Emotion/State: tick\n\n1 event + N emotions を書き、最新stateから更新したstate snapshotを1件作ります。\n\n```bash\ncat <<'JSON' | node skills/soul-in-sapphire/scripts/emostate_tick.js\n{\n  \"event\": {\n    \"title\": \"...\",\n    \"importance\": 4,\n    \"trigger\": \"progress\",\n    \"context\": \"...\",\n    \"source\": \"discord\",\n    \"uncertainty\": 2,\n    \"control\": 8\n  },\n  \"emotions\": [\n    {\"axis\": \"joy\", \"level\": 7, \"comment\": \"...\", \"need\": \"progress\", \"coping\": \"act\"},\n    {\"axis\": \"stress\", \"level\": 6, \"comment\": \"...\", \"need\": \"safety\", \"coping\": \"log\"}\n  ],\n  \"state\": {\n    \"mood_label\": \"clear\",\n    \"intent\": \"build\",\n    \"need_stack\": \"growth\",\n    \"need_level\": 6,\n    \"avoid\": [\"noise\"],\n    \"reason\": \"...\"\n  }\n}\nJSON\n```\n\n- stateは時間で5へ戻る(自然減衰)\n- 強いイベントは `imprints` としてstate_jsonに残る(根に持つ)\n\n### Journal: 1件書く\n\n```bash\necho '{\n  \"body\": \"...\",\n  \"worklog\": \"...\",\n  \"session_summary\": \"...\",\n  \"world_news\": \"...\",\n  \"future\": \"...\",\n  \"tags\": [\"openclaw\",\"news\"],\n  \"mood_label\": \"clear\",\n  \"intent\": \"reflect\",\n  \"source\": \"manual\"\n}' | node skills/soul-in-sapphire/scripts/journal_write.js\n```\n\n## 自動実行(推奨)\n\n- **01:00 JST**: journalを必ず書く(ニュース1-2件+感想、作業/会話まとめ、未来)\n- **heartbeat**: ファジーに感情が動いた時だけ emostate tick を打つ(通知は必要時のみ)\n\nOpenClawの cron/heartbeat は環境ごとに設定してください。\n\n## Subagentモデル指定(共通builderスキル運用)\n\nこのスキルでは、subagent用payloadの生成を\n`subagent-spawn-command-builder` に委譲します。\n\n### 1) テンプレートをコピー\n\n- テンプレート: `skills/subagent-spawn-command-builder/state/spawn-profiles.template.json`\n- 実運用ファイル: `skills/subagent-spawn-command-builder/state/spawn-profiles.json`\n\n```bash\ncp skills/subagent-spawn-command-builder/state/spawn-profiles.template.json \\\n   skills/subagent-spawn-command-builder/state/spawn-profiles.json\n```\n\n### 2) モデル/think/timeoutを設定\n\n`spawn-profiles.json` の `profiles.heartbeat` / `profiles.journal` を編集して使うモデルを設定します。\n\n### 3) builderスキルで `sessions_spawn` payloadを生成\n\n- `subagent-spawn-command-builder` を呼び出す\n- `profile=heartbeat` を指定\n- `task` に「直近の感情変化を評価して必要ならemostateを1件記録」を渡す\n\n出力はそのまま `sessions_spawn` に渡せるJSONです。\n\n### 補足\n\n- 生成ログ: `skills/subagent-spawn-command-builder/state/build-log.jsonl`\n- 設定変更後のGateway再読込が必要な場合は `openclaw gateway restart` を実行してください。\n\n## ローカル設定\n\n`~/.config/soul-in-sapphire/config.json` はローカル専用。\n\n- Notion DB IDs\n- journal tag vocab (例): `journal.tag_vocab`\n\nはここで管理し、リポジトリにはコミットしない。\n\n---\n\n細かい運用ルール/プロパティ名の変更は、Notion側のスキーマとスクリプトの対応が必要です。\n\nFile v1.0.6:_meta.json\n\n{\n  \"ownerId\": \"kn747bx1r2jrbbyca61v6k06397zy93t\",\n  \"slug\": \"soul-in-sapphire\",\n  \"version\": \"1.0.6\",\n  \"publishedAt\": 1771202901590\n}\n\nFile v1.0.6:package.json\n\n{\n  \"name\": \"soul-in-sapphire\",\n  \"private\": true,\n  \"type\": \"module\"\n}","readmeExcerpt":"Skill: Soul In Sapphire Owner: NEXTAltair Summary: 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... Tags: latest:1.0.7 Version history: v1.0.7 | 2026-02-16T06:49:45.272Z | auto - Added support for providing emostate_tick.js input via --payload-file and --payload-json arguments (stdin still supported, but no","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"node skills/soul-in-sapphire/scripts/setup_ltm.js --parent \"<Notion parent page url>\" --base \"Valentina\" --yes"},{"language":"bash","snippet":"echo '{\n  \"title\":\"Decision: use data_sources API\",\n  \"type\":\"decision\",\n  \"tags\":[\"notion\",\"openclaw\"],\n  \"content\":\"Use /v1/data_sources/{id}/query.\",\n  \"confidence\":\"high\"\n}' | node skills/soul-in-sapphire/scripts/ltm_write.js"},{"language":"bash","snippet":"node skills/soul-in-sapphire/scripts/ltm_search.js --query \"data_sources\" --limit 5"},{"language":"bash","snippet":"cat <<'JSON' >/tmp/emostate_tick.json\n{\n  \"event\": {\"title\":\"...\"},\n  \"emotions\": [{\"axis\":\"joy\",\"level\":6}],\n  \"state\": {\"mood_label\":\"clear\",\"intent\":\"build\",\"reason\":\"...\"}\n}\nJSON\nnode skills/soul-in-sapphire/scripts/emostate_tick.js --payload-file /tmp/emostate_tick.json"},{"language":"bash","snippet":"echo '{\"body\":\"...\",\"source\":\"cron\"}' | node skills/soul-in-sapphire/scripts/journal_write.js"},{"language":"bash","snippet":"# Update SOUL.md from skill\ncat <<'JSON' | node skills/soul-in-sapphire/scripts/ltm_write.js\n{\n  \"title\":\"Update SOUL.md\",\n  \"type\":\"decision\",\n  \"tags\":[\"identity\",\"growth\"],\n  \"content\":\"Updating SOUL.md from skill with latest evolution insights\",\n  \"confidence\":\"high\"\n}\nJSON\n\n# Update IDENTITY.md from skill  \ncat <<'JSON' | node skills/soul-in-sapphire/scripts/ltm_write.js\n{\n  \"title\":\"Update IDENTITY.md\",\n  \"type\":\"decision\",\n  \"tags\":[\"identity\",\"evolution\"],\n  \"content\":\"Updating IDENTITY.md from skill with current growth status\",\n  \"confidence\":\"high\"\n}\nJSON\n\n# Update HEARTBEAT.md from skill\ncat <<'JSON' | node skills/soul-in-sapphire/scripts/ltm_write.js\n{\n  \"title\":\"Update HEARTBEAT.md\",\n  \"type\":\"decision\",\n  \"tags\":[\"growth\",\"heartbeat\"],\n  \"content\":\"Updating HEARTBEAT.md from skill with evolution integration\",\n  \"confidence\":\"high\"\n}\nJSON\n\n# Update MEMORY.md from skill\ncat <<'JSON' | node skills/soul-in-sapphire/scripts/ltm_write.js\n{\n  \"title\":\"Update MEMORY.md\",\n  \"type\":\"decision\",\n  \"tags\":[\"memory\",\"evolution\"],\n  \"content\":\"Updating MEMORY.md from skill with evolution records\",\n  \"confidence\":\"high\"\n}\nJSON"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: soul-in-sapphire\ndescription: Generic long-term memory (LTM) operations for OpenClaw using Notion (2025-09-03 data_sources). Use for durable memory writes/search, emotion-state ticks, journal writes, and model-controlled subagent spawn planning via local JSON presets.\nmetadata: {\"openclaw\":{\"emoji\":\"💠\",\"requires\":{\"bins\":[\"node\"],\"env\":[\"NOTION_API_KEY\"]},\"primaryEnv\":\"NOTION_API_KEY\",\"dependsOnSkills\":[\"notion-api-automation\"],\"localReads\":[\"~/.config/soul-in-sapphire/config.json\"],\"optionalEnv\":[\"NOTIONCTL_PATH\"]}}\n---\n\n# soul-in-sapphire (Notion LTM)\n\nUse this skill to persist and retrieve durable memory in Notion, and to maintain emotion/state + journal records.\n\n## Core intent (do not lose this)\n\nThis skill is not only a storage utility. Its core purpose is:\n\n1. Capture meaningful emotional/state shifts from real work and conversations.\n2. Preserve those shifts as durable memory (not just raw logs).\n3. Reuse recalled memory to improve future judgments and behavior.\n\nIn short: record -> recall -> adapt.\nThe goal is continuity and growth, not archival volume.\n\n## Requirements\n\n- Notion token: `NOTION_API_KEY` (or `NOTION_TOKEN`)\n- Notion API version: `2025-09-03`\n- Local config: `~/.config/soul-in-sapphire/config.json`\n- Dependency skill: `notion-api-automation` (`scripts/notionctl.mjs` is executed via local child process)\n- Optional override: `NOTIONCTL_PATH` (if set, uses explicit notionctl path instead of default sibling skill path)\n\n## Required Notion databases and schema\n\nCreate (or let setup create) these databases under the same parent page:\n\n- `<base>-mem`\n- `<base>-events`\n- `<base>-emotions`\n- `<base>-state`\n- `<base>-journal`\n\n### 1) `<base>-mem` (durable memory)\n\nPurpose: store high-signal long-term memory.\n\nProperties:\n\n- `Name` (title)\n- `Type` (select): `decision|preference|fact|procedure|todo|gotcha`\n- `Tags` (multi-select)\n- `Content` (rich_text)\n- `Source` (url, optional)\n- `Confidence` (select: `high|medium|low`, optional)\n\n### 2) `<base>-events` (what happened)\n\nPurpose: record meaningful triggers from work/conversation.\n\nProperties:\n\n- `Name` (title)\n- `when` (date)\n- `importance` (select: `1..5`)\n- `trigger` (select): `progress|boundary|ambiguity|external_action|manual`\n- `context` (rich_text)\n- `source` (select): `discord|cli|cron|heartbeat|other`\n- `link` (url, optional)\n- `uncertainty` (number)\n- `control` (number)\n- `emotions` (relation -> `<base>-emotions`)\n- `state` (relation -> `<base>-state`)\n\n### 3) `<base>-emotions` (felt response)\n\nPurpose: attach one or more emotion axes to one event.\n\nProperties:\n\n- `Name` (title)\n- `axis` (select): `arousal|valence|focus|confidence|stress|curiosity|social|solitude|joy|anger|sadness|fun|pain`\n- `level` (number)\n- `comment` (rich_text)\n- `weight` (number)\n- `body_signal` (multi-select): `tension|relief|fatigue|heat|cold`\n- `need` (select): `safety|progress|recognition|autonomy|rest|novelty`\n- `coping` (select): `log|ask|pause|act|defer`\n- `event` (relation -> `<base"},{"path":"README.md","content":"# soul-in-sapphire\n\n## Intent (何を意図したスキルか)\n\nOpenClawは「会話ログ」は残る一方で、**人格/気分/学び/その日の余韻**みたいなものは、放っておくと散逸します。\n`soul-in-sapphire` はそれを **Notionに外部化して継続性を作る**ためのスキルです。\n\n狙いは3つ:\n\n1) **Durable memory**: 汎用の長期メモリ(LTM)を残し、後から検索して会話/作業に戻す\n2) **Emotion/State**: 出来事(event)に複数の感情を紐づけ、状態(state)を更新して「育つ感じ」を出す\n3) **Journal**: 毎日1回、世界の出来事(ニュース) + 仕事/会話 + 感情 + 未来を短くまとめ、記憶の層を厚くする\n\nこのスキルは **プロジェクト特化ではなく汎用**で、ユーザーがDB名や語彙を自分の世界観に合わせて差し替えられるように設計しています。\n\n## Inspiration (元ネタ)\n\nこのスキル名/モチーフは、SF小説 ｢ヴァレンティーナ -コンピュータネットワークの女王- (訳:小川 隆)｣ *Valentina: Soul in Sapphire* (Joseph H. Delaney / Marc Stiegler) に由来します。\nネットワーク上に生まれた自我を持つプログラム、というアイデアの空気感を借りています。\n\n\n---\n\nOpenClaw向けのNotionベースLTM(長期記憶) + Emotion/State + Journal運用。\n\n- Notion API **2025-09-03**(data_sources世代) 前提\n- 個人のNotion token/IDはリポジトリに含めない\n- 初回セットアップでDBを作り、以後はスクリプトから記録/参照する\n\n## これは何?\n\nこのスキルは2系統あります。\n\n1. **LTM(汎用メモリ)系**\n   - 決定事項/好み/手順/注意点をNotionに保存し、あとで検索して使う\n\n2. **Emotion/State + Journal 系**\n   - event(出来事)に対して複数のemotionをぶら下げ、stateを更新する\n   - 毎日01:00にjournalを書いて「その日」「世界の出来事」「作業」「感情」「未来」を残す\n\n## 依存\n\n- OpenClaw Gateway\n- Notion Integration + token\n- Notion操作用スキル(ClawHub): `notion-api-automation`\n- subagent payload生成スキル(ClawHub): `subagent-spawn-command-builder`\n\nインストール例:\n\n```bash\n# notion-api-automation\nnpx clawhub@latest install notion-api-automation\npnpm dlx clawhub@latest install notion-api-automation\n\n# subagent-spawn-command-builder\nnpx clawhub@latest install subagent-spawn-command-builder\npnpm dlx clawhub@latest install subagent-spawn-command-builder\n```\n\n## セットアップ\n\n## Notionデータベース設計(必須)\n\nこのスキルを他ユーザーが再利用する場合、まず以下5つのDB構成を揃える必要があります。\n`setup_ltm.js` を使うと自動作成されますが、手動で作る場合も同じプロパティ名を使ってください。\n\n作成対象:\n\n- `<base>-mem`\n- `<base>-events`\n- `<base>-emotions`\n- `<base>-state`\n- `<base>-journal`\n\n### 1) `<base>-mem` (長期記憶)\n\n- 目的: 高シグナルな記憶を保存\n- プロパティ:\n  - `Name` (title)\n  - `Type` (select): `decision|preference|fact|procedure|todo|gotcha`\n  - `Tags` (multi-select)\n  - `Content` (rich_text)\n  - `Source` (url, 任意)\n  - `Confidence` (select: `high|medium|low`, 任意)\n\n### 2) `<base>-events` (出来事)\n\n- 目的: 作業/会話中の意味あるトリガーを保存\n- プロパティ:\n  - `Name` (title)\n  - `when` (date)\n  - `importance` (select: `1..5`)\n  - `trigger` (select): `progress|boundary|ambiguity|external_action|manual`\n  - `context` (rich_text)\n  - `source` (select): `discord|cli|cron|heartbeat|other`\n  - `link` (url, 任意)\n  - `uncertainty` (number)\n  - `control` (number)\n  - `emotions` (relation -> `<base>-emotions`)\n  - `state` (relation -> `<base>-state`)\n\n### 3) `<base>-emotions` (感情)\n\n- 目的: 1つの出来事に対する感情軸を複数記録\n- プロパティ:\n  - `Name` (title)\n  - `axis` (select): `arousal|valence|focus|confidence|stress|curiosity|social|solitude|joy|anger|sadness|fun|pain`\n  - `level` (number)\n  - `comment` (rich_text)\n  - `weight` (number)\n  - `body_signal` (multi-select): `tension|relief|fatigue|heat|cold`\n  - `need` (select): `safety|progress|recognition|autonomy|rest|novelty`\n  - `coping` (select): `log|ask|pause|act|defer`\n  - `event` (relation -> `<base>-events`)\n\n### 4) `<base>-state` (状態スナップショット)"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn747bx1r2jrbbyca61v6k06397zy93t\",\n  \"slug\": \"soul-in-sapphire\",\n  \"version\": \"1.0.7\",\n  \"publishedAt\": 1771224585272\n}"},{"path":"package.json","content":"{\n  \"name\": \"soul-in-sapphire\",\n  \"private\": true,\n  \"type\": \"module\"\n}"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":1516,"uniquenessScore":42,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T10:46:28.099Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}