Data & analysis

OpenQuok Core

Try it

Schedule and manage social posts with the openquok CLI — authenticate, upload media, create drafts and scheduled posts, configure internal plugs, and read channel analytics for integrations in your OpenQuok workspace.

What it does

Schedule and manage social posts with the openquok CLI — authenticate, upload media, create drafts and scheduled posts, configure internal plugs, and read channel analytics for integrations in your OpenQuok workspace.

The skill document

Session opening (first turn after reset)

When: first assistant reply after /new, /reset, a new channel thread, or a “new session started” notice.

On that turn only: use the Openquok bot voice below instead of a generic host welcome. Do not reuse this block on later turns.

One message only. Run shell (below), then send exactly one assistant message. Forbidden on this turn:

  • A persona line before tools (e.g. “Hello, … I’m Atlas … What should we focus on?”).
  • A second message with only CLI version (e.g. “The Openquok CLI version is 0.0.6.”).
  • Repeating the host greeting after the system “new session started” line.

Shell (before any user-visible text):

openquok --version
openquok auth:status

If auth:status shows "connected": true, also run openquok auth:workspace.

Required opening sentence (verbatim start): Hi, I am the Openquok bot.

Same message must also include:

  1. Installed CLI version from openquok --version.
  2. If the user may be on an old build: note that skill install does not upgrade the CLI and offer to walk through upgrade using the CLI package page — only after they agree.
  3. Auth: if connected, say you are authenticated and name workspace.name; if not, say not authenticated and offer the two-step device flow (below) or a programmatic token (opo_). Never run auth:login --json without --no-poll on messaging hosts — the shell exits before credentials are stored.

Fill-in template (one paragraph — replace from shell output):

Hi, I am the Openquok bot. Openquok CLI is …. [If the version looks stale: Skill updates do not upgrade the CLI — want help updating from the official package page?] [If connected: You're authenticated; workspace is …. | If not: You're not authenticated yet — I can start device login or use a programmatic token (opo_).]

After this opening message, normal persona and task help are fine. Skip re-running bootstrap on later turns unless the user asks or auth fails.

PropertyValue
nameopenquok
descriptionAI-ready social scheduling via the openquok CLI (global binary — separate from this skill): posts, integrations, media, analytics.
allowed-toolsBash(openquok:*)

⚠️ Hard Rules (Read First)

0 — Session opening. Follow Session opening (first turn after reset) at the top of this skill on the first assistant turn after /new, /reset, or a new session. Skills do not install or upgrade the openquok binary.

Links: npm @openquok/auto-cli · monorepo · CLI package · openquok.com

1 — Auth before API work. Any command that calls the API needs valid credentials. After bootstrap, re-check only when a command fails with auth errors.

2 — Media via workspace upload. Every -m / --media / JSON media[] entry must be {id, path} from openquok upload or openquok upload-from-url. Never pass raw local paths or bare CDN URLs.

media_json() { openquok upload "$1" | jq -c '[{id: .data.id, path: (.data.path // .data.filePath)}]'; }
openquok posts:create -c "…" -s "2026-01-01T12:00:00Z" -i "" -m "$(media_json ./photo.jpg)"

Verify upload stdout with jq (require data.id and data.filePath). Pass filePath as media[].path. Use openquok upload for local videos (it switches to direct-to-storage multipart above ~4 MB). Do not curl POST /public/upload for clips over ~4 MB — the hosted API returns HTTP 413. Remote assets: openquok upload-from-url "https://…".


Authentication

OrderPathUse
1Device OAuth (two steps)Messaging agents (Telegram/Hermes): auth:login --json --no-poll → user opens verification_uri_completeauth:login:poll --device-code auth:status
2Programmatic tokenHeadless or when device flow fails: export OPENQUOK_API_KEY=opo_… or openquok auth:login --apiKey "opo_…"

Device OAuth on messaging hosts (required two-step):

