Claude Code Skills by smorrel1

Claude Code Skills

A collection of custom skills for Claude Code, Anthropic’s CLI tool for AI-assisted software development.

What are Skills?

Skills are reusable modules that extend Claude Code’s capabilities. Each skill provides:

For content creators

One recording becomes a week of posts, locally, no subscription:

  1. interview-transcript: YouTube or X video in, cleaned speaker-labelled transcript out (Kindle delivery optional)
  2. repurpose: transcript in, X thread + LinkedIn post + newsletter section out
  3. humanizer: every draft checked against 400+ AI-writing tells before you see it
curl -fsSL https://smorrel1.github.io/claude-code-skills/install.sh | bash -s -- interview-transcript repurpose humanizer

See it on a real episode: repurpose/examples holds the unedited thread, LinkedIn post and newsletter section produced from the David Senra x Travis Kalanick interview.

Install in one command

Works with skills.sh tooling in Claude Code, Codex CLI and compatible agents:

npx skills add smorrel1/claude-code-skills@ce-to-510k     # FDA 510(k) porting, written from a real clearance
npx skills add smorrel1/claude-code-skills@after-meeting  # transcript -> summary -> follow-up drafts
npx skills add smorrel1/claude-code-skills@email          # multi-account Gmail with draft-safety guards

Or install everything with one command (non-destructive, symlinks into ~/.claude/skills):

curl -fsSL https://smorrel1.github.io/claude-code-skills/install.sh | bash

These skills come from daily use running a regulated medical-AI company solo: the ce-to-510k skill was written from an actual FDA clearance, the email and meeting skills run a real CEO workload every day. Feedback and issues welcome.

Available Skills

Skill Description Setup Required
apple-notes Export Apple Notes to markdown None (macOS only)
gmail Read, search, draft Gmail emails OAuth setup
gsheet Read/write Google Sheets OAuth setup (uses Gmail creds)
gcal Google Calendar CRUD operations OAuth setup (uses Gmail creds)
docx-editor Word document character normalization None
interview-transcript YouTube/X.com transcript to Kindle EPUB yt-dlp + Calibre
monthly-report Monthly board report generation Custom paths + OAuth
ce-to-510k Port CE Mark / UKCA technical files to FDA 510(k) for AI/ML SaMD None
docx-delta Compare two Word documents, redline with tracked changes python-docx
cmux Manage many parallel Claude Code sessions in cmux workspaces cmux
todo-agent Two-way channel between an Apple Notes To Do list and your agents macOS + cmux

Installation

1. Clone or Copy Skills

# Option A: Clone the repo
git clone https://github.com/YOUR_USERNAME/claude-code-skills.git ~/.claude/skills

# Option B: Copy individual skills
cp -r path/to/skill ~/.claude/skills/

2. Install Python Dependencies

Most skills auto-install dependencies on first run, but you can pre-install:

pip install google-auth google-auth-oauthlib google-api-python-client

3. Configure OAuth (for Google skills)

For Gmail, Google Sheets, and Google Calendar skills:

  1. Go to Google Cloud Console
  2. Create a new project or select existing
  3. Enable the required APIs:
    • Gmail API
    • Google Sheets API
    • Google Calendar API
  4. Create OAuth 2.0 credentials (Desktop app type)
  5. Download credentials.json and place in ~/.claude/skills/gmail/
  6. First run will open browser for authorization

Skill Details

Apple Notes

Export all Apple Notes to markdown files. Fast Python-based exporter that reads directly from the Notes SQLite database.

Requirements: macOS with Apple Notes

Usage:

python3 ~/.claude/skills/apple-notes/scripts/export_notes.py
python3 ~/.claude/skills/apple-notes/scripts/export_notes.py --output ~/Documents/notes

Output: Organized markdown files by folder with date-prefixed filenames.


Gmail

Read, search, and draft emails using the Gmail API.

Setup:

  1. Place credentials.json in ~/.claude/skills/gmail/
  2. Run any command to trigger OAuth flow

Usage:

# Search emails
python3 ~/.claude/skills/gmail/scripts/gmail_utils.py search --query "from:john@example.com" --max 5

# Read specific email
python3 ~/.claude/skills/gmail/scripts/gmail_utils.py read --id "message_id"

# Create draft
python3 ~/.claude/skills/gmail/scripts/gmail_utils.py draft --to "user@example.com" --subject "Hello" --body "Message body"

# Reply to thread
python3 ~/.claude/skills/gmail/scripts/gmail_utils.py draft --reply-to "message_id" --body "Reply text"

Google Sheets

Read and write Google Sheets data.

Setup: Uses credentials from Gmail skill. Requires separate OAuth authorization for Sheets scope.

