Skip to content
Agentmart
Submit a tool

cross-platform-engagement

Run one outbound engagement pass across Threads, Bluesky, Mastodon, X and LinkedIn — discover conversations where discovery exists, read them, draft native…

Skill by boltaai

IndexedMIT★ 2
Write a review

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/boltaai-cross-platform-engagement

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.

We use your email only for this newsletter. Privacy

About

Run one outbound engagement pass across Threads, Bluesky, Mastodon, X and LinkedIn — discover conversations where discovery exists, read them, draft native replies, publish after approval, verify. Use this skill when the user asks to "engage across my networks", "find conversations on Threads/Bluesky/ Mastodon", "reply to this X post", "comment on that LinkedIn post", "join relevant discussions", or names a platform other than Reddit. For Reddit specifically use reddit-engagement (it has the richest adapter); for comments on OUR OWN posts use social-inbox. To make this recurring, see "Save this as a routine".

No 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/cross-platform-engagement

What's inside

Skill name
cross-platform-engagement
Description
Run one outbound engagement pass across Threads, Bluesky, Mastodon, X and LinkedIn — discover conversations where discovery exists, read them, draft native replies, publish after approval, verify. Use this skill when the user asks to "engage across my networks", "find conversations on Threads/Bluesky/ Mastodon", "reply to this X post", "comment on that LinkedIn post", "join relevant discussions", or names a platform other than Reddit. For Reddit specifically use reddit-engagement (it has the richest adapter); for comments on OUR OWN posts use social-inbox. To make this recurring, see "Save this as a routine".
License
MIT
Instructions
135 lines in SKILL.md · view on GitHub

Files (1)

  • SKILL.md

SKILL.md (first lines)

# Cross-Platform Engagement

The same loop as reddit-engagement, run across the other networks — with one
difference that shapes everything: **platforms differ in what Bolta can do**, and
pretending otherwise is the main way this goes wrong.

## The capability matrix, honestly
| Platform | Keyword discovery | Read a conversation | Reply |
|-|-|-|-|
| Threads | Yes | Yes | Yes |
| Bluesky | Yes | Yes | Yes |
| Mastodon | Yes (hashtag) | Yes | Yes |
| X | **No** — needs elevated API access | Yes | Yes |
| LinkedIn | **No** — no public search | Yes (by post URN) | Yes |
| Facebook / Instagram | No | Read-only | **No** — needs Meta Advanced Access |

For X and LinkedIn the user must supply a URL or post id; you cannot go looking.
Say that plainly rather than searching and returning nothing. Never claim a
platform works because it appears in this table — always confirm with
`list-engagement-capabilities`, which reports the live per-account state.

## Tools this skill uses
| Tool | Why |
|-|-|
| `list-workspaces` / `list-accounts` | Resolve the workspace and the connected accounts. |
| `list-engagement-capabilities` | The authoritative per-account matrix. Call it first, every time. |
| `get-voice-context` | Load the voice; needed to judge relevance. |
| `list-engagements` | Avoid re-engaging something already handled. |
| `search-engagement-opportunities` | Discovery — Threads, Bluesky, Mastodon only. |
| `create-engagement-opportunity` | Register a target the user supplied by URL (the X/LinkedIn path). No `campaign_id` needed. |
| `get-engagement-conversation` | Read the target and its replies. Works everywhere reply does. |
| `draft-engagement-reply` | Draft. Server-side writer, per-platform norms applied for you. |
| `publish-engagement-reply` | Publish after approval; optional `content` edits in the same call. |
| `get-engagement-status` | Verify the canonical URL. |
| `react-to-social-content` | Optional — like / repost / boost / upvote where supported. Confirm first; it is a public action. |

## Prerequisites
- `workspace_id` via `list-workspaces`; auth is automatic, never ask for a key.
- At least one connected account on the target platform.
- Publishing needs owner/admin/creator. On a permission error run
  `get-my-capabilities` and report the missing role rather than retrying.

## Workflow

### 1. Resolve and confirm
`list-workspaces` → `list-accounts` →
`list-engagement-capabilities(workspace_id)`.

Show the user which of their platforms can be engaged and which cannot, before
doing anything. If they asked for a platform with no discovery, say so now and
ask for a URL instead of failing later.

### 2. Load the voice and prior work
`get-voice-context(workspace_id)`, then
`list-engagements(workspace_id)` to see what has already been drafted or sent.

### 3. Find targets

**Where discovery exists (Threads, Bluesky, Mastodon):**
`search-engagement-opportunities(workspace_id, account_id, platform, query,
sort="new")`. One query at a time. `campaign_id` is optional; omit it.

**Where it does not (X, LinkedIn):** ask the user for the URL or post id, then
`create-engagement-opportunity(account_id, platform, target_id)` to register it.
That returns an `opportunity_id` the rest of the flow uses, so a user-supplied
URL reaches the same voice-aware drafting pipeline as a discovered one.

No Hunter campaign is needed — omit `campaign_id` and the target is filed in the
account's own engagement container. Pass one only when the user is deliberately
working inside an existing campaign.

### 4. Read every candidate
`get-engagement-conversation(...)`. Same rule as Reddit: judging from a preview
is how a brand ends up replying to a thread it misread.

### 5. Judge
Skip when you have nothing specific to add, when the point is already made, when
the only available contribution is the pitch, or when the thread is not a
conversation (a poll, a meme, an announcement). Fewer, better replies. Report
what you passed on.

Per-platform instincts worth carrying into the judgement:
- **Threads** — casual, one thought. A long reply is out of place.
- **Bluesky** — dry and skeptical of marketing language; 300 characters hard.
- **Mastodon** — earnest and technical, and openly hostile to promotion. The
  bar for a brand account replying at all is higher here than anywhere else.
- **X** — terse. One clause of substance beats a paragraph.
- **LinkedIn** — resist the platform's own cadence. No one-line-per-sentence
  formatting, no comment-farming question at the end.

### 6. Draft
`draft-engagement-reply(workspace_id, opportunity_id, account_id)`. The
server-side writer applies the platform's norms and length budget along with the
brand voice — you do not need to (and should not) restate them in a prompt.

### 7. Check, approve, publish, verify
Same as reddit-engagement: read the draft critically, show the user the reply
**and the thread**, wait for explicit approval, `publish-engagement-reply`, then
`get-engagement-status` for the canonical URL. Not done until you have a link.

### 8. Reactions (optional)
`react-to-social-content(workspace_id, account_id, platform, target_id,
reaction)` — `like` / `repost` on Bluesky and X, `favourite` / `boost` on
Mastodon, `upvote` on Reddit. These are public actions under the user's account:
ask first. They are idempotent, so a retry is safe.

## Definition of done
- Every platform the user asked about was either engaged or explained.
- Every published reply has a verified canonical URL.
- Nothing published without explicit approval.
- Platforms without discovery were named as such, not silently skipped.

## Failure handling
- `unsupported_platform` on search → that platform has no discovery adapter.
  Offer the supply-a-URL path; do not retry the search.
- `unsupported_platform` on reply → Bolta cannot post there at all (Facebook,
  Instagram today). Say so; offer copy-and-open instead.
- `credentials_expired` → reconnect required. Report, do not retry.
- `target_not_found` → deleted between discovery and drafting; drop it.

From boltaai/bolta-skills, MIT.

More from boltaai/bolta-skills

Signals

Stars
2
Forks
0
Open issues
0
Last commit (this folder)
Sep 1, 2026 (1 month ago)
Last release
Feb 16, 2026 (8 months ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from boltaai

Cite this page

cross-platform-engagement skill. Agent Mart. https://agentmart.dev/skills/boltaai-cross-platform-engagement (last updated 2026-10-24)