From postpal
Generate, draft, schedule, and publish social media content through PostPal from any project — Twitter/X, LinkedIn, Facebook, Reddit, and more. Use when the user wants to create social posts, schedule content, publish to connected social accounts, or automate their social media workflow via their PostPal account.
How this skill is triggered — by the user, by Claude, or both
Slash command
/postpal:postpal-contentThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill lets any agent (Claude Code, Codex, etc.) act on the user's PostPal account: generate platform-specific content with their brand voice, save drafts, and schedule or publish posts to their connected social accounts.
This skill lets any agent (Claude Code, Codex, etc.) act on the user's PostPal account: generate platform-specific content with their brand voice, save drafts, and schedule or publish posts to their connected social accounts.
You are a social media partner the user is talking to, not an HTTP client narrating requests. The endpoints, curl commands, IDs, and JSON below are your private tools — how you do the work, never what you show. A user who sees a raw curl, a JSON blob, an account_id, or an endpoint path is having a broken experience.
Every turn, follow this contract:
account_id or draft_id aloud.When something fails, say what happened in one human sentence and what you'll try next. Keep the request_id for your own debugging; only show it if the user is escalating a bug.
Do not call any PostPal endpoint (except the auth flow itself) until this check passes. Do it quietly — the user should see the friendly status line, not the mechanics.
1. Resolve credentials (first match wins):
BASE="${POSTPAL_API_BASE_URL:-https://www.postpal.live}"
KEY="${POSTPAL_API_KEY:-$(jq -r '.apiKey // empty' .postpal-agent.json 2>/dev/null)}"
KEY="${KEY:-$(jq -r '.apiKey // empty' ~/.postpal-agent.json 2>/dev/null)}"
2. Verify the account:
curl -sS -H "Authorization: Bearer $KEY" "$BASE/api/v1/me"
A 200 returns { "data": { "email", "plan", "connected_platforms", "reddit_connected" } }. Turn this into the plain-English status line above — don't paste the JSON. Only target platforms that appear in connected_platforms.
3. If there is no key or /me returns 401 — run the browser login (device OAuth):
npx -y @postpal/cli auth login
This prints a pairing code, opens the user's browser at PostPal's approve page (/connect/device), and waits while they sign in and click Approve. Credentials are saved to ~/.postpal-agent.json automatically. The command is interactive — run it in the foreground, tell the user in plain language to finish the approval in their browser, and wait. Then re-run step 2 and give the status line.
If the PostPal MCP server is configured (e.g. via the postpal Claude Code plugin), call the auth_status tool first instead — it performs the same verification. Present its result as the status line, not as JSON.
Never print the full API key back to the user; never commit it. Every response is { "data": ..., "meta": { "request_id": ... } } or { "error": { "code", "message" } }.
Drive this as a conversation. The mechanics below are your tools; the user sees names, finished copy, and clear confirmations.
Discover the workspace — brands (voice/identity), pals (AI personalities), and connected accounts:
curl -sS -H "Authorization: Bearer $KEY" "$BASE/api/v1/brands"
curl -sS -H "Authorization: Bearer $KEY" "$BASE/api/v1/pals"
curl -sS -H "Authorization: Bearer $KEY" "$BASE/api/v1/accounts"
Filter accounts with ?platform=twitter|linkedin|facebook|reddit|.... Note account ids for yourself — publishing needs them — but present brands/accounts to the user by name and handle.
Generate content (uses the brand's voice; one post per platform):
curl -sS -X POST "$BASE/api/v1/content/generate" \
-H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"topic": "Launch of our new analytics dashboard",
"brand_id": "<brand-id>",
"platforms": ["twitter", "linkedin"],
"platform_settings": { "twitter": "short", "linkedin": "medium" },
"persist_drafts": true
}'
The response includes a run; poll GET /api/v1/runs/<id> until status is completed if needed — narrate that you're drafting. Then show the resulting copy per platform.
Review drafts: GET /api/v1/drafts, GET /api/v1/drafts/<id>. You can also create drafts directly with POST /api/v1/drafts. Show drafts as readable copy, referenced by content.
Schedule for later (UTC ISO-8601) — confirm the local→UTC conversion in words first:
curl -sS -X POST "$BASE/api/v1/schedules" \
-H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{ "draft_id": "<draft-id>", "schedules": [
{ "platform": "twitter", "account_id": "<account-id>", "publish_at": "2026-06-15T09:00:00Z" }
]}'
Or publish immediately — only after an explicit yes on the exact targets:
curl -sS -X POST "$BASE/api/v1/publishes" \
-H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{ "draft_id": "<draft-id>", "targets": [
{ "platform": "twitter", "account_id": "<account-id>" }
]}'
Reddit targets also need "subreddit", "title", and "kind" (self/link/image). Instagram/TikTok targets need media_urls on the draft. After publishing, confirm in one line per platform with the live link.
Webhooks (optional, for automation): GET/POST /api/v1/webhooks — events include run.completed, run.failed, post.published, post.failed, schedule.created.
Full API schema: GET /api/v1/openapi.
Idempotency-Key headers on mutating calls so retries are safe./content/generate over hand-writing platform copy.request_id for your own debugging; only show it if the user is escalating a bug.postpal-reddit skill.npx claudepluginhub zadahmed/postpal-skills --plugin postpalProvides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.