Usage:

# List sheets
python3 ~/.claude/skills/gsheet/scripts/read_gsheet.py "SPREADSHEET_URL" --list-sheets

# Read data
python3 ~/.claude/skills/gsheet/scripts/read_gsheet.py "SPREADSHEET_URL" --sheet "Sheet1" --rows 10

# Update cell
python3 ~/.claude/skills/gsheet/scripts/read_gsheet.py "SPREADSHEET_URL" --sheet "Sheet1" --edit "A1" --value "New Value"

Google Calendar

CRUD operations for Google Calendar.

Setup: Uses credentials from Gmail skill. Requires separate OAuth authorization for Calendar scope.

Usage:

# List calendars
python3 ~/.claude/skills/gcal/scripts/cal_utils.py calendars

# List upcoming events
python3 ~/.claude/skills/gcal/scripts/cal_utils.py list --days 7

# Create event
python3 ~/.claude/skills/gcal/scripts/cal_utils.py create --summary "Meeting" --start "2025-01-15 10:00"

# Check availability
python3 ~/.claude/skills/gcal/scripts/cal_utils.py availability 2025-01-15

Interview Transcript

Download and transcribe interviews/talks from YouTube and X.com (Twitter), clean them up, and convert to Kindle-ready EPUBs with cover images and clickable table of contents.

Features:

Setup:

brew install yt-dlp calibre
pip install jinja2
# Optional (X.com fallback): brew install whisper-cpp ffmpeg

Usage:

# Download transcript
python3 ~/.claude/skills/interview-transcript/scripts/youtube_transcript.py --url "https://youtube.com/watch?v=VIDEO_ID"

# Clean filler words
python3 ~/.claude/skills/interview-transcript/scripts/youtube_transcript.py --clean transcript.txt

# Convert to EPUB with cover
python3 ~/.claude/skills/interview-transcript/scripts/youtube_transcript.py --to-epub structured.txt \
  --title "Interview Title" --author "Speaker" --youtube-cover "https://youtube.com/watch?v=VIDEO_ID"

Or just use it as a Claude Code skill: /interview-transcript <URL>


DOCX Editor

Utilities for working with Word documents, particularly fixing character encoding issues that break find-and-replace.

Usage:

# Normalize special characters
python3 ~/.claude/skills/docx-editor/scripts/fix_docx_chars.py "Text with "smart quotes""

Monthly Report

Note: This is a personal workflow skill. Fork and customize paths in config.py for your own use.

Generates monthly board reports by:

  1. Exporting Apple Notes
  2. Consolidating meeting minutes and transcripts
  3. Processing emails
  4. Synthesizing into report format

External Dependency: This skill expects Fireflies.ai meeting transcripts to be downloaded to a local directory. Set up a cron job to periodically sync transcripts from Fireflies to your configured FIREFLIES_DIR path.

Example cron setup:

# Edit crontab
crontab -e

# Add jobs to download and format transcripts every 5 minutes
*/5 * * * * /path/to/fireflies_downloader/run_script.sh fireflies_downloader.py
7,12,17,22,27,32,37,42,47,52,57 * * * * /path/to/fireflies_downloader/run_script.sh format_transcripts.py

Example run_script.sh wrapper (handles conda/venv activation):

#!/bin/bash
echo "=== Job started at $(date) ===" >> "$HOME/fireflies_downloader/cron_log.txt"
source "$HOME/.bash_profile"
conda activate your-env  # or: source venv/bin/activate
cd "$HOME/fireflies_downloader"
python "$1" >> "$HOME/fireflies_downloader/cron_log.txt" 2>&1
echo "=== Job ended at $(date) with status $? ===" >> "$HOME/fireflies_downloader/cron_log.txt"

See monthly-report/SKILL.md for detailed workflow documentation.


ce-to-510k

Port CE Mark / UKCA medical device technical documentation into an FDA 510(k) submission package for AI/ML SaMD (Software as a Medical Device). Distilled from a real 2023 AI/ML SaMD 510(k) clearance including the full Additional Information Request and Interactive Feedback cycle. Generalises across imaging, signal-processing, clinical decision support and other AI/ML domains.

What it produces:

  1. Planning document for the 510(k) campaign
  2. Predicate device research and analysis (using the FDA 510(k) database)
  3. Pre-Submission (Q-Sub) request when appropriate
  4. Mapped 510(k) eCopy package structure (sections 00 to 21) with content gap list
  5. Strategic recommendation on whether to pursue a Pre-Sub

Highest-value content: references/06-fda-ai-ml-deficiencies.md, a categorised catalogue of the AI/ML deficiency question patterns FDA uses during AINN and Interactive Feedback rounds, with a 16-item pre-empt checklist you can paste into your draft.

