{
  "schemaVersion": "1.0",
  "item": {
    "slug": "literature-manager",
    "name": "Literature Manager",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/IsonaEi/literature-manager",
    "canonicalUrl": "https://clawhub.ai/IsonaEi/literature-manager",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/literature-manager",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=literature-manager",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "scripts/audit.sh",
      "scripts/convert.sh",
      "scripts/download.sh",
      "scripts/verify.sh"
    ],
    "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/literature-manager"
    },
    "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/literature-manager",
    "agentPageUrl": "https://openagent3.xyz/skills/literature-manager/agent",
    "manifestUrl": "https://openagent3.xyz/skills/literature-manager/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/literature-manager/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": "Literature Manager",
        "body": "Manage academic literature collections: search → download → convert → organize → verify."
      },
      {
        "title": "Dependencies",
        "body": "pdftotext (poppler-utils) — PDF text extraction\ncurl — downloading\npython3 — JSON processing in audit\nfile (coreutils) — PDF validation\nuvx markitdown[pdf] (optional) — fallback PDF→MD converter (note: plain uvx markitdown does NOT work for PDFs — must use uvx markitdown[pdf])"
      },
      {
        "title": "Quick Start",
        "body": "# Download a single paper by DOI\nbash scripts/download.sh \"10.1038/s41592-024-02200-1\" output_dir/\n\n# Convert PDF to markdown\nbash scripts/convert.sh paper.pdf output.md\n\n# Verify a single PDF+MD pair\nbash scripts/verify.sh paper.pdf paper.md\n\n# Full audit of a references/ folder\nbash scripts/audit.sh /path/to/references/"
      },
      {
        "title": "1. Search",
        "body": "Use web_fetch on Google Scholar:\n\nhttps://scholar.google.com/scholar?q=QUERY&as_ylo=YEAR\n\nExtract: title, authors, year, journal, DOI, PDF links.\n\nFor each result, identify the best open-access PDF source (see Download Strategy)."
      },
      {
        "title": "2. Download",
        "body": "Run scripts/download.sh <DOI_or_URL> <output_dir/> per paper. The script tries sources in order:\n\nDirect publisher PDF (Nature, eLife, Frontiers, PNAS, bioRxiv, arXiv)\nEuropePMC (PMC_ID → PDF)\nbioRxiv/arXiv preprint\nSci-Hub — https://sci-hub.box/<DOI> (use when publisher is paywalled)\n\n# Sci-Hub download example:\ncurl -L \"https://sci-hub.box/10.1038/nature12345\" -o paper.pdf\n\n⚠️ Legal note: Sci-Hub may violate publisher terms of service or copyright law in some jurisdictions. Use only if you understand and accept the legal implications in your context.\n\nIf all sources fail (including Sci-Hub), flag as permanent paywall. Provide the user with the DOI and ask for manual download."
      },
      {
        "title": "3. Convert",
        "body": "Run scripts/convert.sh <input.pdf> <output.md>. Uses pdftotext (reliable) with uvx markitdown[pdf] as fallback.\n\n# Correct markitdown command for PDFs:\nuvx markitdown[pdf] input.pdf > output.md\n\n# ⚠️ The following will NOT work for PDFs (missing [pdf] extra):\n# uvx markitdown input.pdf\n\nPrefer uvx markitdown[pdf] over pdftotext when full fidelity (tables, figures captions) matters."
      },
      {
        "title": "4. Organize",
        "body": "Standard folder structure:\n\nreferences/\n├── README.md              # Human index (summaries per category)\n├── index.json             # Machine index (structured metadata)\n├── RESOURCES.md           # Code repos + datasets\n├── resources.json         # Structured version\n├── <category-1>/\n│   ├── papers/            # PDFs\n│   └── markdown/          # Converted text\n└── <category-N>/\n    ├── papers/\n    └── markdown/\n\nCategories are user-defined. Number-prefix for sort order (e.g., 01-theoretical-frameworks/).\n\nindex.json schema per paper\n\n{\n  \"id\": \"short_id\",\n  \"title\": \"Full title\",\n  \"authors\": [\"Author1\", \"Author2\"],\n  \"year\": 2024,\n  \"journal\": \"Journal Name\",\n  \"doi\": \"10.xxxx/...\",\n  \"category\": \"category_name\",\n  \"subcategory\": \"optional\",\n  \"pdf_path\": \"category/papers/filename.pdf\",\n  \"markdown_path\": \"category/markdown/filename.md\",\n  \"tags\": [\"tag1\", \"tag2\"],\n  \"one_line_summary\": \"English one-liner\",\n  \"key_concepts\": [\"concept1\"],\n  \"relevance_to_project\": \"English description\"\n}\n\nREADME.md pattern\n\nPer category section, per paper: title, authors, year, journal, DOI, short summary in user's language."
      },
      {
        "title": "4b. DOI-Based Filenames & Path Mapping",
        "body": "Downloaded files are often named using DOI format rather than AuthorYear:\n\n10-1038_ncomms3018.md        # DOI: 10.1038/ncomms3018\n10-1016_j-neuron-2015-03-034.md\n\nWhen markdown_path entries in index.json become stale (e.g., after folder reorganization), maintain a separate mapping file:\n\n// temp/paper_md_mapping.json\n{\n  \"author2024_keyword\": \"references/new-downloads/10-1038_s41592-024-02200-1.md\",\n  ...\n}\n\nTo build this mapping: cross-reference each paper's DOI in index.json against actual files on disk. Use find + Python to automate.\n\nindex.json Known Pitfalls\n\nid: null corruption: If many entries have id=null and share the same pdf_path, the index was likely corrupted during a batch write. Rebuild from actual files on disk.\nDOI errors: Verify DOIs resolve correctly — typos in DOI fields are common (e.g., wrong suffix digits). Always cross-check with publisher page.\nDead markdown_path: After restructuring folders, markdown_path in index.json often points to old locations. Use the mapping file above as the source of truth."
      },
      {
        "title": "5. Verify",
        "body": "Run scripts/audit.sh <references_dir/> for full verification:\n\nEvery PDF is valid (file -b = PDF)\nEvery PDF title matches filename (pdftotext | head)\nEvery PDF has matching markdown (and vice versa)\nindex.json is valid, complete, paths exist, no duplicate IDs\nREADME.md stats match actual counts"
      },
      {
        "title": "6. Collect Resources",
        "body": "For tool/method papers, find GitHub repos and public datasets. Store in RESOURCES.md + resources.json."
      },
      {
        "title": "Sub-agent Strategy",
        "body": "For large batches, parallelize:\n\nDownload: 1 sub-agent per batch of ~5-8 papers\nOrganize: 1 sub-agent to build indexes\nVerify: 1 independent sub-agent (never the same as organizer)\n\nAlways use a separate sub-agent for verification (QC should not self-grade)."
      },
      {
        "title": "⚠️ Sub-agent Rules (Learned from Practice)",
        "body": "One batch at a time — do not spawn multiple note-writing batches simultaneously; LLM rate limits will cause silent failures\nSet a cron monitor whenever spawning long-running agents — agents can fail silently without triggering auto-announce; cron catches this\nCron monitor pattern:\n1. Spawn agent(s)\n2. Immediately set a cron job (every 10-15 min, isolated agentTurn)\n   → Check if expected output files exist\n   → Re-spawn failed agents\n   → When all complete: announce + delete cron\n3. After task finishes, confirm cron was removed"
      },
      {
        "title": "Adding Papers Incrementally",
        "body": "To add papers to an existing collection:\n\nDownload + convert new papers into correct category folder\nAppend entries to index.json\nUpdate README.md stats\nRun audit to verify consistency"
      }
    ],
    "body": "Literature Manager\n\nManage academic literature collections: search → download → convert → organize → verify.\n\nDependencies\npdftotext (poppler-utils) — PDF text extraction\ncurl — downloading\npython3 — JSON processing in audit\nfile (coreutils) — PDF validation\nuvx markitdown[pdf] (optional) — fallback PDF→MD converter (note: plain uvx markitdown does NOT work for PDFs — must use uvx markitdown[pdf])\nQuick Start\n# Download a single paper by DOI\nbash scripts/download.sh \"10.1038/s41592-024-02200-1\" output_dir/\n\n# Convert PDF to markdown\nbash scripts/convert.sh paper.pdf output.md\n\n# Verify a single PDF+MD pair\nbash scripts/verify.sh paper.pdf paper.md\n\n# Full audit of a references/ folder\nbash scripts/audit.sh /path/to/references/\n\nWorkflow\n1. Search\n\nUse web_fetch on Google Scholar:\n\nhttps://scholar.google.com/scholar?q=QUERY&as_ylo=YEAR\n\n\nExtract: title, authors, year, journal, DOI, PDF links.\n\nFor each result, identify the best open-access PDF source (see Download Strategy).\n\n2. Download\n\nRun scripts/download.sh <DOI_or_URL> <output_dir/> per paper. The script tries sources in order:\n\nDirect publisher PDF (Nature, eLife, Frontiers, PNAS, bioRxiv, arXiv)\nEuropePMC (PMC_ID → PDF)\nbioRxiv/arXiv preprint\nSci-Hub — https://sci-hub.box/<DOI> (use when publisher is paywalled)\n# Sci-Hub download example:\ncurl -L \"https://sci-hub.box/10.1038/nature12345\" -o paper.pdf\n\n\n⚠️ Legal note: Sci-Hub may violate publisher terms of service or copyright law in some jurisdictions. Use only if you understand and accept the legal implications in your context.\n\nIf all sources fail (including Sci-Hub), flag as permanent paywall. Provide the user with the DOI and ask for manual download.\n\n3. Convert\n\nRun scripts/convert.sh <input.pdf> <output.md>. Uses pdftotext (reliable) with uvx markitdown[pdf] as fallback.\n\n# Correct markitdown command for PDFs:\nuvx markitdown[pdf] input.pdf > output.md\n\n# ⚠️ The following will NOT work for PDFs (missing [pdf] extra):\n# uvx markitdown input.pdf\n\n\nPrefer uvx markitdown[pdf] over pdftotext when full fidelity (tables, figures captions) matters.\n\n4. Organize\n\nStandard folder structure:\n\nreferences/\n├── README.md              # Human index (summaries per category)\n├── index.json             # Machine index (structured metadata)\n├── RESOURCES.md           # Code repos + datasets\n├── resources.json         # Structured version\n├── <category-1>/\n│   ├── papers/            # PDFs\n│   └── markdown/          # Converted text\n└── <category-N>/\n    ├── papers/\n    └── markdown/\n\n\nCategories are user-defined. Number-prefix for sort order (e.g., 01-theoretical-frameworks/).\n\nindex.json schema per paper\n{\n  \"id\": \"short_id\",\n  \"title\": \"Full title\",\n  \"authors\": [\"Author1\", \"Author2\"],\n  \"year\": 2024,\n  \"journal\": \"Journal Name\",\n  \"doi\": \"10.xxxx/...\",\n  \"category\": \"category_name\",\n  \"subcategory\": \"optional\",\n  \"pdf_path\": \"category/papers/filename.pdf\",\n  \"markdown_path\": \"category/markdown/filename.md\",\n  \"tags\": [\"tag1\", \"tag2\"],\n  \"one_line_summary\": \"English one-liner\",\n  \"key_concepts\": [\"concept1\"],\n  \"relevance_to_project\": \"English description\"\n}\n\nREADME.md pattern\n\nPer category section, per paper: title, authors, year, journal, DOI, short summary in user's language.\n\n4b. DOI-Based Filenames & Path Mapping\n\nDownloaded files are often named using DOI format rather than AuthorYear:\n\n10-1038_ncomms3018.md        # DOI: 10.1038/ncomms3018\n10-1016_j-neuron-2015-03-034.md\n\n\nWhen markdown_path entries in index.json become stale (e.g., after folder reorganization), maintain a separate mapping file:\n\n// temp/paper_md_mapping.json\n{\n  \"author2024_keyword\": \"references/new-downloads/10-1038_s41592-024-02200-1.md\",\n  ...\n}\n\n\nTo build this mapping: cross-reference each paper's DOI in index.json against actual files on disk. Use find + Python to automate.\n\nindex.json Known Pitfalls\nid: null corruption: If many entries have id=null and share the same pdf_path, the index was likely corrupted during a batch write. Rebuild from actual files on disk.\nDOI errors: Verify DOIs resolve correctly — typos in DOI fields are common (e.g., wrong suffix digits). Always cross-check with publisher page.\nDead markdown_path: After restructuring folders, markdown_path in index.json often points to old locations. Use the mapping file above as the source of truth.\n5. Verify\n\nRun scripts/audit.sh <references_dir/> for full verification:\n\nEvery PDF is valid (file -b = PDF)\nEvery PDF title matches filename (pdftotext | head)\nEvery PDF has matching markdown (and vice versa)\nindex.json is valid, complete, paths exist, no duplicate IDs\nREADME.md stats match actual counts\n6. Collect Resources\n\nFor tool/method papers, find GitHub repos and public datasets. Store in RESOURCES.md + resources.json.\n\nSub-agent Strategy\n\nFor large batches, parallelize:\n\nDownload: 1 sub-agent per batch of ~5-8 papers\nOrganize: 1 sub-agent to build indexes\nVerify: 1 independent sub-agent (never the same as organizer)\n\nAlways use a separate sub-agent for verification (QC should not self-grade).\n\n⚠️ Sub-agent Rules (Learned from Practice)\nOne batch at a time — do not spawn multiple note-writing batches simultaneously; LLM rate limits will cause silent failures\nSet a cron monitor whenever spawning long-running agents — agents can fail silently without triggering auto-announce; cron catches this\nCron monitor pattern:\n1. Spawn agent(s)\n2. Immediately set a cron job (every 10-15 min, isolated agentTurn)\n   → Check if expected output files exist\n   → Re-spawn failed agents\n   → When all complete: announce + delete cron\n3. After task finishes, confirm cron was removed\n\nAdding Papers Incrementally\n\nTo add papers to an existing collection:\n\nDownload + convert new papers into correct category folder\nAppend entries to index.json\nUpdate README.md stats\nRun audit to verify consistency"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/IsonaEi/literature-manager",
    "publisherUrl": "https://clawhub.ai/IsonaEi/literature-manager",
    "owner": "IsonaEi",
    "version": "1.1.1",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/literature-manager",
    "downloadUrl": "https://openagent3.xyz/downloads/literature-manager",
    "agentUrl": "https://openagent3.xyz/skills/literature-manager/agent",
    "manifestUrl": "https://openagent3.xyz/skills/literature-manager/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/literature-manager/agent.md"
  }
}