
If you've ever manually uploaded a Chrome extension zip through the Web Store dashboard after every release, this skill walks you through automating the entire thing. It covers the full OAuth setup dance in Google Cloud Console, generating a refresh token via the OAuth Playground, wiring secrets into GitHub Actions (with optional `gh` CLI automation), and building a version-aware CI workflow that only publishes when your manifest version changes. The step-by-step structure is methodical, almost to a fault, but that's exactly what you want when dealing with Google APIs and credentials. The included status checker script is a nice touch for confirming whether your upload is stuck in review or already live.
$ npx -y skills add brianlovin/claude-config --skill chrome-webstore-release-blueprint --agent claude-codeInstalls into .claude/skills of the current project.
Use this skill as a hands-on setup guide. The agent should lead the user step-by-step, ask for confirmations, and only automate the parts that can be done locally/in CI.
PUBLISHED, PENDING_REVIEW, etc.).gh is available, offer secret upload automation; if not, provide manual fallback.Collect these inputs:
main, tags, or manual dispatch).env, .env.local, etc.)Ask explicitly:
gh?"Tell user to open:
https://console.cloud.google.com/apis/library/chromewebstore.googleapis.comUser actions:
Enable for Chrome Web Store API.Agent prompt example:
Tell user to open one of:
https://console.cloud.google.com/apis/credentials/consentUser actions:
External user type (for non-Workspace internal apps).Agent guidance:
Tell user to open:
https://console.cloud.google.com/apis/credentialsUser actions:
Create Credentials -> OAuth client ID.Web application.https://developers.google.com/oauthplaygroundCapture values:
CWS_CLIENT_IDCWS_CLIENT_SECRETAgent prompt example:
CWS_CLIENT_ID and CWS_CLIENT_SECRET when ready (I will treat them as secrets)."Tell user to open:
https://developers.google.com/oauthplayground/User actions:
Use your own OAuth credentials.CWS_CLIENT_ID and CWS_CLIENT_SECRET.https://www.googleapis.com/auth/chromewebstoreAuthorize APIs.Exchange authorization code for tokens.Capture value:
CWS_REFRESH_TOKENAgent prompt example:
CWS_REFRESH_TOKEN now. I will only place it in local secret storage/CI secrets."Capture:
CWS_EXTENSION_ID (the extension item ID from store/developer listing URL)CWS_PUBLISHER_ID (developer/publisher ID from Chrome Web Store developer account context)Agent instruction:
Do not proceed until all five exist:
CWS_CLIENT_IDCWS_CLIENT_SECRETCWS_REFRESH_TOKENCWS_PUBLISHER_IDCWS_EXTENSION_IDCreate a local template file (no real values committed):
CWS_CLIENT_ID=
CWS_CLIENT_SECRET=
CWS_REFRESH_TOKEN=
CWS_PUBLISHER_ID=
CWS_EXTENSION_ID=
Ensure real secret file path is gitignored.
If using GitHub Actions, ask user if gh automation is desired.
If yes, verify:
gh --version
gh auth status
If gh auth is missing, tell user to run:
gh auth loginThen implement a helper script that:
--dry-rungh secret set ... --repo ...If user declines gh, provide manual secret entry checklist for repository settings.
Design the CI workflow around this logic:
POST https://oauth2.googleapis.com/tokenGET https://chromewebstore.googleapis.com/v2/publishers/<publisherId>/items/<extensionId>:fetchStatuspublishedItemRevisionStatus.distributionChannels[0].crxVersionPOST https://chromewebstore.googleapis.com/upload/v2/publishers/<publisherId>/items/<extensionId>:uploadPOST https://chromewebstore.googleapis.com/v2/publishers/<publisherId>/items/<extensionId>:publishTreat these publish states as successful submission:
PENDING_REVIEWPUBLISHEDPUBLISHED_TO_TESTERSSTAGEDCreate a script dedicated to "what is the latest submission state?".
Required behavior:
--env-file)--manifest for local version comparison--jsonfetchStatusitemIdlocalVersionpublishedVersionpublishedStatesubmittedVersionsubmittedStateupToDatependingReviewHelpful checks to include:
--json is not usedRun this with the user:
PENDING_REVIEW first in many casesinvalid_grant:403 from CWS endpoint:https://developer.chrome.com/docs/webstore/using-apihttps://developer.chrome.com/docs/webstore/publishhttps://developers.google.com/oauthplayground/https://console.cloud.google.com/apis/library/chromewebstore.googleapis.comhttps://console.cloud.google.com/apis/credentialsSponsors