Skip to content
Back to skills

Trial Post

ASecurity

Posts finished, QA-passed reels as Instagram Trial Reels (shown to non-followers first, graduation stays a human tap) plus public TikToks through the Zernio MCP connector, with the safety rails that stop the classic mistakes: IG trials only via call_tool posts_create_post with trialParams (the simple posts_create tool publishes a normal FEED reel), trial proof checked in every response, spacing and daily caps, a duplicate-file guard, the right CTA ending per platform, the platform AI flag on ...

  • 15 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added November 7, 2026
documentationpythongorailsapiperformance

Works with

  • claude code
  • api
  • mcp

Security analysis

A100/100

Pro scans all 7 files and shows the line behind each finding

Scanned November 7, 2026

npx -y skills add jsath/claude-skills --skill trial-post --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Trial Post?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Trial Post
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/jsath-trial-post/badge)](https://www.skillsdirectory.com/skills/jsath-trial-post)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: trial-post
description: "Posts finished, QA-passed reels as Instagram Trial Reels (shown to non-followers first, graduation stays a human tap) plus public TikToks through the Zernio MCP connector, with the safety rails that stop the classic mistakes: IG trials only via call_tool posts_create_post with trialParams (the simple posts_create tool publishes a normal FEED reel), trial proof checked in every response, spacing and daily caps, a duplicate-file guard, the right CTA ending per platform, the platform AI flag on avatar footage, and a STOP file on anything unexpected. Includes a scheduler adapter for other tools (Metricool, Buffer, Later, or any other scheduler). Use for 'post the trials', 'post this as a trial reel', 'send it to TikTok', 'schedule the reels'."
author: Johann (@johannships)
version: 1.0.0
---

# Trial post: Instagram Trial Reels + TikTok via Zernio

Step 5 of the pipeline: idea -> script -> record -> "the card is in" -> `edit-style` -> **trial-post** -> `reel-scorecard`.

Why trials: a Trial Reel is shown to people who do not follow you. Every hook gets tested on strangers first; only
winners are shared to your main feed (you tap "Share to everyone" in the Instagram app, there is no API for it).
Three hooks per idea = three trial reels = the scorecard tells you which hook wins.

## Requirements

- Claude Code with the Zernio MCP connector: `claude mcp add --transport http -s user zernio https://mcp.zernio.com/mcp`
  (sign in when asked). Instagram must be a professional account connected in Zernio; TikTok connected too.
- The connector has full access to every connected account (posting, DMs, comments, deletes). The rules below are
  the only guard: keep them, and never let a skill send DMs, comments, edits or deletes.
- `cp config.example.json config.json`, then fill `accounts` from Zernio `accounts_list` (one id per platform),
  your `timezone`, spacing and daily caps. Start low (3 to 5 a day per platform) and ramp.

## Before any post (per reel)

1. The edit passed every `edit-style` gate, including face-first, dead-air and join-envelope, on BOTH files:
   `final.mp4` (Instagram, comment-KEYWORD ending) and `final-bio.mp4` (TikTok, "link in my bio" ending).
2. Captions from `reel-captions` passed the checker. The Instagram caption carries the keyword CTA; the TikTok
   caption never says "comment" and does carry your bio line.
3. Every claim in the video was checked live today. A false or outdated line is cut, not posted.
4. Never an identical clone of something already posted. A new hook, a new edit, a genuinely different video.
   No fingerprint-evasion tricks (mirror flips of posted footage, speed or pitch nudges, noise): they read as spam
   and get accounts restricted.

## Post (one platform at a time)

1. **Upload.** `mcp__zernio__call_tool` name `media_get_media_presigned_url`, arguments
   `{"filename": "<short>.mp4", "content_type": "video/mp4", "size": <bytes>}`. Save the result. PUT the file to
   `uploadUrl` with `curl -X PUT -H "Content-Type: video/mp4" --data-binary @final.mp4 "<uploadUrl>"` (no auth
   header), then download `publicUrl` and compare sha256 with the local file. Mismatch = upload again.
2. **Build.** `python3 scripts/build_post.py --platform instagram --idea R6 --hook A --video final.mp4 --media-url <publicUrl> --caption CAPTION-IG.txt --now`
   (`--at 2026-11-02T18:05:00` for a slot, `--ai` for avatar or AI-generated footage). It refuses on a STOP file,
   a duplicate file, a spacing gap, a used-up cap, or a caption that breaks the rules, and prints the arguments.
3. **Call.** `mcp__zernio__call_tool` name `posts_create_post` with EXACTLY the printed arguments. Save the response.
4. **Verify.** `python3 scripts/verify_post.py --plan <plan> --response response.txt`. Exit 0 = recorded (Instagram:
   trial confirmed). Exit 4 = still publishing: wait a minute, `posts_get`, verify again. Exit 3 = STOP.
5. Repeat for TikTok with `final-bio.mp4` and the TikTok caption.

## THE TRAP (read twice)

| tool | what it does on Instagram | use it? |
|---|---|---|
| `call_tool` `posts_create_post` with `platformSpecificData.trialParams.graduationStrategy: "MANUAL"` | Trial Reel, non-followers, you graduate it | YES, the only way |
| `posts_create` (the simple tool) | no platformSpecificData: a NORMAL FEED reel to all followers | NEVER |
| `posts_publish_now`, `posts_cross_post`, `posts_bulk_upload_posts` | no trial params | NEVER for trials |
| `validate_post` | accepts a bogus trialParams value | not proof of anything |

`dry_run` exists for TikTok only; an Instagram dry run is rejected. So the proof of a trial is the create response:
the instagram target must show `trialParams.graduationStrategy: "MANUAL"` (and `isTrialReel: true` once listed).
Payload shapes and response examples: `references/zernio.md`.

## Stop rules (any one: stop the batch, tell the creator the same minute)

- An Instagram response without MANUAL trial proof, or with `SS_PERFORMANCE` (auto graduation).
- A failed status, no post id, or a create error.
- A trial-cap error ("maximum number of trial reels"), a TikTok `spam_risk` error, any account-status or
  recommendation-eligibility notice.
- A post still scheduled or publishing 30 minutes after its slot (over-cap posts can be held silently).

`verify_post.py` writes `$HOME/.trial-post/STOP` on the first three; `build_post.py` refuses until a human has looked
in the app and deleted the file. Never "fix" a post with an edit, delete or retry call.

## Never

X or LinkedIn from this skill, DMs, comments, deletes, edits, unpublishing, paid-partnership flags, collaborator tags,
a sponsor label burned into the video (disclosure goes in the caption), or posting to an account not in config.json.

## Other schedulers (adapter)

Not on Zernio, or also scheduling the main feed elsewhere? `references/scheduler-adapter.md` lists what any
scheduler must support (trial reels or not, the AI flag, per-platform captions, future-dated only) and a worked
example for Metricool. Fill the adapter section for your tool; keep every rule above.

## After posting

Hand the ledger (`$HOME/.trial-post/ledger.jsonl`) to `reel-scorecard` at 72 h. Graduation stays the creator's tap.

Files in this skill

  • SKILL.md6.1 KB
  • config.example.json445 B
  • references/scheduler-adapter.md1.8 KB
  • references/zernio.md3.1 KB
  • scripts/build_post.py5.7 KB
  • scripts/tp_common.py1.9 KB
  • scripts/verify_post.py3.5 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.