find posts in a group or across Facebook by keyword; search people, read profiles, extract hashtags and tagged people, dump reel comments, audit group-post…
Skill by overseers-desk
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/overseers-desk-facebook
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: security
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/facebook
What's inside
- Skill name
facebook- Description
- find posts in a group or across Facebook by keyword; search people, read profiles, extract hashtags and tagged people, dump reel comments, audit group-post activity.
- License
- MIT
- Instructions
- 173 lines in SKILL.md · view on GitHub
Agent Skills spec issues
- name: "facebook" does not match folder "facebook.com"
Files (17)
- SKILL.md
- auth-keyword-search.tcl
- auth-parse-activity.tcl
- auth-parse-photos.tcl
- auth-parse-posts.tcl
- auth-parse-profile.tcl
- auth-parse-reel-comments.tcl
- auth-parse-reel.tcl
- auth-parse-reels-tab.tcl
- auth-parse-search.tcl
- auth-reel-comments-cdp.tcl
- auth-search-posts.tcl
- fb-common.tcl · lib/
- identity.tcl · lib/
- parse-reel-comments.tcl · lib/
- reel-comments-cdp.tcl · lib/
- whoami.tcl
SKILL.md (first lines)
## Execution model
This workflow produces large DOM outputs (1-15MB per page). Spawn a **Sonnet subagent** to run it so the main conversation context is not consumed. Each script runs under the **serialised-browsing** harness: `browser-serialiser` loads the skill into a policed safe interpreter and drives the browser through the command surface (no raw CDP, anti-ban pacing enforced). Invoke by reference, `browser-serialiser facebook.com/<script> <args>`; the subagent need not paste scripts inline. See the serialised-browsing skill for the command surface.
Each script navigates to the relevant page, dumps the rendered DOM (or, for reel comments, harvests the page's own GraphQL responses), and emits its report in one step. A profile reference is a bare handle, a numeric id, or a full URL.
## Prerequisites
A logged-in Facebook session in the user-data-dir the serialiser targets.
Optional config, `[facebook.com] user_id`: the numeric account expected signed in. `browser-serialiser` names it in the `session missing` line it prints on exit 77, so a person reading a failed run knows which login to restore.
### No-session detection
When no one is logged in, Facebook embeds `"USER_ID":"0"` and `"ACCOUNT_ID":"0"` in the page config and serves a login wall (`id="login_form"`, `input name="email"`, `input name="pass"`, action `login/device-based/regular/login/`). The `"USER_ID":"0"` marker is the reliable one: it fires even on a public profile whose `<title>` still reads like a real page (e.g. `Mark Zuckerberg | Facebook`) behind the wall, where a title-only check would be fooled. When logged in, `USER_ID`/`ACCOUNT_ID` carry the real numeric account id.
The harness classifies a login/checkpoint redirect into a terminal `logged-out`/`checkpoint` state; the scripts also check the no-session markers in the dumped DOM, and a hit is a fault of shape `login_wall`, never a result. When a read comes back with `fault.shape` of `login_wall`, surface `fault.detail` to the user verbatim — do not retry blindly or report empty results.
Facebook may otherwise serve different DOM structures depending on the target profile's privacy settings and the session locale.
## Pacing and walls
The harness owns pacing+jitter on every wire-touching verb and the 429/login backoff, so a script cannot burst. A page settles for a few seconds before its rendered DOM is read. On a login/checkpoint redirect the run goes terminal at once; a script never retries a wall.
## 1-2. Search for people
```bash
browser-serialiser facebook.com/auth-parse-search SEARCH TERMS
browser-serialiser facebook.com/auth-parse-search --pages SEARCH TERMS
```
Pass terms as plain arguments (the script URL-encodes them and navigates to `/search/people/?q=...`, or `/search/pages/` with `--pages`). Outputs profile URLs (both vanity `/username` and numeric `/profile.php?id=`) with nearby visible text, read from the page's result region only. The people vertical lists no Page, so a business or trade name belongs in `--pages`. A query Facebook finds nothing for reports `No results` with the site's own notice; a page with neither rows nor the notice is an `unrecognised` fault.
### Search variants for hard-to-find people
Try in order if no results:
1. `Name City` — `Vikram Mazumder Mumbai`
2. `Name Company` — `Vikram Mazumder Google`
3. `Name Country` — `Vikram Mazumder India`
4. Alternative romanisations — for Indian names try Mazumdar/Mazumder/Majumder/Majumdar; for Chinese names try Lin/Lim/Lam etc.
## 3-4. Fetch and parse a profile
```bash
browser-serialiser facebook.com/auth-parse-profile HANDLE_OR_URL
```
Navigates to the profile (a bare handle resolves to `https://www.facebook.com/HANDLE`; a numeric id to `/profile.php?id=ID`; a Page slug carrying its id, `Name-ID` or `p/Name-ID`, to `/ID`: the hyphenated forms redirect out to meta.com and the harness ends a run that leaves the site, and `/people/Name/ID/about` renders an unavailable notice; a reference with no page behind it ("This page isn't available") is reported as a `removed` fault rather than as the signed-in shell) and extracts name, meta descriptions, JSON-LD Person data (if present), bio/intro lines, role/work mentions, location mentions, and visible text blocks.
For the declared contact and ownership detail, point the same script at the About tab: `https://www.facebook.com/HANDLE/about` (numeric: `/profile.php?id=ID&sk=about`). The tab's values are not rendered text; they sit in the page's data payload per sub-tab, so an About read reports an `About:` block: the Call button's number, the Bio, then the Contact info and Details sub-tabs (phone with its type, email, Messenger, address, rating), each fetched as its own navigation, and the remaining sub-tabs (Intro, Category, Links, Names on some pages) by URL, readable by passing that URL as the reference. A sub-tab that declares nothing reads `none declared`; an About page whose payload lacks the `profile_field_sections` key is an `unrecognised` fault, so a schema change shows as a fault and not as an empty contact block.
## 5. Parse recent posts
```bash
browser-serialiser facebook.com/auth-parse-posts HANDLE_OR_URL
```
Navigates to the profile and extracts per post: text content, hashtags, tagged/mentioned people and pages (with profile URLs), and shared-from source. Produces a summary of all hashtags and tagged entities across posts.
The script auto-detects the profile owner's ID to exclude self-references. To override:
```bash
browser-serialiser facebook.com/auth-parse-posts HANDLE_OR_URL --owner-id 100006232604720
```
How it works: each Facebook post carries a unique `__cft__[0]` token in all its links. The script uses `data-ad-preview="message"` markers to locate post boundaries, then associates hashtag and profile links via these tokens. Comments are excluded by limiting tag search to the header + content region.
## 6. Fetch a single reel / page post with rendered counts and commenters
A `https://www.facebook.com/reel/{ID}` URL renders an empty shell with no content. Use the page-post permalink form:
```bash
browser-serialiser facebook.com/auth-parse-reel https://www.facebook.com/PAGE_ID/posts/POST_ID
```
`POST_ID` for a recent reel can be found in the main profile dump (§3). Look for `"post_id":"NNNNNNNNN"` adjacent to the reel's `/reel/{ID}` URL — there is one such pair per recent reel embedded in the profile JSON.
Outputs page name, caption (from `<title>`), counts from both embedded JSON (`reaction_count`, `share_count`, sometimes `total_comment_count`) and the rendered engagement bar (reactions / comments / shares visible to the viewer), and the commenters whose names render in the DOM along with the comment body text adjacent to each name.
Limit: Facebook lazy-loads comments. A single render yields the first ~5-10 comments out of the full thread. The total count in the engagement bar is the true number; do not invent further commenters beyond what the parser extracts. For the full comment thread use §9.
## 7. Parse reels-tab view counts
```bash
browser-serialiser facebook.com/auth-parse-reels-tab HANDLE_OR_URL
```
Navigates to the profile's reels tab (`/HANDLE/reels`, or `/profile.php?id=ID&sk=reels_tab` for a numeric id) and extracts per visible reel card: reel URL and view count (e.g. `191K`). The render yields the first few cards before lazy-load — typical yield is 3 reels.
How it works: each reel card has an eye-icon SVG with a fixed path string (`M7.5 10a2.5...`); the view count is the first `<span>` after it. The reel ID is the closest `/reel/NNNNN` link occurring before that SVG.
## 8. Keyword search
```bash
browser-serialiser facebook.com/auth-keyword-search HANDLE_OR_URL keyword1 keyword2 ...
```
Navigates to the profile, then for each keyword shows the count and surrounding context — useful for checking whether a profile mentions specific companies, roles, locations, or topics without reading the entire DOM. The first argument is the profile reference; the rest are keywords.
## 9. Dump reel comments to Markdown
The reel viewer (`https://www.facebook.com/reel/{id}`) is an authenticated SPA that defers comment loading until the Comment button is clicked, and uses "Most relevant" sort by default. The reel-comments script drives the viewer: it navigates via `capture` (so the page's own GraphQL comment responses are buffered — the primary private-data path), clicks Comment, switches sort to an unfiltered view, scrolls and expands "N replies" / "See more" until the harvested set stops growing, harvests the GraphQL bodies for canonical comment text, and emits the parsed Markdown directly.
```bash
browser-serialiser facebook.com/auth-reel-comments-cdp https://www.facebook.com/reel/REEL_ID --max-rounds 200
```
`facebook.com/auth-parse-reel-comments URL` is the same end-to-end (it reuses the same driver and renderer); either reference produces the Markdown.
Output format is raw: `Author · age` followed by body lines for each top-level comment, with replies indented under their parent (prefixed with `↳`). No headers, no profile URLs, no comment IDs — designed for reading.
The number of comments returned matches what Facebook serves over its GraphQL endpoint. The viewer's header count (e.g. "630 comments") is often higher than what's actually returned because Facebook counts include spam-filtered/deleted/cross-universe-aggregated items that the API does not serve to a logged-in viewer.
## 10. Audit the group-post activity log
```bash
browser-serialiser facebook.com/auth-parse-activity <profile-id|activity-url> [--max-rounds N]
```From overseers-desk/magazines, MIT.
More from overseers-desk/magazines
- 0.580score
ndis.gov.au
overseers-desk
Australia's official NDIS provider register: search registered disability providers by suburb/postcode and radius, or confirm whether a named provider (or…
SkillAFreshness: A★ 1Claude Code +9 - 0.580score
ihg.com
overseers-desk
Anonymous hotel availability, pricing and search; plus logged-in IHG One Rewards member data (your own stays, bookings, points and reward activity) via…
SkillAFreshness: A★ 1Claude Code +9 - 0.580score
interlinetravel.com.au
overseers-desk
Interline Travel cruise deals at industry staff rates on interlinetravel.com.au: prices, availability, interline rates, search.
SkillAFreshness: A★ 1Claude Code +9 - 0.580score
premierinn.com
overseers-desk
Premier Inn (Whitbread) hotel room availability, live nightly pricing, room-type inventory, rate plans (Flex/Standard/Non-Flex), occupancy rules.
SkillAFreshness: A★ 1Claude Code +9 - 0.580score
marriott.com
overseers-desk
find hotel properties near a destination, lookup by property code; info (name, brand, address, coords, images, reviews).
SkillAFreshness: A★ 1Claude Code +9 - 0.580score
officeworks.com.au
overseers-desk
Officeworks printing prices: flyer and document-print quantity ladders, per size, paper stock, siding and colour.
SkillAFreshness: A★ 1Claude Code +9 - 0.543score
linkedin
overseers-desk
search people, and search inside named members' connections, read profiles, read a job posting, check keywords, verify connect eligibility, find role/company.
SkillBFreshness: B★ 1Claude Code +9 - 0.540score
kiwi.com
overseers-desk
Cheapest flights across airlines that do not interline, including self-transfer combinations no airline or OTA sells, priced for the whole party.
SkillBFreshness: B★ 1Claude Code +9 - 0.540score
beatthatflight.com.au
overseers-desk
Cheapest fares on any route worldwide, shopped across dozens of online agencies at once: one-way, return or multi-city, with the agency's booking link.
SkillBFreshness: B★ 1Claude Code +9 - 0.540score
csair.com
overseers-desk
China Southern (CZ) fares and itinerary availability by route and date, including China domestic + international through-fares OTAs do not price.
SkillBFreshness: B★ 1Claude Code +9 - 0.540score
otter.ai
overseers-desk
Otter.ai recordings: list, rename, trash, fetch speaker-labelled transcripts, and download mp3 audio from a logged-in Otter account.
SkillBFreshness: B★ 1Claude Code +9 - 0.540score
instagram
overseers-desk
Search Instagram accounts, read profiles, and enumerate a profile's followers or following; find someone by name or handle.
SkillBFreshness: B★ 1Claude Code +9
Signals
- Stars
- 1
- Forks
- 0
- Open issues
- 36
- Last commit (this folder)
- Sep 6, 2026 (1 month ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/overseers-desk/magazines
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from overseers-desk
- 0.580score
officeworks.com.au
overseers-desk
Officeworks printing prices: flyer and document-print quantity ladders, per size, paper stock, siding and colour.
SkillAFreshness: A★ 1Claude Code +9 - 0.580score
ndis.gov.au
overseers-desk
Australia's official NDIS provider register: search registered disability providers by suburb/postcode and radius, or confirm whether a named provider (or…
SkillAFreshness: A★ 1Claude Code +9 - 0.580score
ihg.com
overseers-desk
Anonymous hotel availability, pricing and search; plus logged-in IHG One Rewards member data (your own stays, bookings, points and reward activity) via…
SkillAFreshness: A★ 1Claude Code +9 - 0.580score
interlinetravel.com.au
overseers-desk
Interline Travel cruise deals at industry staff rates on interlinetravel.com.au: prices, availability, interline rates, search.
SkillAFreshness: A★ 1Claude Code +9 - 0.580score
marriott.com
overseers-desk
find hotel properties near a destination, lookup by property code; info (name, brand, address, coords, images, reviews).
SkillAFreshness: A★ 1Claude Code +9 - 0.580score
premierinn.com
overseers-desk
Premier Inn (Whitbread) hotel room availability, live nightly pricing, room-type inventory, rate plans (Flex/Standard/Non-Flex), occupancy rules.
SkillAFreshness: A★ 1Claude Code +9
Cite this page
facebook skill. Agent Mart. https://agentmart.dev/skills/overseers-desk-facebook (last updated 2026-10-24)