К основному содержанию
скилл CX Codex

secure-secret-drop — скилл для Claude Code: секреты без чата

Скилл поднимает временную ссылку на Cloudflare Quick Tunnel, чтобы вы отдали пароль или ключ агенту, не вставляя его в чат.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add moeadham/secure-secret-drop --skill secure-secret-drop -a claude-code
Открыть на GitHub

Что делает secure-secret-drop

Скилл нужен, когда агенту требуется API-ключ или пароль, а писать их в переписку не хочется. Он создаёт одноразовую публичную ссылку через Cloudflare Quick Tunnel, за которой стоит HTTP-форма, привязанная только к 127.0.0.1. Вы открываете ссылку в браузере, отправляете значения один раз — они уходят прямо в файл, который вы заранее назвали, и не попадают в контекст модели.

Внутри один Python-скрипт scripts/handoff.py и cloudflared. Python-пакеты не нужны, аккаунт Cloudflare, домен и токен тоже. Перед первым запуском скилл советует выполнить doctor: если он сообщит cloudflared=missing, скилл разберётся с вашей ОС и пакетным менеджером и поставит утилиту из официального канала Cloudflare. Если cloudflared лежит вне PATH, укажите путь в CLOUDFLARED_BIN.

Порядок такой: doctor, затем create --field API_KEY --ttl 600, ссылка уходит пользователю, после отправки — status RECEIPT_ID, потом consume в согласованный путь. Существующие ключи в файле перезаписываются только с --overwrite. Публичный TLS обрывается на стороне Cloudflare, поэтому Cloudflare остаётся в границе доверия — это осознанный компромисс, а не сквозное шифрование в браузере. Черновики и полученные данные лежат в открытом виде в $XDG_STATE_HOME/secure-secret-drop/ или ~/.local/state/secure-secret-drop/, так что после получения секрета лучше сразу сделать consume или cancel.

Какие задачи решает

  • передать API-ключ агенту, не вставляя его в чат
  • принять пароль от коллеги через одноразовую ссылку
  • записать полученные значения прямо в .env по согласованному пути
  • проверить, дошла ли отправка, командой status без раскрытия самих значений
  • отменить форму до истечения срока командой cancel

Примеры запросов агенту

  • Подними форму для API_KEY и API_SECRET, ссылку дай мне в чат.
  • Проверь статус RECEIPT_ID — значения не показывай.
  • Забери отправленное в /exact/approved/path.env.

Как установить secure-secret-drop

1Через Skills CLI (Vercel)

npx skills add moeadham/secure-secret-drop --skill secure-secret-drop -a claude-code

2Вручную: положить файлы

~/.claude/skills/secure-secret-drop/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/secure-secret-drop/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о secure-secret-drop

Как установить secure-secret-drop в Claude?

Выполните npx skills add moeadham/secure-secret-drop --skill secure-secret-drop -a claude-code. Скилл встанет в ~/.claude/skills/secure-secret-drop/SKILL.md.

Что делает secure-secret-drop?

Создаёт временную публичную ссылку на Cloudflare Quick Tunnel с одноразовой формой. Через неё секрет попадает в указанный файл, минуя чат и контекст модели.

Что нужно для работы скилла?

Python 3 со стандартной библиотекой, утилита cloudflared и исходящий доступ к Cloudflare. Аккаунт, домен и токен Cloudflare не требуются.

Исходный текст

SKILL.md · MIT
---
name: secure-secret-drop
description: "Use when someone needs dead-simple secret sharing with an AI agent. Creates a temporary public capability URL via Cloudflare Quick Tunnels for dropping a password, credential, or other secret without putting it in chat or model context."
version: 1.1.1
license: MIT
platforms: [linux, macos]
metadata:
  hermes:
    tags: [secrets, handoff, cloudflare, one-time-form]
---

# Secure Secret Drop

Use this local skill when a user needs to provide secrets without chat or vault. It creates a temporary public capability URL over an isolated Cloudflare Quick Tunnel backed by an HTTP origin bound only to `127.0.0.1`, then writes submitted bytes directly to an explicitly authorized destination file without placing them in model context.

## Requirements and first-run setup

Required:

- Python 3 with the standard library; no Python packages are needed.
- The `cloudflared` executable.
- Outbound network access to Cloudflare. The local form origin binds only to `127.0.0.1`.

A Cloudflare account, domain, API token, `cloudflared tunnel login`, named tunnel, DNS record, and background service are **not** required. This skill creates an anonymous, temporary Quick Tunnel for each drop.

Before creating the first form, run `doctor`. If it reports `cloudflared=missing`, do not attempt `create` and do not tell the user to solve it manually when terminal tools are available. Read [Cloudflared setup](references/cloudflared-setup.md), identify the host OS and package manager, explain the proposed installation, obtain any approval required for package installation or `sudo`, install from Cloudflare's official distribution channel, and rerun both `cloudflared --version` and `doctor`. Never run `cloudflared tunnel login`, create DNS, install a tunnel service, or alter an existing Cloudflare configuration for this skill.

