Skill · em Construir interface
turnstile-spin
Set up, repair, or migrate to Cloudflare Turnstile bot verification in an existing frontend and backend, including server-side Siteverify.
Procedência
- Origem: cloudflare/skills
- Caminho:
skills/turnstile-spin - Versão fixada:
6dc7604903127485e7e4cb26314651ebd4a4df19 - Licença: Apache-2.0
- Espelhado em 25/09/2026
- 65,3 mil instalações no skills.sh (lido em 25/09/2026)
Antes de instalar
13 arquivos · 88,1 KB · inclui 4 scripts que executam: scripts/auth-probe.sh, scripts/persist-skill.sh, scripts/validate.sh, scripts/widget-create.sh
Instalar na sua CLI
O comando baixa a versão fixada (commit 6dc7604) direto da origem, para a pasta que a CLI lê. Precisa de curl (macOS e Linux); no Windows não há comando, porque o Rook Labs é para macOS.
Claude Code
Neste projeto: instala em .claude/skills/turnstile-spin/.
d=".claude/skills/turnstile-spin" u="https://raw.githubusercontent.com/cloudflare/skills/6dc7604903127485e7e4cb26314651ebd4a4df19/skills/turnstile-spin" curl -fsSL --create-dirs \ -o "$d/SKILL.md" "$u/SKILL.md" \ -o "$d/README.md" "$u/README.md" \ -o "$d/references/astro.md" "$u/references/astro.md" \ -o "$d/references/hugo.md" "$u/references/hugo.md" \ -o "$d/references/nextjs-app.md" "$u/references/nextjs-app.md" \ -o "$d/references/nextjs-pages.md" "$u/references/nextjs-pages.md" \ -o "$d/references/sveltekit.md" "$u/references/sveltekit.md" \ -o "$d/references/vanilla-html.md" "$u/references/vanilla-html.md" \ -o "$d/scripts/auth-probe.sh" "$u/scripts/auth-probe.sh" \ -o "$d/scripts/persist-skill.sh" "$u/scripts/persist-skill.sh" \ -o "$d/scripts/validate.sh" "$u/scripts/validate.sh" \ -o "$d/scripts/widget-create.sh" "$u/scripts/widget-create.sh" \ -o "$d/tests/validation.md" "$u/tests/validation.md" \ -o "$d/LICENSE" "https://raw.githubusercontent.com/cloudflare/skills/6dc7604903127485e7e4cb26314651ebd4a4df19/LICENSE"
Global: instala em ~/.claude/skills/turnstile-spin/.
d="$HOME/.claude/skills/turnstile-spin" u="https://raw.githubusercontent.com/cloudflare/skills/6dc7604903127485e7e4cb26314651ebd4a4df19/skills/turnstile-spin" curl -fsSL --create-dirs \ -o "$d/SKILL.md" "$u/SKILL.md" \ -o "$d/README.md" "$u/README.md" \ -o "$d/references/astro.md" "$u/references/astro.md" \ -o "$d/references/hugo.md" "$u/references/hugo.md" \ -o "$d/references/nextjs-app.md" "$u/references/nextjs-app.md" \ -o "$d/references/nextjs-pages.md" "$u/references/nextjs-pages.md" \ -o "$d/references/sveltekit.md" "$u/references/sveltekit.md" \ -o "$d/references/vanilla-html.md" "$u/references/vanilla-html.md" \ -o "$d/scripts/auth-probe.sh" "$u/scripts/auth-probe.sh" \ -o "$d/scripts/persist-skill.sh" "$u/scripts/persist-skill.sh" \ -o "$d/scripts/validate.sh" "$u/scripts/validate.sh" \ -o "$d/scripts/widget-create.sh" "$u/scripts/widget-create.sh" \ -o "$d/tests/validation.md" "$u/tests/validation.md" \ -o "$d/LICENSE" "https://raw.githubusercontent.com/cloudflare/skills/6dc7604903127485e7e4cb26314651ebd4a4df19/LICENSE"
Codex
Neste projeto: instala em .agents/skills/turnstile-spin/.
d=".agents/skills/turnstile-spin" u="https://raw.githubusercontent.com/cloudflare/skills/6dc7604903127485e7e4cb26314651ebd4a4df19/skills/turnstile-spin" curl -fsSL --create-dirs \ -o "$d/SKILL.md" "$u/SKILL.md" \ -o "$d/README.md" "$u/README.md" \ -o "$d/references/astro.md" "$u/references/astro.md" \ -o "$d/references/hugo.md" "$u/references/hugo.md" \ -o "$d/references/nextjs-app.md" "$u/references/nextjs-app.md" \ -o "$d/references/nextjs-pages.md" "$u/references/nextjs-pages.md" \ -o "$d/references/sveltekit.md" "$u/references/sveltekit.md" \ -o "$d/references/vanilla-html.md" "$u/references/vanilla-html.md" \ -o "$d/scripts/auth-probe.sh" "$u/scripts/auth-probe.sh" \ -o "$d/scripts/persist-skill.sh" "$u/scripts/persist-skill.sh" \ -o "$d/scripts/validate.sh" "$u/scripts/validate.sh" \ -o "$d/scripts/widget-create.sh" "$u/scripts/widget-create.sh" \ -o "$d/tests/validation.md" "$u/tests/validation.md" \ -o "$d/LICENSE" "https://raw.githubusercontent.com/cloudflare/skills/6dc7604903127485e7e4cb26314651ebd4a4df19/LICENSE"
Global: instala em ~/.agents/skills/turnstile-spin/.
d="$HOME/.agents/skills/turnstile-spin" u="https://raw.githubusercontent.com/cloudflare/skills/6dc7604903127485e7e4cb26314651ebd4a4df19/skills/turnstile-spin" curl -fsSL --create-dirs \ -o "$d/SKILL.md" "$u/SKILL.md" \ -o "$d/README.md" "$u/README.md" \ -o "$d/references/astro.md" "$u/references/astro.md" \ -o "$d/references/hugo.md" "$u/references/hugo.md" \ -o "$d/references/nextjs-app.md" "$u/references/nextjs-app.md" \ -o "$d/references/nextjs-pages.md" "$u/references/nextjs-pages.md" \ -o "$d/references/sveltekit.md" "$u/references/sveltekit.md" \ -o "$d/references/vanilla-html.md" "$u/references/vanilla-html.md" \ -o "$d/scripts/auth-probe.sh" "$u/scripts/auth-probe.sh" \ -o "$d/scripts/persist-skill.sh" "$u/scripts/persist-skill.sh" \ -o "$d/scripts/validate.sh" "$u/scripts/validate.sh" \ -o "$d/scripts/widget-create.sh" "$u/scripts/widget-create.sh" \ -o "$d/tests/validation.md" "$u/tests/validation.md" \ -o "$d/LICENSE" "https://raw.githubusercontent.com/cloudflare/skills/6dc7604903127485e7e4cb26314651ebd4a4df19/LICENSE"
Antigravity
Neste projeto: instala em .agents/skills/turnstile-spin/.
d=".agents/skills/turnstile-spin" u="https://raw.githubusercontent.com/cloudflare/skills/6dc7604903127485e7e4cb26314651ebd4a4df19/skills/turnstile-spin" curl -fsSL --create-dirs \ -o "$d/SKILL.md" "$u/SKILL.md" \ -o "$d/README.md" "$u/README.md" \ -o "$d/references/astro.md" "$u/references/astro.md" \ -o "$d/references/hugo.md" "$u/references/hugo.md" \ -o "$d/references/nextjs-app.md" "$u/references/nextjs-app.md" \ -o "$d/references/nextjs-pages.md" "$u/references/nextjs-pages.md" \ -o "$d/references/sveltekit.md" "$u/references/sveltekit.md" \ -o "$d/references/vanilla-html.md" "$u/references/vanilla-html.md" \ -o "$d/scripts/auth-probe.sh" "$u/scripts/auth-probe.sh" \ -o "$d/scripts/persist-skill.sh" "$u/scripts/persist-skill.sh" \ -o "$d/scripts/validate.sh" "$u/scripts/validate.sh" \ -o "$d/scripts/widget-create.sh" "$u/scripts/widget-create.sh" \ -o "$d/tests/validation.md" "$u/tests/validation.md" \ -o "$d/LICENSE" "https://raw.githubusercontent.com/cloudflare/skills/6dc7604903127485e7e4cb26314651ebd4a4df19/LICENSE"
Global: instala em ~/.gemini/antigravity-cli/skills/turnstile-spin/.
d="$HOME/.gemini/antigravity-cli/skills/turnstile-spin" u="https://raw.githubusercontent.com/cloudflare/skills/6dc7604903127485e7e4cb26314651ebd4a4df19/skills/turnstile-spin" curl -fsSL --create-dirs \ -o "$d/SKILL.md" "$u/SKILL.md" \ -o "$d/README.md" "$u/README.md" \ -o "$d/references/astro.md" "$u/references/astro.md" \ -o "$d/references/hugo.md" "$u/references/hugo.md" \ -o "$d/references/nextjs-app.md" "$u/references/nextjs-app.md" \ -o "$d/references/nextjs-pages.md" "$u/references/nextjs-pages.md" \ -o "$d/references/sveltekit.md" "$u/references/sveltekit.md" \ -o "$d/references/vanilla-html.md" "$u/references/vanilla-html.md" \ -o "$d/scripts/auth-probe.sh" "$u/scripts/auth-probe.sh" \ -o "$d/scripts/persist-skill.sh" "$u/scripts/persist-skill.sh" \ -o "$d/scripts/validate.sh" "$u/scripts/validate.sh" \ -o "$d/scripts/widget-create.sh" "$u/scripts/widget-create.sh" \ -o "$d/tests/validation.md" "$u/tests/validation.md" \ -o "$d/LICENSE" "https://raw.githubusercontent.com/cloudflare/skills/6dc7604903127485e7e4cb26314651ebd4a4df19/LICENSE"
Peça ao Rook
Já usa o Rook Labs? Cole no chat do Rook: instale a skill https://rooklabs.sh/marketplace/cloudflare.skills.turnstile-spin
Prévia do SKILL.md
---
name: turnstile-spin
description: Set up, repair, or migrate to Cloudflare Turnstile bot verification in an existing frontend and backend, including server-side Siteverify.
---
# Turnstile Spin skill
Turns the prompt "set up Turnstile" into a working end-to-end integration: a widget, frontend snippets at every chosen insertion point, canonical server-side siteverify in the customer's existing backend, and a real validation pass before reporting success.
You are the agent. Run the wizard below by invoking the scripts under `scripts/` and branching on their JSON output. The scripts hold the deterministic logic (API calls, retry/error handling); your job is orchestration, codebase reading, confirmation, and the frontend + backend edits.
This file is the canonical machine-readable behavior. Product requirements come from the [Turnstile documentation](https://developers.cloudflare.com/turnstile/), and the hosted prompt must mirror this behavior.
## Framework references
Read the reference for the existing frontend when wiring the integration:
| Frontend | Reference |
|---|---|
| Vanilla HTML | [vanilla-html](references/vanilla-html.md) |
| Next.js App Router | [nextjs-app](references/nextjs-app.md) |
| Next.js Pages Router | [nextjs-pages](references/nextjs-pages.md) |
| Astro | [astro](references/astro.md) |
| SvelteKit | [sveltekit](references/sveltekit.md) |
| Hugo | [hugo](references/hugo.md) |
## When to load this skill
Load when the user's prompt mentions any of:
- "Turnstile", "CAPTCHA", "bot protection"
- "siteverify", "cf-turnstile-response"
- "protect this form", "protect this endpoint", "protect this button", "stop bot signups", "spam signups", "block bots on <target>"
- A specific signup, login, contact form, download, comment, API endpoint, or other user-triggered request combined with "Cloudflare" or "bot"
Do not load for unrelated Cloudflare tasks (Workers, Pages, R2, etc.) unless Turnstile is also mentioned.
## Choose the flow before responding
Inspect the user's prompt before starting the numbered wizard. If it says the widget is already created and provides one or more sitekeys, go directly to the existing-widget flow below. Do not run, summarize, or propose the widget-creation flow. Otherwise, use the numbered creation wizard.
…