Content & design skills
Content & design/linkedin-post [topic]Content
What it is. Drafts a single LinkedIn post in the operator's authentic voice: a standalone hook, an observation-to-insight arc, and a thought-provoking close (no CTA).
What it does. Reads the voice guide, a best-example archive post, and business-positioning context, then validates any specific facts against the datastore before drafting. It produces the post plus two alternative openers, three to five hashtags, a recommended posting time, and a one-line cut suggestion. It is read-only (allowed tool: Read) and never publishes.
How to use it. Use for one post. For a multi-post plan across a theme use /linkedin-series; to file a post after publishing use /linkedin-archive.
/linkedin-post the category we are creating
"draft a post about data sovereignty"
Customize. Voice via reference/misha-voice.md; brand facts via context/business-info.md and datastore/. Length variable (short/medium/long, default medium). Per-exec overrides resolve at Phase 0 through scripts/resolve_customization.py (activation steps, persistent facts, output paths); see config/skill-custom/README.md.
/linkedin-series [theme]Content
What it is. Plans a multi-post LinkedIn content series around one theme or strategic moment, in the operator's voice.
What it does. Reads the voice guide, an example post, strategy, and current milestones, then produces a series overview, per-post angle/hook/proof-point/hashtags, the narrative arc, and a ready-to-publish draft of Post 1. It keeps an append-only session memory via scripts/memlog.py at outputs/content/linkedin/[theme-slug]/.memlog.md so the plan survives context compaction and resumes across sessions.
How to use it. Use to plan several connected posts around a strategic moment. For a single standalone post use /linkedin-post.
/linkedin-series the DPI category we are creating
"plan posts for the week"
Customize. Variables for post count (default 4), timeframe, and goal. Voice via reference/misha-voice.md; alignment inputs via context/strategy.md and context/current-data.md. The .memlog.md is gitignored working memory, not a deliverable.
/linkedin-archive [slug]Content
What it is. Files a just-published LinkedIn piece (article, post, or comment) plus any attached images out of staging and into the typed datastore archive.
What it does. Auto-fires on English or Russian "I published it on LinkedIn" phrasing. It resolves content type (from filename/frontmatter or an AskUserQuestion prompt) and any image paths, runs a dry-run via scripts/linkedin-archive.py, shows the plan, then waits for approval before moving files (with optional auto-commit). It moves exactly one piece per invocation and reports the destination folder, file count, and commit hash.
How to use it. Use right after publishing to file the content. For drafting a post use /linkedin-post; this skill never drafts.
/linkedin-archive my-post-slug
"I published this on LinkedIn"
Customize. Flags on the script: --type (post/article/comment), one or more --image <path>, --execute, and --commit for auto-commit. Confirm step is mandatory and cannot be skipped; there is no --undo flag.
/keynote-deck [event] [topic]Content
What it is. Produces a slide-by-slide presentation script for an event, VIP meeting, or government engagement, each slide carrying a title, key message, content, and speaker notes in the operator's voice.
What it does. Reads business, current-data, market, geopolitical, strategy, and voice context, then builds the deck in six phases (opening hook, problem, solution, proof, future, close plus CTA). Slide count follows a duration rule (about 1 minute per slide for technical content, 2 for storytelling). Proof-point figures are pulled live from context/current-data.md rather than hardcoded. It outputs the structure and speaker script only; it does not render the file.
How to use it. Use for event and conference speaking decks. For an investor fundraising deck use /investor-pitch; to render slides as a PPTX use /pptx-generator.
/keynote-deck expo sovereign DPI for telcos
"prepare a speaking deck for the conference"
Customize. Variables for event, audience, topic, duration (drives slide count), and context. Grounding files: context/business-info.md, context/current-data.md, reference/dpi-market-intelligence.md, reference/geopolitical-landscape.md, reference/misha-voice.md.
/image-prompt [content to visualize]Content
What it is. Turns content you just produced (post, article, email, slide copy) into a 50 to 150 word photorealistic text-to-image prompt for Midjourney, DALL-E, or Stable Diffusion.
What it does. Reads the preceding text, distills the central idea, extracts visual elements against a content-type-to-visual-language map (maritime, product/technical, sovereignty, etc.), sets the mood, and constructs the prompt. It returns the core theme, the prompt, parameters (16:9, photorealistic, no text), and a Midjourney suffix. Default brand palette: deep blues, teals, warm amber accents. Text only, no image file.
How to use it. Use to get a prompt for a visual companion to content. To actually render the image use /flux-image; for full design work (mockups, infographics, logos) use /design.
/image-prompt visualize the post about navigation and heading
"generate an image prompt for this article"
Customize. Per-platform suffixes in references/platforms.md. The output format (core theme, prompt, parameters, Midjourney suffix) and the never-include list (text, logos, stock clichés, military, dystopian imagery) are fixed by the skill.
/flux-image [prompt]Content
What it is. Generates real image files on disk from a text prompt via the Replicate API, using Nano Banana 2 (Google DeepMind, default) or FLUX.2 max (Black Forest Labs).
What it does. Runs generate_image.py, which loads REPLICATE_API_TOKEN from .env and calls Replicate, saving to the resolved DATA outputs directory. It resolves an absolute output path via get_outputs_dir() so images never land in the engine tree. Under SENSITIVE_MODE (fail-closed default) it strips all project-identifying detail from the prompt before the API call; only the prompt leaves the machine, the file stays local.
How to use it. Use when you want an actual picture produced. To craft the prompt only use /image-prompt; for a full multi-asset design pipeline use /design.
/flux-image a helm at golden hour over open water, 16:9
"create an image for the announcement"
Customize. REPLICATE_API_TOKEN in .env. Script flags: --model banana|flux-max, --aspect-ratio (1:1, 16:9, 21:9, 9:16, and more), --num-outputs 1-4, --format png|jpg|webp, --seed. Model details in references/models.md.
/design [type] [brief]Content
What it is. A professional design studio for social graphics, infographics, UI mockups, cards, brochures, logos, and AI imagery, routing each task to the optimal pipeline.
What it does. Three pipelines: HTML Studio (free, deterministic layout/text/data work via scripts/design-studio.py render with brand CSS injected), Replicate AI (creative imagery and native SVG vectors via scripts/design-engine.py generate|edit|upscale|remove-bg across models like recraft-v4, flux-2-pro, recraft-v4-svg, ideogram-v3, flux-schnell, kontext), and Document Production (redirects decks to /pptx-generator, PDF from HTML via the design studio). HTML renders save to outputs/design/ with source in outputs/design/source/; AI images to outputs/content/images/. Under SENSITIVE_MODE it strips identifying detail from any external prompt.
How to use it. Use for any branded visual asset. For a simple one-off image from a prompt use /flux-image; for presentation slides use /pptx-generator.
/design infographic sovereign DPI adoption by region
"design a logo concept for the platform"
Customize. Brand system in references/brand.css (dark theme, Inter font, accent colors); color source of truth .claude/skills/pptx-generator/brands/31c/brand.json. Per-command model choice and standard dimensions table (LinkedIn, Instagram, A4, and more); model registry in references/models.md. REPLICATE_API_TOKEN in .env for the AI pipeline.
/pptx-generator [brand] [topic]Content
What it is. Generates and edits on-brand presentation slides as PPTX files (PowerPoint, Google Slides, and Keynote compatible), builds square LinkedIn carousels exported to PDF, and manages reusable cookbook layouts.
What it does. Built on python-pptx. It reads the brand config (brand.json, config.json) and all cookbook layout frontmatters, presents a written slide plan with variety checks, then generates in batches of 5 slides maximum, validating after each batch (backgrounds set on every slide, no duplicate titles, correct colors) and combining into one final file with part files deleted. Three modes: presentation slides, LinkedIn carousels (1:1 to PDF), and layout CRUD.
How to use it. Use for editable branded decks, carousels, or layout work. For non-slide visuals use /design; for a quick markdown-driven internal deck use /marp.
/pptx-generator 31c sovereign DPI overview
"create a linkedin carousel about data sovereignty"
Customize. Per-brand configs under .claude/skills/pptx-generator/brands/{brand}/ (colors as hex without #, fonts, asset paths, output dir, naming); reusable layouts in cookbook/*.py with TOML frontmatter. Reference workflows in references/ (layout-guide, generation-workflow, brand-setup, carousel-workflow, layout-crud, technical-reference).
/marp [new <topic> | render <path> | from <path> | watch <path>]Content
What it is. A markdown-driven presentation pipeline that renders branded PDF and HTML (not editable PPTX) from MARP source.
What it does. Four subcommands via scripts/marp_render.py: new drafts a full deck from a topic prompt then renders; render renders existing MARP source; from transforms any workspace markdown into slides in-memory (strips frontmatter and wiki-links, inserts slide breaks, auto-adds cover and closing) without mutating the source; watch gives live hot-reload preview. It uses a single-file dual-mode 31C theme with 7 layouts (themes/31c.css.tmpl) and workspace-aware mode defaults per source location. Every render reports hidden-character sanitizer status.
How to use it. Use for internal decks, runbooks, state checks, and knowledge renders. For an editable brand-heavy client deck or a LinkedIn carousel use /pptx-generator.
/marp from context/strategy.md
"render this as a deck"
Customize. Theme template .claude/skills/marp/themes/31c.css.tmpl (7 layouts, per-slide _class directives). Flags: --slides N, --mode dark|light|mixed, --break-at h2|h3|manual, --title/--subtitle, --images png, --pdf-only/--html-only, --output. Frontmatter fields (theme, size, class, footer, classification). Self-test: python3 scripts/marp_render.py --self-test.
/pencil-export <path-to.pen> [--formats png,pdf,html,pptx,pptx-flat]Content
What it is. Exports a Pencil .pen design deck to per-slide PNG, a 16:9 PDF, an editable PPTX, and a portable self-contained HTML. It exists because the Pencil MCP export_nodes tool (native PNG/PDF) is broken on WSL: its bundled path translator prepends \\wsl.localhost\<distro>\ inconsistently and cannot write per-slide images from a WSL-resident deck. The MCP export_html tool in the same server resolves paths correctly, so this skill uses it as the seam.
What it does. Two steps. First the agent calls export_html to dump all slide frames to one HTML written inside the deck's pencil/ dir, so relative image fills resolve. Then scripts/pencil-export.py renders each Slide-* frame in isolation via chromium (sibling frames hidden, so overlapping absolutely-positioned frames cannot bleed into a neighbour), and assembles the requested formats. PPTX defaults to the editable twin: each slide becomes a text-less background render plus native, editable PowerPoint text boxes laid on top at the extracted coordinates, size, colour, and alignment. The brand fonts are embedded into the file (the PowerPoint "Embed fonts" OPC structures, written directly at the OpenXML package layer, TTF/OTF only), so it opens identically without the fonts installed and never round-trips through LibreOffice, which would drift the layout. Branding, graphics, images, and table grids stay baked into the background.
How to use it. Open the target .pen as the active editor in the Pencil desktop app, then run the skill. For a markdown-driven deck use /marp; for an editable brand PPTX authored from scratch use /pptx-generator.
/pencil-export outputs/.../deck.pen
"export the pencil deck to pdf and an editable pptx"
Customize. Flags on scripts/pencil-export.py: --formats (subset of png,pdf,html,pptx,pptx-flat; pptx-flat alias pptx-image writes the locked-look image-per-slide deck as <stem> (ready to be shared with the world).pptx, byte-frozen and needing no fonts installed), --fonts-dir (brand typefaces to embed), --width/--height (default 1920x1080), --scale (default 2), --image-format jpeg with --quality (default 85) to shrink a heavy deck to a few MB in one pass, and --keep-in-bg <Name> to keep a named decorative component baked into the background. Requires playwright (chromium) and python-pptx.