How it works
Four layers do the work: commands you type, workers that run in parallel, rulebooks they share, and a server that has the final say. Knowing the shape of it makes the plugin predictable: and explains why a bad post cannot get out, however confident the assistant is.
The four layers
commands/ what you type : one job each, owns the question it asks you
|
agents/ parallel workers : fresh memory each, hand back findings only
|
skills/ shared rulebooks : imported by many commands, one source of truth
|
the server plgn itself : checks, storage, and who is allowed to see what| Layer | What it is | Why it exists |
|---|---|---|
| Commands | The twenty-seven things you can type. Each one owns a single job and the confirmation it asks you for. | So that one job has one place to go wrong, and one place to fix. |
| Agents | Twelve workers with one task each: read a site, write posts for one topic, decide what a picture is about, write alt text for a picture. | So several can run at the same time, and so each starts with a clean head rather than the whole conversation. |
| Skills | Thirteen written rulebooks: platform limits, brand voice, how often to post, how plgn talks to you. | So a rule lives in exactly one file. Commands cannot drift apart as the plugin grows. |
| The server | plgn's own service: it checks every post, stores everything, and keeps each workspace separate. | So the rules are enforced somewhere the assistant cannot argue with. |
The loop everything follows
- ReadThe command checks the connection, then reads your brand in one go: the record, the voice and audience, what you sell, and any campaign running now, always in that order.
- PlanIt works out what it is about to do and shows you: which topics, how many posts, how many pictures, what they cost, which dates. Then it stops.
- AskOne clear question, one clear answer. Nothing has been written yet.
--dry-runends the run here. - WriteWorkers run at the same time, one per topic. Each is given everything it needs inside its own instructions.
- CheckEvery post is checked by the server as it is saved. Anything that fails comes back with a reason.
- ReportCounts first, then the exceptions by name. You are told what needs your eye and what does not.
Every command that writes follows this shape. It is why running an unfamiliar command is safe: you always see a plan before anything changes, and --dry-run always stops at step three.
The checks, and why they are on the server
Character limits and your banned words are checked by plgn's server, not by the assistant. A post cannot be scheduled or published while a check fails, whatever the assistant thinks of it.
What happens when a check refuses a post
- It reads the reasonThe refusal names what failed: too long, or a banned word.
- It fixes that one thingToo long means tightening the writing, cutting qualifiers and repeated points first. Never cutting a sentence off mid-way, and never dropping the closing ask, which is the reason the post exists.
- It tries once moreOnce. Not three times.
- Then it hands it to youIf it fails again the post stays a draft and appears in the report by name, with the reason in a normal sentence.
One retry, not five, for a specific reason: being too long is arithmetic and one honest pass fixes it, but a banned word is editorial. If the first replacement does not work, the post's point disagrees with what the brand stands for, and that is a decision for a person. Repeated attempts also make writing worse, each pass strips out more voice to satisfy a rule.
Refusals that are instructions
Not every refusal is a problem. Five of them are the server telling the plugin what to do instead, and you will usually never see them at all.
| The refusal means | What happens next |
|---|---|
| This needs your approval first | You are shown the text and asked. It is saved only after you say yes. |
| This brand already has one of these | The existing entry is updated instead of a second one being added. A brand with two voices has no voice. |
| That belongs in what you sell, not in general knowledge | It is saved as an offering, with its benefits, so a writer can name it. |
| A publishing time needs a timezone | You are asked which one. It is saved on the brand, then the post is scheduled. |
| You have reached a limit | You are told what is full and what raising it costs. Nothing is dropped in silence. |
Why a month takes minutes
A month is not written one post at a time. One writer is started per topic, all at once, so three topics are written in roughly the time one would take.
Pictures work the same way. All of them are started first, then checked on. Making them one at a time, make, wait, make, wait, turns a ninety-second worst case into half an hour.
What a worker can and cannot see
Each worker starts with a clean memory. It cannot see your conversation, the rulebooks, or what the other workers are doing. Everything it needs, the voice, the banned words, the character limits, the campaign's message, is written into its own instructions by the command that started it.
- This is why the plugin passes rules around rather than pointing at them: a worker told to "follow the platform rules" would have nothing to read.
- Workers never save anything. They hand back what they wrote, and the command does every write. That keeps one place responsible for what reaches your workspace.
- A worker that finds a topic thin returns fewer posts and says so, rather than padding to hit a number.
How your brand is read
Any command that writes in your voice makes one read of your brand rather than assembling it from pieces. That read always comes back in the same order, and the order is the priority.
1 the brand record name, languages, banned words, timezone 2 Foundation who you are, how you sound, who you talk to, how you look 3 Business what you sell, your proof, objections, competitors 4 Creative references and posts worth imitating
The read is also shaped by who is asking. A copywriter is given the voice and the benefits; an art director is given the colours and the picture rules. Each gets what it needs and not the rest, which keeps a writer from drowning in a palette and an art director from being handed a tone guide.
One more thing comes from that read and is easy to miss: your languages. They belong to the brand, not to the conversation. Someone who writes to plgn in English may publish only in Arabic, and the posts follow the brand.
The rules every command follows
- Reply in the language you wrote in. Arabic in, Arabic out. Command names, brand names and platform names stay as they are.
- Check the connection before doing anything, and say nothing when it passes. A check that succeeds is silent.
- Show the plan and wait for a clear yes before creating, changing, scheduling or removing anything.
- Confirm anything that removes something by name, never by number.
- State the point cost inside the question, before spending.
- Say what was assumed, in one line, so you can correct it.
- Never ask you to type, paste or store a key, a token or a password.
- Never print an internal name, an error code or a tool name at you.
- Lead with the thing you asked for, and put the process behind it.
- Never stop halfway in silence. If a run breaks, say exactly what is in the workspace now.
What it will not do
| It never | Because |
|---|---|
| Publishes anything by itself | plgn schedules; a person approves. Nothing leaves without your action. |
| Deletes a post to clear a problem | A blocked draft still holds a usable idea. Deleting happens only when you ask, confirmed by name. |
| Pads a month to hit a number | A filler post reaches real followers and teaches them your posts are worth skipping. The cost is paid on the next post. |
| Invents a voice or a look with no source | Everything downstream would obey the invention. It says the profile cannot be filled responsibly and stops. |
| Averages two conflicting identities | The result belongs to nobody, and every image afterwards is slightly wrong in a way nobody can name. It shows you both and asks. |
| Claims a post performed well | plgn cannot see likes, reach or clicks, those live on the platforms. It says so rather than implying it knows. |
| Overwrites an original when refreshing it | The original is your record of what was said when. A refresh is saved as a new post. |