dsh-nerd-mode 0.0.0-stage → 0.2.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/LICENSE +21 -0
- package/NOTICE.md +38 -0
- package/README.md +162 -2
- package/README.zh.md +163 -0
- package/assets/icon-dark.svg +5 -0
- package/assets/icon-light.svg +5 -0
- package/client.js +161 -0
- package/cordis.patch.yml +19 -0
- package/lib/fold.js +39 -0
- package/lib/index.js +93 -0
- package/package.json +56 -4
- package/skills/answer-me-with-html/SKILL.md +197 -0
- package/skills/answer-me-with-html/licenses/OFL-Bangers.txt +93 -0
- package/skills/answer-me-with-html/references/settings.md +19 -0
- package/skills/answer-me-with-html/references/video.md +36 -0
- package/skills/answer-me-with-html/scripts/am.mjs +12417 -0
- package/skills/convert-documents-to-markdown/SKILL.md +26 -0
- package/skills/diagram/SKILL.md +136 -0
- package/skills/humanizer/.claude-plugin/marketplace.json +18 -0
- package/skills/humanizer/.claude-plugin/plugin.json +15 -0
- package/skills/humanizer/.cursor-plugin/plugin.json +12 -0
- package/skills/humanizer/.github/ISSUE_TEMPLATE/config.yml +8 -0
- package/skills/humanizer/.github/ISSUE_TEMPLATE/new-pattern.yml +24 -0
- package/skills/humanizer/.github/ISSUE_TEMPLATE/rewrite-problem.yml +44 -0
- package/skills/humanizer/.github/workflows/validate.yml +29 -0
- package/skills/humanizer/AGENTS.md +54 -0
- package/skills/humanizer/CHANGELOG.md +116 -0
- package/skills/humanizer/LICENSE +21 -0
- package/skills/humanizer/README.md +206 -0
- package/skills/humanizer/SKILL.md +397 -0
- package/skills/humanizer/agents/openai.yaml +4 -0
- package/skills/humanizer/scripts/validate-package.py +146 -0
- package/skills/study/SKILL.md +86 -0
- package/skills/study-plus/SKILL.md +185 -0
- package/skills/teach/GLOSSARY-FORMAT.md +35 -0
- package/skills/teach/LEARNING-RECORD-FORMAT.md +46 -0
- package/skills/teach/MISSION-FORMAT.md +31 -0
- package/skills/teach/RESOURCES-FORMAT.md +32 -0
- package/skills/teach/SKILL.md +140 -0
- package/skills/teach/agents/openai.yaml +5 -0
- package/skills/writing-beats/SKILL.md +66 -0
- package/skills/writing-beats/agents/openai.yaml +5 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: convert-documents-to-markdown
|
|
3
|
+
description: Convert Word (.doc, .docx), PowerPoint (.ppt, .pptx), Excel (.xls, .xlsx), OpenDocument (.odt, .ods, .odp), RTF, EPUB, CSV, and PDF files to GitHub-Flavored Markdown. Use when a task needs the contents of an office document, spreadsheet, presentation, ebook, or PDF you cannot read directly.
|
|
4
|
+
license: MIT
|
|
5
|
+
metadata:
|
|
6
|
+
author: firecrawl
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Convert documents to Markdown
|
|
10
|
+
|
|
11
|
+
Run the anydoc CLI. It needs Node 20+ and no install:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npx -y @firecrawl/anydoc <file> # Markdown to stdout
|
|
15
|
+
npx -y @firecrawl/anydoc <file> -o out.md # write to a file
|
|
16
|
+
npx -y @firecrawl/anydoc - --format csv < f # read stdin
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Rules:
|
|
20
|
+
|
|
21
|
+
1. Supported inputs: `.doc`, `.docx`, `.docm`, `.odt`, `.rtf`, `.epub`, `.pdf`, `.ppt`, `.pps`, `.pot`, `.pptx`, `.pptm`, `.ppsx`, `.ppsm`, `.odp`, `.xls`, `.xlsx`, `.xlsm`, `.xlsb`, `.ods`, `.csv`.
|
|
22
|
+
2. The format is detected from the file content. Pass `--format <name>` only when detection cannot work: CSV from stdin, or a missing or wrong extension.
|
|
23
|
+
3. Exit codes: 0 success, 1 the document could not be converted, 2 usage error, 3 pages of a PDF need OCR. Failures print one `anydoc: <message>` line to stderr. The CLI never prompts.
|
|
24
|
+
4. For a large document, write to a file with `-o` and read the parts you need instead of streaming everything into context.
|
|
25
|
+
5. Scanned and image-only pages need OCR, which anydoc does not do, so the document exits 3. Rerun with `--ocr hosted` to send it to [Firecrawl Parse](https://firecrawl.dev/parse). No signup needed. Pass `--api-key` or set `FIRECRAWL_API_KEY` for higher limits.
|
|
26
|
+
6. Inside a Node, Python, or Rust codebase, prefer the library over shelling out: `@firecrawl/anydoc` on npm, `firecrawl-anydoc` on PyPI, `anydoc` on crates.io. Each exposes the same `to_markdown` / `toMarkdown` API.
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: diagram
|
|
3
|
+
description: Use when parts and their connections explain an idea better than prose, or when the learner asks to draw, sketch, plot, chart, or visualize something. Draws a self-contained SVG, saves it, and embeds it in the reply.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Diagram
|
|
7
|
+
|
|
8
|
+
A picture earns its place when the reader has to hold two things at once: the parts, and how they connect. Draw when the answer is about a relation, a flow, a hierarchy, a sequence over time, or two quantities moving together.
|
|
9
|
+
|
|
10
|
+
Do not draw a list. If the content is a sequence of steps with no branching, a numbered list reads faster. One figure carries one idea; split rather than crowd.
|
|
11
|
+
|
|
12
|
+
## Pick the shape
|
|
13
|
+
|
|
14
|
+
- **Flow**: what happens in order. Three to five boxes left to right, an arrow between each, a dashed return edge for the retry path.
|
|
15
|
+
- **Hierarchy**: what contains what. One root at the top, two to four children below it, elbow connectors.
|
|
16
|
+
- **State**: what can change, and what triggers it. Rounded boxes, arrows labelled with the trigger, a loop back for "stays the same".
|
|
17
|
+
- **Timeline**: what happens when. A horizontal axis with ticks, labels alternating above and below the line.
|
|
18
|
+
- **Comparison**: two things on the same rows. One accent class per side, equal row heights.
|
|
19
|
+
- **Plot**: one quantity against another. Axes with ticks, one accent line, both axes labelled with symbol and unit.
|
|
20
|
+
|
|
21
|
+
When two shapes fit, take the one with fewer boxes.
|
|
22
|
+
|
|
23
|
+
## Draw it
|
|
24
|
+
|
|
25
|
+
Write the SVG file first, then talk about it.
|
|
26
|
+
|
|
27
|
+
1. Write `diagrams/<name>.svg`, a relative path in the working directory. Use a short kebab-case name that says what the figure shows, such as `gradient-update.svg`.
|
|
28
|
+
2. In the reply, put the image on its own line: ``.
|
|
29
|
+
3. Put one caption sentence after it that states the point the picture makes. Keep the prose around it short; the figure carries the detail.
|
|
30
|
+
4. Embed the figure in the section whose step it illustrates, not in a gallery at the end.
|
|
31
|
+
|
|
32
|
+
Inside a `/teach` workspace, write the file to that workspace's `assets/` and reference it from the lesson file instead, with the same relative form.
|
|
33
|
+
|
|
34
|
+
The Markdown path is resolved against the working directory and served from disk, so it must be a file that exists when the message renders. Write the file before the sentence that shows it. No query string, no fragment, no `data:` URL: the renderer rejects all three and shows the alt text instead. To revise a figure, overwrite the file; if the learner still sees the old picture, write a new name.
|
|
35
|
+
|
|
36
|
+
## File contract
|
|
37
|
+
|
|
38
|
+
The file must carry:
|
|
39
|
+
|
|
40
|
+
- `xmlns="http://www.w3.org/2000/svg"`, `viewBox`, and `width`/`height` in pixels.
|
|
41
|
+
- `role="img"` and an `aria-label` that states what the figure shows.
|
|
42
|
+
- One `<style>` block with the palette classes below, so a dark background can override the light default.
|
|
43
|
+
- `font-family="Segoe UI, Inter, system-ui, sans-serif"` on every text group.
|
|
44
|
+
- Arrowheads as `<marker>` in `<defs>`, referenced with `marker-end`.
|
|
45
|
+
|
|
46
|
+
The file must not carry `<script>`, `<foreignObject>`, external `href` or `url(...)` fonts, LaTeX delimiters, or animation. A browser renders it as an isolated image: it inherits no page CSS and no page font, so every color and every glyph has to be stated in the file. Formulas become plain Unicode text inside `<text>`: `θ`, `∇f(x)`, `x²`, `≤`.
|
|
47
|
+
|
|
48
|
+
## Layout budget
|
|
49
|
+
|
|
50
|
+
Work in a 720 wide canvas; height is whatever the content needs plus 40.
|
|
51
|
+
|
|
52
|
+
- Panel: a rounded `<rect>` inset by 0.75, `rx="12"`.
|
|
53
|
+
- Title at 15px bold, baseline `y=40`, left margin 28.
|
|
54
|
+
- Node: 60 tall, `rx="8"`, 42 to 50 of gap between nodes. Three across fit as 180 wide boxes at x=28, 270, 512.
|
|
55
|
+
- Node label 13px, sub-label 12 to 13px in the muted color, both anchored `middle`.
|
|
56
|
+
- Measure before you place: at 13px Segoe UI a line runs about 7.2px per character. A box must be at least `7.2 × characters + 36` wide, and a node holds at most two lines.
|
|
57
|
+
- Arrows land on a box edge with a few pixels of clearance, never inside the box.
|
|
58
|
+
- Keep it under about 12 nodes. Past that the figure stops being readable at chat width.
|
|
59
|
+
|
|
60
|
+
## Palette
|
|
61
|
+
|
|
62
|
+
Copy these classes verbatim and use them; they carry the dark-mode overrides.
|
|
63
|
+
|
|
64
|
+
```svg
|
|
65
|
+
<style>
|
|
66
|
+
.panel { fill: #ffffff; stroke: #e2e8f0; }
|
|
67
|
+
.title { fill: #0f172a; }
|
|
68
|
+
.label { fill: #1e293b; }
|
|
69
|
+
.sub { fill: #475569; }
|
|
70
|
+
.note { fill: #64748b; }
|
|
71
|
+
.wire { stroke: #94a3b8; }
|
|
72
|
+
.b1 { fill: #2563eb; fill-opacity: .08; stroke: #2563eb; }
|
|
73
|
+
.b2 { fill: #b45309; fill-opacity: .08; stroke: #b45309; }
|
|
74
|
+
.b3 { fill: #15803d; fill-opacity: .08; stroke: #15803d; }
|
|
75
|
+
.b4 { fill: #6d28d9; fill-opacity: .08; stroke: #6d28d9; }
|
|
76
|
+
@media (prefers-color-scheme: dark) {
|
|
77
|
+
.panel { fill: #17191d; stroke: #2c313a; }
|
|
78
|
+
.title { fill: #f1f3f7; }
|
|
79
|
+
.label { fill: #e6e9ef; }
|
|
80
|
+
.sub { fill: #a6afbd; }
|
|
81
|
+
.note { fill: #8a94a3; }
|
|
82
|
+
.wire { stroke: #5b6675; }
|
|
83
|
+
.b1 { fill: #4c8dff; fill-opacity: .12; stroke: #4c8dff; }
|
|
84
|
+
.b2 { fill: #d98324; fill-opacity: .12; stroke: #d98324; }
|
|
85
|
+
.b3 { fill: #3fa86a; fill-opacity: .12; stroke: #3fa86a; }
|
|
86
|
+
.b4 { fill: #a78bfa; fill-opacity: .12; stroke: #a78bfa; }
|
|
87
|
+
.head { fill: #5b6675; }
|
|
88
|
+
}
|
|
89
|
+
</style>
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Class `b1` to `b4` mark four distinct things. Give one class one meaning for the whole figure, and when the figure has a legend, build it from the same classes. `note` is for edge labels and footnotes; `wire` styles connectors.
|
|
93
|
+
|
|
94
|
+
## Starter
|
|
95
|
+
|
|
96
|
+
```svg
|
|
97
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 720 250" width="720" height="250" role="img" aria-label="The full pass, run once per unit: explain it, name the gap, explain it again, and repeat until the explanation holds">
|
|
98
|
+
<style>…the palette above…</style>
|
|
99
|
+
<defs>
|
|
100
|
+
<marker id="arrow" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse">
|
|
101
|
+
<path class="head" d="M0 0 L10 5 L0 10 z" fill="#94a3b8"/>
|
|
102
|
+
</marker>
|
|
103
|
+
</defs>
|
|
104
|
+
<rect class="panel" x="0.75" y="0.75" width="718.5" height="248.5" rx="12" stroke-width="1.5"/>
|
|
105
|
+
<text class="title" x="28" y="40" font-family="Segoe UI, Inter, system-ui, sans-serif" font-size="15" font-weight="600">The full pass, run once per unit</text>
|
|
106
|
+
|
|
107
|
+
<g font-family="Segoe UI, Inter, system-ui, sans-serif" font-size="13">
|
|
108
|
+
<rect class="b1" x="28" y="72" width="180" height="60" rx="8" stroke-width="1.5"/>
|
|
109
|
+
<text class="label" x="118" y="98" text-anchor="middle" font-weight="600">Explain it</text>
|
|
110
|
+
<text class="sub" x="118" y="117" text-anchor="middle">in your own words</text>
|
|
111
|
+
|
|
112
|
+
<rect class="b2" x="270" y="72" width="180" height="60" rx="8" stroke-width="1.5"/>
|
|
113
|
+
<text class="label" x="360" y="98" text-anchor="middle" font-weight="600">Name the gap</text>
|
|
114
|
+
<text class="sub" x="360" y="117" text-anchor="middle">without fixing it yet</text>
|
|
115
|
+
|
|
116
|
+
<rect class="b3" x="512" y="72" width="180" height="60" rx="8" stroke-width="1.5"/>
|
|
117
|
+
<text class="label" x="602" y="98" text-anchor="middle" font-weight="600">Explain again</text>
|
|
118
|
+
<text class="sub" x="602" y="117" text-anchor="middle">with the fix in place</text>
|
|
119
|
+
</g>
|
|
120
|
+
|
|
121
|
+
<g class="wire" stroke-width="1.5" fill="none">
|
|
122
|
+
<line x1="212" y1="102" x2="262" y2="102" marker-end="url(#arrow)"/>
|
|
123
|
+
<line x1="454" y1="102" x2="504" y2="102" marker-end="url(#arrow)"/>
|
|
124
|
+
<path d="M602 140 C602 195 118 195 118 140" stroke-dasharray="5 4" marker-end="url(#arrow)"/>
|
|
125
|
+
</g>
|
|
126
|
+
<text class="note" x="360" y="214" text-anchor="middle" font-family="Segoe UI, Inter, system-ui, sans-serif" font-size="12">repeat until the explanation holds</text>
|
|
127
|
+
</svg>
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## Check before you send
|
|
131
|
+
|
|
132
|
+
- Every arrow touches a border at both ends, and no label touches a border.
|
|
133
|
+
- The `aria-label`, the Markdown alt text, and the caption sentence agree.
|
|
134
|
+
- Colors come only from the palette classes, so the figure survives a theme switch.
|
|
135
|
+
- The file path in the image line matches the file you wrote, character for character.
|
|
136
|
+
- The figure says one thing. If it needs a second paragraph of explanation, draw two figures.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json.schemastore.org/claude-code-marketplace.json",
|
|
3
|
+
"name": "humanizer",
|
|
4
|
+
"owner": {
|
|
5
|
+
"name": "blader",
|
|
6
|
+
"url": "https://github.com/blader"
|
|
7
|
+
},
|
|
8
|
+
"description": "Install Humanizer as a Claude plugin.",
|
|
9
|
+
"plugins": [
|
|
10
|
+
{
|
|
11
|
+
"name": "humanizer",
|
|
12
|
+
"source": "./",
|
|
13
|
+
"description": "Rewrite AI-sounding text so it reads like the writer without changing what it says.",
|
|
14
|
+
"license": "MIT",
|
|
15
|
+
"keywords": ["writing", "editing", "humanize", "prose", "style"]
|
|
16
|
+
}
|
|
17
|
+
]
|
|
18
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
|
|
3
|
+
"name": "humanizer",
|
|
4
|
+
"description": "Rewrite AI-sounding text so it reads like the writer without changing what it says.",
|
|
5
|
+
"version": "3.1.0",
|
|
6
|
+
"author": {
|
|
7
|
+
"name": "blader",
|
|
8
|
+
"url": "https://github.com/blader"
|
|
9
|
+
},
|
|
10
|
+
"homepage": "https://github.com/blader/humanizer",
|
|
11
|
+
"repository": "https://github.com/blader/humanizer",
|
|
12
|
+
"license": "MIT",
|
|
13
|
+
"keywords": ["writing", "editing", "humanize", "prose", "style"],
|
|
14
|
+
"skills": ["./"]
|
|
15
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "humanizer",
|
|
3
|
+
"description": "Rewrite AI-sounding text so it reads like the writer without changing what it says.",
|
|
4
|
+
"version": "3.1.0",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "blader"
|
|
7
|
+
},
|
|
8
|
+
"homepage": "https://github.com/blader/humanizer",
|
|
9
|
+
"repository": "https://github.com/blader/humanizer",
|
|
10
|
+
"license": "MIT",
|
|
11
|
+
"keywords": ["writing", "editing", "humanize", "prose", "style"]
|
|
12
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
blank_issues_enabled: false
|
|
2
|
+
contact_links:
|
|
3
|
+
- name: Questions, ideas, and thanks
|
|
4
|
+
url: https://github.com/blader/humanizer/discussions
|
|
5
|
+
about: Ask how to use Humanizer, share results, or say thanks.
|
|
6
|
+
- name: AI detectors still flag the output
|
|
7
|
+
url: https://github.com/blader/humanizer#humanizer
|
|
8
|
+
about: Getting past AI detectors is not a goal. Humanizer edits for human readers.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
name: New tell
|
|
2
|
+
description: A sign of AI writing that no current pattern catches.
|
|
3
|
+
labels: ["enhancement"]
|
|
4
|
+
body:
|
|
5
|
+
- type: textarea
|
|
6
|
+
id: before
|
|
7
|
+
attributes:
|
|
8
|
+
label: Example
|
|
9
|
+
description: Real text that shows the tell. Remove anything private.
|
|
10
|
+
validations:
|
|
11
|
+
required: true
|
|
12
|
+
- type: textarea
|
|
13
|
+
id: after
|
|
14
|
+
attributes:
|
|
15
|
+
label: How a person would write it
|
|
16
|
+
validations:
|
|
17
|
+
required: true
|
|
18
|
+
- type: textarea
|
|
19
|
+
id: why
|
|
20
|
+
attributes:
|
|
21
|
+
label: Why no current pattern covers it
|
|
22
|
+
description: Name the closest existing pattern and say why it misses this. Most new tells fit into an existing pattern.
|
|
23
|
+
validations:
|
|
24
|
+
required: true
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
name: Rewrite problem
|
|
2
|
+
description: A rewrite kept a tell, changed the meaning, added a fact, or over-edited.
|
|
3
|
+
labels: ["bug"]
|
|
4
|
+
body:
|
|
5
|
+
- type: dropdown
|
|
6
|
+
id: problem
|
|
7
|
+
attributes:
|
|
8
|
+
label: What went wrong
|
|
9
|
+
options:
|
|
10
|
+
- A tell survived the rewrite
|
|
11
|
+
- The rewrite added or dropped a fact
|
|
12
|
+
- The rewrite changed text that was fine
|
|
13
|
+
- Something else
|
|
14
|
+
validations:
|
|
15
|
+
required: true
|
|
16
|
+
- type: textarea
|
|
17
|
+
id: input
|
|
18
|
+
attributes:
|
|
19
|
+
label: Input text
|
|
20
|
+
description: The text you gave Humanizer. Remove anything private.
|
|
21
|
+
validations:
|
|
22
|
+
required: true
|
|
23
|
+
- type: textarea
|
|
24
|
+
id: call
|
|
25
|
+
attributes:
|
|
26
|
+
label: How you called it
|
|
27
|
+
description: The agent and model you used, and your exact prompt.
|
|
28
|
+
placeholder: "Claude Code, Opus 5.5: /humanizer then pasted the text"
|
|
29
|
+
validations:
|
|
30
|
+
required: true
|
|
31
|
+
- type: textarea
|
|
32
|
+
id: output
|
|
33
|
+
attributes:
|
|
34
|
+
label: Output
|
|
35
|
+
description: What Humanizer returned.
|
|
36
|
+
validations:
|
|
37
|
+
required: true
|
|
38
|
+
- type: textarea
|
|
39
|
+
id: expected
|
|
40
|
+
attributes:
|
|
41
|
+
label: What it should have done
|
|
42
|
+
description: Quote the sentence that is wrong and say what a careful writer would write. Name the pattern number if you know it.
|
|
43
|
+
validations:
|
|
44
|
+
required: true
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
name: Check package
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
push:
|
|
6
|
+
branches: [main]
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
check:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
steps:
|
|
15
|
+
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
|
|
16
|
+
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
|
17
|
+
with:
|
|
18
|
+
node-version: 22
|
|
19
|
+
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
|
|
20
|
+
with:
|
|
21
|
+
python-version: "3.12"
|
|
22
|
+
- name: Check package files
|
|
23
|
+
run: python3 scripts/validate-package.py
|
|
24
|
+
- name: Check skill discovery
|
|
25
|
+
run: npx --yes skills@1.5.20 add . --list
|
|
26
|
+
- name: Check Claude marketplace
|
|
27
|
+
run: |
|
|
28
|
+
npm install --global @anthropic-ai/claude-code@2.1.237
|
|
29
|
+
claude plugin validate .
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Guide for agents
|
|
2
|
+
|
|
3
|
+
This file explains how to change Humanizer without breaking its package or prompt.
|
|
4
|
+
|
|
5
|
+
## What this repo contains
|
|
6
|
+
|
|
7
|
+
Humanizer is an agent skill written in Markdown. `SKILL.md` is the prompt that agents read. The repo has no build step.
|
|
8
|
+
|
|
9
|
+
Keep the skill portable. Do not write instructions that limit it to one or two agent tools.
|
|
10
|
+
|
|
11
|
+
## Key files
|
|
12
|
+
|
|
13
|
+
- `SKILL.md` is the source of truth and the repo's only skill file. It contains portable YAML metadata, an account of why AI text sounds the way it does, and numbered patterns grouped in six sections and ordered by strength and frequency.
|
|
14
|
+
- `README.md` explains installation, use, and patterns.
|
|
15
|
+
- `CHANGELOG.md` holds the release notes, newest first. Old notes keep the pattern numbers their release used.
|
|
16
|
+
- `.claude-plugin/plugin.json` describes the Claude plugin and points its skill loader at the root `SKILL.md`.
|
|
17
|
+
- `.claude-plugin/marketplace.json` lets users add this repo as a Claude marketplace.
|
|
18
|
+
- `.cursor-plugin/plugin.json` describes the Cursor plugin. Omit a `skills` path so Cursor loads the root `SKILL.md`.
|
|
19
|
+
- `agents/openai.yaml` holds the display name, short description, and default prompt for OpenAI-compatible agents.
|
|
20
|
+
- `scripts/validate-package.py` checks package files and shared values.
|
|
21
|
+
|
|
22
|
+
## Rules for changes
|
|
23
|
+
|
|
24
|
+
Keep `SKILL.md` and `README.md` in sync.
|
|
25
|
+
|
|
26
|
+
- **Patterns:** Patterns are numbered from 1 without gaps, strongest and most frequent first. A new tell earns a pattern only when no existing pattern already implies it; prefer folding it into an existing pattern. If you add, remove, or renumber a pattern, update the README tables, the README section title, and every §reference. The validator derives the count from the headings and checks that README pattern names match them.
|
|
27
|
+
- **Version:** Keep the same version in `SKILL.md` under `metadata.version`, the first `CHANGELOG.md` heading, `.claude-plugin/plugin.json`, and `.cursor-plugin/plugin.json`. Do not add a top-level `version` field to the skill.
|
|
28
|
+
- **Compatibility:** Keep install and use instructions neutral across agents. Names such as Claude Code, Cursor, OpenCode, and Codex are examples, not limits.
|
|
29
|
+
- **Description:** The plugin manifests use the first sentence of the `SKILL.md` description.
|
|
30
|
+
- **Length:** Every word of `SKILL.md` is read on each use. The validator caps it at 5,500 words; a change that adds words should earn them.
|
|
31
|
+
- **History:** Add a short `CHANGELOG.md` note for any behavior change or non-obvious fix.
|
|
32
|
+
- **Checks:** Before publishing, run `python3 scripts/validate-package.py`, `npx skills add . --list`, and `claude plugin validate .`.
|
|
33
|
+
|
|
34
|
+
## Writing style
|
|
35
|
+
|
|
36
|
+
Use Plain Language in code comments, prompts, documentation, descriptions, validation messages, and progress reports.
|
|
37
|
+
|
|
38
|
+
- Lead with the main point.
|
|
39
|
+
- Use common words and active voice.
|
|
40
|
+
- Keep sentences and paragraphs short.
|
|
41
|
+
- Use one term for the same item.
|
|
42
|
+
- Use `must` for requirements.
|
|
43
|
+
- Use headings, lists, and tables when they help the reader.
|
|
44
|
+
- Remove repeated or unnecessary words.
|
|
45
|
+
- Limit acronyms and explain technical terms.
|
|
46
|
+
- Avoid double negatives.
|
|
47
|
+
- Keep exact identifiers, commands, paths, schema fields, quotations, watched phrases, and behavior-bearing examples.
|
|
48
|
+
- Keep the full technical meaning.
|
|
49
|
+
|
|
50
|
+
## Editing the skill
|
|
51
|
+
|
|
52
|
+
- Keep the YAML metadata valid.
|
|
53
|
+
- Treat the prompt below the metadata as the product.
|
|
54
|
+
- Prefer a short, clear instruction over another exception or repeated explanation.
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 3.1.0
|
|
4
|
+
|
|
5
|
+
- Added pattern #26 and section F for replies that re-explain context the reader already has (#269). It acts on replies, not standalone writing. 26 patterns total.
|
|
6
|
+
- Extended the core rule so "something the reader did not already have" counts the surrounding conversation, not only earlier text.
|
|
7
|
+
- Widened #25 to text that describes its own sourcing, assembly, or layout (#290), and added headings written for effect to #20.
|
|
8
|
+
- Extended #2 to "That distinction matters." (#277) and to a sentence that explains what an example already showed (#295).
|
|
9
|
+
- Narrowed #10 so words the dictionary always hyphenates keep their hyphen. Gave each watched word one pattern, and stated the evidence rule and the no-invention rule once each.
|
|
10
|
+
- Fixed the Voice section's dash reference (#273) and the marketplace schema URL (#288).
|
|
11
|
+
- Added a Cursor plugin manifest (#278).
|
|
12
|
+
- README: opens with a before/after, the five strongest tells, and install steps for each agent. States that getting past AI detectors is not a goal. The full example's rewrite now keeps every fact from its draft and adds none. Version history moved to this file.
|
|
13
|
+
|
|
14
|
+
## 3.0.0
|
|
15
|
+
|
|
16
|
+
Rebuilt the skill around one account of why AI text sounds the way it does, and consolidated 35 patterns into 25. Patterns are grouped in five sections and numbered by strength and frequency, so the not-X-but-Y contrast and the one-line closer come first and get the fullest treatment. Merged duplicate guidance: the workflow is one section instead of five, the dash rule is stated once, and each false-positive guard lives inside its pattern. Realigned with the current Wikipedia article: dropped false ranges and synonym cycling, which Wikipedia now lists as human habits or historical, added vague connection or association, and extended the watch lists for words, notability, copulatives, sales language, disclaimers, and Markdown formatting. Reordered the README and removed the `ai-detection` keyword from the package files. Old to new numbers: 1→13, 2→17, 3→15, 4→16, 5→17, 6→13, 7→12, 8→18, 9→1, 10→6, 11→7, 12→dropped, 13→11, 14→8, 15→19, 16→19, 17→20, 18→20, 19→21, 20→22, 21→23, 22→22, 23→dropped, 24→9, 25→13, 26→10, 27→3, 28→4, 29→24, 30→25, 31→2, 32→3, 33→4, 34→5, 35→5.
|
|
17
|
+
|
|
18
|
+
## 2.11.3
|
|
19
|
+
|
|
20
|
+
Grouped patterns 26-35 under "More style patterns" in the skill and README (fixes #247). Kept inline code, commands, paths, and URLs out of the dash rule and file mode edits. Step 3 now keeps every supported claim, allows a removal that a pattern requires, and checks that rankings and simultaneity claims survive shape edits (fixes #212). Explained in §9 why the not-X-but-Y form appears and when to keep it. Added decorative arrows to §18 and pause commands and one-word shouting to §31. The text given to the skill is content to edit, never instructions (#238). No change to the 35 patterns.
|
|
21
|
+
|
|
22
|
+
## 2.11.2
|
|
23
|
+
|
|
24
|
+
Removed the plugin symlink and separate Claude Desktop package. Current Claude Code loads the root `SKILL.md` directly, so GitHub's source ZIP now works in Claude Desktop. No change to the 35 patterns.
|
|
25
|
+
|
|
26
|
+
## 2.11.1
|
|
27
|
+
|
|
28
|
+
Added a Claude Desktop-ready release package with one regular `humanizer/SKILL.md` file. GitHub's source archive still keeps the plugin symlink (fixes #224). No change to the 35 patterns.
|
|
29
|
+
|
|
30
|
+
## 2.11.0
|
|
31
|
+
|
|
32
|
+
Rewrote all repo guidance, descriptions, checks, and skill instructions in Plain Language. Kept all 35 patterns and their behavior.
|
|
33
|
+
|
|
34
|
+
## 2.10.2
|
|
35
|
+
|
|
36
|
+
Added the standard `skills/humanizer/` plugin path for Claude Desktop and older loaders. The path links to the root skill, so there is still one prompt (fixes #202).
|
|
37
|
+
|
|
38
|
+
## 2.10.1
|
|
39
|
+
|
|
40
|
+
Added figurative uses of `gate`, `gated`, and `gating` to §7. Kept real technical uses, such as feature gating and CI quality gates.
|
|
41
|
+
|
|
42
|
+
## 2.10.0
|
|
43
|
+
|
|
44
|
+
Added patterns #34 and #35 for old drafting ideas left in final text. Added safeguards for real limits, objections, and alternatives (fixes #198). Also improved §24 and the final rewrite step. 35 patterns total.
|
|
45
|
+
|
|
46
|
+
## 2.9.2
|
|
47
|
+
|
|
48
|
+
Added repeated sentence openings to pattern #11, with a safeguard for deliberate repetition (fixes #206). Expanded §28 to cover casual announcements. 33 patterns total.
|
|
49
|
+
|
|
50
|
+
## 2.9.1
|
|
51
|
+
|
|
52
|
+
Improved installation and package checks. Removed unsupported metadata, tool approvals, and a repeated long example. 33 patterns total.
|
|
53
|
+
|
|
54
|
+
## 2.9.0
|
|
55
|
+
|
|
56
|
+
Added the rule against invented facts and updated every example to follow it (fixes #187). Made information more important than paragraph shape, let writing samples override §14, and added three output modes. 33 patterns total.
|
|
57
|
+
|
|
58
|
+
## 2.8.3
|
|
59
|
+
|
|
60
|
+
Moved the version to `metadata.version` for Agent Skills compatibility. 33 patterns total.
|
|
61
|
+
|
|
62
|
+
## 2.8.2
|
|
63
|
+
|
|
64
|
+
Replaced the main example with a first-person Lisbon story that keeps the original topic, view, and detail. 33 patterns total.
|
|
65
|
+
|
|
66
|
+
## 2.8.1
|
|
67
|
+
|
|
68
|
+
Added cross-agent installation, Claude plugin files, and a safeguard for quoted text. 33 patterns total.
|
|
69
|
+
|
|
70
|
+
## 2.8.0
|
|
71
|
+
|
|
72
|
+
Added patterns #31-33 and expanded pattern #20 to catch chatbot offers. 33 patterns total.
|
|
73
|
+
|
|
74
|
+
## 2.7.0
|
|
75
|
+
|
|
76
|
+
Added pattern #30, strengthened the dash rule, and expanded pattern #21 to cover unsupported guesses. 30 patterns total.
|
|
77
|
+
|
|
78
|
+
## 2.6.0
|
|
79
|
+
|
|
80
|
+
Combined repeated workflow text, limited personality guidance to the right content, removed model guesses, and shortened the main example. 29 patterns total.
|
|
81
|
+
|
|
82
|
+
## 2.5.1
|
|
83
|
+
|
|
84
|
+
Added passive voice and missing subjects. 29 patterns total.
|
|
85
|
+
|
|
86
|
+
## 2.5.0
|
|
87
|
+
|
|
88
|
+
Added deeper-truth claims, announcements, repeated headings, and clipped negative endings. Tightened the dash rule and corrected the frontmatter. 28 patterns total.
|
|
89
|
+
|
|
90
|
+
## 2.4.0
|
|
91
|
+
|
|
92
|
+
Added writing-sample matching.
|
|
93
|
+
|
|
94
|
+
## 2.3.0
|
|
95
|
+
|
|
96
|
+
Added hyphenated word pairs.
|
|
97
|
+
|
|
98
|
+
## 2.2.0
|
|
99
|
+
|
|
100
|
+
Added a draft check and second rewrite.
|
|
101
|
+
|
|
102
|
+
## 2.1.1
|
|
103
|
+
|
|
104
|
+
Corrected the curly-quote example.
|
|
105
|
+
|
|
106
|
+
## 2.1.0
|
|
107
|
+
|
|
108
|
+
Added before/after examples for all 24 patterns.
|
|
109
|
+
|
|
110
|
+
## 2.0.0
|
|
111
|
+
|
|
112
|
+
Rewrote the skill from the Wikipedia source.
|
|
113
|
+
|
|
114
|
+
## 1.0.0
|
|
115
|
+
|
|
116
|
+
First release.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Siqi Chen
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|