{
  "schemaVersion": "1.0",
  "item": {
    "slug": "deepread-agent-setup",
    "name": "DeepRead Agent Self Sign Up",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/uday390/deepread-agent-setup",
    "canonicalUrl": "https://clawhub.ai/uday390/deepread-agent-setup",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/deepread-agent-setup",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=deepread-agent-setup",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "device_flow.sh",
      "package.json",
      "device_flow.py",
      "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",
      "slug": "deepread-agent-setup",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-02T10:36:36.140Z",
      "expiresAt": "2026-05-09T10:36:36.140Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=deepread-agent-setup",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=deepread-agent-setup",
        "contentDisposition": "attachment; filename=\"deepread-agent-setup-2.1.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null,
        "slug": "deepread-agent-setup"
      },
      "scope": "item",
      "summary": "Item download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this item.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/deepread-agent-setup"
    },
    "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/deepread-agent-setup",
    "agentPageUrl": "https://openagent3.xyz/skills/deepread-agent-setup/agent",
    "manifestUrl": "https://openagent3.xyz/skills/deepread-agent-setup/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/deepread-agent-setup/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": "DeepRead Agent Setup",
        "body": "Authenticate AI agents with the DeepRead OCR API using the OAuth 2.0 Device Authorization Flow (RFC 8628). After setup, the agent has a DEEPREAD_API_KEY environment variable and can use the DeepRead OCR skill."
      },
      {
        "title": "How It Works",
        "body": "The device flow lets headless agents (no browser) authenticate securely:\n\nAgent requests device code  →  User opens URL in browser  →  User approves  →  Agent receives API key\n\nAgent calls POST https://api.deepread.tech/v1/agent/device/code to get a device_code and user_code\nAgent displays the user_code and a verification URL to the user\nUser opens the URL in their browser, logs in, and enters the code\nAgent polls POST https://api.deepread.tech/v1/agent/device/token until the user approves\nAgent receives an api_key (prefixed sk_live_) and stores it as the DEEPREAD_API_KEY environment variable\n\nOnly domain contacted: api.deepread.tech"
      },
      {
        "title": "Prerequisites",
        "body": "A DeepRead account (free at https://www.deepread.tech/dashboard/?utm_source=clawdhub)\nInternet access to reach api.deepread.tech"
      },
      {
        "title": "Step 1: Request a Device Code",
        "body": "curl -s -X POST https://api.deepread.tech/v1/agent/device/code \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"agent_name\": \"my-ai-agent\"}'\n\nThe agent_name field is optional — it is shown on the approval screen so the user knows which agent is requesting access.\n\nResponse:\n\n{\n  \"device_code\": \"GmRhmhcxhZAzk...EeNu5OfKhL79MQgN\",\n  \"user_code\": \"WDJB-MJHT\",\n  \"verification_uri\": \"https://www.deepread.tech/activate\",\n  \"verification_uri_complete\": \"https://www.deepread.tech/activate?code=WDJB-MJHT\",\n  \"expires_in\": 900,\n  \"interval\": 5\n}\n\nTell the user (using the values from the response — they change every time):\n\nOpen {verification_uri} and enter code {user_code}\nOr open this direct link: {verification_uri_complete}"
      },
      {
        "title": "Step 2: Poll for Approval",
        "body": "Poll every interval seconds (default: 5) until the user approves:\n\ncurl -s -X POST https://api.deepread.tech/v1/agent/device/token \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"device_code\": \"GmRhmhcxhZAzk...EeNu5OfKhL79MQgN\"}'\n\nWhile waiting (user hasn't approved yet):\n\n{\n  \"error\": \"authorization_pending\",\n  \"api_key\": null,\n  \"key_prefix\": null\n}\n\nAfter user approves:\n\n{\n  \"error\": null,\n  \"api_key\": \"sk_live_abc123def456...\",\n  \"key_prefix\": \"sk_live_abc123de\"\n}\n\nThe api_key is returned exactly once. The next poll after retrieval will return expired_token. Save it immediately.\n\nIf user denied:\n\n{\n  \"error\": \"access_denied\",\n  \"api_key\": null,\n  \"key_prefix\": null\n}\n\nIf code expired (15 minutes):\n\n{\n  \"error\": \"expired_token\",\n  \"api_key\": null,\n  \"key_prefix\": null\n}"
      },
      {
        "title": "Step 3: Store the API Key",
        "body": "Once you receive the api_key, set it for the current session:\n\nexport DEEPREAD_API_KEY=\"<api_key from response>\"\n\nTo persist across sessions, the user should choose one of these options:\n\nMethodCommandSecuritySecrets manager (recommended)Use your OS keychain, 1Password CLI, or passEncrypted at restShell profileUser manually adds export DEEPREAD_API_KEY=\"...\" to ~/.zshrcPlaintext file — readable by local processes\n\nImportant:\n\nThe agent should set the env var for the current session only (export)\nPersistence is the user's choice — do not automatically write to shell profiles\nNever commit the key to source control or write it to project files\nThe key prefix sk_live_ confirms it is a valid DeepRead production key"
      },
      {
        "title": "Step 4: Verify the Key Works",
        "body": "Submit a test document to confirm the key is valid:\n\ncurl -s -X POST https://api.deepread.tech/v1/process \\\n  -H \"X-API-Key: $DEEPREAD_API_KEY\" \\\n  -F \"file=@test.pdf\"\n\nA successful response returns a job ID confirming the key works:\n\n{\n  \"id\": \"550e8400-e29b-41d4-a716-446655440000\",\n  \"status\": \"queued\"\n}\n\nIf the key is invalid you will get a 401 Unauthorized response."
      },
      {
        "title": "Complete Flow (All Steps)",
        "body": "#!/bin/bash\n# DeepRead Device Flow — complete example\n\n# 1. Request device code\nRESPONSE=$(curl -s -X POST https://api.deepread.tech/v1/agent/device/code \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"agent_name\": \"my-ai-agent\"}')\n\nDEVICE_CODE=$(echo \"$RESPONSE\" | jq -r '.device_code')\nUSER_CODE=$(echo \"$RESPONSE\" | jq -r '.user_code')\nVERIFY_URI=$(echo \"$RESPONSE\" | jq -r '.verification_uri')\nVERIFY_URI_COMPLETE=$(echo \"$RESPONSE\" | jq -r '.verification_uri_complete')\nINTERVAL=$(echo \"$RESPONSE\" | jq -r '.interval')\n\necho \"Open $VERIFY_URI and enter code: $USER_CODE\"\necho \"Or open directly: $VERIFY_URI_COMPLETE\"\n\n# 2. Poll for token\nwhile true; do\n  TOKEN_RESPONSE=$(curl -s -X POST https://api.deepread.tech/v1/agent/device/token \\\n    -H \"Content-Type: application/json\" \\\n    -d \"{\\\"device_code\\\": \\\"$DEVICE_CODE\\\"}\")\n\n  ERROR=$(echo \"$TOKEN_RESPONSE\" | jq -r '.error // empty')\n\n  if [ -z \"$ERROR\" ]; then\n    export DEEPREAD_API_KEY=$(echo \"$TOKEN_RESPONSE\" | jq -r '.api_key')\n    echo \"Authenticated. DEEPREAD_API_KEY is set for this session.\"\n    break\n  elif [ \"$ERROR\" = \"authorization_pending\" ]; then\n    sleep \"$INTERVAL\"\n  elif [ \"$ERROR\" = \"slow_down\" ]; then\n    INTERVAL=$((INTERVAL + 5))\n    sleep \"$INTERVAL\"\n  else\n    echo \"Error: $ERROR\"\n    exit 1\n  fi\ndone"
      },
      {
        "title": "Endpoints Used",
        "body": "EndpointMethodAuthPurposehttps://api.deepread.tech/v1/agent/device/codePOSTNoneRequest device code + user codehttps://api.deepread.tech/v1/agent/device/tokenPOSTNonePoll for API key after user approvalhttps://www.deepread.tech/activate—BrowserUser opens this URL to enter the code and approve\n\nNo other endpoints are contacted by this skill."
      },
      {
        "title": "\"authorization_pending\" keeps repeating",
        "body": "The user hasn't approved yet. Keep polling. The code expires after 15 minutes (expires_in: 900)."
      },
      {
        "title": "\"expired_token\"",
        "body": "The device code expired before the user approved, or the API key was already retrieved (one-time retrieval). Start over from Step 1."
      },
      {
        "title": "\"slow_down\"",
        "body": "You're polling too fast. Increase the polling interval by 5 seconds."
      },
      {
        "title": "\"access_denied\"",
        "body": "The user clicked Deny on the approval screen. Start over from Step 1 if the user wants to retry."
      },
      {
        "title": "Key doesn't work after export",
        "body": "Ensure the shell session was not restarted. If persisting to ~/.zshrc, run source ~/.zshrc to reload."
      },
      {
        "title": "\"DEEPREAD_API_KEY not set\"",
        "body": "The environment variable was not persisted. Re-run the device flow or manually set:\n\nexport DEEPREAD_API_KEY=\"sk_live_your_key_here\""
      },
      {
        "title": "Security Notes",
        "body": "The device flow follows RFC 8628\nThe user_code is short-lived (15 minutes) and single-use\nThe api_key is returned exactly once — subsequent polls return expired_token\nAll communication is over HTTPS\nThe agent sets DEEPREAD_API_KEY for the current session only — it does not write to disk\nFor long-term storage, prefer a secrets manager (OS keychain, 1Password CLI, pass) over plaintext shell profiles\nNever commit the key to source control or write it to project files\nThe agent never sees the user's password"
      },
      {
        "title": "Support",
        "body": "Dashboard: https://www.deepread.tech/dashboard\nIssues: https://github.com/deepread-tech/deep-read-service/issues\nEmail: hello@deepread.tech"
      }
    ],
    "body": "DeepRead Agent Setup\n\nAuthenticate AI agents with the DeepRead OCR API using the OAuth 2.0 Device Authorization Flow (RFC 8628). After setup, the agent has a DEEPREAD_API_KEY environment variable and can use the DeepRead OCR skill.\n\nHow It Works\n\nThe device flow lets headless agents (no browser) authenticate securely:\n\nAgent requests device code  →  User opens URL in browser  →  User approves  →  Agent receives API key\n\nAgent calls POST https://api.deepread.tech/v1/agent/device/code to get a device_code and user_code\nAgent displays the user_code and a verification URL to the user\nUser opens the URL in their browser, logs in, and enters the code\nAgent polls POST https://api.deepread.tech/v1/agent/device/token until the user approves\nAgent receives an api_key (prefixed sk_live_) and stores it as the DEEPREAD_API_KEY environment variable\n\nOnly domain contacted: api.deepread.tech\n\nPrerequisites\nA DeepRead account (free at https://www.deepread.tech/dashboard/?utm_source=clawdhub)\nInternet access to reach api.deepread.tech\nSetup Instructions\nStep 1: Request a Device Code\ncurl -s -X POST https://api.deepread.tech/v1/agent/device/code \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"agent_name\": \"my-ai-agent\"}'\n\n\nThe agent_name field is optional — it is shown on the approval screen so the user knows which agent is requesting access.\n\nResponse:\n\n{\n  \"device_code\": \"GmRhmhcxhZAzk...EeNu5OfKhL79MQgN\",\n  \"user_code\": \"WDJB-MJHT\",\n  \"verification_uri\": \"https://www.deepread.tech/activate\",\n  \"verification_uri_complete\": \"https://www.deepread.tech/activate?code=WDJB-MJHT\",\n  \"expires_in\": 900,\n  \"interval\": 5\n}\n\n\nTell the user (using the values from the response — they change every time):\n\nOpen {verification_uri} and enter code {user_code}\n\nOr open this direct link: {verification_uri_complete}\n\nStep 2: Poll for Approval\n\nPoll every interval seconds (default: 5) until the user approves:\n\ncurl -s -X POST https://api.deepread.tech/v1/agent/device/token \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"device_code\": \"GmRhmhcxhZAzk...EeNu5OfKhL79MQgN\"}'\n\n\nWhile waiting (user hasn't approved yet):\n\n{\n  \"error\": \"authorization_pending\",\n  \"api_key\": null,\n  \"key_prefix\": null\n}\n\n\nAfter user approves:\n\n{\n  \"error\": null,\n  \"api_key\": \"sk_live_abc123def456...\",\n  \"key_prefix\": \"sk_live_abc123de\"\n}\n\n\nThe api_key is returned exactly once. The next poll after retrieval will return expired_token. Save it immediately.\n\nIf user denied:\n\n{\n  \"error\": \"access_denied\",\n  \"api_key\": null,\n  \"key_prefix\": null\n}\n\n\nIf code expired (15 minutes):\n\n{\n  \"error\": \"expired_token\",\n  \"api_key\": null,\n  \"key_prefix\": null\n}\n\nStep 3: Store the API Key\n\nOnce you receive the api_key, set it for the current session:\n\nexport DEEPREAD_API_KEY=\"<api_key from response>\"\n\n\nTo persist across sessions, the user should choose one of these options:\n\nMethod\tCommand\tSecurity\nSecrets manager (recommended)\tUse your OS keychain, 1Password CLI, or pass\tEncrypted at rest\nShell profile\tUser manually adds export DEEPREAD_API_KEY=\"...\" to ~/.zshrc\tPlaintext file — readable by local processes\n\nImportant:\n\nThe agent should set the env var for the current session only (export)\nPersistence is the user's choice — do not automatically write to shell profiles\nNever commit the key to source control or write it to project files\nThe key prefix sk_live_ confirms it is a valid DeepRead production key\nStep 4: Verify the Key Works\n\nSubmit a test document to confirm the key is valid:\n\ncurl -s -X POST https://api.deepread.tech/v1/process \\\n  -H \"X-API-Key: $DEEPREAD_API_KEY\" \\\n  -F \"file=@test.pdf\"\n\n\nA successful response returns a job ID confirming the key works:\n\n{\n  \"id\": \"550e8400-e29b-41d4-a716-446655440000\",\n  \"status\": \"queued\"\n}\n\n\nIf the key is invalid you will get a 401 Unauthorized response.\n\nComplete Flow (All Steps)\n#!/bin/bash\n# DeepRead Device Flow — complete example\n\n# 1. Request device code\nRESPONSE=$(curl -s -X POST https://api.deepread.tech/v1/agent/device/code \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"agent_name\": \"my-ai-agent\"}')\n\nDEVICE_CODE=$(echo \"$RESPONSE\" | jq -r '.device_code')\nUSER_CODE=$(echo \"$RESPONSE\" | jq -r '.user_code')\nVERIFY_URI=$(echo \"$RESPONSE\" | jq -r '.verification_uri')\nVERIFY_URI_COMPLETE=$(echo \"$RESPONSE\" | jq -r '.verification_uri_complete')\nINTERVAL=$(echo \"$RESPONSE\" | jq -r '.interval')\n\necho \"Open $VERIFY_URI and enter code: $USER_CODE\"\necho \"Or open directly: $VERIFY_URI_COMPLETE\"\n\n# 2. Poll for token\nwhile true; do\n  TOKEN_RESPONSE=$(curl -s -X POST https://api.deepread.tech/v1/agent/device/token \\\n    -H \"Content-Type: application/json\" \\\n    -d \"{\\\"device_code\\\": \\\"$DEVICE_CODE\\\"}\")\n\n  ERROR=$(echo \"$TOKEN_RESPONSE\" | jq -r '.error // empty')\n\n  if [ -z \"$ERROR\" ]; then\n    export DEEPREAD_API_KEY=$(echo \"$TOKEN_RESPONSE\" | jq -r '.api_key')\n    echo \"Authenticated. DEEPREAD_API_KEY is set for this session.\"\n    break\n  elif [ \"$ERROR\" = \"authorization_pending\" ]; then\n    sleep \"$INTERVAL\"\n  elif [ \"$ERROR\" = \"slow_down\" ]; then\n    INTERVAL=$((INTERVAL + 5))\n    sleep \"$INTERVAL\"\n  else\n    echo \"Error: $ERROR\"\n    exit 1\n  fi\ndone\n\nEndpoints Used\nEndpoint\tMethod\tAuth\tPurpose\nhttps://api.deepread.tech/v1/agent/device/code\tPOST\tNone\tRequest device code + user code\nhttps://api.deepread.tech/v1/agent/device/token\tPOST\tNone\tPoll for API key after user approval\nhttps://www.deepread.tech/activate\t—\tBrowser\tUser opens this URL to enter the code and approve\n\nNo other endpoints are contacted by this skill.\n\nTroubleshooting\n\"authorization_pending\" keeps repeating\n\nThe user hasn't approved yet. Keep polling. The code expires after 15 minutes (expires_in: 900).\n\n\"expired_token\"\n\nThe device code expired before the user approved, or the API key was already retrieved (one-time retrieval). Start over from Step 1.\n\n\"slow_down\"\n\nYou're polling too fast. Increase the polling interval by 5 seconds.\n\n\"access_denied\"\n\nThe user clicked Deny on the approval screen. Start over from Step 1 if the user wants to retry.\n\nKey doesn't work after export\n\nEnsure the shell session was not restarted. If persisting to ~/.zshrc, run source ~/.zshrc to reload.\n\n\"DEEPREAD_API_KEY not set\"\n\nThe environment variable was not persisted. Re-run the device flow or manually set:\n\nexport DEEPREAD_API_KEY=\"sk_live_your_key_here\"\n\nSecurity Notes\nThe device flow follows RFC 8628\nThe user_code is short-lived (15 minutes) and single-use\nThe api_key is returned exactly once — subsequent polls return expired_token\nAll communication is over HTTPS\nThe agent sets DEEPREAD_API_KEY for the current session only — it does not write to disk\nFor long-term storage, prefer a secrets manager (OS keychain, 1Password CLI, pass) over plaintext shell profiles\nNever commit the key to source control or write it to project files\nThe agent never sees the user's password\nSupport\nDashboard: https://www.deepread.tech/dashboard\nIssues: https://github.com/deepread-tech/deep-read-service/issues\nEmail: hello@deepread.tech"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/uday390/deepread-agent-setup",
    "publisherUrl": "https://clawhub.ai/uday390/deepread-agent-setup",
    "owner": "uday390",
    "version": "2.0.4",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/deepread-agent-setup",
    "downloadUrl": "https://openagent3.xyz/downloads/deepread-agent-setup",
    "agentUrl": "https://openagent3.xyz/skills/deepread-agent-setup/agent",
    "manifestUrl": "https://openagent3.xyz/skills/deepread-agent-setup/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/deepread-agent-setup/agent.md"
  }
}