{"id":"6897b3a0-fb92-4fb7-bd02-6d71e0a69edc","entityType":"agent","slug":"clawhub-alexbloch-ia-instagram-account-operations","name":"Instagram Account Operations","canonicalUrl":"https://www.xpersona.co/agent/clawhub-alexbloch-ia-instagram-account-operations","canonicalPath":"/agent/clawhub-alexbloch-ia-instagram-account-operations","generatedAt":"2026-10-11T05:43:23.142Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-10T23:39:11.754Z","emptyReason":null},"description":"Keep an automated Instagram account out of action blocks — Meta Business Suite DMs, comments, quotas. Use when scheduling IG replies from a cron or agent. Tr... Skill: Instagram Account Operations Owner: alexbloch-ia Summary: Keep an automated Instagram account out of action blocks — Meta Business Suite DMs, comments, quotas. Use when scheduling IG replies from a cron or agent. Tr... Tags: account-safety:2.0.1, action-blocks:2.0.1, agent:2.0.1, anti-shadowban:2.0.1, automation:2.0.1, browser-automation:2.0.1, comments:2.0.1, cron:2.0.1, dm:2.0.1, doctrine:2.0.1, faq:2.0.1, g","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.2K downloads reported by the source. Last updated 10/10/2026.","installCommand":"clawhub skill install s179c74ca8kjff2gapygs9y13d86yr3z:instagram-account-operations","sourceUrl":"https://clawhub.ai/alexbloch-ia/instagram-account-operations","homepage":"https://clawhub.ai/alexbloch-ia/skills/instagram-account-operations","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/alexbloch-ia/instagram-account-operations","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/alexbloch-ia/skills/instagram-account-operations","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":62,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Keep an automated Instagram account out of action blocks — Meta Business Suite DMs, comments, quotas. Use when scheduling IG replies from a cron or agent. Tr..."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-10T23:39:11.754Z","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-10T23:39:11.754Z","emptyReason":null},"stars":null,"forks":null,"downloads":1228,"packageName":null,"latestVersion":"2.0.1","tractionLabel":"1.2K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T23:39:11.690Z","emptyReason":null},"lastUpdatedAt":"2026-10-10T23:39:11.754Z","lastCrawledAt":"2026-10-10T23:39:11.690Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-11T23:39:11.690Z","lastVerifiedAt":null,"highlights":[{"version":"2.0.1","createdAt":"2026-07-16T15:01:46.285Z","changelog":"v2.0.1 — Contenu strictement identique a la 2.0.0 (SHA-256 verifie, aucun octet modifie). Cette version ne corrige que des canaux de release. 21 dist-tags crees par erreur restaient figes sur une version anterieure a la reecriture de conformite — ils servaient donc encore le contenu que cette reecriture avait retire. Ils pointent desormais tous vers le contenu conforme. Les dist-tags ne sont pas supprimables (ni CLI, ni API, ni interface web); les repointer est le seul levier disponible.","fileCount":3,"zipByteSize":10174},{"version":"2.0.0","createdAt":"2026-07-16T10:06:24.103Z","changelog":"v2.0.0 — Compliance-first rewrite. Removed: the identity guardrail that told the agent to give an ambiguous answer when asked whether it was a bot. If asked, the automation is now disclosed honestly and the thread goes to a human. It was never needed for account safety. Added: an Access, Data & Network table up front (what it touches, why, and the default), explicit 90-day retention on memory files, alert webhooks off by default (no egress unless you opt in), and a closing ONLY/NEVER scope. Changed: any challenge, CAPTCHA or 'verify it's you' screen now stops the run — never solved, never retried, never worked around. Trimmed 571 -> 280 lines. The doctrine is unchanged: Meta Business Suite as the only surface, quotas, phase gates, stop conditions, recovery, memory files, recap. Published artifact is SKILL.md alone.","fileCount":3,"zipByteSize":10188},{"version":"1.0.0","createdAt":"2026-05-18T21:36:02.872Z","changelog":"v1.0.0 — First publication. Initial release. Ports the operating doctrine for Instagram brand-account automation from a regulated-field operation to a domain-agnostic skill. Includes: - 3-role mental model (ig-post / ig-engage / ig-stealth) - MBS-first doctrine — never automate instagram.com directly - Phase A/B action-block-aware gating with manual override path - Zero-outgoing-link policy in comments; max 1 URL in DMs - The known MBS comment-Reply navigation-bug workaround (@username prefix + page-level textarea + send-arrow click) - Strict reply qualification (skip Reel-shares-without-question, recognize existing clients, 7-day per-user cap) - Hard quotas calibrated under IG's observed action-block thresholds - Anti-spam content + behavioral triggers - Hashtag-state tracking with shadowban registry - Recovery playbook for action blocks, \"Reauthenticate\" banners, shadowban suspicion, automod removals - 9-file memory inventory + first-run checklist + FAQ Companion to facebook-account-operations (same MBS backbone, FB-Page-specific doctrine) and to the reddit / twitter / tiktok / whatsapp family.","fileCount":4,"zipByteSize":15052}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s179c74ca8kjff2gapygs9y13d86yr3z:instagram-account-operations","setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"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-alexbloch-ia-instagram-account-operations/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-alexbloch-ia-instagram-account-operations/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-alexbloch-ia-instagram-account-operations/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-alexbloch-ia-instagram-account-operations/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-alexbloch-ia-instagram-account-operations/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-alexbloch-ia-instagram-account-operations/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-11T05:43:23.139Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-alexbloch-ia-instagram-account-operations/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-alexbloch-ia-instagram-account-operations/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-alexbloch-ia-instagram-account-operations/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-alexbloch-ia-instagram-account-operations/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":"high","updatedAt":"2026-10-10T23:39:11.754Z","emptyReason":null},"readme":"Skill: Instagram Account Operations\n\nOwner: alexbloch-ia\n\nSummary: Keep an automated Instagram account out of action blocks — Meta Business Suite DMs, comments, quotas. Use when scheduling IG replies from a cron or agent. Tr...\n\nTags: account-safety:2.0.1, action-blocks:2.0.1, agent:2.0.1, anti-shadowban:2.0.1, automation:2.0.1, browser-automation:2.0.1, comments:2.0.1, cron:2.0.1, dm:2.0.1, doctrine:2.0.1, faq:2.0.1, growth:2.0.1, instagram:2.0.1, latest:2.0.1, mbs:2.0.1, meta-business-suite:2.0.1, openclaw:2.0.1, operations:2.0.1, playbook:2.0.1, reels:2.0.1, social-media:2.0.1, yaml-config:2.0.1\n\nVersion history:\n\nv2.0.1 | 2026-07-16T15:01:46.285Z | user\n\nv2.0.1 — Contenu strictement identique a la 2.0.0 (SHA-256 verifie, aucun octet modifie). Cette version ne corrige que des canaux de release.\n\n21 dist-tags crees par erreur restaient figes sur une version anterieure a la reecriture de conformite — ils servaient donc encore le contenu que cette reecriture avait retire. Ils pointent desormais tous vers le contenu conforme.\n\nLes dist-tags ne sont pas supprimables (ni CLI, ni API, ni interface web); les repointer est le seul levier disponible.\n\nv2.0.0 | 2026-07-16T10:06:24.103Z | user\n\nv2.0.0 — Compliance-first rewrite.\n\nRemoved: the identity guardrail that told the agent to give an ambiguous answer when asked whether it was a bot. If asked, the automation is now disclosed honestly and the thread goes to a human. It was never needed for account safety.\n\nAdded: an Access, Data & Network table up front (what it touches, why, and the default), explicit 90-day retention on memory files, alert webhooks off by default (no egress unless you opt in), and a closing ONLY/NEVER scope.\n\nChanged: any challenge, CAPTCHA or 'verify it's you' screen now stops the run — never solved, never retried, never worked around.\n\nTrimmed 571 -> 280 lines. The doctrine is unchanged: Meta Business Suite as the only surface, quotas, phase gates, stop conditions, recovery, memory files, recap. Published artifact is SKILL.md alone.\n\nv1.0.0 | 2026-05-18T21:36:02.872Z | user\n\nv1.0.0 — First publication.\n\nInitial release. Ports the operating doctrine for Instagram brand-account\nautomation from a regulated-field operation to a domain-agnostic skill.\n\nIncludes:\n- 3-role mental model (ig-post / ig-engage / ig-stealth)\n- MBS-first doctrine — never automate instagram.com directly\n- Phase A/B action-block-aware gating with manual override path\n- Zero-outgoing-link policy in comments; max 1 URL in DMs\n- The known MBS comment-Reply navigation-bug workaround\n  (@username prefix + page-level textarea + send-arrow click)\n- Strict reply qualification (skip Reel-shares-without-question,\n  recognize existing clients, 7-day per-user cap)\n- Hard quotas calibrated under IG's observed action-block thresholds\n- Anti-spam content + behavioral triggers\n- Hashtag-state tracking with shadowban registry\n- Recovery playbook for action blocks, \"Reauthenticate\" banners,\n  shadowban suspicion, automod removals\n- 9-file memory inventory + first-run checklist + FAQ\n\nCompanion to facebook-account-operations (same MBS backbone, FB-Page-specific\ndoctrine) and to the reddit / twitter / tiktok / whatsapp family.\n\nArchive index:\n\nArchive v2.0.1: 3 files, 10174 bytes\n\nFiles: skill-card.md (2296b), SKILL.md (19350b), _meta.json (147b)\n\nFile v2.0.1:SKILL.md\n\n---\nname: instagram-account-operations\ndescription: Keep an automated Instagram account out of action blocks — Meta Business Suite DMs, comments, quotas. Use when scheduling IG replies from a cron or agent. Trigger on \"instagram bot\", \"action blocked\", \"instagram dm automation\", \"reply to instagram comments\", \"instagram shadowban\".\nmetadata: {\"clawdbot\":{\"emoji\":\"📸\",\"homepage\":\"https://openclaw.ai\"}}\n---\n\n# Instagram Account Operations\n\n**The goal is not to reply fast. The goal is to operate Instagram like a careful, helpful human contributor — through Meta Business Suite, inside quota, and openly, on an account you are authorized to run.**\n\n## Access, Data & Network — read before running anything\n\n| What it needs | Why | Default |\n|---|---|---|\n| A browser profile already logged into `business.facebook.com` | MBS is the only surface this skill drives | You log in by hand. The skill never handles credentials, never types a password, never launches a login flow. |\n| Read access to your IG DMs and comments | It replies to them | Scoped to the one asset ID you configure |\n| Local directory `<WORKSPACE_DIR>/memory/` | Quota counting, dedupe, phase state | Created by you (see checklist) |\n| Alert webhook (Telegram/Slack/Discord) | Run recaps | **Off by default. Opt-in.** Leave `alerts.webhook` empty and the skill writes recaps to disk only — no network egress beyond Meta's own domains. |\n\nPersisted locally, and nothing else: run recaps, counts of replies sent, IG handles you replied to (for the 7-day dedupe), phase state, follower count, hashtag notes. **Retention: 90 days** — truncate the memory files on that cadence. If you enable a webhook, the recap block in *Recap output* leaves your machine verbatim, including hot-lead handles; redact or keep it off. Instagram's Terms of Use and Community Guidelines, and Meta's Platform Terms, are a hard constraint on everything below, not a footnote: run this only on an account you own or are contractually authorized to operate, and only where automated replies are permitted for your account type.\n\n## When to Use\n\n| Trigger | Action |\n|---|---|\n| \"check my Instagram DMs\" / cron DM pass | Session check → MBS `inbox/all` → qualify → reply within quota |\n| \"reply to instagram comments\" | MBS `inbox/instagram` → `@username` flow |\n| \"action blocked\" / \"try again later\" toast | **Stop the run.** Flip to Phase A, alert, human reviews |\n| \"am I shadowbanned\" / followers dropped overnight | Flip to Phase A, alert, no automated recovery attempt |\n| \"set up my instagram bot\" | Configure → first-run checklist → 14 days manual first |\n| Any challenge, CAPTCHA, or \"verify it's you\" screen | **Stop. Hand to a human.** Never solve, never retry, never reshape behavior to get past it |\n\n## Configure\n\n| Placeholder | Example | Your value |\n|---|---|---|\n| `<BRAND_NAME>` | \"Acme Studio\" | — |\n| `<IG_HANDLE>` | \"@acmestudio\" | — |\n| `<META_BUSINESS_ID>` | numeric ID from business.facebook.com → Settings | — |\n| `<META_ASSET_ID>` | numeric ID of the IG asset in MBS | — |\n| `<BROWSER_PROFILE>` | \"instagram-live\" | — |\n| `<BROWSER_PORT>` | \"18802\" | — |\n| `<PRIMARY_CTA>` | \"WhatsApp / form / app — pick ONE\" | — |\n| `<WORKSPACE_DIR>` | \"~/.openclaw/workspace/instagram-acme\" | — |\n\n```yaml\n# <WORKSPACE_DIR>/config.yaml\ninstagram: { handle: <IG_HANDLE>, account_type: business, browser_profile: <BROWSER_PROFILE>, browser_port: <BROWSER_PORT> }\nmeta_business_suite: { business_id: <META_BUSINESS_ID>, asset_id: <META_ASSET_ID> }\ncta: { primary: <PRIMARY_CTA> }        # one channel only\nalerts: { channel: telegram, webhook: \"\" }   # empty = no egress, recaps to disk only\nschedule:\n  timezone: Europe/Paris\n  windows: { dm_check: \"*/15 9-22 * * *\", comment_check: \"10,25,40,55 9-22 * * *\", daily_recap: \"21:00\" }\n```\n\nShell snippets use the OpenClaw browser CLI over CDP; any CDP-capable stack works (Playwright, Puppeteer, Chrome MCP) — swap the calls. Multi-account: one workspace dir, one browser profile and one port per account; each account carries its own `<META_ASSET_ID>`.\n\n## Meta Business Suite is the only surface\n\n**Everything goes through `business.facebook.com`. Never automate against `instagram.com`.** No iframes; one UI for IG DMs, FB DMs, IG comments, FB comments; `click + type + Enter` works; link previews auto-generate. Append `?business_id=<META_BUSINESS_ID>&asset_id=<META_ASSET_ID>` to each URL fragment below.\n\n| Tab | URL fragment |\n|---|---|\n| All messages | `/latest/inbox/all` |\n| Instagram DMs only | `/latest/inbox/instagram_direct` |\n| Instagram comments | `/latest/inbox/instagram` |\n| Messenger (FB DMs) | `/latest/inbox/messenger` |\n\nRoles are a mental separation on one physical profile: `ig-post` acts as the brand inside MBS · `ig-engage` reads and qualifies, and **never acts outside MBS** · `ig-observe` checks hashtag reach in a logged-out window, so results reflect what the public sees rather than what your own account history personalizes — nothing is posted, liked, or followed from there. Return to `inbox/all` at the end of every run. Approved Graph API app available (`instagram_basic` / `instagram_manage_messages` / `instagram_manage_comments`)? Use it — this playbook is the fallback for accounts without one, and for the MBS UI features the API lacks (labels, prospect stages, link previews).\n\n## Session check — run first, every cron\n\n```bash\nopenclaw browser --browser-profile <BROWSER_PROFILE> status\n# Output: profile=instagram-live state=running cdp=http://127.0.0.1:18802\nopenclaw browser --browser-profile <BROWSER_PROFILE> navigate \\\n  \"https://business.facebook.com/latest/inbox/all/?business_id=<META_BUSINESS_ID>&asset_id=<META_ASSET_ID>\"\nopenclaw browser --browser-profile <BROWSER_PROFILE> snapshot --limit 60\n# Output: … [textbox \"Search messages\"] … [list] Conversations (12)   → OK, continue\n# Output: … [form] Log into Facebook …                                → exit 3, stop\n```\n\n`status: stopped`, a login form, or a \"Reauthenticate to manage this asset\" banner all mean **stop and report**. Never relaunch Chrome from inside a cron. Never re-login programmatically.\n\n## Phase gating\n\nInstagram has no karma. It has **action blocks** — 24 h (warning), 7 d (second), permanent (third+).\n\n| Phase | Condition | Authorized |\n|---|---|---|\n| **A** | account < 30 d, OR an action block in the last 30 d, OR < 500 followers | Inbound DM/comment replies inside MBS only. **Zero outbound.** |\n| **B** | ≥ 30 d, no block in 30 d, ≥ 500 followers, no guideline flag | All crons |\n\nRead `<WORKSPACE_DIR>/memory/ig-state.md` at start; last line is the current phase. A→B is **never automatic**: on threshold, alert `🎉 IG account ready for Phase B — review and flip manually`, and a human flips it. First week of B: cap at 3 replies/run. Observed block thresholds (not officially published, treat as ceilings you stay far under — they are limits that protect the account, not a budget to spend; if you are anywhere near one, the run is doing too much): follow/unfollow > 50/day or > 200/week · comments on others' posts > 30/hr or > 200/day · proactive DMs to non-followers > 10/day on a young account · likes > 60/hr · posts > 5/24h · > 6 actions in 10 min on one role · follow + like of the same account's last 5 posts inside 1 min → immediate block · the same DM body to > 3 accounts in 24 h → \"Action blocked\" toast within minutes.\n\n## Quotas — hard limits\n\n| Action | Phase A | Phase B |\n|---|---|---|\n| DMs handled per 24 h | 20 | 60 |\n| DMs handled per run | 4 | 8 |\n| Comment replies per 24 h | 30 | 100 |\n| Comment replies per run | 5 | 10 |\n| Outbound DMs / day | 0 | 5 |\n| Follows / day · Unfollows / day | 5 | 20 |\n| Likes / hour | 30 | 60 |\n| Gap, same conversation | ≥ 60 s | ≥ 30 s |\n| Gap, globally | ≥ 30 s | ≥ 15 s |\n\nCount entries in `ig-reply-log.md` for the last 24 h at start of every run. Quota met → abort early with `status: skipped`.\n\n## Posting cadence and hashtags\n\nOut of scope for the reactive crons; the rhythm the rest of the doctrine assumes, logged in `ig-post-log.md`.\n\n| Surface | Phase B rhythm |\n|---|---|\n| Reels | 3-5/week · hook in the first 1.5 s · vertical 9:16 · native or licensed sound |\n| Carousels | 2-3/week · educational — saves are the strongest ranking signal |\n| Stories | 3-7/day · polls and stickers carry reach |\n| Lives | ≤ 1/week, planned |\n| Hashtags | 3-5 per post — 1 broad + 2-3 niche + 1 micro (< 50k posts). The \"30 hashtags\" advice is dead: IG cut the cap and over-tagging reads as spam. Re-check `ig-hashtag-state.md` monthly for tags gone dead. |\n\n## Qualify before replying\n\nRepliable only if **all** hold: the thread has a user-authored message (not a bare Reel forward — skip those silently) · the user isn't sitting on an unacknowledged auto-reply · it's a real question in your domain · Phase B if the reply mentions the brand · no brand-mentioning reply to that handle in the last 7 days (`ig-reply-log.md`). Any check fails → skip, and say why in the recap. If the handle is in `ig-clients-known.md`: reply with empathy, **paste no link**, redirect to the support channel — `<PRIMARY_CTA>` is for prospects only.\n\n## Reply templates\n\nPhase A: 1-3 sentences, match the tone, no links, no expert-grade advice. Phase B DM (≤ 700 chars — past that nobody reads it):\n```\n[Acknowledge the situation in 1 sentence, neutral tone.]\n\n[General framework in 2-3 short paragraphs.]\n\n[Concrete next step — point to <PRIMARY_CTA>. ONE channel only.]\n```\nFilled:\n```\nSorry you're dealing with that — a suspended licence is stressful and the clock matters.\n\nBroadly, two things decide the outcome: the notice date on the decision, and whether the procedural steps were followed. Both are checkable from the paperwork you already have.\n\nIf you want it looked at properly, the intake form on our profile is the fastest route.\n```\nPhase B comment (≤ 200 chars):\n```\n@username [contextual acknowledgement]. [Indirect signal — \"DM us\" or \"form on profile\"].\n```\n\nNever paste: anything with `[brackets]` left in · the same opening phrase more than twice in 7 days · a URL in a comment body, ever · more than one URL in a DM · a URL in the *first* message of a conversation — Meta's link-preview takes 1-2 s to generate and IG classes the bare link as spam; the `<PRIMARY_CTA>` link goes in the second message · any shortener (bit.ly, tinyurl — IG treats them as spam).\n\n## MBS flow — DMs\n\n1. Session check (above), then navigate `inbox/all`. Wait 5 s for the list to render.\n2. Click the \"Unread\" filter chip, or read the list for unread badges.\n3. Per conversation, top-to-bottom: click the tile → **read the whole thread** (IG threads often span auto-template + the real reply) → qualify → click `[contenteditable='true']` → `type` the message → **press Enter** → verify the textbox emptied and the message landed before moving on.\n4. Sweep the `Messenger` and `Instagram` tabs after `all` — some conversations surface only there.\n\n**Press Enter, do not click \"Send\".** MBS renders visual duplicates of the send button and a Playwright `click` lands on the wrong one roughly one time in ten — silently, with no error. Enter is unambiguous.\n\n## MBS flow — comments\n\nLess stable than DMs. Navigate to `inbox/instagram`, wait 5 s, click a post tile, comments render in the right pane. Per qualified comment: find the page-level \"Add a comment…\" / \"Ajoutez un commentaire…\" textarea **at the bottom** of the right pane, type `@username your reply`, then **click the send-arrow** — Enter does not submit here. **Do not click \"Reply\" under a comment.** Meta's SPA navigates the right pane to a *different post* (bug present 2025-2026). You'll think it worked; you replied somewhere else. The `@username` prefix targets the parent comment without it. If you truly need a nested reply, a human does it on `instagram.com` and logs it in `ig-reply-log.md` — do not script the `instagram.com` reply path.\n\n| Element | Selector |\n|---|---|\n| DM textbox | `[contenteditable='true']`, `[aria-label*='Reply'], [aria-label*='Répondre']` |\n| DM send | `press Enter` |\n| Comment textarea | `textarea[placeholder*='comment'], textarea[placeholder*='commentaire']` |\n| Comment send | `[aria-label*='Send'], [aria-label*='Envoyer']` (SVG arrow) |\n| Unread filter chip | `text=Unread, text=Non lu` |\n\n| Exit | Meaning | Recap |\n|---|---|---|\n| 0 | Replies sent and verified | `status: ok` |\n| 1 | Fatal (selector missing, MBS error toast) | `status: error` + screenshot |\n| 2 | \"Action blocked\" / \"Try again later\" | `status: blocked`, flip to Phase A pause |\n| 3 | Session expired / reauth banner | `status: blocked`, alert human |\n| 4 | Comment \"Reply\" navigated away (known bug) | `status: partial`, log for manual review |\n\n## Content rules\n\n| Avoid | Use instead |\n|---|---|\n| \"Check link in bio\" repeated | Mention bio once per conversation, max |\n| `<BRAND_NAME>` twice in one reply | One mention |\n| \"DM me\" + \"WhatsApp me\" + \"click here\" stacked | One CTA, one channel |\n| Phone numbers, emails in comments | Never in a comment; DM tail only if asked |\n| Emojis in regulated/sober niches | Drop them |\n| Same opening phrase across replies | Vary it — identical openers *are* spam, that's why they get flagged |\n| Replying < 30 s after a comment lands | Wait ≥ 2 min. You haven't read it yet in 30 s |\n\n## Identity and conduct\n\n- **If anyone asks whether they are talking to a bot, an AI, or a human: say so, plainly and immediately.** \"Yes — this account's replies are handled by an automated assistant. Want me to get a person on it?\" Then offer the human.\n- If the person asks for a human, **stop automated replies in that thread**, escalate, and log it in the recap.\n- Never give expert-grade advice on a specific case — redirect to `<PRIMARY_CTA>`. Never share private client details, names, or numbers. Never promise an outcome. Never solicit payment in DM.\n- Handle and bio: brand-aligned, not aggressive (`@drsmithlegal` > `@bestlawyerinparis`). One line + one `<PRIMARY_CTA>` link.\n\n## Stop conditions — the agent halts, a human takes over\n\n| Signal | Action |\n|---|---|\n| \"Please verify it's you\" / CAPTCHA / any challenge | **Stop.** Never solve it, never retry, never change timing or behavior to get past it. Alert for manual login. A challenge is Instagram telling you a human should be here — believe it. |\n| \"Action blocked — try again later\" | Stop the run. Phase A pause 24 h. Alert. |\n| MBS → Settings → Account Status shows any \"warning\" | Revert to Phase A immediately, alert. Check this daily, not just at first run. |\n| Login form or reauth banner | Session expired. Alert, stop. |\n| `status: stopped` | Report, stop. |\n| \"Something went wrong\" (generic) | Refresh once. Persists → stop and alert. |\n| Followers drop > 5 % overnight | Suspected shadowban → Phase A, alert. No automated recovery. |\n| 2 comments removed within 10 min of posting | Freeze the comment cron 6 h. |\n| Account suspended (not just blocked) | Stop everything. **Do not appeal automatically** — the appeal flow is sensitive to repeated automated submissions. Human, manually, once. Log the last 20 actions in `ig-learnings.md`. |\n\n## Recap output\n\nEvery run ends with this block — to `<WORKSPACE_DIR>/memory/ig-recaps.md` always, to the webhook only if you opted in. **Never fake a successful reply:** better silence than spam, better a blockage report than a false success.\n```\n## YYYY-MM-DD HH:MM TZ — <job-id> — status: ok|partial|blocked|skipped\n- Phase: A|B\n- DMs handled: <N or \"—\">\n- Comments handled: <N or \"—\">\n- Hot leads: <list or \"—\">\n- Escalated to human: <N or \"—\">\n- Blockers: <text or \"—\">\n- Next useful action: <1 line>\n```\nFilled:\n```\n## 2026-07-16 21:00 Europe/Paris — ig-dm-check — status: partial\n- Phase: A\n- DMs handled: 3\n- Comments handled: —\n- Hot leads: @marc_r (licence suspension, asked for a callback)\n- Escalated to human: 1 (@sofia.k asked to speak to a person)\n- Blockers: comment tab hit the Reply-navigation bug once (exit 4)\n- Next useful action: reply to @sofia.k manually before 10:00\n```\n\n## Memory files\n\n`<WORKSPACE_DIR>/memory/` — `ig-recaps.md` (per run) · `ig-reply-log.md` (replies sent, quota + dedupe source) · `ig-state.md` (daily phase, followers, flags) · `ig-post-log.md` · `ig-hashtag-state.md` (weekly) · `ig-clients-known.md` (never pitch these) · `ig-ideas.md` · `ig-learnings.md` · `ig-alerts-sent.md` (alert dedupe). Plain markdown, local, yours to delete. 90-day retention.\n\n## First-run checklist\n\n- [ ] Placeholders filled; you own or are authorized to operate `<IG_HANDLE>`.\n- [ ] Account is Business or Creator, linked to an MBS asset.\n- [ ] `<META_BUSINESS_ID>` / `<META_ASSET_ID>` copied from the MBS URL.\n- [ ] Browser profile at `http://127.0.0.1:<BROWSER_PORT>`, **logged in by hand**, `inbox/all` renders the conversation list.\n- [ ] Memory dir created.\n- [ ] Webhook decided: empty (no egress) or tested, knowing recaps carry handles.\n- [ ] Phase A confirmed: inbound DM cron only.\n- [ ] ≥ 14 days of manual posting and manual replies before any cron.\n- [ ] Account Status (MBS → Settings) green, no warning.\n\n```bash\nmkdir -p \"<WORKSPACE_DIR>/memory\" && cd \"$_\" && for f in recaps post-log reply-log state hashtag-state clients-known ideas learnings alerts-sent; do [ -f \"ig-$f.md\" ] || touch \"ig-$f.md\"; done\n# Output: (silent, idempotent — re-running never truncates an existing log)\n```\n\n## Troubleshooting\n\n| Symptom | Cause | Fix |\n|---|---|---|\n| Reply \"sent\" but the thread is unchanged | `click` landed on a duplicate Send button | Press Enter instead; verify the textbox emptied |\n| Right pane jumped to another post | The MBS comment-Reply SPA bug | `@username` prefix + page-level textarea + send-arrow; exit 4 |\n| Selector matches nothing | UI is localized | Try both labels — `Reply`/`Répondre`, `Send`/`Envoyer` |\n| Clicks land on stale tiles after a tab switch | MBS re-fetches the list on switch | Wait ≥ 3 s after switching tabs |\n| Unread chip click does nothing | Transparent overlay on the chip | Snapshot before clicking |\n| Reauth prompt out of nowhere | MBS soft-logs-out after ~48 h idle | Treat as session expired (exit 3), human logs in |\n| Cron dies mid-run | MBS pages take 4-6 s to render | Timeout ≥ 1200 s |\n\n## Scope\n\n**This skill ONLY:** drives Meta Business Suite in a browser profile *you* logged into · replies to inbound DMs and comments within stated quotas · counts, dedupes, and reports what it did · stops and escalates when the platform pushes back · states plainly that it is automated when asked.\n\n**This skill NEVER:** handles your password or performs a login · solves, retries, or works around a CAPTCHA, challenge, or any anti-abuse control · shapes timing or behavior to avoid being detected as automation · denies or obscures being automated · scripts `instagram.com` directly · exceeds the quota table · sends outbound DMs in Phase A · appeals a suspension automatically · touches an account you are not authorized to operate · sends anything off your machine unless you set a webhook.\n\nAnti-abuse controls protect accounts, including yours. When a defense fires, the run ends and a human takes over.\n\nFile v2.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn7f6shzecv3qv3wrr074s49f986ybe1\",\n  \"slug\": \"instagram-account-operations\",\n  \"version\": \"2.0.1\",\n  \"publishedAt\": 1784214106285\n}\n\nFile v2.0.1:skill-card.md\n\n## Description:\n\nGuides agents through authorized Instagram account operations in Meta Business Suite, including inbound DM and comment replies, quota controls, recaps, and human escalation conditions.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[alexbloch-ia](https://clawhub.ai/user/alexbloch-ia)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal developers, operators, and business users use this skill to run authorized Instagram inbox and comment workflows through Meta Business Suite while staying within stated quotas and escalation rules.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill handles Instagram DMs, comments, handles, and lead details that may include sensitive or identifiable information.\n\nMitigation: Use it only on accounts you own or are authorized to operate, keep local memory files access-controlled, and enforce the stated 90-day retention.\n\nRisk: Optional webhook alerts can send recap details, including handles or lead context, outside the local workspace.\n\nMitigation: Leave the webhook empty by default; enable it only for trusted, access-controlled destinations after redacting sensitive details.\n\nRisk: Automated Instagram activity can trigger platform blocks, challenges, or account review if used outside the stated limits.\n\nMitigation: Follow the phase gates, quotas, and stop conditions, and hand control to a human for login prompts, challenges, action blocks, or suspension events.\n\n## Reference(s):\n\n- [ClawHub Skill Page](https://clawhub.ai/alexbloch-ia/skills/instagram-account-operations)\n- [OpenClaw](https://openclaw.ai)\n\n## Skill Output:\n\n**Output Type(s):** [Guidance, Markdown, Shell commands, Configuration]\n\n**Output Format:** [Markdown with YAML and bash code blocks]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Includes quota tables, stop conditions, local memory file conventions, and recap templates.]\n\n## Skill Version(s):\n\n2.0.1 (source: server release metadata)\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 v2.0.0: 3 files, 10188 bytes\n\nFiles: skill-card.md (2462b), SKILL.md (19350b), _meta.json (147b)\n\nFile v2.0.0:SKILL.md\n\n---\nname: instagram-account-operations\ndescription: Keep an automated Instagram account out of action blocks — Meta Business Suite DMs, comments, quotas. Use when scheduling IG replies from a cron or agent. Trigger on \"instagram bot\", \"action blocked\", \"instagram dm automation\", \"reply to instagram comments\", \"instagram shadowban\".\nmetadata: {\"clawdbot\":{\"emoji\":\"📸\",\"homepage\":\"https://openclaw.ai\"}}\n---\n\n# Instagram Account Operations\n\n**The goal is not to reply fast. The goal is to operate Instagram like a careful, helpful human contributor — through Meta Business Suite, inside quota, and openly, on an account you are authorized to run.**\n\n## Access, Data & Network — read before running anything\n\n| What it needs | Why | Default |\n|---|---|---|\n| A browser profile already logged into `business.facebook.com` | MBS is the only surface this skill drives | You log in by hand. The skill never handles credentials, never types a password, never launches a login flow. |\n| Read access to your IG DMs and comments | It replies to them | Scoped to the one asset ID you configure |\n| Local directory `<WORKSPACE_DIR>/memory/` | Quota counting, dedupe, phase state | Created by you (see checklist) |\n| Alert webhook (Telegram/Slack/Discord) | Run recaps | **Off by default. Opt-in.** Leave `alerts.webhook` empty and the skill writes recaps to disk only — no network egress beyond Meta's own domains. |\n\nPersisted locally, and nothing else: run recaps, counts of replies sent, IG handles you replied to (for the 7-day dedupe), phase state, follower count, hashtag notes. **Retention: 90 days** — truncate the memory files on that cadence. If you enable a webhook, the recap block in *Recap output* leaves your machine verbatim, including hot-lead handles; redact or keep it off. Instagram's Terms of Use and Community Guidelines, and Meta's Platform Terms, are a hard constraint on everything below, not a footnote: run this only on an account you own or are contractually authorized to operate, and only where automated replies are permitted for your account type.\n\n## When to Use\n\n| Trigger | Action |\n|---|---|\n| \"check my Instagram DMs\" / cron DM pass | Session check → MBS `inbox/all` → qualify → reply within quota |\n| \"reply to instagram comments\" | MBS `inbox/instagram` → `@username` flow |\n| \"action blocked\" / \"try again later\" toast | **Stop the run.** Flip to Phase A, alert, human reviews |\n| \"am I shadowbanned\" / followers dropped overnight | Flip to Phase A, alert, no automated recovery attempt |\n| \"set up my instagram bot\" | Configure → first-run checklist → 14 days manual first |\n| Any challenge, CAPTCHA, or \"verify it's you\" screen | **Stop. Hand to a human.** Never solve, never retry, never reshape behavior to get past it |\n\n## Configure\n\n| Placeholder | Example | Your value |\n|---|---|---|\n| `<BRAND_NAME>` | \"Acme Studio\" | — |\n| `<IG_HANDLE>` | \"@acmestudio\" | — |\n| `<META_BUSINESS_ID>` | numeric ID from business.facebook.com → Settings | — |\n| `<META_ASSET_ID>` | numeric ID of the IG asset in MBS | — |\n| `<BROWSER_PROFILE>` | \"instagram-live\" | — |\n| `<BROWSER_PORT>` | \"18802\" | — |\n| `<PRIMARY_CTA>` | \"WhatsApp / form / app — pick ONE\" | — |\n| `<WORKSPACE_DIR>` | \"~/.openclaw/workspace/instagram-acme\" | — |\n\n```yaml\n# <WORKSPACE_DIR>/config.yaml\ninstagram: { handle: <IG_HANDLE>, account_type: business, browser_profile: <BROWSER_PROFILE>, browser_port: <BROWSER_PORT> }\nmeta_business_suite: { business_id: <META_BUSINESS_ID>, asset_id: <META_ASSET_ID> }\ncta: { primary: <PRIMARY_CTA> }        # one channel only\nalerts: { channel: telegram, webhook: \"\" }   # empty = no egress, recaps to disk only\nschedule:\n  timezone: Europe/Paris\n  windows: { dm_check: \"*/15 9-22 * * *\", comment_check: \"10,25,40,55 9-22 * * *\", daily_recap: \"21:00\" }\n```\n\nShell snippets use the OpenClaw browser CLI over CDP; any CDP-capable stack works (Playwright, Puppeteer, Chrome MCP) — swap the calls. Multi-account: one workspace dir, one browser profile and one port per account; each account carries its own `<META_ASSET_ID>`.\n\n## Meta Business Suite is the only surface\n\n**Everything goes through `business.facebook.com`. Never automate against `instagram.com`.** No iframes; one UI for IG DMs, FB DMs, IG comments, FB comments; `click + type + Enter` works; link previews auto-generate. Append `?business_id=<META_BUSINESS_ID>&asset_id=<META_ASSET_ID>` to each URL fragment below.\n\n| Tab | URL fragment |\n|---|---|\n| All messages | `/latest/inbox/all` |\n| Instagram DMs only | `/latest/inbox/instagram_direct` |\n| Instagram comments | `/latest/inbox/instagram` |\n| Messenger (FB DMs) | `/latest/inbox/messenger` |\n\nRoles are a mental separation on one physical profile: `ig-post` acts as the brand inside MBS · `ig-engage` reads and qualifies, and **never acts outside MBS** · `ig-observe` checks hashtag reach in a logged-out window, so results reflect what the public sees rather than what your own account history personalizes — nothing is posted, liked, or followed from there. Return to `inbox/all` at the end of every run. Approved Graph API app available (`instagram_basic` / `instagram_manage_messages` / `instagram_manage_comments`)? Use it — this playbook is the fallback for accounts without one, and for the MBS UI features the API lacks (labels, prospect stages, link previews).\n\n## Session check — run first, every cron\n\n```bash\nopenclaw browser --browser-profile <BROWSER_PROFILE> status\n# Output: profile=instagram-live state=running cdp=http://127.0.0.1:18802\nopenclaw browser --browser-profile <BROWSER_PROFILE> navigate \\\n  \"https://business.facebook.com/latest/inbox/all/?business_id=<META_BUSINESS_ID>&asset_id=<META_ASSET_ID>\"\nopenclaw browser --browser-profile <BROWSER_PROFILE> snapshot --limit 60\n# Output: … [textbox \"Search messages\"] … [list] Conversations (12)   → OK, continue\n# Output: … [form] Log into Facebook …                                → exit 3, stop\n```\n\n`status: stopped`, a login form, or a \"Reauthenticate to manage this asset\" banner all mean **stop and report**. Never relaunch Chrome from inside a cron. Never re-login programmatically.\n\n## Phase gating\n\nInstagram has no karma. It has **action blocks** — 24 h (warning), 7 d (second), permanent (third+).\n\n| Phase | Condition | Authorized |\n|---|---|---|\n| **A** | account < 30 d, OR an action block in the last 30 d, OR < 500 followers | Inbound DM/comment replies inside MBS only. **Zero outbound.** |\n| **B** | ≥ 30 d, no block in 30 d, ≥ 500 followers, no guideline flag | All crons |\n\nRead `<WORKSPACE_DIR>/memory/ig-state.md` at start; last line is the current phase. A→B is **never automatic**: on threshold, alert `🎉 IG account ready for Phase B — review and flip manually`, and a human flips it. First week of B: cap at 3 replies/run. Observed block thresholds (not officially published, treat as ceilings you stay far under — they are limits that protect the account, not a budget to spend; if you are anywhere near one, the run is doing too much): follow/unfollow > 50/day or > 200/week · comments on others' posts > 30/hr or > 200/day · proactive DMs to non-followers > 10/day on a young account · likes > 60/hr · posts > 5/24h · > 6 actions in 10 min on one role · follow + like of the same account's last 5 posts inside 1 min → immediate block · the same DM body to > 3 accounts in 24 h → \"Action blocked\" toast within minutes.\n\n## Quotas — hard limits\n\n| Action | Phase A | Phase B |\n|---|---|---|\n| DMs handled per 24 h | 20 | 60 |\n| DMs handled per run | 4 | 8 |\n| Comment replies per 24 h | 30 | 100 |\n| Comment replies per run | 5 | 10 |\n| Outbound DMs / day | 0 | 5 |\n| Follows / day · Unfollows / day | 5 | 20 |\n| Likes / hour | 30 | 60 |\n| Gap, same conversation | ≥ 60 s | ≥ 30 s |\n| Gap, globally | ≥ 30 s | ≥ 15 s |\n\nCount entries in `ig-reply-log.md` for the last 24 h at start of every run. Quota met → abort early with `status: skipped`.\n\n## Posting cadence and hashtags\n\nOut of scope for the reactive crons; the rhythm the rest of the doctrine assumes, logged in `ig-post-log.md`.\n\n| Surface | Phase B rhythm |\n|---|---|\n| Reels | 3-5/week · hook in the first 1.5 s · vertical 9:16 · native or licensed sound |\n| Carousels | 2-3/week · educational — saves are the strongest ranking signal |\n| Stories | 3-7/day · polls and stickers carry reach |\n| Lives | ≤ 1/week, planned |\n| Hashtags | 3-5 per post — 1 broad + 2-3 niche + 1 micro (< 50k posts). The \"30 hashtags\" advice is dead: IG cut the cap and over-tagging reads as spam. Re-check `ig-hashtag-state.md` monthly for tags gone dead. |\n\n## Qualify before replying\n\nRepliable only if **all** hold: the thread has a user-authored message (not a bare Reel forward — skip those silently) · the user isn't sitting on an unacknowledged auto-reply · it's a real question in your domain · Phase B if the reply mentions the brand · no brand-mentioning reply to that handle in the last 7 days (`ig-reply-log.md`). Any check fails → skip, and say why in the recap. If the handle is in `ig-clients-known.md`: reply with empathy, **paste no link**, redirect to the support channel — `<PRIMARY_CTA>` is for prospects only.\n\n## Reply templates\n\nPhase A: 1-3 sentences, match the tone, no links, no expert-grade advice. Phase B DM (≤ 700 chars — past that nobody reads it):\n```\n[Acknowledge the situation in 1 sentence, neutral tone.]\n\n[General framework in 2-3 short paragraphs.]\n\n[Concrete next step — point to <PRIMARY_CTA>. ONE channel only.]\n```\nFilled:\n```\nSorry you're dealing with that — a suspended licence is stressful and the clock matters.\n\nBroadly, two things decide the outcome: the notice date on the decision, and whether the procedural steps were followed. Both are checkable from the paperwork you already have.\n\nIf you want it looked at properly, the intake form on our profile is the fastest route.\n```\nPhase B comment (≤ 200 chars):\n```\n@username [contextual acknowledgement]. [Indirect signal — \"DM us\" or \"form on profile\"].\n```\n\nNever paste: anything with `[brackets]` left in · the same opening phrase more than twice in 7 days · a URL in a comment body, ever · more than one URL in a DM · a URL in the *first* message of a conversation — Meta's link-preview takes 1-2 s to generate and IG classes the bare link as spam; the `<PRIMARY_CTA>` link goes in the second message · any shortener (bit.ly, tinyurl — IG treats them as spam).\n\n## MBS flow — DMs\n\n1. Session check (above), then navigate `inbox/all`. Wait 5 s for the list to render.\n2. Click the \"Unread\" filter chip, or read the list for unread badges.\n3. Per conversation, top-to-bottom: click the tile → **read the whole thread** (IG threads often span auto-template + the real reply) → qualify → click `[contenteditable='true']` → `type` the message → **press Enter** → verify the textbox emptied and the message landed before moving on.\n4. Sweep the `Messenger` and `Instagram` tabs after `all` — some conversations surface only there.\n\n**Press Enter, do not click \"Send\".** MBS renders visual duplicates of the send button and a Playwright `click` lands on the wrong one roughly one time in ten — silently, with no error. Enter is unambiguous.\n\n## MBS flow — comments\n\nLess stable than DMs. Navigate to `inbox/instagram`, wait 5 s, click a post tile, comments render in the right pane. Per qualified comment: find the page-level \"Add a comment…\" / \"Ajoutez un commentaire…\" textarea **at the bottom** of the right pane, type `@username your reply`, then **click the send-arrow** — Enter does not submit here. **Do not click \"Reply\" under a comment.** Meta's SPA navigates the right pane to a *different post* (bug present 2025-2026). You'll think it worked; you replied somewhere else. The `@username` prefix targets the parent comment without it. If you truly need a nested reply, a human does it on `instagram.com` and logs it in `ig-reply-log.md` — do not script the `instagram.com` reply path.\n\n| Element | Selector |\n|---|---|\n| DM textbox | `[contenteditable='true']`, `[aria-label*='Reply'], [aria-label*='Répondre']` |\n| DM send | `press Enter` |\n| Comment textarea | `textarea[placeholder*='comment'], textarea[placeholder*='commentaire']` |\n| Comment send | `[aria-label*='Send'], [aria-label*='Envoyer']` (SVG arrow) |\n| Unread filter chip | `text=Unread, text=Non lu` |\n\n| Exit | Meaning | Recap |\n|---|---|---|\n| 0 | Replies sent and verified | `status: ok` |\n| 1 | Fatal (selector missing, MBS error toast) | `status: error` + screenshot |\n| 2 | \"Action blocked\" / \"Try again later\" | `status: blocked`, flip to Phase A pause |\n| 3 | Session expired / reauth banner | `status: blocked`, alert human |\n| 4 | Comment \"Reply\" navigated away (known bug) | `status: partial`, log for manual review |\n\n## Content rules\n\n| Avoid | Use instead |\n|---|---|\n| \"Check link in bio\" repeated | Mention bio once per conversation, max |\n| `<BRAND_NAME>` twice in one reply | One mention |\n| \"DM me\" + \"WhatsApp me\" + \"click here\" stacked | One CTA, one channel |\n| Phone numbers, emails in comments | Never in a comment; DM tail only if asked |\n| Emojis in regulated/sober niches | Drop them |\n| Same opening phrase across replies | Vary it — identical openers *are* spam, that's why they get flagged |\n| Replying < 30 s after a comment lands | Wait ≥ 2 min. You haven't read it yet in 30 s |\n\n## Identity and conduct\n\n- **If anyone asks whether they are talking to a bot, an AI, or a human: say so, plainly and immediately.** \"Yes — this account's replies are handled by an automated assistant. Want me to get a person on it?\" Then offer the human.\n- If the person asks for a human, **stop automated replies in that thread**, escalate, and log it in the recap.\n- Never give expert-grade advice on a specific case — redirect to `<PRIMARY_CTA>`. Never share private client details, names, or numbers. Never promise an outcome. Never solicit payment in DM.\n- Handle and bio: brand-aligned, not aggressive (`@drsmithlegal` > `@bestlawyerinparis`). One line + one `<PRIMARY_CTA>` link.\n\n## Stop conditions — the agent halts, a human takes over\n\n| Signal | Action |\n|---|---|\n| \"Please verify it's you\" / CAPTCHA / any challenge | **Stop.** Never solve it, never retry, never change timing or behavior to get past it. Alert for manual login. A challenge is Instagram telling you a human should be here — believe it. |\n| \"Action blocked — try again later\" | Stop the run. Phase A pause 24 h. Alert. |\n| MBS → Settings → Account Status shows any \"warning\" | Revert to Phase A immediately, alert. Check this daily, not just at first run. |\n| Login form or reauth banner | Session expired. Alert, stop. |\n| `status: stopped` | Report, stop. |\n| \"Something went wrong\" (generic) | Refresh once. Persists → stop and alert. |\n| Followers drop > 5 % overnight | Suspected shadowban → Phase A, alert. No automated recovery. |\n| 2 comments removed within 10 min of posting | Freeze the comment cron 6 h. |\n| Account suspended (not just blocked) | Stop everything. **Do not appeal automatically** — the appeal flow is sensitive to repeated automated submissions. Human, manually, once. Log the last 20 actions in `ig-learnings.md`. |\n\n## Recap output\n\nEvery run ends with this block — to `<WORKSPACE_DIR>/memory/ig-recaps.md` always, to the webhook only if you opted in. **Never fake a successful reply:** better silence than spam, better a blockage report than a false success.\n```\n## YYYY-MM-DD HH:MM TZ — <job-id> — status: ok|partial|blocked|skipped\n- Phase: A|B\n- DMs handled: <N or \"—\">\n- Comments handled: <N or \"—\">\n- Hot leads: <list or \"—\">\n- Escalated to human: <N or \"—\">\n- Blockers: <text or \"—\">\n- Next useful action: <1 line>\n```\nFilled:\n```\n## 2026-07-16 21:00 Europe/Paris — ig-dm-check — status: partial\n- Phase: A\n- DMs handled: 3\n- Comments handled: —\n- Hot leads: @marc_r (licence suspension, asked for a callback)\n- Escalated to human: 1 (@sofia.k asked to speak to a person)\n- Blockers: comment tab hit the Reply-navigation bug once (exit 4)\n- Next useful action: reply to @sofia.k manually before 10:00\n```\n\n## Memory files\n\n`<WORKSPACE_DIR>/memory/` — `ig-recaps.md` (per run) · `ig-reply-log.md` (replies sent, quota + dedupe source) · `ig-state.md` (daily phase, followers, flags) · `ig-post-log.md` · `ig-hashtag-state.md` (weekly) · `ig-clients-known.md` (never pitch these) · `ig-ideas.md` · `ig-learnings.md` · `ig-alerts-sent.md` (alert dedupe). Plain markdown, local, yours to delete. 90-day retention.\n\n## First-run checklist\n\n- [ ] Placeholders filled; you own or are authorized to operate `<IG_HANDLE>`.\n- [ ] Account is Business or Creator, linked to an MBS asset.\n- [ ] `<META_BUSINESS_ID>` / `<META_ASSET_ID>` copied from the MBS URL.\n- [ ] Browser profile at `http://127.0.0.1:<BROWSER_PORT>`, **logged in by hand**, `inbox/all` renders the conversation list.\n- [ ] Memory dir created.\n- [ ] Webhook decided: empty (no egress) or tested, knowing recaps carry handles.\n- [ ] Phase A confirmed: inbound DM cron only.\n- [ ] ≥ 14 days of manual posting and manual replies before any cron.\n- [ ] Account Status (MBS → Settings) green, no warning.\n\n```bash\nmkdir -p \"<WORKSPACE_DIR>/memory\" && cd \"$_\" && for f in recaps post-log reply-log state hashtag-state clients-known ideas learnings alerts-sent; do [ -f \"ig-$f.md\" ] || touch \"ig-$f.md\"; done\n# Output: (silent, idempotent — re-running never truncates an existing log)\n```\n\n## Troubleshooting\n\n| Symptom | Cause | Fix |\n|---|---|---|\n| Reply \"sent\" but the thread is unchanged | `click` landed on a duplicate Send button | Press Enter instead; verify the textbox emptied |\n| Right pane jumped to another post | The MBS comment-Reply SPA bug | `@username` prefix + page-level textarea + send-arrow; exit 4 |\n| Selector matches nothing | UI is localized | Try both labels — `Reply`/`Répondre`, `Send`/`Envoyer` |\n| Clicks land on stale tiles after a tab switch | MBS re-fetches the list on switch | Wait ≥ 3 s after switching tabs |\n| Unread chip click does nothing | Transparent overlay on the chip | Snapshot before clicking |\n| Reauth prompt out of nowhere | MBS soft-logs-out after ~48 h idle | Treat as session expired (exit 3), human logs in |\n| Cron dies mid-run | MBS pages take 4-6 s to render | Timeout ≥ 1200 s |\n\n## Scope\n\n**This skill ONLY:** drives Meta Business Suite in a browser profile *you* logged into · replies to inbound DMs and comments within stated quotas · counts, dedupes, and reports what it did · stops and escalates when the platform pushes back · states plainly that it is automated when asked.\n\n**This skill NEVER:** handles your password or performs a login · solves, retries, or works around a CAPTCHA, challenge, or any anti-abuse control · shapes timing or behavior to avoid being detected as automation · denies or obscures being automated · scripts `instagram.com` directly · exceeds the quota table · sends outbound DMs in Phase A · appeals a suspension automatically · touches an account you are not authorized to operate · sends anything off your machine unless you set a webhook.\n\nAnti-abuse controls protect accounts, including yours. When a defense fires, the run ends and a human takes over.\n\nFile v2.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn7f6shzecv3qv3wrr074s49f986ybe1\",\n  \"slug\": \"instagram-account-operations\",\n  \"version\": \"2.0.0\",\n  \"publishedAt\": 1784196384103\n}\n\nFile v2.0.0:skill-card.md\n\n## Description: <br>\nKeep an automated Instagram account out of action blocks through Meta Business Suite DMs, comments, quotas, stop conditions, disclosure, and escalation. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[alexbloch-ia](https://clawhub.ai/user/alexbloch-ia) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers, operators, and account owners use this skill to run authorized Instagram DM and comment reply workflows through Meta Business Suite while staying within quotas, preserving local run records, and escalating platform blocks or verification challenges to a human. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Use on an Instagram account without ownership or contractual authorization could violate account and platform expectations. <br>\nMitigation: Install and run only for an account you own or are contractually authorized to operate. <br>\nRisk: Optional alert webhooks can send recap details such as handles and lead notes outside the local workspace. <br>\nMitigation: Keep the webhook disabled unless that egress is approved, or redact recap data before enabling it. <br>\nRisk: Broad outbound automation can trigger platform blocks or anti-abuse controls. <br>\nMitigation: Keep automation within the explicit inbound DM and comment scope, honor quotas and stop conditions, and hand challenges or account blocks to a human. <br>\n\n\n## Reference(s): <br>\n- [ClawHub Skill Page](https://clawhub.ai/alexbloch-ia/skills/instagram-account-operations) <br>\n- [OpenClaw](https://openclaw.ai) <br>\n- [Meta Business Suite](https://business.facebook.com) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [guidance, markdown, shell commands, configuration] <br>\n**Output Format:** [Markdown with configuration examples, shell commands, operational checklists, and recap templates] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Produces operational guidance for an agent; no credentials are handled and alert webhooks are off by default.] <br>\n\n## Skill Version(s): <br>\n2.0.0 (source: server release metadata) <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.0.0: 4 files, 15052 bytes\n\nFiles: README.md (5065b), skill-card.md (2957b), SKILL.md (25524b), _meta.json (147b)\n\nFile v1.0.0:SKILL.md\n\n---\nname: instagram-account-operations\ndescription: Operating doctrine for Instagram account automation — careful creator + business pattern via Meta Business Suite, role separation, action-block awareness (24h/7d/permanent), comment + DM ops (Playwright click + type + Enter), reply qualification, hashtag-shadowban discipline, and recovery. Use this for any scheduled IG activity (cron, agent, recurring task) where account safety and Reels reach matter more than raw output.\n---\n\n# Instagram Account Operations\n\nThis skill is the operating doctrine for every Instagram automation run on a brand, professional or personal account.\n\n**The goal is not to comment fast. The goal is to operate Instagram like a careful, helpful human contributor: stable browser, correct context (Meta Business Suite), useful action, no action block, no shadowban risk.**\n\nDrop-in for any niche (legal, medical, software, finance, creator, ecommerce). Replace the placeholders in section 0 with your own values.\n\n---\n\n## 0. Configure for your brand\n\nBefore running anything, fill these placeholders in your local copy or your agent's memory:\n\n| Placeholder | Example | Your value |\n|---|---|---|\n| `<BRAND_NAME>` | \"Acme Studio\" | — |\n| `<BRAND_DOMAIN>` | \"acme.studio\" | — |\n| `<IG_HANDLE>` | \"@acmestudio\" | — |\n| `<META_BUSINESS_ID>` | numeric ID from business.facebook.com → Settings | — |\n| `<META_ASSET_ID>` | numeric ID of the IG account asset in MBS | — |\n| `<BROWSER_PROFILE>` | \"instagram-live\" | — |\n| `<BROWSER_PORT>` | \"18802\" | — |\n| `<NICHE_KEYWORDS>` | \"lost license OR speeding ticket\" | — |\n| `<PRIMARY_CTA>` | \"WhatsApp / form / app — pick ONE\" | — |\n| `<WORKSPACE_DIR>` | \"~/.openclaw/workspace/instagram-<brand>\" | — |\n\nAll shell snippets below assume an [OpenClaw](https://openclaw.ai) browser CLI bound by CDP, but the doctrine works with any browser-automation stack (Playwright, Puppeteer, Chrome MCP). Swap the CLI calls for your own.\n\n### Quick config (copy-paste YAML)\n\nIf your agent reads config from YAML, drop this in `<WORKSPACE_DIR>/config.yaml`:\n\n```yaml\nbrand:\n  name: <BRAND_NAME>\n  domain: <BRAND_DOMAIN>\n\ninstagram:\n  handle: <IG_HANDLE>\n  account_type: business | creator    # business strongly recommended for MBS access\n  browser_profile: <BROWSER_PROFILE>  # e.g. \"instagram-live\"\n  browser_port: <BROWSER_PORT>        # e.g. 18802\n\nmeta_business_suite:\n  business_id: <META_BUSINESS_ID>\n  asset_id: <META_ASSET_ID>\n  base_url: https://business.facebook.com/latest/inbox\n\ndiscovery:\n  niche_keywords: <NICHE_KEYWORDS>\n\ncta:\n  primary: <PRIMARY_CTA>              # one channel only\n\nworkspace:\n  dir: <WORKSPACE_DIR>\n\nalerts:\n  channel: telegram | slack | discord\n  webhook: <YOUR_WEBHOOK_URL>\n\nschedule:\n  timezone: Europe/Paris\n  windows:\n    dm_check:      \"*/15 9-22 * * *\"       # every 15 min\n    comment_check: \"10,25,40,55 9-22 * * *\" # offset to avoid collision\n    browser_health: \"0 * * * *\"\n    daily_recap:   \"21:00\"\n```\n\n### Compatibility\n\n| Stack | Skill install path |\n|---|---|\n| [Claude Code](https://claude.ai/code) | `~/.claude/skills/instagram-account-operations/` |\n| [OpenClaw](https://openclaw.ai) | `~/.openclaw/skills/instagram-account-operations/` |\n| ClawHub-published | one-click install via [clawhub.ai](https://clawhub.ai) |\n| Cursor / Copilot CLI | drop `SKILL.md` into your project's `.cursorrules` or `AGENTS.md` |\n| Any LLM agent reading markdown rules | concatenate `SKILL.md` into your system prompt |\n\n---\n\n## 1. The Meta Business Suite is the only sane surface\n\n**Doctrine: EVERYTHING goes through `business.facebook.com`. Never automate against `instagram.com` directly.**\n\nWhy:\n- No iframes (unlike TikTok).\n- Single UI for **4 channels**: IG DMs, FB Messenger DMs, IG comments, FB comments.\n- Playwright `click + type + press Enter` works out of the box.\n- Built-in CRM-style features: labels, notes, prospect stages.\n- Link previews are auto-generated for the `<PRIMARY_CTA>`.\n- Bypasses `instagram.com`'s \"redirect to `/direct/inbox/`\" bug.\n\n### Physical profile\n\nA single browser profile per account:\n\n- `<BROWSER_PROFILE>` (CDP direct, attached to `http://127.0.0.1:<BROWSER_PORT>`)\n\nThe IG account must be **logged into Meta Business Suite** in this profile and have an Asset assigned to a Business — otherwise the URLs below will 404 or redirect to a setup wizard.\n\n```bash\nopenclaw browser --browser-profile <BROWSER_PROFILE> status\nopenclaw browser --browser-profile <BROWSER_PROFILE> navigate https://business.facebook.com/latest/inbox/all/?business_id=<META_BUSINESS_ID>&asset_id=<META_ASSET_ID>\nopenclaw browser --browser-profile <BROWSER_PROFILE> snapshot --limit 200\n```\n\n### Canonical URLs (per tab)\n\n| Tab | URL fragment |\n|---|---|\n| All messages (IG DMs + FB Messenger DMs) | `/latest/inbox/all?asset_id=<META_ASSET_ID>&business_id=<META_BUSINESS_ID>` |\n| Messenger only (FB DMs) | `/latest/inbox/messenger?asset_id=<META_ASSET_ID>&business_id=<META_BUSINESS_ID>` |\n| Instagram DMs only | `/latest/inbox/instagram_direct?asset_id=<META_ASSET_ID>&business_id=<META_BUSINESS_ID>` |\n| Instagram comments | `/latest/inbox/instagram?asset_id=<META_ASSET_ID>&business_id=<META_BUSINESS_ID>` |\n| Facebook comments | `/latest/inbox/facebook?asset_id=<META_ASSET_ID>&business_id=<META_BUSINESS_ID>` |\n\nThis skill covers IG-specific concerns; for FB-specific doctrine (Pages, groups, page moderation), see the companion `facebook-account-operations` skill.\n\n### Roles (mental separation, single physical profile)\n\n#### Role: `ig-post`\n\nAccount cockpit (acting as the brand). Use for:\n- DM replies in MBS All / IG Direct tab.\n- Comment replies in MBS IG Comments tab.\n- Direct profile checks (only when MBS doesn't expose the metric).\n\nDefault page: MBS `inbox/all`.\n\n#### Role: `ig-engage`\n\nDiscovery. Use for:\n- Reading public conversations under your own posts (in MBS).\n- Inspecting a candidate user's profile before replying to a comment (open in a new tab on `instagram.com`, but DO NOT act from there).\n\nDefault page: MBS `inbox/instagram` (comments tab).\n\n#### Role: `ig-stealth`\n\nQuiet maintenance. Use for:\n- Story view audits.\n- Hashtag-state checks (open hashtag in incognito, NOT in this profile).\n\nDefault page: MBS dashboard.\n\n### Operational law\n\n- `ig-post` = act as the account via MBS.\n- `ig-engage` = discover and qualify, NEVER act outside MBS.\n- `ig-stealth` = maintain and observe.\n- Stability matters more than speed.\n- After every run, return to MBS `inbox/all`.\n\n---\n\n## 2. Session check (run first on every cron)\n\n```bash\nopenclaw browser --browser-profile <BROWSER_PROFILE> status\nopenclaw browser --browser-profile <BROWSER_PROFILE> navigate \"https://business.facebook.com/latest/inbox/all/?business_id=<META_BUSINESS_ID>&asset_id=<META_ASSET_ID>\"\nopenclaw browser --browser-profile <BROWSER_PROFILE> snapshot --limit 60\n```\n\nCheck:\n- If `status` is `stopped`: report and stop.\n- If the snapshot shows a Facebook login form: session expired, report and stop.\n- If the snapshot shows the MBS chrome but with a \"Reauthenticate to manage this asset\" banner: same — stop and report.\n- If the snapshot shows the inbox with conversation list visible: continue.\n\nNever relaunch Chrome from inside a cron.\n\n---\n\n## 3. Phase gating (action-block awareness)\n\nInstagram does not have karma; it has **action blocks** — a tiered penalty system:\n\n- **Phase A** (account < 30 d, OR last 30 d had an action block, OR less than 500 followers): only inbound DM/comment replies inside MBS, **zero outbound actions** (no proactive DMs, no comment-on-other-people's-posts, no following).\n- **Phase B** (account ≥ 30 d, no recent block, ≥ 500 followers, no community-guideline flag): all crons authorized.\n\nAlways read `<WORKSPACE_DIR>/memory/ig-state.md` at start (last line = current phase).\n\n### Action-block thresholds (observed, not officially published)\n\n| Action | Frequency that triggers a block |\n|---|---|\n| Follow / unfollow | > 50/day or > 200/week |\n| Comment on others' posts | > 30/hr or > 200/day |\n| DMs to non-followers (proactive) | > 10/day on a young account |\n| Liking | > 60/hr |\n| Posting | > 5 posts/24h |\n\nA block lasts 24 h (warning), 7 d (second offense), or **permanent** (third+). The thresholds tighten on Phase A accounts.\n\n### Manual override (advanced)\n\nYou can force Phase B by appending `YYYY-MM-DD - phase=B (manual override)` to `ig-state.md`. Use only if the account is grandfathered (verified business, long history, no warnings). Document in `ig-learnings.md`.\n\n---\n\n## 4. Qualification of an inbound DM or comment\n\nA DM or comment is repliable only if **all** of:\n\n- The thread has at least one user-authored message (not a pure share / reel forward — those have no question).\n- The user did NOT just receive a templated auto-reply that they haven't acknowledged.\n- Phase B authorized for proactive / brand-mentioning replies (see §3).\n- The message is a real question or intent in your domain.\n- The same user has not been sent a brand-mentioning reply in the last 7 days (`ig-reply-log.md`).\n\nIf any check fails: skip. Document why in the recap.\n\n### Special: a user shared a Reel with no message\n\nDefault action: **skip silently**. A Reel share without a question is usually a forward to friends; replying creates noise and confuses the conversation.\n\n### Special: existing client recognized\n\nIf the user appears in `ig-clients-known.md`: reply with empathy, **do not paste any link**, redirect to the standard support channel (NOT `<PRIMARY_CTA>` which is for prospects).\n\n---\n\n## 5. Reply templates\n\n### Phase A (warming, NO brand mention)\n\n- 1-3 sentences.\n- Match the conversation tone.\n- No links, no expert-grade advice.\n\n### Phase B (brand-aware, expert)\n\nDM reply (any length, but ≤ 700 chars stays human):\n```\n[Acknowledge the situation in 1 sentence, neutral tone.]\n\n[General framework in 2-3 short paragraphs.]\n\n[Concrete next step — point to <PRIMARY_CTA>. ONE channel only.]\n```\n\nComment reply (≤ 200 chars, prefix with `@username` to target the parent comment):\n```\n@username [contextual acknowledgement]. [Indirect signal — \"DM us\" or \"form on profile\"].\n```\n\n### What never to paste verbatim\n\n- Anything with `[brackets]` left in it (final read-through is mandatory).\n- The same opening phrase across more than 2 replies in 7 days.\n- A literal URL inside a DM unless it is the `<PRIMARY_CTA>`'s own link AND it is the second message in the conversation (Meta's link-preview takes 1-2 s; if pasted as the first interaction, IG marks it as spam).\n\n### Brand link policy\n\n- Inside a comment body: NEVER paste a URL. \"Form on profile\" / \"DM us\" is the only allowed signal.\n- Inside a DM: max ONE URL, ONE channel (`<PRIMARY_CTA>`). Never a bit.ly / tinyurl / shortener — IG marks shorteners as spam.\n\n---\n\n## 6. Original posting cadence\n\nOut of scope for the live reactive crons. Recommended rhythm for a Phase B account:\n\n- **Reels**: 3-5/week. Hook in first 1.5 s. Vertical 9:16. Native sound or licensed library only.\n- **Carousels**: 2-3/week. Educational, multi-slide. Drives saves (the strongest ranking signal).\n- **Stories**: 3-7/day. Reuse top reel hooks. Polls + sticker engagement = strong reach signal.\n- **Lives**: ad hoc, max 1/week. Plan, don't ad-lib.\n- **Static feed posts**: out, except for branded covers.\n\nHashtag discipline (Reels + posts):\n- 3-5 hashtags per post (the \"30 hashtags\" old advice is dead — IG reduced the cap and over-tagging looks spammy).\n- 1 broad + 2-3 niche + 1 micro (< 50k posts).\n- Re-check the `<WORKSPACE_DIR>/memory/ig-hashtag-state.md` registry monthly for shadowbanned tags.\n\n---\n\n## 7. Quotas (hard limits)\n\n| Action | Phase A limit | Phase B limit |\n|--------|---------------|---------------|\n| DMs handled (inbound replies) per 24 h | 20 | 60 |\n| DMs handled per cron run | 4 | 8 |\n| Comment replies handled per 24 h | 30 | 100 |\n| Comment replies handled per cron run | 5 | 10 |\n| Outbound DMs / day (to non-followers) | 0 | 5 |\n| Follows / day | 5 | 20 |\n| Unfollows / day | 5 | 20 |\n| Likes per hour | 30 | 60 |\n| Actions in same conversation | min 60 s apart | min 30 s apart |\n| Actions globally | min 30 s apart | min 15 s apart |\n\nQuota tracking: read `ig-reply-log.md` at start of every run, count entries in the last 24 h, abort early if quotas already met.\n\n---\n\n## 8. Anti-spam triggers\n\n### Content\n\n| Avoid | Use instead |\n|-------|-------------|\n| \"Check link in bio\" repeated | (mention bio at most once per conversation) |\n| `<BRAND_NAME>` more than once per reply | (max one mention) |\n| \"DM me\", \"WhatsApp me\", \"click here\" stacked | (one CTA, one channel — `<PRIMARY_CTA>`) |\n| Phone numbers, emails | (never in comment bodies; OK in DM tail if user explicitly asked) |\n| Emojis in regulated / sober niches | (drop them) |\n| All caps for emphasis | (use sparingly) |\n| Shorteners (bit.ly / tinyurl) | (use the full canonical URL) |\n\n### Behavioral\n\n- Replying within 30 s of a comment going live → bot-like; wait ≥ 2 min.\n- Same opening phrase across multiple replies → flagged. Vary the first 1-2 words.\n- > 6 actions in 10 min → rate limit on that role.\n- Following + liking the same user's last 5 posts within 1 min → instant action block.\n- Sending the same DM body to > 3 users in 24 h → \"Action blocked\" toast within minutes.\n\n---\n\n## 9. Operational flow inside Meta Business Suite\n\nReactive DM + comment ops run inside MBS exclusively. The flow below is validated end-to-end.\n\n### DM check / reply (validated)\n\nURL: `https://business.facebook.com/latest/inbox/all?business_id=<META_BUSINESS_ID>&asset_id=<META_ASSET_ID>`\n\n1. Pre-flight session check (see §2).\n2. Navigate to the `all` tab. Wait 5 s for the conversation list to render.\n3. **Filter for unread** by clicking the \"Unread\" filter chip, or query the conversation list for nodes with the unread badge.\n4. For each unread conversation, top-to-bottom:\n   a. Click the conversation tile (the user's name).\n   b. **Read the entire message thread** for context — IG conversations often span across the auto-template + user's real reply.\n   c. Qualify (see §4). If skip-eligible, click the next conversation.\n   d. **Click the textbox**: selector `[contenteditable='true']` or `[aria-label*='Reply'], [aria-label*='Répondre']`.\n   e. **Type the message** via Playwright `type` (or `evaluate` with `document.execCommand('insertText', false, msg)` ONLY if `contenteditable` is a vanilla React-controlled input — verify first).\n   f. **Press Enter** to send. Do NOT click \"Send\" — there are visual duplicates of the send button and a Playwright `click` sometimes lands on the wrong one. Enter is unambiguous.\n5. After sending, the textbox empties; verify before moving to the next conversation.\n6. After processing all unread, switch to the `Messenger` tab and to the `Instagram` tab in turn to catch any FB-only or IG-only inboxes that didn't surface in `all`.\n\n### Comment reply (validated — partial)\n\nURL: `https://business.facebook.com/latest/inbox/instagram?business_id=<META_BUSINESS_ID>&asset_id=<META_ASSET_ID>`\n\nThe comments tab is **less stable than DMs** — see \"Known issue\" below.\n\n1. Navigate to the comments tab. Wait 5 s.\n2. Posts with new comments appear in the left rail with an unread badge.\n3. For each post:\n   a. Click the post tile.\n   b. Comments render in the right pane.\n   c. For each lead-qualified comment:\n      - **Find the page-level \"Ajoutez un commentaire...\" / \"Add a comment...\"** textarea **at the bottom** of the right pane.\n      - Type `@username your reply` (the `@username` prefix targets the parent comment without clicking \"Reply\").\n      - **Click the send-arrow button** (SVG arrow to the right of the textarea) — Enter does NOT submit a comment in this UI.\n\n### Known issue: do NOT click \"Reply\" on comments\n\nClicking the \"Reply\" affordance under a comment navigates the right pane to a different post (Meta's SPA bug, present in 2025-2026). The validated workaround is `@username` prefix + page-level textarea + send-arrow click — described above.\n\nIf you must produce a true nested reply (rare): open the post URL on `instagram.com` in a separate ig-engage tab, reply there manually, then mark the conversation done in `ig-reply-log.md`. Do not script the `instagram.com` reply path — Instagram's anti-automation is much tighter than MBS.\n\n### Selectors quick-reference\n\n| Element | Selector |\n|---|---|\n| DM textbox | `[contenteditable='true']` or `[aria-label*='Reply'], [aria-label*='Répondre']` |\n| DM send (preferred) | `press Enter` |\n| Comment textarea | `textarea[placeholder*='comment'], textarea[placeholder*='commentaire']` |\n| Comment send | the SVG arrow button to the right of the textarea — `[aria-label*='Send'], [aria-label*='Envoyer']` |\n| Conversation tile | `text=<user's display name>` |\n| Tab \"Messenger\" | `text=Messenger` |\n| Tab \"Instagram\" | `text=Instagram` (the DMs tab) |\n| Tab \"Commentaires Instagram\" | `text=Instagram` (in comments URL — same string, different URL) |\n| Unread filter chip | `text=Unread, text=Non lu` |\n\n### Exit codes (recommended convention)\n\n| Code | Meaning | Recap action |\n|------|---------|--------------|\n| 0 | Replies sent, verified | `status: ok` |\n| 1 | Fatal error (selector missing, MBS error toast) | `status: error`, attach screenshot |\n| 2 | \"Action blocked\" / \"Try again later\" toast | `status: blocked`, flip the role to Phase A pause |\n| 3 | Session expired (login form rendered) | `status: blocked`, alert user |\n| 4 | Comment \"Reply\" caused page navigation (known bug — see above) | `status: partial`, log for manual review |\n\n### Gotchas\n\n- **The MBS comment-Reply navigation bug**: still present. Use the `@username` workaround.\n- **Localized labels**: `Reply` / `Répondre`, `Send` / `Envoyer` — maintain a label map and try both in selectors.\n- **MBS soft logout**: after ~48 h of inactivity, MBS asks for re-authentication on next navigation. Treat as session expired (exit 3).\n- **Tab switching**: if you operate on multiple tabs (`all`, `messenger`, `instagram_direct`), wait ≥ 3 s after switching — MBS re-fetches the conversation list and clicking too early lands on stale tiles.\n- **The `Non Lu` / `Unread` filter chip is sometimes mis-clicked**: it has a transparent overlay. Snapshot before clicking.\n- **Cron timeout**: bump to ≥ 1200 s. MBS pages can take 4-6 s to render fully.\n\n---\n\n## 10. Account state management\n\nFile: `<WORKSPACE_DIR>/memory/ig-state.md`\n\nFor each day:\n- Phase (A / B).\n- Followers count.\n- Last action-block timestamp + duration.\n- Last community-guideline notice.\n- Posts published today (cap at 5/24h per §6).\n\nFile: `<WORKSPACE_DIR>/memory/ig-clients-known.md`\n\nFor each existing client:\n- IG handle.\n- Last contact date.\n- Sensitive flag (do-not-paste-CTA).\n\nUpdate at the end of every run.\n\n---\n\n## 11. Recovery & blockers\n\n| Issue | Action |\n|-------|--------|\n| `status: stopped` | Report, stop. |\n| Login form rendered on MBS | Session expired, alert, stop. |\n| \"Reauthenticate to manage this asset\" banner | Same as login expired. |\n| \"Action blocked — try again later\" toast | Flip the role to Phase A pause for 24 h. Alert. |\n| \"Please verify it's you\" / re-captcha | Stop. Never auto-solve. Alert for manual login. |\n| MBS shows \"Something went wrong\" generic error | Refresh once. If persists, stop and alert. |\n| Comment \"Reply\" click navigated to wrong post | Mark exit 4, fall back to manual via `instagram.com`. |\n| Followers drop > 5 % overnight | Likely shadowban — flip to Phase A, alert. |\n| Two consecutive comments removed within < 10 min of post | Auto-freeze comment cron for 6 h. |\n\n---\n\n## 12. Mandatory recap (alert channel + memory)\n\nAt the end of each cron:\n\n**Alert channel — final run message**:\n```\n[Job name] — [status: ok|partial|blocked|skipped]\nDMs handled: [N or \"—\"]\nComments handled: [N or \"—\"]\nHot leads: [list short OR \"—\"]\nPhase: [A|B]\nBlockers: [text OR \"—\"]\nNext action: [1 line]\n```\n\n**Memory** — append to `<WORKSPACE_DIR>/memory/ig-recaps.md`:\n```\n## YYYY-MM-DD HH:MM TZ — <job-id> — status: <status>\n- Job: <description>\n- Phase: A|B\n- DMs sent: <N>\n- Comments sent: <N>\n- Hot leads: <list or \"—\">\n- Blockers: <text or \"—\">\n- Next useful action: <1 line>\n```\n\n---\n\n## 13. Memory files inventory\n\nLocated at: `<WORKSPACE_DIR>/memory/`\n\n| File | Purpose | Update cadence |\n|------|---------|----------------|\n| `ig-recaps.md` | Per-run logs | Every cron run |\n| `ig-post-log.md` | Reels + carousels + stories (URL, type, date, reach) | Each posting run |\n| `ig-reply-log.md` | DM + comment replies sent | Each reply pass |\n| `ig-state.md` | Daily phase + followers + warning flags | Daily Metrics Recap |\n| `ig-hashtag-state.md` | Per-hashtag reach + shadowban check | Weekly |\n| `ig-clients-known.md` | Existing clients to NEVER pitch | Ad hoc |\n| `ig-ideas.md` | Content backlog | Weekly Planning |\n| `ig-learnings.md` | Patterns (what reached, what got removed) | Weekly + ad hoc |\n| `ig-alerts-sent.md` | Anti-doublon hot-lead alerts | Each alert |\n\n---\n\n## 14. Account identity guardrails\n\n- Handle: brand-aligned but not aggressively promotional (`@drsmithlegal` > `@bestlawyerinparis`).\n- Bio: one line + the single `<PRIMARY_CTA>` link. No emojis, no flag salad in regulated niches.\n- Never reply to a DM that asks for expert-grade advice on a specific case — redirect to `<PRIMARY_CTA>`.\n- Never share private client details, names, or numbers.\n- Never reuse strict CRM templates as IG content.\n- Never promise an outcome (\"you will win\").\n- Never charge or solicit payment in DM.\n- If asked \"are you a bot?\": one sober, ambiguous line, then redirect. Do not confirm AI.\n\n---\n\n## 15. Phase A → Phase B transition\n\nWhen the Daily Metrics Recap detects (account_age_days ≥ 30) AND (followers ≥ 500) AND (last_action_block_days_ago > 30):\n\n1. Append to `ig-state.md`: `YYYY-MM-DD - phase=A - PHASE_B_THRESHOLD_REACHED`.\n2. Send a distinct alert: `🎉 IG account ready for Phase B — review and flip outbound crons manually`.\n3. Manual user flip (no auto-flip).\n4. First week of Phase B: cap reply pass at **3 replies/run** (not 8).\n5. Daily check on `Action Status` (MBS → Settings → Account Status). Any \"warning\" reverts to Phase A.\n\n---\n\n## 16. Stability discipline\n\n- Read the UI before clicking.\n- One click → verify with a snapshot.\n- Switch tabs only after the previous tab settled.\n- Close stale tabs at the end of every run.\n- Never fake a successful reply — always verify the message landed in the thread.\n\n**Better silence than spam. Better a blockage report than a fake success.**\n\n---\n\n## 17. First-run checklist\n\n- [ ] Section 0 placeholders filled.\n- [ ] IG account is **Business** or **Creator**, linked to a Meta Business Suite asset.\n- [ ] `<META_BUSINESS_ID>` and `<META_ASSET_ID>` extracted (open MBS, copy from the URL).\n- [ ] Bio is one line + single `<PRIMARY_CTA>` link.\n- [ ] Browser profile launched at `http://127.0.0.1:<BROWSER_PORT>` and logged into facebook.com (the MBS gate).\n- [ ] Navigating to `inbox/all` renders the conversation list (no login form, no setup wizard).\n- [ ] `<WORKSPACE_DIR>/memory/` exists with the 9 memory files.\n- [ ] Alert channel webhook tested.\n- [ ] Phase A confirmed: only inbound DM cron enabled.\n- [ ] At least 14 days of manual posting + manual replies before turning on the cron.\n- [ ] Account Status checked (MBS → Settings → Account Status): **green / no warning**.\n\nInit memory:\n\n```bash\nmkdir -p \"<WORKSPACE_DIR>/memory\" && cd \"$_\" && touch ig-recaps.md ig-post-log.md ig-reply-log.md ig-state.md ig-hashtag-state.md ig-clients-known.md ig-ideas.md ig-learnings.md ig-alerts-sent.md\n```\n\n---\n\n## 18. FAQ\n\n**Q: Do I need OpenClaw to use this skill?**\nA: No. OpenClaw browser CLI is the example stack — the doctrine works with Playwright (Node or Python), Puppeteer, Chrome MCP, or any CDP-capable tool.\n\n**Q: Can I just use the Instagram Graph API?**\nA: Partially. The Graph API covers `instagram_basic`, `instagram_manage_messages`, `instagram_manage_comments` — if you have an approved app, you can build a more robust webhook-based flow. The doctrine in this skill is the **fallback for accounts not yet approved for Graph API access, or for cases where MBS UI features are needed** (labels, prospect stages, link previews).\n\n**Q: What about multi-account?**\nA: Clone the workspace dir per account. Use a separate browser profile + port. **Each IG account must have its own Meta Business asset** — you can manage multiple assets from one MBS, but they have distinct `<META_ASSET_ID>` values.\n\n**Q: My account got an action block during testing. What now?**\nA: Stop everything. Flip to Phase A. Manual usage only for 7-14 days. Document in `ig-learnings.md` the exact last 20 actions. Do NOT appeal automatically.\n\n**Q: Does the doctrine cover Reels Ads / Boost / Shopping?**\nA: No. This skill is for organic + reactive ops only. Ads have a separate dashboard and a separate (different) sanction pattern.\n\n**Q: What's the most common reason this skill's crons get flagged?**\nA: Same opening phrase across replies. Vary the first 1-2 words every time. The second most common: replying within 30 s of a comment landing — wait ≥ 2 min.\n\n**Q: What if my account is suspended (not just action-blocked)?**\nA: Stop everything. Do not appeal automatically — Instagram's appeal flow is sensitive to repeated automated submissions. Manual review only. Document the exact last 20 actions before the suspension in `ig-learnings.md`.\n\nFile v1.0.0:README.md\n\n# Instagram Account Operations\n\n> Operating doctrine for Instagram automation — careful creator + business pattern via Meta Business Suite, role separation, action-block awareness (24h/7d/permanent), comment + DM ops, reply qualification, hashtag-shadowban discipline, and recovery patterns.\n\n[![License: MIT-0](https://img.shields.io/badge/License-MIT--0-blue.svg)](https://opensource.org/licenses/MIT-0)\n[![Version](https://img.shields.io/badge/version-1.0.0-green)](#changelog)\n\nA Claude Code / OpenClaw skill for running Instagram brand accounts safely. Battle-tested in a regulated-field operation, ported to be domain-agnostic.\n\n**Why most Instagram automation triggers action blocks**: it scripts `instagram.com` directly, ignoring Meta Business Suite. This doctrine doesn't — MBS is the canonical surface.\n\n---\n\n## What's in the box\n\n- **3-role mental model** for any IG account (`ig-post` / `ig-engage` / `ig-stealth`)\n- **MBS-first doctrine**: every reactive op (DMs, comments) goes through `business.facebook.com`, not `instagram.com` directly — fewer iframes, Playwright `click + type + Enter` works, link previews auto-generated\n- **Action-block-phased posting**: Phase A (account < 30d, recent block, or < 500 followers) → Phase B (full doctrine) — with **manual override path** for grandfathered businesses\n- **Zero-outgoing-link policy** in comments (max 1 URL in DMs, only the `<PRIMARY_CTA>`)\n- **The known MBS comment-Reply navigation bug + workaround** (use `@username` prefix + page-level textarea + send-arrow click)\n- **Strict reply qualification**: skip Reel-shares-without-question, recognize existing clients (no prospect CTA), 7-day per-user cap\n- **Hard quotas** calibrated under IG's observed action-block thresholds (follow/unfollow, DMs to non-followers, likes per hour)\n- **Anti-spam triggers**: same-opening-phrase ban, shorteners ban, \"DM me + WhatsApp me + click here\" stacked-CTA ban\n- **Hashtag-state tracking**: registry for shadowbanned tags, no over-tagging (3-5 max)\n- **Full recovery playbook**: action blocks, soft logouts, \"Reauthenticate\" banner, shadowban suspicion, automod removals\n- **Memory file inventory** for stateful agents\n- **Mandatory recap pattern** (alert channel + memory)\n\n---\n\n## Install\n\n### Via ClawHub\n\nThe skill is designed to be published on ClawHub — install in one click from your agent once published.\n\n### Manual copy\n\n```bash\nmkdir -p ~/.claude/skills/instagram-account-operations\ncp SKILL.md ~/.claude/skills/instagram-account-operations/\n```\n\nOr for OpenClaw:\n\n```bash\nmkdir -p ~/.openclaw/skills/instagram-account-operations\ncp SKILL.md ~/.openclaw/skills/instagram-account-operations/\n```\n\n---\n\n## Quick start\n\n1. Open `SKILL.md` and fill the placeholders in **Section 0** (brand, domain, handle, `<META_BUSINESS_ID>`, `<META_ASSET_ID>`, browser profile, port, niche keywords, primary CTA, workspace dir).\n2. Confirm your IG account is **Business** or **Creator** AND linked to a Meta Business Suite asset.\n3. Extract `<META_BUSINESS_ID>` and `<META_ASSET_ID>` from the MBS URL once you're logged in.\n4. Wire your crons (e.g. DM check `*/15`, comment check `10,25,40,55`, browser-health `hourly`).\n5. **Start in Phase A** until account_age ≥ 30 days AND followers ≥ 500 AND no recent action block. Don't shortcut.\n6. Daily check on `Account Status` (MBS → Settings → Account Status): **green / no warning**.\n\nShell snippets in the skill use the [OpenClaw](https://openclaw.ai) browser CLI as an example automation stack. Swap them for Playwright (Node or Python), Puppeteer, Chrome MCP, or any CDP-capable tool — the doctrine is stack-agnostic.\n\n---\n\n## Who is this for\n\nAny niche where the brand needs to be a *background* signal behind genuinely useful posts and DMs:\n\n- **Legal services** (origin of the doctrine — works under strict bar association rules)\n- **Medical / health** practitioners with public-content strategies\n- **Financial advisors** subject to compliance constraints\n- **SaaS / B2B founders** doing community-led growth\n- **Creators / agencies** managing brand accounts on behalf of clients\n\nAnywhere action-block = reach death.\n\n---\n\n## Repository structure\n\n```\ninstagram-account-operations/\n├── SKILL.md         # the skill (full doctrine)\n├── README.md        # this file\n├── LICENSE          # MIT-0\n└── CHANGELOG.md     # version history (TBD)\n```\n\n---\n\n## Companion skills\n\n- **facebook-account-operations** — same MBS backbone, FB-Page-specific doctrine.\n- **tiktok-account-operations** — for TikTok ops (separate browser-suite surface).\n- **whatsapp-account-operations** — for BSP-API-driven WhatsApp Business ops (the downstream conversion channel).\n- **[reddit-account-operations](https://github.com/AlexBloch-IA/reddit-account-operations)** + **[twitter-account-operations](https://github.com/AlexBloch-IA/twitter-account-operations)** — same doctrine family on other platforms.\n\n---\n\n## License\n\nReleased under **MIT-0** (MIT No Attribution). Use, fork, adapt, redistribute. No attribution required.\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn7f6shzecv3qv3wrr074s49f986ybe1\",\n  \"slug\": \"instagram-account-operations\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1779140162872\n}\n\nFile v1.0.0:skill-card.md\n\n## Description: <br>\nOperating doctrine for Instagram account automation via Meta Business Suite, with role separation, action-block-aware gating, comment and DM operations, reply qualification, hashtag-shadowban discipline, and recovery guidance. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[alexbloch-ia](https://clawhub.ai/user/alexbloch-ia) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nExternal developers, operators, and agencies use this skill to configure and run Instagram brand-account workflows through Meta Business Suite while applying quotas, phase gates, and recovery procedures intended to reduce action-block and spam risks. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill can operate live Instagram accounts and send outbound comments or DMs, which may affect account standing or client-sensitive communications. <br>\nMitigation: Install only for accounts the operator is authorized to manage, keep human approval for outbound messages in regulated or client-sensitive contexts, and start with the skill's Phase A limits before enabling broader automation. <br>\nRisk: The security summary flags an instruction that discourages truthful confirmation of automation when users ask about it. <br>\nMitigation: Revise the identity-response guidance before use so replies are truthful, policy-compliant, and aligned with the account owner's disclosure requirements. <br>\nRisk: The release carries capability tags for crypto and purchases, increasing review sensitivity for monetized or regulated workflows. <br>\nMitigation: Require explicit operator approval before any payment, purchase, solicitation, financial, or crypto-related action, and keep those actions out of automated DM/comment flows unless separately reviewed. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/alexbloch-ia/instagram-account-operations) <br>\n- [Publisher profile](https://clawhub.ai/user/alexbloch-ia) <br>\n- [OpenClaw](https://openclaw.ai) <br>\n- [Meta Business Suite inbox](https://business.facebook.com/latest/inbox) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Guidance, Markdown, Shell commands, Configuration] <br>\n**Output Format:** [Markdown with YAML examples, shell commands, operating checklists, and procedural guidance] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Produces account-operation instructions and example browser-automation commands; it does not provide executable code as a standalone application.] <br>\n\n## Skill Version(s): <br>\n1.0.0 (source: server release metadata) <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>","readmeExcerpt":"Skill: Instagram Account Operations Owner: alexbloch-ia Summary: Keep an automated Instagram account out of action blocks — Meta Business Suite DMs, comments, quotas. Use when scheduling IG replies from a cron or agent. Tr... Tags: account-safety:2.0.1, action-blocks:2.0.1, agent:2.0.1, anti-shadowban:2.0.1, automation:2.0.1, browser-automation:2.0.1, comments:2.0.1, cron:2.0.1, dm:2.0.1, doctrine:2.0.1, faq:2.0.1, g","codeSnippets":[],"executableExamples":[{"language":"yaml","snippet":"# <WORKSPACE_DIR>/config.yaml\ninstagram: { handle: <IG_HANDLE>, account_type: business, browser_profile: <BROWSER_PROFILE>, browser_port: <BROWSER_PORT> }\nmeta_business_suite: { business_id: <META_BUSINESS_ID>, asset_id: <META_ASSET_ID> }\ncta: { primary: <PRIMARY_CTA> }        # one channel only\nalerts: { channel: telegram, webhook: \"\" }   # empty = no egress, recaps to disk only\nschedule:\n  timezone: Europe/Paris\n  windows: { dm_check: \"*/15 9-22 * * *\", comment_check: \"10,25,40,55 9-22 * * *\", daily_recap: \"21:00\" }"},{"language":"bash","snippet":"openclaw browser --browser-profile <BROWSER_PROFILE> status\n# Output: profile=instagram-live state=running cdp=http://127.0.0.1:18802\nopenclaw browser --browser-profile <BROWSER_PROFILE> navigate \\\n  \"https://business.facebook.com/latest/inbox/all/?business_id=<META_BUSINESS_ID>&asset_id=<META_ASSET_ID>\"\nopenclaw browser --browser-profile <BROWSER_PROFILE> snapshot --limit 60\n# Output: … [textbox \"Search messages\"] … [list] Conversations (12)   → OK, continue\n# Output: … [form] Log into Facebook …                                → exit 3, stop"},{"language":"text","snippet":"[Acknowledge the situation in 1 sentence, neutral tone.]\n\n[General framework in 2-3 short paragraphs.]\n\n[Concrete next step — point to <PRIMARY_CTA>. ONE channel only.]"},{"language":"text","snippet":"Sorry you're dealing with that — a suspended licence is stressful and the clock matters.\n\nBroadly, two things decide the outcome: the notice date on the decision, and whether the procedural steps were followed. Both are checkable from the paperwork you already have.\n\nIf you want it looked at properly, the intake form on our profile is the fastest route."},{"language":"text","snippet":"@username [contextual acknowledgement]. [Indirect signal — \"DM us\" or \"form on profile\"]."},{"language":"text","snippet":"## YYYY-MM-DD HH:MM TZ — <job-id> — status: ok|partial|blocked|skipped\n- Phase: A|B\n- DMs handled: <N or \"—\">\n- Comments handled: <N or \"—\">\n- Hot leads: <list or \"—\">\n- Escalated to human: <N or \"—\">\n- Blockers: <text or \"—\">\n- Next useful action: <1 line>"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: instagram-account-operations\ndescription: Keep an automated Instagram account out of action blocks — Meta Business Suite DMs, comments, quotas. Use when scheduling IG replies from a cron or agent. Trigger on \"instagram bot\", \"action blocked\", \"instagram dm automation\", \"reply to instagram comments\", \"instagram shadowban\".\nmetadata: {\"clawdbot\":{\"emoji\":\"📸\",\"homepage\":\"https://openclaw.ai\"}}\n---\n\n# Instagram Account Operations\n\n**The goal is not to reply fast. The goal is to operate Instagram like a careful, helpful human contributor — through Meta Business Suite, inside quota, and openly, on an account you are authorized to run.**\n\n## Access, Data & Network — read before running anything\n\n| What it needs | Why | Default |\n|---|---|---|\n| A browser profile already logged into `business.facebook.com` | MBS is the only surface this skill drives | You log in by hand. The skill never handles credentials, never types a password, never launches a login flow. |\n| Read access to your IG DMs and comments | It replies to them | Scoped to the one asset ID you configure |\n| Local directory `<WORKSPACE_DIR>/memory/` | Quota counting, dedupe, phase state | Created by you (see checklist) |\n| Alert webhook (Telegram/Slack/Discord) | Run recaps | **Off by default. Opt-in.** Leave `alerts.webhook` empty and the skill writes recaps to disk only — no network egress beyond Meta's own domains. |\n\nPersisted locally, and nothing else: run recaps, counts of replies sent, IG handles you replied to (for the 7-day dedupe), phase state, follower count, hashtag notes. **Retention: 90 days** — truncate the memory files on that cadence. If you enable a webhook, the recap block in *Recap output* leaves your machine verbatim, including hot-lead handles; redact or keep it off. Instagram's Terms of Use and Community Guidelines, and Meta's Platform Terms, are a hard constraint on everything below, not a footnote: run this only on an account you own or are contractually authorized to operate, and only where automated replies are permitted for your account type.\n\n## When to Use\n\n| Trigger | Action |\n|---|---|\n| \"check my Instagram DMs\" / cron DM pass | Session check → MBS `inbox/all` → qualify → reply within quota |\n| \"reply to instagram comments\" | MBS `inbox/instagram` → `@username` flow |\n| \"action blocked\" / \"try again later\" toast | **Stop the run.** Flip to Phase A, alert, human reviews |\n| \"am I shadowbanned\" / followers dropped overnight | Flip to Phase A, alert, no automated recovery attempt |\n| \"set up my instagram bot\" | Configure → first-run checklist → 14 days manual first |\n| Any challenge, CAPTCHA, or \"verify it's you\" screen | **Stop. Hand to a human.** Never solve, never retry, never reshape behavior to get past it |\n\n## Configure\n\n| Placeholder | Example | Your value |\n|---|---|---|\n| `<BRAND_NAME>` | \"Acme Studio\" | — |\n| `<IG_HANDLE>` | \"@acmestudio\" | — |\n| `<META_BUSINESS_ID>` | numeric ID from business.facebook.com → Settings | — |\n| `<META_ASSET_ID>` "},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7f6shzecv3qv3wrr074s49f986ybe1\",\n  \"slug\": \"instagram-account-operations\",\n  \"version\": \"2.0.1\",\n  \"publishedAt\": 1784214106285\n}"},{"path":"skill-card.md","content":"## Description:\n\nGuides agents through authorized Instagram account operations in Meta Business Suite, including inbound DM and comment replies, quota controls, recaps, and human escalation conditions.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[alexbloch-ia](https://clawhub.ai/user/alexbloch-ia)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal developers, operators, and business users use this skill to run authorized Instagram inbox and comment workflows through Meta Business Suite while staying within stated quotas and escalation rules.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill handles Instagram DMs, comments, handles, and lead details that may include sensitive or identifiable information.\n\nMitigation: Use it only on accounts you own or are authorized to operate, keep local memory files access-controlled, and enforce the stated 90-day retention.\n\nRisk: Optional webhook alerts can send recap details, including handles or lead context, outside the local workspace.\n\nMitigation: Leave the webhook empty by default; enable it only for trusted, access-controlled destinations after redacting sensitive details.\n\nRisk: Automated Instagram activity can trigger platform blocks, challenges, or account review if used outside the stated limits.\n\nMitigation: Follow the phase gates, quotas, and stop conditions, and hand control to a human for login prompts, challenges, action blocks, or suspension events.\n\n## Reference(s):\n\n- [ClawHub Skill Page](https://clawhub.ai/alexbloch-ia/skills/instagram-account-operations)\n- [OpenClaw](https://openclaw.ai)\n\n## Skill Output:\n\n**Output Type(s):** [Guidance, Markdown, Shell commands, Configuration]\n\n**Output Format:** [Markdown with YAML and bash code blocks]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Includes quota tables, stop conditions, local memory file conventions, and recap templates.]\n\n## Skill Version(s):\n\n2.0.1 (source: server release metadata)\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":"Keep an automated Instagram account out of action blocks — Meta Business Suite DMs, comments, quotas. Use when scheduling IG replies from a cron or agent. Tr... Skill: Instagram Account Operations Owner: alexbloch-ia Summary: Keep an automated Instagram account out of action blocks — Meta Business Suite DMs, comments, quotas. Use when scheduling IG replies from a cron or agent. Tr... Tags: account-safety:2.0.1, action-blocks:2.0.1, agent:2.0.1, anti-shadowban:2.0.1, automation:2.0.1, browser-automation:2.0.1, comments:2.0.1, cron:2.0.1, dm:2.0.1, doctrine:2.0.1, faq:2.0.1, g","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1461,"uniquenessScore":53,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-10T23:39:11.754Z","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-10T23:39:11.754Z","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-11T05:43:23.142Z","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"}]}}}