{
  "schemaVersion": "1.0",
  "item": {
    "slug": "org-memory",
    "name": "org-memory",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/DCPRevere/org-memory",
    "canonicalUrl": "https://clawhub.ai/DCPRevere/org-memory",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/org-memory",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=org-memory",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "plugin/index.test.ts",
      "plugin/index.ts",
      "plugin/openclaw.plugin.json",
      "plugin/package-lock.json",
      "plugin/package.json"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "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. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/org-memory"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/org-memory",
    "agentPageUrl": "https://openagent3.xyz/skills/org-memory/agent",
    "manifestUrl": "https://openagent3.xyz/skills/org-memory/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/org-memory/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "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. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "org-memory",
        "body": "Use the org CLI to maintain structured, linked, human-readable knowledge in org-mode files. Org files are plain text with rich structure: headlines, TODO states, tags, properties, timestamps, and links. Combined with org-roam, they form a knowledge graph backed by a SQLite database."
      },
      {
        "title": "Shortcuts",
        "body": "When your human uses these patterns, act on them directly."
      },
      {
        "title": "Org mutations",
        "body": "PrefixAliasActiont:Todo:Create TODO in human's org (extracts dates)d:Done: / Finished:Mark a TODO as DONEs:Reschedule a TODOr:Note:Save to human's roam (knowledge/info)k:Know: / Remember:Agent learns it (agent's knowledge base)"
      },
      {
        "title": "Behaviour modifiers",
        "body": "These prefixes change how you respond, not what you store.\n\nPrefixActionv:Voice reply (TTS)?Research (web + files)@Roam lookupw:Work context (Remundo)!Urgent — act nowq:Quick answer, no tools"
      },
      {
        "title": "Todo — create a task",
        "body": "t: <text> or Todo: <text> means \"create a task.\" Extract any date or timeframe from the text and schedule it. If the text contains a relative date (\"in 3 weeks\", \"by Friday\", \"next month\"), compute the actual date and add --scheduled <date> or --deadline <date>.\n\nAction: org add \"$ORG_MEMORY_HUMAN_DIR/inbox.org\" '<title>' --todo TODO --scheduled <date> --db \"$ORG_MEMORY_HUMAN_DATABASE_LOCATION\" -f json\n\nUse --deadline instead of --scheduled when the text implies a hard due date (\"by Friday\", \"due March 1st\"). Use --scheduled for softer timing (\"in 3 weeks\", \"next month\", \"tomorrow\").\n\nExamples:\n\n\"t: submit taxes in 3 weeks\" → org add .../inbox.org 'Submit taxes' --todo TODO --scheduled 2026-03-18\n\"Todo: renew passport by June\" → org add .../inbox.org 'Renew passport' --todo TODO --deadline 2026-06-01\n\"t: call dentist tomorrow\" → org add .../inbox.org 'Call dentist' --todo TODO --scheduled 2026-02-26\n\"Todo: book flights\" → org add .../inbox.org 'Book flights' --todo TODO (no date mentioned)"
      },
      {
        "title": "Note — for the human",
        "body": "r: <text> or Note: <text> means \"add this to MY org files.\" It is always a task or reminder for the human, not for the agent.\n\nAction: org add \"$ORG_MEMORY_HUMAN_DIR/inbox.org\" '<text>' --todo TODO -f json\n\nIf the note includes a date or deadline, add --scheduled <date> or --deadline <date>. If there's no date, add it without one (the human will schedule it themselves, or ask you to).\n\nExamples:\n\n\"r: Buy groceries\" → org add .../inbox.org 'Buy groceries' --todo TODO\n\"Note: Review PR #42 by Friday\" → org add .../inbox.org 'Review PR #42' --todo TODO --deadline 2026-02-28\n\"r: we could add feature X to the app\" → org add .../inbox.org 'Add feature X to the app' --todo TODO\n\"Note: send email to Donna about safeguarding\" → org add .../inbox.org 'Send email to Donna about safeguarding' --todo TODO\n\nNote vs Todo: Both create TODO headings. The difference is intent — t: / Todo: signals a concrete task (always try to extract a date), while r: / Note: is broader (ideas, reminders, observations). When there's no date, add it without one.\n\nEdge case — ideas and observations: If the human says \"r: we could do X\" or \"Note: idea for Y\", it's still a Note. They're telling you to write it down for them. Add it as a TODO. Don't create a roam node, don't put it in the agent's knowledge base."
      },
      {
        "title": "Schedule — reschedule a task",
        "body": "s: <text> means \"reschedule this task.\" Search for the matching TODO and update its scheduled date.\n\nAction:\n\nSearch: org todo list --state TODO --search '<text>' -d \"$ORG_MEMORY_HUMAN_DIR\" -f json\nIf exactly one match: org schedule <custom_id> <date> -d \"$ORG_MEMORY_HUMAN_DIR\" --db \"$ORG_MEMORY_HUMAN_DATABASE_LOCATION\" -f json\nIf multiple matches: show them to the human and ask which one\nIf no match: tell the human you couldn't find it\n\nExamples:\n\n\"s: taxes to next Friday\" → find \"taxes\" TODO, reschedule to next Friday\n\"s: dentist 2026-04-01\" → find \"dentist\" TODO, reschedule to 2026-04-01"
      },
      {
        "title": "Done — mark complete",
        "body": "d: <text>, Done: <text>, or Finished: <text> means \"mark this task as DONE.\" Search for the matching TODO and set its state.\n\nAction:\n\nSearch: org todo list --state TODO --search '<text>' -d \"$ORG_MEMORY_HUMAN_DIR\" -f json\nIf exactly one match: org todo set <custom_id> DONE -d \"$ORG_MEMORY_HUMAN_DIR\" --db \"$ORG_MEMORY_HUMAN_DATABASE_LOCATION\" -f json\nIf multiple matches: show them to the human and ask which one\nIf no match: tell the human you couldn't find it\n\nExamples:\n\n\"d: pay Nigel Kerry\" → find and mark DONE\n\"Finished: the PR review\" → find and mark DONE\n\"Done: groceries\" → search for \"groceries\", mark DONE"
      },
      {
        "title": "Know — for the agent",
        "body": "k: <info>, Know: <info>, or Remember: <info> means \"store this in YOUR knowledge base for future recall.\" This is information the agent should retain across sessions.\n\nAction: Search for an existing node first (org roam node find), then create or update.\n\nExamples:\n\n\"k: Sarah prefers morning meetings\" → Create/update a node for Sarah in $ORG_MEMORY_AGENT_DIR\n\"Remember: The API uses OAuth2, not API keys\" → Create/update a node for the API in $ORG_MEMORY_AGENT_DIR"
      },
      {
        "title": "After every write — confirm",
        "body": "After every mutation to either directory, print a line in this exact format:\n\norg-memory: <action> <file-path>\n\nExamples: org-memory: added TODO to ~/org/human/inbox.org, org-memory: created node ~/org/agent/sarah.org, org-memory: updated ~/org/agent/sarah.org.\n\nThis is mandatory. Never silently write to either directory. The human should always see what you did and where."
      },
      {
        "title": "Output format",
        "body": "All commands accept -f json for structured output with {\"ok\":true,\"data\":...} envelopes. Errors return {\"ok\":false,\"error\":{\"type\":\"...\",\"message\":\"...\"}}. Always use -f json."
      },
      {
        "title": "Command safety",
        "body": "User-provided text (task titles, note content, search terms) must be single-quoted to prevent shell expansion. Double quotes allow $(…), backticks, and variable interpolation — single quotes do not.\n\n# Correct\norg add \"$ORG_MEMORY_HUMAN_DIR/inbox.org\" 'User provided text' --todo TODO -f json\n\n# Wrong — double quotes allow shell injection\norg add \"$ORG_MEMORY_HUMAN_DIR/inbox.org\" \"User provided text\" --todo TODO -f json\n\nIf the text contains a literal single quote, escape it with '\\'':\n\norg add \"$ORG_MEMORY_HUMAN_DIR/inbox.org\" 'Don'\\''t forget' --todo TODO -f json\n\nFor multi-line content, pipe via stdin instead of interpolating:\n\nprintf '%s' 'Long text here' | org append k4t --stdin -d \"$ORG_MEMORY_AGENT_DIR\" --db \"$ORG_MEMORY_AGENT_DATABASE_LOCATION\" -f json\n\nEnvironment variable paths ($ORG_MEMORY_HUMAN_DIR, etc.) must always be double-quoted to handle spaces, but never place user text inside double quotes."
      },
      {
        "title": "Discovery",
        "body": "Run org schema once to get a machine-readable description of all commands, arguments, and flags. Use this to construct valid commands without memorizing the interface."
      },
      {
        "title": "Setup",
        "body": "Configuration is via environment variables. Set them in openclaw.json so they are injected into every command automatically.\n\nRequired — set these to match your directory layout:\n\nVariableDefaultPurposeORG_MEMORY_AGENT_DIR~/org/alcuinAgent's org workspace directoryORG_MEMORY_AGENT_ROAM_DIR~/org/alcuin/roamAgent's roam node directoryORG_MEMORY_AGENT_DATABASE_LOCATION~/org/alcuin/roam/.org.dbAgent's databaseORG_MEMORY_HUMAN_DIR~/org/humanHuman's org workspace directoryORG_MEMORY_HUMAN_ROAM_DIR~/org/human/roamHuman's roam node directoryORG_MEMORY_HUMAN_DATABASE_LOCATION~/org/human/roam/.org.dbHuman's database\n\nOptional — these have sensible defaults:\n\nVariableDefaultPurposeORG_MEMORY_USE_FOR_AGENTtrueEnable the agent's own knowledge baseORG_MEMORY_USE_FOR_HUMANtrueEnable task management in the human's org filesORG_MEMORY_ORG_BINorgPath to the org CLI binaryORG_MEMORY_INBOX_FILEinbox.orgFilename for new tasks (relative to humanDir)\n\nWorkspace dirs (*_DIR) hold tasks, inbox, and daily files. Roam dirs (*_ROAM_DIR) hold knowledge graph nodes. Databases are collocated with roam dirs by default. Roam dirs default to <workspace>/roam — roam nodes are never created in the workspace root.\n\nIf ORG_MEMORY_USE_FOR_AGENT is not true, skip the Knowledge management section. If ORG_MEMORY_USE_FOR_HUMAN is not true, skip the Task management and Batch operations sections.\n\nAlways pass --db to point at the correct database. The CLI auto-syncs the roam database after every mutation using the --db value. Without --db, the CLI defaults to <directory>/.org.db.\n\nInitialize each enabled directory. If the directories already contain org files, sync them first:\n\n# Sync existing files into the roam database (skip if starting fresh)\norg roam sync -d \"$ORG_MEMORY_AGENT_DIR\" --db \"$ORG_MEMORY_AGENT_DATABASE_LOCATION\"\norg roam sync -d \"$ORG_MEMORY_HUMAN_DIR\" --db \"$ORG_MEMORY_HUMAN_DATABASE_LOCATION\"\n\n# Create a seed node for the agent's knowledge base (skip if files already exist)\norg roam node create 'Index' -d \"$ORG_MEMORY_AGENT_DIR\" --db \"$ORG_MEMORY_AGENT_DATABASE_LOCATION\" -f json\n\n# Build the headline index (enables CUSTOM_ID auto-assignment and file-less commands)\norg index -d \"$ORG_MEMORY_AGENT_DIR\" --db \"$ORG_MEMORY_AGENT_DATABASE_LOCATION\"\norg index -d \"$ORG_MEMORY_HUMAN_DIR\" --db \"$ORG_MEMORY_HUMAN_DATABASE_LOCATION\"\n\nThe roam response includes the node's ID, file path, title, and tags."
      },
      {
        "title": "Stable identifiers (CUSTOM_ID)",
        "body": "Every headline created with org add is auto-assigned a short CUSTOM_ID (e.g. k4t) when an index database exists. This ID appears in the custom_id field of all JSON responses and as a column in text output.\n\nUse CUSTOM_IDs to refer to headlines in subsequent commands — they are stable across edits and don't require a file path:\n\norg todo set k4t DONE -d \"$ORG_MEMORY_HUMAN_DIR\" --db \"$ORG_MEMORY_HUMAN_DATABASE_LOCATION\" -f json\norg schedule k4t 2026-03-15 -d \"$ORG_MEMORY_HUMAN_DIR\" --db \"$ORG_MEMORY_HUMAN_DATABASE_LOCATION\" -f json\norg note k4t 'Pushed back per manager request' -d \"$ORG_MEMORY_HUMAN_DIR\" --db \"$ORG_MEMORY_HUMAN_DATABASE_LOCATION\" -f json\norg append k4t 'Updated scope per review.' -d \"$ORG_MEMORY_HUMAN_DIR\" --db \"$ORG_MEMORY_HUMAN_DATABASE_LOCATION\" -f json\n\nTo backfill CUSTOM_IDs on existing headlines that don't have them:\n\norg custom-id assign -d \"$ORG_MEMORY_HUMAN_DIR\" --db \"$ORG_MEMORY_HUMAN_DATABASE_LOCATION\"\n\nNever address headlines by position number (pos). Positions change when files are edited — a mutation on one headline shifts the byte positions of everything after it.\n\nSafe identifiers (in order of preference):\n\nCUSTOM_ID (e.g. k4t) — stable, short, unique\norg-id (UUID) — stable, unique\nExact title — stable as long as the title doesn't change\n\nIf you need to mutate multiple headlines in the same file, either:\n\nUse org batch for atomic multi-step operations (recommended)\nUse CUSTOM_IDs or titles, never pos\nIf you must use pos, re-query after each mutation to get fresh positions"
      },
      {
        "title": "Error handling",
        "body": "Branch on the ok field. Handle errors by type:\n\nfile_not_found: wrong path or deleted file\nheadline_not_found: identifier doesn't match; re-query to get current state\nparse_error: file has syntax the parser can't handle; don't retry\ninvalid_args: check org schema or org <command> --help"
      },
      {
        "title": "References",
        "body": "Read these on demand when the conversation requires them:\n\nKnowledge management ({baseDir}/references/knowledge-management.md): Read when ORG_MEMORY_USE_FOR_AGENT=true and you need to create/query/link roam nodes in the agent's knowledge base.\nTask management ({baseDir}/references/task-management.md): Read when ORG_MEMORY_USE_FOR_HUMAN=true and you need to query or mutate the human's tasks, use batch operations, or map natural-language queries to commands.\nMemory architecture ({baseDir}/references/memory-architecture.md): Read at session start (file structure, session routine, ambient capture guidelines). Also contains optional memory migration instructions — only follow those if the user explicitly asks to migrate from MEMORY.md to org-mode. Migration reads/writes files outside the declared directories (see reference for details)."
      }
    ],
    "body": "org-memory\n\nUse the org CLI to maintain structured, linked, human-readable knowledge in org-mode files. Org files are plain text with rich structure: headlines, TODO states, tags, properties, timestamps, and links. Combined with org-roam, they form a knowledge graph backed by a SQLite database.\n\nShortcuts\n\nWhen your human uses these patterns, act on them directly.\n\nOrg mutations\nPrefix\tAlias\tAction\nt:\tTodo:\tCreate TODO in human's org (extracts dates)\nd:\tDone: / Finished:\tMark a TODO as DONE\ns:\t\tReschedule a TODO\nr:\tNote:\tSave to human's roam (knowledge/info)\nk:\tKnow: / Remember:\tAgent learns it (agent's knowledge base)\nBehaviour modifiers\n\nThese prefixes change how you respond, not what you store.\n\nPrefix\tAction\nv:\tVoice reply (TTS)\n?\tResearch (web + files)\n@\tRoam lookup\nw:\tWork context (Remundo)\n!\tUrgent — act now\nq:\tQuick answer, no tools\nTodo — create a task\n\nt: <text> or Todo: <text> means \"create a task.\" Extract any date or timeframe from the text and schedule it. If the text contains a relative date (\"in 3 weeks\", \"by Friday\", \"next month\"), compute the actual date and add --scheduled <date> or --deadline <date>.\n\nAction: org add \"$ORG_MEMORY_HUMAN_DIR/inbox.org\" '<title>' --todo TODO --scheduled <date> --db \"$ORG_MEMORY_HUMAN_DATABASE_LOCATION\" -f json\n\nUse --deadline instead of --scheduled when the text implies a hard due date (\"by Friday\", \"due March 1st\"). Use --scheduled for softer timing (\"in 3 weeks\", \"next month\", \"tomorrow\").\n\nExamples:\n\n\"t: submit taxes in 3 weeks\" → org add .../inbox.org 'Submit taxes' --todo TODO --scheduled 2026-03-18\n\"Todo: renew passport by June\" → org add .../inbox.org 'Renew passport' --todo TODO --deadline 2026-06-01\n\"t: call dentist tomorrow\" → org add .../inbox.org 'Call dentist' --todo TODO --scheduled 2026-02-26\n\"Todo: book flights\" → org add .../inbox.org 'Book flights' --todo TODO (no date mentioned)\nNote — for the human\n\nr: <text> or Note: <text> means \"add this to MY org files.\" It is always a task or reminder for the human, not for the agent.\n\nAction: org add \"$ORG_MEMORY_HUMAN_DIR/inbox.org\" '<text>' --todo TODO -f json\n\nIf the note includes a date or deadline, add --scheduled <date> or --deadline <date>. If there's no date, add it without one (the human will schedule it themselves, or ask you to).\n\nExamples:\n\n\"r: Buy groceries\" → org add .../inbox.org 'Buy groceries' --todo TODO\n\"Note: Review PR #42 by Friday\" → org add .../inbox.org 'Review PR #42' --todo TODO --deadline 2026-02-28\n\"r: we could add feature X to the app\" → org add .../inbox.org 'Add feature X to the app' --todo TODO\n\"Note: send email to Donna about safeguarding\" → org add .../inbox.org 'Send email to Donna about safeguarding' --todo TODO\n\nNote vs Todo: Both create TODO headings. The difference is intent — t: / Todo: signals a concrete task (always try to extract a date), while r: / Note: is broader (ideas, reminders, observations). When there's no date, add it without one.\n\nEdge case — ideas and observations: If the human says \"r: we could do X\" or \"Note: idea for Y\", it's still a Note. They're telling you to write it down for them. Add it as a TODO. Don't create a roam node, don't put it in the agent's knowledge base.\n\nSchedule — reschedule a task\n\ns: <text> means \"reschedule this task.\" Search for the matching TODO and update its scheduled date.\n\nAction:\n\nSearch: org todo list --state TODO --search '<text>' -d \"$ORG_MEMORY_HUMAN_DIR\" -f json\nIf exactly one match: org schedule <custom_id> <date> -d \"$ORG_MEMORY_HUMAN_DIR\" --db \"$ORG_MEMORY_HUMAN_DATABASE_LOCATION\" -f json\nIf multiple matches: show them to the human and ask which one\nIf no match: tell the human you couldn't find it\n\nExamples:\n\n\"s: taxes to next Friday\" → find \"taxes\" TODO, reschedule to next Friday\n\"s: dentist 2026-04-01\" → find \"dentist\" TODO, reschedule to 2026-04-01\nDone — mark complete\n\nd: <text>, Done: <text>, or Finished: <text> means \"mark this task as DONE.\" Search for the matching TODO and set its state.\n\nAction:\n\nSearch: org todo list --state TODO --search '<text>' -d \"$ORG_MEMORY_HUMAN_DIR\" -f json\nIf exactly one match: org todo set <custom_id> DONE -d \"$ORG_MEMORY_HUMAN_DIR\" --db \"$ORG_MEMORY_HUMAN_DATABASE_LOCATION\" -f json\nIf multiple matches: show them to the human and ask which one\nIf no match: tell the human you couldn't find it\n\nExamples:\n\n\"d: pay Nigel Kerry\" → find and mark DONE\n\"Finished: the PR review\" → find and mark DONE\n\"Done: groceries\" → search for \"groceries\", mark DONE\nKnow — for the agent\n\nk: <info>, Know: <info>, or Remember: <info> means \"store this in YOUR knowledge base for future recall.\" This is information the agent should retain across sessions.\n\nAction: Search for an existing node first (org roam node find), then create or update.\n\nExamples:\n\n\"k: Sarah prefers morning meetings\" → Create/update a node for Sarah in $ORG_MEMORY_AGENT_DIR\n\"Remember: The API uses OAuth2, not API keys\" → Create/update a node for the API in $ORG_MEMORY_AGENT_DIR\nAfter every write — confirm\n\nAfter every mutation to either directory, print a line in this exact format:\n\norg-memory: <action> <file-path>\n\n\nExamples: org-memory: added TODO to ~/org/human/inbox.org, org-memory: created node ~/org/agent/sarah.org, org-memory: updated ~/org/agent/sarah.org.\n\nThis is mandatory. Never silently write to either directory. The human should always see what you did and where.\n\nOutput format\n\nAll commands accept -f json for structured output with {\"ok\":true,\"data\":...} envelopes. Errors return {\"ok\":false,\"error\":{\"type\":\"...\",\"message\":\"...\"}}. Always use -f json.\n\nCommand safety\n\nUser-provided text (task titles, note content, search terms) must be single-quoted to prevent shell expansion. Double quotes allow $(…), backticks, and variable interpolation — single quotes do not.\n\n# Correct\norg add \"$ORG_MEMORY_HUMAN_DIR/inbox.org\" 'User provided text' --todo TODO -f json\n\n# Wrong — double quotes allow shell injection\norg add \"$ORG_MEMORY_HUMAN_DIR/inbox.org\" \"User provided text\" --todo TODO -f json\n\n\nIf the text contains a literal single quote, escape it with '\\'':\n\norg add \"$ORG_MEMORY_HUMAN_DIR/inbox.org\" 'Don'\\''t forget' --todo TODO -f json\n\n\nFor multi-line content, pipe via stdin instead of interpolating:\n\nprintf '%s' 'Long text here' | org append k4t --stdin -d \"$ORG_MEMORY_AGENT_DIR\" --db \"$ORG_MEMORY_AGENT_DATABASE_LOCATION\" -f json\n\n\nEnvironment variable paths ($ORG_MEMORY_HUMAN_DIR, etc.) must always be double-quoted to handle spaces, but never place user text inside double quotes.\n\nDiscovery\n\nRun org schema once to get a machine-readable description of all commands, arguments, and flags. Use this to construct valid commands without memorizing the interface.\n\nSetup\n\nConfiguration is via environment variables. Set them in openclaw.json so they are injected into every command automatically.\n\nRequired — set these to match your directory layout:\n\nVariable\tDefault\tPurpose\nORG_MEMORY_AGENT_DIR\t~/org/alcuin\tAgent's org workspace directory\nORG_MEMORY_AGENT_ROAM_DIR\t~/org/alcuin/roam\tAgent's roam node directory\nORG_MEMORY_AGENT_DATABASE_LOCATION\t~/org/alcuin/roam/.org.db\tAgent's database\nORG_MEMORY_HUMAN_DIR\t~/org/human\tHuman's org workspace directory\nORG_MEMORY_HUMAN_ROAM_DIR\t~/org/human/roam\tHuman's roam node directory\nORG_MEMORY_HUMAN_DATABASE_LOCATION\t~/org/human/roam/.org.db\tHuman's database\n\nOptional — these have sensible defaults:\n\nVariable\tDefault\tPurpose\nORG_MEMORY_USE_FOR_AGENT\ttrue\tEnable the agent's own knowledge base\nORG_MEMORY_USE_FOR_HUMAN\ttrue\tEnable task management in the human's org files\nORG_MEMORY_ORG_BIN\torg\tPath to the org CLI binary\nORG_MEMORY_INBOX_FILE\tinbox.org\tFilename for new tasks (relative to humanDir)\n\nWorkspace dirs (*_DIR) hold tasks, inbox, and daily files. Roam dirs (*_ROAM_DIR) hold knowledge graph nodes. Databases are collocated with roam dirs by default. Roam dirs default to <workspace>/roam — roam nodes are never created in the workspace root.\n\nIf ORG_MEMORY_USE_FOR_AGENT is not true, skip the Knowledge management section. If ORG_MEMORY_USE_FOR_HUMAN is not true, skip the Task management and Batch operations sections.\n\nAlways pass --db to point at the correct database. The CLI auto-syncs the roam database after every mutation using the --db value. Without --db, the CLI defaults to <directory>/.org.db.\n\nInitialize each enabled directory. If the directories already contain org files, sync them first:\n\n# Sync existing files into the roam database (skip if starting fresh)\norg roam sync -d \"$ORG_MEMORY_AGENT_DIR\" --db \"$ORG_MEMORY_AGENT_DATABASE_LOCATION\"\norg roam sync -d \"$ORG_MEMORY_HUMAN_DIR\" --db \"$ORG_MEMORY_HUMAN_DATABASE_LOCATION\"\n\n# Create a seed node for the agent's knowledge base (skip if files already exist)\norg roam node create 'Index' -d \"$ORG_MEMORY_AGENT_DIR\" --db \"$ORG_MEMORY_AGENT_DATABASE_LOCATION\" -f json\n\n# Build the headline index (enables CUSTOM_ID auto-assignment and file-less commands)\norg index -d \"$ORG_MEMORY_AGENT_DIR\" --db \"$ORG_MEMORY_AGENT_DATABASE_LOCATION\"\norg index -d \"$ORG_MEMORY_HUMAN_DIR\" --db \"$ORG_MEMORY_HUMAN_DATABASE_LOCATION\"\n\n\nThe roam response includes the node's ID, file path, title, and tags.\n\nStable identifiers (CUSTOM_ID)\n\nEvery headline created with org add is auto-assigned a short CUSTOM_ID (e.g. k4t) when an index database exists. This ID appears in the custom_id field of all JSON responses and as a column in text output.\n\nUse CUSTOM_IDs to refer to headlines in subsequent commands — they are stable across edits and don't require a file path:\n\norg todo set k4t DONE -d \"$ORG_MEMORY_HUMAN_DIR\" --db \"$ORG_MEMORY_HUMAN_DATABASE_LOCATION\" -f json\norg schedule k4t 2026-03-15 -d \"$ORG_MEMORY_HUMAN_DIR\" --db \"$ORG_MEMORY_HUMAN_DATABASE_LOCATION\" -f json\norg note k4t 'Pushed back per manager request' -d \"$ORG_MEMORY_HUMAN_DIR\" --db \"$ORG_MEMORY_HUMAN_DATABASE_LOCATION\" -f json\norg append k4t 'Updated scope per review.' -d \"$ORG_MEMORY_HUMAN_DIR\" --db \"$ORG_MEMORY_HUMAN_DATABASE_LOCATION\" -f json\n\n\nTo backfill CUSTOM_IDs on existing headlines that don't have them:\n\norg custom-id assign -d \"$ORG_MEMORY_HUMAN_DIR\" --db \"$ORG_MEMORY_HUMAN_DATABASE_LOCATION\"\n\n\nNever address headlines by position number (pos). Positions change when files are edited — a mutation on one headline shifts the byte positions of everything after it.\n\nSafe identifiers (in order of preference):\n\nCUSTOM_ID (e.g. k4t) — stable, short, unique\norg-id (UUID) — stable, unique\nExact title — stable as long as the title doesn't change\n\nIf you need to mutate multiple headlines in the same file, either:\n\nUse org batch for atomic multi-step operations (recommended)\nUse CUSTOM_IDs or titles, never pos\nIf you must use pos, re-query after each mutation to get fresh positions\nError handling\n\nBranch on the ok field. Handle errors by type:\n\nfile_not_found: wrong path or deleted file\nheadline_not_found: identifier doesn't match; re-query to get current state\nparse_error: file has syntax the parser can't handle; don't retry\ninvalid_args: check org schema or org <command> --help\nReferences\n\nRead these on demand when the conversation requires them:\n\nKnowledge management ({baseDir}/references/knowledge-management.md): Read when ORG_MEMORY_USE_FOR_AGENT=true and you need to create/query/link roam nodes in the agent's knowledge base.\nTask management ({baseDir}/references/task-management.md): Read when ORG_MEMORY_USE_FOR_HUMAN=true and you need to query or mutate the human's tasks, use batch operations, or map natural-language queries to commands.\nMemory architecture ({baseDir}/references/memory-architecture.md): Read at session start (file structure, session routine, ambient capture guidelines). Also contains optional memory migration instructions — only follow those if the user explicitly asks to migrate from MEMORY.md to org-mode. Migration reads/writes files outside the declared directories (see reference for details)."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/DCPRevere/org-memory",
    "publisherUrl": "https://clawhub.ai/DCPRevere/org-memory",
    "owner": "DCPRevere",
    "version": "0.5.3",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/org-memory",
    "downloadUrl": "https://openagent3.xyz/downloads/org-memory",
    "agentUrl": "https://openagent3.xyz/skills/org-memory/agent",
    "manifestUrl": "https://openagent3.xyz/skills/org-memory/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/org-memory/agent.md"
  }
}