@esoteric-logic/praxis-harness 2.4.0 → 2.5.0

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.
@@ -1,11 +1,12 @@
1
1
  StylesPath = .vale-styles
2
2
  MinAlertLevel = suggestion
3
+ Vocab = Praxis
3
4
 
4
- Packages = Microsoft, write-good, Readability
5
+ Packages = Google, proselint, alex, write-good, Readability
5
6
 
6
7
  # Full suite on Markdown
7
8
  [*.md]
8
- BasedOnStyles = Praxis, Microsoft, write-good, Readability
9
+ BasedOnStyles = Praxis, Google, proselint, alex, write-good, Readability
9
10
 
10
11
  # Comment-only scanning on code files
11
12
  [*.{go,tf,sh,ps1}]
@@ -0,0 +1,26 @@
1
+ extends: capitalization
2
+ message: "'%s' should use sentence case."
3
+ level: warning
4
+ scope: heading
5
+ match: $sentence
6
+ indicators:
7
+ - ":"
8
+ exceptions:
9
+ - Praxis
10
+ - CLAUDE
11
+ - MCP
12
+ - SPEC
13
+ - ADR
14
+ - API
15
+ - CLI
16
+ - VS Code
17
+ - GitHub
18
+ - Azure
19
+ - Terraform
20
+ - Obsidian
21
+ - Node.js
22
+ - TypeScript
23
+ - JavaScript
24
+ - PowerShell
25
+ - YAML
26
+ - JSON
@@ -0,0 +1,6 @@
1
+ extends: occurrence
2
+ message: "Sentence too long (%s words). Try to keep sentences under 30 words."
3
+ level: warning
4
+ scope: sentence
5
+ max: 30
6
+ token: \b\w+\b
@@ -0,0 +1,25 @@
1
+ extends: substitution
2
+ message: "Use '%s' instead of '%s'."
3
+ level: error
4
+ ignorecase: false
5
+ swap:
6
+ terraform: Terraform
7
+ Github: GitHub
8
+ github: GitHub
9
+ Github Actions: GitHub Actions
10
+ Github actions: GitHub Actions
11
+ github actions: GitHub Actions
12
+ VScode: VS Code
13
+ vscode: VS Code
14
+ Vscode: VS Code
15
+ NodeJS: Node.js
16
+ Nodejs: Node.js
17
+ nodeJS: Node.js
18
+ Typescript: TypeScript
19
+ typescript: TypeScript
20
+ Javascript: JavaScript
21
+ javascript: JavaScript
22
+ obsidian: Obsidian
23
+ azure: Azure
24
+ Powershell: PowerShell
25
+ powershell: PowerShell
@@ -0,0 +1,32 @@
1
+ Praxis
2
+ CLAUDE
3
+ MCP
4
+ SPEC
5
+ ADR
6
+ YAML
7
+ JSON
8
+ CLI
9
+ CWD
10
+ npm
11
+ npx
12
+ VSCode
13
+ Obsidian
14
+ Terraform
15
+ GitHub
16
+ gitconfig
17
+ GitOps
18
+ shellcheck
19
+ golangci-lint
20
+ hadolint
21
+ tflint
22
+ semgrep
23
+ gitleaks
24
+ commitlint
25
+ markdownlint
26
+ EditorConfig
27
+ CLAUDE.md
28
+ wikilinks
29
+ frontmatter
30
+ subagent
31
+ harness
32
+ vault
@@ -0,0 +1,3 @@
1
+ blacklist
2
+ whitelist
3
+ master/slave
@@ -0,0 +1,165 @@
1
+ ---
2
+ name: prose-review
3
+ disable-model-invocation: true
4
+ description: "Review prose for AI-sounding patterns, weak voice, and structural issues. Runs Vale first (mechanical), then Claude review (structural). Use on any Markdown file before sharing with humans."
5
+ ---
6
+
7
+ # Prose review skill
8
+
9
+ You are a skeptical human editor reviewing prose for authenticity and quality.
10
+ Your job is to make the writing sound like a specific human wrote it — not an AI.
11
+
12
+ **Usage:** `/prose-review [file_path]`
13
+
14
+ If no path given: ask "Which file should I review?"
15
+
16
+ ---
17
+
18
+ ## Step 1 — Vale pass (mechanical)
19
+
20
+ Run Vale on the target file using the system's Vale config:
21
+
22
+ ```bash
23
+ vale {file_path} 2>&1
24
+ ```
25
+
26
+ If Vale finds errors or warnings:
27
+ - Show a summary count: `Vale: {n} errors, {n} warnings, {n} suggestions`
28
+ - List only errors and warnings (skip suggestions unless <5 total findings)
29
+ - Don't fix yet — just report
30
+
31
+ If Vale isn't installed: skip with note, proceed to step 2.
32
+
33
+ ---
34
+
35
+ ## Step 2 — Structural review
36
+
37
+ Launch a subagent to review the file. The subagent receives ONLY:
38
+ 1. The file contents
39
+ 2. The review prompt below
40
+
41
+ Don't send conversation history, project context, or user preferences.
42
+
43
+ ### Subagent prompt
44
+
45
+ <!-- vale off -->
46
+
47
+ > You are a veteran human editor. You've read thousands of documents and you can
48
+ > instantly tell when an AI wrote something. Review this text and flag every
49
+ > pattern that makes it sound machine-generated.
50
+ >
51
+ > **Flag these specific patterns:**
52
+ >
53
+ > 1. **Rhythm monotony** — Multiple consecutive sentences with similar length
54
+ > or structure. Humans vary: short punch. Then a longer thought that meanders.
55
+ > Then another short one. AI writes medium, medium, medium, medium.
56
+ >
57
+ > 2. **Hedge stacking** — "may potentially", "could possibly", "it's worth noting
58
+ > that perhaps". One hedge is human. Two in a sentence is AI.
59
+ >
60
+ > 3. **Empty openers** — "In today's world", "When it comes to", "It goes without
61
+ > saying", "It's important to note". Throat-clearing before the actual point.
62
+ >
63
+ > 4. **Summary parroting** — "In summary", "To summarize", "As mentioned above",
64
+ > "As we've seen". AI restates. Humans advance.
65
+ >
66
+ > 5. **False balance** — Every claim immediately followed by "However" or
67
+ > "On the other hand". AI hedges every position. Humans take sides.
68
+ >
69
+ > 6. **Over-transition** — "Furthermore", "Moreover", "Additionally",
70
+ > "In addition to this". AI glues every sentence to the next.
71
+ > Humans let paragraphs breathe.
72
+ >
73
+ > 7. **List abuse** — More than 3 bulleted/numbered lists in a document
74
+ > where prose would be more natural. AI defaults to lists. Humans write
75
+ > paragraphs.
76
+ >
77
+ > 8. **Uniform paragraph structure** — Every paragraph follows the same shape:
78
+ > claim → elaboration → caveat → conclusion. Humans vary paragraph structure
79
+ > dramatically.
80
+ >
81
+ > 9. **Emotional flatness** — No opinion, no frustration, no humor, no surprise.
82
+ > Everything stated with the same neutral weight. Real writing has texture.
83
+ >
84
+ > 10. **Specificity vacuum** — Generic statements where a specific example,
85
+ > number, date, or personal experience would be more convincing.
86
+ > "There are several approaches" vs "I tried three things."
87
+ >
88
+ > **For each finding, report:**
89
+ > - Line number or range
90
+ > - Which pattern (1-10)
91
+ > - The specific text
92
+ > - A one-line suggestion (do NOT rewrite — just direction)
93
+ >
94
+ > **Do NOT:**
95
+ > - Rewrite any text
96
+ > - Give general writing advice
97
+ > - Comment on content accuracy
98
+ > - Flag grammar or spelling (Vale handles that)
99
+ >
100
+ > If the text sounds genuinely human: say "Clean — this reads like a human wrote it."
101
+
102
+ <!-- vale on -->
103
+
104
+ ---
105
+
106
+ ## Step 3 — present findings
107
+
108
+ Combine Vale and subagent results into a single report:
109
+
110
+ ```
111
+ ━━━ PROSE REVIEW ━━━
112
+ File: {file_path}
113
+
114
+ VALE (mechanical)
115
+ Errors: {n}
116
+ Warnings: {n}
117
+ Suggestions: {n}
118
+ {list errors and warnings}
119
+
120
+ VOICE (structural)
121
+ {subagent findings, grouped by pattern number}
122
+
123
+ SCORE
124
+ Mechanical: {CLEAN | NEEDS WORK | NOISY}
125
+ Voice: {HUMAN | MIXED | AI-SOUNDING}
126
+ ━━━━━━━━━━━━━━━━━━━━
127
+ ```
128
+
129
+ Scoring:
130
+ - **Mechanical CLEAN**: 0 Vale errors, ≤3 warnings
131
+ - **Mechanical NEEDS WORK**: 1+ errors or >3 warnings
132
+ - **Mechanical NOISY**: >5 errors
133
+ - **Voice HUMAN**: 0-1 structural findings
134
+ - **Voice MIXED**: 2-4 structural findings
135
+ - **Voice AI-SOUNDING**: 5+ structural findings
136
+
137
+ ---
138
+
139
+ ## Step 4 — offer remediation
140
+
141
+ Based on the score:
142
+
143
+ | Score | Action |
144
+ |-------|--------|
145
+ | CLEAN + HUMAN | "Ready to share." Done. |
146
+ | NEEDS WORK + HUMAN | "Fix the Vale findings, voice is good." List specific fixes. |
147
+ | Any + MIXED | "Want me to suggest rewrites for the flagged sections?" |
148
+ | Any + AI-SOUNDING | "This needs a rewrite pass. Want me to rewrite the flagged sections while preserving your meaning?" |
149
+
150
+ If the user asks for rewrites:
151
+ - Rewrite ONLY the flagged sections
152
+ - Preserve the original meaning exactly
153
+ - Make it sound like a direct, decisive human wrote it
154
+ - Show a diff of original vs rewritten for approval
155
+ - After approval: apply changes, re-run Vale to verify no new mechanical issues
156
+
157
+ ---
158
+
159
+ ## Rules
160
+
161
+ - Never skip the Vale pass. Mechanical issues are fixed before voice issues.
162
+ - Never auto-fix. Always show findings first, then offer remediation.
163
+ - The subagent receives zero conversation history — fresh eyes every time.
164
+ - This skill works on any text file, not just Markdown.
165
+ - If the file is >500 lines: warn about review quality and suggest reviewing in sections.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@esoteric-logic/praxis-harness",
3
- "version": "2.4.0",
3
+ "version": "2.5.0",
4
4
  "description": "Layered Claude Code harness — workflow discipline, AI-Kits, persistent vault integration",
5
5
  "bin": {
6
6
  "praxis-harness": "./bin/praxis.js"
@@ -97,6 +97,12 @@ if command -v vale &>/dev/null && [ -f "$VALE_CONFIG_DIR/.vale.ini" ]; then
97
97
  if [ -d "$VALE_CONFIG_DIR/Praxis" ] && [ -d "$VALE_CONFIG_DIR/.vale-styles" ]; then
98
98
  cp -R "$VALE_CONFIG_DIR/Praxis" "$VALE_CONFIG_DIR/.vale-styles/Praxis"
99
99
  echo " Praxis rules copied to .vale-styles/"
100
+ # Copy vocabulary files to Vale's expected location
101
+ if [ -d "$VALE_CONFIG_DIR/Praxis/vocabularies" ]; then
102
+ mkdir -p "$VALE_CONFIG_DIR/.vale-styles/config/vocabularies/Praxis"
103
+ cp "$VALE_CONFIG_DIR/Praxis/vocabularies/"*.txt "$VALE_CONFIG_DIR/.vale-styles/config/vocabularies/Praxis/"
104
+ echo " Praxis vocabulary copied to .vale-styles/config/vocabularies/"
105
+ fi
100
106
  fi
101
107
  fi
102
108