agentsclimarketplace

Facebook

Skill CleanSlice/skills/facebook

CleanSlice agent skills — architecture patterns, vertical slices, conventional commits for Claude Code and AI coding agents.

Install
npx -y skills add CleanSlice/skills --skill facebook

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Facebook and Meta Ads automation via a logged-in browser session — manage pages, run ad campaigns, read inbox. Shares the Meta cookie space with Instagram when accounts are linked.

SKILL.md

2.7 KB, as published. Nobody here has run it

Facebook / Meta Ads

Same mechanics as the [[instagram]] skill — load that one first for the login flow, fingerprint notes, and browser_play patterns. This file documents only the Facebook-specific bits.


Quick Reference

NeedAnswer
Toolbrowser_play
Profilefacebook:<label> (e.g. facebook:main, facebook:client-acme)
Login URLhttps://www.facebook.com/login/
Meta linkOne profile covers both Facebook AND linked Instagram if SSO is enabled
Ads Managerhttps://adsmanager.facebook.com/ (same cookies)

Common actions

Read inbox messages

await browser_play({
  profile: 'facebook:main',
  actions: [
    { kind: 'navigate', url: 'https://www.facebook.com/messages/t/' },
    { kind: 'waitForSelector', selector: '[role="grid"]', timeout: 10000 },
    { kind: 'getText', selector: '[role="grid"]' },
  ],
})

Open Ads Manager for a campaign

await browser_play({
  profile: 'facebook:main',
  actions: [
    { kind: 'navigate', url: `https://adsmanager.facebook.com/adsmanager/manage/campaigns?act=${adAccountId}` },
    { kind: 'waitForSelector', selector: '[role="grid"]', timeout: 15000 },
    {
      kind: 'evaluate',
      code: `
        const rows = []
        document.querySelectorAll('[role="row"]').forEach((r, i) => {
          if (i === 0 || i > 20) return
          rows.push(r.innerText)
        })
        return rows
      `,
    },
  ],
})

Post on a page

await browser_play({
  profile: 'facebook:main',
  actions: [
    { kind: 'navigate', url: `https://www.facebook.com/${pageId}` },
    { kind: 'waitForSelector', selector: '[role="button"][aria-label*="Create"]', timeout: 10000 },
    { kind: 'click', selector: '[role="button"][aria-label*="Create"]' },
    { kind: 'fill', selector: '[contenteditable="true"]', value: post },
    { kind: 'click', selector: '[role="button"][aria-label="Post"]' },
  ],
})

Account-key conventions

  • facebook:main — primary personal account
  • facebook:<client-slug> — shared/agency accounts (one per client)
  • facebook:ads-<account-id> — pinned to a specific Business Manager when the agent only needs that scope

Multiple accountKeys per user are isolated profiles — cookies don't bleed across them.


Don't

  • Don't mix personal and Business Manager logins in one profile — Meta sometimes prompts for re-auth when the active account switches.
  • Don't use the Graph API directly for things you can do in the browser — Meta routinely revokes app permissions.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.