Bulkpublish Social Scheduling
davepoon/buildwithclaude
Schedule, publish and analyze social posts across 15 networks via BulkPublish (MCP or REST) — Facebook, Instagram, X, TikTok, YouTube, Threads, Bluesky, Pinterest, Google Business, LinkedIn…
A skill your agent uses when wiring an agent into Instagram's Graph API: publishing a Reel through the create/poll/publish container dance, reading per-media insights, checking the 24h publish cap…
$ npx skills add ericrisco/rsc-harness --skill instagram-api -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install ericrisco/rsc-harness instagram-api --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/instagram-api .claude/skills/instagram-api && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "instagram-api" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/instagram-api into .claude/skills/instagram-api/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "instagram-api", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/ericrisco/rsc-harness/tree/main/skills/instagram-apiType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add ericrisco/rsc-harness --skill instagram-api -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install ericrisco/rsc-harness instagram-api --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/instagram-api .agents/skills/instagram-api && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "instagram-api" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/instagram-api into .agents/skills/instagram-api/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "instagram-api", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add ericrisco/rsc-harness --skill instagram-api -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install ericrisco/rsc-harness instagram-api --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/instagram-api .cursor/skills/instagram-api && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "instagram-api" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/instagram-api into .cursor/skills/instagram-api/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "instagram-api", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/ericrisco/rsc-harness.git --path skills/instagram-api--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add ericrisco/rsc-harness --skill instagram-api -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install ericrisco/rsc-harness instagram-api --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/instagram-api .gemini/skills/instagram-api && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "instagram-api" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/instagram-api into .gemini/skills/instagram-api/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "instagram-api", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install ericrisco/rsc-harness instagram-apiInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add ericrisco/rsc-harness --skill instagram-api -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/instagram-api .github/skills/instagram-api && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "instagram-api" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/instagram-api into .github/skills/instagram-api/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "instagram-api", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add ericrisco/rsc-harness --skill instagram-api -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install ericrisco/rsc-harness instagram-api --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/instagram-api .opencode/skills/instagram-api && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "instagram-api" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/instagram-api into .opencode/skills/instagram-api/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "instagram-api", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
instagram-apiA skill your agent uses when wiring an agent into Instagram's Graph API: publishing a Reel through the create/poll/publish container dance, reading per-media insights, checking the 24h publish cap…
Instagram API is an agent skill from ericrisco/rsc-harness. Use when wiring an agent into Instagram's Graph API: publishing a Reel through the create/poll/publish container dance, reading per-media insights, checking the 24h publish cap, or ingesting Reel metrics into 02-DOCS/wiki/shortform. NOT TikTok (that is tiktok-api), NOT YouTube (that is youtube-api), NOT cross-platform cadence (that is social-publisher).
Its SKILL.md is about 3.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 8 other files, including scripts and reference files (for example `evals/README.md`, `evals/cases.yaml` and `references/insights-metrics.md`).
It sits in Marketing & SEO, covering Social publishing and cross-posting. It works with Instagram, YouTube and TikTok. The repository describes itself as: Your agent invents things because it has no memory, and can't touch your database because it has no arms. rsc is the meta-harness that gives it both, plus the trade to know the… The licence is MIT.
Read from SKILL.md and the folder at commit 92fde8f. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/ (Shell), which the agent can run.
Shell commands in SKILL.md call:
curlFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
instagram.comFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
IG_ACCESS_TOKENFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Instagram API loads about 3.1k tokens when it runs, and up to ~5.2k if it reads all its reference files. Until then it costs about 94 tokens; SKILL.md has 1,017 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from ericrisco/rsc-harness at commit 92fde8f, republished under its MIT licence (© ericrisco). 1,017 words, ~3,126 tokens.
.claude/skills/instagram-api/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.The wire between an agent and Instagram's Graph API: publish Reels, pull the metrics that still exist, and write them to the wiki. You speak HTTP, OAuth scopes, container IDs, and metric names. You do not decide what to post, write the caption's voice, or cut the video — route those out.
All facts below are pinned to Graph API v25.0 (current as of 2026-06-02). When you generate code, pin the version explicitly; Meta breaks metrics on version boundaries.
| The ask | Skill |
|---|---|
| Post the same clip to TikTok | tiktok-api |
| Upload to YouTube / pull YouTube stats | youtube-api |
| Cadence, best-time, multi-platform calendar | social-publisher |
| What to make / shortform content strategy | shortform-strategy |
| Hook, cuts, on-screen captions | video-shorts |
| Generic OAuth/webhook plumbing not IG-specific | api-connector-builder |
You cannot publish from a personal account. Confirm these before writing any call.
graph.facebook.com.graph.instagram.com.
Why: the host is not interchangeable per call; mixing tokens and hosts throws auth errors.instagram_business_content_publish to publish, instagram_business_manage_insights to read metrics. Why: the old instagram_basic / instagram_content_publish were deprecated 2025-01-27 and silently grant nothing now.Env block — generate code that reads these, never hard-code the token:
export IG_USER_ID="17841400000000000" # the IG professional account id (NOT the page id)
export IG_ACCESS_TOKEN="EAAG...long-lived" # 60-day token, refresh before expiry
export GRAPH_VERSION="v25.0" # pin it — never blank
export GRAPH_HOST="graph.facebook.com" # or graph.instagram.com for IG LoginPublishing is never one call. It is create → poll → publish. Skipping the poll is the #1 failure.
Step 1 — create the container. video_url must be a publicly reachable MP4 (no auth header, no signed-URL-that-expires-in-30s) for the entire processing window.
curl -s -X POST "https://$GRAPH_HOST/$GRAPH_VERSION/$IG_USER_ID/media" \
-d "media_type=REELS" \
-d "video_url=https://cdn.example.com/clip.mp4" \
-d "caption=Shipped it." \
-d "share_to_feed=true" \
-d "access_token=$IG_ACCESS_TOKEN"
# -> {"id":"17999999999999999"} <- this is the CONTAINER id, not a published postStep 2 — poll status until FINISHED. Meta recommends ~once per minute, ceiling ~5 minutes.
curl -s "https://$GRAPH_HOST/$GRAPH_VERSION/$CONTAINER_ID?fields=status_code,status" \
-d "access_token=$IG_ACCESS_TOKEN"
# -> {"status_code":"FINISHED", ...}Step 3 — publish. Only after FINISHED.
curl -s -X POST "https://$GRAPH_HOST/$GRAPH_VERSION/$IG_USER_ID/media_publish" \
-d "creation_id=$CONTAINER_ID" \
-d "access_token=$IG_ACCESS_TOKEN"
# -> {"id":"17888888888888888"} <- THIS is the published media idA compact Python helper that does the whole dance:
import os, time, requests
HOST = os.environ["GRAPH_HOST"]
VER = os.environ["GRAPH_VERSION"] # v25.0 — pinned
UID = os.environ["IG_USER_ID"]
TOK = os.environ["IG_ACCESS_TOKEN"]
BASE = f"https://{HOST}/{VER}"
def publish_reel(video_url: str, caption: str) -> str:
cid = requests.post(f"{BASE}/{UID}/media", data={
"media_type": "REELS", "video_url": video_url,
"caption": caption, "share_to_feed": "true",
"access_token": TOK,
}).json()["id"]
for _ in range(10): # ~5 min ceiling at 30s steps
st = requests.get(f"{BASE}/{cid}", params={
"fields": "status_code", "access_token": TOK,
}).json()["status_code"]
if st == "FINISHED":
break
if st in ("ERROR", "EXPIRED"):
raise RuntimeError(f"container {cid} -> {st}")
time.sleep(30)
else:
raise TimeoutError(f"container {cid} never reached FINISHED")
return requests.post(f"{BASE}/{UID}/media_publish", data={
"creation_id": cid, "access_token": TOK,
}).json()["id"]Bad: publish immediately after create -> "Media ID is not available" / silent fail.
Good: poll status_code until FINISHED, then media_publish.
Bad: video_url behind auth or a 30s signed URL -> container stalls in ERROR.
Good: a plain public MP4 that stays reachable for the full ~5 min window.Full container field reference (reels / carousel / story), cover & thumb handling, error codes, retry/backoff, and batch publish with cap check → references/publish-reel.md.
status_code is the only honest signal. Branch on it, do not guess from timing.
status_code | Meaning | Action |
|---|---|---|
IN_PROGRESS | Still transcoding | Keep polling (~60s) |
FINISHED | Ready | Call media_publish now |
ERROR | Failed (bad url, bad codec, eligibility) | Stop; read status, fix source |
EXPIRED | Container unpublished too long | Stop; recreate from step 1 |
Why the 5-min ceiling: containers expire. If you poll forever you will eventually publish an EXPIRED id and get an error. Cap retries.
| Rule | How |
|---|---|
| 50 API-published posts per rolling 24h per IG account | GET /{IG_USER_ID}/content_publishing_limit?fields=quota_usage,config |
| Over the cap | media_publish rejects with error subcode #51 ("publishing limit reached") |
curl -s "https://$GRAPH_HOST/$GRAPH_VERSION/$IG_USER_ID/content_publishing_limit?fields=quota_usage" \
-d "access_token=$IG_ACCESS_TOKEN"
# -> {"data":[{"quota_usage": 12, "config": {"quota_total": 50}}]}Why check first: in a batch, hitting #51 mid-run leaves half your queue unpublished and no clean resume point. Read quota_usage and stop early.
curl -s "https://$GRAPH_HOST/$GRAPH_VERSION/$IG_MEDIA_ID/insights" \
-d "metric=reach,views,likes,comments,shares,saved,total_interactions,ig_reels_avg_watch_time,ig_reels_video_view_total_time" \
-d "access_token=$IG_ACCESS_TOKEN"Valid Reels metric set (v25.0): reach, views, likes, comments, shares, saved, total_interactions, ig_reels_avg_watch_time, ig_reels_video_view_total_time (plus optional crossposted_views, facebook_views, reposts). Why a fixed list: the metric set differs by media type (feed / story / reels), and one invalid name fails the whole call — not just that field.
Units trap: the API returns ig_reels_avg_watch_time and ig_reels_video_view_total_time in milliseconds, not seconds. Store the raw value verbatim (suffix the key _ms) so the artifact matches the API, or divide by 1000 at ingest and rename to _s — never label a raw millisecond value "seconds". A 7.4s avg watch arrives as 7400.
Requesting any retired metric does not return null — it 400s the entire insights call. Map old → new before you send.
| Deprecated | Replacement | Deprecated on |
|---|---|---|
plays | views | 2025-04-21 (v22.0 + all versions) |
clips_replays_count | — (removed) | 2025-04-21 |
ig_reels_aggregated_all_plays_count | views | 2025-04-21 |
impressions | views / reach | gone for media created after 2024-07-02 |
video_views | views | 2025-01-08 |
profile_views (media) | — | 2025-03-25 |
If a previously-working call started erroring, this table is almost certainly why: a metric you used to request was retired on a version boundary. Swap to views and drop the dead names.
Complete current metric tables per media type, the full deprecated→replacement map with dates, version-gated 2025–2026 additions, and the 02-DOCS/wiki/shortform/ ingest schema spec → references/insights-metrics.md.
This is the checkable deliverable. One file per media id, idempotent overwrite (re-running a pull refreshes pulled_at and metrics, never duplicates).
02-DOCS/wiki/shortform/ig-reel-<media_id>.mdig-reel- prefix + the published media id (not the container id).---
type: instagram-metrics
title: "Reel 17888888888888888"
description: Performance snapshot for one Instagram Reel, pulled from Graph API v25.0.
tags: [instagram, reels, insights, shortform]
timestamp: "2026-06-02T08:00:00Z"
topic: shortform
status: stable
platform: instagram
media_type: REELS
media_id: "17888888888888888"
permalink: "https://www.instagram.com/reel/Cxxxxxx/"
published_at: "2026-05-30T09:12:00Z"
graph_version: v25.0
pulled_at: "2026-06-02T08:00:00Z"
metrics:
reach: 41200
views: 58800
total_interactions: 3120
saved: 410
shares: 220
ig_reels_avg_watch_time_ms: 7400 # raw API value — MILLISECONDS (avg per view)
ig_reels_video_view_total_time_ms: 435120000 # raw API value — MILLISECONDS (summed)
---
# Reel 17888888888888888
Performance snapshot pulled from Graph API v25.0. Metric set is the
current valid Reels set; no deprecated names requested.type is the only required OKF v0.1 field; title/description/tags/timestamp are the recommended OKF surface (timestamp mirrors the pull instant). The DOMAIN keys below are mandatory and stay byte-for-byte — verify.sh requires a pinned graph_version and greps the metrics block for deprecated names; pulled_at is the API-pull instant verify/diff rely on. Keep both pulled_at and timestamp. Why front-matter + media-id filename: the wiki is queried by key, and re-pulls must be diffable, not additive (the idempotent overwrite re-stamps timestamp and pulled_at together).
| Anti-pattern | Why it bites | Do instead |
|---|---|---|
Publish right after media create | Container isn't FINISHED; publish errors | Poll status_code first |
Requesting plays / impressions | 400s the whole insights call | Use views; consult the trap table |
Leaving GRAPH_VERSION blank / using default | Metric set silently shifts on Meta's rollout | Pin v25.0 in every call |
Signed/auth-gated video_url | Container stalls in ERROR | Plain public MP4 for the full window |
| Batch publishing without cap check | Hit #51 mid-run, half-published queue | content_publishing_limit before the loop |
Old scopes (instagram_basic, instagram_content_publish) | Grant nothing since 2025-01-27 | instagram_business_basic / instagram_business_content_publish |
| Storing the container id as "the post" | It's not the published media id | Persist the media_publish id |
Sending a graph.instagram.com token to graph.facebook.com | Host is fixed by the login path, not chosen per call | Pick the host with the auth path and stay on it |
| Letting the 60-day long-lived token lapse | Every call fails with an auth error, not a 404 | Refresh before expiry |
| A source video outside Reel eligibility | Surfaces as container ERROR, not a clean validation message | 9:16, 5–90s, H.264/HEVC |
| Requesting the 2025–2026 additions (Reels skip rate, repost counts, crossposted views) blind | Version-gated — trips the same 400 trap as a deprecated name | Confirm they exist on GRAPH_VERSION first |
© ericrisco, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 5 other files (scripts, references) in skills/instagram-api of ericrisco/rsc-harness.
Open the folder on GitHubat commit 92fde8f
Instagram API next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Instagram API this skillericrisco/rsc-harness | 156 | — | ~3.1k | Automated safety check: Pass | MIT | |
| Bulkpublish Social Schedulingdavepoon/buildwithclaude | 3.6k | — | ~1.3k | Automated safety check: Pass | MIT | |
| Social Publisherclaude-office-skills/skills | 498 | — | ~3.1k | Automated safety check: Pass | MIT | |
| Cross Platform ReformatterOotto-AI/claude-content-skills | 101 | — | ~449 | Automated safety check: Pass | MIT | |
| Influencer Discoverytigerless-labs/influencer-discovery | 211 | — | ~2.5k | Automated safety check: Notes | None | |
| Comment MiningScrapeCreators/social-media-research-skills | 3.3k | — | ~1k | Automated safety check: Notes | MIT |
davepoon/buildwithclaude
Schedule, publish and analyze social posts across 15 networks via BulkPublish (MCP or REST) — Facebook, Instagram, X, TikTok, YouTube, Threads, Bluesky, Pinterest, Google Business, LinkedIn…
claude-office-skills/skills
Multi-platform social media publishing automation - schedule, post, and track content across TikTok, Instagram, YouTube, LinkedIn, and more
Ootto-AI/claude-content-skills
Reshapes one Instagram reel into a TikTok and a YouTube Short — adjusting hook, length and captions per platform.
tigerless-labs/influencer-discovery
Find the bloggers/creators who can help promote your work, capture their contact info, and append them to the target sheet in Google Sheets.
ScrapeCreators/social-media-research-skills
A skill your agent uses when the user wants to mine comments and replies for audience reactions, customer language, questions, objections, complaints, product ideas, buying intent, sentiment, or…
ScrapeCreators/social-media-research-skills
A skill your agent uses when the user wants to research competitors' social media strategy, compare brands or creators, find what content is working in a niche, identify content gaps, or produce a…
ericrisco/rsc-harness
A skill your agent uses when designing or analyzing a controlled experiment — falsifiable hypothesis, sample size from an MDE, reading significance/CI/power, CUPED, or rescuing tests that won't go…
ericrisco/rsc-harness
A skill your agent uses when making a web UI conform to WCAG 2.2 Level AA — axe-core or Lighthouse a11y violations, keyboard operability, focus management, ARIA roles/names/live regions, contrast…
ericrisco/rsc-harness
A skill your agent uses when running or fixing paid acquisition on Google or Meta — campaign structure (Performance Max, Demand Gen, Search, Advantage+), platform-fit creative, budget/scaling rules…
ericrisco/rsc-harness
A skill your agent uses when measuring whether an LLM or agent system actually got better and gating merges on it: golden sets, fixing an inflated LLM-as-judge, scoring RAG (faithfulness, contextual…
ericrisco/rsc-harness
A skill your agent uses when a creative goal must become a finished media file: pick and order generative-media models per modality — AI voiceover, image-to-video clips, score — then glue them with…
ericrisco/rsc-harness
A skill your agent uses when instrumenting product or web analytics — GA4/PostHog SDK wiring, event taxonomy, funnels, double-counted events, consent gating, PII scrubbing.
Categories
A skill your agent uses when wiring an agent into Instagram's Graph API: publishing a Reel through the create/poll/publish container dance, reading per-media insights, checking the 24h publish cap…. Instagram API is an agent skill from ericrisco/rsc-harness. Use when wiring an agent into Instagram's Graph API: publishing a Reel through the create/poll/publish container dance, reading per-media insights, checking the 24h publish cap, or ingesting Reel metrics into 02-DOCS/wiki/shortform.
Instagram API fits situations like: wiring an agent into Instagrams Graph API: publishing a Reel through the create/poll/publish container dance; reading per-media insights; checking the 24h publish cap; ingesting Reel metrics into 02-DOCS/wiki/shortform.
Run `npx skills add ericrisco/rsc-harness --skill instagram-api -a claude-code`. Or copy the skill folder (skills/instagram-api in ericrisco/rsc-harness) into .claude/skills/instagram-api in your project. Claude Code loads it when a task matches its description.
Run `npx skills add ericrisco/rsc-harness --skill instagram-api -a codex`. Or copy the skill folder (skills/instagram-api in ericrisco/rsc-harness) into .agents/skills/instagram-api in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add ericrisco/rsc-harness --skill instagram-api -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/instagram-api, .gemini/skills/instagram-api, .github/skills/instagram-api and .opencode/skills/instagram-api in your project.
Going by SKILL.md and its folder, Instagram API needs a shell for the scripts in its folder, the command-line tools its instructions call (curl) and credentials named IG_ACCESS_TOKEN. Our summary lists: Python 3; A Bash shell; A credential in IG_ACCESS_TOKEN.
SKILL.md names 1 domain. In commands or code: instagram.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Instagram API is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.1k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 2.1k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Instagram API: Bulkpublish Social Scheduling (davepoon/buildwithclaude, 3.6k stars), Social Publisher (claude-office-skills/skills, 498 stars), Cross Platform Reformatter (Ootto-AI/claude-content-skills, 101 stars) and Influencer Discovery (tigerless-labs/influencer-discovery, 211 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
ericrisco (a GitHub user) maintains it in ericrisco/rsc-harness, which has 156 GitHub stars. The repository holds 229 skills in this directory. The repository was last updated on October 6, 2026.
Source: ericrisco/rsc-harness on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.