{
  "schemaVersion": "1.0",
  "item": {
    "slug": "hardcover",
    "name": "Hardcover.app skill for tracking books you're reading, reading goal, and finding books you'd love to read",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/asaphko/hardcover",
    "canonicalUrl": "https://clawhub.ai/asaphko/hardcover",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/hardcover",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=hardcover",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "references/entities.md",
      "SKILL.md"
    ],
    "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/hardcover"
    },
    "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/hardcover",
    "agentPageUrl": "https://openagent3.xyz/skills/hardcover/agent",
    "manifestUrl": "https://openagent3.xyz/skills/hardcover/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/hardcover/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": "Hardcover GraphQL API",
        "body": "Query your reading library, book metadata, and search Hardcover's catalog."
      },
      {
        "title": "Configuration",
        "body": "Env variable: HARDCOVER_API_TOKEN from https://hardcover.app/settings\nEndpoint: https://api.hardcover.app/v1/graphql\nRate limit: 60 req/min, 30s timeout, max 3 query depth"
      },
      {
        "title": "Authentication",
        "body": "All queries require Authorization: Bearer {token} header (token from settings, add Bearer  prefix):\n\ncurl -X POST https://api.hardcover.app/v1/graphql \\\n  -H \"Authorization: Bearer $HARDCOVER_API_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"query\": \"query { me { id username } }\"}'"
      },
      {
        "title": "Workflow",
        "body": "Get user ID first — most queries need it:\nquery { me { id username } }\n\n\n\nQuery by status — use status_id filter:\n\n1 = Want to Read\n2 = Currently Reading\n3 = Read\n4 = Paused\n5 = Did Not Finish\n\n\n\nPaginate large results — use limit/offset, add distinct_on: book_id"
      },
      {
        "title": "Currently Reading with Progress",
        "body": "query {\n  me {\n    user_books(where: { status_id: { _eq: 2 } }) {\n      user_book_reads { progress_pages }\n      book {\n        title\n        pages\n        image { url }\n        contributions { author { name } }\n      }\n    }\n  }\n}"
      },
      {
        "title": "Library by Status",
        "body": "query ($userId: Int!, $status: Int!) {\n  user_books(\n    where: { user_id: { _eq: $userId }, status_id: { _eq: $status } }\n    limit: 25\n    offset: 0\n    distinct_on: book_id\n  ) {\n    book {\n      id\n      title\n      pages\n      image { url }\n      contributions { author { name } }\n    }\n  }\n}"
      },
      {
        "title": "Search Books/Authors/Series",
        "body": "query ($q: String!, $type: String!) {\n  search(query: $q, query_type: $type, per_page: 10, page: 1) {\n    results\n  }\n}\n\nquery_type: Book, Author, Series, Character, List, Publisher, User"
      },
      {
        "title": "Book Details by Title",
        "body": "query {\n  editions(where: { title: { _eq: \"Oathbringer\" } }) {\n    title\n    pages\n    isbn_13\n    edition_format\n    publisher { name }\n    book {\n      slug\n      contributions { author { name } }\n    }\n  }\n}"
      },
      {
        "title": "Limitations",
        "body": "Read-only (no mutations yet)\nNo text search operators (_like, _ilike, _regex)\nAccess limited to: your data, public data, followed users' data\nTokens expire after 1 year"
      },
      {
        "title": "Entity Reference",
        "body": "For detailed field documentation on Books, Editions, Authors, Series, User Books, Activities, Lists, Goals, and other entities, see references/entities.md."
      },
      {
        "title": "Response Codes",
        "body": "CodeMeaning200Success401Invalid/expired token429Rate limited"
      }
    ],
    "body": "Hardcover GraphQL API\n\nQuery your reading library, book metadata, and search Hardcover's catalog.\n\nConfiguration\nEnv variable: HARDCOVER_API_TOKEN from https://hardcover.app/settings\nEndpoint: https://api.hardcover.app/v1/graphql\nRate limit: 60 req/min, 30s timeout, max 3 query depth\nAuthentication\n\nAll queries require Authorization: Bearer {token} header (token from settings, add Bearer prefix):\n\ncurl -X POST https://api.hardcover.app/v1/graphql \\\n  -H \"Authorization: Bearer $HARDCOVER_API_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"query\": \"query { me { id username } }\"}'\n\nWorkflow\n\nGet user ID first — most queries need it:\n\nquery { me { id username } }\n\n\nQuery by status — use status_id filter:\n\n1 = Want to Read\n2 = Currently Reading\n3 = Read\n4 = Paused\n5 = Did Not Finish\n\nPaginate large results — use limit/offset, add distinct_on: book_id\n\nCommon Queries\nCurrently Reading with Progress\nquery {\n  me {\n    user_books(where: { status_id: { _eq: 2 } }) {\n      user_book_reads { progress_pages }\n      book {\n        title\n        pages\n        image { url }\n        contributions { author { name } }\n      }\n    }\n  }\n}\n\nLibrary by Status\nquery ($userId: Int!, $status: Int!) {\n  user_books(\n    where: { user_id: { _eq: $userId }, status_id: { _eq: $status } }\n    limit: 25\n    offset: 0\n    distinct_on: book_id\n  ) {\n    book {\n      id\n      title\n      pages\n      image { url }\n      contributions { author { name } }\n    }\n  }\n}\n\nSearch Books/Authors/Series\nquery ($q: String!, $type: String!) {\n  search(query: $q, query_type: $type, per_page: 10, page: 1) {\n    results\n  }\n}\n\n\nquery_type: Book, Author, Series, Character, List, Publisher, User\n\nBook Details by Title\nquery {\n  editions(where: { title: { _eq: \"Oathbringer\" } }) {\n    title\n    pages\n    isbn_13\n    edition_format\n    publisher { name }\n    book {\n      slug\n      contributions { author { name } }\n    }\n  }\n}\n\nLimitations\nRead-only (no mutations yet)\nNo text search operators (_like, _ilike, _regex)\nAccess limited to: your data, public data, followed users' data\nTokens expire after 1 year\nEntity Reference\n\nFor detailed field documentation on Books, Editions, Authors, Series, User Books, Activities, Lists, Goals, and other entities, see references/entities.md.\n\nResponse Codes\nCode\tMeaning\n200\tSuccess\n401\tInvalid/expired token\n429\tRate limited"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/asaphko/hardcover",
    "publisherUrl": "https://clawhub.ai/asaphko/hardcover",
    "owner": "asaphko",
    "version": "1.0.7",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/hardcover",
    "downloadUrl": "https://openagent3.xyz/downloads/hardcover",
    "agentUrl": "https://openagent3.xyz/skills/hardcover/agent",
    "manifestUrl": "https://openagent3.xyz/skills/hardcover/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/hardcover/agent.md"
  }
}