Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsCommunityBlog
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

Back to skills

Social Publish Article

ASecurity

Publishes a finalized post to your SOCIAL channels — Facebook, Threads & Instagram — via the Buffer API, with per-channel formatting, Instagram image support, and a preview-confirm gate before anything posts. Use when you say 'publish my post', 'post this to Threads/IG/FB', 'push this draft live to social', or 'schedule this post'. The SOCIAL publisher — not the website/blog one (seo-publish-article).

20 stars
0 votes
0 copies
0 views
Added 9/19/2026
content-marketingpythongobashgitapi

Works with

cliapi

Security Analysis

A100/100

Scanned 9/19/2026

Install to Claude Code

$npx -y skills add peter-tu-zynkr/zynkr-skill-builder --skill social-publish-article --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Social Publish Article?

Add the live security badge to your README — it updates automatically with every re-scan.

Security grade badge for Social Publish Article
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/peter-tu-zynkr-social-publish-article/badge)](https://www.skillsdirectory.com/skills/peter-tu-zynkr-social-publish-article)

More formats (shields.io, HTML) on the badges page.

Download Zip
Files
SKILL.md
---
name: social-publish-article
sheetId: "1.29"
description: "Publishes a finalized post to your SOCIAL channels — Facebook, Threads & Instagram — via the Buffer API, with per-channel formatting, Instagram image support, and a preview-confirm gate before anything posts. Use when you say 'publish my post', 'post this to Threads/IG/FB', 'push this draft live to social', or 'schedule this post'. The SOCIAL publisher — not the website/blog one (seo-publish-article)."
category: brand-marketing
project: social-publish-article
platform: claude
status: Done
author: Peter Tu
input: "A finalized post/caption (plus a public image URL for Instagram), which channels to target, and whether to draft, post now, or schedule"
process: "Formats the copy per channel (Threads 500-char aware; Instagram needs a public image URL + caption), previews the exact copy for confirmation, then publishes through the Buffer API using your own token and connected channels"
output: "The post created in Buffer — as a draft, an immediate publish, or a scheduled post — with the Buffer post id and status returned per channel"
synergy: []
house-style: bound

---

# Social Publish Article

```bash
npx skills add https://github.com/peter-tu-zynkr/zynkr-skill-builder --skill social-publish-article
```

Publish a finished post to your social channels — Facebook, Threads, and Instagram — through Buffer, so you don't have to open three apps or Buffer's dashboard. You bring your own Buffer access token and your already-connected channels; the skill formats the copy per platform, shows you exactly what will go out, and only publishes after you confirm. It can stage a draft in Buffer, post immediately, or schedule for later.

---

## Configuration — connect Buffer (one-time)

This skill talks to **your own** Buffer account — nothing is shared or hardcoded.

1. In Buffer, connect the channels you want (Facebook Page, Threads, Instagram **Business/Creator** account) and create a Buffer **API access token** (Buffer → Developers; choose the longest expiry offered).
2. Copy `.secrets.env.example` to `.secrets.env` (it's gitignored — keep it that way) and paste your token as `BUFFER_ACCESS_TOKEN`. Never put the token in chat or in `SKILL.md`.
3. Discover your org + channel IDs with the helper, then paste them into `.secrets.env`:
   ```bash
   python3 scripts/buffer_post.py --list-channels
   ```
   Fill in `BUFFER_ORG_ID`, `BUFFER_CHANNEL_FACEBOOK`, `BUFFER_CHANNEL_THREADS`, `BUFFER_CHANNEL_INSTAGRAM`.

The token is read only by the helper at runtime — it never appears in output or on the command line.

## The one rule — confirm before anything goes public

Never publish (`now` / `schedule`) without showing the user the exact final copy per channel and getting an explicit "yes." Posting is public and hard to undo. The default mode is `draft` (stages the post in Buffer; nothing public) until the user says go live.

---

## Step 1 — Gather the final post

Collect the finished copy from the user (pasted text, a file, or a doc). Confirm per channel:
- **Facebook / Threads:** the post text.
- **Instagram:** a caption **and** an image (see Step 3 — IG can't post text-only).

If the same copy is reused across channels, confirm that's intended; otherwise take per-channel text.

## Step 2 — Pick channels and mode

- **Channels:** `facebook`, `threads`, `instagram` — whichever apply. Text-only content skips Instagram unless an image is supplied.
- **Mode:** `draft` (default — stage in Buffer for a final look), `now` (publish immediately), or `schedule` (needs an ISO timestamp).

## Step 3 — Format per channel

- **Facebook (text):** full body + optional link; no hard length limit in practice.
- **Threads (text, 500-char cap):** Threads posts cap at 500 characters. If the copy fits, post once. If it's longer, split into ≤500-char chunks on sentence/paragraph boundaries and post each as a separate Threads post — this helper posts **one** Buffer post per call and does not chain a native reply-thread, so note the split in the preview.
- **Instagram (image + caption):** Instagram requires an image — text-only is rejected. Buffer takes a **public image URL**, not a file upload, so host the image at a reachable URL first (any public bucket/CDN) and pass that URL. The post text becomes the caption.

## Step 4 — Preview & confirm  ⟵ the gate

Show the user, clearly separated per channel: the exact text (with Threads char counts / chunk splits), and for Instagram the image URL + caption. State the **mode** explicitly ("mode: draft" vs "mode: NOW — goes public immediately"). Then ask: **"Post these now? (yes / edit / cancel)"** Only on an explicit yes proceed. "edit" → revise and re-preview. Default to NOT publishing live.

## Step 5 — Publish via Buffer

Run the helper once per channel. It reads your token from `.secrets.env`; never put the token on the command line.

```bash
python3 scripts/buffer_post.py --channel facebook  --text "<copy>"                          --mode draft
python3 scripts/buffer_post.py --channel threads   --text "<chunk>"                          --mode draft
python3 scripts/buffer_post.py --channel instagram --image "<public-url>" --text "<caption>" --mode draft
```

Swap `--mode draft` → `--mode now` to publish immediately (only after the Step 4 "yes"), or `--mode schedule --due 2026-06-20T09:00:00Z` to queue. For a split Threads thread, call the threads line once per chunk, in order.

Read each result: `OK post id=… status=…` (success) or `FAIL <ErrorType>: <message>`. If any call fails, **stop** and report which channels posted and which didn't — a half-published set is worse left silent. On a daily-limit error, surface Buffer's posting limit rather than blind-retrying.

## Outputs

- The post(s) created in Buffer — draft, immediate, or scheduled — with the Buffer post id + status per channel. For `now`/`schedule`, Buffer performs the actual publish (you do not need your own scheduler).

## Configuration files

- `.secrets.env` — your Buffer token + channel IDs (gitignored; copy from `.secrets.env.example`). Never commit or reveal it.
- `scripts/buffer_post.py` — the Buffer GraphQL helper. Modes: `--list-channels`, and `--channel/--text/--image/--mode/--due`.

## Limitations

- One Buffer post per call — a Threads thread posts as separate posts, not a native reply-chain.
- Instagram needs a **public** image URL (no direct byte upload) and a Business/Creator account connected in Buffer.
- Buffer access tokens **expire** — pick the longest expiry and refresh before it lapses, or publishing silently 401s.
- Buffer's API returns no analytics — this skill publishes only.

## House style

Writing style is **not owned by this file**. The house voice lives in two Google Docs under
`[@] 寫作指南` (`12DBdFz3SK22ie9im_ThFMI7IBRXsTZsV`), read at runtime:

- 《[2.0] Zynkr 通用風格指南 House Voice》 `10bOIQwRm9Pxwgct4hlwCwK_B4Pipai1HqBPZKzyRHSE` —
  the universal core, plus the addendum for this surface
- 《[3.2] 禁用詞清單 Forbidden Words》 `1N5sHLP4qzmmhpCGsi6KElxi1z0MFe4QZ0Q_35T10Uyg`

Read both before producing client- or reader-facing text, and scan the draft against 《[3.2]》
before handing it over. If Drive is unreachable, say so in the output rather than proceeding
unchecked. Never re-implement either list inside this file.

Attribution

peter-tu-zynkrpeter-tu-zynkr
View sourceMore from peter-tu-zynkr →
SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments (0)

No comments yet. Be the first to comment!

SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Related Skills

Postiz

Postiz is a tool to schedule social media and chat posts to 28+ channels X, LinkedIn, LinkedIn Page, Reddit, Instagram, Facebook Page, Threads, YouTube, Google My Business, TikTok, Pinterest, Dribbble, Discord, Slack, Kick, Twitch, Mastodon, Bluesky, Lemmy, Farcaster, Telegram, Nostr, VK, Medium, Dev.to, Hashnode, WordPress, ListMonk

21281 votes

Serp Analysis

SERP analysis techniques for intent classification, feature identification, and competitive intelligence. Use when analyzing search results for content strategy.

2831 votes

On Page Seo Auditor

This skill performs detailed on-page SEO audits to identify issues and optimization opportunities. It analyzes all on-page elements that affect search rankings and provides actionable recommendations.

1821 votes

Brand

Brand voice, visual identity, messaging frameworks, asset management, brand consistency. Activate for branded content, tone of voice, marketing assets, brand compliance, style guides.

1289240 votes

Release Announcement

Write a release announcement — changelog, blog post, in-app note, or social post — that leads with user impact, names the audience, and includes upgrade/migration steps without filler.

805540 votes
View all in content-marketing →