Install
openclaw skills install idea-vaultSave and organize links, notes, and timestamps into a searchable Idea Vault. Use when a user drops a YouTube/web link (or just notes), then says “/vault” or...
openclaw skills install idea-vaultA lightweight capture → organize → retrieve workflow.
Turn messy chat drops (links + rough notes + timestamps) into structured markdown entries and a searchable index.
Run this once after cloning the skill so OpenClaw can execute it reliably:
cd ~/.openclaw/skills/idea-vault
python3 --version
python3 -m pip install -r requirements.txt
Environment setup (recommended):
cp .env.example .env
# then set IDEA_VAULT_TRANSCRIPTAPI_KEY and IDEA_VAULT_DIR in your shell/env manager
Notes:
requests from requirements.txt is required.IDEA_VAULT_TRANSCRIPTAPI_KEY is strongly recommended for reliable YouTube transcripts.yt-dlp is optional fallback for some videos/environments.This skill can make outbound network calls to:
youtube.com (video/transcript fallback paths)transcriptapi.com (when IDEA_VAULT_TRANSCRIPTAPI_KEY is set)Security notes:
subprocess.run([...], shell=False) for yt-dlp (no shell string execution).Use an environment variable or local default path:
VAULT_DIR="${IDEA_VAULT_DIR:-$HOME/workspace/idea-vault}"
CACHE_DIR="$VAULT_DIR/_cache"
/vault or vault)python3 ./scripts/idea_vault.py extract --user-id <author.id> --fallback-messages 30 < messages.json > capture.json
Preferred source is TranscriptAPI via IDEA_VAULT_TRANSCRIPTAPI_KEY.
python3 ./scripts/idea_vault.py fetch --cache-dir "$CACHE_DIR" < capture.json > youtube.json
python3 ./scripts/idea_vault.py upsert --vault-dir "$VAULT_DIR" < save_request.json > saved.json
python3 ./scripts/idea_vault.py query --vault-dir "$VAULT_DIR" --limit 50
python3 ./scripts/idea_vault.py query --vault-dir "$VAULT_DIR" --since 2026-03-01
python3 ./scripts/idea_vault.py query --vault-dir "$VAULT_DIR" --channel "podcast" --text "pricing"
python3 ./scripts/idea_vault.py annotate --vault-dir "$VAULT_DIR" --last --star true --priority high --add-tag actionable
{
"capture": {"...": "from extract"},
"source": {
"kind": "youtube|web|note",
"url": "https://... (optional)",
"title": "string (optional)",
"author": "string (optional)",
"id": "string (optional)",
"transcript_txt": "/path/to/transcript.txt (youtube only, optional)",
"transcript_json": "/path/to/raw.json (youtube only, optional)",
"clips": [{"center_sec": 123, "window_sec": 60, "text": "..."}]
},
"summary": "string",
"elaboration": "string",
"tags": ["tag"],
"associations": [{"timestamp_sec": 1461, "note": "..."}]
}
Under VAULT_DIR:
entries/YYYY/YYYY-MM-DD__<slug>__[<suffix>].mdtranscripts/YYYY/<id>.transcript.txt (YouTube only)assets/YYYY/MM/* (optional attachments)index.json_cache/Reply with: