01 / SOURCE
What arrived and where it came from
One card per delivery. A delivery is one long-form video cut into clips, so the source URL and the campaign belong to the whole batch — they are read once and every clip in it is named in one call. Fix either here; "Look it up" reads the URL again.
02 / TITLE & ESSENTIALS
What each clip is called and what it says
One Claude call per batch writes the title, the description and the hashtags for every clip at once — they are one editorial decision made from one context, and five clips off one video have to differentiate rather than repeat each other. The rules are three separate lists because what makes a good title has nothing to do with what makes a good tag.
The call
In: the source video's title, channel and description, the campaign, and per clip its burnt-in captions, the title Clipper burnt onto the video and why that moment was picked. Out: exactly the elements switched on on the Rules page, and nothing else — a title, its hashtags and a description, laid out as one line of title-then-tags with the description a blank line below.
How many hashtags is per account now (Rules page): the call writes the most any account asks for, strongest first, and each account takes its own count from the front.
03 / RULES
What gets written and how each account publishes
Two kinds of rule, and they live in two places on purpose. What the Claude call writes at all is Posty's own business and is set here. Everything about where and when — each account's posting hours, its best times of day, its pacing and every upload-post field it publishes under — belongs to that account, and is edited below and on the Hub's Channels page. It is the same setting either way; there is only one copy of it. Every hour is New York time.
What the naming call writes
Switching one off means it is not asked for at all — its rule list is not sent, it is not in the tool schema, and there is nothing to strip out afterwards. Cheaper than writing something and discarding it.
The hook line. At publishing, selected hashtags are appended to the visible platform title/caption field, not only to a separate description.
Written strongest-first, because each account takes only as many as it asks for (its own hashtags setting) from the front of the list. YouTube also receives those words in its separate tags field.
The keyword-carrying block a blank line below the title. This is the part search reads.
On: YouTube's 100-character title includes the strongest hashtags that fit; its description starts with the full title and tag line. Off: it receives the shared text. Both modes send the selected words in YouTube's separate tags field.
Characters. A ceiling, not a target.
How far ahead, and how late
The only two timing rules that belong to the queue rather than to an account.
Days ahead a clip may be placed. Nothing is booked beyond it.
Posty holds the calendar and fires each send itself, so a post only goes out while Posty is running. This is how many minutes late it may still be sent once its slot has passed. Inside it, an evening's outage just publishes late; past it the send is held with the reason on it rather than going out hours off its slot — or five at once after a long outage. A held send still goes out if you press Publish now. 0 turns the guard off entirely.
Every account's own rules
The same rows the Hub's Channels page edits, and the same stored values — HubApi owns them, both pages are windows onto it. When it posts is what the planner works each clip's time out from, per account, which is why one clip leaves for YouTube and TikTok at different moments. How it posts is upload-post's own fields for that account; a box left empty is a field this service does not send at all, which is not the same as sending the platform's default back to it.
04 / SCHEDULE
When it goes out and to which brand
Two decisions, and only one of them is Claude's. It picks the brand — which audience a clip was cut for. The times are arithmetic over each account's own rules and are worked out in code, per account, which is why one clip has several moments rather than one.
The call
In: every written clip with its title, hashtags and words, and every channel family with its category, tags, description and connected accounts. Out: one family per clip and a short line saying what the two share. No times and no platforms — every account of the chosen brand gets the clip, and the planner then places each one at the earliest moment that account's own posting hours, top upload times, pacing and daily cap allow.
Booked
One line per account a clip goes to, soonest first — the same clip appears once per account, at that account's own hour. Click one to see the clip and edit what goes out with it.
What happened
One line per thing Posty did.
05 / MANUAL MODE
Do it yourself for one post
Fully separate from the rest of Posty: a clip added here never touches the pipeline, never appears on the Source page, and is never named or placed by Claude. Drop a video in, write everything yourself, then send it.
Add a clip
Drop a vertical video here, or click to choose one.
What it says
Where and when
Rules for this post
Every one of these normally comes from the Rules page. Change one here and only this post disagrees — the rest keep following the page, including when you change it later.
Publish
"Save for later" books the slot above and leaves; Posty sends it when that time comes, the same way an automatically-placed post does. "Publish now" saves everything on this page first, then sends it immediately, whatever the time above says.
How it is going
This clip's own history, newest first. Refreshes on its own.
06 / DEVELOPMENT
Wired in or on its own
Every agent in this ecosystem carries this page. It holds the switches that decide whether Posty is part of the pipeline or a closed loop you can safely run anything through, and the one combined log for everything the automatic pass does - it lives here and nowhere else.
Log
Intake, naming and scheduling, in order, since this process started. Manual mode keeps its own history per clip instead - see "How it is going" on that page.
Sandbox
On: input/ is picked up on its own every minute - one whole batch at a time, never
a clip before the rest of its batch has finished arriving - and from there Posty runs itself all
the way through: named (Claude), placed on the calendar (Claude), and sent at its own minute the
moment "Publish for real" below is also on. Nothing here needs a button pressed. Off: the folder
is left alone and nothing moves unless you press Run now.
On: a post is sent at the minute it was placed on. Off: nothing leaves — the post simply stays scheduled here. Off is the default: the switch that reaches an audience is the one you turn on deliberately, and turning it on sends whatever is already due with nothing to unwind.
Posty holds the clock, so a booked post needs this service to be running at its own minute. That is the price of being able to change a post's time, title, hashtags and accounts from the Hub right up until it fires — see the catch-up window on the Rules page for what happens to a slot that was missed.
Public address
HubApi — never upload-post directly — downloads each clip from here and streams
the bytes into the upload. upload-post never sees this address at all. POSTY_PUBLIC_URL in
AFBITE/.env is the address it uses to reach this computer's archive/
folder. http://127.0.0.1:8200 is enough, since HubApi runs on this same machine —
a public address (Tailscale Funnel or similar) only matters once it doesn't.
Where things are
input/
What other agents drop off: one folder per run, one batch.json plus three files per clip sharing a stem.
archive/
Where a registered clip lives afterwards, and what /media/… serves — including the previews on the Source page.
posty.db
Batches, posts and the event log.
HubApi :8100
The account register, and the only way out to a platform.