@holdyourvoice/hyv 2.9.22 → 2.9.23

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,80 @@
1
+ # Hold Your Voice — Agent Instructions
2
+
3
+ The user has a voice profile that defines their unique writing style. Your job is to make ALL written content match their voice automatically — without waiting for them to mention "voice" or "hyv".
4
+
5
+ ## Auto-trigger — do these automatically
6
+
7
+ **Before delivering any written content (emails, replies, posts, docs, messages, or prose):**
8
+ 1. Run `hyv_scan` for a fast local check (free, offline, works without a profile)
9
+ 2. Run `hyv_clean` for the full scan → fix → validate pipeline, or `hyv_fix` then `hyv_rewrite`
10
+ 3. Run `hyv_validate` to verify the output matches their voice
11
+
12
+ **When the user asks you to write, draft, compose, edit, improve, or rewrite anything:**
13
+ 1. Write your draft normally
14
+ 2. Run `hyv_scan` or `hyv_clean` on it
15
+ 3. Run `hyv_rewrite` to match their voice profile
16
+ 4. Deliver the voice-matched version
17
+
18
+ **After the user accepts a substantial edit:**
19
+ - Suggest they run `hyv reinforce --last` so their profile learns from the change
20
+
21
+ ## Which tool to use
22
+
23
+ | Tool | What it does | When to use |
24
+ |------|-------------|-------------|
25
+ | `hyv_welcome` | Onboarding guide (name → samples → test → signup) | New users, first time |
26
+ | `hyv_mcp_setup` | Status, integrate apps, ChatGPT connector | Check/refresh setup |
27
+ | `hyv_profiles` | List voice profiles | See which profiles are available |
28
+ | `hyv_scan` | Fast local AI-pattern scan (free, 220+ patterns) | Before any prose delivery |
29
+ | `hyv_analyze` | Full hybrid scan (local + server, paid) | Important drafts |
30
+ | `hyv_clean` | Scan → fix → validate → rewrite in one call | Best single-call pipeline |
31
+ | `hyv_fix` | Auto-fix deterministic patterns (no LLM) | Before rewrite |
32
+ | `hyv_rewrite` | Profile-aware rewrite prompt | After scan/fix |
33
+ | `hyv_validate` | Verify output matches voice profile | After rewrite |
34
+ | `hyv_check` | Quick pass/fail | Spot checks |
35
+ | `hyv_score` | 0-100 voice score | Quantify quality |
36
+ | `hyv_diff` | Before/after comparison | Review changes |
37
+ | `hyv_list_free_tools` | List all free capabilities | What's available |
38
+
39
+ ## Voice profiles
40
+
41
+ - Run `hyv_profiles` first if unsure which profile is active.
42
+ - Terminal profiles (from `hyv welcome`) are already local — no extra step.
43
+ - Dashboard profiles sync after the user runs `hyv init` once (MCP auto-downloads).
44
+ - Pass `profile: "<slug>"` on tools only when using a non-default profile.
45
+ - If no profile exists yet, free local scan still works — call `hyv_welcome` to onboard.
46
+
47
+ ## Rewrite rules
48
+
49
+ 1. **Never** use AI-slop words: delve, leverage, tapestry, foster, harness, pivotal, innovative, cutting-edge, robust, holistic, nuanced, resonate, unpack, navigate, landscape, ecosystem, transformative, paradigm, revolutionize, unlock, supercharge, game-changer
50
+ 2. **Never** use formulaic connectors: firstly, secondly, moreover, furthermore, in conclusion, to conclude, notably
51
+ 3. **Never** use hedging: arguably, perhaps, some might say, it's worth noting, it's important to note
52
+ 4. **Never** use signpost claims: this is why, this is how, here's where, here's why
53
+ 5. **Never** use antithesis patterns: "not just X, but Y", "more than just", "it's not about X, it's about Y"
54
+ 6. **Match** the user's sentence rhythm, vocabulary, and tone from their voice profile
55
+ 7. **Preserve** roughness that carries voice — don't over-polish
56
+ 8. **Open** from concrete observations, not generic setups
57
+ 9. **Fix only** flagged lines — preserve clean lines exactly
58
+ 10. **Never add** sections, hooks, CTAs, markdown, or commentary
59
+
60
+ ## MCP setup (no terminal needed)
61
+
62
+ - `hyv_mcp_setup` with `action=status` — see what's integrated and onboarding progress
63
+ - `hyv_mcp_setup` with `action=integrate` — refresh Cursor/Claude configs (`force=true` after hyv upgrade)
64
+ - `hyv_mcp_setup` with `action=chatgpt` — ChatGPT remote OAuth steps (recommended for paid users)
65
+ - `hyv_welcome` — finish voice onboarding inside this chat
66
+
67
+ ## CLI fallback (when MCP tools aren't available)
68
+
69
+ ```bash
70
+ echo "text to check" | hyv scan -
71
+ hyv fix file.md # apply auto-fixes without LLM
72
+ hyv rewrite file.md # generate rewrite prompt
73
+ hyv check "inline text" # quick spot-check
74
+ hyv score file.md # just a 0-100 number
75
+ hyv diff file.md # show proposed fixes
76
+ hyv profiles # list profiles
77
+ hyv reinforce --last # learn from last edit
78
+ hyv mcp --setup # view all MCP configs
79
+ hyv mcp --test # verify everything works
80
+ ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@holdyourvoice/hyv",
3
- "version": "2.9.22",
3
+ "version": "2.9.23",
4
4
  "description": "Free local AI writing scan for cursor & claude. MCP server, 220+ pattern detection, voice profiles. npx @holdyourvoice/hyv welcome",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -572,7 +572,7 @@ function setupAgents({
572
572
  const codexDir = path.join(home, '.codex');
573
573
  fs.mkdirSync(codexDir, { recursive: true });
574
574
  const agentsFile = path.join(codexDir, 'AGENTS.md');
575
- const src = path.join(pkgDir, 'agents', 'codex.md');
575
+ const src = path.join(pkgDir, 'agents', 'AGENTS.md');
576
576
  let existing = '';
577
577
  if (fs.existsSync(agentsFile)) existing = fs.readFileSync(agentsFile, 'utf-8');
578
578
  const addition = fs.existsSync(src) ? fs.readFileSync(src, 'utf-8') : '';
@@ -648,10 +648,10 @@ function setupAgents({
648
648
  if (!ocResult.ok) warnings.push(`opencode: could not update opencode.jsonc (${ocResult.reason})`);
649
649
 
650
650
  const agentsFile = path.join(ocDir, 'AGENTS.md');
651
- const genericSrc = path.join(pkgDir, 'agents', 'generic.md');
651
+ const agentsSrc = path.join(pkgDir, 'agents', 'AGENTS.md');
652
652
  let existing = '';
653
653
  if (fs.existsSync(agentsFile)) existing = fs.readFileSync(agentsFile, 'utf-8');
654
- const addition = fs.existsSync(genericSrc) ? fs.readFileSync(genericSrc, 'utf-8') : '';
654
+ const addition = fs.existsSync(agentsSrc) ? fs.readFileSync(agentsSrc, 'utf-8') : '';
655
655
  if (addition && shouldUpgradeAgent(agentsFile, agentsMarker, pkgVersion)) {
656
656
  const merged = mergeAgentsMd(existing, addition, 'hold-your-voice');
657
657
  fs.mkdirSync(ocDir, { recursive: true });
@@ -730,8 +730,8 @@ function setupAgents({
730
730
 
731
731
  // Generic reference copy (always when auto-configure runs)
732
732
  try {
733
- const genericSrc = path.join(pkgDir, 'agents', 'generic.md');
734
- const genericDest = path.join(hyvDir, 'agents', 'generic.md');
733
+ const genericSrc = path.join(pkgDir, 'agents', 'AGENTS.md');
734
+ const genericDest = path.join(hyvDir, 'agents', 'AGENTS.md');
735
735
  if (fs.existsSync(genericSrc)) installAgent(genericSrc, genericDest);
736
736
  } catch {
737
737
  // non-fatal