{
  "schemaVersion": "1.0",
  "item": {
    "slug": "spotify-linux",
    "name": "Spotify Player",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/Shaharsha/spotify-linux",
    "canonicalUrl": "https://clawhub.ai/Shaharsha/spotify-linux",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/spotify-linux",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=spotify-linux",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "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": "spotify-linux",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-10T03:06:12.704Z",
      "expiresAt": "2026-05-17T03:06:12.704Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=spotify-linux",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=spotify-linux",
        "contentDisposition": "attachment; filename=\"spotify-linux-1.2.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null,
        "slug": "spotify-linux"
      },
      "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/spotify-linux"
    },
    "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/spotify-linux",
    "agentPageUrl": "https://openagent3.xyz/skills/spotify-linux/agent",
    "manifestUrl": "https://openagent3.xyz/skills/spotify-linux/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/spotify-linux/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": "Spogo - Spotify CLI for Linux Servers",
        "body": "Control Spotify from headless Linux servers using cookie-based auth. No OAuth callback needed - perfect for remote servers."
      },
      {
        "title": "Why This Skill?",
        "body": "The original spotify-player skill by steipete on ClawHub assumes local browser access for cookie import (spogo auth import --browser chrome). On headless Linux servers without a local browser, this doesn't work.\n\nThis skill documents the cookie-based workaround - copy 2 browser cookies and you're done. No OAuth, no localhost needed."
      },
      {
        "title": "Requirements",
        "body": "Spotify Premium account\nGo 1.21+ installed\nUser's Spotify browser cookies"
      },
      {
        "title": "1. Install Go (if not installed)",
        "body": "# Ubuntu/Debian\nsudo apt update && sudo apt install -y golang-go\n\n# Or download latest from https://go.dev/dl/\nwget https://go.dev/dl/go1.23.4.linux-amd64.tar.gz\nsudo tar -C /usr/local -xzf go1.23.4.linux-amd64.tar.gz\necho 'export PATH=$PATH:/usr/local/go/bin:~/go/bin' >> ~/.bashrc\nsource ~/.bashrc"
      },
      {
        "title": "2. Install spogo",
        "body": "go install github.com/steipete/spogo/cmd/spogo@latest\n\nThis installs to ~/go/bin/spogo. Add to PATH if needed:\n\nsudo ln -s ~/go/bin/spogo /usr/local/bin/spogo"
      },
      {
        "title": "3. Verify",
        "body": "spogo --version\n# spogo v0.2.0"
      },
      {
        "title": "Setup (Cookie Auth)",
        "body": "Since OAuth requires localhost callback (impossible on remote servers), we use cookie auth instead."
      },
      {
        "title": "1. Get cookies from browser",
        "body": "Have the user open DevTools → Application → Cookies → open.spotify.com and copy:\n\nsp_dc - Main auth token (long string, required)\nsp_t - Device ID (UUID format, required for playback)"
      },
      {
        "title": "2. Create config",
        "body": "Create ~/.config/spogo/config.toml:\n\ndefault_profile = \"default\"\n\n[profile.default]\ncookie_path = \"/root/.config/spogo/cookies/default.json\"\nmarket = \"IL\"\nlanguage = \"en\""
      },
      {
        "title": "3. Create cookies file",
        "body": "Create ~/.config/spogo/cookies/default.json:\n\n[\n  {\n    \"name\": \"sp_dc\",\n    \"value\": \"USER_SP_DC_VALUE\",\n    \"domain\": \".spotify.com\",\n    \"path\": \"/\",\n    \"expires\": \"2027-01-01T00:00:00Z\",\n    \"secure\": true,\n    \"http_only\": true\n  },\n  {\n    \"name\": \"sp_t\",\n    \"value\": \"USER_SP_T_VALUE\",\n    \"domain\": \".spotify.com\",\n    \"path\": \"/\",\n    \"expires\": \"2027-01-01T00:00:00Z\",\n    \"secure\": false,\n    \"http_only\": false\n  }\n]"
      },
      {
        "title": "4. Verify",
        "body": "spogo auth status\n# → \"Cookies: 2 (file)\""
      },
      {
        "title": "Commands",
        "body": "# Search\nspogo search track \"query\"\nspogo search track \"query\" --json --limit 5\n\n# Play\nspogo play spotify:track:ID\nspogo play                    # Resume\nspogo pause\nspogo next / spogo prev\n\n# Devices\nspogo device list --json\nspogo device set \"DEVICE_ID\"\n\n# Status\nspogo status\nspogo status --json"
      },
      {
        "title": "\"missing device id\" Error - Browser Fallback",
        "body": "spogo needs an active Spotify session. If no device played recently:\n\nOpen track in browser:\n\nbrowser open https://open.spotify.com/track/TRACK_ID profile=openclaw\n\nClick Play via browser automation\n\n\nTransfer to target device:\n\nspogo device set \"DEVICE_ID\"\n\nThe browser profile stays logged in (cookies persist). Session stays active for hours after playback."
      },
      {
        "title": "Rate Limits",
        "body": "Connect API (default): No rate limits ✓\nWeb API (--engine web): Rate limited (429 errors)\nFor library access when rate limited → use browser automation"
      },
      {
        "title": "\"missing device id\"",
        "body": "No active Spotify session. Use browser fallback (see above) to start playback first."
      },
      {
        "title": "\"401 Unauthorized\"",
        "body": "Cookies expired. Get fresh cookies from browser and update the JSON file."
      },
      {
        "title": "Commands work but no sound",
        "body": "Check spogo device list - playback might be on wrong device. Use spogo device set \"DEVICE_ID\" to switch."
      },
      {
        "title": "Security & Privacy",
        "body": "Cookie handling: sp_dc and sp_t are stored locally in ~/.config/spogo/cookies/ — treat them as secrets, never log or share them\nNetwork access: spogo only communicates with Spotify APIs (api.spotify.com, open.spotify.com)\nBrowser fallback: Optional — only used when no active Spotify device exists. Uses the agent's browser profile to open open.spotify.com and click Play. This does NOT extract additional cookies or access other browser state\nInstall source: go install from the official steipete/spogo GitHub repository — open source, auditable"
      },
      {
        "title": "Notes",
        "body": "Cookie expiry: ~1 year, but may invalidate if user logs out or changes password\nPremium required: Free accounts can't use Connect API\nMarket setting: Change market in config for correct regional availability (IL, US, etc.)"
      }
    ],
    "body": "Spogo - Spotify CLI for Linux Servers\n\nControl Spotify from headless Linux servers using cookie-based auth. No OAuth callback needed - perfect for remote servers.\n\nWhy This Skill?\n\nThe original spotify-player skill by steipete on ClawHub assumes local browser access for cookie import (spogo auth import --browser chrome). On headless Linux servers without a local browser, this doesn't work.\n\nThis skill documents the cookie-based workaround - copy 2 browser cookies and you're done. No OAuth, no localhost needed.\n\nRequirements\nSpotify Premium account\nGo 1.21+ installed\nUser's Spotify browser cookies\nInstallation (Linux)\n1. Install Go (if not installed)\n# Ubuntu/Debian\nsudo apt update && sudo apt install -y golang-go\n\n# Or download latest from https://go.dev/dl/\nwget https://go.dev/dl/go1.23.4.linux-amd64.tar.gz\nsudo tar -C /usr/local -xzf go1.23.4.linux-amd64.tar.gz\necho 'export PATH=$PATH:/usr/local/go/bin:~/go/bin' >> ~/.bashrc\nsource ~/.bashrc\n\n2. Install spogo\ngo install github.com/steipete/spogo/cmd/spogo@latest\n\n\nThis installs to ~/go/bin/spogo. Add to PATH if needed:\n\nsudo ln -s ~/go/bin/spogo /usr/local/bin/spogo\n\n3. Verify\nspogo --version\n# spogo v0.2.0\n\nSetup (Cookie Auth)\n\nSince OAuth requires localhost callback (impossible on remote servers), we use cookie auth instead.\n\n1. Get cookies from browser\n\nHave the user open DevTools → Application → Cookies → open.spotify.com and copy:\n\nsp_dc - Main auth token (long string, required)\nsp_t - Device ID (UUID format, required for playback)\n2. Create config\n\nCreate ~/.config/spogo/config.toml:\n\ndefault_profile = \"default\"\n\n[profile.default]\ncookie_path = \"/root/.config/spogo/cookies/default.json\"\nmarket = \"IL\"\nlanguage = \"en\"\n\n3. Create cookies file\n\nCreate ~/.config/spogo/cookies/default.json:\n\n[\n  {\n    \"name\": \"sp_dc\",\n    \"value\": \"USER_SP_DC_VALUE\",\n    \"domain\": \".spotify.com\",\n    \"path\": \"/\",\n    \"expires\": \"2027-01-01T00:00:00Z\",\n    \"secure\": true,\n    \"http_only\": true\n  },\n  {\n    \"name\": \"sp_t\",\n    \"value\": \"USER_SP_T_VALUE\",\n    \"domain\": \".spotify.com\",\n    \"path\": \"/\",\n    \"expires\": \"2027-01-01T00:00:00Z\",\n    \"secure\": false,\n    \"http_only\": false\n  }\n]\n\n4. Verify\nspogo auth status\n# → \"Cookies: 2 (file)\"\n\nCommands\n# Search\nspogo search track \"query\"\nspogo search track \"query\" --json --limit 5\n\n# Play\nspogo play spotify:track:ID\nspogo play                    # Resume\nspogo pause\nspogo next / spogo prev\n\n# Devices\nspogo device list --json\nspogo device set \"DEVICE_ID\"\n\n# Status\nspogo status\nspogo status --json\n\n\"missing device id\" Error - Browser Fallback\n\nspogo needs an active Spotify session. If no device played recently:\n\nOpen track in browser:\nbrowser open https://open.spotify.com/track/TRACK_ID profile=openclaw\n\n\nClick Play via browser automation\n\nTransfer to target device:\n\nspogo device set \"DEVICE_ID\"\n\n\nThe browser profile stays logged in (cookies persist). Session stays active for hours after playback.\n\nRate Limits\nConnect API (default): No rate limits ✓\nWeb API (--engine web): Rate limited (429 errors)\nFor library access when rate limited → use browser automation\nTroubleshooting\n\"missing device id\"\n\nNo active Spotify session. Use browser fallback (see above) to start playback first.\n\n\"401 Unauthorized\"\n\nCookies expired. Get fresh cookies from browser and update the JSON file.\n\nCommands work but no sound\n\nCheck spogo device list - playback might be on wrong device. Use spogo device set \"DEVICE_ID\" to switch.\n\nSecurity & Privacy\nCookie handling: sp_dc and sp_t are stored locally in ~/.config/spogo/cookies/ — treat them as secrets, never log or share them\nNetwork access: spogo only communicates with Spotify APIs (api.spotify.com, open.spotify.com)\nBrowser fallback: Optional — only used when no active Spotify device exists. Uses the agent's browser profile to open open.spotify.com and click Play. This does NOT extract additional cookies or access other browser state\nInstall source: go install from the official steipete/spogo GitHub repository — open source, auditable\nNotes\nCookie expiry: ~1 year, but may invalidate if user logs out or changes password\nPremium required: Free accounts can't use Connect API\nMarket setting: Change market in config for correct regional availability (IL, US, etc.)"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/Shaharsha/spotify-linux",
    "publisherUrl": "https://clawhub.ai/Shaharsha/spotify-linux",
    "owner": "Shaharsha",
    "version": "1.1.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/spotify-linux",
    "downloadUrl": "https://openagent3.xyz/downloads/spotify-linux",
    "agentUrl": "https://openagent3.xyz/skills/spotify-linux/agent",
    "manifestUrl": "https://openagent3.xyz/skills/spotify-linux/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/spotify-linux/agent.md"
  }
}