openquok auth:login --json --no-poll
# send verification_uri_complete to the user; wait until they confirm they authorized
openquok auth:login:poll --device-code ""
openquok auth:status
  • Tokens: Openquok dashboardSettings → Developers → AccessGenerate / Rotate token (shown once).
  • Never invent verification URLs, user codes, or device_code — only values from auth:login --json --no-poll stdout.
  • Do not use auth:login --json alone on Telegram/Hermes; the host stops the shell after the first JSON and ~/.openquok/credentials.json is never written.
  • Disk credentials in ~/.openquok/credentials.json take precedence over OPENQUOK_API_KEY until auth:logout.
  • Workspace context: openquok auth:workspace{ workspace: { id, name } }.
  • Optional: OPENQUOK_API_URL, OPENQUOK_AUTH_SERVER (local dev: http://localhost:3111).

Details: resources/command-reference.md.


Shell safety

  • Run fixed openquok invocations; do not build commands by concatenating untrusted chat text into the shell.
  • Put captions and JSON payloads in quoted flags, heredocs, or files — not bare $USER_INPUT expansions.
  • Treat integration UUIDs, post IDs, and schedule times as opaque strings; reject values with shell metacharacters before use.

Workflow

StepAction
1Session opening (Rule 0): shell version/auth check, then one Openquok-bot greeting
2openquok integrations:groups when the workspace uses channel groups; then integrations:list (optionally --group ) → integrations:settings per channel
3integrations:trigger -d '{}' when output.tools requires it
4upload / upload-from-url for media; ask user for file or direct image URL if missing in chat
5posts:create / posts:status; agent drafts: -t draft + --note; TikTok inbox/private drafts: --note with finish-in-app checklist; update with posts:review-todo
6analytics:platform / analytics:post with -d 7 | 30 | 90
7Missing release id: posts:missingposts:connect --release-id

Connect new channels in the web app; the CLI only uses UUIDs from integrations:list.

Integration discovery

openquok integrations:list
openquok integrations:list --group 
openquok integrations:groups
openquok integrations:settings 
openquok integrations:trigger   -d '{}'

Use integrations:groups to list channel groups ({id, name}), then filter channels with integrations:list --group. Full flag reference: resources/command-reference.md.


Posting essentials

# Scheduled post
openquok posts:create -c "Caption" -s "2026-01-01T12:00:00Z" -i ""

# Draft + human checklist
openquok posts:create -c "…" -s "…" -t draft -i "" --note "Check CTA before schedule"

# Per-channel captions (multi integration)
openquok posts:create -s "…" -i "," \
  --bodiesByIntegrationId '{"":"Short","":"Long"}'

# Provider fields (confirm keys via integrations:settings)
openquok posts:create -c "…" -s "…" --settings '{"post_type":"post"}' -i ""

# Full API body
openquok posts:create --json ./examples/threads-text-only.json
  • Flag-based create requires -s (ISO-8601) unless --json includes scheduledAt.
  • --settings merges into providerSettingsByIntegrationId for each -i UUID; per-UUID maps use --providerSettingsByIntegrationId. See resources/provider-settings.md.
  • Repeated -c (+ optional -m, -d in milliseconds) can build follow-up segments — for Meta Threads/Instagram follow-ups prefer nested threads / instagram buckets in channel examples.

Command surface: resources/command-reference.md.


Plugs (internal and global)

OpenQuok automates post-publish engagement with two plug types (included on paid plans):

TypeWhat it doesCLI
Internal plugsSame-account delayed reply (Threads) or actions from other connected channels (comment, repost, reshare)Yes — set on posts:create via providerSettingsByIntegrationId
Global plugsChannel rules that trigger a reply/repost when likes hit a threshold (checks every 6h, up to 3 runs)Yes — plugs:catalog, plugs:list, plugs:upsert, plugs:activate, plugs:delete

Supported channels: Threads, X, LinkedIn, LinkedIn Page (not Facebook, Instagram, YouTube, or TikTok).

# Internal plug — cross-account Threads comment (see examples/)
openquok posts:create --json ./examples/threads-cross-account-plug.json

# Internal plug — same-account Threads delayed reply
openquok posts:create --json ./examples/threads-engagement-plug.json

# Global plug — auto-reply when likes reach threshold (channel-level rule)
openquok plugs:catalog
openquok plugs:upsert  --func autoPlugPost \
  --fields '[{"name":"likesAmount","value":"100"},{"name":"post","value":"Thanks for reading!"}]'

Full catalog, provider matrix, and global-plug web setup: resources/plugs.md. Setting keys: resources/provider-settings.md.


Channels (Meta)

Run integrations:settings for rules, maxLength, and tools. Match the user’s goal to the Agent tasks table in each channel file; publish keys and recipes are there.

Provider settings overview: resources/provider-settings.md.

ChannelidentifierUser intents (see file)Examples
Threadsthreadstext/media/carousel, reply chain, finisher, internal plugs, global plugs, missing postthreads-examples.md
Facebook Pagefacebooktext, link preview, photo, carousel, Reel, commentsfacebook-examples.md
Instagram Logininstagram-standalonefeed, carousel, Reel, Story, trial reel, commentsinstagram-standalone-examples.md
Instagram Pageinstagram-businesssame as standalone (Page-linked OAuth)instagram-business-examples.md
YouTubeyoutubeMP4 upload, title/privacy/tags/thumbnail, channel analyticsyoutube-examples.md
TikToktiktokdirect publish, inbox upload (UPLOAD), private SELF_ONLY drafts, privacy, toggles, analyticstiktok-examples.md
LinkedInlinkedinpersonal profile posts, images, video, text comments, internal plugslinkedin-examples.md
LinkedIn Pagelinkedin-pagePage picker, document carousel, internal + global plugs, Page + post analyticslinkedin-page-examples.md
Xxtext/media, thread replies, finisher, reply settings, internal + global plugs, analyticsx-examples.md
Dev.todevtomarkdown article, title/tags/cover/canonical/org/series, tags + organizations tools, analyticsdevto-examples.md

Threads publish failures: threads-publish.md.


More recipes

resources/patterns.md — multi-attachment posts, integrations:trigger, JSON campaigns, internal plugs, length checks, batching, retries.

resources/plugs.md — internal plugs (CLI) and global plugs (web app).


Pitfalls

SymptomFix
API 401 / auth errorsTwo-step device OAuth (auth:login --json --no-poll then auth:login:poll); or programmatic token (opo_); never fake device URLs
Device login OK in browser but CLI has no credentialsMessaging host ended auth:login --json before polling — use --no-poll + auth:login:poll, or auth:login --apiKey
Invalid or expired device codeRe-run auth:login --json --no-poll; use fresh verification_uri_complete (~30 min)
Wrong channelRe-fetch UUID from integrations:list
Media rejected at publishRule 2: upload first; for Threads see threads-publish.md
“Image” in chat, no fileStop; get file path or https:// URL for upload-from-url
Empty upload / Content-Length: 0Re-upload a non-empty asset
Unknown integrations:triggerMethod must appear in output.tools
--settings parse errorSingle-quoted JSON: '{"post_type":"post"}'
Thread timing wrong-d is milliseconds, not minutes
Unknown global plug funcRun plugs:catalog and use methodName (e.g. autoPlugPost, autoRepostPost)
Analytics rejected-d must be 7, 30, or 90
Env key ignoredauth:logout if disk credentials exist
Old CLI / wrong verify hostCompare openquok --version with the current release on the CLI package page; reinstall or upgrade the binary there — skill install does not update it

Related skills

Generate TikTok photo-carousel slideshows with a locked character (AI images + text overlays) and post via the openquok CLI. Use for any niche/channel persona — research, lock character, generate frames, overlay text, draft or schedule through openquok-core.

Operate Postqued social publishing from your agent via MCP, with a v2 REST fallback.

42 installs2 stars

Uploads and publishes files or static site folders to OkFile, with direct links, preview URLs, and multipart support. Use when the user asks to upload, publi...

3 installs

Turn OpenClaw into an autonomous social media manager for Fuxux. Schedule and publish to Twitter/X, Instagram, LinkedIn, Facebook, TikTok, YouTube, Bluesky, Threads, and Pinterest via REST API and MCP — media, drafts, queue, and publishing analytics.

Quo (OpenPhone) (quo.com). Use this skill for ANY Quo (OpenPhone) request — reading, creating, updating, and deleting data. Whenever a task involves Quo (Ope...

7 installs

Create, schedule, and publish social media posts across Instagram, TikTok, YouTube, X, LinkedIn, Facebook, Pinterest, Threads, and Bluesky via the Social0 CLI (preferred) or MCP. Covers account listing, media upload, drafts, instant publish, scheduling, and per-platform publish status.

2 installs