Buffer Publisher
Use this skill to operate Buffer through the GraphQL API. Prefer the bundled helper script for repeatable requests:
python3 "$HOME/.codex/skills/buffer-publisher/scripts/buffer_cli.py" <command> [options]
The helper reads credentials in this order:
BUFFER_API_KEY
- macOS Keychain item
codex-buffer-api-key
Never print, paste, or commit the API key. If authentication fails, ask the user to refresh the Buffer key and store it again.
Default Workflow
- Run
account to confirm access and find organizations.
- Run
channels --organization-id <id> to select the target channel.
- When the user asks to save content, create a Buffer Idea by default using
create-idea.
- Create a draft post with
create-post --draft only when the user explicitly asks for a draft.
- For posts, use
preview-post first unless the user explicitly asked to create something immediately.
- For publish-affecting actions, show a concise preflight summary: organization, channel, service, text, assets, mode, and time.
- Require explicit confirmation before
shareNow, customScheduled, edit-post, or delete-post.
Common Commands
# Account and orgs
python3 "$HOME/.codex/skills/buffer-publisher/scripts/buffer_cli.py" account
# Channels in an org
python3 "$HOME/.codex/skills/buffer-publisher/scripts/buffer_cli.py" channels --organization-id ORG_ID
# Scheduled posts for one channel
python3 "$HOME/.codex/skills/buffer-publisher/scripts/buffer_cli.py" posts --organization-id ORG_ID --channel-id CHANNEL_ID --status scheduled --limit 20
# Daily posting limits
python3 "$HOME/.codex/skills/buffer-publisher/scripts/buffer_cli.py" daily-limits --channel-id CHANNEL_ID --date 2026-04-22
# Create an idea
python3 "$HOME/.codex/skills/buffer-publisher/scripts/buffer_cli.py" create-idea --organization-id ORG_ID --title "Idea title" --text "Idea body"
# Save a draft post
python3 "$HOME/.codex/skills/buffer-publisher/scripts/buffer_cli.py" create-post --channel-id CHANNEL_ID --text "Post copy" --draft
# Add to queue
python3 "$HOME/.codex/skills/buffer-publisher/scripts/buffer_cli.py" create-post --channel-id CHANNEL_ID --text "Post copy" --mode addToQueue
# Schedule for an exact UTC time
python3 "$HOME/.codex/skills/buffer-publisher/scripts/buffer_cli.py" create-post --channel-id CHANNEL_ID --text "Post copy" --mode customScheduled --due-at 2026-04-24T17:00:00.000Z
# Delete requires an explicit CLI confirmation flag after user confirmation in chat
python3 "$HOME/.codex/skills/buffer-publisher/scripts/buffer_cli.py" delete-post --id POST_ID --yes
Capabilities
- Read account, organization, and channel state.
- List posts with filters for status, channel, date, due date, created date, tags, pagination, and sorting.
- Fetch a single post by ID.
- Check daily posting limits for channels.
- Create Ideas with title, text, services, target date, and media URLs.
- Create text, image, video, document, and link posts from public URLs.
- Save posts as drafts, add to queue, share next, share now, or schedule for a fixed UTC time.
- Edit or delete posts only after explicit user confirmation.
Safety Rules
- Do not use
shareNow unless the user explicitly asks to publish immediately.
- Do not use
customScheduled until the requested local time has been converted to a concrete UTC ISO-8601 dueAt.
- Do not create a draft post unless the user explicitly asks for a draft; otherwise save unscheduled content as an Idea.
- Do not delete or edit without repeating the target post ID and receiving confirmation.
- Do not attempt to upload local media files directly; Buffer post assets require reachable URLs.
- Do not post to locked or disconnected channels; pick another channel or ask the user to reconnect it in Buffer.
- Include
MutationError { message } or equivalent error fragments in mutations.
- Keep queries flat and paginated. Use
first around 20-50 for list operations.
References
Read references/buffer-api.md when you need endpoint details, allowed enums, supported platforms, rate limits, or GraphQL input shapes.
1---2name: buffer-publisher3description: Use Buffer's GraphQL API to inspect Buffer accounts, organizations, channels, queues, posts, daily limits, and to create Buffer Ideas, drafts, scheduled posts, queued posts, or media posts. Use when the user asks to draft, schedule, queue, publish, edit, delete, review, list, or manage social posts through Buffer, or asks what is connected in their Buffer account.4---56# Buffer Publisher78Use this skill to operate Buffer through the GraphQL API. Prefer the bundled helper script for repeatable requests:910```bash11python3 "$HOME/.codex/skills/buffer-publisher/scripts/buffer_cli.py" <command> [options]12```1314The helper reads credentials in this order:15161. `BUFFER_API_KEY`172. macOS Keychain item `codex-buffer-api-key`1819Never print, paste, or commit the API key. If authentication fails, ask the user to refresh the Buffer key and store it again.2021## Default Workflow22231. Run `account` to confirm access and find organizations.242. Run `channels --organization-id <id>` to select the target channel.253. When the user asks to save content, create a Buffer Idea by default using `create-idea`.264. Create a draft post with `create-post --draft` only when the user explicitly asks for a draft.275. For posts, use `preview-post` first unless the user explicitly asked to create something immediately.286. For publish-affecting actions, show a concise preflight summary: organization, channel, service, text, assets, mode, and time.297. Require explicit confirmation before `shareNow`, `customScheduled`, `edit-post`, or `delete-post`.3031## Common Commands3233```bash34# Account and orgs35python3 "$HOME/.codex/skills/buffer-publisher/scripts/buffer_cli.py" account3637# Channels in an org38python3 "$HOME/.codex/skills/buffer-publisher/scripts/buffer_cli.py" channels --organization-id ORG_ID3940# Scheduled posts for one channel41python3 "$HOME/.codex/skills/buffer-publisher/scripts/buffer_cli.py" posts --organization-id ORG_ID --channel-id CHANNEL_ID --status scheduled --limit 204243# Daily posting limits44python3 "$HOME/.codex/skills/buffer-publisher/scripts/buffer_cli.py" daily-limits --channel-id CHANNEL_ID --date 2026-04-224546# Create an idea47python3 "$HOME/.codex/skills/buffer-publisher/scripts/buffer_cli.py" create-idea --organization-id ORG_ID --title "Idea title" --text "Idea body"4849# Save a draft post50python3 "$HOME/.codex/skills/buffer-publisher/scripts/buffer_cli.py" create-post --channel-id CHANNEL_ID --text "Post copy" --draft5152# Add to queue53python3 "$HOME/.codex/skills/buffer-publisher/scripts/buffer_cli.py" create-post --channel-id CHANNEL_ID --text "Post copy" --mode addToQueue5455# Schedule for an exact UTC time56python3 "$HOME/.codex/skills/buffer-publisher/scripts/buffer_cli.py" create-post --channel-id CHANNEL_ID --text "Post copy" --mode customScheduled --due-at 2026-04-24T17:00:00.000Z5758# Delete requires an explicit CLI confirmation flag after user confirmation in chat59python3 "$HOME/.codex/skills/buffer-publisher/scripts/buffer_cli.py" delete-post --id POST_ID --yes60```6162## Capabilities6364- Read account, organization, and channel state.65- List posts with filters for status, channel, date, due date, created date, tags, pagination, and sorting.66- Fetch a single post by ID.67- Check daily posting limits for channels.68- Create Ideas with title, text, services, target date, and media URLs.69- Create text, image, video, document, and link posts from public URLs.70- Save posts as drafts, add to queue, share next, share now, or schedule for a fixed UTC time.71- Edit or delete posts only after explicit user confirmation.7273## Safety Rules7475- Do not use `shareNow` unless the user explicitly asks to publish immediately.76- Do not use `customScheduled` until the requested local time has been converted to a concrete UTC ISO-8601 `dueAt`.77- Do not create a draft post unless the user explicitly asks for a draft; otherwise save unscheduled content as an Idea.78- Do not delete or edit without repeating the target post ID and receiving confirmation.79- Do not attempt to upload local media files directly; Buffer post assets require reachable URLs.80- Do not post to locked or disconnected channels; pick another channel or ask the user to reconnect it in Buffer.81- Include `MutationError { message }` or equivalent error fragments in mutations.82- Keep queries flat and paginated. Use `first` around 20-50 for list operations.8384## References8586Read `references/buffer-api.md` when you need endpoint details, allowed enums, supported platforms, rate limits, or GraphQL input shapes.