fnox Secrets Management Skill - DIRECT PIPE ONLY
name: fnox-secrets
description: Secure secrets management - SECRETS MUST NEVER BE EXPOSED IN CONTEXT
version: 2.0.0
trit: -1 # Validator/constrainer role in GF(3) triadic system
SECRETS MUST NEVER APPEAR IN CLAUDE'S CONTEXT OR OUTPUT.
The ONLY permitted pattern is direct piping into environment variables:
# CORRECT - secret never visible
SECRET_NAME=$(fnox get SECRET_NAME --age-key-file ~/.age/key.txt) command_that_uses_it
# FORBIDDEN - exposes secret to context
fnox get SECRET_NAME --age-key-file ~/.age/key.txt # NEVER DO THIS
# Pipe secret directly into env var for a command
MORPH_API_KEY=$(fnox get MORPH_API_KEY --age-key-file ~/.age/key.txt) uv run python script.py
APTOS_KEY=$(fnox get APTOS_ALICE_KEY --age-key-file ~/.age/key.txt) aptos move run ...
fnox list # Shows names only, never values
fnox list | grep -q SECRET_NAME && echo "exists"
fnox set SECRET_NAME --provider myage # User enters value interactively
fnox get SECRET without piping to a commandโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ FNOX SECURE ARCHITECTURE โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ ~/.age/key.txt โโโโโโโโโโโโโโโโโ โ
โ โ โ
โ โผ โ
โ fnox get โโโถ DECRYPTS โโโถ $(...) โโโถ ENV VAR โโโถ SUBPROCESS โ
โ โ โ
โ โโโโถ NEVER TO STDOUT/CONTEXT โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
MORPH_API_KEY=$(fnox get MORPH_API_KEY --age-key-file ~/.age/key.txt) uv run python -c "
from morphcloud.api import MorphCloudClient
client = MorphCloudClient()
# ... use client
"
APTOS_PRIVATE_KEY=$(fnox get APTOS_ALICE_KEY --age-key-file ~/.age/key.txt) aptos move run \
--function-id 0x1::coin::transfer \
--args address:0x... u64:1000000
# Chain multiple secrets in one command
MORPH_API_KEY=$(fnox get MORPH_API_KEY --age-key-file ~/.age/key.txt) \
DUNE_API_KEY=$(fnox get DUNE_API_KEY --age-key-file ~/.age/key.txt) \
python my_script.py
Query with: fnox list
Categories:
APTOS_* - Blockchain keysMORPH_API_KEY - Morph CloudDUNE_API_KEY - Dune AnalyticsAMP_API_KEY - AMPBEEPER_ACCESS_TOKEN - Beeperfnox-secrets: -1 (validator/constrainer)
Participates in triads:
fnox-secrets (-1) โ world-runtime (0) โ gay-mcp (+1) = 0 โ
fnox natively supports 1Password as a provider backend. Secrets stored in 1Password can be accessed through the same fnox get interface.
# Add 1Password as a provider
fnox provider add op 1password
# Configure vault in fnox.toml
# fnox.toml
[providers.op]
type = "1password"
vault = "Employee"
Use op:// secret references as the value:
[secrets.MY_API_KEY]
provider = "op"
value = "op://Employee/MyAPIKey/password"
# CORRECT - direct pipe, secret never in context
eval $(op signin)
MY_API_KEY=$(fnox get MY_API_KEY --age-key-file ~/.age/key.txt) ./my-command
# Works identically to age-backed secrets
MORPH_API_KEY=$(fnox get MORPH_API_KEY --age-key-file ~/.age/key.txt) \
MY_API_KEY=$(fnox get MY_API_KEY --age-key-file ~/.age/key.txt) \
python my_script.py
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ fnox get SECRET_NAME โ
โ โ โ
โ โโโ provider = "myage" โโโถ age decrypt (local/offline) โ
โ โ โ
โ โโโ provider = "op" โโโถ op read op://... (1Password) โ
โ โ โ
โ โโโ requires eval $(op signin) โ
โ โ
โ Both paths โโโถ $(...) โโโถ ENV VAR โโโถ SUBPROCESS โ
โ โโโโถ NEVER TO STDOUT/CONTEXT โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
| Provider | Use Case |
|---|---|
myage (age) |
Offline access, CI/CD, air-gapped systems |
op (1Password) |
Team-shared secrets, credential rotation, audit trail |