Source profileQuality 94/100Review permissions

terrylica/cc-skills/plugins/devops-tools/skills/cloudflare-workers-publish/SKILL.md

cloudflare-workers-publish

Deploy static HTML files to Cloudflare Workers with 1Password credential management.

Source repository stars
62
Declared platforms
0
Static risk flags
3
Last source update
2026-08-24
Source checked
2026-08-25

Decision brief

What it does: where it fits

Deploy static HTML files (Bokeh charts, dashboards, reports) to Cloudflare Workers with Static Assets, using 1Password for credential management.

Best for

  • Publishing HTML files to a public URL (too large for GitHub)
  • Setting up a new Cloudflare Workers static site
  • Troubleshooting a failed Cloudflare deploy

Not for

  • Full details with code examples: references/anti-patterns.md

Compatibility matrix

Platform support, with evidence labels

PlatformStatusEvidenceWhat to check
CodexNot declaredNo explicit evidencePortability before use
Claude CodeNot declaredNo explicit evidencePortability before use
CursorNot declaredNo explicit evidencePortability before use
Gemini CLINot declaredNo explicit evidencePortability before use
Open the compatibility checker

Installation

Inspect first. Install second.

The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.

Source-detected install commandSource
npx skills add https://github.com/terrylica/cc-skills --skill "plugins/devops-tools/skills/cloudflare-workers-publish"
Safe inspection promptEditorial

Inspect the Agent Skill "cloudflare-workers-publish" from https://github.com/terrylica/cc-skills/blob/a5f847b22ee5afa35677e446973a903d098cd1d4/plugins/devops-tools/skills/cloudflare-workers-publish/SKILL.md at commit a5f847b22ee5afa35677e446973a903d098cd1d4. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.

Workflow

What the source asks the agent to do

  1. 01

    Template A - New Static Site (First-Time Setup)

    Review the “Template A - New Static Site (First-Time Setup)” section in the pinned source before continuing.

    Review and apply the “Template A - New Static Site (First-Time Setup)” source section.
  2. 02

    Workflow: First-Time Setup

    1. Go to 2. Click Create Token Custom token 3. Set permissions: Account Workers Scripts Edit (CFW-11) 4. Account Resources: Include your account 5. Copy the token (shown only once)

    Go toClick Create Token Custom tokenSet permissions: Account Workers Scripts Edit (CFW-11)
  3. 03

    Phase 1: Create Cloudflare API Token

    1. Go to 2. Click Create Token Custom token 3. Set permissions: Account Workers Scripts Edit (CFW-11) 4. Account Resources: Include your account 5. Copy the token (shown only once)

    Go toClick Create Token Custom tokenSet permissions: Account Workers Scripts Edit (CFW-11)
  4. 04

    Phase 2: Provision 1Password Credentials

    CRITICAL (CFW-02): 1Password service accounts can only READ items. They CANNOT CREATE new items. Create the item manually first.

    CRITICAL (CFW-02): 1Password service accounts can only READ items. They CANNOT CREATE new items. Create the item manually first.See 1Password setup guide for step-by-step instructions.After provisioning, the item should have:
  5. 05

    Phase 3: Create wrangler.toml

    See wrangler setup guide.

    See wrangler setup guide.

Permission review

Static risk signals and limitations

Runs scripts

medium · line 44

The documentation asks the agent to run terminal commands or scripts.

npx wrangler deploy

Network access

medium · line 46

The documentation includes network, browsing, or remote request actions.

https://{name}.{slug}.workers.dev/

Writes files

medium · line 60

The documentation asks the agent to create, modify, or delete local files.

[Execute] Create publish directory with wrangler.toml (3 fields only)

Runs scripts

medium · line 61

The documentation asks the agent to run terminal commands or scripts.

[Execute] Create deploy script from skill template (parameterize 4 vars)

Network access

medium · line 66

The documentation includes network, browsing, or remote request actions.

[Verify] Run first deploy and verify URL in browser (NOT curl)

Evidence record

Why each signal appears

EvidenceSourceComputedTestedEditorial
SignalValueEvidence typeMeaning
Quality score94/100ComputedDocumentation, specificity, maintenance, and trust rules
Repository stars62SourceRepository attention, not individual Skill quality
Compatibility0 platformsSourceDeclared in the catalog source record
Usage guideautomated source guideEditorialGenerated or reviewed according to the visible evidence level

Pinned source

Provenance and original SKILL.md

Repository
terrylica/cc-skills
Skill path
plugins/devops-tools/skills/cloudflare-workers-publish/SKILL.md
Commit
a5f847b22ee5afa35677e446973a903d098cd1d4
License
MIT
Collected
2026-08-25
Default branch
main
View the original SKILL.md

Cloudflare Workers Publish

Deploy static HTML files (Bokeh charts, dashboards, reports) to Cloudflare Workers with Static Assets, using 1Password for credential management.

Scope: Static-only deployments on workers.dev. No dynamic Workers, no R2 object storage.

Prerequisite: 1Password CLI (brew install 1password-cli) + Node.js (npx wrangler)


Self-Evolving Skill: This skill improves through use. If instructions are wrong, parameters drifted, or a workaround was needed — fix this file immediately, don't defer. Only update for real, reproducible issues.

When to Use This Skill

  • Publishing HTML files to a public URL (too large for GitHub)
  • Setting up a new Cloudflare Workers static site
  • Troubleshooting a failed Cloudflare deploy
  • Rotating Cloudflare API tokens in 1Password

Do NOT use for: Dynamic Workers (JavaScript/TypeScript logic), Cloudflare Pages (deprecated April 2025 - CFW-01), R2 object storage, or custom domains (advanced setup not covered).


Architecture

Local project/
├── results/published/              # Deploy root (contains wrangler.toml)
│   ├── wrangler.toml               # Workers config (name + assets)
│   ├── index.html                  # Auto-generated directory listing
│   └── gen800/                     # Subdirectories with HTML files
│       └── XRPUSDT_750/
│           └── equity_plot.html    # 13MB Bokeh chart
└── scripts/
    └── publish_findings.sh         # Deploy script (3 phases)

Credential flow:

1Password (Claude Automation vault)
   ├── account_id (TEXT)      →  CLOUDFLARE_ACCOUNT_ID env var
   └── credential (CONCEALED) →  CLOUDFLARE_API_TOKEN env var
                                       ↓
                                 npx wrangler deploy
                                       ↓
                                 https://{name}.{slug}.workers.dev/

TodoWrite Task Templates

Template A - New Static Site (First-Time Setup)

1. [Preflight] Verify Node.js and 1Password CLI installed
2. [Preflight] Create Cloudflare API token (Workers Scripts Edit permission)
3. [Execute] Pre-provision 1Password item in Claude Automation vault (biometric)
4. [Execute] Store token + account ID in 1Password item fields
5. [Execute] Create publish directory with wrangler.toml (3 fields only)
6. [Execute] Create deploy script from skill template (parameterize 4 vars)
7. [Execute] Create mise task wrapper in tasks/publish.toml
8. [Execute] Add .wrangler/ to .gitignore
9. [Execute] Add LFS tracking for large HTML files in .gitattributes
10. [Verify] Enable workers.dev subdomain in Cloudflare dashboard
11. [Verify] Run first deploy and verify URL in browser (NOT curl)
12. [Verify] Document the workers.dev URL in project docs

Template B - Add Files to Existing Published Site

1. [Preflight] Verify files are real content, not LFS pointers (head -1)
2. [Execute] Copy HTML files to published/{generation}/{symbol_threshold}/
3. [Execute] Run deploy script (index.html auto-regenerates)
4. [Verify] Verify new files appear at workers.dev URL in browser

Template C - New Worker (New Subdomain/Project)

1. [Preflight] Choose worker name ({name}.{slug}.workers.dev)
2. [Execute] Create 1Password item OR reuse existing Cloudflare credentials
3. [Execute] Create wrangler.toml with chosen name and today's date
4. [Execute] Create parameterized deploy script from skill template
5. [Execute] Create mise task wrapper
6. [Verify] Deploy and discover actual workers.dev URL via wrangler output

Template D - Rotate Cloudflare API Token

1. [Execute] Create new API token in Cloudflare dashboard (Workers Scripts Edit)
2. [Execute] Update 1Password item credential field (biometric required)
3. [Verify] Run deploy script to verify new token works
4. [Execute] Revoke old token in Cloudflare dashboard

Template E - Troubleshoot Failed Deploy

1. Is wrangler.toml in current directory? (CFW-10)
2. Are credentials populated? Print first 8 chars of account ID
3. Is --reveal present for CONCEALED fields? (CFW-03)
4. Is workers.dev subdomain registered in CF dashboard? (CFW-07)
5. Does token have Workers Scripts Edit permission? (CFW-11)
6. Are HTML files real content or LFS pointers? head -1 file (CFW-12)
7. SSL handshake error? Verify in browser, not curl (CFW-08)
8. Is npx wrangler installed? npx wrangler --version

