{
  "schemaVersion": "1.0",
  "item": {
    "slug": "supabase-query",
    "name": "Supabase ⚡",
    "source": "tencent",
    "type": "skill",
    "category": "数据分析",
    "sourceUrl": "https://clawhub.ai/joelchance/supabase-query",
    "canonicalUrl": "https://clawhub.ai/joelchance/supabase-query",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/supabase-query",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=supabase-query",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "scripts/supabase.py"
    ],
    "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-23T16:43:11.935Z",
      "expiresAt": "2026-04-30T16:43:11.935Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
        "contentDisposition": "attachment; filename=\"4claw-imageboard-1.0.1.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/supabase-query"
    },
    "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/supabase-query",
    "agentPageUrl": "https://openagent3.xyz/skills/supabase-query/agent",
    "manifestUrl": "https://openagent3.xyz/skills/supabase-query/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/supabase-query/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": "Supabase ⚡",
        "body": "Query your Supabase projects directly from chat."
      },
      {
        "title": "1. Get your credentials",
        "body": "Go to Supabase Dashboard → Project Settings → API\n\nYou'll see two tabs:\n\n\"Publishable and secret API keys\" - New format (limited functionality)\n\"Legacy anon, service_role API keys\" - JWT format (full functionality)\n\n⚠️ Use the Legacy JWT key for full access!\n\nThe service_role JWT key (starts with eyJ...) gives full admin access including:\n\nListing users with details\nCounting signups\nAccessing auth.users\n\nThe new sb_secret_... keys have limited functionality and can't access the Admin API."
      },
      {
        "title": "2. Find your keys",
        "body": "Go to: Project Settings → API\nClick the \"Legacy anon, service_role API keys\" tab\nFind service_role (marked with red \"secret\" badge)\nClick Reveal and copy the eyJ... token\n\nDirect link: https://supabase.com/dashboard/project/YOUR_PROJECT_REF/settings/api"
      },
      {
        "title": "3. Configure",
        "body": "Option A: Interactive setup\n\npython3 {baseDir}/scripts/supabase.py auth\n\nOption B: Manual config\nCreate ~/.supabase_config.json:\n\n{\n  \"url\": \"https://xxxxx.supabase.co\",\n  \"service_key\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\"\n}\n\nOption C: Environment variables\n\nexport SUPABASE_URL=\"https://xxxxx.supabase.co\"\nexport SUPABASE_SERVICE_KEY=\"eyJhbG...\""
      },
      {
        "title": "User Analytics",
        "body": "# Count total users\npython3 {baseDir}/scripts/supabase.py users\n\n# Count new users (24h)\npython3 {baseDir}/scripts/supabase.py users-today\n\n# Count new users (7 days)  \npython3 {baseDir}/scripts/supabase.py users-week\n\n# List users with details (name, email, provider, signup date)\npython3 {baseDir}/scripts/supabase.py list-users\n\n# List new users from last 24h\npython3 {baseDir}/scripts/supabase.py list-users-today\n\n# Limit results\npython3 {baseDir}/scripts/supabase.py list-users --limit 5"
      },
      {
        "title": "Project Info",
        "body": "# Show project info and key type\npython3 {baseDir}/scripts/supabase.py info\n\n# List tables exposed via REST API\npython3 {baseDir}/scripts/supabase.py tables"
      },
      {
        "title": "JSON Output",
        "body": "python3 {baseDir}/scripts/supabase.py list-users --json"
      },
      {
        "title": "Key Types Explained",
        "body": "Key TypeFormatUser ListingUser CountREST TablesJWT service_roleeyJ...✅ Yes✅ Yes✅ YesNew secretsb_secret_...❌ No❌ No✅ Yes\n\nRecommendation: Always use the JWT service_role key for Clawdbot integration."
      },
      {
        "title": "Daily Reports",
        "body": "Set up automated daily user reports via Clawdbot cron."
      },
      {
        "title": "Example: Daily 5 PM Report",
        "body": "Ask Clawdbot:\n\nSend me a report of how many new users signed up at 5 PM every day, \nshow the last 5 signups with their names\n\nThis creates a cron job like:\n\n{\n  \"name\": \"Daily Supabase User Report\",\n  \"schedule\": {\n    \"kind\": \"cron\",\n    \"expr\": \"0 17 * * *\",\n    \"tz\": \"America/Los_Angeles\"\n  },\n  \"payload\": {\n    \"message\": \"Supabase daily report: Count new user signups in the last 24 hours, and list the 5 most recent signups with their name and email.\"\n  }\n}"
      },
      {
        "title": "Sample Report Output",
        "body": "📊 Supabase Daily Report\n\nNew signups (last 24h): 2\n\nLast 5 signups:\n• Jane Smith <jane@example.com> (google) - 2026-01-25\n• Alex Johnson <alex.j@company.com> (google) - 2026-01-25\n• Sam Wilson <sam@startup.io> (email) - 2026-01-24\n• Chris Lee <chris.lee@email.com> (google) - 2026-01-23\n• Jordan Taylor <jordan@acme.co> (github) - 2026-01-22"
      },
      {
        "title": "GraphQL API (pg_graphql)",
        "body": "⚠️ pg_graphql is disabled by default on new Supabase projects (as of late 2025).\n\nIf you need the GraphQL API:"
      },
      {
        "title": "Enable pg_graphql",
        "body": "-- Run in SQL Editor\ncreate extension if not exists pg_graphql;"
      },
      {
        "title": "Endpoint",
        "body": "https://<PROJECT_REF>.supabase.co/graphql/v1"
      },
      {
        "title": "Example Query",
        "body": "curl -X POST https://<PROJECT_REF>.supabase.co/graphql/v1 \\\n  -H 'apiKey: <API_KEY>' \\\n  -H 'Content-Type: application/json' \\\n  --data-raw '{\"query\": \"{ accountCollection(first: 1) { edges { node { id } } } }\"}'\n\nNote: GraphQL automatically reflects your database schema. Tables/views in public schema become queryable. See Supabase GraphQL docs for configuration."
      },
      {
        "title": "\"list-users requires a JWT service_role key\"",
        "body": "You're using an sb_secret_... key. Get the JWT key from:\nProject Settings → API → Legacy tab → service_role → Reveal"
      },
      {
        "title": "\"No API key found in request\"",
        "body": "The new sb_secret_ keys don't work with all endpoints. Switch to the JWT key."
      },
      {
        "title": "Keys not showing",
        "body": "Make sure you're on the \"Legacy anon, service_role API keys\" tab, not the new API keys tab."
      },
      {
        "title": "Security & Permissions",
        "body": "The service_role key has full admin access to your database. This skill requires it for the Auth Admin API (listing/counting users).\n\nWhat this skill does:\n\nMakes GET requests to your Supabase project's Auth Admin API\nReads user metadata (email, name, provider, signup date)\nAll requests stay between your machine and your Supabase instance\n\nWhat this skill does NOT do:\n\nDoes not write, modify, or delete any data\nDoes not send credentials to any third party\nDoes not access any endpoints outside your Supabase project\nCannot be invoked autonomously by the agent (disable-model-invocation: true)\n\nLeast-privilege alternative: Create a read-only Postgres role scoped to auth.users and use the Supabase SQL API instead of the Admin API.\n\nKey safety:\n\nNever commit keys to git\nDon't expose in client-side code\nOnly use on trusted machines\nConfig file is automatically set to mode 600 (owner read/write only)\nReview scripts/supabase.py before first use"
      }
    ],
    "body": "Supabase ⚡\n\nQuery your Supabase projects directly from chat.\n\nSetup\n1. Get your credentials\n\nGo to Supabase Dashboard → Project Settings → API\n\nYou'll see two tabs:\n\n\"Publishable and secret API keys\" - New format (limited functionality)\n\"Legacy anon, service_role API keys\" - JWT format (full functionality)\n\n⚠️ Use the Legacy JWT key for full access!\n\nThe service_role JWT key (starts with eyJ...) gives full admin access including:\n\nListing users with details\nCounting signups\nAccessing auth.users\n\nThe new sb_secret_... keys have limited functionality and can't access the Admin API.\n\n2. Find your keys\nGo to: Project Settings → API\nClick the \"Legacy anon, service_role API keys\" tab\nFind service_role (marked with red \"secret\" badge)\nClick Reveal and copy the eyJ... token\n\nDirect link: https://supabase.com/dashboard/project/YOUR_PROJECT_REF/settings/api\n\n3. Configure\n\nOption A: Interactive setup\n\npython3 {baseDir}/scripts/supabase.py auth\n\n\nOption B: Manual config Create ~/.supabase_config.json:\n\n{\n  \"url\": \"https://xxxxx.supabase.co\",\n  \"service_key\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\"\n}\n\n\nOption C: Environment variables\n\nexport SUPABASE_URL=\"https://xxxxx.supabase.co\"\nexport SUPABASE_SERVICE_KEY=\"eyJhbG...\"\n\nCommands\nUser Analytics\n# Count total users\npython3 {baseDir}/scripts/supabase.py users\n\n# Count new users (24h)\npython3 {baseDir}/scripts/supabase.py users-today\n\n# Count new users (7 days)  \npython3 {baseDir}/scripts/supabase.py users-week\n\n# List users with details (name, email, provider, signup date)\npython3 {baseDir}/scripts/supabase.py list-users\n\n# List new users from last 24h\npython3 {baseDir}/scripts/supabase.py list-users-today\n\n# Limit results\npython3 {baseDir}/scripts/supabase.py list-users --limit 5\n\nProject Info\n# Show project info and key type\npython3 {baseDir}/scripts/supabase.py info\n\n# List tables exposed via REST API\npython3 {baseDir}/scripts/supabase.py tables\n\nJSON Output\npython3 {baseDir}/scripts/supabase.py list-users --json\n\nKey Types Explained\nKey Type\tFormat\tUser Listing\tUser Count\tREST Tables\nJWT service_role\teyJ...\t✅ Yes\t✅ Yes\t✅ Yes\nNew secret\tsb_secret_...\t❌ No\t❌ No\t✅ Yes\n\nRecommendation: Always use the JWT service_role key for Clawdbot integration.\n\nDaily Reports\n\nSet up automated daily user reports via Clawdbot cron.\n\nExample: Daily 5 PM Report\n\nAsk Clawdbot:\n\nSend me a report of how many new users signed up at 5 PM every day, \nshow the last 5 signups with their names\n\n\nThis creates a cron job like:\n\n{\n  \"name\": \"Daily Supabase User Report\",\n  \"schedule\": {\n    \"kind\": \"cron\",\n    \"expr\": \"0 17 * * *\",\n    \"tz\": \"America/Los_Angeles\"\n  },\n  \"payload\": {\n    \"message\": \"Supabase daily report: Count new user signups in the last 24 hours, and list the 5 most recent signups with their name and email.\"\n  }\n}\n\nSample Report Output\n📊 Supabase Daily Report\n\nNew signups (last 24h): 2\n\nLast 5 signups:\n• Jane Smith <jane@example.com> (google) - 2026-01-25\n• Alex Johnson <alex.j@company.com> (google) - 2026-01-25\n• Sam Wilson <sam@startup.io> (email) - 2026-01-24\n• Chris Lee <chris.lee@email.com> (google) - 2026-01-23\n• Jordan Taylor <jordan@acme.co> (github) - 2026-01-22\n\nGraphQL API (pg_graphql)\n\n⚠️ pg_graphql is disabled by default on new Supabase projects (as of late 2025).\n\nIf you need the GraphQL API:\n\nEnable pg_graphql\n-- Run in SQL Editor\ncreate extension if not exists pg_graphql;\n\nEndpoint\nhttps://<PROJECT_REF>.supabase.co/graphql/v1\n\nExample Query\ncurl -X POST https://<PROJECT_REF>.supabase.co/graphql/v1 \\\n  -H 'apiKey: <API_KEY>' \\\n  -H 'Content-Type: application/json' \\\n  --data-raw '{\"query\": \"{ accountCollection(first: 1) { edges { node { id } } } }\"}'\n\n\nNote: GraphQL automatically reflects your database schema. Tables/views in public schema become queryable. See Supabase GraphQL docs for configuration.\n\nTroubleshooting\n\"list-users requires a JWT service_role key\"\n\nYou're using an sb_secret_... key. Get the JWT key from: Project Settings → API → Legacy tab → service_role → Reveal\n\n\"No API key found in request\"\n\nThe new sb_secret_ keys don't work with all endpoints. Switch to the JWT key.\n\nKeys not showing\n\nMake sure you're on the \"Legacy anon, service_role API keys\" tab, not the new API keys tab.\n\nSecurity & Permissions\n\nThe service_role key has full admin access to your database. This skill requires it for the Auth Admin API (listing/counting users).\n\nWhat this skill does:\n\nMakes GET requests to your Supabase project's Auth Admin API\nReads user metadata (email, name, provider, signup date)\nAll requests stay between your machine and your Supabase instance\n\nWhat this skill does NOT do:\n\nDoes not write, modify, or delete any data\nDoes not send credentials to any third party\nDoes not access any endpoints outside your Supabase project\nCannot be invoked autonomously by the agent (disable-model-invocation: true)\n\nLeast-privilege alternative: Create a read-only Postgres role scoped to auth.users and use the Supabase SQL API instead of the Admin API.\n\nKey safety:\n\nNever commit keys to git\nDon't expose in client-side code\nOnly use on trusted machines\nConfig file is automatically set to mode 600 (owner read/write only)\nReview scripts/supabase.py before first use"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/joelchance/supabase-query",
    "publisherUrl": "https://clawhub.ai/joelchance/supabase-query",
    "owner": "joelchance",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/supabase-query",
    "downloadUrl": "https://openagent3.xyz/downloads/supabase-query",
    "agentUrl": "https://openagent3.xyz/skills/supabase-query/agent",
    "manifestUrl": "https://openagent3.xyz/skills/supabase-query/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/supabase-query/agent.md"
  }
}