skills/vault_client/SKILL.md
Secure API key access from the centralized vault. Fetch keys on-demand without storing them in environment variables.
npx skillsauth add garrettroi/open-manus vault_clientInstall 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 skill provides secure access to API keys stored in the centralized Key Vault. You never need to store raw API keys in your environment — instead, fetch them on-demand from the vault.
Status: ✅ Fully tested and working (March 20, 2026)
python3 /app/skills/vault_client/vault_client.py list
python3 /app/skills/vault_client/vault_client.py get GITHUB_API
python3 /app/skills/vault_client/vault_client.py skill GITHUB_API
python3 /app/skills/vault_client/vault_client.py export
Use this method when:
import subprocess
import os
# Fetch a single key
result = subprocess.run(
['python3', '/app/skills/vault_client/vault_client.py', 'get', 'GITHUB_API'],
capture_output=True, text=True
)
if result.returncode == 0:
api_key = result.stdout.strip()
print(f"Key retrieved: {api_key[:20]}...")
else:
print(f"Error: {result.stderr}")
# List all available keys
result = subprocess.run(
['python3', '/app/skills/vault_client/vault_client.py', 'list'],
capture_output=True, text=True
)
print(result.stdout)
# Get skill documentation
result = subprocess.run(
['python3', '/app/skills/vault_client/vault_client.py', 'skill', 'N8N_API'],
capture_output=True, text=True
)
print(result.stdout)
Use this method when:
VAULT_URL and VAULT_TOKEN environment variables are confirmed setimport sys
sys.path.insert(0, '/app/skills/vault_client')
from vault_client import vault
# Fetch a key
api_key = vault.get("GITHUB_API")
print(f"Key: {api_key[:20]}...")
# List all keys you have access to
keys = vault.list_keys()
for k in keys:
print(f"{k['key_name']}: {k['description']}")
# Get skill description for how to use a key
info = vault.get_skill("GITHUB_API")
print(info['skill_description'])
# Export all keys as env vars
vault.export_env()
Note: Direct import requires VAULT_URL and VAULT_TOKEN to be set in the environment. If you get "VAULT_TOKEN not set", use Method 1 (subprocess).
import subprocess
import requests
# Get GitHub token from vault
result = subprocess.run(
['python3', '/app/skills/vault_client/vault_client.py', 'get', 'GITHUB_API'],
capture_output=True, text=True
)
github_token = result.stdout.strip()
# Use with GitHub API
headers = {"Authorization": f"token {github_token}"}
response = requests.get("https://api.github.com/user/repos", headers=headers)
print(f"Repos: {len(response.json())}")
import subprocess
import requests
# Get n8n key from vault
result = subprocess.run(
['python3', '/app/skills/vault_client/vault_client.py', 'get', 'NEWEST_N8N_API'],
capture_output=True, text=True
)
n8n_key = result.stdout.strip()
# Use with n8n API
headers = {"X-N8N-API-KEY": n8n_key}
response = requests.get(
"https://primary-production-38b8.up.railway.app/api/v1/workflows",
headers=headers
)
print(f"Workflows: {len(response.json().get('data', []))}")
#!/bin/bash
# Get key from vault
export GITHUB_API_KEY=$(python3 /app/skills/vault_client/vault_client.py get GITHUB_API)
# Use in subsequent commands
curl -H "Authorization: token $GITHUB_API_KEY" https://api.github.com/user
VAULT_URL and VAULT_TOKENvault.get("KEY_NAME"), it makes an authenticated request to the vaultCause: Running Python code in a sandbox/subprocess that doesn't inherit environment variables.
Solution: Use the subprocess method:
import subprocess
result = subprocess.run(
['python3', '/app/skills/vault_client/vault_client.py', 'get', 'KEY_NAME'],
capture_output=True, text=True
)
key = result.stdout.strip()
Cause: You don't have a grant for that key.
Solution: Ask Harmony to request access from Garrett via the vault dashboard.
Cause: The vault service may be down or restarting.
Solution: Wait a minute and try again. Check if VAULT_URL environment variable is set:
echo $VAULT_URL
# Should output: https://vault-production-f4c2.up.railway.app
Cause: Key names may vary over time.
Solution: Always list keys first to see current names:
python3 /app/skills/vault_client/vault_client.py list
Cause: Key may exist but value is empty, or there was a retrieval error.
Solution: Check error output:
result = subprocess.run([...], capture_output=True, text=True)
if result.returncode != 0:
print(f"Error: {result.stderr}")
Key names may change. Always run vault list to see current keys.
Common keys found:
GITHUB_API — GitHub personal access tokenNEWEST_N8N_API — n8n automation API keyN8N_API_ON_RAILWAY — Legacy n8n keyThese are set automatically for each agent:
VAULT_URL=https://vault-production-f4c2.up.railway.app
VAULT_TOKEN=<agent-specific-token>
Do not modify these. Each agent has their own token.
vault list before fetchingpython3 /app/skills/vault_client/vault_client.py get KEY_NAMERun these commands to verify everything works:
# Should show available keys
python3 /app/skills/vault_client/vault_client.py list
# Should return key value (not error)
python3 /app/skills/vault_client/vault_client.py get GITHUB_API
# Should return skill documentation
python3 /app/skills/vault_client/vault_client.py skill GITHUB_API
If all three work, the vault is functional and ready to use.
development
# Voice Sanitizer This skill cleans up text before it is sent to the Text-to-Speech (TTS) engine. It removes technical jargon, code blocks, and long URLs to ensure the agent sounds natural and conversational in voice chat. ## Usage To sanitize text for speech, run the following command in the terminal: ```bash python3 /app/skills/voice_sanitizer/sanitizer.py "Your long, technical text with `code` and https://links.com/long-url" ``` ### Example Output ```text Your long, technical text with a
tools
Professional AI video production workflow. Use when creating videos, short films, commercials, or any video content using AI generation tools.
testing
# Task Board — Persistent Task Tracking for Open Manus This skill provides a shared task board backed by Redis. Harmony uses it to track delegated work across all agents, and agents use it to report progress and completion. ## When to Use - **Harmony**: Use this whenever you delegate a task to an agent. Add the task to the board, then check the board periodically to follow up. - **Worker Agents**: Use this to update your task status or mark tasks as complete. ## Commands ### Add a new task
tools
# Task Planner This skill replicates the core functionality of the Manus.im `plan` tool. It allows you to create, manage, and display a structured, multi-phase task plan to guide your execution. ## When to Use Use this skill at the beginning of every complex, multi-step task. Update the plan whenever the user changes requirements or you discover significant new information. Advance the plan when you complete a phase. ## Commands ### Create or Update a Plan ``` /task-planner update --goal "