AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified MIT Self-run

Zernio Social Posting

skill-fajrisilmi12-cyber-hermes-socmed-function-zernio-social-posting · by fajrisilmi12-cyber

Post to 16 social platforms via Zernio + Cloudinary CDN.

No reviews yet
0 installs
4 views
0.0% view→install

Install

$ agentstack add skill-fajrisilmi12-cyber-hermes-socmed-function-zernio-social-posting

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets Used
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-fajrisilmi12-cyber-hermes-socmed-function-zernio-social-posting)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
4d ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Zernio Social Posting? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Zernio + Cloudinary Social Media Posting

Post to 16 platforms via a single API: Zernio handles publishing, Cloudinary hosts + optimizes the media. Free tier covers 1-2 accounts on Zernio (no credit card) and 25 credits/month on Cloudinary.

When to use this skill

  • User wants to post an image/video to Instagram, Facebook, TikTok, X, etc.
  • User has a media URL and wants to publish to a social platform
  • User wants to schedule a post or cross-post to multiple platforms
  • User wants Story (24h ephemeral) or Reel (vertical video) support
  • User already has a Zernio account and an Instagram Business/Creator account

User preference: never auto-generate images

This user (Fajri) always supplies the source image themselves — usually via WhatsApp or Discord attachment. The pipeline is:

  1. User sends image + caption
  2. Save to /tmp/ (or wherever the platform's bridge drops it)
  3. Run post_to_ig.py /tmp/ ""
  4. Reply with the live IG URL

Do NOT generate images from a prompt for this user unless they explicitly ask. Pair with the image-gen-9router skill only when they request text-to-image. The default request "post this to IG" means "I have an image, please upload and post it" — not "make me an image and post it."

The full text-to-image-then-post flow (e.g. "research Linux, generate an infographic, post it") is a separate, opt-in workflow that combines this skill with image-gen-9router.

What this skill assumes

  • Zernio account at https://zernio.com/signup (no CC for first 1-2 accounts)
  • At least one social account connected via Zernio OAuth
  • Instagram account must be Business or Creator (Personal accounts cannot use Graph API)
  • Cloudinary account for media CDN (free tier: 25 credits/month)
  • Env vars in ~/.hermes/.env:
  • ZERNIO_API_KEY=sk_...
  • CLOUDINARY_CLOUD_NAME=...
  • CLOUDINARY_API_KEY=...
  • CLOUDINARY_API_SECRET=...
  • Optional: ZERNIO_IG_ACCOUNT_ID=... (default for single-account flow)

The pipeline

Local file or URL
  ↓
Cloudinary upload (auto resource_type=image|video)
  ↓
Build URL with slash-chained transforms (NEVER commas — see pitfall below)
  ↓
POST to Zernio /v1/posts with bearer auth
  ↓
Zernio publishes to social platform(s)
  ↓
Live URL returned

Slash-chained Cloudinary URLs (the working pattern)

Cloudinary transform syntax has two flavors. Zernio's URL parser only accepts the slash-chained form. See references/cloudinary-comma-bug.md for the full transcript of the failure.

Broken (commas mis-parsed as multi-URL separator):

https://res.cloudinary.com/X/image/upload/w_1080,h_1080,c_fill,q_auto,f_auto/v123/id.jpg
              ↑ Zernio reads "h_1080" as second URL → 400 Invalid media URL

Works (slash-chained, equivalent transform):

https://res.cloudinary.com/X/image/upload/w_1080/h_1080/c_fill/q_auto/f_auto/v123/id.jpg

For video:

https://res.cloudinary.com/X/video/upload/q_auto/v123/id.mp4

Zernio content types (Instagram)

| Type | Zernio field | Notes | |---|---|---| | Feed post | omit contentType | default; image, video, carousel | | Story | contentType: "story" | 24h ephemeral; captions not shown | | Reel | contentType: "reel" | vertical 9:16 video, ≤90s; auto-applied to single video without the field |

{
  "content": "caption with #hashtags",
  "mediaItems": [{"type": "image", "url": ""}],
  "platforms": [{
    "platform": "instagram",
    "accountId": "",
    "platformSpecificData": {"contentType": "story"}
  }],
  "publishNow": true
}

Available templates

  • templates/post_to_ig.py — full one-shot post: upload to Cloudinary, post via Zernio, wait for live URL, print result. Supports feed/story/reel. Auto-loads ~/.hermes/.env.
  • templates/cloudinary_helper.py — Cloudinary SDK wrapper: upload + slash-chained IG URL + usage stats. Auto-loads ~/.hermes/.env.

Usage

python3 templates/post_to_ig.py photo.jpg "caption #tags"
python3 templates/post_to_ig.py photo.jpg "caption" --content-type story
python3 templates/post_to_ig.py video.mp4 "caption" --content-type reel

Pitfalls

  • Never use commas in Cloudinary transform URLs when posting via Zernio. Always slash-chain. See references/cloudinary-comma-bug.md.
  • IG account must be Business or Creator. Personal accounts will fail at OAuth with no helpful error. Switch in IG app: Settings → Account type and tools → Switch to professional account.
  • Zernio 401 with Invalid API key usually means the bearer token is the wrong env var. zernio auth:set --key writes to ~/.config/zernio/auth.json; the Python script reads from ZERNIO_API_KEY env var (or auto-loads from ~/.hermes/.env).
  • IG token lasts 60 days; Zernio will ask for reconnect. Watch for token_expired errors.
  • n (count) field is provider-dependent. Some providers (gemini nano-banana, huggingface) ignore it.
  • Story captions are NOT shown on Instagram (Graph API limit, not Zernio).
  • Reel shareToFeed — default false. Set true in platformSpecificData to also appear in main feed.
  • First-call latency — Zernio returns status: publishing then polls to published. The Python template polls /v1/posts/{id} for up to 60s for live URL.

Reference docs

  • references/cloudinary-comma-bug.md — full transcript of the URL parser failure
  • references/env-loader-pattern.md — Python pattern for auto-loading ~/.hermes/.env

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.