{
  "schemaVersion": "1.0",
  "item": {
    "slug": "save-to-obsidian",
    "name": "Save to Obsidian",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/chunhualiao/save-to-obsidian",
    "canonicalUrl": "https://clawhub.ai/chunhualiao/save-to-obsidian",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/save-to-obsidian",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=save-to-obsidian",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "CHANGELOG.md",
      "README.md",
      "SKILL.md",
      "references/README.md",
      "scripts/save-to-obsidian.sh",
      "skill.yml"
    ],
    "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. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "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. Then review README.md for any prerequisites, environment setup, or post-install checks. 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/save-to-obsidian"
    },
    "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/save-to-obsidian",
    "agentPageUrl": "https://openagent3.xyz/skills/save-to-obsidian/agent",
    "manifestUrl": "https://openagent3.xyz/skills/save-to-obsidian/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/save-to-obsidian/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. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "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. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Save to Obsidian",
        "body": "Saves markdown content to remote Obsidian vault via SSH."
      },
      {
        "title": "Prerequisite",
        "body": "This skill is for machines WITHOUT iCloud sync (e.g., Linux/Ubuntu servers). If your machine already has iCloud Desktop sync enabled and direct access to the Obsidian vault, you don't need this skill — just copy files directly to the vault path."
      },
      {
        "title": "When to Use",
        "body": "User says: \"save to obsidian\", \"send to obsidian\", \"copy to obsidian\""
      },
      {
        "title": "Process",
        "body": "Write content to a temp .md file (enforce formatting rules below)\nCopy to remote vault: scp <filepath> user@remote-host:/path/to/obsidian/vault/\nConfirm success to user\n\nExample:\n\n# Write content to temp file\ncat > /tmp/my-note.md << 'EOF'\n# My Note\nContent here\nEOF\n\n# Copy to remote Obsidian vault\nscp /tmp/my-note.md myuser@vault.example.com:~/Obsidian/MyVault/\n\n# Clean up\nrm /tmp/my-note.md\n\nConfiguration: The agent should use the SSH host and vault path configured in workspace TOOLS.md"
      },
      {
        "title": "Formatting Rules",
        "body": "All content saved to Obsidian MUST follow these rules:"
      },
      {
        "title": "Diagrams: Use Mermaid (mandatory)",
        "body": "Never use ASCII box diagrams, ASCII art, or plaintext diagrams\nAlways use Mermaid fenced code blocks (```mermaid)\nObsidian renders Mermaid natively — ASCII diagrams look broken\nSupported types: flowchart, sequence, state, class, ER, gantt, pie, mindmap, timeline, quadrant, graph"
      },
      {
        "title": "Tables: Use Markdown tables",
        "body": "Obsidian renders markdown tables natively\nFor complex data, prefer tables over bullet lists"
      },
      {
        "title": "Links: Use wiki-links or relative links",
        "body": "Link between Obsidian notes: [[note-name]]\nExternal links: standard markdown [text](url)"
      },
      {
        "title": "General",
        "body": "Use headers (##) for structure — Obsidian outline panel relies on them\nUse YAML frontmatter if metadata is needed\nKeep filenames kebab-case (no spaces) for cross-platform compatibility"
      },
      {
        "title": "Agent Owner",
        "body": "This skill is executed by the main OpenClaw agent session. The save-to-obsidian.sh script\nruns as a shell command via the exec tool. No sub-agents are spawned. iCloud sync is handled\nautomatically after file transfer — no agent action needed."
      },
      {
        "title": "Success Criteria",
        "body": "Save succeeds when:\n\nscp exits with code 0\nFile appears in vault directory with correct filename\niCloud sync propagates the file (typically 1-2 minutes; not verified by skill)\n\nFailure conditions: SSH unreachable, vault path does not exist, disk full, filename\ncontains characters invalid for iCloud sync (handled by sanitization in script)."
      },
      {
        "title": "Edge Cases",
        "body": "SSH failure: script exits with error message and non-zero code; agent should report and stop\nDuplicate filename: overwrites silently — scp does not warn; user must check if overwrite is desired\nSpecial characters in filename: sanitized by script (spaces → hyphens, invalid chars stripped)\nEmpty content: scp will transfer a 0-byte file; not an error but should be flagged\nNo clear title: if content has no H1 header, agent should prompt user for filename before saving\niCloud sync delay: file appears in vault within 1-2 min; if not visible after 5 min, check iCloud status"
      },
      {
        "title": "Notes",
        "body": "Uses existing SSH key auth (no password)\nTarget: remote-host → Obsidian vault location\nFiles sync via iCloud automatically (if vault is in iCloud folder)"
      },
      {
        "title": "Configuration",
        "body": "This skill reads SSH and vault configuration from your workspace TOOLS.md:\n\nVariableDescriptionWhere to setSSH hostHostname/IP of the remote machine hosting the Obsidian vaultTOOLS.md (e.g., myserver.local)SSH userUsername on the remote machineTOOLS.md (e.g., your-username)SSH key pathPath to SSH private key (default: ~/.ssh/id_rsa)TOOLS.mdVault pathAbsolute path to Obsidian vault on remote machineTOOLS.md (e.g., ~/Obsidian/MyVault/)\n\nExample TOOLS.md entry:\n\n## Obsidian Remote Vault\n- SSH host: myserver.local\n- SSH user: your-username\n- Vault path: ~/Obsidian/MyVault/\n\nNo API keys or tokens required — uses SSH key authentication only."
      }
    ],
    "body": "Save to Obsidian\n\nSaves markdown content to remote Obsidian vault via SSH.\n\nPrerequisite\n\nThis skill is for machines WITHOUT iCloud sync (e.g., Linux/Ubuntu servers). If your machine already has iCloud Desktop sync enabled and direct access to the Obsidian vault, you don't need this skill — just copy files directly to the vault path.\n\nWhen to Use\n\nUser says: \"save to obsidian\", \"send to obsidian\", \"copy to obsidian\"\n\nProcess\nWrite content to a temp .md file (enforce formatting rules below)\nCopy to remote vault: scp <filepath> user@remote-host:/path/to/obsidian/vault/\nConfirm success to user\n\nExample:\n\n# Write content to temp file\ncat > /tmp/my-note.md << 'EOF'\n# My Note\nContent here\nEOF\n\n# Copy to remote Obsidian vault\nscp /tmp/my-note.md myuser@vault.example.com:~/Obsidian/MyVault/\n\n# Clean up\nrm /tmp/my-note.md\n\n\nConfiguration: The agent should use the SSH host and vault path configured in workspace TOOLS.md\n\nFormatting Rules\n\nAll content saved to Obsidian MUST follow these rules:\n\nDiagrams: Use Mermaid (mandatory)\nNever use ASCII box diagrams, ASCII art, or plaintext diagrams\nAlways use Mermaid fenced code blocks (```mermaid)\nObsidian renders Mermaid natively — ASCII diagrams look broken\nSupported types: flowchart, sequence, state, class, ER, gantt, pie, mindmap, timeline, quadrant, graph\nTables: Use Markdown tables\nObsidian renders markdown tables natively\nFor complex data, prefer tables over bullet lists\nLinks: Use wiki-links or relative links\nLink between Obsidian notes: [[note-name]]\nExternal links: standard markdown [text](url)\nGeneral\nUse headers (##) for structure — Obsidian outline panel relies on them\nUse YAML frontmatter if metadata is needed\nKeep filenames kebab-case (no spaces) for cross-platform compatibility\nAgent Owner\n\nThis skill is executed by the main OpenClaw agent session. The save-to-obsidian.sh script runs as a shell command via the exec tool. No sub-agents are spawned. iCloud sync is handled automatically after file transfer — no agent action needed.\n\nSuccess Criteria\n\nSave succeeds when:\n\nscp exits with code 0\nFile appears in vault directory with correct filename\niCloud sync propagates the file (typically 1-2 minutes; not verified by skill)\n\nFailure conditions: SSH unreachable, vault path does not exist, disk full, filename contains characters invalid for iCloud sync (handled by sanitization in script).\n\nEdge Cases\nSSH failure: script exits with error message and non-zero code; agent should report and stop\nDuplicate filename: overwrites silently — scp does not warn; user must check if overwrite is desired\nSpecial characters in filename: sanitized by script (spaces → hyphens, invalid chars stripped)\nEmpty content: scp will transfer a 0-byte file; not an error but should be flagged\nNo clear title: if content has no H1 header, agent should prompt user for filename before saving\niCloud sync delay: file appears in vault within 1-2 min; if not visible after 5 min, check iCloud status\nNotes\nUses existing SSH key auth (no password)\nTarget: remote-host → Obsidian vault location\nFiles sync via iCloud automatically (if vault is in iCloud folder)\nConfiguration\n\nThis skill reads SSH and vault configuration from your workspace TOOLS.md:\n\nVariable\tDescription\tWhere to set\nSSH host\tHostname/IP of the remote machine hosting the Obsidian vault\tTOOLS.md (e.g., myserver.local)\nSSH user\tUsername on the remote machine\tTOOLS.md (e.g., your-username)\nSSH key path\tPath to SSH private key (default: ~/.ssh/id_rsa)\tTOOLS.md\nVault path\tAbsolute path to Obsidian vault on remote machine\tTOOLS.md (e.g., ~/Obsidian/MyVault/)\n\nExample TOOLS.md entry:\n\n## Obsidian Remote Vault\n- SSH host: myserver.local\n- SSH user: your-username\n- Vault path: ~/Obsidian/MyVault/\n\n\nNo API keys or tokens required — uses SSH key authentication only."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/chunhualiao/save-to-obsidian",
    "publisherUrl": "https://clawhub.ai/chunhualiao/save-to-obsidian",
    "owner": "chunhualiao",
    "version": "1.1.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/save-to-obsidian",
    "downloadUrl": "https://openagent3.xyz/downloads/save-to-obsidian",
    "agentUrl": "https://openagent3.xyz/skills/save-to-obsidian/agent",
    "manifestUrl": "https://openagent3.xyz/skills/save-to-obsidian/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/save-to-obsidian/agent.md"
  }
}