Claude Code Skills
Skills are reusable workflows that Claude Code can execute via /skill-name in any session within the vault. They live in .claude/skills/ at the repository root (invisible to Obsidian) and sync across all machines via git.
Each skill has a guidelines document in the vault — the human-readable reference that’s visible here in Obsidian, linked into the graph, and searchable via QMD. The skill file reads its guidelines doc as part of execution.
How to Use Skills
Section titled “How to Use Skills”In any Claude Code session (VS Code or terminal SSH):
- Type
/to see available skills in autocomplete - Select a skill or type its name
- Add arguments after the skill name if prompted
How to Create a New Skill
Section titled “How to Create a New Skill”See how-to-create-skills for the full guide — when to create a skill vs. a standing rule, how to describe the workflow to Claude, naming conventions, and examples of good candidates.
Creation checklist
Section titled “Creation checklist”When creating a new skill, always complete all four steps:
- Create the guidelines document in the appropriate vault area (human-readable reference, visible in Obsidian graph)
- Create
.claude/skills/skill-name/SKILL.md(machine-readable skill that Claude Code executes) - Add the skill to this index — both the summary table and a detailed section below
- Commit and push — the skill syncs to all machines via
git pull
Available Skills
Section titled “Available Skills”| Skill | Command | Guidelines | Purpose |
|---|---|---|---|
| Create Campaign | /create-campaign [topic] | _campaign-creation-guidelines | Create a content campaign (blog + newsletter + social) fully linked into the knowledge base |
| Write Blog Post | /write-blog-post [topic] | _blog-post-guidelines | Write or continue a blog post — loads KB context, voice guides, and structures for SEO/AI discoverability |
| Write Communications Post | /write-communications-post [topic] | _communications-post-guidelines | Write or continue a communications post (conference appearance, podcast, panel, press feature) — ACF metadata, voice compliance, WP publish to baseworks.com/communication/ |
| Write Page Copy | /write-page-copy [page] | WRITING-PROCESS | Write or revise copy for a baseworks.com page — voice compliance, Elementor sections, AI discoverability |
| Publish Article | /publish-article <vault-file> | — | Publish a finalized blog post to baseworks.com — media upload, Gutenberg blocks, ACF fields, taxonomy, SEOPress |
| Translate Article | /translate-article <vault-file> | _blog-post-guidelines (Translation section) | Translate a published English blog post to Japanese — vault record, WPML “translate separately” via WP-CLI, all 9 metadata fields, /ja/ link verification |
| Compress Photos | /compress-photos <folder> <b2-dest> | — | Process photos into AVIF + WebP + JPEG at 3840px, upload to B2, output CDN URLs. Sub-4K sources flagged with resolution suffix. |
| Create Newsletter | /create-newsletter <note-path> | — | Generate production-ready HTML email from a newsletter note, using the Baseworks template |
| Create Email | /create-email <description> | — | Create email templates (plain text + optional HTML) for all non-newsletter communications — onboarding, administrative, engagement, event confirmations |
| Update Science Content | /update-science-content [URL or vault path] | update-science-content-guidelines | Update or write science-based web content — aligns with current scientific framing in science.md, fact-checks claims, balances general readability with specialist accuracy |
| Create Event Post | /create-event-post [event name or vault file] | _event-guidelines | Publish an upcoming event post to baseworks.com — creates or reads the vault note, confirms all metadata, and publishes via WP-CLI with ACF fields, taxonomies, and SEOPress configured |
| Session Summary | /session-summary "Spring 2026" session 1 | _session-summary-guidelines | Generate a session summary from a study group transcript — speaker differentiation, KB cross-referencing, optional translation |
| Draft Response | /draft-response <description> | communications-guide, draft-response-collaboration-protocol | Draft a response to a participant, collaborator, or vendor — loads voice guides, communications guide, contact history, and prior editorial refinements on related topics |
| Vault Audit | /vault-audit | — | Run a comprehensive health check across CLAUDE.md, vault index, qmd, vault structure, sync status, and growth trends |
| Archive Newsletter | /archive-newsletter <campaign-id> or --bulk | _archive-newsletter-guidelines | Archive a past newsletter — primary path pulls body from FluentCRM DB by campaign ID; fallback path scrapes a preview URL. Migrates images to B2, cross-links bidirectionally, updates indexes. Supports chronological bulk backfills. |
| Post to Group | /post-to-group [mechanism] | _post-to-group-guidelines | Post to the BuddyBoss practice platform — creates forum topics, forum replies, or group activity posts. Mandatory confirmation gate before any DB write. All bbPress/BuddyBoss requirements enforced. |
| Extract Frames | /extract-frames <video-file> [options] | — | Extract still frames from a local video file using ffmpeg — for building the photo repository from session recordings, demos, and event footage. Visual review step lets Patrick select keepers before handoff to /compress-photos. |
Skill Details
Section titled “Skill Details”/create-campaign
Section titled “/create-campaign”What it does: Walks through the full process of creating a content campaign — researches the knowledge base for source material, proposes a plan, creates the campaign directory and note, sets up or updates the newsletter issue (including Brain Fodder), updates all indexes, and validates wikilinks.
Arguments: Campaign topic or title (e.g., “Spring 2026 Study Group Enrollment”)
Guidelines: _campaign-creation-guidelines
Phases:
- Pre-flight — loads voice guides, guidelines, checks inboxes, researches KB
- Campaign planning — presents findings, gets confirmation
- Create structure — directories, campaign note, newsletter issue, blog post
- Update indexes — campaign index, newsletter index, blog index, cross-references
- Validation — wikilink checker, bidirectional link verification
Available on: All machines (Patrick’s Mac, Asia’s Mac Mini, M1 Laptop, MacBook Air, VPS)
/write-blog-post
Section titled “/write-blog-post”What it does: Loads all necessary context (voice guides, blog guidelines, KB sources) and walks through researching, drafting, revising, and finalizing a Baseworks blog post. Handles both new posts and continuing existing drafts. Ensures voice compliance, correct terminology, proper internal/external hyperlinking, and SEO/AI-optimized structure.
Arguments: Blog post topic, title, or filename (e.g., “winter study group recap”)
Guidelines: _blog-post-guidelines
Phases:
- Pre-flight — loads guidelines, voice guides, blog index, checks inboxes, pulls repo
- KB research — consults method history, educational programs, taxonomy, and topic-specific sources; presents findings
- Drafting/revising — creates or continues the post with voice compliance and structural best practices
- Review and finalization — hyperlink scan, voice check, terminology check, factual check, draft notes update
- Handoff — inbox item, commit and push
Available on: All machines (Patrick’s Mac, Asia’s Mac Mini, M1 Laptop, MacBook Air, VPS)
/write-communications-post
Section titled “/write-communications-post”What it does: Loads context (voice guides, communications guidelines, KB sources) and walks through gathering source material (transcripts, recordings, program details), drafting, revising, and publishing a Baseworks communications post to baseworks.com/communication/. Handles the full lifecycle including WP-CLI publish with the four ACF fields specific to the communications post type: location, project (entity), details (HTML sidebar block), and communication_image.
Arguments: Topic, event name, or slug (e.g., “BRNet 2026” or “2026-06-brnet-panel.md”)
Guidelines: _communications-post-guidelines
Key differences from blog posts:
- Post type is
communications, notarticle - Vault files live in
02-areas/website/communications/, not02-areas/website/blog-articles/ - ACF fields are: location, project/entity, details HTML, communication_image — not subtitle/FAQ/last-updated
- The
detailsfield is rendered in the sidebar by the theme; its format varies by appearance type (conference, podcast, panel) - Source material (recordings, transcripts, conference programs) is gathered before drafting —
/transcribeand/watchare first-class steps - The audience often includes domain experts (researchers, clinicians, academics) from the same event; precision in naming and description is mandatory
Phases:
- Pre-flight — loads guidelines, voice guides, site inventory, checks inboxes, pulls repo
- Context research — finds existing vault material (event note, abstract, campaign, conference landscape); cross-references published communications
- Source material gathering — transcripts, recordings, photos, program details;
/transcribeand/watchas needed - Drafting — proposes structure, confirms, writes body content with voice compliance
- Review and finalization — voice check, terminology, factual check, hyperlinks, editorial notes
- Publishing — WP-CLI: upload image, create draft post, set four ACF fields, set SEOPress, verify, publish on confirmation
- Vault update and handoff — update wp-post-id/url in frontmatter, update site inventory, inbox item, commit and push
Available on: All machines (Patrick’s Mac, Asia’s Mac Mini, M1 Laptop, MacBook Air, VPS)
/write-page-copy
Section titled “/write-page-copy”What it does: Loads voice guides and WRITING-PROCESS.md, then walks through writing or revising copy for a baseworks.com page. Handles the full lifecycle: context research, section-by-section copy development, voice compliance rounds, structured edit proposals (numbered, with rationale), approach options for section rewrites, and documentation (live copy snapshots, discussion files, change logs). Built from the iterative process used on the Spring 2026 Study Group landing page.
Arguments: Page name, URL, or topic (e.g., “practice sessions page” or “baseworks.com/smsg-spring-2026/”)
Guidelines: WRITING-PROCESS (shared writing process — the page copy skill uses this as its guidelines doc since page copy follows the same voice loading order and three-filter checklist as all content)
Key differences from blog posts:
- Copy is organized by Elementor section (Hero, body, testimonials, FAQ, enrollment), not by article flow
- Each section has a specific function — the skill defines what each section should and should not do
- Explicit prohibition on generic marketing patterns (manufactured urgency, pain-point exploitation, conversion tricks)
- Proposed edits use the red text convention (
<span style="color: red">) and Approach A/B/C structure for section rewrites - Documentation includes both a live copy snapshot and a discussion/change log file
Phases:
- Pre-flight — loads WRITING-PROCESS.md, voice guides, site inventory, checks inboxes, pulls repo
- Context research — establishes page purpose, audience, desired action; researches KB sources; checks for prior copy work
- Writing/revision — section-by-section copy with voice compliance, structured edit proposals, AI discoverability
- Documentation — live copy snapshot, discussion file update, French version notes, inbox update
- Handoff — inbox item, commit and push
Available on: All machines (Patrick’s Mac, Asia’s Mac Mini, M1 Laptop, MacBook Air, VPS)
/publish-article
Section titled “/publish-article”What it does: Publishes a finalized blog post from the Obsidian vault to baseworks.com as a WordPress article post type. Handles the full technical workflow: uploading WebP images to the media library, converting markdown to Gutenberg blocks, setting ACF fields (hero image, subtitle), assigning categories and tags, configuring SEOPress meta, and verifying the result. Always saves as draft for human review before publication.
Arguments: Vault filename or slug (e.g., 2026-03-perception-gap-body-awareness)
Prerequisites: Blog post must be finalized in the vault with approved photos on the CDN/NAS. Use /write-blog-post for content creation and /compress-photos for media processing first.
Key technical details:
- WP-CLI on the server outputs a PHP deprecation warning that must be filtered from all output — the skill documents how to avoid embedding it in post content
- Taxonomy assignment requires
--by=idflag — without it, numeric IDs are treated as term names - ACF field keys documented:
article_image(hero),article_subtitle - Category and tag ID lookup tables included
- Cloudflare cache purge after changes
Phases:
- Pre-flight — read vault file, confirm media is ready, check server connection
- Upload media — transfer WebP from NAS to server, import into WP media library
- Create article — build Gutenberg block HTML, create draft post
- Set metadata — featured image, ACF hero, ACF subtitle, categories, tags, SEOPress
- Verification — confirm all fields are set correctly, no debug text in content
- Cache purge — clear Cloudflare
- Handoff — present post ID and checklist to user for review
Available on: Patrick’s Mac (requires SSH access to baseworks.com server)
/translate-article
Section titled “/translate-article”What it does: Translates a published English blog post to Japanese and publishes the Japanese version to baseworks.com via WPML “Translate separately” using WP-CLI. Handles the full workflow: translating all content and metadata fields, verifying /ja/ versions of internal links (falling back to EN URLs where JA pages don’t exist), saving the translation to the vault note, creating the JA draft post, linking it to the EN original via WPML’s wpml_set_element_language_details action, and setting all 9 required fields (title, content, excerpt, ACF subtitle, SEOPress title, SEOPress description, OG title, OG description, image alt texts).
Arguments: Vault filename or slug (e.g., 2026-04-22-sensitivity-as-a-trainable-skill)
Prerequisites: The English article must already be published on baseworks.com. Use /publish-article first.
Guidelines: _blog-post-guidelines (Translation section)
Key technical details:
- WPML “Translate separately” approach: JA post is a standalone draft linked via
wpml_set_element_language_detailsaction — no browser UI required - Slugs are shared between EN and JA; WPML routes
/ja/article/<slug>/automatically by language code - Image attachment IDs are reused from the EN post (media is shared); only alt text is translated in the JA Gutenberg HTML
- Internal links get
/ja/prefix where the JA page exists (HTTP 200); otherwise fall back to EN URL - Taxonomy set explicitly on JA post with
--by=idto avoid spurious term creation - OG title and OG description are SEOPress fields not present in the EN publish workflow — translate and set both
- WPML
element_typemust match exactly — verify from DB before running (post_article, notpost_post)
Phases:
- Pre-flight — read vault note, check for existing JA section, find EN post ID, get WPML trid, verify server connection
- Translate — all body content, metadata fields, and image alt texts; adapt internal links to
/ja/ - Verify
/ja/links — HTTP check each internal URL; build link map with fallbacks noted - Save to vault — append
# 日本語版 — Japanese Translationsection to vault note; commit - Build JA Gutenberg HTML — convert translated body with
/ja/links and translated alt attributes - Create JA post —
wp post createas draft, same slug as EN - Link via WPML —
wpml_set_element_language_detailsaction; verify with DB query - Set metadata — excerpt, ACF subtitle, featured image, hero image, SEOPress (4 fields), taxonomy
- Verify — WPML link, all metadata, content integrity
- Cache purge — nginx-helper purge-all (triggers Cloudflare purge too)
- Update blog index — Japanese column → Yes
- Handoff and push
Available on: Asia’s Mac Mini (requires SSH access to baseworks.com server)
/create-event-post
Section titled “/create-event-post”What it does: Walks through the full workflow of publishing an event post to baseworks.com. Handles two starting points: an existing vault note in 02-areas/website/events/, or a new event described in conversation. Confirms all ACF fields, taxonomy terms, author (which controls which facilitator profile the Elementor template displays), Elementor template decision and timeline, redirect decision, booking fields, media IDs, and SEOPress metadata. Publishes via WP-CLI and updates the vault note with the live post ID and URL. WPML translation is always the last optional step.
Arguments: Event name, vault filename, or new to start from a description
Guidelines: _event-guidelines
Key details:
- Author controls facilitator display:
pandasia(Asia only),basework(Patrick only),baseworks(both) - All ACF field keys documented in the skill — both the data key and the
_field_keyreference must be set - Two taxonomy patterns: global default template (auto via
event_year), or custom per-event Elementor template - Redirect pattern:
post_type_linkfilter via Fluent Snippet — keeps event post indexed for discovery while sending widget/archive traffic to a landing page - Schema location serialization formula included for
_seopress_pro_schemas
Phases:
- Pre-flight — reads event-post-system.md, checks inbox, pulls repo, verifies server access
- Event note — reads existing note or creates one from user description
- Confirm metadata — all fields, template decision, redirect decision, booking, media, SEO
- Publish — WP-CLI sequence: create post, set all meta, set taxonomy, set SEO, verify, publish
- Post-publish — update vault note, provide redirect snippet if needed, inbox item if template pending
- WPML translation — last step, optional
Available on: Asia’s Mac Mini (requires SSH access to baseworks.com server)
/update-science-content
Section titled “/update-science-content”What it does: Updates existing science-based posts and pages to align with the current Baseworks scientific framing in science.md. Can also write new science-based content from scratch. Loads core method context (key-definitions.md), appropriate voice guides, does a literature scan, and — critically — conducts a structured strategy conversation with the user before any drafting begins. Designed for content that must work for both a general reader and a specialist.
Arguments: URL of the live page/post, or vault path for already-imported content (e.g. content in _rework/)
Guidelines: update-science-content-guidelines
Voice guide logic:
- Page on baseworks.com → unified voice only
- Asia’s article/blog post → unified + Asia’s voice
Phases:
- Pre-flight — determine content type, load voice guides, key-definitions.md, science.md, check git and inboxes
- Fetch current content — live URL or vault import
- Structured input — ask user for their notes and priorities before any analysis
- Literature scan — recent papers relevant to the topic (skippable)
- Assessment — what to keep, replace, move elsewhere, and add; dual-audience check
- Conversation rounds — as many as needed; does not draft until user confirms ready
- Draft — with method context, wikilinks, citations, and voice compliance
- Specialist check — review for overclaims, imprecision, unsupported assertions
- Handoff — save to vault, route displaced content, update indexes, inbox item if needed
Available on: All machines (Patrick’s Mac, Asia’s Mac Mini, M1 Laptop, MacBook Air, VPS)
/create-email
Section titled “/create-email”What it does: Creates email templates for all non-newsletter Baseworks communications. Produces a plain text Markdown template (saved to the vault as a reference document) and optionally generates production-ready HTML output for pasting into FluentCRM. Handles onboarding emails, administrative communications, engagement emails, event confirmations, policy responses, and follow-ups. Adjusts tone based on email purpose (warm for onboarding, firm for policy, conversational for engagement).
Arguments: Description of the email to create (e.g., “welcome email for new practice sessions participants”)
Phases:
- Pre-flight — determine email type and tone, load voice guides, load program context, check for existing templates
- Confirm — present email purpose, audience, tone, key content points to user
- Write — create the plain text template following voice guidelines
- Save — store template in the appropriate subfolder of
02-areas/communications/email-templates/, update the index - HTML (optional) — generate styled HTML using the Baseworks email design system (600px layout, Jost/Oswald fonts, teal accents,
media.baseworks.combrand assets), output to terminal and clipboard. HTML is NOT saved to the vault.
Key technical details:
- HTML design system matches the newsletter template (600px container, same fonts, colors, and responsive breakpoints)
- All images served from
media.baseworks.com/— never from Stripo or third-party CDNs - Brand assets at
media.baseworks.com/brand/(logo, circle logo, podcast icons) - Footer includes FluentCRM merge tags (
##crm.unsubscribe_url##,##web_preview_url##) - Email templates organized by program:
practice-sessions/,study-groups/,events/,inquiries/,participant-support/
Available on: All machines (Patrick’s Mac, Asia’s Mac Mini, M1 Laptop, MacBook Air, VPS)
/draft-response
Section titled “/draft-response”What it does: Drafts a response to any participant, collaborator, vendor, or professional communication. Loads the full context stack — voice guides, communications guide, contact inquiry history, and relevant program context — so the response is informed by Baseworks tone conventions, the existing communication thread, and any applicable policies or precedents. Covers participant inquiries, ongoing support, policy enforcement, boundary-setting, vendor communications, and de-escalation.
Arguments: Description of who to respond to and what about (e.g., “reply to Noémie about assignment progress”, “email to Proto Studio confirming April 11 logistics”)
Guidelines: communications-guide (the communications guide serves as the guidelines doc — it covers principles, tone-by-context, and all communication scenarios). Collaboration behavior is governed by the Draft Response — Collaboration Protocol, which describes the editorial-refinements loop.
Key features:
- Automatically loads the communications guide alongside voice guides (unlike
/create-email, which loads voice guides only) - Searches contact inquiry history and participant communications logs for prior thread context
- Checks reference responses for similar past situations
- Retrieves prior editorial refinements via
vault-index.dbtag queries — pulls curated sidecars and past responses on overlapping topics, so drafts start from the accumulated editorial record - Communication-type detection determines tone register (warm/direct/firm/factual/collegial)
- After approval, documents the response in the vault, captures an Editorial refinements section if the run produced substantive deltas, and optionally adds it to reference responses
Phases:
- Pre-flight — determine communication type, load voice guides + communications guide, find communication thread, load program context, retrieve prior editorial context from vault-index.db
- Confirm — present recipient, channel, tone register, key points, policy considerations, and prior editorial context being drawn from
- Draft — write the response following voice and communications guidelines
- Documentation — add to communications log or contact inquiry file, capture Editorial refinements section in the durable file if substantive refinements occurred, save a memory if any refinement is reusable across sessions, optionally add to reference responses, flag any communications guide gaps
Available on: All machines (Patrick’s Mac, Asia’s Mac Mini, M1 Laptop, MacBook Air, VPS)
/session-summary
Section titled “/session-summary”What it does: Generates a session summary from a study group transcript. Handles the full workflow: saves the transcript to the program’s transcripts/ folder, identifies and differentiates speakers (Patrick, Asia, participants by name), cross-references the knowledge base (Form Index, Movement Patterns, Primer Lessons, Philosophy Notes), drafts the English summary with speaker attribution woven into the narrative, gets approval, optionally translates to other languages, updates the program index, and commits all files.
Arguments: Program identifier and session number (e.g., "Spring 2026" session 1)
Guidelines: _session-summary-guidelines
Key improvements over Winter 2026 workflow:
- Transcripts are stored in the vault (
transcripts/folder per program) instead of being ephemeral in Claude Desktop conversations - Speaker differentiation — identifies who said what and attributes statements naturally in the summary
- Translation is optional — the skill asks after English approval whether translation is needed and to which language(s)
- Folder structure is created automatically on first run for each program
Phases:
- Pre-flight — parse arguments, locate program, read guidelines/template/previous summary, check/create folders
- Transcript handling — save transcript to program’s
transcripts/folder - Transcript analysis — speaker differentiation (confirmed by user), content extraction
- KB check — Form Index, Movement Patterns, form transcripts, Primer Lessons, Philosophy Notes
- English draft — generate summary with speaker attribution, save to
session-summaries/ - Review — terminology, grammar, YAML, framing checks; wait for approval
- Translation (optional) — ask user, translate if needed, save with language suffix
- Index update & commit — update program index, verify links, commit
Available on: All machines (Patrick’s Mac, Asia’s Mac Mini, M1 Laptop, MacBook Air, VPS)
/vault-audit
Section titled “/vault-audit”What it does: Runs a comprehensive health check across the entire knowledge base infrastructure — CLAUDE.md effectiveness (line count, stale pointers, reference material detection), vault-index.db health (freshness, file count match, broken links, orphan files, tag typos), qmd embedding health (freshness, document count, vector count), vault structure (missing index.md files, stray root files, .gitignore), sync status (launchd/cron, log recency, uncommitted changes, remote divergence), and growth tracking (compares to previous audits, flags significant changes).
Arguments: None. Use --json for programmatic output.
Output: Color-coded report with OK / WARNING / ACTION NEEDED categories. Growth metrics appended to scripts/audit-log.json for trend tracking.
When to run:
- Monthly or after significant vault changes
- After structural changes (renaming, moving, creating areas)
- After onboarding new machines to the sync system
Available on: All machines (Patrick’s Mac Mini, MacBook Pro, Asia’s Mac Mini, MacBook Air, VPS)
/archive-newsletter
Section titled “/archive-newsletter”What it does: Archives a past Baseworks newsletter into the vault. Primary path pulls rendered HTML directly from the FluentCRM database on crm.baseworks.com by campaign ID — faster and independent of preview endpoint availability. Fallback path scrapes a FluentCRM preview URL (for edge cases or pre-FluentCRM content). Extracts only the textual content; template HTML is discarded. Migrates all content images directly to B2 at media.baseworks.com/newsletters/<slug>/ (no re-encoding — source images are already web-optimized). Finds related vault content and requires user approval before adding bidirectional wikilinks. Supports chronological bulk backfills via --bulk.
Arguments:
- Primary:
<campaign-id>— pulls everything from the FluentCRM DB - Fallback:
--url <fluentcrm-url> <send-date> [subject-override] - Bulk:
--bulk [starting-campaign-id]— processes the English-newsletter backlog from _fluentcrm-campaign-inventory chronologically, batches correlation approvals every 3–5 archives
Optional flags: --drive-social <path> (correlate with a Drive social folder), --blog-url <url> (hint at a related blog post), --language ja|es (future: process translations after EN backlog cleared)
Guidelines: _archive-newsletter-guidelines
Source of truth: the FluentCRM DB (3ZGRM_fc_campaigns.email_body) is authoritative — what actually left the server. When the DB version and a template draft differ, the archive reflects the DB.
Phases:
- Pre-flight — load voice guide + newsletter index + FluentCRM inventory, verify SSH + B2 auth, check for duplicate archives
- Fetch & extract — (1a) SSH +
wp db queryto pull body HTML + subject + UTMs, or (1b)curl+ JS-embed JSON parse fallback; (1c) regex-based text extraction preserving paragraph breaks, anchor-text → href mapping, image list - Image migration — download originals from FluentCRM’s CDN, upload directly to B2 (no re-encoding), track original → CDN URL mapping
- Correlation (required) — vault-index.db query + targeted folder checks; propose links to user for approval (batched in bulk mode)
- Write archive note — directory + markdown file with
status: archived,source-campaign-id,source-url,image-migration, approved correlations - Bidirectional linking (required) — update every correlated file’s
## Relatedsection to point back - Update indexes — newsletter index + FluentCRM inventory (flip row to ✅)
- Commit (no push) — tagged
[Claude Code on Patrick's Mac]
Bulk mode differences:
- Processes inventory chronologically (oldest first, EN only)
- Writes archives with
correlations-pending: trueand defers bidirectional linking until user approves batched proposals - Auto-commits per archive; batches correlation-apply commits
- Never auto-pushes, never auto-progresses to JA/ES
Available on: All machines
/post-to-group
Section titled “/post-to-group”What it does: Posts content to the BuddyBoss practice platform (practice.baseworks.com). Handles three mechanisms: creating a new forum topic, replying to an existing forum topic, and posting to the group activity feed. A mandatory confirmation gate shows the full post preview (including @mention HTML) before any database write. Encodes all rules learned from bbPress/BuddyBoss CLI failures to prevent silent data corruption.
Arguments: Optional mechanism hint — forum-topic, forum-reply, or group-activity. If omitted, the skill asks.
Guidelines: _post-to-group-guidelines
Key technical details:
- Forum topics and replies are WordPress posts (
areb_posts); group activity posts are inareb_bp_activity— different tables, different APIs bbp_insert_topic()andbbp_insert_reply()are used for forum content — neverwp post create(unreliable content embedding) and neverwp_update_post()after creation (silently resetspost_parentto 0)bp_activity_add()is used for group activity posts- @mention HTML must be baked into content before the post is created — patching afterward does not fire notifications
wp post term setalways requires--by=id— without it, numeric IDs create stale terms named after those numbersbbp_update_forum_topic_count()must never be called from CLI — WPML filters zero the count- Never include a “Tags:” line in post body — tags belong in
topic-tagtaxonomy only - Known Spring 2026 context: forum_id=21929, group_id=5
Phases:
- Pre-flight — read guidelines, verify SSH, determine mechanism, collect content and context
- Prepare content — convert markdown to HTML, build @mention spans, resolve tag term IDs
- Confirmation gate — present full preview, wait for YES
- Execute — mechanism-specific PHP via
wp eval-file(temp file on server) - Verify — confirm post_parent, post_status, tags; confirm activity fields
- Clean up — remove temp files, report result, flush cache if needed
Available on: Patrick’s Mac, Asia’s Mac (requires SSH access to practice.baseworks.com)
/extract-frames
Section titled “/extract-frames”What it does: Extracts still frames (screenshots) from a local video file using ffmpeg. Designed for building the Baseworks photo repository from existing footage — session recordings, movement demonstrations, events, or any video on the hard drive. Claude gets video metadata, proposes an extraction plan, extracts frames, then reads them back for Patrick to review visually. Patrick selects the keepers; rejected frames are deleted. Output files are near-lossless JPEGs at full video resolution, ready to rename and hand off to /compress-photos for CDN upload.
Arguments: Path to a local video file (MP4, MOV, MKV, M4V, AVI, etc.)
Flags:
--every <seconds>— extract one frame every N seconds (default: auto-scaled by video length)--at <HH:MM:SS>— extract a single frame at a specific timestamp--range <start> <end>— limit extraction to a time range--scene— extract on scene changes rather than fixed intervals (good for diverse movement footage)--lossless— output PNG instead of JPEG (no chroma subsampling — use for print or archival; 10–25MB per frame at 4K)--burn-timestamp— burn the video timestamp into each frame’s corner (useful for locating moments to return to)--out <folder>— custom output folder (default:/tmp/bw-frames-<video-name>/)--quality <1-31>— JPEG quality, lower = better (default: 2, near-lossless); ignored when--losslessis set
Dependencies: ffmpeg and ffprobe — both already installed at /opt/homebrew/bin/ on Patrick’s Mac.
Phases:
- Pre-flight — verify ffmpeg/ffprobe, read video metadata (duration, resolution, fps, codec)
- Plan — propose extraction interval based on video length; wait for confirmation
- Extract — run ffmpeg with the chosen method (interval / timestamp / range / scene-change)
- Review — read all extracted frames; Patrick selects keepers; rejected frames deleted
- Handoff — list kept frames, suggest B2 destination category, remind to rename per Baseworks photo naming convention before running
/compress-photos
Available on: Patrick’s Mac (ffmpeg installed via Homebrew)
Globally Installed Skills
Section titled “Globally Installed Skills”These skills are installed at ~/.claude/skills/ on a machine — not inside the vault’s .claude/skills/. They’re available in every Claude Code project on that machine, not just vault sessions.
| Skill | Command | Setup Guide | Notes |
|---|---|---|---|
| Watch | /watch <url> | watch-skill-setup | Download a video, extract frames, pull transcript, answer questions about content. Installed on Patrick’s Mac. See setup guide to install on other machines. |
Related
Section titled “Related”- agent-system — broader Claude Code agent infrastructure docs
- _campaign-index — editorial calendar (uses the create-campaign skill)