Workflow: First-Time Setup

Phase 1: Create Cloudflare API Token

  1. Go to https://dash.cloudflare.com/profile/api-tokens
  2. Click Create Token > Custom token
  3. Set permissions: Account > Workers Scripts > Edit (CFW-11)
  4. Account Resources: Include > your account
  5. Copy the token (shown only once)

Phase 2: Provision 1Password Credentials

CRITICAL (CFW-02): 1Password service accounts can only READ items. They CANNOT CREATE new items. Create the item manually first.

See 1Password setup guide for step-by-step instructions.

After provisioning, the item should have:

FieldType--revealContent
account_idTEXTNoCloudflare acct ID
credentialCONCEALEDYESAPI token

Phase 3: Create wrangler.toml

See wrangler setup guide.

# Minimal Workers Static Assets config (CFW-09)
name = "my-project-name"
compatibility_date = "2026-02-18"

[assets]
directory = "."

Phase 4: Create Deploy Script

Copy the bundled template and edit the 4 config variables:

cp "$(skill-path)/scripts/publish_static.sh" scripts/publish_myproject.sh
# Edit: PUBLISH_DIR, OP_ITEM_ID, SITE_TITLE, PROJECT_URL

Or reference the working implementation: rangebar-patterns/scripts/publish_findings.sh

Phase 5: Create mise Task

# tasks/publish.toml (CFW-13: bash in .sh file, not inline TOML)
["publish:site"]
description = "Deploy published files to Cloudflare Workers (static)"
run = "bash scripts/publish_myproject.sh"

Add to .mise.toml [task_config] includes:

[task_config]
includes = [
    "tasks/publish.toml",
]

Phase 6: Git Hygiene

.gitignore:

# Wrangler temp files (Cloudflare Workers deploy)
.wrangler/
results/published/.wrangler/

.gitattributes (for large HTML files):

results/published/**/*.html filter=lfs diff=lfs merge=lfs -text

Phase 7: Enable workers.dev Subdomain (CFW-07)

First-time Cloudflare accounts must enable the workers.dev route:

  1. Go to https://dash.cloudflare.com > Workers & Pages
  2. Enable workers.dev subdomain

The subdomain is NOT predictable (CFW-06). Discover yours after deploy:

npx wrangler whoami

Phase 8: Deploy and Verify

mise run publish:site

Verify in BROWSER, not curl (CFW-08). macOS LibreSSL can fail TLS handshake with Cloudflare but browsers handle it fine.


Anti-Patterns Summary

Full details with code examples: references/anti-patterns.md

IDSeverityGotchaFix
CFW-01HIGHCloudflare Pages deprecated (April 2025)Use Workers with Static Assets
CFW-02HIGH1P service account creating itemsPre-provision via biometric/web UI
CFW-03HIGHMissing --reveal for CONCEALED fieldsAlways pass --reveal for API tokens
CFW-04MEDIUMSC2155 export VAR=$(cmd)Split: VAR=$(cmd) then export VAR
CFW-05LOWBash 4+ ${var^^} on macOSUse tr '[:lower:]' '[:upper:]'
CFW-06MEDIUMAssuming workers.dev URL formatRun npx wrangler whoami to discover slug
CFW-07HIGHworkers.dev subdomain not registeredEnable in Cloudflare dashboard first
CFW-08LOWcurl SSL/TLS handshake failure on macOSVerify in browser instead
CFW-09MEDIUMOvercomplicating wrangler.tomlOnly name, compatibility_date, [assets]
CFW-10HIGHRunning wrangler from wrong directoryAlways cd to directory with wrangler.toml
CFW-11MEDIUMExcessive token permissionsWorkers Scripts Edit (Account) only
CFW-12HIGHDeploying LFS pointers instead of filesRun git lfs pull before deploy
CFW-13MEDIUMTera template conflict in mise TOMLComplex bash in standalone .sh files
CFW-14MEDIUMPipe subshell data loss in while-readUse < <(find ...) process substitution
CFW-15LOWNo directory listing pageAuto-generate index.html before each deploy
CFW-16HIGHAsset > 25 MiB → Asset too large deploy errorWorkers Static Assets hard-caps each file at 25 MiB. Host large ZIPs/binaries off a large-file host (R2, GitHub Release, own server); keep only ≤25 MiB files on Workers. See large files & ZIP delivery
CFW-17LOWWant a bulk-download ZIP, but it exceeds the capDownscale the ZIP tier to fit (e.g. heic-to-jpeg-bundle --zip-cap-mib 25), or split hosts: gallery + small ZIP on Workers, full-res ZIP on R2

Large files & ZIP delivery (downloads, not just pages)

This skill also covers serving downloadable files (a ZIP bundle, a dataset) from Workers — within the 25 MiB/file cap — and the password-on-the-gateway pattern for gating an otherwise-unlisted download. Full guide: references/large-files-and-zip-delivery.md.

Quick rules:

  • ≤ 25 MiB → Workers is fine. A small/downscaled ZIP can sit beside the gallery and be linked directly. > 25 MiB is a hard deploy error (CFW-16) — use R2 / a GitHub Release / your own host for those.
  • Password-gated, unlisted download. Encrypt the ZIP (ZipCrypto, so Windows/7-Zip/macOS open it natively) and put the password only on the gateway you share (a gist, an email), never on the Workers page. Finding the bare ZIP URL then isn't enough to open it. The heic-to-jpeg-bundle skill produces exactly this kind of capped, optionally-encrypted ZIP.

Reference Implementation

The working production deployment lives in rangebar-patterns:

FilePurpose
results/published/wrangler.tomlMinimal Workers config
scripts/publish_findings.sh3-phase deploy script
tasks/publish.tomlmise task wrapper
.gitignore (.wrangler/)Ignore wrangler temp files
.gitattributesLFS tracking for HTML

Live URL: https://rangebar-findings.terry-301.workers.dev/


Post-Change Checklist

After modifying this skill:

  1. Anti-patterns table matches references/anti-patterns.md
  2. All bash examples use set -euo pipefail
  3. No hardcoded 1Password item IDs (parameterized)
  4. No hardcoded workers.dev slugs (discovered at runtime)
  5. Template script passes bash -n syntax check
  6. All internal links use relative paths (./references/...)
  7. Link validator passes
  8. Skill validator passes
  9. Append changes to references/evolution-log.md

Troubleshooting

IssueCauseSolution
op item get returns maskedMissing --reveal flag (CFW-03)Add --reveal for CONCEALED fields
op item create failsService account can't create (CFW-02)Use biometric op or web UI to create item first
wrangler: config not foundNot in correct directory (CFW-10)cd to directory containing wrangler.toml before deploy
SSL handshake failuremacOS LibreSSL (CFW-08)Verify in browser; ignore curl errors
403 on workers.dev URLSubdomain not enabled (CFW-07)Enable in Cloudflare dashboard > Workers & Pages
Deploy succeeds, files missingLFS pointers deployed (CFW-12)Run git lfs pull before deploy
${var^^} syntax errorBash 3 on macOS (CFW-05)Use tr '[:lower:]' '[:upper:]'
mise TOML parse errorTera template conflict (CFW-13)Move complex bash to standalone .sh file
Empty index.htmlNo gen*/*.html files foundCheck file paths match find . -path './gen*/*.html' pattern
Token permission deniedWrong token scope (CFW-11)Recreate with Account > Workers Scripts > Edit permission

Post-Execution Reflection

After this skill completes, reflect before closing the task:

  1. Locate yourself. — Find this SKILL.md's canonical path (Glob for this skill's name) before editing. All corrections target THIS file and its sibling references/ — never other documentation.
  2. What failed? — Fix the instruction that caused it. If it could recur, add it as an anti-pattern.
  3. What worked better than expected? — Promote it to recommended practice. Document why.
  4. What drifted? — Any script, reference, or external dependency that no longer matches reality gets fixed now.
  5. Log it. — Every change gets an evolution-log entry with trigger, fix, and evidence.

Do NOT defer. The next invocation inherits whatever you leave behind

Frequently asked questions

What to verify before installation and use

What does the cloudflare-workers-publish source document cover?

Deploy static HTML files (Bokeh charts, dashboards, reports) to Cloudflare Workers with Static Assets, using 1Password for credential management.

How do I install cloudflare-workers-publish?

The source record exposes this install command: npx skills add https://github.com/terrylica/cc-skills --skill "plugins/devops-tools/skills/cloudflare-workers-publish". Inspect the command and pinned source before running it.

Which permission-related actions were detected?

Static rules flagged exec-script, network, write-files in the source; the page lists the matching lines and excerpts.

Alternatives

Compare before choosing