Instagram skills
Skill sergebulaev/instagram-skills/.codex-marketplace/instagram-skills
Plan, draft, audit, and publish content for Instagram. Use when the user wants to write a caption with a first-125-char hook, plan a slide-by-slide carousel, reverse-engineer the hook from a viral Reel or carousel, size hashtags the 2026 way, remove AI tells from a caption, or plan a week of Reels and carousels. Instagram requires media on every post, so the skills write the caption and the user supplies the image or video; posts publish via the Publora API draft, upload, schedule flow.From its SKILL.md
npx -y skills add sergebulaev/instagram-skills --skill instagram-skillsAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
4 things to look at
- reads credentialsReads from 3 credential sources: `PUBLORA_API_KEY` and 2 more.
- 12 stars12 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
- runs commandsInstructs the agent to run 1 command, including `pip install -r requirements.txt`.
- fetches URLsInstructs the agent to fetch 1 URL, including https://publora.com.
SKILL.md
6.7 KB, ~1.6k tokens by cl100k_base, as published. Nobody here has run it
Instagram Marketing Skills
A bundle of 9 focused skills for Instagram content ops in 2026. Each skill is single-purpose, follows the draft then approval then publish pattern, and uses the Publora API for the media-required publish flow.
When to use this bundle
- Writing a caption (hook in the first 125 chars, body, CTA) -> use
ig-caption-writer - Planning a carousel slide by slide (hook slide to payoff slide) -> use
ig-carousel-planner - Reverse-engineering the hook from a viral Reel or carousel -> use
ig-hook-extractor - Sizing hashtags (the 3-5 niche/mid/broad reality, not 30) -> use
ig-hashtag-strategist - Removing AI tells from a caption, or auditing it before posting -> use
ig-humanizer(rewrite plus--mode audit, which folds in the post-audit sub-tool) - Planning a week of Reels, carousels, and stories -> use
ig-content-planner - Adapting cross-platform content (a LinkedIn post, blog, YouTube script, or X thread) into a native Instagram carousel or caption -> use
ig-repurposer - Auditing and rewriting the profile (photo, NAME field, bio, link, highlights, first-9 grid, pinned posts) -> use
ig-profile-optimizer - Reading your niche and profile stats from real data (scan a hashtag for what is working, pull follower/post stats for you or a competitor) -> use
ig-audience-insights
Core pattern
Every action-taking skill follows three steps:
- Parse the input. If the user gives an Instagram URL, the skill uses
lib/url_parser.pyto extract the username and shortcode. - Draft the content. The skill applies 2026 research (Instagram hook formulas, hashtag sizing, timing, voice rules, ranking heuristics) and shows the draft to the user.
- Wait for approval, then publish with media. Instagram needs an image or video on every post. The user supplies the media; on approval the skill runs the Publora draft then upload then schedule flow.
Media is required (read this first)
Instagram rejects text-only posts. The writer skills produce the caption, hook, hashtags, and slide or shot plan. The USER supplies the image or video file. The publish path is always:
1. create a draft (no scheduledTime) -> postGroupId
2. upload each media file to S3 (2-10 files for a carousel, in order)
3. update the post: status=scheduled + scheduledTime
lib/publora_client.publish_media_post(...) wraps all three steps. See
references/media-workflow.md for the full flow and limits.
Prerequisites
Three tiers - pick one.
Tier 0 - Draft only (default, no setup)
The skills work out of the box. No API keys, no signup. Every approved caption is returned as a copy-paste block with a reminder to attach your media in the Instagram app. Great for trying the skills before committing to any backend.
Tier 1 - Publora auto-post (recommended, ~2 min)
On approval, point the skill at your local media files and it uploads them and schedules the post via the Publora API.
- Sign up free: https://app.publora.com/signup
- Connect your Instagram Business or Creator account (Channels then Add Channel)
- Copy your API key from Publora's API panel
- Drop into
.env:PUBLORA_API_KEY=sk_... INSTAGRAM_PLATFORM_ID=instagram-... - Run
pip install -r requirements.txt
Why Publora: posting media to Instagram means creating a draft, getting a
pre-signed S3 URL, uploading each file, and only then scheduling, in that exact
order. Publora does that chain in one call (publish_media_post), so we did not
have to reimplement it.
Tier 2 - Build your own poster (advanced)
Prefer not to SaaS it? Ask Claude Code or Codex to build a custom poster on the
Instagram Graph API. Set INSTAGRAM_SKILLS_CUSTOM_POSTER=<your command> and the
skills invoke it on approval. Publora is the 2-minute path.
Account note
Instagram's publishing API needs a Business or Creator account. Personal accounts are not supported.
Voice rules (baked into every skill)
- No em dashes (
—), en dashes, or double dashes. Biggest AI tell. - Use
..or a line break as a soft pause when rhythm calls for it. - Capitalize all personal, company, and product names.
- Sentence starts can be lowercase (native caption voice); names stay capitalized.
- Avoid AI vocabulary:
leverage,fundamentally,streamline,harness,delve,unlock,elevate,foster. - Specific numbers beat adjectives. "47 minutes" beats "fast".
- One idea per caption. The first 125 chars carry the hook (the "more" fold).
- Hashtags are sizing, not volume: 3-5 sized tags, not 30.
(Canonical reference: references/voice-rules.md. See also
references/hook-formulas.md, references/algorithm-heuristics.md,
references/hashtag-strategy.md, and references/media-workflow.md.)
How Instagram URLs map
| URL shape | Parsed to |
|---|---|
https://www.instagram.com/p/SHORTCODE/ | shortcode, type post |
https://www.instagram.com/reel/SHORTCODE/ | shortcode, type reel |
https://www.instagram.com/USERNAME/ | username, type profile |
https://www.instagram.com/stories/USER/ID/ | username + id, type story |
lib.url_parser.parse_instagram_url(url) returns {username, shortcode, url_type, canonical_url}. A carousel shares the /p/ path with a single image;
the carousel is detected from the media, not the URL.
Known gotchas
- Media is mandatory. No image or video means no post. The skill returns the caption and reminds you to attach media.
- No mixed media in a carousel. All images or all video, never both.
- First 125 chars only. Everything after that is behind the "more" fold.
- Carousel is 2-10 items via the API (the native app allows 20).
- WebP auto-converts to JPEG at publish time.
- Business or Creator account required. Personal accounts cannot use the API.
Resources
- Publora API docs - endpoint reference for the publishing layer
lib/publora_client.py- Python client with the full media flowlib/url_parser.py- Instagram URL to username/shortcode parser
Acknowledgments
Publishing powered by the Publora REST API.
What ships with it: 16 files
77.6 KB alongside SKILL.md, 6 of them executable
.codex-plugin/
- plugin.json2.0 KB
lib/
- apify_client.pyruns7.1 KB
- approval.pyruns2.1 KB
- backend_selector.pyruns7.7 KB
- __init__.pyruns829 B
- publora_client.pyruns17.2 KB
- url_parser.pyruns5.0 KB
references/
- algorithm-heuristics.md7.7 KB
- hashtag-strategy.md4.4 KB
- hook-formulas.md11.4 KB
- media-workflow.md3.9 KB
- voice-profile.md1.2 KB
- voice-rules.md4.3 KB
- .env.example1.7 KB
- LICENSE1.0 KB
- requirements.txt38 B
Gives 0 of the 12 instructions most marketing audience skills give in ~1.6k tokens
Counted across 690 of the 894 authors here whose files we hold, read 2026-08-07
- Apply Poppins font to headingsin 41 of 690, across 6 files
- Apply Lora font to body textin 41 of 690, across 6 files
- Use Arial fallback for headingsin 39 of 690, across 4 files
- Use Georgia fallback for body textin 39 of 690, across 4 files
- Maintain text hierarchy and formattingin 39 of 690, across 4 files
- Use accent colors for non-text shapesin 38 of 690, across 3 files
- Use RGB values for precise color matchingin 38 of 690, across 3 files
- Use brand colors for primary text and backgroundsin 36 of 690, across 1 file
- Read product marketing context file before asking questions, starting, or auditingin 35 of 690, across 23 files
- Use active voice instead of passive voicein 26 of 690, across 10 files
- Implement or generate appropriate JSON-LD structured datain 24 of 690, across 17 files
- Prioritize clarity over clevernessin 22 of 690, across 8 files
Said here and by no other author read
- draft content before uploading or scheduling
- place one idea per caption
- capitalize personal, company, and product names
- use two to ten media files per carousel
- wait for user approval before publishing
- parse Instagram URLs to extract usernames and shortcodes
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.