If `cloudflared` is installed outside `PATH`, set `CLOUDFLARED_BIN` to its absolute executable path for the command invocation or agent service environment. The CLI also checks common macOS/Linux locations automatically.

## Workflow

1. Run `doctor`.
2. Create the form and send the returned URL to the user. Never ask them to paste values in chat.
3. The user submits once and says only that submission is complete.
4. Run `status RECEIPT_ID`; it reveals status and field names, never values, lengths, or hashes.
5. Consume directly into the exact path the user approved, or discard a dummy test receipt.

Resolve the installed skill directory from the skill loader; do not copy an author-specific absolute path. Then use its script:

```bash
PY="$(command -v python3)"
CLI="<installed-skill-directory>/scripts/handoff.py"
$PY "$CLI" doctor
$PY "$CLI" create --field API_KEY --field API_SECRET --ttl 600
$PY "$CLI" status RECEIPT_ID
$PY "$CLI" consume RECEIPT_ID --env-file /exact/approved/path.env
$PY "$CLI" consume RECEIPT_ID --json-file /exact/approved/path.json
$PY "$CLI" consume RECEIPT_ID --env-file /exact/path.env --overwrite
$PY "$CLI" consume RECEIPT_ID --discard
$PY "$CLI" cancel RECEIPT_ID
```

Options: repeat `--field NAME`; use `--label NAME=Visible label`; use `--plain NAME` only for a declared non-secret field. Names initially must match uppercase environment-key style. Default TTL is 10 minutes.

## Operational rules

- Never call `read_file`, `cat`, `show`, or another display command on a receipt. The CLI intentionally has no raw-output command.
- Never put values in arguments, URLs, logs, status output, or chat.
- Existing destination keys require `--overwrite`. A destination path explicitly named by the user already counts as authorization; do not ask again before consuming. Ask only when the destination is missing or ambiguous, or when overwrite approval is required.
- A failed destination validation/write leaves the submitted receipt retriable.
- GET and HEAD are non-consuming; only one valid POST succeeds. Link scanners therefore do not consume the form.
- Forms expire and their local origin/tunnel self-terminate. `cancel` closes early. A successful POST invalidates the capability immediately, allows approximately two seconds for the complete confirmation response to reach the browser, then stops serving; the receipt waits for explicit consumption.
- Use absolute script and destination paths so fresh Hermes sessions behave consistently.
- Keep the form visually restrained and professional; do not use purple in its palette.

## Trust and storage model

This is a TLS-only MVP, not browser end-to-end encryption. The URL is a temporary public capability URL. Cloudflare terminates public TLS at its edge and forwards over the Quick Tunnel to an HTTP origin bound only to `127.0.0.1`. Cloudflare is therefore in the trust boundary. The tunnel is launched with `tunnel --no-autoupdate --config /dev/null --url http://127.0.0.1:<random-port>`; it does not touch named tunnels, existing config, DNS, Workers, or sudo.

Pending form capability/CSRF material and submitted receipts live outside the skill under `$XDG_STATE_HOME/secure-secret-drop/` or `~/.local/state/secure-secret-drop/` by default (directory mode 0700, files mode 0600). Set `SECURE_SECRET_DROP_STATE_DIR` to override it. Receipts are plaintext at rest for this approved MVP and inherit the security of the local user account and disk encryption. Consume or cancel promptly. Receipt/private-form data is deleted after consume, cancel, or expiry; a minimal nonsecret status record remains so `status` can report the terminal state.

See [Security model](references/security-model.md) for limits and invariants.

© moeadham · MIT · moeadham/secure-secret-drop

Похожие скиллы

Всё по теме «Безопасность» →
encore-go-secret encoredev Скилл учит агента объявлять API-ключи и пароли в Encore Go через структуру secrets и задавать значения по окружениям. CX Codex +1 307установок hardcoded-secret-detection Tencent Скилл проверяет, не лежат ли ключи, токены и пароли прямо в исходниках, конфигах и IaC, к которым у агента есть доступ. CX Codex +1 ★ 7 083звёзд репо repomix-safe-mixer daymade Скилл сканирует проект на захардкоженные ключи и токены и не даёт repomix упаковать код, пока секреты не убраны. CX Codex +1 912установок python-configuration Seth Hobson Скилл выносит настройки Python в переменные окружения и проверяет их через типизированные параметры. Подходит для секретов и разных окружений. CX Codex 11 508установок rivet-secure-exec rivet-dev Скилл для безопасного выполнения Node.js-кода без песочницы: агент запускает чужой или сгенерированный код, а доступ к файлам, сети и ресурсам ограничивается правами. CX Codex +1 918установок security alinaqi Внедряет правила безопасности, изолирует секреты от клиентского бандла и настраивает проверки коммитов. Пригодится при работе с авторизацией, пользовательским вводом и API-ключами. CX Codex +1 426установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой