Pre-publish human-signal gate for social media drafts. Use when /linkedin or /x-com is about to publish a post, or when asked to run an authenticity check on any draft file.
Scanned 9/2/2026
Install to Claude Code
npx -y skills add tomcounsell/ai --skill authenticity-pass --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Authenticity Pass?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/tomcounsell-authenticity-pass)More formats (shields.io, HTML) on the badges page.
---
name: authenticity-pass
description: "Pre-publish human-signal gate for social media drafts. Use when /linkedin or /x-com is about to publish a post, or when asked to run an authenticity check on any draft file."
allowed-tools: Read, Bash, Write
user-invocable: true
argument-hint: "[draft-file-path]"
---
# Authenticity Pass
A mandatory pre-publish gate. Reads the draft, scores it against three human-signal markers, and returns a structured PASS or BLOCK verdict with specific remediation.
The cold-reader loop (in `/linkedin` and `/x-com`) handles style, register, and audience fit. This gate handles one thing only: does this content carry signal that proves a human with real experience wrote it?
## Input
**Called by `/linkedin`:** reads `/tmp/linkedin-post.txt`
**Called by `/x-com`:** reads `/tmp/x-post.txt`
**Called directly:** reads the file path given as argument, or prompts if none.
If the file doesn't exist or is empty, return BLOCK with reason "no draft found."
---
## The three human-signal markers
### 1. METRIC
A specific, defensible number. Vague intensifiers don't count.
| COUNTS | DOES NOT COUNT |
|--------|----------------|
| "8s → 600ms" | "significantly faster" |
| "412 restarts in a week" | "restarted many times" |
| "30% fewer impressions" | "fewer impressions" |
| "200 to 3,000 followers in 4 months" | "huge growth" |
| "$53k per violation" | "large fines" |
| "5 hours/week" | "a few hours" |
### 2. CONSTRAINT
An acknowledged limitation, failure, or honest tradeoff. The post must admit something didn't work, costs something, only applies under conditions, or was a hard call.
| COUNTS | DOES NOT COUNT |
|--------|----------------|
| "broke in prod until we added X" | pure success framing |
| "only works if Y is true" | "works great" |
| "costs 3× more than the naive approach" | "it's efficient" |
| "we tried Z first and it failed" | "we built X and it works" |
| "the tradeoff is losing P to gain Q" | generic capability summary |
| "this breaks when load exceeds N" | no conditions named |
### 3. OPINION
A clear point of view the author holds that could be argued against. Factual description is not opinion.
| COUNTS | DOES NOT COUNT |
|--------|----------------|
| "most teams underestimate this cost" | "here's how it works" |
| "I'd do this differently now" | "we built X" |
| "the real bottleneck is Y not Z" | neutral summary |
| "this approach is better when..." | "both approaches have merit" |
| "the industry is getting this backwards" | "there are different schools of thought" |
---
## Gate criteria
**LinkedIn / long-form (post body > 280 chars):**
- PASS = all three markers present
- BLOCK = any marker missing
**X / short-form (post body ≤ 280 chars):**
- PASS = at least METRIC or CONSTRAINT is present
- BLOCK = zero markers present (pure framing with no grounding)
Replies on either platform follow the X/short-form rule.
---
## Verdict format
Return exactly this structure, nothing else:
```
AUTHENTICITY VERDICT: PASS
MARKERS:
METRIC: FOUND — "the exact phrase from the draft"
CONSTRAINT: FOUND — "the exact phrase from the draft"
OPINION: FOUND — "the exact phrase from the draft"
→ CLEARED FOR PUBLISH
```
Or on failure:
```
AUTHENTICITY VERDICT: BLOCK
MARKERS:
METRIC: FOUND — "..." / MISSING
CONSTRAINT: FOUND — "..." / MISSING
OPINION: FOUND — "..." / MISSING
BLOCKING GAPS:
[List only the missing markers]
TO UNBLOCK:
[One specific, actionable suggestion per missing marker. Not "add a metric" —
instead: "from the source material, the number X (e.g. 'we ran Y tests in Z seconds')
would satisfy METRIC" or "naming the failure mode ('this breaks when...') would
satisfy CONSTRAINT." Pull from what you know about the content's context.]
```
Do not editorialize beyond this format. Style is the cold-reader loop's job.
---
## What the calling skill does with the verdict
- **PASS** → proceed to publish
- **BLOCK** → return the draft to the drafter subagent with the BLOCKING GAPS as revision instructions. The drafter revises and the authenticity-pass is re-invoked on the new draft.
- **After 2 BLOCK→revise cycles with no PASS** → drop the post. The source material is too generic; no amount of editing will manufacture signal that isn't there.
The 2-retry cap matters. A post that needs three authenticity loops to find one real number is a post without an angle. Better to ship nothing than to manufacture false specificity.
---
## Why this gate exists
Platform algorithms measurably punish AI-generic content: pure-AI posts earn 30-40% fewer LinkedIn impressions (360Brew practitioner data), and X's Phoenix algorithm suppresses low-variation automated posting. The three markers are the minimum human-signal footprint that distinguishes "AI helped me write this" from "AI wrote this instead of me" (Yudame Research, AI content marketing report, May 2026).
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!