Source profileQuality 99/100Review permissions

Ratimon/openquok-monorepo/agent/skills/openquok-core/SKILL.md

openquok-core

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.

Source repository stars
38
Declared platforms
0
Static risk flags
1
Last source update
2026-08-26
Source checked
2026-08-26

Decision brief

What it does: where it fits

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

Best for

    Not for

    • Tasks that require unconfirmed production actions or broad system permissions.
    • Environments where the pinned source and install steps cannot be inspected.

    Compatibility matrix

    Platform support, with evidence labels

    PlatformStatusEvidenceWhat to check
    CodexNot declaredNo explicit evidencePortability before use
    Claude CodeNot declaredNo explicit evidencePortability before use
    CursorNot declaredNo explicit evidencePortability before use
    Gemini CLINot declaredNo explicit evidencePortability before use
    Open the compatibility checker

    Installation

    Inspect first. Install second.

    The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.

    Source-detected install commandSource
    npx skills add https://github.com/Ratimon/openquok-monorepo --skill "agent/skills/openquok-core"
    Safe inspection promptEditorial

    Inspect the Agent Skill "openquok-core" from https://github.com/Ratimon/openquok-monorepo/blob/13debb21f5649deb95d872f6d1bf53df619e9ecc/agent/skills/openquok-core/SKILL.md at commit 13debb21f5649deb95d872f6d1bf53df619e9ecc. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.

    Workflow

    What the source asks the agent to do

    1. 01

      Workflow

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

      Connect new channels in the web app; the CLI only uses UUIDs from integrations:list.Use integrations:groups to list channel groups ({id, name}), then filter channels with integrations:list --group. Full flag reference: resources/command-reference.md.
    2. 02

      Session opening (first turn after reset)

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

      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.
    3. 03

      ⚠️ 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.

      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.com1 — 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.
    4. 04

      Authentication

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

      Device OAuth on messaging hosts (required two-step):bash openquok auth:login --json --no-poll
    5. 05

      send verificationuricomplete to the user; wait until they confirm they authorized

      openquok auth:login:poll --device-code "" openquok auth:status bash openquok integrations:list openquok integrations:list --group openquok integrations:groups openquok integrations:settings openquok integrations:trigger -d '{}' bash

      openquok auth:login:poll --device-code "" openquok auth:status bash openquok integrations:list openquok integrations:list --group openquok integrations:groups openquok integrations:settings openquok integrations:trigger…

    Permission review

    Static risk signals and limitations

    Runs scripts

    medium · line 11

    The documentation asks the agent to run terminal commands or scripts.

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

    Evidence record

    Why each signal appears

    EvidenceSourceComputedTestedEditorial
    SignalValueEvidence typeMeaning
    Quality score99/100ComputedDocumentation, specificity, maintenance, and trust rules
    Repository stars38SourceRepository attention, not individual Skill quality
    Compatibility0 platformsSourceDeclared in the catalog source record
    Usage guideautomated source guideEditorialGenerated or reviewed according to the visible evidence level

    Pinned source

    Provenance and original SKILL.md

    Repository
    Ratimon/openquok-monorepo
    Skill path
    agent/skills/openquok-core/SKILL.md
    Commit
    13debb21f5649deb95d872f6d1bf53df619e9ecc
    License
    AGPL-3.0
    Collected
    2026-08-26
    Default branch
    main
    View the original SKILL.md

    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 "<uuid>" -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 <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 "<device_code from stdout>"
    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 <id>) → integrations:settings <uuid> per channel
    3integrations:trigger <uuid> <method> -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 <customer-group-id>
    openquok integrations:groups
    openquok integrations:settings <integration-uuid>
    openquok integrations:trigger <integration-uuid> <method-name> -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 "<uuid>"
    
    # Draft + human checklist
    openquok posts:create -c "…" -s "…" -t draft -i "<uuid>" --note "Check CTA before schedule"
    
    # Per-channel captions (multi integration)
    openquok posts:create -s "…" -i "<uuid-a>,<uuid-b>" \
      --bodiesByIntegrationId '{"<uuid-a>":"Short","<uuid-b>":"Long"}'
    
    # Provider fields (confirm keys via integrations:settings)
    openquok posts:create -c "…" -s "…" --settings '{"post_type":"post"}' -i "<uuid>"
    
    # 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 <integration-id> --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 <uuid> 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

    Frequently asked questions

    What to verify before installation and use

    What does the openquok-core source document cover?

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

    How do I install openquok-core?

    The source record exposes this install command: npx skills add https://github.com/Ratimon/openquok-monorepo --skill "agent/skills/openquok-core". Inspect the command and pinned source before running it.

    Which permission-related actions were detected?

    Static rules flagged exec-script in the source; the page lists the matching lines and excerpts.

    Alternatives

    Compare before choosing

    Computed 100139

    JasonColapietro/suede-creator-skills

    suede-ab-testing

    Suede-owned experimentation discipline for hypotheses, sample sizing, test duration, significance, and repeatable experiment programs. Use when comparing variants, deciding whether a result is reliable, or building an experiment backlog and cadence. NOT FOR: analytics instrumentation (use suede-analytics), post-click conversion diagnosis (use suede-site-alchemy), or writing the variant copy itself (use suede-copy).

    Computed 1008

    narrative-io/narrative-skills-marketplace

    design-analysis

    Translate a fuzzy analytical question into a rigorous investigation plan. Interrogates the ask, grounds the plan in the available data dictionary, applies analytical best practices, and produces a structured brief of query specifications for a downstream query-writing skill. Plans, does not write SQL. Use when: "why did X drop", "is there a relationship between A and B", "who are our highest-value customers", "what's driving the change in Y", "investigate this trend", "design an analysis for", "

    Computed 9834,478

    K-Dense-AI/scientific-agent-skills

    dask

    Distributed computing for larger-than-RAM pandas/NumPy workflows. Use when you need to scale existing pandas/NumPy code beyond memory or across clusters. Best for parallel file processing, distributed ML, integration with existing pandas code. For out-of-core analytics on single machine use vaex; for in-memory speed use polars.

    Computed 9815

    getcargohq/cargo-skills

    cargo-orchestration

    Make Cargo actually run something, or show what it would run — execute one connector action, run a multi-step workflow, trigger a batch across a whole segment or model, message an AI agent, build or edit a node graph, draw a workflow, tool or play as a diagram, and query the runtime tables (runs, batches, spans, records) with SQL. Triggers: "run this on all my contacts", "execute the action", "kick off a batch", "build a workflow", "schedule a play", "make it run every morning", "ask the agent",