Capabilities
This is the menu. Each capability is one thing James (or Claude acting on his behalf) can do inside this environment — a concrete, invokable action with a clear input, a clear output, and a clear implementation somewhere under ~/apps/.
The capabilities registry is also maintained as a machine-readable table at ~/apps/cc/memory/capabilities.md. This wiki is the human-readable, “how does this thing actually work” version — one page per capability, written for a future-James who forgot how it all fits together.
Capability Page Template
Section titled “Capability Page Template”Every capability page follows the same structure:
- What it does — one sentence, no jargon
- When to use — the trigger, the situation, the “why would I run this”
- How to invoke — the actual command or slash command
- Prerequisites — credentials, connectors, other capabilities it depends on
- Where it lives — repo, file path, and any supporting services
- Example session — a realistic walkthrough of what happens when you run it
- Known gaps / TODOs — what does not work yet, or what should be better
Stubbed So Far
Section titled “Stubbed So Far”- Clipboard Image Archive — auto-save every pasted image at full resolution so Claude can retrieve it later
- Create a Blog Post — transform any raw content into a polished TMS blog post
- Generate an Image — on-the-fly images via Gemini Nano Banana Pro: marker doodles, thumbnails, illustrated explainers
- GKP Facebook Ads — (gap) pull Go Kart Park ad performance
- GSC Audit — multi-site Search Console health audit with historical benchmarking
- Hottest Prospect — score every contact in a GHL sub-account, surface the hottest lead with reasoning and drafted outreach
- PageSpeed Insights Loop — iterative performance fix loop: audit, fix one issue, re-audit, repeat until green
- Propagation — entity-based wiki-link propagation across themarketingshow with diff-style proposals
- Redact Images — blur or black-bar PII out of screenshots via OCR, fully local
- Send a Gmail — send an HTML or plaintext email via the Gmail API
Chrome extensions used to live under this section but have been promoted to their own top-level Chrome Extensions group in the sidebar. Browser-native tools are not Claude-invokable capabilities.
Quick Capabilities
Section titled “Quick Capabilities”Short entries for small, self-contained capabilities that do not warrant their own page. One paragraph each, with the actual command.
Open A URL In Chrome
Section titled “Open A URL In Chrome”Open any URL, local HTML file, Google Doc, or localhost page in Chrome. If a tab is already on that URL, it navigates that existing tab instead of spawning a duplicate. This is the only way Claude should open things in the browser — bare open creates a new tab every time and clutters the window. Supports URL fragments like #hl=URL%20encoded%20text for yellow-highlight scroll-to.
bash ~/apps/cc/open-html.sh "https://internal.themarketingshow.com/capabilities/"bash ~/apps/cc/open-html.sh "/Users/ojhurst/apps/cc/capabilities.html#hl=open-url"Get a YouTube Transcript
Section titled “Get a YouTube Transcript”Pull the transcript of any YouTube video as timestamped plain text. yt-dlp is the primary path. Five fallbacks cover edge cases — captions disabled, cloud-IP blocks, videos too new to have auto-captions yet. Full page with all six methods, rate limits, and the polling pattern for long videos: Get a YouTube Transcript.
cd /tmp && yt-dlp --write-auto-subs --sub-lang en --sub-format vtt \ --skip-download -o "yt-%(id)s" "https://www.youtube.com/watch?v=VIDEO_ID"Transcribe A Local Audio Or Video File
Section titled “Transcribe A Local Audio Or Video File”Turn any .mov, .mp4, .m4a, or .wav into a text transcript using OpenAI Whisper locally — no API, no uploads, runs on the Mac Studio GPU. Extract audio with ffmpeg first to reduce the file size, then run whisper. For a 55-minute recording, Whisper base on the Studio finishes in a few minutes; small or medium for higher accuracy. Good for Ecamm recordings, voicemails, random .mov files from the phone — anything that is not already on YouTube.
ffmpeg -i input.mov -vn -acodec mp3 -b:a 128k /tmp/input.mp3whisper /tmp/input.mp3 --model base --output_format txt --output_dir /tmp/Speak In James’s Cloned Voice
Section titled “Speak In James’s Cloned Voice”Render any text as audio in James’s own voice using XTTS v2. The Mac Studio runs the GPU server at 192.168.1.220:5050; calling speak.py from any machine routes there automatically and falls back to local CPU if the server is unreachable. A --voice james-excited flag switches presets. Useful for generated voice notes, long-form narration, Messenger voice replies, or anything where say / Edge TTS does not sound like James.
source ~/apps/voice-clone/venv/bin/activate && \ python3 ~/apps/voice-clone/speak.py "Text to speak"python3 ~/apps/voice-clone/speak.py --voice james-excited "Text to speak"Not the same as speak-screen.py — that one is the default everyday TTS using Edge Neural voices and handles markdown stripping, heteronym fixes, and voice-match hook enforcement. voice-clone/speak.py is for when it specifically needs to sound like James.
To Stub Next
Section titled “To Stub Next”Everything in ~/apps/cc/memory/capabilities.md that is not yet documented here. Candidates by category:
- Send — SMS via GHL, iMessage, ATH weekly analytics email
- Post / Publish — Google Business Profile, YouTube metadata update, set YouTube public
- Read / Fetch — Calendar events, CRM contacts, CRM conversations, GSC performance, GA4 traffic, MTS logs
- Update / Write — macOS text replacements, GHL contact fields, GHL pipeline stages, Cloudflare DNS
- Generate / Create — Social media comment ladder, Upwork proposals, episode checklist
- Analyze — CRM journey, infrastructure health checks, voice AI call quality
- Deploy — ATH website, TMS website, VPS services, static apps to VPS
- If it is not documented here, Claude should ask where it lives before running it. This page is the source of truth.
- If a capability has a skill (slash command), it gets a page here. Skills are in
~/.claude/commands/. - If a capability is a one-liner script, it still gets a page here. Small does not mean undocumented.
- Known gaps belong at the bottom of the page, not buried in prose. The gap list is a TODO list for James.