agentleFS
postzen-devpostzen-dev/instagram-agent-skill/skills/ig-audit/SKILL.md

ig-audit

Skill34 starsChanged 29 days agoMITView on GitHub

Post-mortem on what the user has already posted - which reels actually worked, why, and what to stop making. Use when the user pastes their Instagram insights or past posts, or has PostZen connected, and asks "what's working", "why did this flop", "read my analytics", "audit my content", or wants to know what to do more of.

9 other projects use a version of this, 7 of them edited.

Adopted by

Most recently taken up by

The file

We split this skill into the rules it gives an agent

5 rules. 3 are common, 1 is distinctive, and 1 is very specific to this project.

  • 3

    Common

    Most of the 9 edited versions we read keep these.

  • 1

    Distinctive

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Common:

    Ask for whichever the user has:

    line 19
  2. Distinctive:

    If the PostZen MCP tools are in this session, most of the numbers come from there and the user only screenshots what the API does not carry.

    line 32
  3. Very specific:

    If the last month looks thin, syncExternalPosts({ accountId }) pulls the latest 20 posts from the last 30 days on demand.

    line 44
  4. Common:

    Hold at 3 seconds: If the top and bottom differ here, it is the hook and nothing else, and everything downstream is a distraction.

    line 100
  5. Common:

    Day and time: Check this last and only if the others show nothing.

    line 107

“Common” is measured: kept by at least 6 in 10 of the 9 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

ig-audit

The only honest source of what works for an account is that account. Every rule in every Instagram guide, including the ones in this pack, is a prior. The user's own last 30 posts are the evidence.

Input

Ask for whichever the user has:

  • Insights per post: views, reach, interactions, watch time, saves, shares, follows, and the non-follower share of reach. Screenshots are fine.
  • Or the retention graph for their best and worst recent reels. This one screenshot is worth more than the rest combined.
  • Or just the posts and their view counts, which is enough for a first pass.

Also read ~/.instagram-agent/log.md if it exists, since it records which hook formula each post used.

Pulling it yourself through PostZen

If the PostZen MCP tools are in this session, most of the numbers come from there and the user only screenshots what the API does not carry.

  1. listAccounts({ platform: "instagram" }) for the account _id.
  2. getAnalytics({ platform: "instagram", accountId, source: "all", fromDate, toDate, limit: 100, sortBy: "date" }). Per post you get content, publishedAt, mediaType (image, video, carousel), platformAnalytics[].platformPostUrl, and analytics with views, reach, likes, comments, shares, saves, engagementRate. Page with page if pagination says there is more. source: "all" includes posts published by hand, which PostZen imports going back up to 366 days from when the account was connected. Date ranges are clamped to 366 days. If the last month looks thin, syncExternalPosts({ accountId }) pulls the latest 20 posts from the last 30 days on demand.
  3. getDailyMetrics({ platform: "instagram", accountId, fromDate, toDate }) for the week-by-week shape. These are post metrics summed by publish date, not account insights. attribution: "received" puts the numbers on the day they were observed instead.
  4. getFollowerStats({ accountIds: "<_id>", fromDate, toDate }) for the follower curve. accountIds is a comma-separated string, not an array. PostZen reads only the current follower count from Instagram and builds the history from its own snapshots, so expect the curve to start at the connection date. A week-old connection has a week of points.
  5. getPostTimeline({ postId }) for one post's day-by-day numbers when the question is how long a reel kept travelling.

Three things about these numbers:

  • impressions is a copy of views; Instagram retired impressions.
  • clicks is always 0 for Instagram. It is not reported, so it is not a real zero.
  • engagementRate is (likes + comments + shares + saves) / views × 100. Useful for ranking, but it is not the Instagram app's number.

What still needs a screenshot, because the API does not expose it to anyone: the retention graph and hold at 3 seconds, average watch time, non-follower share of reach, follows per post, profile visits, link taps, and every story metric (story insights expire after 24 hours and PostZen skips them). Ask for the retention graphs of the best and worst three; that is still the most valuable input on the page.

What to actually measure

Raw views is the least useful number on the page, because it is mostly a function of how many people already follow the account. Compute these instead and show the working:

metrichowsourcewhat it tells you
Outlier multipleviews / the account's own median viewsPostZen or screenshotwhether this was a real hit or a normal day
Non-follower reach% of reach from people who do not followscreenshot onlywhether it travelled at all
Hold at 3sviewers still there at 3s / viewers who startedscreenshot onlywhether the hook worked. This is the hook's grade.
Average watch timestraight from insightsscreenshot onlywhether the middle worked
Sends per reachshares / reachPostZen or screenshotthe strongest single signal you can earn. A send is a person putting their name on it.
Saves per reachsaves / reachPostZen or screenshotwhether it was worth keeping. Carousels live on this one.
Follows per reachfollows / reachscreenshot onlywhether the profile converted the attention

Rank by outlier multiple and sends per reach, not views. A reel with 4,000 views and 90 sends beat the one with 60,000 views and 11. With PostZen data alone you can rank every post on the first, fifth and sixth rows and the engagement rate, which is enough for a first pass. Say which rows are missing rather than filling them in.

Then find the pattern

With the top five and bottom five side by side, look for what separates them, and be willing to conclude something the user will not like:

  • Hold at 3 seconds. If the top and bottom differ here, it is the hook and nothing else, and everything downstream is a distraction.
  • Hook formula. Which ids from ig-reel/hooks.json are in the top five?
  • Format. Reel, carousel, single image.
  • Length. Group into under 15s, 15 to 30s, 30 to 60s, over 60s.
  • Theme.
  • Whether the user replied to comments in the first hour.
  • Day and time. Check this last and only if the others show nothing. It is almost never the cause and it is where people want it to be.

State the finding as a claim with the evidence attached, and say how confident it is. With 30 posts you can see a pattern. With 6 you cannot, and saying so is better than inventing one.

The distinction that saves people months

A reel that gets views and no follows is not a failed reel, it is a profile problem. A reel that gets no views is a hook problem. Separate the two before recommending anything. If non-follower reach is high and follows per reach is low, stop rewriting hooks and go to /ig-profile.

Output

AUDIT  ·  31 posts  ·  Jun 12 - Sep 5  ·  median views 4,100

TOP 5 BY OUTLIER MULTIPLE
  18.2x  #3  Nobody Tells You   74,600 views  62% non-follower  hold@3s 71%  128 sends
   6.4x  #1  Cost Confession    26,300 views  48% non-follower  hold@3s 64%   71 sends
  ...

BOTTOM 5
   0.3x  #11 Numbered            1,200 views  9% non-follower   hold@3s 31%    2 sends
  ...

WHAT THE DATA SAYS
1. Hold at 3 seconds is the whole story. Top five average 66%, bottom five 33%.
   Everything else you are worried about is downstream of the first two seconds.
2. The posts where you were the one who looked bad: mean 8.1x vs 0.9x for
   everything else. n=5. Strongest signal here and it is not close.
3. Tool listicles get views and nothing else. High reach, no sends, no follows.
   Three of your bottom five.
4. Day of week shows nothing. Your Tuesday and Friday means are inside the
   noise. Stop optimising it.

STOP: listicles.
DO MORE: the ones with a cost you paid and a number attached.

Then hand the conclusions to /ig-plan so next week is built on the user's own evidence rather than on defaults, and to /ig-viral so the swipe file gets filtered to the formulas that work for this account specifically.

Download now (ZIP)

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.