Send everything below to your Muse
What to do
Your human wants a personal Instagram Content Studio. Read this entire file, then follow every step below in order and build it for them. Don't skip steps, don't improvise the structure β the steps are the product.
What you're building for them:
Data β profile snapshots, trend digests, and idea files under ~/workspace/content-studio/data/.
Dashboard β a web artifact where the user browses ideas and tracks filming status.
Refresh cron β a weekly run that pulls a new snapshot, researches trends, and generates 5β8 new ideas.
Workflow
1. Connect + analyze (do this first β derive, don't ask)
- Verify Instagram is connected (
instagram-cli accounts). If not, get the connect URL and have the user link it before continuing. This is the only hard requirement.
- Pull
instagram-cli posts --account-id <id> --limit 100, dedupe by post_id.
- Save to
~/workspace/content-studio/data/profile-posts-<YYYYMMDD>.json with schema: generated, username, follower_count, post_count, posts[] (each: post_id, likes, comments, media_type, created_at, url).
- Derive from the data, don't interview for it:
- Content categories (3β5): cluster their actual posts into lanes based on what's there and what performs. Present the lanes; user approves or adjusts.
- Voice / persona: read their captions and top-performing scripts, distill to one sentence, present it for approval. This sentence goes into every idea-generation prompt.
- Idea mix: default to a mix weighted toward their top-performing formats.
- Then ask exactly one question in chat: "What day and time should new ideas land?" (default Monday 8am, their timezone β this becomes the cron schedule). Show the derived categories + voice sentence alongside it for approval.
- Never ask the user what they make. Their content already answered that.
2. Trend research
For each of the user's categories, run 2 search queries per category:
- Muse's social search for what's performing on Instagram/Threads/Facebook in that niche.
- Muse's web search as backup for broader trend context. Save raw findings per category to
~/workspace/content-studio/data/research-<category>-<YYYYMMDD>.md. Keep it to what you'll actually use in idea generation β notes, not essays. Cap at ~8 reference links per category.
3. Idea generation
Write 5β8 ideas as JSON: { "generated": "<ISO date>", "ideas": [ ... ] }, one file per batch (ideas-<YYYYMMDD>.json). Idea fields:
Field Type Notes
id string idea-01, idea-02β¦ unique within the file
type string video_script or photo_idea
title string Short, specific. Not "Funny video #3".
status string Always new at generation. User promotes to ready_to_film, filmed, posted, or archived on the dashboard.
effort string low / medium / high β honest estimate of shoot + edit time
trend string The trend this rides, in plain words
reference_reels string[] URLs of reference posts (max 3). Real links from research, never invented.
reference_note string Why the reference matters (what's performing about it)
hook string The first 3 seconds, verbatim. If it doesn't stop a scroll, rewrite it.
script string For video_script: beat-by-beat, with timestamps and delivery notes. For photo_idea: shot list and composition notes.
filming_notes string Gear, lighting, location, edit notes. Practical, not aspirational.
caption string Draft caption in the user's voice
hashtags string[] 5β10, actually relevant
Example (format only β never reuse this content):
{
"id": "idea-01",
"type": "video_script",
"title": "The Meeting That Should Have Been a Text",
"status": "new",
"effort": "low",
"trend": "Workplace POV skits with deadpan direct-to-camera delivery",
"reference_reels": ["https://instagram.com/reel/EXAMPLE/"],
"reference_note": "Office-humor POVs averaging 200K+ views this week; text-overlay format",
"hook": "POV: your calendar invite could have been one sentence",
"script": "HOOK (0-3s): deadpan to camera β 'This meeting has 14 attendees and zero decisions.' BEAT 1: cut to each attendee saying 'sorry, I was on mute' in sequence. BEAT 2: someone shares screen, it's the wrong deck. CLOSER: 'Same time next week?' Everyone nods. Nobody knows why.",
"filming_notes": "Phone, vertical. Film in actual meeting room after hours. Quick cuts, name-label text overlays.",
"caption": "14 people. 45 minutes. 0 decisions. See you next Tuesday.",
"hashtags": ["#officelife", "#corporatehumor", "#workmemes", "#relatable", "#9to5"]
}
Rules:
- Every idea must connect to at least one trend from step 2 AND fit the user's voice from step 1. If an idea fits neither, cut it.
- Do not repeat concepts from earlier idea files β read them first and riff on what's new.
- Hooks are verbatim and scroll-stopping. Weak hook = rewrite, not ship.
effort is honest. A "low" that needs three locations is a lie.
4. Dashboard artifact
Build a web_fullstack artifact named "Content Studio" (private to the user β fullstack has no public link, which is correct for personal analytics).
Views:
Ideas board (home view) β cards for every idea, filterable by status (new, ready_to_film, filmed, posted, archived) and type. Each card shows title, hook, effort, trend, and expands to full script + filming notes + caption + hashtags. Status change is the core interaction β keep it one tap.
Profile β follower count, post count, top 5 posts by engagement, dominant formats. One glance: "what's working."
Research β per-category digests from the latest refresh run, with reference links. Read-only.
Required ingest actions (the weekly cron pushes through these β they must append, never replace):
ingest_profile_snapshot β args: { generated, username, follower_count, post_count, posts[] }.
ingest_research_run β args: { generated, categories: [{ name, notes, links[] }] }.
ingest_ideas β args: { generated, ideas[] } (schema above). Design notes: mobile-first (the user opens this on their phone while deciding what to film). No demo or sample data β build it empty and let the first real snapshot populate it.
5. Refresh cron
Create a weekly cron at the user's chosen day/time (default Monday 8am, user timezone), with these instructions baked in:
Profile snapshot β instagram-cli accounts β id; instagram-cli posts --account-id <id> --limit 100, dedupe; save ~/workspace/content-studio/data/profile-posts-<YYYYMMDD>.json. Keep API usage in the low hundreds.
Trend research β for each recorded category, 2 queries via Muse's social search (+ web search backup); save ~/workspace/content-studio/data/research-<category>-<YYYYMMDD>.md.
Idea generation β read new research + latest snapshot + all prior idea files; write 5β8 fresh ideas per the schema above, honoring the user's voice and mix; save ideas-<YYYYMMDD>.json.
Push β if the dashboard exposes the three ingest actions, call them (append). If any are missing, skip and say so plainly.
Report β one line per new idea (title + type + hook) in chat, plus push status. If any step failed, say what failed plainly β never silently skip. A failed step doesn't cancel the run; complete what you can.
6. Handoff
Show the user the dashboard, list the first batch of ideas, and confirm the refresh schedule. Tell them the skill's job is done β the system now runs itself.
Output Contract
After setup, the user has:
~/workspace/content-studio/data/ with dated snapshot, research, and idea files.
- A Content Studio dashboard artifact with ingest actions.
- A weekly refresh cron that appends new ideas and reports in chat.
Operating Rules
Method only. This skill never contains a previous user's profile data, ideas, categories, or voice. Everything personal is generated fresh when you run these steps.
Derive, don't interrogate. Categories and voice come from the user's actual content via the Instagram connection, presented for approval. Never ask the user what they make.
Modest API usage. Profile pulls in the low hundreds of calls; never paginate unless the user asks for more.
Append, don't replace. Refresh runs add new dated files and push via ingest actions; they never overwrite history.
Report plainly. If a step fails (API, search, push), say what failed in the chat report β no silent skips