postemi 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/PROVIDER_SETTINGS.md +183 -7
- package/README.md +87 -9
- package/SKILL.md +83 -30
- package/dist/index.js +435 -332
- package/dist/index.js.map +1 -1
- package/package.json +23 -7
- package/skills/postemi/SKILL.md +1121 -0
- package/skills/postemi-growth/SKILL.md +221 -0
- package/skills/postemi-growth/reference/30-angles.md +74 -0
- package/skills/postemi-growth/reference/review.md +63 -0
- package/skills/postemi-templates/SKILL.md +107 -0
- package/skills/postemi-templates/reference/engagement.md +155 -0
- package/skills/postemi-templates/reference/everyday.md +132 -0
- package/skills/postemi-templates/reference/hook-contrarian.md +227 -0
- package/skills/postemi-templates/reference/hook-growth.md +210 -0
- package/skills/postemi-templates/reference/hook-how-to.md +266 -0
- package/skills/postemi-templates/reference/hook-learning.md +296 -0
- package/skills/postemi-templates/reference/hook-lists.md +195 -0
- package/skills/postemi-templates/reference/hook-stories.md +282 -0
- package/skills/postemi-templates/reference/hook-talk.md +199 -0
- package/skills/postemi-templates/reference/index.md +251 -0
- package/skills/postemi-templates/reference/launch.md +145 -0
- package/skills/postemi-templates/reference/linkedin.md +449 -0
- package/skills/postemi-templates/reference/x.md +139 -0
- package/skills/postemi-writing/SKILL.md +310 -0
- package/skills/postemi-writing/reference/headline-patterns.md +109 -0
- package/skills/postemi-writing/reference/networks.md +113 -0
package/PROVIDER_SETTINGS.md
CHANGED
|
@@ -3,15 +3,16 @@
|
|
|
3
3
|
Every channel Postemi supports, and every field its `--settings` payload accepts.
|
|
4
4
|
|
|
5
5
|
**The channels below are the whole list.** Postemi's server carries inherited
|
|
6
|
-
code for many other providers
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
code for many other providers: Reddit, Medium, Hashnode, Lemmy, Nostr, VK,
|
|
7
|
+
Dribbble, Farcaster and others. None of them are enabled or supported. Do not
|
|
8
|
+
build a settings payload for one.
|
|
9
9
|
|
|
10
10
|
| Channel | `__type` | Has settings? | Status |
|
|
11
11
|
|---|---|---|---|
|
|
12
12
|
| X (Twitter) | `x` | yes | Publishing verified |
|
|
13
13
|
| Facebook | `facebook` | yes, all optional | Publishing verified |
|
|
14
14
|
| Instagram | `instagram` | yes | Publishing verified |
|
|
15
|
+
| Instagram (no Facebook Page) | `instagram-standalone` | yes, same as Instagram | Live |
|
|
15
16
|
| Threads | `threads` | **no** | Publishing verified |
|
|
16
17
|
| Bluesky | `bluesky` | **no** | Publishing verified |
|
|
17
18
|
| LinkedIn | `linkedin` | yes, all optional | Publishing verified |
|
|
@@ -20,7 +21,18 @@ None of them are enabled or supported. Do not build a settings payload for one.
|
|
|
20
21
|
| Slack | `slack` | yes, `channel` required | Publishing verified |
|
|
21
22
|
| YouTube | `youtube` | yes | Publishing verified |
|
|
22
23
|
| TikTok | `tiktok` | yes | Publishing verified |
|
|
23
|
-
| Pinterest | `pinterest` | yes, `board` required |
|
|
24
|
+
| Pinterest | `pinterest` | yes, `board` required | Coming soon: cannot be connected until Pinterest approves Postemi's app |
|
|
25
|
+
| Mastodon (mastodon.social) | `mastodon` | **no** | BETA |
|
|
26
|
+
| Mastodon (any other server) | `mastodon-custom` | **no** | BETA |
|
|
27
|
+
| Pixelfed | `pixelfed` | **no** | BETA |
|
|
28
|
+
| WordPress | `wordpress` | yes, `title` and `type` required | BETA |
|
|
29
|
+
| Tumblr | `tumblr` | yes, all optional | BETA |
|
|
30
|
+
| Dev.to | `devto` | yes, `title` required | BETA |
|
|
31
|
+
| Ghost | `ghost` | yes, `title` required | BETA |
|
|
32
|
+
| Google Chat | `google-chat` | **no** | BETA |
|
|
33
|
+
| Microsoft Teams | `microsoft-teams` | **no** | BETA |
|
|
34
|
+
| Google Business Profile | `gmb` | yes, all optional | Coming soon, not schedulable yet |
|
|
35
|
+
| LinkedIn Pages | `linkedin-page` | yes, same as LinkedIn | Coming soon, not schedulable yet |
|
|
24
36
|
|
|
25
37
|
Source of truth for everything on this page:
|
|
26
38
|
`libraries/nestjs-libraries/src/dtos/posts/providers-settings/*.ts` in the Postemi
|
|
@@ -314,8 +326,8 @@ postemi posts:create -c "Release notes are out" -s "2026-12-31T12:00:00Z" \
|
|
|
314
326
|
|
|
315
327
|
## Pinterest — `pinterest`
|
|
316
328
|
|
|
317
|
-
**
|
|
318
|
-
|
|
329
|
+
**Coming soon.** Postemi customers cannot connect Pinterest until Pinterest
|
|
330
|
+
approves Postemi's app. The settings below apply once it opens.
|
|
319
331
|
|
|
320
332
|
| Field | Values |
|
|
321
333
|
|---|---|
|
|
@@ -337,6 +349,169 @@ postemi posts:create -c "Autumn recipes" -m "$IMG" -s "2026-12-31T12:00:00Z" \
|
|
|
337
349
|
|
|
338
350
|
---
|
|
339
351
|
|
|
352
|
+
## Instagram without a Facebook Page: `instagram-standalone`
|
|
353
|
+
|
|
354
|
+
The same settings as `instagram` (`post_type` required, the rest optional).
|
|
355
|
+
The `audioSearch` tool is not available on this channel: it exists only on
|
|
356
|
+
`instagram`.
|
|
357
|
+
|
|
358
|
+
```bash
|
|
359
|
+
IMG=$(postemi upload photo.jpg | jq -r '.path')
|
|
360
|
+
postemi posts:create -c "New menu" -s "2026-12-31T12:00:00Z" \
|
|
361
|
+
--settings '{"post_type":"post"}' -m "$IMG" -i "$IGS_ID"
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
---
|
|
365
|
+
|
|
366
|
+
## Mastodon: `mastodon` and `mastodon-custom`
|
|
367
|
+
|
|
368
|
+
**No settings.** Same as Threads. `mastodon` is an account on mastodon.social;
|
|
369
|
+
`mastodon-custom` is an account on any other Mastodon server, chosen when the
|
|
370
|
+
user connects it. A post is at most 500 characters on mastodon.social (other
|
|
371
|
+
servers can set their own limit).
|
|
372
|
+
|
|
373
|
+
```bash
|
|
374
|
+
postemi posts:create -c "Post text" -s "2026-12-31T12:00:00Z" -i "$MASTODON_ID"
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
---
|
|
378
|
+
|
|
379
|
+
## Pixelfed: `pixelfed`
|
|
380
|
+
|
|
381
|
+
**No settings.** Pixelfed is a photo network on any server, chosen when the
|
|
382
|
+
user connects it. Every post needs at least one picture and takes at most 4
|
|
383
|
+
(JPEG, PNG or GIF; no video). The caption is at most 500 characters.
|
|
384
|
+
|
|
385
|
+
```bash
|
|
386
|
+
IMG=$(postemi upload photo.jpg | jq -r '.path')
|
|
387
|
+
postemi posts:create -c "Morning light" -s "2026-12-31T12:00:00Z" -m "$IMG" -i "$PIXELFED_ID"
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
---
|
|
391
|
+
|
|
392
|
+
## WordPress: `wordpress`
|
|
393
|
+
|
|
394
|
+
The post's `-c` content becomes the article body (HTML).
|
|
395
|
+
|
|
396
|
+
| Field | Required | Values |
|
|
397
|
+
|---|---|---|
|
|
398
|
+
| `title` | **yes** | at least 2 characters |
|
|
399
|
+
| `type` | **yes** | a post type id from the `postTypes` tool, e.g. `posts` or `pages` |
|
|
400
|
+
| `main_image` | no | A media object from `postemi upload` (the featured image) |
|
|
401
|
+
| `categories` | no | array of category ids (numbers) from the `categoriesList` tool |
|
|
402
|
+
| `tags` | no | array of tag ids (numbers) from the `tagsList` tool |
|
|
403
|
+
| `status` | no | `publish` (default), `draft`, `pending`, `private` |
|
|
404
|
+
|
|
405
|
+
```bash
|
|
406
|
+
postemi integrations:trigger "$WP_ID" postTypes | jq '.output'
|
|
407
|
+
postemi integrations:trigger "$WP_ID" categoriesList | jq '.output'
|
|
408
|
+
postemi integrations:trigger "$WP_ID" tagsList | jq '.output'
|
|
409
|
+
postemi posts:create -c "<p>Our autumn menu is here.</p>" -s "2026-12-31T12:00:00Z" \
|
|
410
|
+
--settings '{"title":"Autumn menu","type":"posts","categories":[3],"tags":[12,14]}' \
|
|
411
|
+
-i "$WP_ID"
|
|
412
|
+
```
|
|
413
|
+
|
|
414
|
+
---
|
|
415
|
+
|
|
416
|
+
## Tumblr: `tumblr`
|
|
417
|
+
|
|
418
|
+
All fields optional. The blog is chosen when the user connects the channel.
|
|
419
|
+
|
|
420
|
+
| Field | Values |
|
|
421
|
+
|---|---|
|
|
422
|
+
| `title` | 1 to 4096 characters, shown as the heading of the post |
|
|
423
|
+
| `link` | A URL, added to the post as a link block |
|
|
424
|
+
| `sourceUrl` | A URL, the post's source |
|
|
425
|
+
| `tags` | comma separated tags, at most 4096 characters |
|
|
426
|
+
|
|
427
|
+
```bash
|
|
428
|
+
postemi posts:create -c "Post text" -s "2026-12-31T12:00:00Z" \
|
|
429
|
+
--settings '{"title":"Autumn menu","tags":"food,autumn"}' -i "$TUMBLR_ID"
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
---
|
|
433
|
+
|
|
434
|
+
## Dev.to: `devto`
|
|
435
|
+
|
|
436
|
+
The post's `-c` content becomes the article body (Markdown). The article is
|
|
437
|
+
published at the scheduled time.
|
|
438
|
+
|
|
439
|
+
| Field | Required | Values |
|
|
440
|
+
|---|---|---|
|
|
441
|
+
| `title` | **yes** | at least 2 characters |
|
|
442
|
+
| `main_image` | no | A media object from `postemi upload` (the cover image) |
|
|
443
|
+
| `canonical` | no | A URL, the original of the article |
|
|
444
|
+
| `organization` | no | an organization id from the `organizations` tool, as a string |
|
|
445
|
+
| `tags` | no | up to 4 items of `{ "value": <number>, "label": "<name>" }` from the `tags` tool |
|
|
446
|
+
|
|
447
|
+
```bash
|
|
448
|
+
postemi integrations:trigger "$DEVTO_ID" tags | jq '.output[:5]'
|
|
449
|
+
postemi integrations:trigger "$DEVTO_ID" organizations | jq '.output'
|
|
450
|
+
postemi posts:create -c "## Why we built it..." -s "2026-12-31T12:00:00Z" \
|
|
451
|
+
--settings '{"title":"Shipping a CLI","tags":[{"value":8,"label":"javascript"}]}' \
|
|
452
|
+
-i "$DEVTO_ID"
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
---
|
|
456
|
+
|
|
457
|
+
## Ghost: `ghost`
|
|
458
|
+
|
|
459
|
+
The post's `-c` content becomes the article body (HTML).
|
|
460
|
+
|
|
461
|
+
| Field | Required | Values |
|
|
462
|
+
|---|---|---|
|
|
463
|
+
| `title` | **yes** | 1 to 255 characters |
|
|
464
|
+
| `status` | no | `published` (default, at the scheduled time) or `draft` (a Ghost draft) |
|
|
465
|
+
| `tags` | no | comma separated tag names, at most 1000 characters |
|
|
466
|
+
| `excerpt` | no | at most 300 characters |
|
|
467
|
+
| `main_image` | no | A media object from `postemi upload` (the feature image) |
|
|
468
|
+
|
|
469
|
+
```bash
|
|
470
|
+
postemi posts:create -c "<p>Our autumn menu is here.</p>" -s "2026-12-31T12:00:00Z" \
|
|
471
|
+
--settings '{"title":"Autumn menu","tags":"menu,autumn","excerpt":"What is new this season."}' \
|
|
472
|
+
-i "$GHOST_ID"
|
|
473
|
+
```
|
|
474
|
+
|
|
475
|
+
---
|
|
476
|
+
|
|
477
|
+
## Google Chat and Microsoft Teams: `google-chat`, `microsoft-teams`
|
|
478
|
+
|
|
479
|
+
**No settings.** Same as Threads. The space (Google Chat) or the channel
|
|
480
|
+
(Teams) is fixed by the webhook the user gives when connecting. A message is
|
|
481
|
+
at most 4096 characters on Google Chat and 10000 on Teams.
|
|
482
|
+
|
|
483
|
+
```bash
|
|
484
|
+
postemi posts:create -c "Release notes are out" -s "2026-12-31T12:00:00Z" -i "$GCHAT_ID"
|
|
485
|
+
```
|
|
486
|
+
|
|
487
|
+
---
|
|
488
|
+
|
|
489
|
+
## Google Business Profile: `gmb` (coming soon)
|
|
490
|
+
|
|
491
|
+
**Not schedulable yet:** Google has not approved Postemi, so the user cannot
|
|
492
|
+
connect it. For reference, the settings the server accepts, all optional:
|
|
493
|
+
|
|
494
|
+
| Field | Values |
|
|
495
|
+
|---|---|
|
|
496
|
+
| `topicType` | `STANDARD`, `EVENT`, `OFFER` |
|
|
497
|
+
| `callToActionType` | `NONE`, `BOOK`, `ORDER`, `SHOP`, `LEARN_MORE`, `SIGN_UP`, `GET_OFFER`, `CALL` |
|
|
498
|
+
| `callToActionUrl` | A URL, checked when `callToActionType` is set |
|
|
499
|
+
| `eventTitle` | string, for `EVENT` |
|
|
500
|
+
| `eventStartDate`, `eventEndDate`, `eventStartTime`, `eventEndTime` | strings |
|
|
501
|
+
| `offerCouponCode`, `offerTerms` | strings, for `OFFER` |
|
|
502
|
+
| `offerRedeemUrl` | A URL |
|
|
503
|
+
|
|
504
|
+
A post takes at most one image and no video.
|
|
505
|
+
|
|
506
|
+
---
|
|
507
|
+
|
|
508
|
+
## LinkedIn Pages: `linkedin-page` (coming soon)
|
|
509
|
+
|
|
510
|
+
**Not schedulable yet:** LinkedIn has not approved Postemi for company pages.
|
|
511
|
+
When it does, the settings are the same as `linkedin`.
|
|
512
|
+
|
|
513
|
+
---
|
|
514
|
+
|
|
340
515
|
## Finding your integration ids
|
|
341
516
|
|
|
342
517
|
```bash
|
|
@@ -353,7 +528,8 @@ YT_ID=$(postemi integrations:list | jq -r '.[] | select(.identifier=="youtube")
|
|
|
353
528
|
If a channel is not in `integrations:list`, the user cannot post to it. For
|
|
354
529
|
Google Business Profile and LinkedIn company pages that is the expected state
|
|
355
530
|
until those platforms approve the app (personal LinkedIn profiles work).
|
|
356
|
-
|
|
531
|
+
The BETA channels are live. Say so rather than scheduling
|
|
532
|
+
a post that will fail.
|
|
357
533
|
|
|
358
534
|
---
|
|
359
535
|
|
package/README.md
CHANGED
|
@@ -7,7 +7,10 @@ command-line tool. It uses the same public API as the web app: what you
|
|
|
7
7
|
schedule here shows up in your Postemi calendar, and what you schedule there
|
|
8
8
|
you can see here too.
|
|
9
9
|
|
|
10
|
-
Channels:
|
|
10
|
+
Channels: 25+ platforms, including Facebook, Instagram, X, LinkedIn, TikTok, YouTube, Threads, Bluesky, Pinterest and Mastodon.
|
|
11
|
+
|
|
12
|
+
Plan: the CLI, the API and MCP need the Pro plan or higher (Pro, Creator or
|
|
13
|
+
Team). Basic has no API access.
|
|
11
14
|
|
|
12
15
|
[`SKILL.md`](./SKILL.md) is the full command reference, written for AI agents.
|
|
13
16
|
Show it to Claude, ChatGPT, Codex, OpenClaw or Hermes and they can use the
|
|
@@ -42,9 +45,10 @@ postemi auth:signup --email anna@example.com --code 123456 --accept-terms --work
|
|
|
42
45
|
```
|
|
43
46
|
|
|
44
47
|
The person must agree to https://postemi.com/terms and
|
|
45
|
-
https://postemi.com/privacy first.
|
|
46
|
-
|
|
47
|
-
at https://postemi.com/app/signup
|
|
48
|
+
https://postemi.com/privacy first. An account made with `postemi auth:signup`
|
|
49
|
+
has no free trial: next come `postemi billing:plans` and
|
|
50
|
+
`postemi billing:subscribe`. Signing up at https://postemi.com/app/signup
|
|
51
|
+
instead starts a 7-day free trial; then run `postemi auth:login`.
|
|
48
52
|
|
|
49
53
|
For a server, CI or an agent without a browser, use an API key from
|
|
50
54
|
Settings, Developers in the web app:
|
|
@@ -62,9 +66,7 @@ export POSTEMI_API_KEY=your_api_key
|
|
|
62
66
|
| `POSTEMI_AUTH_SERVER` | `https://api.postemi.com` | Where `auth:login` runs the device flow |
|
|
63
67
|
| `POSTEMI_CLIENT_NAME` | `Postemi CLI` | Name shown on the approval page |
|
|
64
68
|
|
|
65
|
-
|
|
66
|
-
for the Posty CLI keeps working. Stored credentials from `auth:login` take
|
|
67
|
-
precedence over `POSTEMI_API_KEY`.
|
|
69
|
+
Stored credentials from `auth:login` take precedence over `POSTEMI_API_KEY`.
|
|
68
70
|
|
|
69
71
|
## Quick start
|
|
70
72
|
|
|
@@ -81,6 +83,28 @@ postemi posts:create -c "Hello from the terminal" -m "$IMG" \
|
|
|
81
83
|
Results are JSON on stdout; status lines and errors go to stderr, and every
|
|
82
84
|
failure exits 1. Run `postemi <command> --help` for each command.
|
|
83
85
|
|
|
86
|
+
## Agent skills (optional)
|
|
87
|
+
|
|
88
|
+
The CLI can install its skills into the coding agents on your machine
|
|
89
|
+
(Claude Code `~/.claude/skills`, Codex `~/.codex/skills` or
|
|
90
|
+
`$CODEX_HOME/skills`, Cursor `~/.cursor/skills`, Grok Build
|
|
91
|
+
`~/.grok/skills`). The core `postemi` skill comes with any of them; the other
|
|
92
|
+
two are optional:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
postemi skills list # core, writing, growth: installed where
|
|
96
|
+
postemi skills add writing # ideas, hooks, formatting, templates
|
|
97
|
+
postemi skills add growth # niche, cadence, 30-day plan
|
|
98
|
+
postemi skills add all --agent claude --yes
|
|
99
|
+
postemi skills remove growth
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
After `postemi auth:login` on a terminal the CLI asks once whether you want
|
|
103
|
+
the writing and the growth skill (default No) and remembers the answers in
|
|
104
|
+
`~/.postemi/config.json`. It never asks when an agent or a script runs it (no
|
|
105
|
+
terminal, `--json`, or `CI` set); it prints one hint line instead, once.
|
|
106
|
+
With several agents found it asks which; `--agent` and `--yes` skip that.
|
|
107
|
+
|
|
84
108
|
## More
|
|
85
109
|
|
|
86
110
|
- [`SKILL.md`](./SKILL.md): every command, flag and rule
|
|
@@ -91,5 +115,59 @@ failure exits 1. Run `postemi <command> --help` for each command.
|
|
|
91
115
|
- Help: https://postemi.com/help, support: norbert@postemi.com
|
|
92
116
|
- Privacy: https://postemi.com/privacy, terms: https://postemi.com/terms
|
|
93
117
|
|
|
94
|
-
|
|
95
|
-
|
|
118
|
+
## Plugins for AI agents
|
|
119
|
+
|
|
120
|
+
This repository also holds the Postemi plugins, in [`plugins/`](./plugins):
|
|
121
|
+
|
|
122
|
+
| Folder | For | What it is |
|
|
123
|
+
|---|---|---|
|
|
124
|
+
| [`plugins/postemi-mcp`](./plugins/postemi-mcp) | Claude (chat, desktop, Code) | The hosted MCP server `https://mcp.postemi.com/mcp` plus a skill |
|
|
125
|
+
| [`plugins/postemi-cli`](./plugins/postemi-cli) | Claude Code | This CLI's skill; the agent runs `postemi` commands |
|
|
126
|
+
| [`plugins/postemi-chatgpt`](./plugins/postemi-chatgpt) | ChatGPT | The ChatGPT app package |
|
|
127
|
+
| [`plugins/postemi-cursor`](./plugins/postemi-cursor) | Cursor | MCP server, skill and commands |
|
|
128
|
+
| [`plugins/postemi-grok`](./plugins/postemi-grok) | Grok Build | MCP server, skill and commands |
|
|
129
|
+
| [`plugins/postemi-growth`](./plugins/postemi-growth) | Claude Code, Cursor, Grok Build | Optional: the growth skill only |
|
|
130
|
+
|
|
131
|
+
In Claude Code:
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
claude plugin marketplace add norbertlevente/postemi-agent
|
|
135
|
+
claude plugin install postemi@postemi-agent # MCP server
|
|
136
|
+
claude plugin install postemi-cli@postemi-agent # CLI skill
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
The skill on its own (for OpenClaw and other agents) is
|
|
140
|
+
[`skills/postemi/SKILL.md`](./skills/postemi/SKILL.md).
|
|
141
|
+
|
|
142
|
+
### Writing and growth skills
|
|
143
|
+
|
|
144
|
+
Three more skills help the agent write the posts, not only schedule them:
|
|
145
|
+
|
|
146
|
+
| Skill | What it teaches | In the plugins |
|
|
147
|
+
|---|---|---|
|
|
148
|
+
| [`skills/postemi-writing`](./skills/postemi-writing) | post ideas, hooks and headlines, opening lines, formatting, threads, each network's writing rules, a check before publishing | in every main plugin |
|
|
149
|
+
| [`skills/postemi-templates`](./skills/postemi-templates) | the template and hook library of the Postemi composer, generated from the web app | in every main plugin, with writing |
|
|
150
|
+
| [`skills/postemi-growth`](./skills/postemi-growth) | choosing networks and a first niche, a 30-day test, reading the numbers, cadence, 30 angles for one topic, repurposing, bios and profile links, a weekly review | optional: its own plugin, [`plugins/postemi-growth`](./plugins/postemi-growth) |
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
claude plugin install postemi-growth@postemi-agent # the optional growth plugin
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
With the CLI, writing and growth are both optional; see below.
|
|
157
|
+
|
|
158
|
+
## Development
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
pnpm install
|
|
162
|
+
pnpm build # dist/index.js
|
|
163
|
+
pnpm test # type check, build, unit tests (test/), scripts/check.mjs (manifests, skill copies, no other-brand text)
|
|
164
|
+
node dist/index.js --help
|
|
165
|
+
|
|
166
|
+
pnpm sync:templates ../postemi/src/lib/app/templates # regenerate skills/postemi-templates/reference from the web app
|
|
167
|
+
pnpm sync:skills # copy writing and templates into the main plugins, growth into postemi-growth
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
Release steps: [`PUBLISHING.md`](./PUBLISHING.md). Changes: [`CHANGELOG.md`](./CHANGELOG.md).
|
|
171
|
+
|
|
172
|
+
License: AGPL-3.0, see [`LICENSE`](./LICENSE).
|
|
173
|
+
Source: https://github.com/norbertlevente/postemi-agent
|
package/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: postemi
|
|
3
|
-
description: Postemi schedules and publishes social posts from the command line to
|
|
3
|
+
description: Postemi schedules and publishes social posts from the command line to 25+ platforms, including Facebook, Instagram, X, LinkedIn, TikTok, YouTube, Threads, Bluesky, Pinterest and Mastodon.
|
|
4
4
|
homepage: https://postemi.com
|
|
5
5
|
metadata: {"openclaw":{"emoji":"🌎","requires":{"bins":[],"env":[]}}}
|
|
6
6
|
---
|
|
@@ -33,36 +33,58 @@ MCP server, for chat clients without a terminal: https://mcp.postemi.com/mcp
|
|
|
33
33
|
|
|
34
34
|
**Only these. Do not offer a user anything else, and do not try to post to it.**
|
|
35
35
|
Postemi's server carries inherited code for many more providers; that code is not
|
|
36
|
-
enabled and not supported.
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
|
42
|
-
|
|
|
43
|
-
|
|
|
44
|
-
|
|
|
45
|
-
|
|
|
46
|
-
|
|
|
47
|
-
|
|
|
48
|
-
|
|
|
49
|
-
|
|
|
50
|
-
|
|
|
51
|
-
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
36
|
+
enabled and not supported. Postemi adds channels over time, so
|
|
37
|
+
`integrations:list` (below) can show one that is not in this table yet.
|
|
38
|
+
|
|
39
|
+
| Channel | `identifier` | Status |
|
|
40
|
+
|---|---|---|
|
|
41
|
+
| X (Twitter) | `x` | Live |
|
|
42
|
+
| Facebook (Pages) | `facebook` | Live |
|
|
43
|
+
| Instagram (business account through a Facebook Page) | `instagram` | Live |
|
|
44
|
+
| Instagram (professional account, no Facebook Page) | `instagram-standalone` | Live |
|
|
45
|
+
| LinkedIn (member feed) | `linkedin` | Live |
|
|
46
|
+
| TikTok | `tiktok` | Live |
|
|
47
|
+
| YouTube | `youtube` | Live |
|
|
48
|
+
| Threads | `threads` | Live |
|
|
49
|
+
| Bluesky | `bluesky` | Live |
|
|
50
|
+
| Telegram | `telegram` | Live |
|
|
51
|
+
| Discord | `discord` | Live |
|
|
52
|
+
| Slack | `slack` | Live |
|
|
53
|
+
| Pinterest | `pinterest` | Coming soon, not schedulable yet |
|
|
54
|
+
| Mastodon (mastodon.social) | `mastodon` | BETA |
|
|
55
|
+
| Mastodon (any other server) | `mastodon-custom` | BETA |
|
|
56
|
+
| Pixelfed (any server) | `pixelfed` | BETA |
|
|
57
|
+
| WordPress (your own site) | `wordpress` | BETA |
|
|
58
|
+
| Tumblr | `tumblr` | BETA |
|
|
59
|
+
| Dev.to | `devto` | BETA |
|
|
60
|
+
| Ghost (your own site) | `ghost` | BETA |
|
|
61
|
+
| Google Chat (a space, by webhook) | `google-chat` | BETA |
|
|
62
|
+
| Microsoft Teams (a channel, by webhook) | `microsoft-teams` | BETA |
|
|
63
|
+
| Google Business Profile | `gmb` | Coming soon, not schedulable yet |
|
|
64
|
+
| LinkedIn Pages (company pages) | `linkedin-page` | Coming soon, not schedulable yet |
|
|
65
|
+
|
|
66
|
+
**Pinterest is coming soon.** Postemi customers cannot connect it until Pinterest
|
|
67
|
+
approves Postemi's app, so it never appears in `integrations:list`. Tell the user
|
|
68
|
+
it is not available yet. (When it opens, a pin needs a `board` id in
|
|
69
|
+
`--settings`; see PROVIDER_SETTINGS.md.)
|
|
70
|
+
|
|
71
|
+
**The other BETA channels** connect and publish, but Postemi has not tried them
|
|
72
|
+
with many real accounts yet. Say so when the user picks one. Most need
|
|
73
|
+
settings (a title for WordPress, Dev.to and Ghost; a picture for Pixelfed);
|
|
74
|
+
see PROVIDER_SETTINGS.md.
|
|
75
|
+
|
|
76
|
+
**Google Business Profile and LinkedIn Pages are coming soon.** Those platforms
|
|
77
|
+
have not approved Postemi yet, so the user cannot connect them. Do not schedule
|
|
78
|
+
for them; personal LinkedIn profiles (`linkedin`) work today.
|
|
57
79
|
|
|
58
80
|
**`integrations:list` is the truth.** The table says what Postemi supports; that
|
|
59
81
|
command says what THIS user has actually connected. Check it before you
|
|
60
82
|
schedule anything, and never post to an id that is not in its output.
|
|
61
83
|
|
|
62
|
-
**Never assume another provider exists.** If a user asks for
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
build a `--settings` payload for it.
|
|
84
|
+
**Never assume another provider exists.** If a user asks for Reddit, Medium,
|
|
85
|
+
Farcaster, Hashnode, Lemmy, Nostr, VK, a newsletter service or anything else
|
|
86
|
+
that is not in the table, the answer is that Postemi does not offer it today.
|
|
87
|
+
Do not build a `--settings` payload for it.
|
|
66
88
|
|
|
67
89
|
---
|
|
68
90
|
|
|
@@ -106,7 +128,8 @@ If not authenticated:
|
|
|
106
128
|
You never see or handle a key.
|
|
107
129
|
2. **No account yet:** `postemi auth:signup` creates one, see below. Only when
|
|
108
130
|
the user asks you to create a Postemi account for them. They can also sign
|
|
109
|
-
up at https://postemi.com/app/signup
|
|
131
|
+
up at https://postemi.com/app/signup, which starts a 7-day free trial, and
|
|
132
|
+
then run `postemi auth:login`.
|
|
110
133
|
|
|
111
134
|
### Creating an account for the user (no free trial)
|
|
112
135
|
|
|
@@ -518,9 +541,10 @@ postemi posts:create -c "Content" -s "2026-12-31T12:00:00Z" -m "$VIDEO_PATH" -i
|
|
|
518
541
|
### Pattern 1: Discover & Use Integration Tools
|
|
519
542
|
|
|
520
543
|
**Most supported channels have no tools at all.** Of the channels in the table
|
|
521
|
-
at the top of this file,
|
|
522
|
-
Discord (`channels`), Slack (`channels`)
|
|
523
|
-
|
|
544
|
+
at the top of this file, six expose a tool: Instagram (`audioSearch`),
|
|
545
|
+
Discord (`channels`), Slack (`channels`), Pinterest (`boards`), WordPress
|
|
546
|
+
(`postTypes`, `categoriesList`, `tagsList`) and Dev.to (`tags`,
|
|
547
|
+
`organizations`). The others expose none: `integrations:settings`
|
|
524
548
|
returns an empty `tools` array for them, and `integrations:trigger` on them
|
|
525
549
|
returns `404 Tool not found`.
|
|
526
550
|
|
|
@@ -979,6 +1003,31 @@ State these plainly rather than attempting a workaround.
|
|
|
979
1003
|
|
|
980
1004
|
---
|
|
981
1005
|
|
|
1006
|
+
## Optional skills: writing and growth
|
|
1007
|
+
|
|
1008
|
+
Two more Postemi skills are optional. They are not installed unless the user
|
|
1009
|
+
chose them:
|
|
1010
|
+
|
|
1011
|
+
| Skill | What it adds | Install |
|
|
1012
|
+
|---|---|---|
|
|
1013
|
+
| writing (`postemi-writing` + `postemi-templates`) | post ideas, hooks, formatting, each network's writing rules, the composer's templates | `postemi skills add writing` |
|
|
1014
|
+
| growth (`postemi-growth`) | choosing a niche, cadence per network, a 30-day plan, the weekly review | `postemi skills add growth` |
|
|
1015
|
+
|
|
1016
|
+
```bash
|
|
1017
|
+
postemi skills list # core + optional, and where each is installed (JSON)
|
|
1018
|
+
postemi skills add writing --json # into every agent found (Claude Code, Codex, Cursor, Grok Build)
|
|
1019
|
+
postemi skills add growth --agent claude --json
|
|
1020
|
+
postemi skills remove growth --json
|
|
1021
|
+
```
|
|
1022
|
+
|
|
1023
|
+
When the user asks for help writing posts or planning content and
|
|
1024
|
+
`postemi skills list` shows the skill as missing, **offer** it: say what it
|
|
1025
|
+
adds and ask. Run `postemi skills add` only after the user says yes; never
|
|
1026
|
+
install it silently. Pass `--json` (or run without a terminal) so the CLI asks
|
|
1027
|
+
no questions; a new agent session loads the skills.
|
|
1028
|
+
|
|
1029
|
+
---
|
|
1030
|
+
|
|
982
1031
|
## Supporting Resources
|
|
983
1032
|
|
|
984
1033
|
**This file is the command reference.** Everything the CLI accepts is
|
|
@@ -1062,6 +1111,10 @@ postemi analytics:post <id> -d 30 # Post analytics (30 days)
|
|
|
1062
1111
|
postemi posts:missing <id> # List provider content
|
|
1063
1112
|
postemi posts:connect <id> --release-id "<rid>" # Connect content to post
|
|
1064
1113
|
|
|
1114
|
+
# Optional skills (ask the user first)
|
|
1115
|
+
postemi skills list # Core + optional skills, where installed
|
|
1116
|
+
postemi skills add writing|growth --json # Install an optional skill
|
|
1117
|
+
|
|
1065
1118
|
# Help
|
|
1066
1119
|
postemi --help # Show help
|
|
1067
1120
|
postemi posts:create --help # Command help
|