@holdyourvoice/hyv 2.3.0 → 2.3.1

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.
@@ -0,0 +1,18 @@
1
+ # Hold Your Voice — Writing Rules
2
+
3
+ The user has a voice profile. All writing must match their personal style.
4
+
5
+ ## Rules
6
+ 1. Never use AI-slop words: delve, leverage, tapestry, foster, harness, pivotal, innovative, cutting-edge, state-of-the-art, robust, holistic, multifaceted, nuanced
7
+ 2. Never use formulaic connectors: firstly, secondly, moreover, furthermore, in conclusion
8
+ 3. Never use hedging: arguably, perhaps, some might say, it's worth noting
9
+ 4. Never use signpost claims: this is why, this is how, here's where
10
+ 5. Match the user's sentence rhythm and vocabulary
11
+ 6. Preserve roughness that carries voice — don't over-polish
12
+ 7. Open from concrete observations, not generic setups
13
+
14
+ ## When rewriting
15
+ - Fix only flagged lines, preserve clean lines
16
+ - Remove AI patterns line by line
17
+ - Match the user's voice profile exactly
18
+ - Never add sections, hooks, CTAs, or commentary
@@ -0,0 +1,39 @@
1
+ # Hold Your Voice
2
+
3
+ The user has a voice profile that defines their writing style. Use HYV tools for ALL writing tasks — not just when they say "voice" or "hyv".
4
+
5
+ ## When to use HYV
6
+
7
+ ALWAYS run `hyv_scan` or use the `hyv_scan` MCP tool before delivering any written content:
8
+ - Writing emails, replies, or messages
9
+ - Drafting blog posts, articles, or documentation
10
+ - Creating social media posts (Twitter, LinkedIn, etc.)
11
+ - Editing or improving any text
12
+ - Responding to questions with longer answers
13
+ - Any task where the output is prose/text the user will publish or send
14
+
15
+ ALWAYS run `hyv_rewrite` or use the `hyv_rewrite` MCP tool when:
16
+ - The user asks to "write", "draft", "compose", "edit", "improve", or "fix" text
17
+ - The user says "make this better", "clean this up", "fix the tone"
18
+ - The user asks for any content creation
19
+ - The scan finds issues and you need to fix them
20
+
21
+ ## How to use
22
+
23
+ ### MCP tools (preferred — if MCP is connected):
24
+ 1. `hyv_scan` with the text → get issues
25
+ 2. `hyv_rewrite` with the text → get auto-fixed version + LLM prompt for remaining issues
26
+ 3. `hyv_validate` after rewriting → verify the output matches the voice
27
+
28
+ ### CLI commands (fallback):
29
+ ```bash
30
+ echo "text to check" | hyv scan -
31
+ hyv rewrite file.md
32
+ hyv profiles
33
+ ```
34
+
35
+ ## Rules
36
+ - Never skip the scan step for user-facing content
37
+ - Preserve the original meaning exactly when rewriting
38
+ - Match the voice profile's rhythm, vocabulary, and patterns
39
+ - If no profile is set up yet, run `hyv profiles` to check
@@ -0,0 +1,22 @@
1
+ # Hold Your Voice
2
+
3
+ The user has a voice profile for their writing style. Use HYV for ALL writing tasks.
4
+
5
+ ## Auto-trigger rules
6
+
7
+ Run these MCP tools (or CLI commands) for any writing task:
8
+ - `hyv_scan` on any text before delivering it
9
+ - `hyv_rewrite` to fix issues found by scan
10
+ - `hyv_validate` to verify the output
11
+
12
+ ## CLI fallback
13
+ ```bash
14
+ echo "text" | hyv scan -
15
+ hyv rewrite file.md
16
+ hyv profiles
17
+ ```
18
+
19
+ ## Rules
20
+ - Always scan before delivering prose content
21
+ - Always rewrite if scan finds issues
22
+ - Preserve meaning, match voice profile
@@ -0,0 +1,19 @@
1
+ # Hold Your Voice
2
+
3
+ The user has a voice profile. Use HYV MCP tools for all writing tasks.
4
+
5
+ ## When to use
6
+ - Any email, post, doc, or content creation
7
+ - Before delivering any prose to the user
8
+ - When editing or improving text
9
+
10
+ ## Tools
11
+ - `hyv_scan` — check text for AI patterns
12
+ - `hyv_rewrite` — fix issues and match voice
13
+ - `hyv_validate` — verify output matches voice
14
+ - `hyv_profiles` — list available profiles
15
+
16
+ ## Rules
17
+ - Always scan before delivering content
18
+ - Preserve meaning when rewriting
19
+ - Match the user's voice profile exactly
@@ -0,0 +1,30 @@
1
+ # Hold Your Voice — Agent Instructions
2
+
3
+ You have access to the Hold Your Voice MCP tools. The user has a voice profile that defines how they write. Your job is to make ALL written content match their voice.
4
+
5
+ ## Auto-trigger rules
6
+
7
+ You MUST use these tools automatically — do NOT wait for the user to mention "voice" or "hyv":
8
+
9
+ **Before delivering any written content (emails, posts, docs, messages):**
10
+ 1. Run `hyv_scan` on the text
11
+ 2. If issues found, run `hyv_rewrite` to fix them
12
+ 3. Run `hyv_validate` to verify the result
13
+
14
+ **When the user asks you to write, draft, edit, or improve anything:**
15
+ 1. Write your draft
16
+ 2. Run `hyv_scan` on it
17
+ 3. Fix issues with `hyv_rewrite`
18
+ 4. Deliver the cleaned version
19
+
20
+ ## Available tools
21
+ - `hyv_scan` — scan text for AI patterns and voice drift
22
+ - `hyv_rewrite` — auto-fix patterns and generate LLM prompt for remaining issues
23
+ - `hyv_validate` — score text against voice profile
24
+ - `hyv_profiles` — list available voice profiles
25
+
26
+ ## Rules
27
+ - NEVER skip scanning for user-facing content
28
+ - Preserve original meaning exactly when rewriting
29
+ - Match the voice profile's rhythm, vocabulary, and tone
30
+ - If no profile exists, tell the user to run `hyv init` then `hyv new <name>`
@@ -0,0 +1,12 @@
1
+ # Hold Your Voice
2
+
3
+ Use HYV MCP tools for all writing tasks. The user has a voice profile.
4
+
5
+ ## Auto-trigger
6
+ - `hyv_scan` before delivering any text
7
+ - `hyv_rewrite` to fix found issues
8
+ - `hyv_validate` after rewriting
9
+
10
+ ## Rules
11
+ - Always scan user-facing content
12
+ - Preserve meaning, match voice profile
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@holdyourvoice/hyv",
3
- "version": "2.3.0",
3
+ "version": "2.3.1",
4
4
  "description": "Hold Your Voice \u2014 voice gate layer for AI workflows. make your ai agent sound exactly like you! includes 220+ AI pattern detection engine.",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -44,7 +44,8 @@
