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.
Files changed (31) hide show
  1. package/bundled-skills/.antigravity-install-manifest.json +15 -1
  2. package/bundled-skills/axonx/SKILL.md +374 -0
  3. package/bundled-skills/axonx/references/LICENSE.md +201 -0
  4. package/bundled-skills/browser-extension-launch/SKILL.md +102 -0
  5. package/bundled-skills/browser-extension-launch/references/acceptance.md +103 -0
  6. package/bundled-skills/browser-extension-launch/references/complex-workflow.md +46 -0
  7. package/bundled-skills/browser-extension-launch/references/dependencies.md +62 -0
  8. package/bundled-skills/browser-extension-launch/references/development.md +42 -0
  9. package/bundled-skills/browser-extension-launch/references/efficient-delivery.md +52 -0
  10. package/bundled-skills/browser-extension-launch/references/host-compatibility.md +58 -0
  11. package/bundled-skills/browser-extension-launch/references/playwright-mcp.md +102 -0
  12. package/bundled-skills/browser-extension-launch/references/product-loop.md +35 -0
  13. package/bundled-skills/browser-extension-launch/references/publishing.md +103 -0
  14. package/bundled-skills/browser-extension-launch/references/required-skills.json +153 -0
  15. package/bundled-skills/browser-extension-launch/references/workflow.md +71 -0
  16. package/bundled-skills/byagent/SKILL.md +125 -0
  17. package/bundled-skills/cloudish/SKILL.md +188 -0
  18. package/bundled-skills/define-my-content-pillars/SKILL.md +127 -0
  19. package/bundled-skills/draft-my-comments/SKILL.md +132 -0
  20. package/bundled-skills/fxmacrodata/SKILL.md +224 -0
  21. package/bundled-skills/get-seen-in-replies/SKILL.md +134 -0
  22. package/bundled-skills/jobs-to-be-done-analyst/SKILL.md +1 -1
  23. package/bundled-skills/onboarding-psychologist/SKILL.md +1 -1
  24. package/bundled-skills/repurpose-into-a-post/SKILL.md +134 -0
  25. package/bundled-skills/same-idea-both-platforms/SKILL.md +111 -0
  26. package/bundled-skills/supercov/SKILL.md +119 -0
  27. package/bundled-skills/turn-this-into-a-thread/SKILL.md +130 -0
  28. package/bundled-skills/why-did-this-post-flop/SKILL.md +130 -0
  29. package/bundled-skills/write-in-my-voice/SKILL.md +140 -0
  30. package/package.json +1 -1
  31. 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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-skills-collection",
3
- "version": "4.1.5",
3
+ "version": "4.1.6",
4
4
  "description": "OpenCode CLI plugin that automatically downloads and keeps skills up to date.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",