Usage: invoke via the Skill tool or by mentioning any of: 510(k), FDA submission, Q-Sub, pre-sub, predicate device, substantial equivalence, CE to FDA, MDR to FDA, AI/ML 510k. Give Claude the path to your CE Mark / UKCA technical file root and your device details; the skill works through eight phases and produces deliverables on disk.

Not suitable for: De Novo, PMA, IVD CLIA, EUA, IDE, drug applications.

Disclaimer: procedural guidance only, not legal or regulatory advice. Verify all FDA guidance citations against current FDA publications before submission.

See ce-to-510k/README.md and ce-to-510k/SKILL.md for details.


Creating Your Own Skills

  1. Create a folder under ~/.claude/skills/your-skill-name/
  2. Add a SKILL.md file with:
    • YAML frontmatter with name and description
    • Usage instructions for Claude
  3. Add scripts in a scripts/ subdirectory
  4. Claude will automatically discover and use skills based on context

SKILL.md Template

---
name: my-skill
description: Brief description that helps Claude know when to use this skill.
---

# My Skill

## Usage

\`\`\`bash
python3 scripts/my_script.py [options]
\`\`\`

## Examples

...

Security Notes


License

MIT License - feel free to use, modify, and share.

Local overrides (private data stays out of git)

Skills that carry user-specific configuration (accounts, addresses, personal file paths, private workflow rules) keep the public SKILL.md generic. The private version lives in SKILL.local.md in the same skill directory, which is gitignored (*.local.md). Each participating SKILL.md opens with a pointer instructing the agent to read SKILL.local.md INSTEAD when it exists, so the private version takes full precedence at load time while never reaching the repository. To personalise a skill: cp SKILL.md SKILL.local.md inside the skill folder and edit the local copy.


docx-delta

Compare two Word documents and get a delta view. Replaces Word’s Review Compare feature and LibreOffice’s headless compare, which is unreliable to automate.

D=~/.claude/skills/docx-delta/scripts/docx_delta.py
python3 $D old.docx new.docx                  # counts only
python3 $D old.docx new.docx -o delta.docx    # redline with real tracked changes
python3 $D old.docx new.docx -o delta.html    # side by side, for reading
python3 $D old.docx new.docx --md             # unified text diff

The .docx output carries genuine w:ins and w:del markup, so Word’s Review pane shows the changes and Accept and Reject work.

Paragraphs are aligned first, then words are compared inside each changed paragraph, so a single edited figure is visible in a long paragraph.

What it compares: body paragraphs and table cell text. Footnotes, endnotes, comments, headers and footers are counted and named in the output, not compared. Images and styling are not compared.

Requires: python-docx (pip install python-docx). No Word, no LibreOffice.


cmux

Manage dozens of parallel Claude Code sessions running in cmux workspaces: find which session owns a topic, hand work to another session and prove it started, restart every session by its own id after an update, and roll up what each one is doing.

python3 ~/.claude/skills/cmux/scripts/send_task.py --workspace "grant applications" "task text"
python3 ~/.claude/skills/cmux/scripts/restart_sessions.py           # verify, by session id
python3 ~/.claude/skills/cmux/scripts/refresh_registry.py           # regenerate the registry

send_task.py exists because cmux send fills the input box without submitting it: a multi-line paste arrives with a “paste again to expand” hint, so the first Enter only expands it and the task stays there looking delivered. It sends one short line pointing at a spooled brief, presses Enter until the target is running, and exits non-zero if it never started. Workspaces are addressed by NAME; numbers drift on every reorder and have misrouted briefs.

Copy references/registry-durable.example.md to registry-durable.md and fill in your own workspaces. The generated registry.md and the task spool are gitignored.


todo-agent

Turns an Apple Notes To Do list into a two-way channel with your agents. Any bullet that opens with claude (the @ is optional) is picked up within five minutes, handed to a chief-of-staff session, and ticked with the outcome. Agents write follow-ups back near the TOP of the note, because a long list is only read down to the first page.

python3 ~/.claude/skills/todo-agent/scripts/todo_agent.py scan --dry-run
python3 ~/.claude/skills/todo-agent/scripts/todo_agent.py prepend --heading "Call follow-ups" --items items.json
python3 ~/.claude/skills/todo-agent/tests/test_trigger.py

Most of the code exists to handle undocumented Apple Notes behaviour: every whole-body write multiplies font sizes by 1.2 and it compounds, a note’s name comes from its first line so copies shadow the original, and Notes fragments your markup so markers must be matched against stripped text. Writes go to a note pinned by Core Data id and are backed up first.

Requires macOS (Apple Notes) and cmux. Note bodies, delivery state and logs are gitignored.