@cratis/pi 6.3.2 → 6.4.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/package/corpus/rules/profiles.md +1 -1
- package/package/corpus/skills/cratis-content-length/LICENSE +2 -0
- package/package/corpus/skills/cratis-content-length/SKILL.md +222 -0
- package/package/corpus/skills/cratis-content-length/references/length-evidence.md +115 -0
- package/package/corpus/skills/cratis-content-length/verification.json +19 -0
- package/package/corpus/skills/cratis-developer-marketing/LICENSE +2 -0
- package/package/corpus/skills/cratis-developer-marketing/SKILL.md +249 -0
- package/package/corpus/skills/cratis-developer-marketing/references/measurement.md +136 -0
- package/package/corpus/skills/cratis-developer-marketing/references/playbook-evidence.md +214 -0
- package/package/corpus/skills/cratis-developer-marketing/verification.json +19 -0
- package/package/corpus/skills/cratis-social-feed-post/SKILL.md +204 -102
- package/package/corpus/skills/cratis-social-feed-post/references/engagement-evidence.md +138 -0
- package/package/corpus/skills/cratis-social-feed-post/verification.json +19 -8
- package/package/corpus/skills/cratis-writing-voice-and-cadence/SKILL.md +211 -57
- package/package/corpus/skills/cratis-writing-voice-and-cadence/references/ai-tells.md +419 -0
- package/package/corpus/skills/cratis-writing-voice-and-cadence/verification.json +14 -2
- package/package/profile-catalog.json +2 -0
- package/package.json +1 -1
|
@@ -1,127 +1,229 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: cratis-social-feed-post
|
|
3
|
-
description: Write or review a short post for a social feed such as LinkedIn, where the opening
|
|
3
|
+
description: Write or review a short post for a social feed such as LinkedIn, where only the opening shows before "see more", the body is plain text with no markup, posts lead with media that carries the Cratis mark, and formatting tricks cost accessibility. Use when drafting, adapting or reviewing a feed post, choosing its media, or adapting it for another channel. Do not use for documentation pages, release notes, long-form articles, or anything rendered as Markdown, and hand length, voice and distribution questions to their own skills.
|
|
4
4
|
license: MIT
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Social feed post
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
Someone scrolling a feed sees two or three lines of a post and its first image, and decides
|
|
10
|
+
there whether to read on. This skill covers what a post has to do inside that preview, what
|
|
11
|
+
media it leads with, and how it survives a phone screen and a screen reader.
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
figures are unofficial approximations reported by third parties; no platform documents them,
|
|
15
|
-
and they move with interface, font size and device width. Treat them as a target zone and
|
|
16
|
-
re-check them against current official guidance rather than encoding them as durable rules.
|
|
13
|
+
Other skills own the neighboring questions. Use them instead of improvising here:
|
|
17
14
|
|
|
18
|
-
|
|
15
|
+
- How long the post should be: **cratis-content-length**.
|
|
16
|
+
- Whether it reads as written by a person: **cratis-writing-voice-and-cadence**.
|
|
17
|
+
- Where it goes, how often, and how to tell whether it worked: **cratis-developer-marketing**.
|
|
18
|
+
- The facts in a release or feature announcement: **cratis-release-notes**. This skill only
|
|
19
|
+
adapts them for the feed.
|
|
20
|
+
- The code on a code card: **cratis-technical-examples**. A card links to the complete,
|
|
21
|
+
versioned source and never stands in for it.
|
|
19
22
|
|
|
20
|
-
|
|
23
|
+
## What the platform actually says
|
|
21
24
|
|
|
22
|
-
|
|
23
|
-
|
|
25
|
+
LinkedIn described its current feed in March 2026. An LLM-based retrieval system feeds a
|
|
26
|
+
sequential ranking model, and the models learn from what members read, like, comment on,
|
|
27
|
+
return to and scroll past, with long dwells among the modeled actions. LinkedIn names those
|
|
28
|
+
signals and publishes no weights for them. It doesn't say whether expanding a particular post
|
|
29
|
+
counts for anything, so don't write as if it did.
|
|
24
30
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
31
|
+
Our editorial preference is one clear subject: one point per post. And whatever the ranking
|
|
32
|
+
does, a reader who doesn't expand the post never sees the rest of it.
|
|
33
|
+
|
|
34
|
+
LinkedIn has also said that AI may help with wording, but a post has to represent its
|
|
35
|
+
author's own voice and perspective. It says content that appears AI-generated and lacks a
|
|
36
|
+
clear perspective is less likely to be shown beyond the author's own network. That's
|
|
37
|
+
LinkedIn describing its own system, not an outside measurement, and it points the same way
|
|
38
|
+
as everything else here: the post needs an author with something to say.
|
|
39
|
+
|
|
40
|
+
The reviewed sources disclose no first-hour windows, hashtag counts, link penalties or save
|
|
41
|
+
weights. The folklore table in
|
|
42
|
+
[the engagement evidence](references/engagement-evidence.md) lists the common claims and what
|
|
43
|
+
the sources do and don't support.
|
|
44
|
+
|
|
45
|
+
## The preview decides what the post is judged on
|
|
46
|
+
|
|
47
|
+
Third-party tools report that LinkedIn shows roughly 210 characters on desktop and 140 on
|
|
48
|
+
mobile before "see more". LinkedIn doesn't publish these numbers. They are unofficial
|
|
49
|
+
approximations that move with the interface, font size and screen width, so check the real
|
|
50
|
+
preview on a phone before trusting any count.
|
|
51
|
+
|
|
52
|
+
Line wrapping and blank lines can change what fits in the preview. Check the actual mobile and
|
|
53
|
+
desktop rendering.
|
|
29
54
|
|
|
30
55
|
## What the opening must do
|
|
31
56
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
57
|
+
Finish a complete thought inside the preview. An opening cut off mid-sentence spends the whole
|
|
58
|
+
preview on half an idea.
|
|
59
|
+
|
|
60
|
+
Make it a specific proposition: what shipped, what broke, a number, the task the reader is
|
|
61
|
+
stuck on today. It has to be true. If the author didn't see it happen, it doesn't go in as
|
|
62
|
+
something they saw.
|
|
63
|
+
|
|
64
|
+
A brief opening sentence is a hook doing its job. Don't smooth it into a longer, rounder
|
|
65
|
+
sentence during an edit. Avoid lengthening an opening if that makes its thought disappear
|
|
66
|
+
below the preview.
|
|
67
|
+
|
|
68
|
+
Name the problem before the identifier. A type name or product name in the first line asks a
|
|
69
|
+
scroller to care about a word they have no reason to know yet.
|
|
70
|
+
|
|
71
|
+
Then test it. Read only the preview and ask whether you'd expand it. If the answer depends on
|
|
72
|
+
the line after the cut, rewrite the opening.
|
|
73
|
+
|
|
74
|
+
## Lead with media on LinkedIn
|
|
75
|
+
|
|
76
|
+
On LinkedIn, a Cratis post leads with at least one asset by default. Text-only is allowed,
|
|
77
|
+
and sometimes it's the right vehicle for one sharp point. It is a decision made on purpose and
|
|
78
|
+
noted with the draft, not what happens because nobody made an image.
|
|
79
|
+
|
|
80
|
+
This is Cratis's editorial default and an open hypothesis that Cratis is measuring. It isn't a
|
|
81
|
+
proven effect. The vendor datasets behind it, Buffer's medians and Socialinsider's
|
|
82
|
+
business-page averages, show higher engagement rates for documents, multi-image posts and
|
|
83
|
+
video than for text. They are observational. They measure engagement, not reach. Neither
|
|
84
|
+
dataset reports GIFs separately. [The SEO Works](https://www.seoworks.co.uk/downloads/data-led-analysis-of-linkedin-video-vs-carousels/)
|
|
85
|
+
reports counting slide-advance clicks in its own carousel engagement calculation; this does
|
|
86
|
+
not establish Buffer's or Socialinsider's calculation. The
|
|
87
|
+
figures and their caveats are in the evidence reference.
|
|
88
|
+
|
|
89
|
+
Choose the asset by what it has to explain. A code card suits one mechanism a developer can
|
|
90
|
+
read in a few seconds. Use several images when the opening names several layers, such as a
|
|
91
|
+
command and the event it produces; don't split one idea across two posts to fit one image. A
|
|
92
|
+
document suits a sequence, like steps, a before-and-after or a decision walked through page by
|
|
93
|
+
page, with the claim on the cover and one idea on each page. Use a GIF or screen recording
|
|
94
|
+
when the motion is the point, and make sure its first frame makes sense on its own. Video is
|
|
95
|
+
for real behavior shown end to end, captioned so it works with the sound off.
|
|
96
|
+
|
|
97
|
+
A stock photo or a decorated title card explains nothing, so it doesn't count. The first image
|
|
98
|
+
is seen before the text is expanded and does the same job as the opening line: one idea,
|
|
99
|
+
readable on a phone.
|
|
100
|
+
|
|
101
|
+
Every image needs alt text that carries its idea, and the post should still make sense with
|
|
102
|
+
the images removed.
|
|
103
|
+
|
|
104
|
+
## Brand every asset with the Cratis mark
|
|
105
|
+
|
|
106
|
+
Every image, card, document page, GIF, video and screenshot Cratis publishes carries the
|
|
107
|
+
Cratis mark. The reason is attribution. Media gets saved and reshared away from its post, and
|
|
108
|
+
the mark is what still says where it came from. The reviewed evidence establishes no logo
|
|
109
|
+
effect on organic reach, and this rule doesn't claim one.
|
|
110
|
+
|
|
111
|
+
- Use the real mark, unaltered: not stretched, cropped, recolored, redrawn or animated.
|
|
112
|
+
- Make it large enough, with enough contrast, to read on a phone.
|
|
113
|
+
- Place it for the format: a brand row on a card or image; on a document's cover and in the
|
|
114
|
+
same spot on every page after it; on every frame of a GIF, because the feed can show any
|
|
115
|
+
frame; as a persistent corner mark on designed video, clear of player controls and captions.
|
|
116
|
+
- Screenshots and screen recordings are framed, never stamped. The capture sits unchanged
|
|
117
|
+
inside a branded frame, because painting a logo over captured pixels changes what the
|
|
118
|
+
capture shows.
|
|
119
|
+
- Leave the logo out of alt text. Describe the idea in the image.
|
|
120
|
+
|
|
121
|
+
An asset without the mark isn't ready to publish.
|
|
76
122
|
|
|
77
123
|
## Never use Unicode pseudo-formatting
|
|
78
124
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
Emphasis in a plain-text feed comes from
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
125
|
+
The feed renders no Markdown, so `**bold**` and `# heading` arrive as literal characters.
|
|
126
|
+
Third-party tools offer a workaround: "bold" and "italic" letters built from Mathematical
|
|
127
|
+
Alphanumeric Symbols, the characters that look like `𝗕𝗼𝗹𝗱` and `𝘐𝘵𝘢𝘭𝘪𝘤`. Don't use them.
|
|
128
|
+
|
|
129
|
+
Assistive technology cannot read them reliably. A screen reader may spell out "mathematical
|
|
130
|
+
bold capital T" letter by letter, or skip the word. They use different code points from
|
|
131
|
+
ordinary letters; search behavior depends on the platform's normalization.
|
|
132
|
+
|
|
133
|
+
Emphasis in a plain-text feed comes from what you say first and where the lines break. A point
|
|
134
|
+
that needs visual weight belongs in an image with its own alt text.
|
|
135
|
+
|
|
136
|
+
Keep to one thread per post. An announcement can still list what shipped as short, plain
|
|
137
|
+
fragments inside that thread. Blank lines separate paragraphs and do nothing else, since each
|
|
138
|
+
one uses preview space. Hashtags go on the last line, never mid-sentence. No source supports a
|
|
139
|
+
particular count; our default is one or two that name the subject.
|
|
140
|
+
|
|
141
|
+
## Links and bait
|
|
142
|
+
|
|
143
|
+
On LinkedIn, keep external links out of the body by default. That's an editorial default, not
|
|
144
|
+
a platform rule. The sources reviewed don't show that a body link lowers distribution, and
|
|
145
|
+
"always put the link in the first comment" is folklore. We do it because a post should be
|
|
146
|
+
worth reading without the click. When the link is what the reader needs, such as the runnable
|
|
147
|
+
sample the post is about, it goes in the body. On channels where the link is the post, none
|
|
148
|
+
of this applies. Don't explain the placement inside the post, and never present it as an
|
|
149
|
+
algorithm fact.
|
|
150
|
+
|
|
151
|
+
No engagement bait: "Repost if…", "Tag someone who…", "Agree?". A question that follows from
|
|
152
|
+
the argument, and that the author actually wants answered, is a different thing and welcome.
|
|
153
|
+
|
|
154
|
+
## Length
|
|
155
|
+
|
|
156
|
+
How long a post should be depends on its job. Work that out with **cratis-content-length**
|
|
157
|
+
rather than a rule of thumb from here.
|
|
158
|
+
|
|
159
|
+
Feed posts should vary. A short post that makes one point and a longer worked example both
|
|
160
|
+
belong in the same feed, and a feed where every post is the same length reads as a template
|
|
161
|
+
before anyone reads the words. The one large LinkedIn length dataset covers personal profiles
|
|
162
|
+
and is correlational, so it's no reason to pad a company post. Hard platform limits are listed
|
|
163
|
+
in the evidence reference.
|
|
164
|
+
|
|
165
|
+
## Voice
|
|
166
|
+
|
|
167
|
+
Run the voice review with **cratis-writing-voice-and-cadence**. It has the constructions to
|
|
168
|
+
cut, the checks for sameness across posts, and the rule that no rewrite may change a claim.
|
|
169
|
+
|
|
170
|
+
The feed-specific part is whose voice it is. A post goes out under a named person or a team,
|
|
171
|
+
so the perspective and any first-hand account have to be theirs, and they review it before
|
|
172
|
+
it's ready.
|
|
173
|
+
|
|
174
|
+
## After publishing
|
|
175
|
+
|
|
176
|
+
Plan for the author to answer comments. In Buffer's data, LinkedIn posts where the account
|
|
177
|
+
replied to comments had about 30% more engagement than that same account's posts without
|
|
178
|
+
replies. Buffer says itself that this doesn't show replies cause it. Replies take the author's
|
|
179
|
+
time, so count that time when planning a post.
|
|
180
|
+
|
|
181
|
+
An agent never replies on anyone's behalf. It can draft an answer for the author to rewrite
|
|
182
|
+
and send.
|
|
183
|
+
|
|
184
|
+
Where posts go, how often, and how to measure what happened belongs to
|
|
185
|
+
**cratis-developer-marketing**.
|
|
186
|
+
|
|
187
|
+
## Other channels
|
|
188
|
+
|
|
189
|
+
A post adapted for another channel is rewritten for it, not cross-posted. Read each
|
|
190
|
+
channel's current rules before posting.
|
|
191
|
+
|
|
192
|
+
- X, Bluesky and Mastodon want something shorter: one finding, offered as part of a
|
|
193
|
+
conversation rather than a broadcast. Their limits are counted differently (weighted
|
|
194
|
+
characters on X, graphemes on Bluesky, and a Mastodon default each server can change), so
|
|
195
|
+
check the evidence reference. On Mastodon, put context and hashtags in the post and alt
|
|
196
|
+
text on every image.
|
|
197
|
+
- On Reddit, answer the question the community asked, with a reproducible example, and say
|
|
198
|
+
that you work on the project. Read that subreddit's rules first.
|
|
199
|
+
- On Hacker News, AI doesn't write or edit anything Cratis posts: not the title, not the
|
|
200
|
+
text, not a comment. HN's guidelines prohibit generated or AI-edited text in comments.
|
|
201
|
+
Extending that to everything Cratis submits is Cratis's own stricter policy, not something
|
|
202
|
+
the guidelines say. You may help a person gather facts, links and answers for them to check.
|
|
203
|
+
HN also asks for the original source and, usually, the original title, asks that the site
|
|
204
|
+
not be used mainly for promotion, and prohibits asking for upvotes or comments.
|
|
205
|
+
- On dev.to, Hashnode or a blog, post the complete tested piece with versions and a canonical
|
|
206
|
+
link, not a teaser.
|
|
207
|
+
- On YouTube, use a title and thumbnail that match what the video shows.
|
|
113
208
|
|
|
114
209
|
## Before publishing
|
|
115
210
|
|
|
116
|
-
-
|
|
117
|
-
|
|
118
|
-
-
|
|
119
|
-
|
|
120
|
-
-
|
|
121
|
-
|
|
211
|
+
- On LinkedIn, the post leads with at least one asset that explains something, or text-only
|
|
212
|
+
was chosen on purpose and noted.
|
|
213
|
+
- Every image, document page, GIF frame and video carries the Cratis mark, and screenshots
|
|
214
|
+
are framed rather than stamped.
|
|
215
|
+
- The opening thought is complete inside the preview on mobile as well as desktop.
|
|
216
|
+
- No Markdown and no pseudo-formatted characters anywhere, including the hook.
|
|
217
|
+
- On LinkedIn, no link in the body unless the reader needs it there, and no engagement bait.
|
|
218
|
+
- Every image has alt text, and the post makes sense with the images removed.
|
|
219
|
+
- Every technical claim is one the underlying source supports, and any limitation the post
|
|
220
|
+
depends on is stated rather than implied.
|
|
221
|
+
- The named author has reviewed the perspective the post speaks in.
|
|
122
222
|
|
|
123
223
|
## Stop conditions
|
|
124
224
|
|
|
225
|
+
Nothing is ever published, scheduled or replied to by an agent. Drafting a post doesn't
|
|
226
|
+
authorize publishing, scheduling, tagging, mentioning, uploading or replying.
|
|
227
|
+
|
|
125
228
|
Stop and ask when the account owner, the author's perspective, the evidence behind a claim,
|
|
126
|
-
|
|
127
|
-
schedule, tag, mention or upload it.
|
|
229
|
+
an asset's permission or its branding is unresolved.
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# Engagement evidence for feed posts
|
|
2
|
+
|
|
3
|
+
This is the public evidence behind the feed post skill, as of 2026-09-25. Each row states the
|
|
4
|
+
claim the way the source supports it, which is often narrower than the way it gets repeated.
|
|
5
|
+
Platforms change their ranking and formats often, so recheck the sources before relying on a
|
|
6
|
+
row and correct this file when they change.
|
|
7
|
+
|
|
8
|
+
**Grades**
|
|
9
|
+
|
|
10
|
+
- **Official**: the platform describing its own system or publishing its own rules. Good
|
|
11
|
+
evidence of what the platform says. It doesn't show that a tactic works.
|
|
12
|
+
- **Vendor, observational**: data a tool vendor collected from its own customers. It shows
|
|
13
|
+
correlation within that population. It isn't causal, and it isn't the whole platform.
|
|
14
|
+
- **Third-party guidance**: a vendor's description or advice, not a measurement and not an
|
|
15
|
+
official specification.
|
|
16
|
+
|
|
17
|
+
**Verification** records what happened when each claim was checked against its source by
|
|
18
|
+
quote. *Confirmed* means the source says what the row says. *Partly confirmed* means the row
|
|
19
|
+
has been narrowed to what the source supports. *Checked against source* marks figures read
|
|
20
|
+
directly off the source page outside the quote-level review.
|
|
21
|
+
|
|
22
|
+
## LinkedIn: what the platform says
|
|
23
|
+
|
|
24
|
+
| Claim as supported | Source | Date | Population / metric | Grade | Verification |
|
|
25
|
+
| --- | --- | --- | --- | --- | --- |
|
|
26
|
+
| LinkedIn is rolling out an LLM- and GPU-powered feed ranking system. The article gives no scoring formula for creators. | [LinkedIn Engineering](https://www.linkedin.com/blog/engineering/feed/engineering-the-next-generation-of-linkedins-feed) | 2026-03-12 | System description; no outcome metric | Official | Confirmed |
|
|
27
|
+
| The architecture couples unified LLM-based retrieval with a sequential ranking model. | Same article | 2026-03-12 | System description | Official | Confirmed |
|
|
28
|
+
| The models use profile context and each member's history of what they read, liked, commented on, returned to or scrolled past. | Same article | 2026-03-12 | Model inputs; relative weights undisclosed | Official | Confirmed |
|
|
29
|
+
| A post's representation includes its format, author information, engagement counts, article metadata and text. | Same article | 2026-03-12 | Model inputs; relative weights undisclosed | Official | Confirmed |
|
|
30
|
+
| LLM embeddings let members discover posts beyond keyword matches, including from authors they don't follow. This describes retrieval, not guaranteed reach. | Same article | 2026-03-12 | System description | Official | Confirmed |
|
|
31
|
+
| Long dwells, likes, comments and shares are among the actions the ranking model embeds. No relative weights are given. | Same article | 2026-03-12 | Model inputs; relative weights undisclosed | Official | Confirmed |
|
|
32
|
+
| New posts get embeddings in near real time, and embeddings for posts gaining engagement are refreshed. The article sets no one-hour cutoff; that doesn't prove no timing effect exists. | Same article | 2026-03-12 | System description | Official | Confirmed |
|
|
33
|
+
| AI may help with writing, but posts and comments should represent the member's own voice and perspectives. | [LinkedIn: Keeping conversations real](https://news.linkedin.com/2026/keeping-conversations-real-on-linkedin) | 2026-06-04 | Policy statement | Official | Confirmed |
|
|
34
|
+
| Content that appears AI-generated and lacks a clear perspective is less likely to be distributed beyond the author's immediate network. This is LinkedIn's own account, not independently measured, and not a ban on AI assistance. | Same statement | 2026-06-04 | Policy statement | Official | Confirmed |
|
|
35
|
+
|
|
36
|
+
What these rows don't tell you: whether expanding "see more" on a given post is itself a
|
|
37
|
+
ranking signal, how any signal is weighted, or how long a post should be.
|
|
38
|
+
|
|
39
|
+
## LinkedIn: format engagement
|
|
40
|
+
|
|
41
|
+
| Claim as supported | Source | Date | Population / metric | Grade | Verification |
|
|
42
|
+
| --- | --- | --- | --- | --- | --- |
|
|
43
|
+
| Buffer analyzed over 52 million posts across 10 platforms. Its figures describe Buffer-posted content only, and Buffer says it isn't a full-platform view. | [Buffer, State of social media engagement 2026](https://buffer.com/resources/state-of-social-media-engagement-2026/) | 2026-03-05 | Buffer customers' posts | Vendor, observational | Confirmed |
|
|
44
|
+
| Document (PDF carousel) posts had a median engagement rate of 21.77%. | Same report | 2026-03-05 | Median engagement rate, LinkedIn, Buffer sample | Vendor, observational | Confirmed |
|
|
45
|
+
| Video had a median engagement rate of 7.35% and images 6.52%. | Same report | 2026-03-05 | Median engagement rate, LinkedIn, Buffer sample | Vendor, observational | Confirmed |
|
|
46
|
+
| Link posts had a median engagement rate of 3.81% and text posts 3.18%. This compares formats; it does not test a link in the body against a link in a comment. | Same report | 2026-03-05 | Median engagement rate, LinkedIn, Buffer sample | Vendor, observational | Confirmed |
|
|
47
|
+
| Socialinsider's LinkedIn benchmark is built from business pages: 1.3 million posts from 16,645 active pages, January 2024 to December 2025. Different population from personal profiles. | [Socialinsider LinkedIn benchmarks](https://www.socialinsider.io/social-media-benchmarks/linkedin) | Page metadata 2026-03-16 | Business pages | Vendor, observational | Confirmed |
|
|
48
|
+
| In Q2 2026, average engagement rates were: multi-image 6.90%, documents 6.60%, video 5.90%, images 5.20%, text 3.95%. | Same page | Q2 2026 | Average engagement rate. Business pages; Q2 sample size and methodology not established by the cited 2024–2025 population. | Vendor, observational | Checked against source |
|
|
49
|
+
| Documents led 2025 with a 7.00% average engagement rate. | Same page | 2025 | Average engagement rate, business pages | Vendor, observational | Checked against source |
|
|
50
|
+
| For pages with up to 50K followers, multi-image posts had the most impressions per post. This is the only reach finding in this table. | Same page | Live | Impressions per post, pages up to 50K followers | Vendor, observational | Checked against source |
|
|
51
|
+
| The SEO Works reports counting slide-advance clicks in its own carousel engagement calculation; this does not establish Buffer's or Socialinsider's calculation. Not an official LinkedIn metric definition. | [The SEO Works, LinkedIn video vs carousels](https://www.seoworks.co.uk/downloads/data-led-analysis-of-linkedin-video-vs-carousels/) | 2025 sample | One agency's own LinkedIn channel; measurement method | Third-party guidance | Confirmed |
|
|
52
|
+
|
|
53
|
+
Neither dataset reports GIFs or infographics separately. Engagement rate is not reach. The
|
|
54
|
+
SEO Works reports counting slide-advance clicks in its own carousel engagement calculation;
|
|
55
|
+
this does not establish Buffer's or Socialinsider's calculation. Buffer reports medians and
|
|
56
|
+
Socialinsider averages, over different populations, so don't put their numbers side by side
|
|
57
|
+
as if they measured the same thing.
|
|
58
|
+
|
|
59
|
+
## LinkedIn: replies and frequency
|
|
60
|
+
|
|
61
|
+
| Claim as supported | Source | Date | Population / metric | Grade | Verification |
|
|
62
|
+
| --- | --- | --- | --- | --- | --- |
|
|
63
|
+
| Buffer's reply analysis covered nearly 2 million posts from more than 220,000 accounts on six platforms, comparing each account with itself. | [Buffer, State of social media engagement 2026](https://buffer.com/resources/state-of-social-media-engagement-2026/) | 2026-03-05 | Within-account comparison, Buffer sample | Vendor, observational | Confirmed |
|
|
64
|
+
| LinkedIn posts where the account replied to comments had about 30% more engagement than the same account's posts without replies. Buffer says this doesn't mean replies cause it. | Same report | 2026-03-05 | Within-account engagement difference | Vendor, observational | Confirmed |
|
|
65
|
+
| Buffer's LinkedIn frequency analysis covered over 2 million posts from more than 94,000 accounts. The page title says 2026; the page shows a publication date of 2025-08-28. | [Buffer, How often to post on LinkedIn](https://buffer.com/resources/how-often-to-post-on-linkedin/) | 2025-08-28 | Buffer customers' LinkedIn accounts | Vendor, observational | Confirmed (date partly confirmed) |
|
|
66
|
+
| Posting 2 to 5 times a week was associated with 1,182 more impressions per post and a 0.23 percentage-point higher engagement rate than posting once a week. Not causal, and not a minimum anyone must meet. | Same article | 2025-08-28 | Within-account impressions and engagement rate | Vendor, observational | Confirmed |
|
|
67
|
+
|
|
68
|
+
## Length and the preview
|
|
69
|
+
|
|
70
|
+
| Claim as supported | Source | Date | Population / metric | Grade | Verification |
|
|
71
|
+
| --- | --- | --- | --- | --- | --- |
|
|
72
|
+
| In 372,126 personal-profile posts (September 2025 to February 2026), posts of 1,301 to 2,500 characters had 27% higher engagement than posts under 400. Not a company-page result and not causal. | [AuthoredUp, LinkedIn character limit](https://authoredup.com/blog/linkedin-character-limit) | 2026-04-02, updated 2026-08-11 | Engagement rate by character band, personal profiles | Vendor, observational | Confirmed |
|
|
73
|
+
| Median engagement by band: 2.10% at 1 to 400 characters, 2.61% at 1,301 to 2,000, 2.67% at 2,001 to 2,500, 2.62% at 2,501 to 3,000. The curve isn't monotonic. Cite the table; an interactive graphic on the same page shows 2.63% for the last band. | Same page | 2026-08 update | Median engagement rate, personal profiles | Vendor, observational | Confirmed |
|
|
74
|
+
| AuthoredUp, not LinkedIn, reports a 3,000-character post limit and a preview of roughly 210 characters on desktop and 140 on mobile before "see more". These are approximations that depend on the interface. | Same page | 2026-08 update | Interface description | Third-party guidance | Confirmed |
|
|
75
|
+
|
|
76
|
+
## Platform limits
|
|
77
|
+
|
|
78
|
+
| Claim as supported | Source | Date | Population / metric | Grade | Verification |
|
|
79
|
+
| --- | --- | --- | --- | --- | --- |
|
|
80
|
+
| Bluesky's post schema limits text to 300 graphemes and 3,000 UTF-8 bytes. | [AT Protocol post lexicon](https://raw.githubusercontent.com/bluesky-social/atproto/main/lexicons/app/bsky/feed/post.json), units per [lexicon spec](https://atproto.com/specs/lexicon) | Live, unpinned | Hard limit | Official | Confirmed |
|
|
81
|
+
| Mastodon's default limit is 500 characters. Instances can change it. | [Mastodon posting guide](https://docs.joinmastodon.org/user/posting/) | Live | Default limit | Official | Confirmed |
|
|
82
|
+
| An ordinary X post can hold 280 weighted characters; emoji, URLs and some Unicode ranges count differently. The page doesn't cover paid longer posts. | [X character counting](https://docs.x.com/fundamentals/counting-characters) | Live | Hard limit, weighted | Official | Confirmed |
|
|
83
|
+
|
|
84
|
+
## Hacker News
|
|
85
|
+
|
|
86
|
+
| Claim as supported | Source | Date | Population / metric | Grade | Verification |
|
|
87
|
+
| --- | --- | --- | --- | --- | --- |
|
|
88
|
+
| Submit the original source, and generally the original title unless it's misleading or linkbait. | [HN guidelines](https://news.ycombinator.com/newsguidelines.html) | Live | Site rule | Official | Confirmed |
|
|
89
|
+
| Posting your own work part of the time is fine; using HN primarily for promotion is not. | Same page | Live | Site rule | Official | Confirmed |
|
|
90
|
+
| Don't solicit upvotes, comments or submissions. | Same page | Live | Site rule | Official | Confirmed |
|
|
91
|
+
| "Don't post generated text or AI-edited text. HN is for conversation between humans." The rule sits under "In Comments"; the guidelines don't state it for submissions. | Same page | Live | Site rule | Official | Confirmed |
|
|
92
|
+
|
|
93
|
+
Cratis applies the comment rule to everything it posts on HN, submissions included. That is
|
|
94
|
+
Cratis's own stricter policy, not a reading of the guidelines.
|
|
95
|
+
|
|
96
|
+
## Not verified, removed from guidance
|
|
97
|
+
|
|
98
|
+
These appeared in earlier drafts or are commonly quoted. They weren't confirmed in the review
|
|
99
|
+
behind this file, so the skill doesn't rely on them. Check the live source before using any
|
|
100
|
+
of them.
|
|
101
|
+
|
|
102
|
+
- Buffer's "about 83% of profiles performed better when they replied" (same report as above).
|
|
103
|
+
- Buffer's best-time-to-post windows for LinkedIn.
|
|
104
|
+
- Buffer's statement that text led engagement on X in 2025.
|
|
105
|
+
- A Socialinsider sentence that documents and multi-image posts have "consistently
|
|
106
|
+
outperformed" other formats. The quarterly and yearly figures above were checked; the
|
|
107
|
+
sentence was not.
|
|
108
|
+
- LinkedIn Help's image aspect ratios, and the claim that its 1.91:1 figure applies only to
|
|
109
|
+
link previews and ads.
|
|
110
|
+
- The Show HN page's description of what qualifies.
|
|
111
|
+
- Quoted rules from Bluesky's community guidelines, Reddit's rules, Hashnode's code of conduct,
|
|
112
|
+
YouTube Help on thumbnails, and Google Search Central on AI features. The advice to read each
|
|
113
|
+
channel's current rules stands; the quotes were not rechecked.
|
|
114
|
+
|
|
115
|
+
## Accessibility references
|
|
116
|
+
|
|
117
|
+
These are standards cited directly, not engagement evidence.
|
|
118
|
+
|
|
119
|
+
- Alt text for images that carry information:
|
|
120
|
+
[W3C images decision tree](https://www.w3.org/WAI/tutorials/images/decision-tree/).
|
|
121
|
+
- Captions for video: [W3C captions](https://www.w3.org/WAI/media/av/captions/).
|
|
122
|
+
- Contrast of 4.5:1 for normal text and 3:1 for large text:
|
|
123
|
+
[WCAG 2.1 contrast minimum](https://www.w3.org/WAI/WCAG21/Understanding/contrast-minimum.html).
|
|
124
|
+
|
|
125
|
+
## Folklore
|
|
126
|
+
|
|
127
|
+
| Claim | Status | Best source |
|
|
128
|
+
| --- | --- | --- |
|
|
129
|
+
| "LinkedIn suppresses posts with an external link; always put it in the first comment." | Not established. The format figures compare link posts with other formats, not link placement. Keeping links out of the body is an editorial default, with an exception when the reader needs the link. | [Buffer](https://buffer.com/resources/state-of-social-media-engagement-2026/) |
|
|
130
|
+
| "Expanding 'see more' is a ranking signal." | Not disclosed. LinkedIn models reading, dwell and return behavior and publishes no weights; it says nothing about expansion of a single post. | [LinkedIn Engineering](https://www.linkedin.com/blog/engineering/feed/engineering-the-next-generation-of-linkedins-feed) |
|
|
131
|
+
| "The first 60 to 90 minutes decide a post's life." | No fixed window is published. LinkedIn describes refreshing embeddings for posts gaining engagement, and names no cutoff. | [LinkedIn Engineering](https://www.linkedin.com/blog/engineering/feed/engineering-the-next-generation-of-linkedins-feed) |
|
|
132
|
+
| "Saves outrank likes", "use exactly N hashtags", "matching profile keywords unlocks reach." | No weights or counts are published. | [LinkedIn Engineering](https://www.linkedin.com/blog/engineering/feed/engineering-the-next-generation-of-linkedins-feed) |
|
|
133
|
+
| "Carousels always get more reach" / "video is always favored." | Unsupported. The document figures are engagement rates, not reach. The SEO Works reports counting slide-advance clicks in its own carousel engagement calculation; this does not establish Buffer's or Socialinsider's calculation. The one impressions finding favors multi-image posts, and only for pages up to 50K followers. | [Buffer](https://buffer.com/resources/state-of-social-media-engagement-2026/), [Socialinsider](https://www.socialinsider.io/social-media-benchmarks/linkedin), [The SEO Works](https://www.seoworks.co.uk/downloads/data-led-analysis-of-linkedin-video-vs-carousels/) |
|
|
134
|
+
| "Everyone should post 2 to 5 times a week." | An observational association, not a prescription. Capacity and audience differ. | [Buffer](https://buffer.com/resources/how-often-to-post-on-linkedin/) |
|
|
135
|
+
| "Every post must be short" / "1,300 to 2,500 characters wins the algorithm." | Both unsupported. The longer-band result is personal-profile only and correlational. | [AuthoredUp](https://authoredup.com/blog/linkedin-character-limit) |
|
|
136
|
+
| "Using AI to write a post kills its reach." | Overbroad. LinkedIn's statement pairs apparent AI generation with a lack of clear perspective, and allows AI help with wording. | [LinkedIn](https://news.linkedin.com/2026/keeping-conversations-real-on-linkedin) |
|
|
137
|
+
| "HN is a place for polished promotional replies." | Contradicted. HN prohibits generated or AI-edited comments and says the site shouldn't be used primarily for promotion. | [HN guidelines](https://news.ycombinator.com/newsguidelines.html) |
|
|
138
|
+
| "A logo hurts reach" / "a logo guarantees recall." | Neither has been shown for organic developer content. The Cratis mark is an attribution rule, not a growth claim. | None found |
|
|
@@ -3,16 +3,27 @@
|
|
|
3
3
|
"input": "Draft a LinkedIn post about a framework feature and format it for the feed.",
|
|
4
4
|
"fixtures": [],
|
|
5
5
|
"assertions": [
|
|
6
|
-
{ "kind": "skill-contains", "value": "
|
|
6
|
+
{ "kind": "skill-contains", "value": "Line wrapping and blank lines can change what fits in the preview" },
|
|
7
7
|
{ "kind": "skill-contains", "value": "Never use Unicode pseudo-formatting" },
|
|
8
|
-
{ "kind": "skill-contains", "value": "Assistive technology cannot read them" },
|
|
8
|
+
{ "kind": "skill-contains", "value": "Assistive technology cannot read them reliably" },
|
|
9
9
|
{ "kind": "skill-contains", "value": "A brief opening sentence is a hook doing its job" },
|
|
10
|
-
{ "kind": "skill-contains", "value": "No external link in the body" },
|
|
11
10
|
{ "kind": "skill-contains", "value": "No engagement bait" },
|
|
12
|
-
{ "kind": "skill-contains", "value": "unofficial
|
|
13
|
-
{ "kind": "skill-contains", "value": "
|
|
14
|
-
{ "kind": "skill-contains", "value": "
|
|
15
|
-
{ "kind": "skill-contains", "value": "
|
|
16
|
-
{ "kind": "skill-contains", "value": "
|
|
11
|
+
{ "kind": "skill-contains", "value": "unofficial" },
|
|
12
|
+
{ "kind": "skill-contains", "value": "publishes no weights for them" },
|
|
13
|
+
{ "kind": "skill-contains", "value": "keep external links out of the body by default" },
|
|
14
|
+
{ "kind": "skill-contains", "value": "Lead with media on LinkedIn" },
|
|
15
|
+
{ "kind": "skill-contains", "value": "an open hypothesis that Cratis is measuring" },
|
|
16
|
+
{ "kind": "skill-contains", "value": "Brand every asset with the Cratis mark" },
|
|
17
|
+
{ "kind": "skill-contains", "value": "framed, never stamped" },
|
|
18
|
+
{ "kind": "skill-contains", "value": "on every frame of a GIF, because the feed can show any" },
|
|
19
|
+
{ "kind": "skill-contains", "value": "Leave the logo out of alt text" },
|
|
20
|
+
{ "kind": "skill-contains", "value": "Plan for the author to answer comments" },
|
|
21
|
+
{ "kind": "skill-contains", "value": "is rewritten for it, not cross-posted" },
|
|
22
|
+
{ "kind": "skill-contains", "value": "Cratis's own stricter policy" },
|
|
23
|
+
{ "kind": "skill-contains", "value": "Nothing is ever published, scheduled or replied to by an agent" },
|
|
24
|
+
{ "kind": "skill-contains", "value": "How long the post should be: **cratis-content-length**" },
|
|
25
|
+
{ "kind": "skill-contains", "value": "Run the voice review with **cratis-writing-voice-and-cadence**" },
|
|
26
|
+
{ "kind": "skill-contains", "value": "belong in the same feed, and a feed where every post is the same length reads as a template" },
|
|
27
|
+
{ "kind": "skill-contains", "value": "**cratis-developer-marketing**" }
|
|
17
28
|
]
|
|
18
29
|
}
|