{
  "schemaVersion": "1.0",
  "item": {
    "slug": "nextcloud-files",
    "name": "Nextcloud",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/Romain-Grosos/nextcloud-files",
    "canonicalUrl": "https://clawhub.ai/Romain-Grosos/nextcloud-files",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/nextcloud-files",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=nextcloud-files",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "SKILL.md",
      "config.example.json",
      "references/api.md",
      "references/troubleshooting.md",
      "scripts/_retry.py"
    ],
    "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-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-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/nextcloud-files"
    },
    "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/nextcloud-files",
    "agentPageUrl": "https://openagent3.xyz/skills/nextcloud-files/agent",
    "manifestUrl": "https://openagent3.xyz/skills/nextcloud-files/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/nextcloud-files/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": "Nextcloud Skill",
        "body": "Full Nextcloud client: WebDAV (files/folders) + OCS (tags, user info). Zero external dependencies - stdlib only (urllib).\nCredentials: ~/.openclaw/secrets/nextcloud_creds · Config: ~/.openclaw/config/nextcloud/config.json"
      },
      {
        "title": "Trigger phrases",
        "body": "Load this skill immediately when the user says anything like:\n\n\"upload / save / write this file on Nextcloud / NC / cloud\"\n\"create a folder on Nextcloud\", \"mkdir in NC\"\n\"list / browse / show what's in [folder] on Nextcloud\"\n\"search for [file] in NC\", \"find [file] on Nextcloud\"\n\"read / get / download [file] from Nextcloud\"\n\"rename / move / copy [file] on Nextcloud\"\n\"check my storage quota\", \"how much space on NC\"\n\"tag this file\", \"mark as favorite on Nextcloud\""
      },
      {
        "title": "Quick Start",
        "body": "python3 scripts/nextcloud.py config    # verify credentials + active config\npython3 scripts/nextcloud.py quota     # test connection + show storage\npython3 scripts/nextcloud.py ls /      # list root directory"
      },
      {
        "title": "Setup",
        "body": "python3 scripts/setup.py       # interactive: credentials + permissions + connection test\npython3 scripts/init.py        # validate all configured permissions against live instance\n\ninit.py only runs write/delete tests when both allow_write=true and allow_delete=true. When allow_delete=false, write tests are skipped - no test artifacts are created or left behind.\n\nManual - ~/.openclaw/secrets/nextcloud_creds (chmod 600):\n\nNC_URL=https://cloud.example.com\nNC_USER=username\nNC_APP_KEY=app-password\n\nApp password: Nextcloud → Settings → Security → App passwords.\n\nconfig.json - behavior restrictions:\n\nKeyDefaultEffectbase_path\"/\"Restrict agent to subtree (e.g. \"/Jarvis\")allow_writefalsemkdir, write, rename, copy (enable explicitly)allow_deletefalsedelete files and folders (enable explicitly)readonly_modefalseoverride: block all writes regardless of above\n\nSafe defaults: both allow_write and allow_delete are false by default. Enable each explicitly only when needed. Combine with a restricted base_path (e.g. \"/Jarvis\") to limit the agent's scope.\nShare capability is not included by default. See README for instructions on how to restore it if needed."
      },
      {
        "title": "Storage & credentials",
        "body": "The skill reads and writes the following paths. All usage is intentional and documented:\n\nPathWritten byPurpose~/.openclaw/secrets/nextcloud_credssetup.pyNextcloud credentials (NC_URL, NC_USER, NC_APP_KEY). chmod 600. Never committed.~/.openclaw/config/nextcloud/config.jsonsetup.pyBehavior restrictions (base_path, allow_write, allow_delete, readonly_mode). No secrets. Not in skill dir - survives clawhub updates.\n\nCredentials can also be provided via environment variables (NC_URL, NC_USER, NC_APP_KEY) instead of the creds file. The skill checks env vars first.\n\nCleanup on uninstall: clawhub uninstall nextcloud-files removes the skill directory. To also remove credentials and config:\n\npython3 scripts/setup.py --cleanup\n\nOn reinstall, any existing config at ~/.openclaw/config/nextcloud/config.json is picked up automatically."
      },
      {
        "title": "Module usage",
        "body": "from scripts.nextcloud import NextcloudClient\nnc = NextcloudClient()\nnc.write_file(\"/Jarvis/notes.md\", \"# Notes\\n...\")\nnc.mkdir(\"/Jarvis/Articles\")\nitems = nc.list_dir(\"/Jarvis\")"
      },
      {
        "title": "CLI reference",
        "body": "# Files & folders\npython3 scripts/nextcloud.py mkdir /path/folder\npython3 scripts/nextcloud.py write /path/file.md --content \"# Title\"\npython3 scripts/nextcloud.py write /path/file.md --file local.md\npython3 scripts/nextcloud.py write /path/file.md --content \"new entry\" --append\npython3 scripts/nextcloud.py read  /path/file.md\npython3 scripts/nextcloud.py rename /old /new\npython3 scripts/nextcloud.py copy   /src /dst\npython3 scripts/nextcloud.py delete /path\npython3 scripts/nextcloud.py exists /path          # exit 0/1\n\n# Listing & search\npython3 scripts/nextcloud.py ls /path --depth 2 --json\npython3 scripts/nextcloud.py search \"keyword\" --path /folder --limit 20\n\n# Favorites & tags\npython3 scripts/nextcloud.py favorite /path/file.md\npython3 scripts/nextcloud.py tags\npython3 scripts/nextcloud.py tag-create \"research\"\npython3 scripts/nextcloud.py tag-assign <file_id> <tag_id>\n\n# Account\npython3 scripts/nextcloud.py quota\npython3 scripts/nextcloud.py config"
      },
      {
        "title": "Structured workspace setup",
        "body": "python3 scripts/nc_setup.py --root Jarvis --folders Articles,LinkedIn,Recherche,Veille"
      },
      {
        "title": "Append to a running log",
        "body": "nc.append_to_file(\"/Jarvis/log.md\", f\"\\n## {today}\\n{entry}\\n\")"
      },
      {
        "title": "Read and update a JSON list",
        "body": "items = nc.read_json(\"/Jarvis/Veille/articles.json\")\nitems[\"articles\"].append(new_article)\nnc.write_json(\"/Jarvis/Veille/articles.json\", items)"
      },
      {
        "title": "Tag a file after creation",
        "body": "ls = nc.list_dir(\"/Jarvis/Articles\", depth=1)\nfile_id = next(f[\"file_id\"] for f in ls if f[\"name\"] == \"article.md\")\ntags = nc.get_tags()\ntag_id = next(t[\"id\"] for t in tags if t[\"name\"] == \"published\")\nnc.assign_tag(file_id, tag_id)"
      },
      {
        "title": "Ideas",
        "body": "Sandbox the agent with base_path: \"/Jarvis\" - it can't touch anything else\nStore agent-produced Markdown files and auto-share a read-only link in the reply\nUse append_to_file for rolling logs or changelogs\nUse write_json + read_json for persistent state between sessions\nAuto-tag files by category (research / draft / published)"
      },
      {
        "title": "Combine with",
        "body": "SkillWorkflowghostWrite a post → save Markdown draft to NC → publish to GhostsummarizeSummarize a URL → save summary as .md to NCgmailReceive an attachment → save to NC for archivingobsidianSync Obsidian vault notes to NC for remote backupself-improving-agentLog agent learnings to NC for persistent, searchable history"
      },
      {
        "title": "API reference",
        "body": "See references/api.md for WebDAV/OCS endpoint details, PROPFIND properties, and error codes."
      },
      {
        "title": "Troubleshooting",
        "body": "See references/troubleshooting.md for common errors and fixes."
      }
    ],
    "body": "Nextcloud Skill\n\nFull Nextcloud client: WebDAV (files/folders) + OCS (tags, user info). Zero external dependencies - stdlib only (urllib). Credentials: ~/.openclaw/secrets/nextcloud_creds · Config: ~/.openclaw/config/nextcloud/config.json\n\nTrigger phrases\n\nLoad this skill immediately when the user says anything like:\n\n\"upload / save / write this file on Nextcloud / NC / cloud\"\n\"create a folder on Nextcloud\", \"mkdir in NC\"\n\"list / browse / show what's in [folder] on Nextcloud\"\n\"search for [file] in NC\", \"find [file] on Nextcloud\"\n\"read / get / download [file] from Nextcloud\"\n\"rename / move / copy [file] on Nextcloud\"\n\"check my storage quota\", \"how much space on NC\"\n\"tag this file\", \"mark as favorite on Nextcloud\"\nQuick Start\npython3 scripts/nextcloud.py config    # verify credentials + active config\npython3 scripts/nextcloud.py quota     # test connection + show storage\npython3 scripts/nextcloud.py ls /      # list root directory\n\nSetup\npython3 scripts/setup.py       # interactive: credentials + permissions + connection test\npython3 scripts/init.py        # validate all configured permissions against live instance\n\n\ninit.py only runs write/delete tests when both allow_write=true and allow_delete=true. When allow_delete=false, write tests are skipped - no test artifacts are created or left behind.\n\nManual - ~/.openclaw/secrets/nextcloud_creds (chmod 600):\n\nNC_URL=https://cloud.example.com\nNC_USER=username\nNC_APP_KEY=app-password\n\n\nApp password: Nextcloud → Settings → Security → App passwords.\n\nconfig.json - behavior restrictions:\n\nKey\tDefault\tEffect\nbase_path\t\"/\"\tRestrict agent to subtree (e.g. \"/Jarvis\")\nallow_write\tfalse\tmkdir, write, rename, copy (enable explicitly)\nallow_delete\tfalse\tdelete files and folders (enable explicitly)\nreadonly_mode\tfalse\toverride: block all writes regardless of above\n\nSafe defaults: both allow_write and allow_delete are false by default. Enable each explicitly only when needed. Combine with a restricted base_path (e.g. \"/Jarvis\") to limit the agent's scope. Share capability is not included by default. See README for instructions on how to restore it if needed.\n\nStorage & credentials\n\nThe skill reads and writes the following paths. All usage is intentional and documented:\n\nPath\tWritten by\tPurpose\n~/.openclaw/secrets/nextcloud_creds\tsetup.py\tNextcloud credentials (NC_URL, NC_USER, NC_APP_KEY). chmod 600. Never committed.\n~/.openclaw/config/nextcloud/config.json\tsetup.py\tBehavior restrictions (base_path, allow_write, allow_delete, readonly_mode). No secrets. Not in skill dir - survives clawhub updates.\n\nCredentials can also be provided via environment variables (NC_URL, NC_USER, NC_APP_KEY) instead of the creds file. The skill checks env vars first.\n\nCleanup on uninstall: clawhub uninstall nextcloud-files removes the skill directory. To also remove credentials and config:\n\npython3 scripts/setup.py --cleanup\n\n\nOn reinstall, any existing config at ~/.openclaw/config/nextcloud/config.json is picked up automatically.\n\nModule usage\nfrom scripts.nextcloud import NextcloudClient\nnc = NextcloudClient()\nnc.write_file(\"/Jarvis/notes.md\", \"# Notes\\n...\")\nnc.mkdir(\"/Jarvis/Articles\")\nitems = nc.list_dir(\"/Jarvis\")\n\nCLI reference\n# Files & folders\npython3 scripts/nextcloud.py mkdir /path/folder\npython3 scripts/nextcloud.py write /path/file.md --content \"# Title\"\npython3 scripts/nextcloud.py write /path/file.md --file local.md\npython3 scripts/nextcloud.py write /path/file.md --content \"new entry\" --append\npython3 scripts/nextcloud.py read  /path/file.md\npython3 scripts/nextcloud.py rename /old /new\npython3 scripts/nextcloud.py copy   /src /dst\npython3 scripts/nextcloud.py delete /path\npython3 scripts/nextcloud.py exists /path          # exit 0/1\n\n# Listing & search\npython3 scripts/nextcloud.py ls /path --depth 2 --json\npython3 scripts/nextcloud.py search \"keyword\" --path /folder --limit 20\n\n# Favorites & tags\npython3 scripts/nextcloud.py favorite /path/file.md\npython3 scripts/nextcloud.py tags\npython3 scripts/nextcloud.py tag-create \"research\"\npython3 scripts/nextcloud.py tag-assign <file_id> <tag_id>\n\n# Account\npython3 scripts/nextcloud.py quota\npython3 scripts/nextcloud.py config\n\nTemplates\nStructured workspace setup\npython3 scripts/nc_setup.py --root Jarvis --folders Articles,LinkedIn,Recherche,Veille\n\nAppend to a running log\nnc.append_to_file(\"/Jarvis/log.md\", f\"\\n## {today}\\n{entry}\\n\")\n\nRead and update a JSON list\nitems = nc.read_json(\"/Jarvis/Veille/articles.json\")\nitems[\"articles\"].append(new_article)\nnc.write_json(\"/Jarvis/Veille/articles.json\", items)\n\nTag a file after creation\nls = nc.list_dir(\"/Jarvis/Articles\", depth=1)\nfile_id = next(f[\"file_id\"] for f in ls if f[\"name\"] == \"article.md\")\ntags = nc.get_tags()\ntag_id = next(t[\"id\"] for t in tags if t[\"name\"] == \"published\")\nnc.assign_tag(file_id, tag_id)\n\nIdeas\nSandbox the agent with base_path: \"/Jarvis\" - it can't touch anything else\nStore agent-produced Markdown files and auto-share a read-only link in the reply\nUse append_to_file for rolling logs or changelogs\nUse write_json + read_json for persistent state between sessions\nAuto-tag files by category (research / draft / published)\nCombine with\nSkill\tWorkflow\nghost\tWrite a post → save Markdown draft to NC → publish to Ghost\nsummarize\tSummarize a URL → save summary as .md to NC\ngmail\tReceive an attachment → save to NC for archiving\nobsidian\tSync Obsidian vault notes to NC for remote backup\nself-improving-agent\tLog agent learnings to NC for persistent, searchable history\nAPI reference\n\nSee references/api.md for WebDAV/OCS endpoint details, PROPFIND properties, and error codes.\n\nTroubleshooting\n\nSee references/troubleshooting.md for common errors and fixes."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/Romain-Grosos/nextcloud-files",
    "publisherUrl": "https://clawhub.ai/Romain-Grosos/nextcloud-files",
    "owner": "Romain-Grosos",
    "version": "1.2.3",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/nextcloud-files",
    "downloadUrl": "https://openagent3.xyz/downloads/nextcloud-files",
    "agentUrl": "https://openagent3.xyz/skills/nextcloud-files/agent",
    "manifestUrl": "https://openagent3.xyz/skills/nextcloud-files/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/nextcloud-files/agent.md"
  }
}