@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.
- package/base/configs/vale/.vale.ini +3 -2
- package/base/configs/vale/Praxis/HeadingCase.yml +26 -0
- package/base/configs/vale/Praxis/SentenceLength.yml +6 -0
- package/base/configs/vale/Praxis/Terminology.yml +25 -0
- package/base/configs/vale/Praxis/vocabularies/accept.txt +32 -0
- package/base/configs/vale/Praxis/vocabularies/reject.txt +3 -0
- package/base/skills/prose-review/SKILL.md +165 -0
- package/package.json +1 -1
- package/scripts/install-tools.sh +6 -0
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
StylesPath = .vale-styles
|
|
2
2
|
MinAlertLevel = suggestion
|
|
3
|
+
Vocab = Praxis
|
|
3
4
|
|
|
4
|
-
Packages =
|
|
5
|
+
Packages = Google, proselint, alex, write-good, Readability
|
|
5
6
|
|
|
6
7
|
# Full suite on Markdown
|
|
7
8
|
[*.md]
|
|
8
|
-
BasedOnStyles = Praxis,
|
|
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,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,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
package/scripts/install-tools.sh
CHANGED
|
@@ -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
|
|