linkedin-guest-kit
Skill0 starsChanged 25 days agoMITView on GitHub
Build a share kit that a podcast guest can actually post — several LinkedIn post options written in the guest's own voice from the episode transcript, plus portrait graphics with their face on them, generated with Google's Nano Banana image models. Invoke on 'linkedin kit for <guest>', 'post options for our podcast guest', 'guest promo assets', 'help our guest share the episode', 'linkedin graphics for this episode'. Copy-only requests use Steps 1–3 and skip generation. Not for the host's own posting schedule, LinkedIn ads, or company-page content.
- Reads credentials
In this repository22 other files it gives its agents.
- ai-writing-tellsSkill
- animated-explainerSkill
- ann-handleySkill
- buyer-personasSkill
- desktop-mockupSkill
- mobile-mockupSkill
- pesty-asana-tasksSkill
- pesty-designSkill
- pesty-explainerSkill
- pesty-frontendSkill
- presentation-structureSkill
- problem-solving-processSkill
- pyramid-principleSkill
- scrSkill
- storybrandSkill
- storytellingSkill
- transcript-cleanupSkill
- ui-designSkill
- untangleSkill
- website-launch-impact-reportSkill
- youtube-thumbnailsSkill
- yt-structureSkill
The file
We split this skill into the rules it gives an agent
7 rules. About 0 are common, 5 are distinctive, and 2 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈5
Distinctive · estimate
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 27
Read it and pull out, quoting the transcript line for each:
- Very specific: line 38
Read references/post-frameworks.md first — hook types, structure, formatting, length, and the guest-specific rules live there.
- Distinctive: line 40
Write three options on three different hooks, not one post in three outfits.
- Distinctive: line 52
Check every option; fix or cut what fails:
- Very specific: line 81
Write prompts from references/image-prompt-template.md, then:
- Distinctive: line 97
Look at every render yourself before showing anyone: Check in order:
- Distinctive: line 101
No exemption for accent-coloured, "decorative," or emphasis text.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
linkedin-guest-kit
Overview
A guest agrees to share the episode. Then nothing happens — because sharing means writing a post from scratch and finding an image, and that is real work you quietly handed to a busy person.
This skill removes the work. The deliverable is one folder link containing post options they can paste and graphics they can attach.
Core principle: the guest is the author, not the subject. Everything reads as though they wrote it — their claims, their numbers, their phrasing. The host earns one natural mention. A kit that sounds like the show's marketing team gets politely ignored, and the guest's own credibility is the entire reason their audience stops scrolling.
Inputs to collect before starting
- The episode transcript. Non-negotiable — it is the only legitimate source of the guest's voice and every number you will use. The
yt-structureskill in this repo pulls captions from a URL. - The live episode links — every platform it's actually on. Verify each one resolves to this episode before it goes in a deliverable.
- A photo of the guest — one clear front-facing shot. Their site's about page usually beats the headshot in your files; compare and take the sharper one.
- 1–2 style references — past thumbnails or graphics from the show, so the kit looks like the brand.
- The guest's exact name and title, as they write it. Check their own site, not your CRM.
- Gemini API key — in
GEMINI_API_KEYor at~/.gemini_api_key, from a billing-enabled project (image models have no free tier). From zero: create a key at aistudio.google.com/apikey, click Set up billing, thenecho '<key>' > ~/.gemini_api_key && chmod 600 ~/.gemini_api_key.
Step 1 — Mine the transcript
Read it and pull out, quoting the transcript line for each:
- Numbers — every figure the guest stated, with its exact wording and what it actually refers to.
- Quotable lines — sentences that survive on their own, stripped of speech filler but not reworded.
- The named story — a specific client, result, or moment. This is usually the strongest post.
- The contrarian claim — where they disagreed with how the industry does it.
Build a numbers ledger before writing anything. Every figure in the finished kit must trace to a line in this ledger, and each number must mean in the post exactly what it meant in the episode. Two figures that sound alike are the classic trap — "two to three weeks to get set up" is not the same claim as "schedule two to three weeks out," and swapping them puts a false statement under the guest's name.
Step 2 — Draft the post options
Read references/post-frameworks.md first — hook types, structure, formatting, length, and the guest-specific rules live there.
Write three options on three different hooks, not one post in three outfits. This combination covers most episodes:
| Option | Hook type | What it is |
| A | Counter-narrative | Names something the audience can't answer about their own business |
| B | Value / teaching | The numbers or steps, listed — the most saveable and shareable |
| C | Story | A named result, ideally one that didn't require buying anything |
Label each with its angle and when to pick it, so the guest can choose without reading all three.
Step 3 — Gate the copy
Check every option; fix or cut what fails:
- The hook works alone, in 1–2 lines, before "see more"
- The post opens with the guest's expertise — never "I was a guest on…"
- It sounds like the guest, using phrases they actually said
- Every number traces to the ledger and means the same thing it meant on the episode
- The host is credited once, naturally, and is not the hero
- One clear question at the end, answerable in a sentence
- Well under 250 words, long enough to trigger "see more"
- No claim about the guest's product the transcript doesn't support
Step 4 — Generate the graphics
Three concepts, so the guest has a genuine choice rather than three near-identical files:
| Concept | Build |
| Hook card | Guest large, one big headline stack, one supporting graphic |
| Quote card | Their strongest line set large, small circular portrait + name/title |
| Numbers card | 3 benchmark rows, small circular portrait + name/title |
Clean the reference photo first. If it has sunglasses on the head, a hat, a busy background — fix that on the source photo in its own edit pass before any compositing. Attributes that survive into a composite are far harder to remove later, and editing a finished composite tends to wreck it.
Read the colour contract at the top of references/image-prompt-template.md before writing
a prompt. The short version: the accent colour is a background, never a foreground, and every
text element clears 4.5:1. If your brand has a design system, it almost certainly already says
this — Pesty's pesty-design skill mandates WCAG AA 4.5:1 on all text, and these graphics are
covered by it.
Write prompts from references/image-prompt-template.md, then:
scripts/generate.py --aspect 4:5 --model gemini-2.5-flash-image \
--prompt concept.txt --refs guest_clean.png style_ref.jpg --out out/draft --n 24:5 portrait is the format — it takes the most vertical space in the mobile feed. Reference-image order matters; prompts refer to "attached photo 1", "attached photo 2" by position. Run with --help for all flags.
| Model | Use for | ~Cost |
gemini-2.5-flash-image | drafts, reference-photo cleanup, edit passes | $0.04 |
gemini-3-pro-image-preview | finals at 2K, best text rendering | $0.13–0.24 |
Step 5 — Review, finish, size
Look at every render yourself before showing anyone. Check in order:
- Text — exact spelling, no duplicated or dropped words (the #1 failure mode)
- Contrast — every text element clears 4.5:1 against what sits directly behind it. No exemption for accent-coloured, "decorative," or emphasis text. Measure it, don't eyeball it — sample the glyph and background pixels and compute the WCAG ratio.
- Size — the smallest text is at least 3% of frame height (~45px at 1200×1500). Below that it renders under ~19px in the mobile feed and stops being readable.
- Likeness — recognizably the guest, and still wearing what they wore in the source photo
- Collisions — no head, hair, or graphic touching any letter
- Logo — present and actually the brand's mark, not an invention
Checks 2 and 3 are pass/fail numbers on purpose. They replaced a "does this look legible?" judgement that shipped a 2.31:1 element because it got logged as a cosmetic preference.
scripts/contrast.py does check 2 for you — it exits non-zero on a failure, so it can gate a
build rather than rely on someone remembering:
scripts/contrast.py out/final.png --accent "#D90429" # scan a card for accent-on-dark text
scripts/contrast.py --pair "#FFFFFF" "#D90429" # check any two coloursIt distinguishes a red block (correct) from red letters (the defect) by asking what each accent region encloses — a block has pale letters sitting inside it, letterforms enclose the dark page background. Verified 8/8 on the known-good and known-bad Ep 31 cards.
It checks the accent trap and nothing else. A PASS says no accent letterforms; it says nothing about spelling, likeness, collisions, or a leaked face — one card in testing passed contrast cleanly while rendering the wrong labels and a face borrowed from the style reference. Checks 1 and 4–6 are still yours to make.
Then: re-render the approved image on the Pro model at 2K, resize to 1200×1500, and view it again at ~400px wide. If a headline doesn't survive that, it fails — the phone feed is the viewing environment.
Two failure modes worth pre-empting:
- The Pro "reproduce exactly" pass can recompose, sliding a face into text that was clear in the draft. Always re-review the final; never assume it matches the approved draft.
- Never fix a botched render with another edit. Go back to the newest image that predates the defect and redo that step with a tighter prompt. If a layout keeps colliding, don't ask for "less overlap" — divide the frame into explicit zones and forbid crossing them.
Step 6 — Deliver as one folder
The guest gets one link, not an email of attachments and instructions.
- A doc holding all three options as clean copy-paste blocks, which image pairs with which, every episode link, and short posting notes.
- The graphics as image files in the same folder.
- Framing throughout: optional, editable, theirs. Offer to change anything.
Confirm the guest can actually open the link before it is sent. A folder on a company shared drive is invisible to outsiders by default — they land on "request access," which converts a favor into a chore. Check sharing and fix it, or the whole kit fails at the last step.
Gotchas
| Symptom | Cause / fix |
| Image models 429 with "limit: 0" while text calls work | Image generation has zero free-tier quota — the key's project needs billing enabled. Text calls succeeding proves nothing. |
| 403 right after enabling billing | Propagation lag (~1–5 min). Poll with a cheap call until 200. |
| Guest's photo is small (400px) | Their site's about page usually has a better one. Generation tolerates ~600px; below that, likeness drifts once the face is rendered large. |
| Episode number differs between systems | Publishing platforms and internal folders drift apart. Verify against what's actually published — and keep episode numbers out of the post copy, where they buy nothing and can be wrong. |
| Logo comes out almost-right | Models approximate logos from style references. Regenerate, or patch the real logo in post. |
| Output is 1152×896 or similar | Expected — models render on their own grid. Resize after. |
Common mistakes
| Mistake | Fix |
| "I had a great time on the [show] podcast!" as the opener | Lead with the guest's strongest claim; mention the show near the CTA |
| Three posts, one hook | One hook per option, from different material in the transcript |
| Sharpening a number for punch | Only what's in the ledger, meaning what it meant on the episode |
| Marketing-team voice | Rebuild from phrases the guest actually said |
| Shipping renders unviewed | Read every image — text corruption and likeness drift are common |
| Sending a link the guest can't open | Verify access from outside the org before sending |
| Logging a contrast failure as a "cosmetic nit" | Measure it. Under 4.5:1 is a defect, not a preference — and a reviewer who downgrades it is how the defect ships |
| Setting a word in the accent colour for emphasis | Accent is a background. Put a block behind the word and set the word in white — see the colour contract in references/image-prompt-template.md |
Maintained by Pesty Marketing · Browse the full skill catalog.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

