@esoteric-logic/praxis-harness 2.5.0 → 2.6.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/CLAUDE.md +17 -1
- package/base/configs/mcp-servers.json +26 -0
- package/base/configs/registry.json +113 -0
- package/base/hooks/credential-guard.sh +98 -0
- package/base/hooks/dep-audit.sh +105 -0
- package/base/hooks/quality-check.sh +4 -3
- package/base/hooks/recursion-guard.sh +76 -0
- package/base/hooks/session-data-collect.sh +3 -0
- package/base/hooks/settings-hooks.json +18 -0
- package/base/rules/coding.md +2 -2
- package/base/rules/dependency-freshness.md +50 -0
- package/base/rules/live-docs-required.md +81 -0
- package/base/rules/security-posture.md +62 -0
- package/base/skills/blind-judge/SKILL.md +88 -0
- package/base/skills/context7-lookup/SKILL.md +17 -6
- package/base/skills/deliberate/SKILL.md +103 -0
- package/base/skills/dep-hygiene/SKILL.md +93 -0
- package/base/skills/pre-commit-lint/SKILL.md +2 -3
- package/base/skills/research/SKILL.md +106 -0
- package/base/skills/scaffold-new/SKILL.md +8 -6
- package/base/skills/scaffold-new/references/repo-CLAUDE-md-template.md +1 -1
- package/bin/praxis-preflight.sh +317 -0
- package/package.json +1 -1
- package/scripts/install-tools.sh +3 -23
- package/scripts/lint-harness.sh +1 -1
- package/scripts/test-harness.sh +1 -26
- package/base/configs/vale/.vale.ini +0 -17
- package/base/configs/vale/Praxis/AISlop.yml +0 -90
- package/base/configs/vale/Praxis/CopulaAvoidance.yml +0 -22
- package/base/configs/vale/Praxis/ElegantVariation.yml +0 -14
- package/base/configs/vale/Praxis/HeadingCase.yml +0 -26
- package/base/configs/vale/Praxis/Hedging.yml +0 -22
- package/base/configs/vale/Praxis/NaturalVoice.yml +0 -85
- package/base/configs/vale/Praxis/Precision.yml +0 -60
- package/base/configs/vale/Praxis/SentenceLength.yml +0 -6
- package/base/configs/vale/Praxis/Terminology.yml +0 -25
- package/base/configs/vale/Praxis/vocabularies/accept.txt +0 -32
- package/base/configs/vale/Praxis/vocabularies/reject.txt +0 -3
- package/base/skills/prose-review/SKILL.md +0 -165
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
extends: existence
|
|
2
|
-
message: "AI phrasing detected: '%s' — rewrite in your natural voice."
|
|
3
|
-
level: warning
|
|
4
|
-
ignorecase: true
|
|
5
|
-
tokens:
|
|
6
|
-
# Exhausted openers
|
|
7
|
-
- "In today's"
|
|
8
|
-
- "In the realm of"
|
|
9
|
-
- "In an era of"
|
|
10
|
-
- "In the world of"
|
|
11
|
-
- "When it comes to"
|
|
12
|
-
- "It's worth noting that"
|
|
13
|
-
- "It's important to note"
|
|
14
|
-
- "It bears mentioning"
|
|
15
|
-
- "It goes without saying"
|
|
16
|
-
- "Needless to say"
|
|
17
|
-
- "As we all know"
|
|
18
|
-
- "At the end of the day"
|
|
19
|
-
- "Let's face it"
|
|
20
|
-
- "The fact of the matter is"
|
|
21
|
-
- "The bottom line is"
|
|
22
|
-
- "The reality is"
|
|
23
|
-
- "The truth is"
|
|
24
|
-
- "The thing is"
|
|
25
|
-
# Sycophantic filler
|
|
26
|
-
- "That's a great question"
|
|
27
|
-
- "That's an excellent question"
|
|
28
|
-
- "Great question"
|
|
29
|
-
- "Excellent question"
|
|
30
|
-
- "What a great"
|
|
31
|
-
- "Absolutely"
|
|
32
|
-
- "That's a fantastic"
|
|
33
|
-
# Filler transitions
|
|
34
|
-
- "With that being said"
|
|
35
|
-
- "Having said that"
|
|
36
|
-
- "That said"
|
|
37
|
-
- "On that note"
|
|
38
|
-
- "Moving forward"
|
|
39
|
-
- "Going forward"
|
|
40
|
-
- "Looking ahead"
|
|
41
|
-
- "To that end"
|
|
42
|
-
- "In light of this"
|
|
43
|
-
- "In light of the above"
|
|
44
|
-
- "With this in mind"
|
|
45
|
-
- "Bearing this in mind"
|
|
46
|
-
- "Taking this into account"
|
|
47
|
-
- "With the above in mind"
|
|
48
|
-
# Performative exploration
|
|
49
|
-
- "Let's explore"
|
|
50
|
-
- "Let's delve"
|
|
51
|
-
- "Let's unpack"
|
|
52
|
-
- "Let's dive into"
|
|
53
|
-
- "Let's take a closer look"
|
|
54
|
-
- "Let's examine"
|
|
55
|
-
- "shall we explore"
|
|
56
|
-
- "shall we delve"
|
|
57
|
-
# Filler conclusions
|
|
58
|
-
- "In conclusion"
|
|
59
|
-
- "To sum up"
|
|
60
|
-
- "To summarize"
|
|
61
|
-
- "In summary"
|
|
62
|
-
- "All in all"
|
|
63
|
-
- "By and large"
|
|
64
|
-
- "On the whole"
|
|
65
|
-
- "When all is said and done"
|
|
66
|
-
# Performative framing
|
|
67
|
-
- "It's crucial to"
|
|
68
|
-
- "It's essential to"
|
|
69
|
-
- "It's vital to"
|
|
70
|
-
- "It's imperative to"
|
|
71
|
-
- "play a crucial role"
|
|
72
|
-
- "play a vital role"
|
|
73
|
-
- "play a pivotal role"
|
|
74
|
-
- "play an important role"
|
|
75
|
-
- "serves as a testament"
|
|
76
|
-
- "serves as a reminder"
|
|
77
|
-
- "serves as a beacon"
|
|
78
|
-
# Unnecessary hedging stacks
|
|
79
|
-
- "might potentially"
|
|
80
|
-
- "could potentially"
|
|
81
|
-
- "may potentially"
|
|
82
|
-
- "would potentially"
|
|
83
|
-
- "seems to suggest"
|
|
84
|
-
- "appears to indicate"
|
|
85
|
-
- "tends to suggest"
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
extends: existence
|
|
2
|
-
message: "Vague word: '%s' — be specific."
|
|
3
|
-
level: suggestion
|
|
4
|
-
ignorecase: true
|
|
5
|
-
tokens:
|
|
6
|
-
- "various"
|
|
7
|
-
- "several"
|
|
8
|
-
- "numerous"
|
|
9
|
-
- "a number of"
|
|
10
|
-
- "a wide range of"
|
|
11
|
-
- "a broad range of"
|
|
12
|
-
- "a variety of"
|
|
13
|
-
- "wide array of"
|
|
14
|
-
- "enables"
|
|
15
|
-
- "facilitates"
|
|
16
|
-
- "utilizes"
|
|
17
|
-
- "utilize"
|
|
18
|
-
- "leverages"
|
|
19
|
-
- "comprehensive solution"
|
|
20
|
-
- "innovative solution"
|
|
21
|
-
- "scalable solution"
|
|
22
|
-
- "world-class"
|
|
23
|
-
- "best-in-class"
|
|
24
|
-
- "state-of-the-art"
|
|
25
|
-
- "end-to-end"
|
|
26
|
-
- "full-stack"
|
|
27
|
-
- "next-generation"
|
|
28
|
-
- "enterprise-grade"
|
|
29
|
-
- "mission-critical"
|
|
30
|
-
- "production-ready"
|
|
31
|
-
- "battle-tested"
|
|
32
|
-
- "highly scalable"
|
|
33
|
-
- "highly available"
|
|
34
|
-
- "highly performant"
|
|
35
|
-
- "best practices"
|
|
36
|
-
- "industry standard"
|
|
37
|
-
- "gold standard"
|
|
38
|
-
- "significant"
|
|
39
|
-
- "meaningful"
|
|
40
|
-
- "impactful"
|
|
41
|
-
- "thoughtful"
|
|
42
|
-
- "intentional"
|
|
43
|
-
- "robust"
|
|
44
|
-
- "performant"
|
|
45
|
-
- "elegant"
|
|
46
|
-
- "powerful"
|
|
47
|
-
- "flexible"
|
|
48
|
-
- "extensible"
|
|
49
|
-
- "modular"
|
|
50
|
-
- "opinionated"
|
|
51
|
-
- "batteries-included"
|
|
52
|
-
- "turnkey"
|
|
53
|
-
- "frictionless"
|
|
54
|
-
- "effortless"
|
|
55
|
-
- "painless"
|
|
56
|
-
- "blazing fast"
|
|
57
|
-
- "lightning fast"
|
|
58
|
-
- "blazingly fast"
|
|
59
|
-
- "extremely fast"
|
|
60
|
-
- "incredibly fast"
|
|
@@ -1,25 +0,0 @@
|
|
|
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
|
|
@@ -1,32 +0,0 @@
|
|
|
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
|
|
@@ -1,165 +0,0 @@
|
|
|
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.
|