{"id":"97bc46d8-b9c0-4a93-8fe2-032e4fde388c","entityType":"agent","slug":"clawhub-clawbus-clawbus-instagram-publish","name":"Instagram Publisher","canonicalUrl":"https://www.xpersona.co/agent/clawhub-clawbus-clawbus-instagram-publish","canonicalPath":"/agent/clawhub-clawbus-clawbus-instagram-publish","generatedAt":"2026-10-10T21:51:02.340Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T15:37:48.908Z","emptyReason":null},"description":"Publish Instagram images, Reels, and carousels, check Instagram publishing status, fetch recent Instagram direct messages, and send Instagram direct messages...","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.4K downloads reported by the source. Last updated 10/10/2026.","installCommand":"clawhub skill install s1714nww0520qjy3akv321qsjs86bfp7:clawbus-instagram-publish","sourceUrl":"https://clawhub.ai/clawbus/clawbus-instagram-publish","homepage":"https://clawhub.ai/clawbus/skills/clawbus-instagram-publish","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/clawbus/clawbus-instagram-publish","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/clawbus/skills/clawbus-instagram-publish","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":63,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Instagram Publisher technical dossier on Xpersona with agent coverage, OPENCLEW support, and live trust metadata."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-10T15:37:48.908Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T15:37:48.908Z","emptyReason":null},"stars":null,"forks":null,"downloads":1357,"packageName":null,"latestVersion":"1.1.5","tractionLabel":"1.4K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T15:37:48.908Z","emptyReason":null},"lastUpdatedAt":"2026-10-10T15:37:48.908Z","lastCrawledAt":"2026-10-10T15:37:48.908Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-11T15:37:48.908Z","lastVerifiedAt":null,"highlights":[{"version":"1.1.5","createdAt":"2026-05-28T03:33:01.548Z","changelog":"Update documentation from the GitHub instagram-publisher source, clarify publishing and DM workflows, and add a truthful comparison table for why the MyBrandMetrics flow is easier than building an Instagram backend.","fileCount":8,"zipByteSize":12160},{"version":"1.1.4","createdAt":"2026-05-28T03:22:20.341Z","changelog":"Normalize the Instagram publisher skill to the repository README structure, keep the English documentation, and add direct message fetch/send scripts from the supplied skill package.","fileCount":8,"zipByteSize":10504},{"version":"1.1.3","createdAt":"2026-05-26T11:40:26.249Z","changelog":"Add comparison table explaining why MyBrandMetrics Instagram publishing is simpler than building an Instagram publishing integration yourself.","fileCount":6,"zipByteSize":7996},{"version":"1.1.2","createdAt":"2026-05-19T04:42:35.747Z","changelog":"Improve Instagram page wording and search visibility","fileCount":5,"zipByteSize":6329},{"version":"1.1.1","createdAt":"2026-05-18T01:21:31.523Z","changelog":"Remove ClawBus prefix from skill title","fileCount":5,"zipByteSize":6325},{"version":"1.1.0","createdAt":"2026-05-15T13:16:48.773Z","changelog":"Improve Instagram publish page with MyBrandMetrics setup flow","fileCount":5,"zipByteSize":6328},{"version":"1.0.0","createdAt":"2026-05-08T07:12:46.049Z","changelog":"Initial release from clawbus.com","fileCount":5,"zipByteSize":5739}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s1714nww0520qjy3akv321qsjs86bfp7:clawbus-instagram-publish","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s1714nww0520qjy3akv321qsjs86bfp7:clawbus-instagram-publish` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/clawbus/clawbus-instagram-publish before using production credentials."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-clawbus-clawbus-instagram-publish/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-clawbus-clawbus-instagram-publish/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-clawbus-clawbus-instagram-publish/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-clawbus-clawbus-instagram-publish/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-clawbus-clawbus-instagram-publish/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-clawbus-clawbus-instagram-publish/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T21:51:02.338Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-clawbus-clawbus-instagram-publish/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-clawbus-clawbus-instagram-publish/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-clawbus-clawbus-instagram-publish/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-clawbus-clawbus-instagram-publish/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T15:37:48.908Z","emptyReason":null},"readme":"Skill: Instagram Publisher\n\nOwner: clawbus\n\nSummary: Publish Instagram images, Reels, and carousels, check Instagram publishing status, fetch recent Instagram direct messages, and send Instagram direct messages...\n\nTags: creator:1.1.5, instagram:1.1.5, instagram-carousel:1.1.5, instagram-dm:1.1.5, instagram-publish:1.1.5, instagram-reels:1.1.5, latest:1.1.5, mybrandmetrics:1.1.5, no-mcp:1.1.5, publishing:1.1.5, social-media:1.1.5\n\nVersion history:\n\nv1.1.5 | 2026-05-28T03:33:01.548Z | user\n\nUpdate documentation from the GitHub instagram-publisher source, clarify publishing and DM workflows, and add a truthful comparison table for why the MyBrandMetrics flow is easier than building an Instagram backend.\n\nv1.1.4 | 2026-05-28T03:22:20.341Z | user\n\nNormalize the Instagram publisher skill to the repository README structure, keep the English documentation, and add direct message fetch/send scripts from the supplied skill package.\n\nv1.1.3 | 2026-05-26T11:40:26.249Z | user\n\nAdd comparison table explaining why MyBrandMetrics Instagram publishing is simpler than building an Instagram publishing integration yourself.\n\nv1.1.2 | 2026-05-19T04:42:35.747Z | user\n\nImprove Instagram page wording and search visibility\n\nv1.1.1 | 2026-05-18T01:21:31.523Z | user\n\nRemove ClawBus prefix from skill title\n\nv1.1.0 | 2026-05-15T13:16:48.773Z | user\n\nImprove Instagram publish page with MyBrandMetrics setup flow\n\nv1.0.0 | 2026-05-08T07:12:46.049Z | user\n\nInitial release from clawbus.com\n\nArchive index:\n\nArchive v1.1.5: 8 files, 12160 bytes\n\nFiles: references/configuration.md (1287b), references/publishing-examples.md (1232b), scripts/publish_instagram.py (11193b), scripts/receive_messages.py (3143b), scripts/send_message.py (3292b), skill-card.md (2400b), SKILL.md (8587b), _meta.json (144b)\n\nFile v1.1.5:SKILL.md\n\n---\nname: Instagram Publisher\ndescription: >\n  Publish Instagram images, Reels, and carousels, check Instagram publishing\n  status, fetch recent Instagram direct messages, and send Instagram direct\n  messages through a preconfigured MyBrandMetrics API connection. Supports\n  local files, remote media URLs, captions, carousel items, Reel feed sharing,\n  thumbnail offset, publish status checks, and messaging workflows after\n  Instagram Insights is connected in MyBrandMetrics.\ncompatibility:\n  tools:\n    - bash\n    - python\n  dependencies:\n    - requests\n---\n\n# Instagram Publisher\n\nPublish Instagram images, Reels, and carousels, check publish status, and work\nwith Instagram direct messages through bundled MyBrandMetrics scripts.\n\nUse this skill when the user wants to publish to Instagram, post to IG, upload a\nReel, create a carousel, publish a hosted media URL, publish a local media file,\ncheck an Instagram publish job, fetch recent Instagram DMs, or send an\nInstagram direct message.\n\nWebsite: [https://www.clawbus.com/](https://www.clawbus.com/)  \nMyBrandMetrics API: [https://mybrandmetrics.com/](https://mybrandmetrics.com/)\n\n## Why This Instagram Publisher\n\n| This skill | Building your own Instagram publishing and messaging integration |\n| --- | --- |\n| Sign in to MyBrandMetrics with Google and connect Instagram Insights. | Set up and maintain your own Meta developer integration. |\n| Use a MyBrandMetrics API key, connection ID, and account ID for publishing. | Manage app credentials, account selection, publishing tokens, and token handling yourself. |\n| Publish images and Reels from local files or remote URLs with one script. | Implement media upload, hosted media handling, and publish requests for each media type. |\n| Build mixed carousels by passing local files or URLs as `--items`. | Upload every carousel child, collect child IDs, wait for processing, and publish the final carousel yourself. |\n| Set captions, Reel feed sharing, thumbnail offset, wait behavior, and status checks from CLI flags. | Build separate request handling for metadata, media-type differences, retries, and publish-status polling. |\n| Fetch recent Instagram DMs and send replies with bundled messaging scripts. | Implement Instagram messaging endpoints and handle Meta messaging-window errors yourself. |\n\nUse this when you want Instagram publishing and messaging workflows without\nbuilding a full Instagram backend yourself.\n\n## Core Capabilities\n\n| Capability | Details |\n| --- | --- |\n| Image publishing | Publish a single Instagram image from a remote URL or local file. |\n| Reels publishing | Publish an Instagram Reel from a remote video URL or local video file. |\n| Carousel publishing | Publish multi-item carousels from images and videos, including mixed local files and remote URLs. |\n| Post metadata | Set captions, Reel feed sharing, thumbnail offset, and wait behavior. |\n| Publish status checks | Check an existing Instagram publish job with a returned publish ID. |\n| Direct message fetch | Fetch recent Instagram direct messages with a configurable `--limit`. |\n| Direct message send | Send a message to a `conversation_id` returned by the message fetch script. |\n| Natural-language workflows | Use chat instructions after the skill is installed and credentials are configured. |\n\n## Setup Flow\n\n1. Open [https://mybrandmetrics.com/](https://mybrandmetrics.com/) and sign in\n   with Google.\n2. In MyBrandMetrics, open **Data sources**.\n3. Connect **Instagram Insights** as a data source.\n4. Wait until the MyBrandMetrics connection is ready.\n5. Get the MyBrandMetrics API key, Instagram connection ID, and Instagram\n   account ID from MyBrandMetrics.\n6. Install the `instagram-publish` skill.\n7. Provide credentials through command-line arguments, environment variables,\n   or a workspace `config.json`.\n8. Start an image, Reel, carousel, publish-status, or direct-message workflow\n   with natural-language instructions or direct scripts.\n\nMessaging scripts only require the API key and connection ID. Publishing scripts\nalso require the account ID.\n\n## Credential Options\n\nThe scripts load credentials in this order:\n\n1. Command-line arguments such as `--api-key`, `--connection-id`, and\n   `--account-id`.\n2. Environment variables:\n   `INSTAGRAM_API_KEY`, `INSTAGRAM_AUTHORIZATION_TOKEN`,\n   `INSTAGRAM_CONNECTION_ID`, `INSTAGRAM_ACCOUNT_ID`, and optionally\n   `INSTAGRAM_PUBLISH_CONFIG`.\n3. A workspace `config.json` file with an `instagram` object.\n\nExample `config.json`:\n\n```json\n{\n  \"instagram\": {\n    \"authorization_token\": \"YOUR_API_KEY\",\n    \"connection_id\": \"YOUR_CONNECTION_ID\",\n    \"account_id\": \"YOUR_ACCOUNT_ID\"\n  }\n}\n```\n\nDo not commit real API keys, connection IDs, or account IDs.\n\n## Workflow\n\nUse natural-language prompts in chat after the skill is installed. Include:\n\n- the task: publish, check status, fetch messages, or send a message;\n- the media URL, local file path, or carousel item list;\n- the post type when it is not obvious: `IMAGE`, `REELS`, or `CAROUSEL`;\n- the caption;\n- whether a Reel should be shared to feed;\n- the publish ID for status checks;\n- the message `conversation_id` and message text for DM replies.\n\nBefore publishing, confirm the Instagram account, media source, post type, and\ncaption. For carousels, review every item before posting. For direct messages,\nconfirm the target `conversation_id` and exact message text.\n\nInstagram direct messaging is subject to Meta platform policy and\nmessaging-window limits. If the API returns a policy error, show the real\nresponse instead of retrying indefinitely.\n\n## Use The Scripts Directly\n\nUse `scripts/publish_instagram.py` for publishing and status checks.\n\nSingle image from URL:\n\n```bash\npython3 scripts/publish_instagram.py \\\n  --type IMAGE \\\n  --url \"https://example.com/image.jpg\" \\\n  --caption \"Hello World!\"\n```\n\nReel from local file:\n\n```bash\npython3 scripts/publish_instagram.py \\\n  --type REELS \\\n  --path \"/path/to/video.mp4\" \\\n  --caption \"Check this out!\" \\\n  --thumb-offset 1000\n```\n\nMixed carousel:\n\n```bash\npython3 scripts/publish_instagram.py \\\n  --type CAROUSEL \\\n  --items \"/path/to/img1.jpg\" \"https://example.com/video2.mp4\" \\\n  --caption \"My Carousel\"\n```\n\nCheck publish status:\n\n```bash\npython3 scripts/publish_instagram.py \\\n  --check-id \"PUBLISH_ID\"\n```\n\nFetch recent direct messages:\n\n```bash\npython3 scripts/receive_messages.py \\\n  --limit 25\n```\n\nSend a direct message:\n\n```bash\npython3 scripts/send_message.py \\\n  --conversation-id \"CONVERSATION_ID\" \\\n  --message \"Thanks for reaching out!\"\n```\n\n## Parameters\n\n| Parameter | Script | Required | Purpose |\n| --- | --- | --- | --- |\n| `--api-key` | all scripts | No, if configured elsewhere | MyBrandMetrics API key. |\n| `--connection-id` | all scripts | No, if configured elsewhere | Instagram connection ID from MyBrandMetrics. |\n| `--account-id` | publish script | No, if configured elsewhere | MyBrandMetrics Instagram account ID for publishing. |\n| `--config` | all scripts | No | Path to a custom `config.json`. |\n| `--type` | publish script | No | `IMAGE`, `REELS`, or `CAROUSEL`; default is `IMAGE`. |\n| `--caption` | publish script | No | Instagram caption text. |\n| `--url` | publish script | For URL-based single media | Remote media URL for a single image or Reel. |\n| `--path` | publish script | For local single media | Local media path for a single image or Reel. |\n| `--items` | publish script | For carousel | Space-separated carousel item URLs or paths. |\n| `--thumb-offset` | publish script | No | Reel or video carousel thumbnail offset in milliseconds. |\n| `--no-feed` | publish script | No | Disable sharing Reels to feed. |\n| `--no-wait` | publish script | No | Do not wait for publishing or media processing completion. |\n| `--check-id` | publish script | For status checks | Check status of an existing publish ID. |\n| `--limit` | receive messages script | No | Number of recent messages to fetch; default is `25`. |\n| `--conversation-id` | send message script | Yes | Conversation ID returned by `receive_messages.py`. |\n| `--message` | send message script | Yes | Direct message text to send. |\n\n## Reference Files\n\n| File | Purpose |\n| --- | --- |\n| `references/configuration.md` | Supported credential sources, config shape, and secret-handling rules. |\n| `references/publishing-examples.md` | Concrete commands for publishing, status checks, and direct messages. |\n\nThe scripts print the real JSON response from the MyBrandMetrics API. Treat that\nresponse as the source of truth; do not fabricate publish IDs, media container\nIDs, message IDs, or success states.\n\nFile v1.1.5:_meta.json\n\n{\n  \"ownerId\": \"kn713zgmx26jep6vrh0kbmmkw986a4xc\",\n  \"slug\": \"clawbus-instagram-publish\",\n  \"version\": \"1.1.5\",\n  \"publishedAt\": 1779939181548\n}\n\nFile v1.1.5:references/configuration.md\n\n# Configuration\n\nRead this file when the publishing script cannot find Instagram credentials or when\nyou need to prepare the workspace for publishing.\n\n## Supported config sources\n\nThe script supports these configuration sources:\n\n1. Command-line arguments:\n   - `--api-key`\n   - `--connection-id`\n   - `--account-id`\n   - `--config`\n2. Environment variables:\n   - `INSTAGRAM_API_KEY`\n   - `INSTAGRAM_AUTHORIZATION_TOKEN`\n   - `INSTAGRAM_CONNECTION_ID`\n   - `INSTAGRAM_ACCOUNT_ID`\n   - optional `INSTAGRAM_PUBLISH_CONFIG`\n3. A workspace `config.json` file with an `instagram` object\n\nArguments take precedence over environment variables, and environment variables\ntake precedence over `config.json`.\n\nMessaging scripts only require the API key and connection ID. Publishing scripts\nalso require the account ID.\n\n## Expected config.json shape\n\n```json\n{\n  \"instagram\": {\n    \"authorization_token\": \"YOUR_API_KEY\",\n    \"connection_id\": \"YOUR_CONNECTION_ID\",\n    \"account_id\": \"YOUR_ACCOUNT_ID\"\n  }\n}\n```\n\nThe script also accepts `api_key` as a fallback key name.\n\n## Security rules\n\n- Never commit real tokens, connection IDs, or account IDs into the repository.\n- Prefer environment variables or runtime arguments in shared environments.\n- Do not echo secrets in logs or terminal output.\n\nFile v1.1.5:references/publishing-examples.md\n\n# Publishing Examples\n\nRead this file when you need a concrete invocation pattern.\n\n## Publish a single image from a URL\n\n```bash\npython3 scripts/publish_instagram.py \\\n  --type IMAGE \\\n  --url \"https://example.com/image.jpg\" \\\n  --caption \"Hello World!\"\n```\n\n## Publish a reel from a local file\n\n```bash\npython3 scripts/publish_instagram.py \\\n  --type REELS \\\n  --path \"/path/to/video.mp4\" \\\n  --caption \"Check this out!\" \\\n  --thumb-offset 1000\n```\n\n## Publish a mixed carousel\n\n```bash\npython3 scripts/publish_instagram.py \\\n  --type CAROUSEL \\\n  --items \"/path/to/img1.jpg\" \"https://example.com/vid2.mp4\" \\\n  --caption \"My Carousel\"\n```\n\n## Check status\n\n```bash\npython3 scripts/publish_instagram.py \\\n  --check-id \"v_pub_file~123\"\n```\n\n## Fetch recent direct messages\n\n```bash\npython3 scripts/receive_messages.py \\\n  --limit 25\n```\n\n## Send a direct message\n\n```bash\npython3 scripts/send_message.py \\\n  --conversation-id \"CONVERSATION_ID\" \\\n  --message \"Thanks for reaching out!\"\n```\n\nInstagram direct messaging is subject to Meta platform policy and messaging-window\nlimits. If the API returns an error such as `(#10) This message is sent outside\nof allowed window`, report the real response instead of retrying indefinitely.\n\nFile v1.1.5:skill-card.md\n\n## Description:\n\nPublish Instagram images, Reels, and carousels, check Instagram publishing status, fetch recent Instagram direct messages, and send Instagram direct messages through a preconfigured MyBrandMetrics API connection.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[clawbus](https://clawhub.ai/user/clawbus)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and developers use this skill to publish Instagram media, check publish status, and handle Instagram direct-message workflows through MyBrandMetrics after connecting Instagram Insights.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill can publish posts and send direct messages that affect an Instagram account.\n\nMitigation: Confirm the Instagram account, media source, post type, caption, conversation ID, and exact message text before execution.\n\nRisk: Carousel publishing can fetch arbitrary remote URLs from the user's machine before upload.\n\nMitigation: Use trusted local files or trusted media URLs only, and avoid untrusted remote carousel items until URL validation and size limits are added.\n\nRisk: Credentials may be exposed if API keys, connection IDs, or account IDs are stored carelessly.\n\nMitigation: Prefer environment variables or runtime arguments in shared workspaces and do not commit real credentials.\n\n## Reference(s):\n\n- [ClawHub Skill Page](https://clawhub.ai/clawbus/skills/clawbus-instagram-publish)\n- [Configuration](references/configuration.md)\n- [Publishing Examples](references/publishing-examples.md)\n- [Clawbus Website](https://www.clawbus.com/)\n- [MyBrandMetrics](https://mybrandmetrics.com/)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with shell command examples and JSON API responses from the bundled scripts]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires a MyBrandMetrics API key, Instagram connection ID, and for publishing workflows an Instagram account ID.]\n\n## Skill Version(s):\n\n1.1.5 (source: release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.1.4: 8 files, 10504 bytes\n\nFiles: references/configuration.md (1287b), references/publishing-examples.md (1352b), scripts/publish_instagram.py (11193b), scripts/receive_messages.py (3143b), scripts/send_message.py (3292b), skill-card.md (2361b), SKILL.md (3453b), _meta.json (144b)\n\nFile v1.1.4:SKILL.md\n\n---\nname: instagram-publisher\ndescription: >\n  Publish Instagram images, reels, and carousels or manage Instagram direct\n  messages through a preconfigured MyBrandMetrics API connection. Use this skill\n  when the user wants to post to Instagram, upload a local image or video,\n  publish a hosted media URL, create a multi-item carousel, check the status of\n  an Instagram publish job, fetch recent Instagram messages, or send an Instagram\n  direct message. Typical triggers include: publish to Instagram, post to IG,\n  upload a reel, create an Instagram carousel, check Instagram publishing status,\n  fetch Instagram DMs, and send an Instagram message.\ncompatibility:\n  tools:\n    - bash\n    - python\n  dependencies:\n    - requests\n---\n\n# Instagram Publish\n\nPublish Instagram images, reels, and carousels, and manage Instagram direct\nmessages through bundled MyBrandMetrics scripts.\n\n## When To Read Extra Files\n\n- Read `references/configuration.md` when you need the supported credential shape\n  or need to troubleshoot missing configuration.\n- Read `references/publishing-examples.md` when you need concrete command examples\n  for images, reels, carousels, status checks, or direct messages.\n- Use `scripts/publish_instagram.py` for all publish and status operations.\n- Use `scripts/receive_messages.py` to fetch recent Instagram direct messages.\n- Use `scripts/send_message.py` to send an Instagram direct message.\n\n## Prerequisites\n\n1. Media must be available either as:\n   - a direct public URL, or\n   - a readable local file path\n2. Instagram publishing credentials must be available through environment variables\n   or a supported config file.\n3. For carousels, confirm that all attachments were counted and included before running\n   the final publish step.\n4. For direct messages, confirm the target `conversation_id` and message text.\n\n## Workflow\n\n1. Determine the task: publish a new `IMAGE`, `REELS`, or `CAROUSEL` post, or\n   check the status of an existing publish job, or manage direct messages.\n2. Validate inputs:\n   - For single media posts, confirm either `--url` or `--path`.\n   - For carousels, confirm every item is present in `--items`.\n   - For status checks, confirm `--check-id`.\n   - For message fetches, confirm the optional `--limit`.\n   - For message sends, confirm `--conversation-id` and `--message`.\n3. Load credentials securely through config or environment variables.\n4. Execute:\n   - For `IMAGE` or `REELS`, publish directly from the URL or local file.\n   - For `CAROUSEL`, upload each item first, capture the returned child IDs, then\n     publish the final carousel.\n   - For status checks, query the existing publish ID.\n   - For message fetches, run `scripts/receive_messages.py`.\n   - For message sends, run `scripts/send_message.py`.\n5. Return the real API response as structured JSON.\n\n## Output Format\n\nThe script should print the real JSON response from the API, for example:\n\n```json\n{\n  \"publish_id\": \"v_pub_file~123\",\n  \"status\": \"FINISHED\"\n}\n```\n\n## Notes\n\n- Never hardcode API keys, connection IDs, or account IDs into the repository.\n- Treat the API response as the source of truth; do not fabricate publish IDs or media container IDs.\n- For mixed carousels, let the script upload each item individually before the final publish call.\n- Instagram direct messaging is subject to Meta platform policy and messaging-window\n  limits; return the real API error if a recipient is outside the allowed window.\n\nFile v1.1.4:_meta.json\n\n{\n  \"ownerId\": \"kn713zgmx26jep6vrh0kbmmkw986a4xc\",\n  \"slug\": \"clawbus-instagram-publish\",\n  \"version\": \"1.1.4\",\n  \"publishedAt\": 1779938540341\n}\n\nFile v1.1.4:references/configuration.md\n\n# Configuration\n\nRead this file when the publishing script cannot find Instagram credentials or when\nyou need to prepare the workspace for publishing.\n\n## Supported config sources\n\nThe script supports these configuration sources:\n\n1. Command-line arguments:\n   - `--api-key`\n   - `--connection-id`\n   - `--account-id`\n   - `--config`\n2. Environment variables:\n   - `INSTAGRAM_API_KEY`\n   - `INSTAGRAM_AUTHORIZATION_TOKEN`\n   - `INSTAGRAM_CONNECTION_ID`\n   - `INSTAGRAM_ACCOUNT_ID`\n   - optional `INSTAGRAM_PUBLISH_CONFIG`\n3. A workspace `config.json` file with an `instagram` object\n\nArguments take precedence over environment variables, and environment variables\ntake precedence over `config.json`.\n\nMessaging scripts only require the API key and connection ID. Publishing scripts\nalso require the account ID.\n\n## Expected config.json shape\n\n```json\n{\n  \"instagram\": {\n    \"authorization_token\": \"YOUR_API_KEY\",\n    \"connection_id\": \"YOUR_CONNECTION_ID\",\n    \"account_id\": \"YOUR_ACCOUNT_ID\"\n  }\n}\n```\n\nThe script also accepts `api_key` as a fallback key name.\n\n## Security rules\n\n- Never commit real tokens, connection IDs, or account IDs into the repository.\n- Prefer environment variables or runtime arguments in shared environments.\n- Do not echo secrets in logs or terminal output.\n\nFile v1.1.4:references/publishing-examples.md\n\n# Publishing Examples\n\nRead this file when you need a concrete invocation pattern.\n\n## Publish a single image from a URL\n\n```bash\npython3 instagram-publisher/scripts/publish_instagram.py \\\n  --type IMAGE \\\n  --url \"https://example.com/image.jpg\" \\\n  --caption \"Hello World!\"\n```\n\n## Publish a reel from a local file\n\n```bash\npython3 instagram-publisher/scripts/publish_instagram.py \\\n  --type REELS \\\n  --path \"/path/to/video.mp4\" \\\n  --caption \"Check this out!\" \\\n  --thumb-offset 1000\n```\n\n## Publish a mixed carousel\n\n```bash\npython3 instagram-publisher/scripts/publish_instagram.py \\\n  --type CAROUSEL \\\n  --items \"/path/to/img1.jpg\" \"https://example.com/vid2.mp4\" \\\n  --caption \"My Carousel\"\n```\n\n## Check status\n\n```bash\npython3 instagram-publisher/scripts/publish_instagram.py \\\n  --check-id \"v_pub_file~123\"\n```\n\n## Fetch recent direct messages\n\n```bash\npython3 instagram-publisher/scripts/receive_messages.py \\\n  --limit 25\n```\n\n## Send a direct message\n\n```bash\npython3 instagram-publisher/scripts/send_message.py \\\n  --conversation-id \"CONVERSATION_ID\" \\\n  --message \"Thanks for reaching out!\"\n```\n\nInstagram direct messaging is subject to Meta platform policy and messaging-window\nlimits. If the API returns an error such as `(#10) This message is sent outside\nof allowed window`, report the real response instead of retrying indefinitely.\n\nFile v1.1.4:skill-card.md\n\n## Description: <br>\nPublish Instagram images, Reels, and carousels, check publishing status, fetch recent Instagram direct messages, and send Instagram direct messages through a preconfigured MyBrandMetrics API connection. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[clawbus](https://clawhub.ai/user/clawbus) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers, operators, and social media teams use this skill to let an agent publish Instagram media, inspect publish status, and manage Instagram direct messages through MyBrandMetrics. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill requires sensitive Instagram and MyBrandMetrics credentials. <br>\nMitigation: Provide credentials through runtime arguments, environment variables, or local config, and do not commit tokens, connection IDs, or account IDs. <br>\nRisk: Fetched direct messages and conversation IDs may contain private data. <br>\nMitigation: Treat message data as private and confirm the target conversation ID and message text before sending any direct message. <br>\nRisk: Publishing actions can post media or captions to a real Instagram account. <br>\nMitigation: Confirm the account, media, caption, carousel items, and publish type before execution, then rely on the API response as the source of truth. <br>\n\n\n## Reference(s): <br>\n- [Configuration](references/configuration.md) <br>\n- [Publishing Examples](references/publishing-examples.md) <br>\n- [ClawHub Skill Page](https://clawhub.ai/clawbus/clawbus-instagram-publish) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown guidance with shell command examples and JSON API responses] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Returns real MyBrandMetrics API responses for publish, status, fetch, and send operations.] <br>\n\n## Skill Version(s): <br>\n1.1.4 (source: server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.1.3: 6 files, 7996 bytes\n\nFiles: references/configuration.md (1160b), references/publishing-examples.md (812b), scripts/publish_instagram.py (9470b), skill-card.md (2769b), SKILL.md (6445b), _meta.json (144b)\n\nFile v1.1.3:SKILL.md\n\n---\nname: Instagram Publisher\ndescription: >\n  Instagram publishing skill for posting Instagram images, Reels, and carousels\n  through the MyBrandMetrics API. Supports remote URLs, local files, captions,\n  carousel items, Reel feed sharing, thumbnail offset, publish status checks,\n  and natural-language Instagram posting workflows after Instagram Insights is\n  connected in MyBrandMetrics.\n---\n\n# Instagram Publisher\n\nPublish Instagram images, Reels, and carousels through the MyBrandMetrics API.\n\nUse this skill to publish to Instagram, post to IG, upload an Instagram Reel,\ncreate an Instagram carousel, publish a single image, or check an Instagram\npublishing result after Instagram Insights is connected in MyBrandMetrics.\n\nWebsite: [https://www.clawbus.com/](https://www.clawbus.com/)  \nMyBrandMetrics API: [https://mybrandmetrics.com/](https://mybrandmetrics.com/)\n\n## Why This Instagram Publisher\n\n| This skill | Building your own Instagram publishing integration |\n| --- | --- |\n| Sign in to MyBrandMetrics with Google and connect Instagram Insights. | Set up and maintain your own Meta developer integration. |\n| Use a MyBrandMetrics API key, connection ID, and account ID for publishing. | Manage app credentials, account selection, and publishing tokens yourself. |\n| Publish images, Reels, and carousels from local files or remote URLs. | Implement media upload, container creation, and publish flows yourself. |\n| Use one script for captions, Reel feed sharing, thumbnail offset, and carousel items. | Build separate request handling for post metadata and media-type differences. |\n| Check publishing results with the returned publish ID. | Build your own publish-status polling and error handling. |\n\nUse this when you want Instagram image, Reel, or carousel publishing without\nbuilding a full Instagram publishing backend yourself.\n\n## Core Capabilities\n\n| Capability | Details |\n| --- | --- |\n| Instagram image publishing | Publish a single Instagram image from a remote URL or local file. |\n| Instagram Reels publishing | Publish an Instagram Reel from a remote video URL or local video file. |\n| Instagram carousel publishing | Publish multi-item Instagram carousels from images, videos, local files, or URLs. |\n| Post metadata | Set the caption, Reel feed sharing option, and video thumbnail offset. |\n| Publish status checks | Check an Instagram publishing job after a post is submitted. |\n| Natural-language posting | Use natural-language prompts in chat after the skill is installed. |\n\n## Setup Flow\n\n1. Open [https://mybrandmetrics.com/](https://mybrandmetrics.com/) and sign in\n   with Google.\n2. In MyBrandMetrics, open **Data sources**.\n3. Connect **Instagram Insights** as a data source.\n4. Wait until the MyBrandMetrics connection is ready.\n5. In [https://mybrandmetrics.com/](https://mybrandmetrics.com/), get the\n   MyBrandMetrics API key.\n6. Install the `instagram-publish` skill.\n7. Start an Instagram image, Reel, carousel, or publish-status workflow with\n   natural-language instructions.\n\n## Authentication\n\nInstagram authorization is handled through MyBrandMetrics. Sign in with Google,\nconnect Instagram Insights as a data source, get the MyBrandMetrics API key,\nand use the Instagram connection ID and account ID from MyBrandMetrics when\nrunning direct script commands.\n\nExample `config.json`:\n\n```json\n{\n  \"instagram\": {\n    \"authorization_token\": \"YOUR_API_KEY\",\n    \"connection_id\": \"YOUR_CONNECTION_ID\",\n    \"account_id\": \"YOUR_ACCOUNT_ID\"\n  }\n}\n```\n\n## Workflow\n\nUse natural-language prompts in chat after the skill is installed. Include:\n\n- the media URL, local file, or carousel items;\n- the caption;\n- the post type when it is not obvious: `IMAGE`, `REELS`, or `CAROUSEL`;\n- whether a Reel should be shared to feed.\n\nAfter the posting flow finishes, confirm the Instagram post is live in the\nconnected account.\n\nExample:\n\n```text\nPost this image to Instagram with the caption \"Hello World\": https://example.com/image.jpg\n```\n\n## Search-Friendly Workflows\n\nCommon Instagram workflows include:\n\n- publish Instagram images from a remote URL or local file;\n- publish Instagram Reels from video URLs or local video files;\n- create Instagram carousels with multiple images or videos;\n- add captions to Instagram posts, Reels, and carousels;\n- check Instagram publish status after a publishing job is submitted;\n- use Instagram Insights as the connected MyBrandMetrics data source.\n\n## Use The Script Directly\n\nUse `scripts/publish_instagram.py`.\n\nSingle image from URL:\n\n```bash\npython3 scripts/publish_instagram.py \\\n  --api-key YOUR_KEY \\\n  --connection-id YOUR_CONNECTION_ID \\\n  --account-id YOUR_ACCOUNT_ID \\\n  --type IMAGE \\\n  --url \"https://example.com/image.jpg\" \\\n  --caption \"Hello World!\"\n```\n\nReel from local file:\n\n```bash\npython3 scripts/publish_instagram.py \\\n  --api-key YOUR_KEY \\\n  --connection-id YOUR_CONNECTION_ID \\\n  --account-id YOUR_ACCOUNT_ID \\\n  --type REELS \\\n  --path \"/path/to/video.mp4\" \\\n  --caption \"Check this out!\" \\\n  --thumb-offset 1000\n```\n\nMixed carousel:\n\n```bash\npython3 scripts/publish_instagram.py \\\n  --api-key YOUR_KEY \\\n  --connection-id YOUR_CONNECTION_ID \\\n  --account-id YOUR_ACCOUNT_ID \\\n  --type CAROUSEL \\\n  --items \"/path/to/img1.jpg\" \"https://example.com/video2.mp4\" \\\n  --caption \"My Carousel\"\n```\n\nCheck publish status:\n\n```bash\npython3 scripts/publish_instagram.py \\\n  --api-key YOUR_KEY \\\n  --connection-id YOUR_CONNECTION_ID \\\n  --account-id YOUR_ACCOUNT_ID \\\n  --check-id \"PUBLISH_ID\"\n```\n\n## Parameters\n\n| Parameter | Required | Purpose |\n| --- | --- | --- |\n| `--api-key` | Yes | MyBrandMetrics API key. |\n| `--connection-id` | Yes | Instagram connection ID from MyBrandMetrics. |\n| `--account-id` | Yes | MyBrandMetrics account ID. |\n| `--type` | No | `IMAGE`, `REELS`, or `CAROUSEL`; default is `IMAGE`. |\n| `--caption` | No | Instagram caption text. |\n| `--url` | No | Remote media URL for a single image or Reel. |\n| `--path` | No | Local media path for a single image or Reel. |\n| `--items` | For carousel | Space-separated carousel item URLs or paths. |\n| `--thumb-offset` | No | Reel thumbnail offset in milliseconds. |\n| `--no-feed` | No | Disable sharing Reels to feed. |\n| `--no-wait` | No | Do not wait for publish completion. |\n| `--check-id` | No | Check status of an existing publish ID. |\n\nBefore publishing, confirm the Instagram account, media source, post type, and\ncaption. For carousels, review every item before posting.\n\nFile v1.1.3:_meta.json\n\n{\n  \"ownerId\": \"kn713zgmx26jep6vrh0kbmmkw986a4xc\",\n  \"slug\": \"clawbus-instagram-publish\",\n  \"version\": \"1.1.3\",\n  \"publishedAt\": 1779795626249\n}\n\nFile v1.1.3:references/configuration.md\n\n# Configuration\n\nRead this file when the publishing script cannot find Instagram credentials or when\nyou need to prepare the workspace for publishing.\n\n## Supported config sources\n\nThe script supports these configuration sources:\n\n1. Command-line arguments:\n   - `--api-key`\n   - `--connection-id`\n   - `--account-id`\n2. Environment variables:\n   - `INSTAGRAM_API_KEY`\n   - `INSTAGRAM_AUTHORIZATION_TOKEN`\n   - `INSTAGRAM_CONNECTION_ID`\n   - `INSTAGRAM_ACCOUNT_ID`\n   - optional `INSTAGRAM_PUBLISH_CONFIG`\n3. A workspace `config.json` file with an `instagram` object\n\nArguments take precedence over environment variables, and environment variables\ntake precedence over `config.json`.\n\n## Expected config.json shape\n\n```json\n{\n  \"instagram\": {\n    \"authorization_token\": \"YOUR_API_KEY\",\n    \"connection_id\": \"YOUR_CONNECTION_ID\",\n    \"account_id\": \"YOUR_ACCOUNT_ID\"\n  }\n}\n```\n\nThe script also accepts `api_key` as a fallback key name.\n\n## Security rules\n\n- Never commit real tokens, connection IDs, or account IDs into the repository.\n- Prefer environment variables or runtime arguments in shared environments.\n- Do not echo secrets in logs or terminal output.\n\nFile v1.1.3:references/publishing-examples.md\n\n# Publishing Examples\n\nRead this file when you need a concrete invocation pattern.\n\n## Publish a single image from a URL\n\n```bash\npython3 instagram-publish/scripts/publish_instagram.py \\\n  --type IMAGE \\\n  --url \"https://example.com/image.jpg\" \\\n  --caption \"Hello World!\"\n```\n\n## Publish a reel from a local file\n\n```bash\npython3 instagram-publish/scripts/publish_instagram.py \\\n  --type REELS \\\n  --path \"/path/to/video.mp4\" \\\n  --caption \"Check this out!\" \\\n  --thumb-offset 1000\n```\n\n## Publish a mixed carousel\n\n```bash\npython3 instagram-publish/scripts/publish_instagram.py \\\n  --type CAROUSEL \\\n  --items \"/path/to/img1.jpg\" \"https://example.com/vid2.mp4\" \\\n  --caption \"My Carousel\"\n```\n\n## Check status\n\n```bash\npython3 instagram-publish/scripts/publish_instagram.py \\\n  --check-id \"v_pub_file~123\"\n```\n\nFile v1.1.3:skill-card.md\n\n## Description: <br>\nInstagram publishing skill for posting Instagram images, Reels, and carousels through the MyBrandMetrics API, including remote URLs, local files, captions, carousel items, Reel feed sharing, thumbnail offsets, publish status checks, and natural-language posting workflows after Instagram Insights is connected in MyBrandMetrics. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[clawbus](https://clawhub.ai/user/clawbus) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and external users use this skill to publish Instagram images, Reels, and carousels through MyBrandMetrics without building a direct Instagram publishing integration. It also supports checking publish status for submitted Instagram publishing jobs. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill can send post details and media to MyBrandMetrics and may publish live Instagram content. <br>\nMitigation: Use it only when that external service interaction is intended, and require final human confirmation of the account, media, caption, and post type before publishing. <br>\nRisk: The skill requires sensitive MyBrandMetrics and Instagram-related credentials. <br>\nMitigation: Provide credentials through runtime arguments or environment variables, avoid committing real tokens or account IDs, and do not echo secrets in logs. <br>\nRisk: Published content may appear on the connected Instagram account. <br>\nMitigation: Confirm the connected account and review every carousel item, caption, media source, and Reel feed-sharing setting before execution; verify the post after completion. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/clawbus/clawbus-instagram-publish) <br>\n- [Clawbus website](https://www.clawbus.com/) <br>\n- [MyBrandMetrics](https://mybrandmetrics.com/) <br>\n- [Configuration](references/configuration.md) <br>\n- [Publishing Examples](references/publishing-examples.md) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown guidance with inline shell commands and JSON configuration examples] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May produce publish status JSON from the MyBrandMetrics API when checking a submitted publish job.] <br>\n\n## Skill Version(s): <br>\n1.1.3 (source: release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.1.2: 5 files, 6329 bytes\n\nFiles: references/configuration.md (1160b), references/publishing-examples.md (812b), scripts/publish_instagram.py (9470b), SKILL.md (5469b), _meta.json (144b)\n\nFile v1.1.2:SKILL.md\n\n---\nname: Instagram Publisher\ndescription: >\n  Instagram publishing skill for posting Instagram images, Reels, and carousels\n  through the MyBrandMetrics API. Supports remote URLs, local files, captions,\n  carousel items, Reel feed sharing, thumbnail offset, publish status checks,\n  and natural-language Instagram posting workflows after Instagram Insights is\n  connected in MyBrandMetrics.\n---\n\n# Instagram Publisher\n\nPublish Instagram images, Reels, and carousels through the MyBrandMetrics API.\n\nUse this skill to publish to Instagram, post to IG, upload an Instagram Reel,\ncreate an Instagram carousel, publish a single image, or check an Instagram\npublishing result after Instagram Insights is connected in MyBrandMetrics.\n\nWebsite: [https://www.clawbus.com/](https://www.clawbus.com/)  \nMyBrandMetrics API: [https://mybrandmetrics.com/](https://mybrandmetrics.com/)\n\n## Core Capabilities\n\n| Capability | Details |\n| --- | --- |\n| Instagram image publishing | Publish a single Instagram image from a remote URL or local file. |\n| Instagram Reels publishing | Publish an Instagram Reel from a remote video URL or local video file. |\n| Instagram carousel publishing | Publish multi-item Instagram carousels from images, videos, local files, or URLs. |\n| Post metadata | Set the caption, Reel feed sharing option, and video thumbnail offset. |\n| Publish status checks | Check an Instagram publishing job after a post is submitted. |\n| Natural-language posting | Use natural-language prompts in chat after the skill is installed. |\n\n## Setup Flow\n\n1. Open [https://mybrandmetrics.com/](https://mybrandmetrics.com/) and sign in\n   with Google.\n2. In MyBrandMetrics, open **Data sources**.\n3. Connect **Instagram Insights** as a data source.\n4. Wait until the MyBrandMetrics connection is ready.\n5. In [https://mybrandmetrics.com/](https://mybrandmetrics.com/), get the\n   MyBrandMetrics API key.\n6. Install the `instagram-publish` skill.\n7. Start an Instagram image, Reel, carousel, or publish-status workflow with\n   natural-language instructions.\n\n## Authentication\n\nInstagram authorization is handled through MyBrandMetrics. Sign in with Google,\nconnect Instagram Insights as a data source, get the MyBrandMetrics API key,\nand use the Instagram connection ID and account ID from MyBrandMetrics when\nrunning direct script commands.\n\nExample `config.json`:\n\n```json\n{\n  \"instagram\": {\n    \"authorization_token\": \"YOUR_API_KEY\",\n    \"connection_id\": \"YOUR_CONNECTION_ID\",\n    \"account_id\": \"YOUR_ACCOUNT_ID\"\n  }\n}\n```\n\n## Workflow\n\nUse natural-language prompts in chat after the skill is installed. Include:\n\n- the media URL, local file, or carousel items;\n- the caption;\n- the post type when it is not obvious: `IMAGE`, `REELS`, or `CAROUSEL`;\n- whether a Reel should be shared to feed.\n\nAfter the posting flow finishes, confirm the Instagram post is live in the\nconnected account.\n\nExample:\n\n```text\nPost this image to Instagram with the caption \"Hello World\": https://example.com/image.jpg\n```\n\n## Search-Friendly Workflows\n\nCommon Instagram workflows include:\n\n- publish Instagram images from a remote URL or local file;\n- publish Instagram Reels from video URLs or local video files;\n- create Instagram carousels with multiple images or videos;\n- add captions to Instagram posts, Reels, and carousels;\n- check Instagram publish status after a publishing job is submitted;\n- use Instagram Insights as the connected MyBrandMetrics data source.\n\n## Use The Script Directly\n\nUse `scripts/publish_instagram.py`.\n\nSingle image from URL:\n\n```bash\npython3 scripts/publish_instagram.py \\\n  --api-key YOUR_KEY \\\n  --connection-id YOUR_CONNECTION_ID \\\n  --account-id YOUR_ACCOUNT_ID \\\n  --type IMAGE \\\n  --url \"https://example.com/image.jpg\" \\\n  --caption \"Hello World!\"\n```\n\nReel from local file:\n\n```bash\npython3 scripts/publish_instagram.py \\\n  --api-key YOUR_KEY \\\n  --connection-id YOUR_CONNECTION_ID \\\n  --account-id YOUR_ACCOUNT_ID \\\n  --type REELS \\\n  --path \"/path/to/video.mp4\" \\\n  --caption \"Check this out!\" \\\n  --thumb-offset 1000\n```\n\nMixed carousel:\n\n```bash\npython3 scripts/publish_instagram.py \\\n  --api-key YOUR_KEY \\\n  --connection-id YOUR_CONNECTION_ID \\\n  --account-id YOUR_ACCOUNT_ID \\\n  --type CAROUSEL \\\n  --items \"/path/to/img1.jpg\" \"https://example.com/video2.mp4\" \\\n  --caption \"My Carousel\"\n```\n\nCheck publish status:\n\n```bash\npython3 scripts/publish_instagram.py \\\n  --api-key YOUR_KEY \\\n  --connection-id YOUR_CONNECTION_ID \\\n  --account-id YOUR_ACCOUNT_ID \\\n  --check-id \"PUBLISH_ID\"\n```\n\n## Parameters\n\n| Parameter | Required | Purpose |\n| --- | --- | --- |\n| `--api-key` | Yes | MyBrandMetrics API key. |\n| `--connection-id` | Yes | Instagram connection ID from MyBrandMetrics. |\n| `--account-id` | Yes | MyBrandMetrics account ID. |\n| `--type` | No | `IMAGE`, `REELS`, or `CAROUSEL`; default is `IMAGE`. |\n| `--caption` | No | Instagram caption text. |\n| `--url` | No | Remote media URL for a single image or Reel. |\n| `--path` | No | Local media path for a single image or Reel. |\n| `--items` | For carousel | Space-separated carousel item URLs or paths. |\n| `--thumb-offset` | No | Reel thumbnail offset in milliseconds. |\n| `--no-feed` | No | Disable sharing Reels to feed. |\n| `--no-wait` | No | Do not wait for publish completion. |\n| `--check-id` | No | Check status of an existing publish ID. |\n\nBefore publishing, confirm the Instagram account, media source, post type, and\ncaption. For carousels, review every item before posting.\n\nFile v1.1.2:_meta.json\n\n{\n  \"ownerId\": \"kn713zgmx26jep6vrh0kbmmkw986a4xc\",\n  \"slug\": \"clawbus-instagram-publish\",\n  \"version\": \"1.1.2\",\n  \"publishedAt\": 1779165755747\n}\n\nFile v1.1.2:references/configuration.md\n\n# Configuration\n\nRead this file when the publishing script cannot find Instagram credentials or when\nyou need to prepare the workspace for publishing.\n\n## Supported config sources\n\nThe script supports these configuration sources:\n\n1. Command-line arguments:\n   - `--api-key`\n   - `--connection-id`\n   - `--account-id`\n2. Environment variables:\n   - `INSTAGRAM_API_KEY`\n   - `INSTAGRAM_AUTHORIZATION_TOKEN`\n   - `INSTAGRAM_CONNECTION_ID`\n   - `INSTAGRAM_ACCOUNT_ID`\n   - optional `INSTAGRAM_PUBLISH_CONFIG`\n3. A workspace `config.json` file with an `instagram` object\n\nArguments take precedence over environment variables, and environment variables\ntake precedence over `config.json`.\n\n## Expected config.json shape\n\n```json\n{\n  \"instagram\": {\n    \"authorization_token\": \"YOUR_API_KEY\",\n    \"connection_id\": \"YOUR_CONNECTION_ID\",\n    \"account_id\": \"YOUR_ACCOUNT_ID\"\n  }\n}\n```\n\nThe script also accepts `api_key` as a fallback key name.\n\n## Security rules\n\n- Never commit real tokens, connection IDs, or account IDs into the repository.\n- Prefer environment variables or runtime arguments in shared environments.\n- Do not echo secrets in logs or terminal output.\n\nFile v1.1.2:references/publishing-examples.md\n\n# Publishing Examples\n\nRead this file when you need a concrete invocation pattern.\n\n## Publish a single image from a URL\n\n```bash\npython3 instagram-publish/scripts/publish_instagram.py \\\n  --type IMAGE \\\n  --url \"https://example.com/image.jpg\" \\\n  --caption \"Hello World!\"\n```\n\n## Publish a reel from a local file\n\n```bash\npython3 instagram-publish/scripts/publish_instagram.py \\\n  --type REELS \\\n  --path \"/path/to/video.mp4\" \\\n  --caption \"Check this out!\" \\\n  --thumb-offset 1000\n```\n\n## Publish a mixed carousel\n\n```bash\npython3 instagram-publish/scripts/publish_instagram.py \\\n  --type CAROUSEL \\\n  --items \"/path/to/img1.jpg\" \"https://example.com/vid2.mp4\" \\\n  --caption \"My Carousel\"\n```\n\n## Check status\n\n```bash\npython3 instagram-publish/scripts/publish_instagram.py \\\n  --check-id \"v_pub_file~123\"\n```\n\nArchive v1.1.1: 5 files, 6325 bytes\n\nFiles: references/configuration.md (1160b), references/publishing-examples.md (812b), scripts/publish_instagram.py (9470b), SKILL.md (5145b), _meta.json (144b)\n\nFile v1.1.1:SKILL.md\n\n---\nname: instagram-publish\ndescription: >\n  Publish Instagram Images, Reels, and Carousels through the MyBrandMetrics API.\n  Supports remote URLs, local files, captions, carousel items, Reel feed sharing,\n  thumbnail offset, publish status checks, and natural-language posting\n  workflows after Instagram Insights is connected in MyBrandMetrics.\n---\n\n# instagram-publish\n\nPublish Instagram Images, Reels, and Carousels through the MyBrandMetrics API.\n\nUse this skill when the user asks to connect Instagram, publish to Instagram,\npost to IG, upload an Instagram Reel, create a carousel, or check an Instagram\npublishing result.\n\nWebsite: [https://www.clawbus.com/](https://www.clawbus.com/)  \nMyBrandMetrics API: [https://mybrandmetrics.com/](https://mybrandmetrics.com/)\n\n## Core Capabilities\n\n| Capability | Details |\n| --- | --- |\n| Image publishing | Publish a single Instagram image from a remote URL or local file. |\n| Reels publishing | Publish a Reel from a remote video URL or local video file. |\n| Carousel publishing | Publish multi-item carousels from images, videos, local files, or URLs. |\n| Post metadata | Set the caption, Reel feed sharing option, and video thumbnail offset. |\n| Natural-language posting | Use natural-language prompts after the skill is installed. |\n\n## Requirements\n\n- A Google account.\n- Access to MyBrandMetrics.\n- Instagram Insights connected as a MyBrandMetrics data source.\n- A MyBrandMetrics API key for Instagram publishing.\n- An Instagram connection ID and account ID from MyBrandMetrics.\n- Media to publish, either remote URLs or local files.\n- A caption.\n\n## Setup Flow\n\n1. Open [https://mybrandmetrics.com/](https://mybrandmetrics.com/) and sign in\n   with Google.\n2. In MyBrandMetrics, open **Data sources**.\n3. Connect **Instagram Insights** as a data source.\n4. Wait until the MyBrandMetrics connection is ready.\n5. Get the MyBrandMetrics API key.\n6. Install the `instagram-publish` skill.\n7. Start the Instagram posting workflow with natural-language instructions.\n\n## Authentication\n\nInstagram authorization is handled through MyBrandMetrics.\n\n1. Sign in to MyBrandMetrics with Google.\n2. Connect Instagram Insights as a data source.\n3. Make sure the Instagram connection is active before publishing.\n\nFor direct script usage, advanced users can provide a MyBrandMetrics API key,\nInstagram connection ID, and account ID through command-line arguments,\nenvironment variables, or a workspace `config.json` file.\n\nExample `config.json`:\n\n```json\n{\n  \"instagram\": {\n    \"authorization_token\": \"YOUR_API_KEY\",\n    \"connection_id\": \"YOUR_CONNECTION_ID\",\n    \"account_id\": \"YOUR_ACCOUNT_ID\"\n  }\n}\n```\n\nThe script also accepts `api_key` as a fallback key name.\n\nExample:\n\n```text\nPost this image to Instagram with the caption \"Hello World\": https://example.com/image.jpg\n```\n\nThe request should include:\n\n- the media URL, local file, or carousel items;\n- the caption;\n- the post type when it is not obvious: `IMAGE`, `REELS`, or `CAROUSEL`;\n- whether a Reel should be shared to feed.\n\nAfter the posting flow finishes, confirm the Instagram post is live in the\nconnected account.\n\n## Use The Script Directly\n\nUse `scripts/publish_instagram.py`.\n\nSingle image from URL:\n\n```bash\npython3 scripts/publish_instagram.py \\\n  --api-key YOUR_KEY \\\n  --connection-id YOUR_CONNECTION_ID \\\n  --account-id YOUR_ACCOUNT_ID \\\n  --type IMAGE \\\n  --url \"https://example.com/image.jpg\" \\\n  --caption \"Hello World!\"\n```\n\nReel from local file:\n\n```bash\npython3 scripts/publish_instagram.py \\\n  --api-key YOUR_KEY \\\n  --connection-id YOUR_CONNECTION_ID \\\n  --account-id YOUR_ACCOUNT_ID \\\n  --type REELS \\\n  --path \"/path/to/video.mp4\" \\\n  --caption \"Check this out!\" \\\n  --thumb-offset 1000\n```\n\nMixed carousel:\n\n```bash\npython3 scripts/publish_instagram.py \\\n  --api-key YOUR_KEY \\\n  --connection-id YOUR_CONNECTION_ID \\\n  --account-id YOUR_ACCOUNT_ID \\\n  --type CAROUSEL \\\n  --items \"/path/to/img1.jpg\" \"https://example.com/video2.mp4\" \\\n  --caption \"My Carousel\"\n```\n\nCheck publish status:\n\n```bash\npython3 scripts/publish_instagram.py \\\n  --api-key YOUR_KEY \\\n  --connection-id YOUR_CONNECTION_ID \\\n  --account-id YOUR_ACCOUNT_ID \\\n  --check-id \"PUBLISH_ID\"\n```\n\n## Parameters\n\n| Parameter | Required | Purpose |\n| --- | --- | --- |\n| `--api-key` | Yes | MyBrandMetrics API key. |\n| `--connection-id` | Yes | Instagram connection ID from MyBrandMetrics. |\n| `--account-id` | Yes | MyBrandMetrics account ID. |\n| `--type` | No | `IMAGE`, `REELS`, or `CAROUSEL`; default is `IMAGE`. |\n| `--caption` | No | Instagram caption text. |\n| `--url` | No | Remote media URL for a single image or Reel. |\n| `--path` | No | Local media path for a single image or Reel. |\n| `--items` | For carousel | Space-separated carousel item URLs or paths. |\n| `--thumb-offset` | No | Reel thumbnail offset in milliseconds. |\n| `--no-feed` | No | Disable sharing Reels to feed. |\n| `--no-wait` | No | Do not wait for publish completion. |\n| `--check-id` | No | Check status of an existing publish ID. |\n\nBefore publishing, confirm the Instagram account, media source, post type, and\ncaption. For carousels, review every item before posting.\n\nFile v1.1.1:_meta.json\n\n{\n  \"ownerId\": \"kn713zgmx26jep6vrh0kbmmkw986a4xc\",\n  \"slug\": \"clawbus-instagram-publish\",\n  \"version\": \"1.1.1\",\n  \"publishedAt\": 1779067291523\n}\n\nFile v1.1.1:references/configuration.md\n\n# Configuration\n\nRead this file when the publishing script cannot find Instagram credentials or when\nyou need to prepare the workspace for publishing.\n\n## Supported config sources\n\nThe script supports these configuration sources:\n\n1. Command-line arguments:\n   - `--api-key`\n   - `--connection-id`\n   - `--account-id`\n2. Environment variables:\n   - `INSTAGRAM_API_KEY`\n   - `INSTAGRAM_AUTHORIZATION_TOKEN`\n   - `INSTAGRAM_CONNECTION_ID`\n   - `INSTAGRAM_ACCOUNT_ID`\n   - optional `INSTAGRAM_PUBLISH_CONFIG`\n3. A workspace `config.json` file with an `instagram` object\n\nArguments take precedence over environment variables, and environment variables\ntake precedence over `config.json`.\n\n## Expected config.json shape\n\n```json\n{\n  \"instagram\": {\n    \"authorization_token\": \"YOUR_API_KEY\",\n    \"connection_id\": \"YOUR_CONNECTION_ID\",\n    \"account_id\": \"YOUR_ACCOUNT_ID\"\n  }\n}\n```\n\nThe script also accepts `api_key` as a fallback key name.\n\n## Security rules\n\n- Never commit real tokens, connection IDs, or account IDs into the repository.\n- Prefer environment variables or runtime arguments in shared environments.\n- Do not echo secrets in logs or terminal output.\n\nFile v1.1.1:references/publishing-examples.md\n\n# Publishing Examples\n\nRead this file when you need a concrete invocation pattern.\n\n## Publish a single image from a URL\n\n```bash\npython3 instagram-publish/scripts/publish_instagram.py \\\n  --type IMAGE \\\n  --url \"https://example.com/image.jpg\" \\\n  --caption \"Hello World!\"\n```\n\n## Publish a reel from a local file\n\n```bash\npython3 instagram-publish/scripts/publish_instagram.py \\\n  --type REELS \\\n  --path \"/path/to/video.mp4\" \\\n  --caption \"Check this out!\" \\\n  --thumb-offset 1000\n```\n\n## Publish a mixed carousel\n\n```bash\npython3 instagram-publish/scripts/publish_instagram.py \\\n  --type CAROUSEL \\\n  --items \"/path/to/img1.jpg\" \"https://example.com/vid2.mp4\" \\\n  --caption \"My Carousel\"\n```\n\n## Check status\n\n```bash\npython3 instagram-publish/scripts/publish_instagram.py \\\n  --check-id \"v_pub_file~123\"\n```\n\nArchive v1.1.0: 5 files, 6328 bytes\n\nFiles: references/configuration.md (1160b), references/publishing-examples.md (812b), scripts/publish_instagram.py (9470b), SKILL.md (5169b), _meta.json (144b)\n\nFile v1.1.0:SKILL.md\n\n---\nname: clawbus-instagram-publish\ndescription: >\n  Publish Instagram Images, Reels, and Carousels through the MyBrandMetrics API.\n  Supports remote URLs, local files, captions, carousel items, Reel feed sharing,\n  thumbnail offset, publish status checks, and natural-language posting\n  workflows after Instagram Insights is connected in MyBrandMetrics.\n---\n\n# clawbus-instagram-publish\n\nPublish Instagram Images, Reels, and Carousels through the MyBrandMetrics API.\n\nUse this skill when the user asks to connect Instagram, publish to Instagram,\npost to IG, upload an Instagram Reel, create a carousel, or check an Instagram\npublishing result.\n\nWebsite: [https://www.clawbus.com/](https://www.clawbus.com/)  \nMyBrandMetrics API: [https://mybrandmetrics.com/](https://mybrandmetrics.com/)\n\n## Core Capabilities\n\n| Capability | Details |\n| --- | --- |\n| Image publishing | Publish a single Instagram image from a remote URL or local file. |\n| Reels publishing | Publish a Reel from a remote video URL or local video file. |\n| Carousel publishing | Publish multi-item carousels from images, videos, local files, or URLs. |\n| Post metadata | Set the caption, Reel feed sharing option, and video thumbnail offset. |\n| Natural-language posting | Use natural-language prompts after the skill is installed. |\n\n## Requirements\n\n- A Google account.\n- Access to MyBrandMetrics.\n- Instagram Insights connected as a MyBrandMetrics data source.\n- A MyBrandMetrics API key for Instagram publishing.\n- An Instagram connection ID and account ID from MyBrandMetrics.\n- Media to publish, either remote URLs or local files.\n- A caption.\n\n## Setup Flow\n\n1. Open [https://mybrandmetrics.com/](https://mybrandmetrics.com/) and sign in\n   with Google.\n2. In MyBrandMetrics, open **Data sources**.\n3. Connect **Instagram Insights** as a data source.\n4. Wait until the MyBrandMetrics connection is ready.\n5. Get the MyBrandMetrics API key.\n6. Install the `clawbus-instagram-publish` skill.\n7. Start the Instagram posting workflow with natural-language instructions.\n\n## Authentication\n\nInstagram authorization is handled through MyBrandMetrics.\n\n1. Sign in to MyBrandMetrics with Google.\n2. Connect Instagram Insights as a data source.\n3. Make sure the Instagram connection is active before publishing.\n\nFor direct script usage, advanced users can provide a MyBrandMetrics API key,\nInstagram connection ID, and account ID through command-line arguments,\nenvironment variables, or a workspace `config.json` file.\n\nExample `config.json`:\n\n```json\n{\n  \"instagram\": {\n    \"authorization_token\": \"YOUR_API_KEY\",\n    \"connection_id\": \"YOUR_CONNECTION_ID\",\n    \"account_id\": \"YOUR_ACCOUNT_ID\"\n  }\n}\n```\n\nThe script also accepts `api_key` as a fallback key name.\n\nExample:\n\n```text\nPost this image to Instagram with the caption \"Hello World\": https://example.com/image.jpg\n```\n\nThe request should include:\n\n- the media URL, local file, or carousel items;\n- the caption;\n- the post type when it is not obvious: `IMAGE`, `REELS`, or `CAROUSEL`;\n- whether a Reel should be shared to feed.\n\nAfter the posting flow finishes, confirm the Instagram post is live in the\nconnected account.\n\n## Use The Script Directly\n\nUse `scripts/publish_instagram.py`.\n\nSingle image from URL:\n\n```bash\npython3 scripts/publish_instagram.py \\\n  --api-key YOUR_KEY \\\n  --connection-id YOUR_CONNECTION_ID \\\n  --account-id YOUR_ACCOUNT_ID \\\n  --type IMAGE \\\n  --url \"https://example.com/image.jpg\" \\\n  --caption \"Hello World!\"\n```\n\nReel from local file:\n\n```bash\npython3 scripts/publish_instagram.py \\\n  --api-key YOUR_KEY \\\n  --connection-id YOUR_CONNECTION_ID \\\n  --account-id YOUR_ACCOUNT_ID \\\n  --type REELS \\\n  --path \"/path/to/video.mp4\" \\\n  --caption \"Check this out!\" \\\n  --thumb-offset 1000\n```\n\nMixed carousel:\n\n```bash\npython3 scripts/publish_instagram.py \\\n  --api-key YOUR_KEY \\\n  --connection-id YOUR_CONNECTION_ID \\\n  --account-id YOUR_ACCOUNT_ID \\\n  --type CAROUSEL \\\n  --items \"/path/to/img1.jpg\" \"https://example.com/video2.mp4\" \\\n  --caption \"My Carousel\"\n```\n\nCheck publish status:\n\n```bash\npython3 scripts/publish_instagram.py \\\n  --api-key YOUR_KEY \\\n  --connection-id YOUR_CONNECTION_ID \\\n  --account-id YOUR_ACCOUNT_ID \\\n  --check-id \"PUBLISH_ID\"\n```\n\n## Parameters\n\n| Parameter | Required | Purpose |\n| --- | --- | --- |\n| `--api-key` | Yes | MyBrandMetrics API key. |\n| `--connection-id` | Yes | Instagram connection ID from MyBrandMetrics. |\n| `--account-id` | Yes | MyBrandMetrics account ID. |\n| `--type` | No | `IMAGE`, `REELS`, or `CAROUSEL`; default is `IMAGE`. |\n| `--caption` | No | Instagram caption text. |\n| `--url` | No | Remote media URL for a single image or Reel. |\n| `--path` | No | Local media path for a single image or Reel. |\n| `--items` | For carousel | Space-separated carousel item URLs or paths. |\n| `--thumb-offset` | No | Reel thumbnail offset in milliseconds. |\n| `--no-feed` | No | Disable sharing Reels to feed. |\n| `--no-wait` | No | Do not wait for publish completion. |\n| `--check-id` | No | Check status of an existing publish ID. |\n\nBefore publishing, confirm the Instagram account, media source, post type, and\ncaption. For carousels, review every item before posting.\n\nFile v1.1.0:_meta.json\n\n{\n  \"ownerId\": \"kn713zgmx26jep6vrh0kbmmkw986a4xc\",\n  \"slug\": \"clawbus-instagram-publish\",\n  \"version\": \"1.1.0\",\n  \"publishedAt\": 1778851008773\n}\n\nFile v1.1.0:references/configuration.md\n\n# Configuration\n\nRead this file when the publishing script cannot find Instagram credentials or when\nyou need to prepare the workspace for publishing.\n\n## Supported config sources\n\nThe script supports these configuration sources:\n\n1. Command-line arguments:\n   - `--api-key`\n   - `--connection-id`\n   - `--account-id`\n2. Environment variables:\n   - `INSTAGRAM_API_KEY`\n   - `INSTAGRAM_AUTHORIZATION_TOKEN`\n   - `INSTAGRAM_CONNECTION_ID`\n   - `INSTAGRAM_ACCOUNT_ID`\n   - optional `INSTAGRAM_PUBLISH_CONFIG`\n3. A workspace `config.json` file with an `instagram` object\n\nArguments take precedence over environment variables, and environment variables\ntake precedence over `config.json`.\n\n## Expected config.json shape\n\n```json\n{\n  \"instagram\": {\n    \"authorization_token\": \"YOUR_API_KEY\",\n    \"connection_id\": \"YOUR_CONNECTION_ID\",\n    \"account_id\": \"YOUR_ACCOUNT_ID\"\n  }\n}\n```\n\nThe script also accepts `api_key` as a fallback key name.\n\n## Security rules\n\n- Never commit real tokens, connection IDs, or account IDs into the repository.\n- Prefer environment variables or runtime arguments in shared environments.\n- Do not echo secrets in logs or terminal output.\n\nFile v1.1.0:references/publishing-examples.md\n\n# Publishing Examples\n\nRead this file when you need a concrete invocation pattern.\n\n## Publish a single image from a URL\n\n```bash\npython3 instagram-publish/scripts/publish_instagram.py \\\n  --type IMAGE \\\n  --url \"https://example.com/image.jpg\" \\\n  --caption \"Hello World!\"\n```\n\n## Publish a reel from a local file\n\n```bash\npython3 instagram-publish/scripts/publish_instagram.py \\\n  --type REELS \\\n  --path \"/path/to/video.mp4\" \\\n  --caption \"Check this out!\" \\\n  --thumb-offset 1000\n```\n\n## Publish a mixed carousel\n\n```bash\npython3 instagram-publish/scripts/publish_instagram.py \\\n  --type CAROUSEL \\\n  --items \"/path/to/img1.jpg\" \"https://example.com/vid2.mp4\" \\\n  --caption \"My Carousel\"\n```\n\n## Check status\n\n```bash\npython3 instagram-publish/scripts/publish_instagram.py \\\n  --check-id \"v_pub_file~123\"\n```\n\nArchive v1.0.0: 5 files, 5739 bytes\n\nFiles: references/configuration.md (1160b), references/publishing-examples.md (812b), scripts/publish_instagram.py (9407b), SKILL.md (2913b), _meta.json (144b)\n\nFile v1.0.0:SKILL.md\n\n---\nname: instagram-publish\ndescription: Publish Images, Reels, and Carousels to Instagram using the MyBrandMetrics API. Supports local file uploads and URLs. Handles single posts and multi-item carousels. Includes options for caption, thumbnail offset, sharing to feed, and polling for status. Triggered when the user asks to \"publish to Instagram\", \"post to IG\", or \"upload to Instagram\".\n---\n\n# Instagram Publish Skill\n\nThis skill enables publishing content to Instagram via the MyBrandMetrics API.\n\n## Usage\n\nUse the provided Python script `scripts/publish_instagram.py` to publish content.\n\n### Arguments\n\n- `--api-key`: MyBrandMetrics API Key (check `TOOLS.md` for current key)\n- `--connection-id`: Instagram Connection ID\n- `--account-id`: MyBrandMetrics Account ID\n- `--type`: Media type (`IMAGE`, `REELS`, `CAROUSEL`)\n- `--caption`: Text for the post\n- `--url`: URL for single Image/Reel\n- `--path`: Local path for single Image/Reel\n- `--items`: Space-separated list of URLs or paths for Carousel items\n- `--thumb-offset`: Thumbnail offset in ms (default: `1000`)\n- `--no-feed`: Flag to disable sharing to feed (Reels only)\n- `--no-wait`: Flag to disable waiting for completion (polls automatically by default)\n- `--check-id`: Check status of a specific publish ID\n\n### Reliability Checklist (Mandatory)\n\nBefore running the publish command, verify:\n1.  **Item Count**: Count every single attachment and URL the user provided. Ensure `--items` includes all of them.\n2.  **Item Type**: The script auto-detects type based on extension, but double-check if a file has no extension.\n3.  **Caption**: Ensure the exact caption is captured.\n4.  **Local vs URL**: The skill handles mixed local/URL carousels by downloading URLs first for reliability.\n\n## Examples\n\n#### Publish a single Image (URL)\n```bash\npython3 scripts/publish_instagram.py --api-key YOUR_KEY --connection-id YOUR_CONN_ID --account-id YOUR_ACC_ID --type IMAGE --url \"https://example.com/image.jpg\" --caption \"Hello World!\"\n```\n\n#### Publish a Reel (Local File)\n```bash\npython3 scripts/publish_instagram.py --api-key YOUR_KEY --connection-id YOUR_CONN_ID --account-id YOUR_ACC_ID --type REELS --path /path/to/video.mp4 --caption \"Check this out!\" --thumb-offset 1000\n```\n\n#### Publish a Carousel (Mix of local and URL)\n```bash\npython3 scripts/publish_instagram.py --api-key YOUR_KEY --connection-id YOUR_CONN_ID --account-id YOUR_ACC_ID --type CAROUSEL --items \"/path/to/img1.jpg\" \"https://example.com/vid2.mp4\" --caption \"My Carousel\"\n```\n\n#### Check Status\n```bash\npython3 scripts/publish_instagram.py --api-key YOUR_KEY --connection-id YOUR_CONN_ID --account-id YOUR_ACC_ID --check-id v_pub_file~...\n```\n\n## Security\n\n- Always refer to `TOOLS.md` for the current API key.\n- If no key is found in `TOOLS.md`, ask the user for it.\n- Do not expose the connection ID or account ID in logs if possible, though they are often provided in prompts.\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn713zgmx26jep6vrh0kbmmkw986a4xc\",\n  \"slug\": \"clawbus-instagram-publish\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1778224366049\n}\n\nFile v1.0.0:references/configuration.md\n\n# Configuration\n\nRead this file when the publishing script cannot find Instagram credentials or when\nyou need to prepare the workspace for publishing.\n\n## Supported config sources\n\nThe script supports these configuration sources:\n\n1. Command-line arguments:\n   - `--api-key`\n   - `--connection-id`\n   - `--account-id`\n2. Environment variables:\n   - `INSTAGRAM_API_KEY`\n   - `INSTAGRAM_AUTHORIZATION_TOKEN`\n   - `INSTAGRAM_CONNECTION_ID`\n   - `INSTAGRAM_ACCOUNT_ID`\n   - optional `INSTAGRAM_PUBLISH_CONFIG`\n3. A workspace `config.json` file with an `instagram` object\n\nArguments take precedence over environment variables, and environment variables\ntake precedence over `config.json`.\n\n## Expected config.json shape\n\n```json\n{\n  \"instagram\": {\n    \"authorization_token\": \"YOUR_API_KEY\",\n    \"connection_id\": \"YOUR_CONNECTION_ID\",\n    \"account_id\": \"YOUR_ACCOUNT_ID\"\n  }\n}\n```\n\nThe script also accepts `api_key` as a fallback key name.\n\n## Security rules\n\n- Never commit real tokens, connection IDs, or account IDs into the repository.\n- Prefer environment variables or runtime arguments in shared environments.\n- Do not echo secrets in logs or terminal output.\n\nFile v1.0.0:references/publishing-examples.md\n\n# Publishing Examples\n\nRead this file when you need a concrete invocation pattern.\n\n## Publish a single image from a URL\n\n```bash\npython3 instagram-publish/scripts/publish_instagram.py \\\n  --type IMAGE \\\n  --url \"https://example.com/image.jpg\" \\\n  --caption \"Hello World!\"\n```\n\n## Publish a reel from a local file\n\n```bash\npython3 instagram-publish/scripts/publish_instagram.py \\\n  --type REELS \\\n  --path \"/path/to/video.mp4\" \\\n  --caption \"Check this out!\" \\\n  --thumb-offset 1000\n```\n\n## Publish a mixed carousel\n\n```bash\npython3 instagram-publish/scripts/publish_instagram.py \\\n  --type CAROUSEL \\\n  --items \"/path/to/img1.jpg\" \"https://example.com/vid2.mp4\" \\\n  --caption \"My Carousel\"\n```\n\n## Check status\n\n```bash\npython3 instagram-publish/scripts/publish_instagram.py \\\n  --check-id \"v_pub_file~123\"\n```","readmeExcerpt":"Skill: Instagram Publisher Owner: clawbus Summary: Publish Instagram images, Reels, and carousels, check Instagram publishing status, fetch recent Instagram direct messages, and send Instagram direct messages... Tags: creator:1.1.5, instagram:1.1.5, instagram-carousel:1.1.5, instagram-dm:1.1.5, instagram-publish:1.1.5, instagram-reels:1.1.5, latest:1.1.5, mybrandmetrics:1.1.5, no-mcp:1.1.5, publishing:1.1.5, social-m","codeSnippets":[],"executableExamples":[{"language":"json","snippet":"{\n  \"instagram\": {\n    \"authorization_token\": \"YOUR_API_KEY\",\n    \"connection_id\": \"YOUR_CONNECTION_ID\",\n    \"account_id\": \"YOUR_ACCOUNT_ID\"\n  }\n}"},{"language":"bash","snippet":"python3 scripts/publish_instagram.py \\\n  --type IMAGE \\\n  --url \"https://example.com/image.jpg\" \\\n  --caption \"Hello World!\""},{"language":"bash","snippet":"python3 scripts/publish_instagram.py \\\n  --type REELS \\\n  --path \"/path/to/video.mp4\" \\\n  --caption \"Check this out!\" \\\n  --thumb-offset 1000"},{"language":"bash","snippet":"python3 scripts/publish_instagram.py \\\n  --type CAROUSEL \\\n  --items \"/path/to/img1.jpg\" \"https://example.com/video2.mp4\" \\\n  --caption \"My Carousel\""},{"language":"bash","snippet":"python3 scripts/publish_instagram.py \\\n  --check-id \"PUBLISH_ID\""},{"language":"bash","snippet":"python3 scripts/receive_messages.py \\\n  --limit 25"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: Instagram Publisher\ndescription: >\n  Publish Instagram images, Reels, and carousels, check Instagram publishing\n  status, fetch recent Instagram direct messages, and send Instagram direct\n  messages through a preconfigured MyBrandMetrics API connection. Supports\n  local files, remote media URLs, captions, carousel items, Reel feed sharing,\n  thumbnail offset, publish status checks, and messaging workflows after\n  Instagram Insights is connected in MyBrandMetrics.\ncompatibility:\n  tools:\n    - bash\n    - python\n  dependencies:\n    - requests\n---\n\n# Instagram Publisher\n\nPublish Instagram images, Reels, and carousels, check publish status, and work\nwith Instagram direct messages through bundled MyBrandMetrics scripts.\n\nUse this skill when the user wants to publish to Instagram, post to IG, upload a\nReel, create a carousel, publish a hosted media URL, publish a local media file,\ncheck an Instagram publish job, fetch recent Instagram DMs, or send an\nInstagram direct message.\n\nWebsite: [https://www.clawbus.com/](https://www.clawbus.com/)  \nMyBrandMetrics API: [https://mybrandmetrics.com/](https://mybrandmetrics.com/)\n\n## Why This Instagram Publisher\n\n| This skill | Building your own Instagram publishing and messaging integration |\n| --- | --- |\n| Sign in to MyBrandMetrics with Google and connect Instagram Insights. | Set up and maintain your own Meta developer integration. |\n| Use a MyBrandMetrics API key, connection ID, and account ID for publishing. | Manage app credentials, account selection, publishing tokens, and token handling yourself. |\n| Publish images and Reels from local files or remote URLs with one script. | Implement media upload, hosted media handling, and publish requests for each media type. |\n| Build mixed carousels by passing local files or URLs as `--items`. | Upload every carousel child, collect child IDs, wait for processing, and publish the final carousel yourself. |\n| Set captions, Reel feed sharing, thumbnail offset, wait behavior, and status checks from CLI flags. | Build separate request handling for metadata, media-type differences, retries, and publish-status polling. |\n| Fetch recent Instagram DMs and send replies with bundled messaging scripts. | Implement Instagram messaging endpoints and handle Meta messaging-window errors yourself. |\n\nUse this when you want Instagram publishing and messaging workflows without\nbuilding a full Instagram backend yourself.\n\n## Core Capabilities\n\n| Capability | Details |\n| --- | --- |\n| Image publishing | Publish a single Instagram image from a remote URL or local file. |\n| Reels publishing | Publish an Instagram Reel from a remote video URL or local video file. |\n| Carousel publishing | Publish multi-item carousels from images and videos, including mixed local files and remote URLs. |\n| Post metadata | Set captions, Reel feed sharing, thumbnail offset, and wait behavior. |\n| Publish status checks | Check an existing Instagram publish job with a returned publish ID. |\n| Direct mes"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn713zgmx26jep6vrh0kbmmkw986a4xc\",\n  \"slug\": \"clawbus-instagram-publish\",\n  \"version\": \"1.1.5\",\n  \"publishedAt\": 1779939181548\n}"},{"path":"references/configuration.md","content":"# Configuration\n\nRead this file when the publishing script cannot find Instagram credentials or when\nyou need to prepare the workspace for publishing.\n\n## Supported config sources\n\nThe script supports these configuration sources:\n\n1. Command-line arguments:\n   - `--api-key`\n   - `--connection-id`\n   - `--account-id`\n   - `--config`\n2. Environment variables:\n   - `INSTAGRAM_API_KEY`\n   - `INSTAGRAM_AUTHORIZATION_TOKEN`\n   - `INSTAGRAM_CONNECTION_ID`\n   - `INSTAGRAM_ACCOUNT_ID`\n   - optional `INSTAGRAM_PUBLISH_CONFIG`\n3. A workspace `config.json` file with an `instagram` object\n\nArguments take precedence over environment variables, and environment variables\ntake precedence over `config.json`.\n\nMessaging scripts only require the API key and connection ID. Publishing scripts\nalso require the account ID.\n\n## Expected config.json shape\n\n```json\n{\n  \"instagram\": {\n    \"authorization_token\": \"YOUR_API_KEY\",\n    \"connection_id\": \"YOUR_CONNECTION_ID\",\n    \"account_id\": \"YOUR_ACCOUNT_ID\"\n  }\n}\n```\n\nThe script also accepts `api_key` as a fallback key name.\n\n## Security rules\n\n- Never commit real tokens, connection IDs, or account IDs into the repository.\n- Prefer environment variables or runtime arguments in shared environments.\n- Do not echo secrets in logs or terminal output."},{"path":"references/publishing-examples.md","content":"# Publishing Examples\n\nRead this file when you need a concrete invocation pattern.\n\n## Publish a single image from a URL\n\n```bash\npython3 scripts/publish_instagram.py \\\n  --type IMAGE \\\n  --url \"https://example.com/image.jpg\" \\\n  --caption \"Hello World!\"\n```\n\n## Publish a reel from a local file\n\n```bash\npython3 scripts/publish_instagram.py \\\n  --type REELS \\\n  --path \"/path/to/video.mp4\" \\\n  --caption \"Check this out!\" \\\n  --thumb-offset 1000\n```\n\n## Publish a mixed carousel\n\n```bash\npython3 scripts/publish_instagram.py \\\n  --type CAROUSEL \\\n  --items \"/path/to/img1.jpg\" \"https://example.com/vid2.mp4\" \\\n  --caption \"My Carousel\"\n```\n\n## Check status\n\n```bash\npython3 scripts/publish_instagram.py \\\n  --check-id \"v_pub_file~123\"\n```\n\n## Fetch recent direct messages\n\n```bash\npython3 scripts/receive_messages.py \\\n  --limit 25\n```\n\n## Send a direct message\n\n```bash\npython3 scripts/send_message.py \\\n  --conversation-id \"CONVERSATION_ID\" \\\n  --message \"Thanks for reaching out!\"\n```\n\nInstagram direct messaging is subject to Meta platform policy and messaging-window\nlimits. If the API returns an error such as `(#10) This message is sent outside\nof allowed window`, report the real response instead of retrying indefinitely."},{"path":"skill-card.md","content":"## Description:\n\nPublish Instagram images, Reels, and carousels, check Instagram publishing status, fetch recent Instagram direct messages, and send Instagram direct messages through a preconfigured MyBrandMetrics API connection.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[clawbus](https://clawhub.ai/user/clawbus)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and developers use this skill to publish Instagram media, check publish status, and handle Instagram direct-message workflows through MyBrandMetrics after connecting Instagram Insights.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill can publish posts and send direct messages that affect an Instagram account.\n\nMitigation: Confirm the Instagram account, media source, post type, caption, conversation ID, and exact message text before execution.\n\nRisk: Carousel publishing can fetch arbitrary remote URLs from the user's machine before upload.\n\nMitigation: Use trusted local files or trusted media URLs only, and avoid untrusted remote carousel items until URL validation and size limits are added.\n\nRisk: Credentials may be exposed if API keys, connection IDs, or account IDs are stored carelessly.\n\nMitigation: Prefer environment variables or runtime arguments in shared workspaces and do not commit real credentials.\n\n## Reference(s):\n\n- [ClawHub Skill Page](https://clawhub.ai/clawbus/skills/clawbus-instagram-publish)\n- [Configuration](references/configuration.md)\n- [Publishing Examples](references/publishing-examples.md)\n- [Clawbus Website](https://www.clawbus.com/)\n- [MyBrandMetrics](https://mybrandmetrics.com/)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with shell command examples and JSON API responses from the bundled scripts]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires a MyBrandMetrics API key, Instagram connection ID, and for publishing workflows an Instagram account ID.]\n\n## Skill Version(s):\n\n1.1.5 (source: release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":1361,"uniquenessScore":42,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-10T15:37:48.908Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-10T15:37:48.908Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T21:51:02.340Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}