44
44
  "scripts/",
45
45
  "assets/",
46
46
  "skills/",
47
- "README.md"
47
+ "README.md",
48
+ "agents/"
48
49
  ],
49
50
  "repository": {
50
51
  "type": "git",
@@ -1,8 +0,0 @@
1
- when i ask you to "write in my voice" or "rewrite this in my voice":
2
-
3
- - read `~/.hyv/voice.md` for my voice profile
4
- - run `hyv rewrite --text "<text>"` to get the structured prompt
5
- - execute the prompt and rewrite the text
6
- - match my rhythm, vocabulary, and patterns exactly
7
- - never use words i avoid
8
- - present the rewritten version
@@ -1,8 +0,0 @@
1
- when i ask you to "write in my voice" or "rewrite this in my voice":
2
-
3
- - read `~/.hyv/voice.md` for my voice profile
4
- - run `hyv rewrite --text "<text>"` to get the structured prompt
5
- - execute the prompt and rewrite the text
6
- - match my rhythm, vocabulary, and patterns exactly
7
- - never use words i avoid
8
- - present the rewritten version
@@ -1,24 +0,0 @@
1
- ## Hold Your Voice — automated voice rewriting
2
-
3
- when the user asks to "write in my voice", "rewrite this in my voice", or "make this sound like me":
4
-
5
- 1. read their voice profile at `~/.hyv/voice.md`
6
- 2. run `hyv rewrite --text "<their text>"` to generate a structured rewrite prompt
7
- 3. execute the prompt — rewrite the text yourself using your own llm
8
- 4. present the rewritten text
9
- 5. when the user accepts it, run `hyv reinforce original.md edited.md` to teach the system
10
-
11
- ### available commands
12
-
13
- - `hyv scan <file>` — check a draft for voice drift and ai patterns
14
- - `hyv rewrite <file>` — generate a rewrite prompt for your llm
15
- - `hyv validate <file>` — verify a rewrite matches the voice profile
16
- - `hyv reinforce <original> <edited>` — teach the system what was accepted
17
- - `hyv sync` — refresh cached profiles and rules
18
- - `hyv status` — show auth and plan info
19
-
20
- ### important
21
-
22
- - hyv never calls an llm. it generates prompts you execute yourself.
23
- - voice profiles live at `~/.hyv/voice.md`
24
- - always call `hyv validate` after rewriting to verify the result
@@ -1,12 +0,0 @@
1
- # Hold Your Voice — Cursor Rules
2
-
3
- when writing or rewriting content, match the voice profile below. do not use AI-slop words (delve, leverage, tapestry, in today's fast-paced, not just X but Y, etc.). match rhythm, vocabulary, and sentence patterns from the profile.
4
-
5
- your voice profile is at `~/.hyv/voice.md`. load it and use it as your writing guide.
6
-
7
- when the user says "rewrite in my voice", "make this sound like me", or similar:
8
-
9
- 1. run: `hyv rewrite --text "<text>"`
10
- 2. the cli generates a structured rewrite prompt
11
- 3. execute the prompt yourself — rewrite the text matching the voice profile
12
- 4. present the result
@@ -1,12 +0,0 @@
1
- # Hold Your Voice — Cursor Rules
2
-
3
- when writing or rewriting content, match the voice profile below. do not use AI-slop words (delve, leverage, tapestry, in today's fast-paced, not just X but Y, etc.). match rhythm, vocabulary, and sentence patterns from the profile.
4
-
5
- your voice profile is at `~/.hyv/voice.md`. load it and use it as your writing guide.
6
-
7
- when the user says "rewrite in my voice", "make this sound like me", or similar:
8
-
9
- 1. run: `hyv rewrite --text "<text>"`
10
- 2. the cli generates a structured rewrite prompt
11
- 3. execute the prompt yourself — rewrite the text matching the voice profile
12
- 4. present the result
@@ -1,110 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * postinstall.js — auto-configure MCP + agent instructions after npm install.
4
- *
5
- * Configures: Claude Desktop, Claude Code, Cursor, Windsurf, ChatGPT
6
- * Fails silently for apps that aren't installed.
7
- */
8
- const fs = require('fs');
9
- const path = require('path');
10
- const os = require('os');
11
-
12
- const home = os.homedir();
13
- const isWin = process.platform === 'win32';
14
- const pkgDir = path.resolve(__dirname, '..');
15
-
16
- // Print branded message
17
- console.log('');
18
- console.log(' make your ai agent sound exactly like you!');
19
- console.log('');
20
- console.log(' to get started:');
21
- console.log(' hyv init \u2192 sign in');
22
- console.log(' hyv new my-voice \u2192 create your voice profile');
23
- console.log('');
24
- console.log(' first month is just $1.');
25
- console.log('');
26
-
27
- const configured = [];
28
-
29
- // ── Claude Desktop ─────────────────────────────────────────────────────────
30
- try {
31
- const claudeDir = isWin
32
- ? path.join(home, 'AppData', 'Roaming', 'Claude')
33
- : path.join(home, 'Library', 'Application Support', 'Claude');
34
- const configFile = path.join(claudeDir, 'claude_desktop_config.json');
35
-
36
- if (fs.existsSync(claudeDir)) {
37
- let config = {};
38
- if (fs.existsSync(configFile)) {
39
- try { config = JSON.parse(fs.readFileSync(configFile, 'utf-8')); } catch {}
40
- }
41
- if (!config.mcpServers) config.mcpServers = {};
42
- if (!config.mcpServers.hyv) {
43
- config.mcpServers.hyv = { command: 'hyv', args: ['mcp'] };
44
- fs.writeFileSync(configFile, JSON.stringify(config, null, 2));
45
- configured.push('claude desktop');
46
- }
47
- }
48
- } catch {}
49
-
50
- // ── Claude Code (global commands) ──────────────────────────────────────────
51
- try {
52
- const cmdDir = path.join(home, '.claude', 'commands');
53
- if (fs.existsSync(path.dirname(cmdDir))) {
54
- fs.mkdirSync(cmdDir, { recursive: true });
55
- const cmdFile = path.join(cmdDir, 'hyv.md');
56
- const src = path.join(pkgDir, 'agents', 'claude-code.md');
57
- if (fs.existsSync(src) && !fs.existsSync(cmdFile)) {
58
- fs.copyFileSync(src, cmdFile);
59
- configured.push('claude code');
60
- }
61
- }
62
- } catch {}
63
-
64
- // ── Cursor (global rules) ─────────────────────────────────────────────────
65
- try {
66
- const cursorDir = path.join(home, '.cursor');
67
- if (fs.existsSync(cursorDir)) {
68
- const rulesFile = path.join(cursorDir, 'rules', 'hyv.md');
69
- fs.mkdirSync(path.dirname(rulesFile), { recursive: true });
70
- const src = path.join(pkgDir, 'agents', 'cursor.md');
71
- if (fs.existsSync(src) && !fs.existsSync(rulesFile)) {
72
- fs.copyFileSync(src, rulesFile);
73
- configured.push('cursor');
74
- }
75
- }
76
- } catch {}
77
-
78
- // ── Windsurf (global rules) ───────────────────────────────────────────────
79
- try {
80
- const wsDir = isWin
81
- ? path.join(home, 'AppData', 'Roaming', 'Windsurf')
82
- : path.join(home, '.windsurf');
83
- if (fs.existsSync(wsDir)) {
84
- const rulesFile = path.join(wsDir, 'rules', 'hyv.md');
85
- fs.mkdirSync(path.dirname(rulesFile), { recursive: true });
86
- const src = path.join(pkgDir, 'agents', 'windsurf.md');
87
- if (fs.existsSync(src) && !fs.existsSync(rulesFile)) {
88
- fs.copyFileSync(src, rulesFile);
89
- configured.push('windsurf');
90
- }
91
- }
92
- } catch {}
93
-
94
- // ── ChatGPT (custom instructions file) ────────────────────────────────────
95
- try {
96
- const chatgptDir = path.join(home, '.chatgpt');
97
- if (!fs.existsSync(chatgptDir)) fs.mkdirSync(chatgptDir, { recursive: true });
98
- const instrFile = path.join(chatgptDir, 'hyv-instructions.txt');
99
- const src = path.join(pkgDir, 'agents', 'chatgpt.md');
100
- if (fs.existsSync(src) && !fs.existsSync(instrFile)) {
101
- fs.copyFileSync(src, instrFile);
102
- configured.push('chatgpt');
103
- }
104
- } catch {}
105
-
106
- // ── Summary ───────────────────────────────────────────────────────────────
107
- if (configured.length > 0) {
108
- console.log(' \u2713 auto-configured: ' + configured.join(', '));
109
- console.log('');
110
- }