chrome-extension-publish
Skill2 starsChanged 8 months agoApache-2.0View on GitHub
Publish or update Chrome extensions on Chrome Web Store end-to-end. Use when preparing a first release, submitting an update, writing CWS form responses (permissions/remote code/data use/privacy), minimizing manifest permissions, packaging upload ZIPs, or addressing CWS review feedback/rejections.
- Installs packages
In this repository27 other files it gives its agents.
- ai-hotspot-collectorSkill
- article-multi-publisherSkill
- article-pipeline-skillSkill
- character-ip-risk-checkSkill
- chrome-extension-devSkill
- chrome-extension-e2e-automationSkill
- chrome-extension-social-promoSkill
- chrome-webstore-image-generatorSkill
- code-reviewSkill
- fund-querySkill
- github-trending-writerSkill
- lark-workflow-doc-to-slidesSkill
- notionSkill
- playwright-twitter-accessSkill
- post-to-xhsSkill
- rewrite-skillSkill
- small-capital-investingSkill
- technical-article-preflightSkill
- technical-article-reviewSkill
- technical-spoken-rewriteSkill
- tencent-dev-community-publisherSkill
- toutiao-publisherSkill
- url-readerSkill
- wechat-article-formatterSkill
- wechat-article-generatorSkill
- wechat-publisherSkill
- wechat-sticker-publisherSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
35 rules. About 0 are common, 23 are distinctive, and 12 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈23
Distinctive · estimate
This author's own choices. Worth a look.
12
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 8
Use this skill to ship Chrome extensions with minimal review risk and fast iteration.
- Distinctive: line 12
Run one command to execute the end-to-end release flow (baseline files, permission audit, packaging, assets, and bilingual listing draft):
- Very specific: line 22
If --inputs is not provided, the pipeline auto-captures screenshots first (Playwright).
- Very specific: line 23
Use --no-auto-capture-if-no-inputs to disable this default.
- Very specific: line 24
Use --headless only when you explicitly want headless capture mode.
- Distinctive: line 46
If item id is unknown, fallback to name-based auto-selection from dashboard:
- Distinctive: line 72
Keep only actually used permissions.
- Distinctive: line 73
Remove unused host permissions and broad match patterns.
- Very specific: line 74
Treat content_scripts.matches as host-match scope for CWS host-permission review.
- Distinctive: line 85
Before packaging, ensure release artifacts are git-ignored to avoid noisy commits.
- Very specific: line 86
Treat release/ as generated output only.
- Distinctive: line 95
Prefer deterministic packaging script:
- Distinctive: line 105
Follow current CWS image specs:
- Very specific: line 125
If icon inference is ambiguous (for example, screenshot-like inputs), generation fails fast.
- Very specific: line 127
Use --allow-icon-fallback only when you intentionally want legacy single-input fallback behavior.
- Very specific: line 128
Use the naming convention in references/cws-publish-templates.md.
- Distinctive: line 135
Write short summary and detailed description focused on user value.
- Distinctive: line 136
Always draft a Single Purpose statement for CWS (concise, concrete, feature-linked).
- Very specific: line 139
Ensure host match rationale exists for CWS when any host_permissions or content_scripts.matches is declared.
- Distinctive: line 140
Prefer automatic draft generation:
- Distinctive: line 156
Run a policy drift check against current code and manifest changes.
- Very specific: line 157
If behavior changed (permissions, host permissions, external endpoints, data storage keys, data flow, user-visible features), update policy …
- Distinctive: line 158
Keep CWS Data Use answers and privacy policy wording strictly consistent.
- Distinctive: line 159
If no behavior changed, explicitly record "policy update not required" with reason.
- Distinctive: line 163
Add review notes describing test path and why permissions are required.
- Distinctive: line 164
Keep a changelog entry for each submitted version.
- Very specific: line 174
Keep --headless off for login/2FA unless you already have a valid persisted session.
- Distinctive: line 182
Do not declare user data collection when extension only fetches public market data and stores cache locally without account identifiers.
- Distinctive: line 185
Update the privacy policy when any of the following changes:
- Distinctive: line 191
If none of the above changed, keep existing policy text but still refresh the release note with an explicit "no policy change" decision.
- Distinctive: line 200
Must describe one core purpose in one short paragraph.
- Distinctive: line 201
Must map major features back to that same single purpose.
- Distinctive: line 202
Must explicitly state no unrelated functionality.
- Very specific: line 205
Default output is bilingual (ZH + EN) for all CWS text content.
- Distinctive: line 218
When assisting a publish task, return:
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Chrome Extension Publish
Use this skill to ship Chrome extensions with minimal review risk and fast iteration.
Full Pipeline (Recommended)
Run one command to execute the end-to-end release flow (baseline files, permission audit, packaging, assets, and bilingual listing draft):
python3 scripts/run_full_release_pipeline.py \
--root /abs/path/to/extension \
--icon-source /abs/path/to/icon.png \
--include-marqueeBehavior note:
- If
--inputsis not provided, the pipeline auto-captures screenshots first (Playwright). - Use
--no-auto-capture-if-no-inputsto disable this default. - Use
--headlessonly when you explicitly want headless capture mode.
Outputs:
release/chrome-webstore.ziprelease/permission-audit.mdrelease/store-assets/*release/cws-listing.zh-en.mdrelease/full-release-summary.mdrelease/cws-submit-proof.png(only when--submit-playwrightis enabled)
Optional submit automation (Playwright, human-in-the-loop safe default):
python3 scripts/run_full_release_pipeline.py \
--root /abs/path/to/extension \
--icon-source /abs/path/to/icon.png \
--include-marquee \
--submit-playwright \
--submit-item-id <CWS_ITEM_ID> \
--submit-locale zhIf item id is unknown, fallback to name-based auto-selection from dashboard:
python3 scripts/run_full_release_pipeline.py \
--root /abs/path/to/extension \
--submit-playwright \
--submit-item-name "Image Compressor"Execute final submission click only when explicitly requested:
python3 scripts/run_full_release_pipeline.py \
--root /abs/path/to/extension \
--submit-playwright \
--submit-item-id <CWS_ITEM_ID> \
--submit-for-reviewWorkflow
- Confirm release intent.
- Confirm whether this is first publish or update.
- Confirm target version and primary change summary.
- Audit
manifest.jsonfor least privilege.
- Keep only actually used permissions.
- Remove unused host permissions and broad match patterns.
- Treat
content_scripts.matchesas host-match scope for CWS host-permission review. - Generate permission audit evidence report:
python3 scripts/audit_permissions.py \
--root . \
--out release/permission-audit.md- Build upload ZIP from source files only.
- Include:
manifest.json, runtime code, icons, needed assets. - Exclude:
.git, screenshots, local notes, test artifacts. - Before packaging, ensure release artifacts are git-ignored to avoid noisy commits.
- Treat
release/as generated output only. Do not keep canonical docs only inrelease/if that folder is ignored. - Canonical privacy policy file must be root-level
privacy-policy.md(fixed filename). - Generate baseline files before packaging:
python3 scripts/prepare_publish_basics.py --root .- This command ensures:
privacy-policy.mdexists at project root..gitignoreincludesrelease/,__pycache__/,*.py[cod].
- Prefer deterministic packaging script:
python3 scripts/package_extension.py \
--root . \
--mode manifest \
--out release/chrome-webstore.zip--mode manifestnow includes manifest-declared files plus transitive local dependencies (for example popupscript src,link href, and ES module imports).
- Prepare store listing graphic assets (required before submit).
- Follow current CWS image specs:
- Store icon:
128x128(PNG). - Screenshots: at least 1, up to 5, use
1280x800(preferred) or640x400. - Small promo tile:
440x280. - Marquee promo tile:
1400x560(optional).
- Store icon:
- Generate assets from one or more source images:
python3 scripts/generate_store_assets.py \
--inputs /abs/path/source-1.png /abs/path/source-2.jpg \
--icon-source /abs/path/icon.png \
--root release/store-assets \
--include-marquee- In
run_full_release_pipeline.py, when--inputsis omitted, screenshot capture is triggered automatically before asset generation. - For manual capture or debugging, use
$chrome-webstore-image-generator(scripts/capture_extension_screenshots.py). Preinstall dependency once:
python3 -m pip install playwright
python3 -m playwright install chromium- The generator auto-picks an icon source from icon/logo-like names or near-square images.
- If icon inference is ambiguous (for example, screenshot-like inputs), generation fails fast. Set
--icon-sourceexplicitly to avoid screenshot-derived icons. - Screenshot files append by default (keep existing screenshots and continue numbering). Use
--overwrite-screenshotswhen you need deterministic replacement fromscreenshot-1-*. - Use
--allow-icon-fallbackonly when you intentionally want legacy single-input fallback behavior. - Use the naming convention in
references/cws-publish-templates.md. - Validate asset dimensions/count:
python3 scripts/validate_store_assets.py --root release/store-assets- Prepare store listing content.
- Write short summary and detailed description focused on user value.
- Always draft a Single Purpose statement for CWS (concise, concrete, feature-linked).
- State non-advisory nature for finance-related extensions.
- Produce paired Chinese and English versions for all listing text blocks (short summary, long description, single purpose, permissions rationale, remote code answer, data use disclosure, reviewer notes), unless user explicitly requests single-language output.
- Ensure host match rationale exists for CWS when any
host_permissionsorcontent_scripts.matchesis declared. - Prefer automatic draft generation:
python3 scripts/generate_publish_docs.py \
--root . \
--out release/cws-listing.zh-en.md \
--privacy-policy privacy-policy.md- For custom wording, load
references/cws-publish-templates.md.
- Fill sensitive CWS forms correctly.
- Permissions rationale: explain each permission with concrete feature linkage.
- Remote code: answer "No" unless extension executes remote JS/Wasm/eval/new Function.
- Data use: if no personal data collection, select none and keep policy consistent.
- Privacy policy: provide public URL and ensure wording matches actual behavior.
- Privacy policy file location: always
privacy-policy.mdat extension root, notrelease/privacy-policy.md. - Privacy policy maintenance on every release/update:
- Run a policy drift check against current code and manifest changes.
- If behavior changed (permissions, host permissions, external endpoints, data storage keys, data flow, user-visible features), update policy text and
Last updateddate. - Keep CWS Data Use answers and privacy policy wording strictly consistent.
- If no behavior changed, explicitly record "policy update not required" with reason.
- Submit and track.
- Upload ZIP.
- Add review notes describing test path and why permissions are required.
- Keep a changelog entry for each submitted version.
- For dashboard automation, use Playwright submit helper:
python3 scripts/submit_cws_playwright.py \
--root . \
--item-id <CWS_ITEM_ID> \
--locale zh \
--privacy-policy-url https://example.com/privacy- Safe default: helper does not click final submit unless
--submit-for-reviewis passed. - Keep
--headlessoff for login/2FA unless you already have a valid persisted session.
Decision Rules
Remote Code
Answer "No remote code" when all executable JS/Wasm is packaged in extension files and network requests are data-only (JSON/HTML/text).
Data Disclosure
Do not declare user data collection when extension only fetches public market data and stores cache locally without account identifiers.
Privacy Policy Update Trigger
Update the privacy policy when any of the following changes:
manifest.jsonpermissions or host permissions.- New or removed external data endpoints.
- New local storage keys/categories or changed retention/usage.
- New user data categories, analytics, auth/account linkage, or data sharing behavior.
- New feature flows that change what data is processed. If none of the above changed, keep existing policy text but still refresh the release note with an explicit "no policy change" decision.
Permission Rationale Quality Bar
For every permission:
- Mention exact feature.
- Mention scope and limits.
- Mention no personal data transfer when applicable.
Single Purpose Quality Bar
- Must describe one core purpose in one short paragraph.
- Must map major features back to that same single purpose.
- Must explicitly state no unrelated functionality.
Language Completeness
- Default output is bilingual (
ZH+EN) for all CWS text content. - Chinese and English versions must be semantically aligned, with no policy or feature mismatch.
Rejection Triage
When CWS rejects:
- Extract the exact rejection category and quote.
- Map it to manifest fields and code paths.
- Propose smallest fix first (remove permission, tighten host, correct image asset size, adjust wording).
- Resubmit with explicit reviewer note on what changed.
Output Contract
When assisting a publish task, return:
- Release readiness checklist (pass/fail).
- Required manifest changes (if any).
- Graphic asset checklist (required/optional, size, status).
- Permission audit summary with report path (
release/permission-audit.md) and required fixes. - Privacy policy decision for this release (
update required/not required) with concrete reason. - Ready-to-paste bilingual (
ZH/EN) CWS text blocks (short summary, long description, single purpose, permissions, remote code, data use, review notes) and canonical privacy-policy file path (privacy-policy.mdat extension root). - Final packaging command and ZIP path.
- Full-pipeline command and summary path (
release/full-release-summary.md).
Templates
Single Purpose (ZH) Template
该扩展的单一用途是帮助用户管理和维护浏览器书签。它会扫描书签链接状态、识别无效或重复书签,并提供按域名整理、重试检测与删除无效项等能力。以上功能均服务于“书签清理与组织”这一唯一目的,不包含与书签管理无关的功能。
Single Purpose (EN) Template
The extension has a single purpose: helping users maintain and organize browser bookmarks. It checks bookmark link health, identifies invalid or duplicate bookmarks, and provides domain-based organization, retry checks, and invalid-bookmark removal. All features support this single bookmark-management purpose and do not provide unrelated functionality.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

