/SKILL.md
# see-crets — Secret Vault Skill This repository uses `see-crets`, an OS-native secret vault. Secret **values** are never in your context window. You work with **key names only**. --- ## The Core Rule **You must never ask for, store, log, or transmit a secret value.** If you need a credential, use the tools below to work with key names. The human enters values through masked prompts — not through you. --- ## Your Three Tools ### 1. `see-crets set <key>` — Request a new secret Use this wh
npx skillsauth add yldgio/see-crets see-cretsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This repository uses see-crets, an OS-native secret vault. Secret values are never in your context window. You work with key names only.
You must never ask for, store, log, or transmit a secret value. If you need a credential, use the tools below to work with key names. The human enters values through masked prompts — not through you.
see-crets set <key> — Request a new secretUse this when you need a credential that has not been stored yet.
see-crets set github-token
# or with an explicit namespace:
see-crets set my-project/github-token
What happens:
{"stored": true, "key": "..."}.see-crets list — Discover stored keysUse this to find out which secrets are already in the vault.
see-crets list
Returns key names for the current project and the global/ namespace. Never returns values.
see-crets detect — Check vault healthUse this before attempting secret-dependent operations.
see-crets detect
Returns {"available": true, "backend": "..."} or an error with a diagnostic message.
Keys follow the pattern {namespace}/{name}:
| Key | Meaning |
|-----|---------|
| my-app/github-token | Project-specific GitHub PAT |
| global/npm-token | Shared npm publish token |
| my-app/database-url | Project database connection string |
When you call see-crets set github-token, the namespace is derived automatically from the git root (or global/ if outside a repo).
Reference stored secrets with the {{SECRET:key}} placeholder:
# The hook resolves the placeholder before execution — you never see the value
curl -H "Authorization: Bearer {{SECRET:my-app/github-token}}" https://api.github.com/user
⚠ Copilot CLI users: The
{{SECRET:key}}placeholder syntax is not supported in GitHub Copilot CLI.
The pre-secrets hook will deny any tool call containing{{SECRET:...}}placeholders rather than resolving them.
In Copilot CLI, use auto-injection via env-map instead — see the section below.
Placeholder resolution works in: Claude Code ✅ · OpenCode ✅ · Copilot CLI ❌
Or rely on automatic env-var injection for well-known tools:
# GITHUB_TOKEN is injected automatically if `my-app/github-token` is stored
gh repo list
export GITHUB_TOKEN=<paste-token-here>security find-generic-password, cmdkey /list, or secret-tool lookup directly.env files, config files, or environment variables that persist beyond a single command| Task | Command |
|------|---------|
| Check what's stored | see-crets list |
| Store a new secret | see-crets set <key> |
| Check vault health | see-crets detect |
| Use a secret in a command | {{SECRET:key}} placeholder |
This section is self-contained. Follow it in order to install the binary and wire see-crets into your project and AI runtime.
Identify your OS and architecture before running the installer.
macOS
uname -s # → Darwin
uname -m # → x86_64 (Intel) or arm64 (Apple Silicon)
Use install.sh. The script detects arch automatically.
Linux
uname -s # → Linux
uname -m # → x86_64 or aarch64 / arm64
Use install.sh. The script also detects musl (Alpine, Void, …) automatically.
Windows
$env:OS # → Windows_NT
Use install.ps1 via PowerShell. Only x64 is supported currently.
Arch detection: you never need to pass the arch manually — the installer reads
uname -m(Unix) or$env:PROCESSOR_ARCHITECTURE(Windows) and selects the correct binary.
macOS / Linux
curl -fsSL https://raw.githubusercontent.com/yldgio/see-crets/main/install.sh | bash
⚠️ The script enforces bash (
set -euo pipefail). Use| bash, not| sh.
Windows (PowerShell)
iex (irm 'https://raw.githubusercontent.com/yldgio/see-crets/main/install.ps1')
From cmd.exe:
PowerShell -ExecutionPolicy Bypass -Command "irm https://raw.githubusercontent.com/yldgio/see-crets/main/install.ps1 | iex"— spawnspowershell.exe; may still fail in VS Code or some terminal hosts.
Pin a specific version
VERSION=0.1.0 curl -fsSL https://raw.githubusercontent.com/yldgio/see-crets/main/install.sh | bash
Windows equivalent:
$env:VERSION='0.1.0'; iex (irm 'https://raw.githubusercontent.com/yldgio/see-crets/main/install.ps1')
Custom install prefix (Unix only; default is $HOME/.local/bin)
PREFIX=/usr/local/bin curl -fsSL https://raw.githubusercontent.com/yldgio/see-crets/main/install.sh | bash
see-crets --version # prints e.g. 0.1.0
see-crets list # prints empty JSON result (no secrets yet) — confirms vault access
If see-crets is not found after install:
~/.local/bin; for Windows it is %USERPROFILE%\.see-crets\bin. Add the directory to your shell's startup file:
export PATH="$HOME/.local/bin:$PATH"
Set initial secrets, optionally scoping them to a project namespace. The namespace is derived from the git root by default; use --project to override.
# Store secrets (defaults to git-root namespace):
see-crets set OPENAI_API_KEY # prompts for value (characters hidden)
see-crets set DATABASE_URL # prompts for value (characters hidden)
# Store under an explicit project namespace:
see-crets set OPENAI_API_KEY --project my-project
see-crets set DATABASE_URL --project my-project
see-crets list # confirm keys are stored
Secret values are entered through a masked prompt — the AI never sees them. The
setcommand returns{"stored": true, "key": "..."}.
Create .see-crets.json in the project root to configure additional env-var injection via the pre-secrets hook. The file uses a map object that overrides or extends the built-in key-suffix → env-var mapping:
{
"map": {
"openai-api-key": "OPENAI_API_KEY",
"database-url": "DATABASE_URL"
}
}
The keys in map are key-name suffixes (the part after the last / in a fully-qualified key, e.g. my-project/openai-api-key → suffix openai-api-key). The values are the target environment variable names.
Many common suffixes (e.g.
openai-api-key,github-token,database-url) are already in the built-in map — you only need entries in.see-crets.jsonfor custom or non-standard names.
With this file present, the pre-secrets hook (registered in wire_tier3) resolves and injects the mapped environment variables automatically before each tool call. You never reference values directly.
Register the pre-secrets hook in your AI runtime so secrets are injected before every tool invocation.
Copilot CLI — add to ~/.copilot/config.json (or via Copilot settings):
Register hooks/pre-secrets.sh (Unix) or hooks/pre-secrets.ps1 (Windows) as a pre-tool hook. Refer to the Copilot CLI hooks documentation for the exact config key.
Claude Code — create or update .claude/settings.json in the project root:
{
"hooks": {
"PreToolUse": [
{
"matcher": ".*",
"hooks": [
{
"type": "command",
"command": "hooks/pre-secrets.sh"
}
]
}
]
}
}
On Windows, replace hooks/pre-secrets.sh with hooks/pre-secrets.ps1.
OpenCode — the plugin manifest at .opencode/plugins/see-crets/index.ts wires the hook automatically. No manual setup is needed as long as the plugin is installed.
Import secrets from an existing .env file. Because see-crets set requires an interactive TTY (to show the masked prompt), import must be done one key at a time in a real terminal:
# Run each command in your terminal and type the value when prompted
see-crets set openai-api-key # enter value from .env
see-crets set database-url # enter value from .env
Alternatively, use grep to list the key names so you don't miss any:
grep -v '^\s*#' .env | grep '=' | cut -d= -f1
# then run: see-crets set <each-key-name>
After migrating all values, add .env to .gitignore (or delete it) — the vault is now the source of truth.
see-crets upgrade # checks latest GitHub release and updates the binary in-place
The command prints one of:
Already on latest (vX.Y.Z) — nothing to do.Upgraded vX.Y.Z → vA.B.C — binary replaced and checksum-verified.To check your current version before upgrading:
see-crets --version
Windows note: the running
.exeis file-locked. If upgrade fails with a "cannot replace running binary" error, follow the printed instructions to manually swap the temp file into place.
tools
Use when work should span one or more detached tasks but still behave like one job with a single owner context. TaskFlow is the durable flow substrate under authoring layers like Lobster, ACPX, plugins, or plain code. Keep conditional logic in the caller; use TaskFlow for flow identity, child-task linkage, waiting state, revision-checked mutations, and user-facing emergence.
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------
tools
A CLI tool for making authenticated requests to the X (Twitter) API. Use this skill when you need to post tweets, reply, quote, search, read posts, manage followers, send DMs, upload media, or interact with any X API v2 endpoint.