From web-forge
Put any set of hostnames — including bare *.workers.dev Workers, no custom domain needed — behind a Cloudflare Access login wall (GitHub SSO and/or emailed one-time PIN for non-technical users) from a declarative JSON spec, idempotently. Handles the Zero Trust org, identity providers, per-app sessions, email allow-lists, and service tokens for CLI/CI clients. Use when capability URLs / unguessable slugs are no longer enough and a team needs real identity on private mini-sites. Triggers: "protect this site with login", "GitHub login on the site", "email code login", "Cloudflare Access", "put the workers behind auth", "secure the mini-site".
How this skill is triggered — by the user, by Claude, or both
Slash command
/web-forge:cf-access-wallThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Zero Trust free tier covers 50 seats; Access attaches **directly to `*.workers.dev` hostnames**
Zero Trust free tier covers 50 seats; Access attaches directly to *.workers.dev hostnames
(verified live 2026-07-23 — no zone, no domain purchase). One Access app offers BOTH login paths
on a single screen: GitHub for developers, emailed 6-digit code for non-technical staff
(no account creation). Enforcement is real: unauthenticated requests 302 to the team login page.
Self-Evolving Skill: Cloudflare's API/dashboard drift → fix scripts + the dashboard-forge Vendor Quirks log immediately on real breakage.
<project>/…/access-spec.json against
schema/access-spec.schema.json. The spec lives in the
PROJECT repo (it carries team emails); this skill stays agnostic.Access, Access: Identity Providers, Access: Organizations,
Access: Service Tokens; DOM-extract → vault set --stdin <scope> cf.api_token.
Account-token gotcha: verify with /accounts/{id}/tokens/verify (the /user/… endpoint
always rejects account-owned tokens).node scripts/gh-oauth-app.mjs --name <app> --callback https://<team>.cloudflareaccess.com/cdn-cgi/access/callback --expect-account <owner> --vault-scope <scope>
The --expect-account identity preflight is mandatory doctrine (wrong-owner incident,
2026-07-23). Create the app right after a fresh login to ride the sudo grace window.node scripts/setup-access.mjs <spec.json> — idempotent (GET-before-POST),
safe to re-run after every spec edit; pre-existing orgs/idps/apps are adopted, not overwritten.curl -s -o /dev/null -w '%{http_code}' https://<host>/ → expect
302; then a service-token request → expect 200:
curl -H "CF-Access-Client-Id: $ID" -H "CF-Access-Client-Secret: $SECRET" …res.redirected || !res.ok → don't cache) or the login page poisons the app shell. Bump the
SW cache name when adding the wall (purges anything cached pre-guard).non_identity policy; send
CF-Access-Client-Id/Secret headers IN ADDITION to any app-level auth.~/459ecs/curve-dental/scripts/access-bootstrap/ + that repo's compliance README §D10
(2026-07-23: ptsang org, two workers.dev apps, OTP+GitHub, curve-cli service token).eon.ccmax.uk, April 2026): GitHub-SSO-only variant on a custom domain
(ccmax-monitor repo: production/cloudflare_access_jwt_verifier.py for server-side JWT
verification when the origin must double-check).npx claudepluginhub terrylica/cc-skills --plugin web-forgeCreates, edits, and verifies skills using a test-driven development approach with pressure scenarios and subagents.