Kubeshark Installer
kubeshark/kubeshark
Installs and configures Kubeshark on a Kubernetes cluster, choosing between the quick CLI path and a Helm install with custom values.
MANDATORY security foundation for OpenClaw. An agent skill from LeoYeAI/openclaw-master-skills.
$ npx skills add LeoYeAI/openclaw-master-skills --skill credential-manager -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills credential-manager --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/openclaw-credential-manager .claude/skills/credential-manager && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "credential-manager" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/openclaw-credential-manager into .claude/skills/credential-manager/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "credential-manager", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/openclaw-credential-managerType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add LeoYeAI/openclaw-master-skills --skill credential-manager -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills credential-manager --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/openclaw-credential-manager .agents/skills/credential-manager && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "credential-manager" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/openclaw-credential-manager into .agents/skills/credential-manager/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "credential-manager", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add LeoYeAI/openclaw-master-skills --skill credential-manager -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills credential-manager --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/openclaw-credential-manager .cursor/skills/credential-manager && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "credential-manager" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/openclaw-credential-manager into .cursor/skills/credential-manager/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "credential-manager", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/LeoYeAI/openclaw-master-skills.git --path skills/openclaw-credential-manager--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add LeoYeAI/openclaw-master-skills --skill credential-manager -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills credential-manager --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/openclaw-credential-manager .gemini/skills/credential-manager && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "credential-manager" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/openclaw-credential-manager into .gemini/skills/credential-manager/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "credential-manager", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install LeoYeAI/openclaw-master-skills credential-managerInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add LeoYeAI/openclaw-master-skills --skill credential-manager -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/openclaw-credential-manager .github/skills/credential-manager && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "credential-manager" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/openclaw-credential-manager into .github/skills/credential-manager/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "credential-manager", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add LeoYeAI/openclaw-master-skills --skill credential-manager -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills credential-manager --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/openclaw-credential-manager .opencode/skills/credential-manager && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "credential-manager" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/openclaw-credential-manager into .opencode/skills/credential-manager/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "credential-manager", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
credential-managerMANDATORY security foundation for OpenClaw. An agent skill from LeoYeAI/openclaw-master-skills.
Credential Manager is an agent skill from LeoYeAI/openclaw-master-skills. MANDATORY security foundation for OpenClaw. Consolidate scattered API keys and credentials into a secure .env file with proper permissions. Includes GPG encryption for high-value secrets, credential rotation tracking, deep scanning, and backup hardening. Use when setting up OpenClaw, migrating credentials, auditing security, or enforcing the .env standard. This is not optional — centralized credential management is a core requirement for secure OpenClaw deployments.
Its SKILL.md is about 5.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 17 other files, including scripts and reference files (for example `CHANGELOG.md`, `CONSOLIDATION-RULE.md` and `CORE-PRINCIPLE.md`).
It sits in DevOps & Cloud, covering Deployment. The repository describes itself as: 🧠 Curated collection of 1209+ best OpenClaw skills — weekly updated by MyClaw.ai. The licence is MIT.
8 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit e5199b5. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 8 files in scripts/ (Python and Shell), which the agent can run.
Shell commands in SKILL.md call:
jqpython3bashFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
MAIN_WALLET_PRIVATE_KEYFARCASTER_CUSTODY_PRIVATE_KEYAPI_KEYPRIVATE_KEYCUSTODY_PRIVATE_KEYMOLTBOOK_API_KEYSERVICE_API_KEYENV_KEYWALLET_KEYFARCASTER_SIGNER_PRIVATE_KEYFARCASTER_LEGACY_CUSTODY_PRIVATE_KEYFARCASTER_LEGACY_SIGNER_PRIVATE_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Credential Manager loads about 5.8k tokens when it runs, and up to ~8.2k if it reads all its reference files. Until then it costs about 122 tokens; SKILL.md has 1,295 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
d API keys and credentials into a secure .env file with proper permissions. Includes GPG encryption for high-value secrecredentials into a secure, centralized `.env` file.Centralized `.env` credential management is a **core requirement** for OpenClaw security. If your credentials are scatteAll credentials MUST be in `~/.openclaw/.env` ONLY. No workspace, no skills, no scripts directories.~/.openclaw/.env (mode 600)3. **Consolidates** into `~/.openclaw/.env`- `~/.openclaw/workspace/.env` — Workspace env files- `~/.openclaw/workspace/*/.env` — Subdirectory env files- `~/.openclaw/workspace/skills/*/.env` — Skill env files- Symlink detection (validates symlinked .env targets)Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from LeoYeAI/openclaw-master-skills at commit e5199b5, republished under its MIT licence (© LeoYeAI). 1,295 words, ~5,846 tokens.
.claude/skills/credential-manager/SKILL.md (or your agent's skills folder). This skill also uses 15 other files; get the full folder from GitHub.STATUS: MANDATORY SECURITY FOUNDATION
Consolidate scattered API keys and credentials into a secure, centralized .env file.
Centralized .env credential management is a core requirement for OpenClaw security. If your credentials are scattered across multiple files, stop and consolidate them now.
THE RULE: All credentials MUST be in ~/.openclaw/.env ONLY. No workspace, no skills, no scripts directories.
See:
Every OpenClaw deployment MUST have:
~/.openclaw/.env (mode 600)This is your single source of truth for all credentials. No exceptions.
Why?
Scattered credentials = scattered attack surface. This skill fixes that.
~/.openclaw/.envThe skill automatically detects credentials by scanning for:
File Patterns:
~/.config/*/credentials.json — Service config directories~/.config/*/*.credentials.json — Nested credential files~/.openclaw/*.json — Credential files in OpenClaw root~/.openclaw/*-credentials* — Named credential files (e.g., farcaster-credentials.json)~/.openclaw/workspace/memory/*-creds.json — Memory credential files~/.openclaw/workspace/memory/*credentials*.json — Memory credential files~/.openclaw/workspace/.env — Workspace env files~/.openclaw/workspace/*/.env — Subdirectory env files~/.openclaw/workspace/skills/*/.env — Skill env files~/.local/share/*/credentials.json — Local share directoriesSensitive Key Patterns:
Deep Scan (--deep flag):
.sh, .js, .py, .mjs, .ts files for hardcoded secretssk_, pk_, Bearer, 0x + 64 hex)node_modules/, .git/Security Checks:
600 for files, 700 for directories)600 for backup files, 700 for backup dirs)0x + 64 hex char values)# Scan for credentials
./scripts/scan.py
# Deep scan (includes hardcoded secrets in scripts)
./scripts/scan.py --deep
# Review and consolidate
./scripts/consolidate.py
# Validate security
./scripts/validate.py
# Encrypt high-value secrets
./scripts/encrypt.py --keys MAIN_WALLET_PRIVATE_KEY,CUSTODY_PRIVATE_KEY
# Check rotation status
./scripts/rotation-check.py# Scan only
./scripts/scan.py
# Consolidate specific service
./scripts/consolidate.py --service x
# Backup without removing
./scripts/consolidate.py --backup-only
# Clean up old files
./scripts/cleanup.py --confirmThe skill scans these locations:
~/.config/*/credentials.json
~/.openclaw/*.json
~/.openclaw/*-credentials*
~/.openclaw/workspace/memory/*-creds.json
~/.openclaw/workspace/memory/*credentials*.json
~/.openclaw/workspace/*/.env
~/.openclaw/workspace/skills/*/.env
~/.env (if exists, merges)✅ File permissions: Sets .env to mode 600 (owner only)
✅ Directory permissions: Sets backup dirs to mode 700 (owner only)
✅ Backup permissions: Sets backup files to mode 600 (owner only)
✅ Git protection: Creates/updates .gitignore
✅ Backups: Timestamped backups before changes (secured)
✅ Validation: Checks format, permissions, entropy, and duplicates
✅ Template: Creates .env.example (safe to share)
✅ GPG encryption: Encrypts high-value secrets at rest
✅ Rotation tracking: Warns when credentials need rotation
✅ Deep scan: Detects hardcoded secrets in source files
✅ Symlink-aware: Validates symlinked .env targets
After migration:
~/.openclaw/
├── .env # All credentials (secure, mode 600)
├── .env.secrets.gpg # GPG-encrypted high-value keys (mode 600)
├── .env.meta # Rotation metadata (mode 600)
├── .env.example # Template (safe to share)
├── .gitignore # Protects .env and .env.secrets.gpg
└── backups/ # (mode 700)
└── credentials-old-YYYYMMDD/ # (mode 700)
└── *.bak # Backup files (mode 600)Private keys, wallet keys, and mnemonics should never exist as plaintext on disk. Use GPG encryption for these.
# First-time setup (generates OpenClaw GPG key, configures agent cache)
./scripts/setup-gpg.sh# Encrypt specific keys (moves them from .env to .env.secrets.gpg)
./scripts/encrypt.py --keys MAIN_WALLET_PRIVATE_KEY,CUSTODY_PRIVATE_KEY,SIGNER_PRIVATE_KEY
# The .env will contain placeholders:
# MAIN_WALLET_PRIVATE_KEY=GPG:MAIN_WALLET_PRIVATE_KEYThe enforce.py module handles this transparently:
from enforce import get_credential
# Works for both plaintext and GPG-encrypted keys
key = get_credential('MAIN_WALLET_PRIVATE_KEY')
# If value starts with "GPG:", decrypts from .env.secrets.gpg automaticallyOn headless servers (VPS), the GPG agent caches the passphrase:
setup-gpg.sh| Key Type | Encrypt? | Why |
|---|---|---|
| Wallet private keys | ✅ Yes | Controls funds |
| Custody/signer private keys | ✅ Yes | Controls identity |
| Mnemonics / seed phrases | ✅ Yes | Master recovery |
| API keys (services) | ❌ No | Revocable, low damage |
| Agent IDs, names, URLs | ❌ No | Not secrets |
# Initialize rotation tracking for all keys
./scripts/rotation-check.py --initCreates ~/.openclaw/.env.meta:
{
"MAIN_WALLET_PRIVATE_KEY": {
"created": "2026-01-15",
"lastRotated": null,
"rotationDays": 90,
"risk": "critical"
},
"MOLTBOOK_API_KEY": {
"created": "2026-02-04",
"lastRotated": null,
"rotationDays": 180,
"risk": "low"
}
}# Check which keys need rotation
./scripts/rotation-check.py
# Output:
# 🔴 MAIN_WALLET_PRIVATE_KEY: 26 days old (critical, rotate every 90 days)
# ✅ MOLTBOOK_API_KEY: 7 days old (low, rotate every 180 days)| Risk Level | Rotation Period | Examples |
|---|---|---|
| Critical | 90 days | Wallet keys, private keys |
| Standard | 180 days | API keys for paid services |
| Low | 365 days | Free-tier API keys, agent IDs |
Add rotation checks to HEARTBEAT.md for periodic monitoring:
## Credential Rotation (weekly)
If 7+ days since last rotation check:
1. Run: ./scripts/rotation-check.py
2. If any keys overdue: notify human
3. Update lastRotationCheck timestampCommon services auto-detected:
API_KEY, *_TOKEN, *_SECRET patternsSee references/supported-services.md for full list.
All scripts support --help for detailed usage.
# Scan and report
./scripts/scan.py
# Deep scan (includes hardcoded secrets in scripts)
./scripts/scan.py --deep
# Include custom paths
./scripts/scan.py --paths ~/.myapp/config ~/.local/share/creds
# JSON output
./scripts/scan.py --format json# Interactive mode (prompts before changes)
./scripts/consolidate.py
# Auto-confirm (no prompts)
./scripts/consolidate.py --yes
# Backup only
./scripts/consolidate.py --backup-only
# Specific service
./scripts/consolidate.py --service molten# Full validation (permissions, format, entropy, security)
./scripts/validate.py
# Check permissions only
./scripts/validate.py --check permissions
# Fix issues automatically
./scripts/validate.py --fix# Encrypt specific high-value keys
./scripts/encrypt.py --keys MAIN_WALLET_PRIVATE_KEY,CUSTODY_PRIVATE_KEY
# List currently encrypted keys
./scripts/encrypt.py --list
# Decrypt (move back to plaintext .env)
./scripts/encrypt.py --decrypt --keys MAIN_WALLET_PRIVATE_KEY# Check rotation status
./scripts/rotation-check.py
# Initialize tracking for all keys
./scripts/rotation-check.py --init
# Record a rotation
./scripts/rotation-check.py --rotated MOLTBOOK_API_KEY# First-time GPG setup for OpenClaw
./scripts/setup-gpg.sh
# Configure cache timeout (hours)
./scripts/setup-gpg.sh --cache-hours 12# Dry run (shows what would be deleted)
./scripts/cleanup.py
# Actually delete old files
./scripts/cleanup.py --confirm
# Keep backups
./scripts/cleanup.py --confirm --keep-backupsThis is the exact step-by-step flow, tested and verified on a live OpenClaw deployment.
cd /path/to/openclaw/skills/credential-manager
# Basic scan — finds credential files by path patterns
./scripts/scan.py
# Deep scan — also greps source files for hardcoded secrets
./scripts/scan.py --deepWhat to look for in output:
.env files (should point to main ~/.openclaw/.env)~/.openclaw/.envExample output:
⚠️ /home/user/.openclaw/farcaster-credentials.json
Type: json
Keys: custodyPrivateKey, signerPrivateKey, ...
Mode: 644
⚠️ Should be 600 for security
✅ /home/user/.openclaw/.env
Type: env
Keys: API_KEY, X_CONSUMER_KEY, ...
Mode: 600./scripts/consolidate.pyInteractive flow:
.env to ~/.openclaw/backups/credentials-old-YYYYMMDD/.env keyscustodyPrivateKey → FARCASTER_CUSTODY_PRIVATE_KEY)key → ENV_KEYProceed? [y/N].env (mode 600).env.example template (safe to share).gitignoreFor credentials not auto-detected (e.g., nested JSON like farcaster-credentials.json with multiple accounts), manually add to .env:
cat >> ~/.openclaw/.env << 'EOF'
# FARCASTER (Active: mr-teeclaw, FID 2700953)
FARCASTER_FID=2700953
FARCASTER_FNAME=mr-teeclaw
FARCASTER_CUSTODY_ADDRESS=0x...
FARCASTER_CUSTODY_PRIVATE_KEY=0x...
FARCASTER_SIGNER_PUBLIC_KEY=...
FARCASTER_SIGNER_PRIVATE_KEY=...
# FARCASTER LEGACY (teeclaw, FID 2684290)
FARCASTER_LEGACY_FID=2684290
FARCASTER_LEGACY_CUSTODY_ADDRESS=0x...
FARCASTER_LEGACY_CUSTODY_PRIVATE_KEY=0x...
FARCASTER_LEGACY_SIGNER_PUBLIC_KEY=...
FARCASTER_LEGACY_SIGNER_PRIVATE_KEY=...
EOF
chmod 600 ~/.openclaw/.env./scripts/validate.pyChecks performed:
.env permissions (must be 600).gitignore coverage0x + 64 hex chars) → recommends GPGFix issues automatically:
./scripts/validate.py --fixThis fixes: file permissions, directory permissions, backup permissions, gitignore. It does NOT auto-fix format issues or encrypt keys — those require manual action.
# First-time GPG setup (configures agent cache, tests encrypt/decrypt)
./scripts/setup-gpg.sh
# Optional: --cache-hours 12 (default: 8)Encrypt high-value keys:
# Encrypt wallet + Farcaster private keys
./scripts/encrypt.py --keys MAIN_WALLET_PRIVATE_KEY,FARCASTER_CUSTODY_PRIVATE_KEY,FARCASTER_SIGNER_PRIVATE_KEY,FARCASTER_LEGACY_CUSTODY_PRIVATE_KEY,FARCASTER_LEGACY_SIGNER_PRIVATE_KEYWhat happens:
OPENCLAW_GPG_PASSPHRASE env var).env~/.openclaw/.env.secrets.gpg (AES256, mode 600).env values with GPG:KEY_NAME placeholdersget_credential() or _load_cred() decrypt transparentlySave passphrase to .env for automated decryption:
echo 'OPENCLAW_GPG_PASSPHRASE=your-passphrase-here' >> ~/.openclaw/.env
chmod 600 ~/.openclaw/.envVerify encryption:
# Check .env has GPG placeholders
grep "GPG:" ~/.openclaw/.env
# List all encrypted keys
./scripts/encrypt.py --list./scripts/rotation-check.py --initAuto-classifies all keys by risk:
*PRIVATE_KEY, *MNEMONIC, *SEED, *WALLET_KEY, *CUSTODY*, *SIGNER**API_KEY, *SECRET, *TOKEN, *BEARER, *CONSUMER*, *ACCESS*Creates ~/.openclaw/.env.meta (mode 600) with creation dates and rotation schedules.
Check rotation status anytime:
./scripts/rotation-check.py# Dry run first — see what would be deleted
./scripts/cleanup.py
# Actually delete (prompts for 'DELETE' confirmation)
./scripts/cleanup.py --confirmAlso manually remove migrated files not caught by the scanner:
# Example: farcaster-credentials.json was manually migrated
cp ~/.openclaw/farcaster-credentials.json ~/.openclaw/backups/credentials-old-YYYYMMDD/farcaster-credentials.json.bak
chmod 600 ~/.openclaw/backups/credentials-old-YYYYMMDD/farcaster-credentials.json.bak
rm ~/.openclaw/farcaster-credentials.jsonAny scripts that loaded from JSON credential files or hardcoded paths need updating.
Pattern — Bash scripts:
# OLD (insecure):
FARCASTER_CREDS="/home/user/.openclaw/farcaster-credentials.json"
fid=$(jq -r '.fid' "$FARCASTER_CREDS")
private_key=$(jq -r '.custodyPrivateKey' "$FARCASTER_CREDS")
# NEW (secure, GPG-aware):
ENV_FILE="$HOME/.openclaw/.env"
_load_cred() {
local key="$1"
local value
value=$(grep "^${key}=" "$ENV_FILE" | head -1 | cut -d= -f2-)
if [[ "$value" == GPG:* ]]; then
local gpg_key="${value#GPG:}"
local passphrase="${OPENCLAW_GPG_PASSPHRASE:-}"
if [ -n "$passphrase" ]; then
value=$(echo "$passphrase" | gpg -d --batch --quiet --passphrase-fd 0 "$HOME/.openclaw/.env.secrets.gpg" | python3 -c "import json,sys; print(json.load(sys.stdin).get('$gpg_key',''))")
else
value=$(gpg -d --batch --quiet "$HOME/.openclaw/.env.secrets.gpg" | python3 -c "import json,sys; print(json.load(sys.stdin).get('$gpg_key',''))")
fi
fi
echo "$value"
}
fid=$(_load_cred "FARCASTER_FID")
private_key=$(_load_cred "FARCASTER_CUSTODY_PRIVATE_KEY")Pattern — Node.js scripts:
// OLD (insecure):
const creds = JSON.parse(fs.readFileSync('~/.openclaw/farcaster-credentials.json'));
const privateKey = creds.custodyPrivateKey;
// NEW (secure, GPG-aware):
const ENV_PATH = path.join(os.homedir(), '.openclaw/.env');
const SECRETS_PATH = path.join(os.homedir(), '.openclaw/.env.secrets.gpg');
function loadCred(key) {
const content = fs.readFileSync(ENV_PATH, 'utf8');
for (const line of content.split('\n')) {
if (line.startsWith(key + '=')) {
let value = line.slice(key.length + 1).trim();
if (value.startsWith('GPG:')) {
const { execSync } = require('child_process');
const passphrase = process.env.OPENCLAW_GPG_PASSPHRASE || '';
const cmd = passphrase
? `echo "${passphrase}" | gpg -d --batch --quiet --passphrase-fd 0 "${SECRETS_PATH}"`
: `gpg -d --batch --quiet "${SECRETS_PATH}"`;
const secrets = JSON.parse(execSync(cmd, { encoding: 'utf8' }));
return secrets[value.slice(4)] || '';
}
return value;
}
}
return '';
}
const privateKey = loadCred('FARCASTER_CUSTODY_PRIVATE_KEY');Pattern — Python scripts:
# Use the enforce module (recommended):
import sys
from pathlib import Path
sys.path.insert(0, str(Path.home() / 'openclaw/skills/credential-manager/scripts'))
from enforce import get_credential
private_key = get_credential('FARCASTER_CUSTODY_PRIVATE_KEY') # Auto-decrypts GPG# Run full validation — should show all green
./scripts/validate.py
# Verify encrypted keys
./scripts/encrypt.py --list
# Check rotation status
./scripts/rotation-check.py
# Test a script that uses credentials
bash /path/to/your/script.shExpected final state:
~/.openclaw/
├── .env # All credentials (mode 600, private keys = GPG:*)
├── .env.secrets.gpg # GPG-encrypted private keys (mode 600)
├── .env.meta # Rotation tracking metadata (mode 600)
├── .env.example # Template (safe to share)
├── .gitignore # Protects .env, .env.secrets.gpg, .env.meta
└── backups/ # (mode 700)
└── credentials-old-YYYYMMDD/ # (mode 700)
└── *.bak # Backup files (mode 600)Other OpenClaw skills MUST validate credentials are secure before using them:
#!/usr/bin/env python3
import sys
from pathlib import Path
# Add credential-manager scripts to path
sys.path.insert(0, str(Path.home() / '.openclaw/skills/credential-manager/scripts'))
# Enforce secure .env (exits if not compliant)
from enforce import require_secure_env, get_credential
require_secure_env()
# Now safe to load credentials (handles GPG-encrypted keys transparently)
api_key = get_credential('SERVICE_API_KEY')
wallet_key = get_credential('MAIN_WALLET_PRIVATE_KEY') # Auto-decrypts from GPG#!/usr/bin/env bash
set -euo pipefail
# Validate .env exists and is secure
if ! python3 ~/.openclaw/skills/credential-manager/scripts/enforce.py; then
exit 1
fi
# Now safe to load
source ~/.openclaw/.envThis creates a fail-fast system: If credentials aren't properly secured, skills refuse to run. Users are forced to fix it.
After migration, load from .env:
import os
from pathlib import Path
# Load .env
env_file = Path.home() / '.openclaw' / '.env'
with open(env_file) as f:
for line in f:
if '=' in line and not line.strip().startswith('#'):
key, val = line.strip().split('=', 1)
os.environ[key] = val
# Use credentials
api_key = os.getenv('SERVICE_API_KEY')# Load .env
set -a
source ~/.openclaw/.env
set +a
# Use credentials
echo "$SERVICE_API_KEY"If you migrated using OpenClaw scripts:
from load_credentials import get_credentials
creds = get_credentials('x')Edit ~/.openclaw/.env:
# Add new service
NEW_SERVICE_API_KEY=your_key_here
NEW_SERVICE_SECRET=your_secret_hereUpdate template too:
# Edit .env.example
NEW_SERVICE_API_KEY=your_key_here
NEW_SERVICE_SECRET=your_secret_hereIf the new credential is high-value (private key, wallet key):
# Add to .env first, then encrypt
./scripts/encrypt.py --keys NEW_SERVICE_PRIVATE_KEYSee references/security.md for detailed security guidelines.
Quick checklist:
.env has 600 permissions.env is git-ignored--deep scan to verify)source, not export KEY=val)If something goes wrong:
# Find your backup
ls -la ~/.openclaw/backups/
# Restore specific file
cp ~/.openclaw/backups/credentials-old-YYYYMMDD/x-credentials.json.bak \
~/.config/x/credentials.json
# Decrypt GPG secrets back to plaintext
./scripts/encrypt.py --decrypt --keys MAIN_WALLET_PRIVATE_KEY© LeoYeAI, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 15 other files (scripts, references) in skills/openclaw-credential-manager of LeoYeAI/openclaw-master-skills.
Open the folder on GitHubat commit e5199b5
Credential Manager next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Credential Manager this skillLeoYeAI/openclaw-master-skills | 2.2k | — | ~5.8k | Automated safety check: Notes | MIT | |
| Kubeshark Installerkubeshark/kubeshark | 12k | — | ~3.6k | Automated safety check: Notes | Apache-2.0 | |
| GreptimeDB Dev Docker ImageGreptimeTeam/greptimedb | 6.7k | — | ~4k | Automated safety check: Notes | Apache-2.0 | |
| KubeSphere ServiceMesh Managerkubesphere/kubesphere | 17k | — | ~2.4k | Automated safety check: Pass | Custom licence | |
| Vercelremotion-dev/remotion | 63k | — | ~1.2k | Automated safety check: Pass | Custom licence | |
| AWS Cdk Developmentzxkane/aws-skills | 367 | 2 repos | ~2.5k | Automated safety check: Pass | MIT |
kubeshark/kubeshark
Installs and configures Kubeshark on a Kubernetes cluster, choosing between the quick CLI path and a Helm install with custom values.
GreptimeTeam/greptimedb
Packages a locally built GreptimeDB debug binary into a development-only Docker image for local-cluster testing, with an optional push to a dev registry.
kubesphere/kubesphere
Installs, checks and troubleshoots the KubeSphere ServiceMesh extension (Istio, Kiali, Jaeger), including grayscale release, sidecar injection, topology and tracing issues.
remotion-dev/remotion
Set up a Codex monitor for Vercel deployments and preview URLs.
zxkane/aws-skills
AWS Cloud Development Kit (CDK) expert for building cloud infrastructure with TypeScript/Python.
maslennikov-ig/claude-code-orchestrator-kit
Comprehensive DevOps skill for CI/CD, infrastructure automation, containerization, and cloud platforms (AWS, GCP, Azure). Includes pipeline setup…
LeoYeAI/openclaw-master-skills
Manages pipelines on a DevOps quality and efficiency platform through its OpenAPI: list workspaces and templates, create, update, run and cancel pipelines, and read run records.
LeoYeAI/openclaw-master-skills
Patches OpenClaw's Feishu extension so an edited document triggers an isolated agent session that reads the doc and replies inline, turning it into a live chat space.
LeoYeAI/openclaw-master-skills
Multi-context memory management system for OpenClaw agents with group-isolated storage, global shared memory, workspace organization, and group-specific skills isolation.
LeoYeAI/openclaw-master-skills
Runs a brand's AI-search visibility work end to end: diagnosing how AI platforms represent it, repositioning it, producing AI-optimized content and monitoring ongoing mentions.
LeoYeAI/openclaw-master-skills
Installs and authenticates the gws CLI, then automates Gmail, Drive, Sheets, Calendar, Docs, Chat and Tasks with ready-made recipes, persona bundles and security audits.
LeoYeAI/openclaw-master-skills
Runs four advisor roles, a fitness coach, nutritionist, data analyst and TCM practitioner, to build a health profile and track workouts, diet and wellness over time.
Categories
MANDATORY security foundation for OpenClaw. An agent skill from LeoYeAI/openclaw-master-skills. Credential Manager is an agent skill from LeoYeAI/openclaw-master-skills. MANDATORY security foundation for OpenClaw.
Credential Manager fits situations like: setting up OpenClaw; migrating credentials; auditing security; enforcing the .env standard.
Run `npx skills add LeoYeAI/openclaw-master-skills --skill credential-manager -a claude-code`. Or copy the skill folder (skills/openclaw-credential-manager in LeoYeAI/openclaw-master-skills) into .claude/skills/credential-manager in your project. Claude Code loads it when a task matches its description.
Run `npx skills add LeoYeAI/openclaw-master-skills --skill credential-manager -a codex`. Or copy the skill folder (skills/openclaw-credential-manager in LeoYeAI/openclaw-master-skills) into .agents/skills/credential-manager in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add LeoYeAI/openclaw-master-skills --skill credential-manager -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/credential-manager, .gemini/skills/credential-manager, .github/skills/credential-manager and .opencode/skills/credential-manager in your project.
Going by SKILL.md and its folder, Credential Manager needs Python and a shell for the scripts in its folder, the command-line tools its instructions call (jq, python3 and bash) and credentials named MAIN_WALLET_PRIVATE_KEY, FARCASTER_CUSTODY_PRIVATE_KEY, API_KEY and PRIVATE_KEY. Our summary lists: Python 3; A Bash shell; A credential in MAIN_WALLET_PRIVATE_KEY; A credential in CUSTODY_PRIVATE_KEY.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Credential Manager is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.8k tokens (SKILL.md is roughly 23k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 2.3k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Credential Manager: Kubeshark Installer (kubeshark/kubeshark, 12k stars), GreptimeDB Dev Docker Image (GreptimeTeam/greptimedb, 6.7k stars), KubeSphere ServiceMesh Manager (kubesphere/kubesphere, 17k stars) and Vercel (remotion-dev/remotion, 63k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
LeoYeAI (a GitHub user) maintains it in LeoYeAI/openclaw-master-skills, which has 2,160 GitHub stars. The repository holds 1,235 skills in this directory. The repository was last updated on July 20, 2026.
Source: LeoYeAI/openclaw-master-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.