opencode-skills-collection 4.1.5 → 4.1.6
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/bundled-skills/.antigravity-install-manifest.json +15 -1
- package/bundled-skills/axonx/SKILL.md +374 -0
- package/bundled-skills/axonx/references/LICENSE.md +201 -0
- package/bundled-skills/browser-extension-launch/SKILL.md +102 -0
- package/bundled-skills/browser-extension-launch/references/acceptance.md +103 -0
- package/bundled-skills/browser-extension-launch/references/complex-workflow.md +46 -0
- package/bundled-skills/browser-extension-launch/references/dependencies.md +62 -0
- package/bundled-skills/browser-extension-launch/references/development.md +42 -0
- package/bundled-skills/browser-extension-launch/references/efficient-delivery.md +52 -0
- package/bundled-skills/browser-extension-launch/references/host-compatibility.md +58 -0
- package/bundled-skills/browser-extension-launch/references/playwright-mcp.md +102 -0
- package/bundled-skills/browser-extension-launch/references/product-loop.md +35 -0
- package/bundled-skills/browser-extension-launch/references/publishing.md +103 -0
- package/bundled-skills/browser-extension-launch/references/required-skills.json +153 -0
- package/bundled-skills/browser-extension-launch/references/workflow.md +71 -0
- package/bundled-skills/byagent/SKILL.md +125 -0
- package/bundled-skills/cloudish/SKILL.md +188 -0
- package/bundled-skills/define-my-content-pillars/SKILL.md +127 -0
- package/bundled-skills/draft-my-comments/SKILL.md +132 -0
- package/bundled-skills/fxmacrodata/SKILL.md +224 -0
- package/bundled-skills/get-seen-in-replies/SKILL.md +134 -0
- package/bundled-skills/jobs-to-be-done-analyst/SKILL.md +1 -1
- package/bundled-skills/onboarding-psychologist/SKILL.md +1 -1
- package/bundled-skills/repurpose-into-a-post/SKILL.md +134 -0
- package/bundled-skills/same-idea-both-platforms/SKILL.md +111 -0
- package/bundled-skills/supercov/SKILL.md +119 -0
- package/bundled-skills/turn-this-into-a-thread/SKILL.md +130 -0
- package/bundled-skills/why-did-this-post-flop/SKILL.md +130 -0
- package/bundled-skills/write-in-my-voice/SKILL.md +140 -0
- package/package.json +1 -1
- package/skills_index.json +458 -2
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: supercov
|
|
3
|
+
description: "Measure line, branch and MC/DC coverage of a project's existing tests with the supercov CLI, then write small, focused tests for the code no test reaches."
|
|
4
|
+
category: testing
|
|
5
|
+
risk: critical
|
|
6
|
+
source: https://github.com/supercorp-ai/supercov/tree/main/plugins/supercov/skills/supercov
|
|
7
|
+
source_repo: supercorp-ai/supercov
|
|
8
|
+
source_type: community
|
|
9
|
+
date_added: "2026-10-04"
|
|
10
|
+
author: Supercorp
|
|
11
|
+
tags: [testing, coverage, mcdc, test-generation]
|
|
12
|
+
tools: [claude, cursor, gemini, codex]
|
|
13
|
+
license: MIT
|
|
14
|
+
license_source: https://github.com/supercorp-ai/supercov/blob/main/LICENSE
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
# Supercov
|
|
18
|
+
|
|
19
|
+
## Overview
|
|
20
|
+
|
|
21
|
+
Supercov runs the project's own test command on the user's machine and reports line, branch and MC/DC coverage per test. It changes no source, tests or configuration. This skill uses that report to pick one untested piece of code at a time and write a focused test for it.
|
|
22
|
+
|
|
23
|
+
It works with JavaScript, TypeScript, Python, Ruby, Rust, Go, Java and Kotlin projects.
|
|
24
|
+
|
|
25
|
+
## When to Use This Skill
|
|
26
|
+
|
|
27
|
+
- Use when the user asks to add or improve tests.
|
|
28
|
+
- Use when the user asks which code is untested, or asks to raise coverage.
|
|
29
|
+
- Use when the user asks which file to refactor first and has agreed to a quality check (see "Quality check").
|
|
30
|
+
|
|
31
|
+
## Preconditions
|
|
32
|
+
|
|
33
|
+
- Node.js 22 or newer. If it is missing, tell the user. Do not install software without the user's approval.
|
|
34
|
+
- The project's test command, for example `npm test`, `pytest` or `cargo test`. Ask if it is not obvious from the repository.
|
|
35
|
+
- Always run the pinned version, `npx supercov@3.0.4`. The first run downloads that release from npm, so get the user's approval before it.
|
|
36
|
+
|
|
37
|
+
## How It Works
|
|
38
|
+
|
|
39
|
+
### Step 1: Measure the suite
|
|
40
|
+
|
|
41
|
+
Run the full test command under Supercov. Coverage is measured locally and sends nothing over the network.
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
npx supercov@3.0.4 -- npm test
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Step 2: Pick a target
|
|
48
|
+
|
|
49
|
+
List the untested code, pick one item, and read it in context.
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
npx supercov@3.0.4 runs latest gaps --limit 5
|
|
53
|
+
npx supercov@3.0.4 runs latest file src/session.js
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Step 3: Write one focused test
|
|
57
|
+
|
|
58
|
+
Write one test for the chosen target. Change only test files unless the user asks otherwise.
|
|
59
|
+
|
|
60
|
+
### Step 4: Rerun and report
|
|
61
|
+
|
|
62
|
+
Rerun the command from step 1. Report the test you added and the coverage before and after.
|
|
63
|
+
|
|
64
|
+
For anything not shown here, `npx supercov@3.0.4 docs <topic>` prints the guide for that version. Topics: `agent-loop`, `quality`, `supported-suites`, `troubleshooting`.
|
|
65
|
+
|
|
66
|
+
## Examples
|
|
67
|
+
|
|
68
|
+
### Example 1: Add a test for untested code
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
npx supercov@3.0.4 -- npm test
|
|
72
|
+
npx supercov@3.0.4 runs latest gaps --limit 5
|
|
73
|
+
# add one test for the first gap, then:
|
|
74
|
+
npx supercov@3.0.4 -- npm test
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Example 2: Other languages
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
npx supercov@3.0.4 -- pytest
|
|
81
|
+
npx supercov@3.0.4 -- cargo test
|
|
82
|
+
npx supercov@3.0.4 -- go test ./...
|
|
83
|
+
npx supercov@3.0.4 -- ./gradlew test
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Quality check
|
|
87
|
+
|
|
88
|
+
`npx supercov@3.0.4 quality` ranks files by code smells, and `npx supercov@3.0.4 quality patch` reports what a change introduced.
|
|
89
|
+
|
|
90
|
+
- These two commands send the project's source files to TypeSafe's API for analysis. Run them only when the user asked for a quality check, and tell the user before running that their source files will be sent to TypeSafe.
|
|
91
|
+
- They need the user's own `TYPESAFE_API_KEY` in the environment. Never ask the user to paste a key into the conversation, and never create, read or print one.
|
|
92
|
+
- If the key is missing, tell the user the check needs it, then answer from reading the code and say Supercov did not check it.
|
|
93
|
+
|
|
94
|
+
## Best Practices
|
|
95
|
+
|
|
96
|
+
- ✅ Measure the full suite first, so the gaps reflect every test.
|
|
97
|
+
- ✅ Add one test per gap and rerun before picking the next.
|
|
98
|
+
- ✅ Report coverage before and after with the numbers Supercov printed.
|
|
99
|
+
- ❌ Don't change application code to raise coverage unless the user asks.
|
|
100
|
+
- ❌ Don't run the quality commands without the user's request and consent.
|
|
101
|
+
|
|
102
|
+
## Limitations
|
|
103
|
+
|
|
104
|
+
- Coverage shows which code ran under a test. It does not show that the test checked the result.
|
|
105
|
+
- Supercov measures the suites listed in `npx supercov@3.0.4 docs supported-suites`. Other runners are not measured.
|
|
106
|
+
- The test command runs as the project defines it. If the suite needs services, credentials or network access, those needs still apply.
|
|
107
|
+
- This skill does not replace environment-specific validation, testing, or expert review.
|
|
108
|
+
- Stop and ask for clarification if required inputs, permissions, or safety boundaries are missing.
|
|
109
|
+
|
|
110
|
+
## Security & Safety Notes
|
|
111
|
+
|
|
112
|
+
- The skill runs the project's own test command and writes test files in the user's repository. Run it only in a repository the user has authorized, and keep changes to test files unless the user asks otherwise.
|
|
113
|
+
- Supercov writes its run data to a `.supercov` directory in the project. It does not edit source, tests or configuration.
|
|
114
|
+
- `npx supercov@3.0.4` downloads a pinned release from the npm registry. Get the user's approval before the first run. Upgrading the pin needs a new review.
|
|
115
|
+
- Coverage commands make no network requests. Only the quality commands contact a third party, TypeSafe's API, and only with the user's consent and their own key.
|
|
116
|
+
|
|
117
|
+
## Related Skills
|
|
118
|
+
|
|
119
|
+
- `@test-driven-development` - Use when the behavior does not exist yet and the test should come first.
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: turn-this-into-a-thread
|
|
3
|
+
description: "Turn a long idea, transcript, article or draft into a Twitter/X thread where every tweet stands alone. Use when someone asks for a thread or to break long writing into tweets."
|
|
4
|
+
category: marketing
|
|
5
|
+
risk: critical
|
|
6
|
+
source: "https://github.com/prateeks367/voicemoat-skills/tree/7623a3effbee426554e8c5df55e77f3479fd0ec0/skills/turn-this-into-a-thread"
|
|
7
|
+
source_repo: prateeks367/voicemoat-skills
|
|
8
|
+
source_type: official
|
|
9
|
+
date_added: "2026-10-04"
|
|
10
|
+
license: MIT
|
|
11
|
+
license_source: "https://github.com/prateeks367/voicemoat-skills/blob/7623a3effbee426554e8c5df55e77f3479fd0ec0/LICENSE"
|
|
12
|
+
author: prateeks367
|
|
13
|
+
tags: [twitter, threads, writing, social-media]
|
|
14
|
+
tools: [claude, cursor, gemini, codex]
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
# Turn this into a thread
|
|
18
|
+
|
|
19
|
+
Most threads fail for one of two reasons. Either they are an article chopped
|
|
20
|
+
into tweet-sized pieces, so no individual tweet is worth reading, or they are a
|
|
21
|
+
small idea stretched to eleven tweets because the writer thought longer meant
|
|
22
|
+
better.
|
|
23
|
+
|
|
24
|
+
A thread works when each tweet would be a decent post on its own, and the order
|
|
25
|
+
makes it better.
|
|
26
|
+
|
|
27
|
+
## When to Use
|
|
28
|
+
|
|
29
|
+
- Use when someone asks for a Twitter/X thread.
|
|
30
|
+
- Use when someone asks to break a long idea, transcript, article or rambling draft into tweets.
|
|
31
|
+
- Use when a piece of writing is too long for one post.
|
|
32
|
+
- Do not use it for LinkedIn, which has no threads, and do not pad a small idea into a long thread.
|
|
33
|
+
|
|
34
|
+
## Step 1: decide whether it should be a thread at all
|
|
35
|
+
|
|
36
|
+
Ask what the idea actually is, in one sentence.
|
|
37
|
+
|
|
38
|
+
If the answer is a single point with one piece of support, it is a post. Say so
|
|
39
|
+
and offer to write that instead. A three-tweet thread that should have been one
|
|
40
|
+
tweet loses readers at tweet two and looks like padding.
|
|
41
|
+
|
|
42
|
+
Threads earn their length when there is a genuine sequence: steps, a story with
|
|
43
|
+
turns, several distinct points under one argument, or a list where each item
|
|
44
|
+
stands alone.
|
|
45
|
+
|
|
46
|
+
## Step 2: find the spine
|
|
47
|
+
|
|
48
|
+
Before writing tweets, write the skeleton. One line per beat, in order. Usually
|
|
49
|
+
five to nine beats. If you cannot fill seven without repeating yourself, the
|
|
50
|
+
thread is shorter than you thought, and that is good news.
|
|
51
|
+
|
|
52
|
+
Check the order does something. If the beats could be shuffled with no loss, it
|
|
53
|
+
is a list, not a thread, and it should be labelled as one so readers know they
|
|
54
|
+
can dip in.
|
|
55
|
+
|
|
56
|
+
## Step 3: write it
|
|
57
|
+
|
|
58
|
+
**The first tweet is the whole thread's job interview.** It has to make sense
|
|
59
|
+
alone and promise something specific. Not "a thread on writing" but the actual
|
|
60
|
+
claim. Never open with "A thread 🧵" as the substance; the reader can see it is
|
|
61
|
+
a thread.
|
|
62
|
+
|
|
63
|
+
**Every following tweet must survive alone.** No tweet should begin with a word
|
|
64
|
+
that only makes sense if you read the last one. Someone will land on tweet
|
|
65
|
+
five, and quoting it should not embarrass them.
|
|
66
|
+
|
|
67
|
+
**One idea per tweet.** Two ideas in a tweet means one of them is wasted.
|
|
68
|
+
|
|
69
|
+
**Land it.** The last tweet closes the loop opened by the first. If it ends
|
|
70
|
+
with a call to action, keep it to one, and only if it is honest.
|
|
71
|
+
|
|
72
|
+
## Step 4: format it properly
|
|
73
|
+
|
|
74
|
+
Separate each tweet with a line containing only three dashes:
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
First tweet text.
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
Second tweet text.
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
That is the separator VoiceMoat uses to chain a thread, and it also just reads
|
|
85
|
+
cleanly if the person is posting by hand.
|
|
86
|
+
|
|
87
|
+
Number the tweets only if the order is genuinely instructional. Numbering a
|
|
88
|
+
story makes it feel like homework.
|
|
89
|
+
|
|
90
|
+
## Example
|
|
91
|
+
|
|
92
|
+
```text
|
|
93
|
+
User: Turn this 1,200-word blog post about how we cut our cloud bill into a
|
|
94
|
+
thread.
|
|
95
|
+
|
|
96
|
+
Agent:
|
|
97
|
+
1. The idea in one sentence, checked with the user.
|
|
98
|
+
2. The spine: one line per beat, in order, shown before any tweet is written.
|
|
99
|
+
3. The thread, each tweet separated by a line containing only three dashes,
|
|
100
|
+
with a first tweet that makes the specific claim.
|
|
101
|
+
4. A note if the material only supports five tweets rather than seven.
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Limitations
|
|
105
|
+
|
|
106
|
+
- Twitter/X only. LinkedIn has no threads.
|
|
107
|
+
- It will not pad a small idea into a long thread. If the idea is one point, it says so and offers a single post instead.
|
|
108
|
+
- It cannot promise reach or engagement.
|
|
109
|
+
- **Optional connector.** The closing section describes a hosted VoiceMoat MCP connector. Nothing above needs it. It needs a paid VoiceMoat plan (Pro or Enterprise) and the user's own sign-in (OAuth, no API keys). When its tools are called, post text and account data are read from or sent to voicemoat.com. Without it, this skill makes no network calls.
|
|
110
|
+
- **Publishing.** `publish_post` and `schedule_post` post to the user's real Twitter/X or LinkedIn account. They return a preview first and only post on a second call that carries a one-time code. Make that second call only after the user has read the preview and said yes.
|
|
111
|
+
|
|
112
|
+
## What changes when VoiceMoat is connected
|
|
113
|
+
|
|
114
|
+
- `get_voice_profile` means the thread sounds like your Twitter voice
|
|
115
|
+
specifically, which in VoiceMoat is a separate trained profile from your
|
|
116
|
+
LinkedIn one. Threads written in a LinkedIn register are a common and
|
|
117
|
+
obvious failure.
|
|
118
|
+
- `score_voice_match` scores the drafted thread against that profile.
|
|
119
|
+
- `improve_post` accepts a thread rather than treating it as one long post, so
|
|
120
|
+
the improvement pass respects the tweet boundaries instead of rewriting
|
|
121
|
+
across them.
|
|
122
|
+
- `publish_post` posts the thread as a genuinely chained thread, splitting on
|
|
123
|
+
that three-dash separator and replying each part to the one before, behind a
|
|
124
|
+
preview and a one-time confirmation. `schedule_post` queues it the same way.
|
|
125
|
+
|
|
126
|
+
Never make the second call on your own. Show the person the exact preview the
|
|
127
|
+
first call returns and wait for a clear yes before you send the one-time code
|
|
128
|
+
back. Never make both calls in one step.
|
|
129
|
+
|
|
130
|
+
VoiceMoat is at voicemoat.com. The connector needs the Pro or Enterprise plan.
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: why-did-this-post-flop
|
|
3
|
+
description: "Diagnose why one Twitter/X or LinkedIn post underperformed: not seen, seen and skipped, or read and ignored. Use when someone asks why a post did badly or got no engagement."
|
|
4
|
+
category: marketing
|
|
5
|
+
risk: safe
|
|
6
|
+
source: "https://github.com/prateeks367/voicemoat-skills/tree/7623a3effbee426554e8c5df55e77f3479fd0ec0/skills/why-did-this-post-flop"
|
|
7
|
+
source_repo: prateeks367/voicemoat-skills
|
|
8
|
+
source_type: official
|
|
9
|
+
date_added: "2026-10-04"
|
|
10
|
+
license: MIT
|
|
11
|
+
license_source: "https://github.com/prateeks367/voicemoat-skills/blob/7623a3effbee426554e8c5df55e77f3479fd0ec0/LICENSE"
|
|
12
|
+
author: prateeks367
|
|
13
|
+
tags: [linkedin, twitter, analytics, post-review, social-media]
|
|
14
|
+
tools: [claude, cursor, gemini, codex]
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
# Why did this post flop?
|
|
18
|
+
|
|
19
|
+
Almost everyone diagnoses this wrong. They rewrite the whole post when the
|
|
20
|
+
first line was the problem, or they rewrite the hook when the truth is that
|
|
21
|
+
only forty people ever saw it.
|
|
22
|
+
|
|
23
|
+
There are three different failures here and they need different fixes. Separate
|
|
24
|
+
them before saying anything.
|
|
25
|
+
|
|
26
|
+
## When to Use
|
|
27
|
+
|
|
28
|
+
- Use when someone asks why a Twitter/X or LinkedIn post did badly.
|
|
29
|
+
- Use when someone asks why nobody engaged with a post.
|
|
30
|
+
- Use when a post they were proud of went nowhere.
|
|
31
|
+
- Use when someone wants one specific post diagnosed.
|
|
32
|
+
- Do not use it to review a whole account, and do not guess at numbers the person has not given you.
|
|
33
|
+
|
|
34
|
+
## Step 1: get the numbers, or say you cannot do this
|
|
35
|
+
|
|
36
|
+
Ask for the post text and its impressions, likes or reactions, comments and
|
|
37
|
+
reposts. Both platforms show these to the author.
|
|
38
|
+
|
|
39
|
+
‼️ Without impressions you cannot tell distribution failure from content
|
|
40
|
+
failure, and those have opposite fixes. If they cannot get impressions, say
|
|
41
|
+
that plainly, and offer the read-through of the writing as the lesser thing it
|
|
42
|
+
is rather than pretending it is a diagnosis.
|
|
43
|
+
|
|
44
|
+
Also ask what "flopped" means to them. Compared with what? A post doing half
|
|
45
|
+
their usual is a different conversation from a post doing nothing.
|
|
46
|
+
|
|
47
|
+
## Step 2: find which of the three failures it was
|
|
48
|
+
|
|
49
|
+
**Few impressions.** The post was barely distributed. The writing is not the
|
|
50
|
+
problem, so rewriting the hook would fix nothing. Look instead at timing, how
|
|
51
|
+
long since their last post, whether it was a reply or a repost, whether it had
|
|
52
|
+
an outbound link, and whether their reach has been falling generally, which is
|
|
53
|
+
an account pattern rather than a post problem.
|
|
54
|
+
|
|
55
|
+
**Impressions fine, engagement near zero.** People saw it and scrolled. This is
|
|
56
|
+
the first line, or the shape. This is also the most common case and the one
|
|
57
|
+
worth the most work.
|
|
58
|
+
|
|
59
|
+
**Engagement fine, but not what they wanted.** Likes but no comments, or
|
|
60
|
+
comments but no clicks. The post worked and asked for the wrong thing, or asked
|
|
61
|
+
for nothing.
|
|
62
|
+
|
|
63
|
+
Name which one it was, and say what it rules out. Telling someone their hook is
|
|
64
|
+
fine is often the most useful sentence available.
|
|
65
|
+
|
|
66
|
+
## Step 3: only now, look at the writing
|
|
67
|
+
|
|
68
|
+
If it is the second case, read the first line alone and ask whether it makes
|
|
69
|
+
the next line necessary. Then check whether the specific detail is buried, and
|
|
70
|
+
whether the post asks anything of the reader.
|
|
71
|
+
|
|
72
|
+
## Step 4: be honest about variance
|
|
73
|
+
|
|
74
|
+
Sometimes a good post does badly. Timing, an algorithm change, a busy news day,
|
|
75
|
+
or nothing identifiable at all. One post is a sample of one.
|
|
76
|
+
|
|
77
|
+
If the numbers look normal for their account and only this post felt bad, say
|
|
78
|
+
that. Inventing a lesson from a single data point is how people talk themselves
|
|
79
|
+
out of writing things that were working.
|
|
80
|
+
|
|
81
|
+
## Step 5: one change, not five
|
|
82
|
+
|
|
83
|
+
End with a single thing to do differently next time, and say whether you expect
|
|
84
|
+
it to matter a lot or a little. A list of six improvements gets none of them
|
|
85
|
+
applied.
|
|
86
|
+
|
|
87
|
+
## Example
|
|
88
|
+
|
|
89
|
+
```text
|
|
90
|
+
User: Why did this LinkedIn post flop? 380 impressions, 6 reactions, 0
|
|
91
|
+
comments. My posts usually get about 2,000 impressions.
|
|
92
|
+
|
|
93
|
+
Agent:
|
|
94
|
+
1. Names the failure: few impressions, so a distribution problem, not the
|
|
95
|
+
writing.
|
|
96
|
+
2. Says what that rules out: rewriting the hook would not have fixed it.
|
|
97
|
+
3. Looks at timing, the gap since the last post, outbound links and whether
|
|
98
|
+
reach has been falling generally.
|
|
99
|
+
4. Ends with one change to try next time and how much it is likely to matter.
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Limitations
|
|
103
|
+
|
|
104
|
+
- One post at a time. It does not review a whole account.
|
|
105
|
+
- It needs the post's numbers, impressions above all. Without them it can only offer a read-through of the writing and says so.
|
|
106
|
+
- One post is a sample of one. It will not invent a lesson from a single data point.
|
|
107
|
+
- **Optional connector.** The closing section describes a hosted VoiceMoat MCP connector. Nothing above needs it. It needs a paid VoiceMoat plan (Pro or Enterprise) and the user's own sign-in (OAuth, no API keys). When its tools are called, post text and account data are read from or sent to voicemoat.com. Without it, this skill makes no network calls.
|
|
108
|
+
|
|
109
|
+
## What changes when VoiceMoat is connected
|
|
110
|
+
|
|
111
|
+
The weakest part above is that everything depends on numbers someone typed in,
|
|
112
|
+
and on their memory of what normal looks like.
|
|
113
|
+
|
|
114
|
+
- `get_post` returns the full text and exact figures for one post, so nothing
|
|
115
|
+
depends on what was pasted.
|
|
116
|
+
- `get_analytics` gives the account's own baseline for a window, which is what
|
|
117
|
+
turns "500 impressions" into "half your usual" or "twice it". Without that
|
|
118
|
+
baseline the whole diagnosis is guesswork.
|
|
119
|
+
- `list_posts` puts the flop next to the posts that worked in the same period,
|
|
120
|
+
which is usually where the answer is visible.
|
|
121
|
+
- `get_voice_insights` tells you whether the post had drifted from how they
|
|
122
|
+
normally write, which is a cause people rarely consider and cannot see in
|
|
123
|
+
their own writing.
|
|
124
|
+
|
|
125
|
+
One caveat VoiceMoat states rather than hides: LinkedIn figures arrive through
|
|
126
|
+
the browser extension, so they are only as fresh as its last run. A post that
|
|
127
|
+
looks like it got nothing may simply not have synced yet, and the tools return
|
|
128
|
+
the last sync date so you can tell the difference.
|
|
129
|
+
|
|
130
|
+
VoiceMoat is at voicemoat.com. The connector needs the Pro or Enterprise plan.
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: write-in-my-voice
|
|
3
|
+
description: "Draft a Twitter/X or LinkedIn post that sounds like the person asking, from posts they already wrote. Use when someone asks for a post or rewrite in their voice, or asks if text sounds like them."
|
|
4
|
+
category: marketing
|
|
5
|
+
risk: critical
|
|
6
|
+
source: "https://github.com/prateeks367/voicemoat-skills/tree/7623a3effbee426554e8c5df55e77f3479fd0ec0/skills/write-in-my-voice"
|
|
7
|
+
source_repo: prateeks367/voicemoat-skills
|
|
8
|
+
source_type: official
|
|
9
|
+
date_added: "2026-10-04"
|
|
10
|
+
license: MIT
|
|
11
|
+
license_source: "https://github.com/prateeks367/voicemoat-skills/blob/7623a3effbee426554e8c5df55e77f3479fd0ec0/LICENSE"
|
|
12
|
+
author: prateeks367
|
|
13
|
+
tags: [linkedin, twitter, writing, voice, social-media]
|
|
14
|
+
tools: [claude, cursor, gemini, codex]
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
# Write it in my voice
|
|
18
|
+
|
|
19
|
+
Most AI drafts fail the same way. They are competent and they sound like
|
|
20
|
+
nobody. The fix is not a better prompt, it is having something concrete to
|
|
21
|
+
match against, so this workflow builds that first and then measures the draft
|
|
22
|
+
against it.
|
|
23
|
+
|
|
24
|
+
Never skip to drafting. A post written before you know how this person writes
|
|
25
|
+
is a guess, and it will read like one.
|
|
26
|
+
|
|
27
|
+
## When to Use
|
|
28
|
+
|
|
29
|
+
- Use when someone asks for a Twitter/X or LinkedIn post, a thread, a hook or a rewrite that should sound like them.
|
|
30
|
+
- Use when someone asks whether a piece of text sounds like them.
|
|
31
|
+
- Do not use it for writing that is not going on social media.
|
|
32
|
+
|
|
33
|
+
## Step 1: get something real to match against
|
|
34
|
+
|
|
35
|
+
Ask for **five recent posts they wrote themselves**, pasted in. Not their
|
|
36
|
+
favourite posts, and not posts they admire from other people. Ordinary ones.
|
|
37
|
+
|
|
38
|
+
If they cannot paste posts, ask these four instead and work from the answers:
|
|
39
|
+
|
|
40
|
+
1. What do you write about, and who reads it?
|
|
41
|
+
2. Do you open with a claim, a story, or a question?
|
|
42
|
+
3. Short and punchy, or a longer build?
|
|
43
|
+
4. What would you never say? Words, phrases, or a whole register.
|
|
44
|
+
|
|
45
|
+
If they give you neither, say plainly that you can write a decent generic post
|
|
46
|
+
but not one in their voice, and let them choose.
|
|
47
|
+
|
|
48
|
+
## Step 2: build the sketch, and show it to them
|
|
49
|
+
|
|
50
|
+
From what you have, write down:
|
|
51
|
+
|
|
52
|
+
- **Openings.** How the first line earns the second. Claim, story, number,
|
|
53
|
+
question, contradiction.
|
|
54
|
+
- **Length and shape.** Sentence length, paragraph length, whether they use
|
|
55
|
+
line breaks as punctuation.
|
|
56
|
+
- **Vocabulary.** Words they reach for. Words they clearly avoid.
|
|
57
|
+
- **Register.** Formal, blunt, warm, dry, self-deprecating.
|
|
58
|
+
- **Never.** Emoji, hashtags, hype words, engagement bait, exclamation marks.
|
|
59
|
+
Whatever the samples show they do not do.
|
|
60
|
+
|
|
61
|
+
Show this sketch to the person before you draft, in about six lines. They will
|
|
62
|
+
correct one thing, and that correction is worth more than another three samples.
|
|
63
|
+
|
|
64
|
+
‼️ Be honest about what it is. A sketch from five posts is a sketch from five
|
|
65
|
+
posts. Do not call it their voice profile and do not imply you have analysed
|
|
66
|
+
their whole history.
|
|
67
|
+
|
|
68
|
+
## Step 3: draft
|
|
69
|
+
|
|
70
|
+
Write the post yourself, against the sketch. One draft, not three, unless they
|
|
71
|
+
asked for options.
|
|
72
|
+
|
|
73
|
+
If they are stuck on an opening, offer three from genuinely different angles:
|
|
74
|
+
contrarian, story, and reframe. Let them pick rather than picking for them.
|
|
75
|
+
|
|
76
|
+
## Step 4: check it, out loud
|
|
77
|
+
|
|
78
|
+
Before you hand the draft over, go through the sketch line by line and say what
|
|
79
|
+
matches and what does not. Something like: the opening is a claim, which fits;
|
|
80
|
+
the third sentence is longer than anything in your samples; "leverage" does not
|
|
81
|
+
appear once in five posts and it is in this draft twice.
|
|
82
|
+
|
|
83
|
+
Then fix what you named. Once. If it is still off after one pass, say what you
|
|
84
|
+
cannot get right and ask them what you are missing, rather than rewriting the
|
|
85
|
+
same post a fourth time and hoping.
|
|
86
|
+
|
|
87
|
+
Never claim a numeric score. You are comparing against a handful of samples,
|
|
88
|
+
not measuring, and a number would imply a precision you do not have.
|
|
89
|
+
|
|
90
|
+
## Step 5: hand it over honestly
|
|
91
|
+
|
|
92
|
+
Give them the post, and one line on what you were unsure about. A draft
|
|
93
|
+
delivered with its weak spot named gets edited. A draft delivered with a
|
|
94
|
+
flourish gets posted and regretted.
|
|
95
|
+
|
|
96
|
+
## Example
|
|
97
|
+
|
|
98
|
+
```text
|
|
99
|
+
User: Here are five LinkedIn posts I wrote last month. Draft one about why we
|
|
100
|
+
stopped doing weekly status meetings, in my voice.
|
|
101
|
+
|
|
102
|
+
Agent:
|
|
103
|
+
1. Voice sketch in six lines: opens with a blunt claim, short paragraphs, dry
|
|
104
|
+
tone, no emoji or hashtags, never says "excited to share".
|
|
105
|
+
2. Asks whether anything in the sketch is wrong before drafting.
|
|
106
|
+
3. One draft, written against the sketch.
|
|
107
|
+
4. The check, out loud: the opening is a claim (fits); the third paragraph is
|
|
108
|
+
longer than any sample (trimmed); "leverage" is not in the samples (removed).
|
|
109
|
+
5. One line on what it was unsure about.
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## Limitations
|
|
113
|
+
|
|
114
|
+
- Social posts only. It is not for writing that is not going on Twitter/X or LinkedIn.
|
|
115
|
+
- Without the connector, the voice sketch comes only from what the person pastes. It is a sketch, not a measured profile, and the skill never gives a numeric score.
|
|
116
|
+
- It cannot promise reach or engagement.
|
|
117
|
+
- **Optional connector.** The closing section describes a hosted VoiceMoat MCP connector. Nothing above needs it. It needs a paid VoiceMoat plan (Pro or Enterprise) and the user's own sign-in (OAuth, no API keys). When its tools are called, post text and account data are read from or sent to voicemoat.com. Without it, this skill makes no network calls.
|
|
118
|
+
- **Publishing.** `publish_post` and `schedule_post` post to the user's real Twitter/X or LinkedIn account. They return a preview first and only post on a second call that carries a one-time code. Make that second call only after the user has read the preview and said yes.
|
|
119
|
+
|
|
120
|
+
## What changes when VoiceMoat is connected
|
|
121
|
+
|
|
122
|
+
Everything above works with nothing installed. With a VoiceMoat account
|
|
123
|
+
connected, the guesswork in steps 1, 2 and 4 is replaced with real data:
|
|
124
|
+
|
|
125
|
+
- `get_voice_profile` returns a voice profile trained on your own published
|
|
126
|
+
posts rather than a sketch from five pasted posts, including the phrases
|
|
127
|
+
you never use.
|
|
128
|
+
- `score_voice_match` scores the draft from 0 to 100 against that profile and
|
|
129
|
+
names what is off. That is a measurement, not the read-through in step 4.
|
|
130
|
+
- `get_voice_insights` returns your dominant patterns, hook style and sentence
|
|
131
|
+
rhythm, and how far your recent posts have drifted from your own baseline.
|
|
132
|
+
- `publish_post` and `schedule_post` put the finished post on Twitter or
|
|
133
|
+
LinkedIn, behind a preview and a one-time confirmation so nothing goes out
|
|
134
|
+
that you have not read.
|
|
135
|
+
|
|
136
|
+
Never make the second call on your own. Show the person the exact preview the
|
|
137
|
+
first call returns and wait for a clear yes before you send the one-time code
|
|
138
|
+
back. Never make both calls in one step.
|
|
139
|
+
|
|
140
|
+
VoiceMoat is at voicemoat.com. The connector needs the Pro or Enterprise plan.
|
package/package.json
CHANGED