{
  "schemaVersion": "1.0",
  "item": {
    "slug": "paperless-docs",
    "name": "Paperless-ngx Document Manager",
    "source": "tencent",
    "type": "skill",
    "category": "效率提升",
    "sourceUrl": "https://clawhub.ai/madmantim/paperless-docs",
    "canonicalUrl": "https://clawhub.ai/madmantim/paperless-docs",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/paperless-docs",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=paperless-docs",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "references/api.md",
      "scripts/correspondents.mjs",
      "scripts/download.mjs",
      "scripts/get.mjs",
      "scripts/list.mjs"
    ],
    "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-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/paperless-docs"
    },
    "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/paperless-docs",
    "agentPageUrl": "https://openagent3.xyz/skills/paperless-docs/agent",
    "manifestUrl": "https://openagent3.xyz/skills/paperless-docs/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/paperless-docs/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": "Paperless-ngx",
        "body": "Document management via Paperless-ngx REST API."
      },
      {
        "title": "Configuration",
        "body": "Set environment variables in ~/.clawdbot/clawdbot.json:\n\n{\n  \"env\": {\n    \"PAPERLESS_URL\": \"http://your-paperless-host:8000\",\n    \"PAPERLESS_TOKEN\": \"your-api-token\"\n  }\n}\n\nOr configure via the skills entry (allows using apiKey shorthand):\n\n{\n  \"skills\": {\n    \"entries\": {\n      \"paperless-ngx\": {\n        \"env\": { \"PAPERLESS_URL\": \"http://your-paperless-host:8000\" },\n        \"apiKey\": \"your-api-token\"\n      }\n    }\n  }\n}\n\nGet your API token from Paperless web UI: Settings → Users & Groups → [user] → Generate Token."
      },
      {
        "title": "Quick Reference",
        "body": "TaskCommandSearch documentsnode {baseDir}/scripts/search.mjs \"query\"List recentnode {baseDir}/scripts/list.mjs [--limit N]Get documentnode {baseDir}/scripts/get.mjs <id> [--content]Upload documentnode {baseDir}/scripts/upload.mjs <file> [--title \"...\"] [--tags \"a,b\"]Download PDFnode {baseDir}/scripts/download.mjs <id> [--output path]List tagsnode {baseDir}/scripts/tags.mjsList typesnode {baseDir}/scripts/types.mjsList correspondentsnode {baseDir}/scripts/correspondents.mjs\n\nAll scripts are in {baseDir}/scripts/."
      },
      {
        "title": "Find a document",
        "body": "# Full-text search\nnode {baseDir}/scripts/search.mjs \"electricity bill december\"\n\n# Filter by tag\nnode {baseDir}/scripts/search.mjs --tag \"tax-deductible\"\n\n# Filter by document type\nnode {baseDir}/scripts/search.mjs --type \"Invoice\"\n\n# Filter by correspondent\nnode {baseDir}/scripts/search.mjs --correspondent \"AGL\"\n\n# Combine filters\nnode {baseDir}/scripts/search.mjs \"2025\" --tag \"unpaid\" --type \"Invoice\""
      },
      {
        "title": "Get document details",
        "body": "# Metadata only\nnode {baseDir}/scripts/get.mjs 28\n\n# Include OCR text content\nnode {baseDir}/scripts/get.mjs 28 --content\n\n# Full content (no truncation)\nnode {baseDir}/scripts/get.mjs 28 --content --full"
      },
      {
        "title": "Upload a document",
        "body": "# Basic upload (title auto-detected)\nnode {baseDir}/scripts/upload.mjs /path/to/invoice.pdf\n\n# With metadata\nnode {baseDir}/scripts/upload.mjs /path/to/invoice.pdf \\\n  --title \"AGL Electricity Jan 2026\" \\\n  --tags \"unpaid,utility\" \\\n  --type \"Invoice\" \\\n  --correspondent \"AGL\" \\\n  --created \"2026-01-15\""
      },
      {
        "title": "Download a document",
        "body": "# Download to current directory\nnode {baseDir}/scripts/download.mjs 28\n\n# Specify output path\nnode {baseDir}/scripts/download.mjs 28 --output ~/Downloads/document.pdf\n\n# Get original (not archived/OCR'd version)\nnode {baseDir}/scripts/download.mjs 28 --original"
      },
      {
        "title": "Manage metadata",
        "body": "# List all tags\nnode {baseDir}/scripts/tags.mjs\n\n# List document types\nnode {baseDir}/scripts/types.mjs\n\n# List correspondents\nnode {baseDir}/scripts/correspondents.mjs\n\n# Create new tag\nnode {baseDir}/scripts/tags.mjs --create \"new-tag-name\"\n\n# Create new correspondent\nnode {baseDir}/scripts/correspondents.mjs --create \"New Company Name\""
      },
      {
        "title": "Output Format",
        "body": "All scripts output JSON for easy parsing. Use jq for formatting:\n\nnode {baseDir}/scripts/search.mjs \"invoice\" | jq '.results[] | {id, title, created}'"
      },
      {
        "title": "Advanced Usage",
        "body": "For complex queries or bulk operations, see references/api.md for direct API access patterns."
      },
      {
        "title": "Troubleshooting",
        "body": "\"PAPERLESS_URL not set\" — Add to ~/.clawdbot/clawdbot.json env section or export in shell.\n\n\"401 Unauthorized\" — Check PAPERLESS_TOKEN is valid. Regenerate in Paperless UI if needed.\n\n\"Connection refused\" — Verify Paperless is running and URL is correct (include port).\n\nUpload fails silently — Check Paperless logs; file may be duplicate or unsupported format."
      }
    ],
    "body": "Paperless-ngx\n\nDocument management via Paperless-ngx REST API.\n\nConfiguration\n\nSet environment variables in ~/.clawdbot/clawdbot.json:\n\n{\n  \"env\": {\n    \"PAPERLESS_URL\": \"http://your-paperless-host:8000\",\n    \"PAPERLESS_TOKEN\": \"your-api-token\"\n  }\n}\n\n\nOr configure via the skills entry (allows using apiKey shorthand):\n\n{\n  \"skills\": {\n    \"entries\": {\n      \"paperless-ngx\": {\n        \"env\": { \"PAPERLESS_URL\": \"http://your-paperless-host:8000\" },\n        \"apiKey\": \"your-api-token\"\n      }\n    }\n  }\n}\n\n\nGet your API token from Paperless web UI: Settings → Users & Groups → [user] → Generate Token.\n\nQuick Reference\nTask\tCommand\nSearch documents\tnode {baseDir}/scripts/search.mjs \"query\"\nList recent\tnode {baseDir}/scripts/list.mjs [--limit N]\nGet document\tnode {baseDir}/scripts/get.mjs <id> [--content]\nUpload document\tnode {baseDir}/scripts/upload.mjs <file> [--title \"...\"] [--tags \"a,b\"]\nDownload PDF\tnode {baseDir}/scripts/download.mjs <id> [--output path]\nList tags\tnode {baseDir}/scripts/tags.mjs\nList types\tnode {baseDir}/scripts/types.mjs\nList correspondents\tnode {baseDir}/scripts/correspondents.mjs\n\nAll scripts are in {baseDir}/scripts/.\n\nCommon Workflows\nFind a document\n# Full-text search\nnode {baseDir}/scripts/search.mjs \"electricity bill december\"\n\n# Filter by tag\nnode {baseDir}/scripts/search.mjs --tag \"tax-deductible\"\n\n# Filter by document type\nnode {baseDir}/scripts/search.mjs --type \"Invoice\"\n\n# Filter by correspondent\nnode {baseDir}/scripts/search.mjs --correspondent \"AGL\"\n\n# Combine filters\nnode {baseDir}/scripts/search.mjs \"2025\" --tag \"unpaid\" --type \"Invoice\"\n\nGet document details\n# Metadata only\nnode {baseDir}/scripts/get.mjs 28\n\n# Include OCR text content\nnode {baseDir}/scripts/get.mjs 28 --content\n\n# Full content (no truncation)\nnode {baseDir}/scripts/get.mjs 28 --content --full\n\nUpload a document\n# Basic upload (title auto-detected)\nnode {baseDir}/scripts/upload.mjs /path/to/invoice.pdf\n\n# With metadata\nnode {baseDir}/scripts/upload.mjs /path/to/invoice.pdf \\\n  --title \"AGL Electricity Jan 2026\" \\\n  --tags \"unpaid,utility\" \\\n  --type \"Invoice\" \\\n  --correspondent \"AGL\" \\\n  --created \"2026-01-15\"\n\nDownload a document\n# Download to current directory\nnode {baseDir}/scripts/download.mjs 28\n\n# Specify output path\nnode {baseDir}/scripts/download.mjs 28 --output ~/Downloads/document.pdf\n\n# Get original (not archived/OCR'd version)\nnode {baseDir}/scripts/download.mjs 28 --original\n\nManage metadata\n# List all tags\nnode {baseDir}/scripts/tags.mjs\n\n# List document types\nnode {baseDir}/scripts/types.mjs\n\n# List correspondents\nnode {baseDir}/scripts/correspondents.mjs\n\n# Create new tag\nnode {baseDir}/scripts/tags.mjs --create \"new-tag-name\"\n\n# Create new correspondent\nnode {baseDir}/scripts/correspondents.mjs --create \"New Company Name\"\n\nOutput Format\n\nAll scripts output JSON for easy parsing. Use jq for formatting:\n\nnode {baseDir}/scripts/search.mjs \"invoice\" | jq '.results[] | {id, title, created}'\n\nAdvanced Usage\n\nFor complex queries or bulk operations, see references/api.md for direct API access patterns.\n\nTroubleshooting\n\n\"PAPERLESS_URL not set\" — Add to ~/.clawdbot/clawdbot.json env section or export in shell.\n\n\"401 Unauthorized\" — Check PAPERLESS_TOKEN is valid. Regenerate in Paperless UI if needed.\n\n\"Connection refused\" — Verify Paperless is running and URL is correct (include port).\n\nUpload fails silently — Check Paperless logs; file may be duplicate or unsupported format."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/madmantim/paperless-docs",
    "publisherUrl": "https://clawhub.ai/madmantim/paperless-docs",
    "owner": "madmantim",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/paperless-docs",
    "downloadUrl": "https://openagent3.xyz/downloads/paperless-docs",
    "agentUrl": "https://openagent3.xyz/skills/paperless-docs/agent",
    "manifestUrl": "https://openagent3.xyz/skills/paperless-docs/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/paperless-docs/agent.md"
  }
}