From copydesk
Bootstraps copydesk data directory and guides voice register extraction. Creates subdirectories, copies templates, and supports adding new registers on re-run via /copydesk:init.
How this skill is triggered — by the user, by Claude, or both
Slash command
/copydesk:initThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill bootstraps the copydesk user-data directory and walks you through extracting a voice register. It's idempotent — running it again is how you add a new register or refresh templates after a plugin update.
This skill bootstraps the copydesk user-data directory and walks you through extracting a voice register. It's idempotent — running it again is how you add a new register or refresh templates after a plugin update.
Always ensure the required subdirectories exist. mkdir -p is idempotent — these calls are safe to run on every invocation, and they protect against partial-init states (e.g., the root exists but registers/ was deleted, or the data root was created by a prior plugin version without all its subdirs):
mkdir -p ~/.claude/data/copydesk/registers
mkdir -p ~/.claude/data/copydesk/learning/snapshots
For every file under ${CLAUDE_PLUGIN_ROOT}/template-data/, check whether the corresponding target under ~/.claude/data/copydesk/ exists. If the target is missing, copy the template file there. Never overwrite a file that already exists at the target. This pattern lets plugin updates ship new template files (which appear at the data path on next init invocation) without ever touching existing user data.
After Phase 1, list ~/.claude/data/copydesk/registers/ excluding register-template.md.
The current process follows the existing setup/ reference documents. (The user has flagged that this entire phase will be replaced by the planned extraction/learning rework; the bootstrap in Phases 1-2 is the stable structural piece.)
Ask the user what kind of writing this register is for (e.g., advocacy, personal essays, technical documentation, dystopian fiction). Derive a short kebab-case name (e.g., advocacy, personal, tech-docs, dystopian-fiction) that becomes the register's filename. Confirm with the user.
Also ask: "What writing contexts should activate this register?" Capture the list — it becomes the triggers: array in the register's frontmatter.
Reference ${CLAUDE_PLUGIN_ROOT}/setup/sample-collection.md for the format requirements. Ask the user for 10-20 samples of their own writing in this register, plus 10 baseline samples (Claude-default outputs on similar topics).
If the user doesn't have baselines ready, walk them through generating a batch: open a fresh Claude conversation (no system prompt, no special instructions), ask it to write 10 short pieces (150-300 words each) on topics similar to their writing samples using prompts like "Write a short comment about [topic]." Save the outputs as the baseline (P1) corpus.
Read the prompt at ${CLAUDE_PLUGIN_ROOT}/setup/pass-1-prompt.md. Dispatch a Sonnet agent with that prompt as system context, filling in:
Save the agent's output to ~/.claude/data/copydesk/learning/extraction-artifacts/<register-name>/pass-1-output.md (create the directory if needed).
Read the prompt at ${CLAUDE_PLUGIN_ROOT}/setup/pass-2-prompt.md. Dispatch a second Sonnet agent with that prompt, passing the pass-1 output from Step 3.3. Save the result to ~/.claude/data/copydesk/learning/extraction-artifacts/<register-name>/pass-2-output.md.
Convert the pass-2 output into a register file using the structure in ${CLAUDE_PLUGIN_ROOT}/template-data/registers/register-template.md. Important:
triggers: array from Step 3.1.~/.claude/data/copydesk/registers/<register-name>.md.Example finished register frontmatter:
---
triggers:
- personal essays
- blog posts
- reflective writing
---
# Personal Register
...
Ask the user whether they want brief-stripping support for this register. If yes, walk through ${CLAUDE_PLUGIN_ROOT}/setup/brief-stripping-guide.md. (This is optional; skip if the user is unsure.)
Tell the user:
Register
<register-name>is ready at~/.claude/data/copydesk/registers/<register-name>.mdwith these triggers: [list]. Try it now: invoke/copydeskwith writing that matches one of the trigger contexts.
Stop. Generation belongs to /copydesk; this skill's job is done.
This skill is idempotent. Re-invocation:
Nothing in this skill writes to the plugin install path. All persistent state lives at ~/.claude/data/copydesk/.
npx claudepluginhub timsimpsonjr/copydesk --plugin copydeskMeasure and enforce a user's writing voice via stylometry (function-word vectors, lexical diversity, sentence-length burstiness, register, opener POS, punctuation rates). Accepts 5-20 writing samples, builds a local YAML fingerprint, and gates drafts against deterministic bands.
Interactively upgrades existing writer skills to latest voiceprint format, explaining changes and migrating from two-file (SKILL.md + voice-profile.md) to single-file structure.
Produces engaging human prose for blog posts, articles, emails, social media, and documentation. Runs a review gate on all output and uses voice registers for consistent tone.