postkitty by Mert Kaya is a plugin for Hermes Agent. It is for anyone who posts the same thing to several platforms and does not want to rewrite, resize, trim and recount it by hand. You give Hermes a draft, some photos and a landscape video, or only the draft. You get back your text fixed and rewritten for each platform, upload-ready files, advice on where to post, and a review board that shows every file before you upload it.
postkitty is free and open source under the MIT license.
One of the best free and open source plugins for Hermes Agent on automatic multi social media content editing.
Say this to your Hermes
Two messages. The first installs the plugin. The second goes in a new chat, because Hermes loads a plugin's tools when the next chat starts.
Install the postkitty plugin for me: run `hermes plugins install mertkayacs/postkitty --yes-deps --enable` in the terminal. When it finishes, tell me to open a new chat so its tools load.
Use postkitty to turn this into posts for X, LinkedIn and Instagram and fix my wording: [your draft, or the path to a photo or video]
What you can ask Hermes
Say what you have and what you want, in plain words. Each of these is a message you can paste.
- A draft for several platforms. "Fix my wording and write this for X, LinkedIn and Threads: [your draft]"
- A thread from a long post. "This is too long for one X post. Turn it into a thread."
- A group photo. "Make team.jpg ready for Instagram and Bluesky, and keep everyone in the picture."
- A landscape video. "Turn talk.mp4 into vertical clips for TikTok, Reels and Shorts."
- Two people on camera. "Put both hosts in a split screen", "Cut to whoever is talking" or "Keep the whole wide shot."
- A trim or a cover frame. "Use only 0:12 to 0:48 of the clip, and take the cover frame at 0:20."
- A file from somewhere else. "Will this file upload to TikTok? [path to the file]"
- A change after the first result. "Shorter for X", "More formal on LinkedIn", "Other hashtags for Instagram" or "Focus on the person on the left in the TikTok clip."
postkitty never posts, uploads or schedules anything. You upload the files in ready/ yourself.
Your draft, fixed for every platform
Paste a rough draft. postkitty fixes the spelling, grammar and punctuation, smooths out clumsy sentences and keeps your voice. Then it writes a version for each platform and counts it the way that platform does, so nothing gets cut off. This is one real run.
Your draft
new episode of two builders is out!! maya and sam talks about how we shiped our app in one weekend, what we cut what broke at 2am and why the launch posts took longer then the code lol. its honestly the most usefull episode we did so far for anyone building on there own
X · 245 of 280 weighted characters
New episode of Two Builders is out. Maya and Sam talk about how we shipped our app in one weekend: what we cut, what broke at 2am, and why the launch posts took longer than the code. Our most useful episode so far if you're building on your own.
Bluesky · 221 of 300 graphemes
New Two Builders episode is out. Maya and Sam on shipping our app in one weekend: what we cut, what broke at 2am, and why the launch posts took longer than the code. Our most useful one yet if you're building on your own.
LinkedIn · 319 of 3,000 characters
New episode of Two Builders is out.
Maya and Sam talk about how we shipped our app in one weekend: what we cut, what broke at 2am, and why the launch posts took longer than the code.
It's honestly the most useful episode we've done so far, especially if you're building on your own.
#BuildInPublic #Startups #Podcast
Threads and Instagram got their own versions in the same run.
Ask for a change
Ask in plain words. This was the next message in the same session:
Make the LinkedIn post more formal, and turn the X post into a thread of two posts.
X thread, post 1 · 98 of 280 weighted characters
New episode of Two Builders is out. Maya and Sam talk about how we shipped our app in one weekend.
X thread, post 2 · 146 of 280 weighted characters
What we cut, what broke at 2am, and why the launch posts took longer than the code. Our most useful episode so far if you're building on your own.
LinkedIn, more formal · 337 of 3,000 characters
We have released a new episode of Two Builders.
Maya and Sam discuss how we shipped our app in one weekend: what we cut, what broke at 2am, and why the launch posts took longer to produce than the code.
It is the most useful episode we have made so far, particularly for anyone building on their own.
#BuildInPublic #Startups #Podcast
You can also ask for a shorter or longer version, another hook or tone, or other hashtags. Every new version is counted again before it goes into ready/.
Turkish draft
two builders'ın yeni bölümü çıktı!! maya ve sam uygulamamızı bir hafta sonunda nasıl yayınladığımızı anlatıyo, neleri kestik gece 2de ne bozuldu ve lansman paylaşımları neden koddan uzun sürdü. kendi başına bir şey geliştiren herkez için şimdiye kadarki en faydalı bölüm bence
X · 270 of 280 weighted characters
Two Builders'ın yeni bölümü çıktı! Maya ve Sam, uygulamamızı bir hafta sonunda nasıl yayınladığımızı anlatıyor: neleri kestik, gece 2'de ne bozuldu, lansman paylaşımları neden koddan uzun sürdü. Kendi başına geliştiren herkes için şimdiye kadarki en faydalı bölüm bence.
German draft
neue folge von two builders ist drausen!! maya und sam erzählen wie wir unsere app an einem wochenende gelauncht haben, was wir gestrichen haben was um 2 uhr nachts kaputt ging und warum die launch posts länger gedauert haben als der code. ehrlich die nützlichste folge bis jetzt für alle die alleine was bauen
X · 235 of 280 weighted characters
Neue Folge von Two Builders ist da. Maya und Sam erzählen, wie wir unsere App an einem Wochenende gelauncht haben: was wir gestrichen haben, was um 2 Uhr nachts kaputt ging und warum die Launch-Posts länger gedauert haben als der Code.
The copy comes from the model your Hermes uses. These runs used Claude Sonnet 5.5, and postkitty counted and checked every version.
What it does
Each platform has its own sizes, length limits and way of counting characters. postkitty handles all of that on your machine, with no API keys, and nothing is uploaded.
- Text. Fixes spelling, grammar and clumsy sentences, then writes a version for each platform. Each one is counted with that platform's own rule, such as weighted characters on X, graphemes on Bluesky and UTF-16 units on TikTok. Long posts can become threads.
- Photos. Every crop is planned around the faces the YuNet detector finds. A wide group photo gets a blurred band so nobody is cut off. Location and camera metadata are removed.
- Video. A landscape clip becomes a vertical video that follows the person talking. When two people talk, you choose: a split screen (the default), a cut to whoever is speaking, or the whole wide shot. Each clip is trimmed to the platform's length and gets a cover frame.
- Checks. Every file is checked against the platform's published limits. Failures are repaired, and only passing files go into
ready/. - Advice. Hermes ranks the platforms for your post and saves the topic, audience and tips in
advice.md. - One board to review.
board.htmlshows every file in a frame of its real shape, with its copy, alt text and checks. Ask for a change and Hermes makes only that file again. - Private by default. postkitty reads only the files you name and writes only inside its job folder and its own data folder. It sends no telemetry.
A quick tour
Ask in plain words
Name the platforms and your files and paste the draft. Hermes calls the postkitty tools and replies with the platforms ranked for your post.
Every face stays in frame
A center crop of this team photo cuts off the two people at the edges. The postkitty feed image keeps all five.
See where it fits
The board opens with the audience and tone of your post, the platforms ranked for it, and tips.
Platforms
| Platform | Files | Copy limit |
|---|---|---|
| Instagram | Reel and Story 1080×1920, feed photo 1080×1350 | 2,200 characters, 5 hashtags |
| TikTok | Video 1080×1920 | 2,200 UTF-16 units |
| YouTube Shorts | Short 1080×1920 | Title up to 100 characters |
| X | Video 1920×1080, image 1600×900 | 280 weighted characters |
| LinkedIn | Video 1080×1350, image 1080×1080 | 3,000 characters |
| Threads | Video 1080×1920, image 1080×1350 | 500 characters |
| Bluesky | Video 1080×1920, image 1080×1350 | 300 graphemes |
| Facebook | Reel 1080×1920, feed photo 1080×1350 | 63,206 characters |
Every limit in data/platforms.yaml links to the page it came from and the date it was checked, last in November 2026.
Quick start
Install the plugin and turn it on:
hermes plugins install mertkayacs/postkitty --yes-deps --enable
Or let Hermes install it with the two messages in Say this to your Hermes.
Then open a new chat (the plugin's tools load when the next chat starts) and talk to Hermes:
Make this post ready for Instagram, TikTok, YouTube Shorts and LinkedIn.
clip.mp4 is the video, team.jpg is our team.
My draft: New episode is out...
Text alone works too: paste a draft and name the platforms.
postkitty needs Hermes Agent 0.22.7 or newer and ffmpeg with ffprobe on your PATH. Type /postkitty in a Hermes chat for a short description, example requests and every target with its size and main limits, or /postkitty tiktok for one platform.
Launch video
FAQ
postkitty reads only the files you name and writes only inside its job folder and its own data folder. It sends no telemetry. The one download is the YuNet face detector, fetched once from the OpenCV Zoo and verified before use. The copy and advice come from the model your Hermes is set up with.
Hermes calls five tools, in this order.
| Tool | What it does |
| --- | --- |
| postkitty_scan | Reads your photos, videos and draft, and plans a framing for each platform. |
| postkitty_copy | Stores the advice and the drafts, and checks each draft with its platform's counting rule. |
| postkitty_make | Renders every file, checks it, repairs failures and writes the review board. |
| postkitty_redo | Re-renders one platform with a different focus, layout, trim or cover frame. |
| postkitty_check | Checks any file against one platform, including files postkitty did not make. |
Set these on the plugin's settings page in Hermes, or under plugins.entries.postkitty.settings in config.yaml.
| Key | Default | Meaning |
| --- | --- | --- |
| output_dir | empty | Where job folders go. Empty means ./postkitty in the session's working folder. |
| default_platforms | empty | Platforms to make when you name none. Empty means every platform that fits the input. |
| loudness_lufs | -14 | Loudness target for video audio. |
Yes. postkitty_check checks any photo or video against one platform's limits, wherever the file came from.
OpenCV and the YuNet face detector, FFmpeg, Pillow and NumPy, with the counting rules of twitter-text and the AT Protocol lexicons. Seam carving can use caire by Endre Simo. The people in the demo photos are AI-generated.
Development
python -m pytest -q
ruff check .
The tests use synthetic clips and a stand-in face detector. GitHub Actions runs them on Python 3.11 and 3.12.
If postkitty is useful to you, a ⭐ helps other people find it.
License
MIT. postkitty is built by Mert Kaya (@mertkayaai on X, @mertkayacs on GitHub) at Eschatia Labs, an independent, non-profit open-source AI research lab. Photos behind the screenshots are credited in docs/assets/readme/CREDITS.md.
README from the reviewed commit 490d8f9; it updates when the author re-pins.

mertkayacs