@gobing-ai/knowledge-kit 0.0.11 → 0.0.13
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/dist/index.js +451 -152
- package/package.json +1 -1
- package/plugins/generations/content-gen/dist/index.js +22167 -0
- package/plugins/generations/content-gen/plugin.json +1 -1
- package/plugins/generations/content-gen/src/storm.ts +99 -50
- package/plugins/generations/core-facts-gen/dist/index.js +22048 -0
- package/plugins/generations/core-facts-gen/package.json +17 -0
- package/plugins/generations/core-facts-gen/plugin.json +7 -0
- package/plugins/generations/core-facts-gen/src/index.ts +116 -0
- package/plugins/generations/core-facts-gen/tsconfig.json +4 -0
- package/plugins/generations/daily-article-gen/dist/index.js +22022 -0
- package/plugins/generations/daily-article-gen/package.json +17 -0
- package/plugins/generations/daily-article-gen/plugin.json +7 -0
- package/plugins/generations/daily-article-gen/src/index.ts +91 -0
- package/plugins/generations/daily-article-gen/tsconfig.json +4 -0
- package/plugins/generations/dailynews-gen/dist/index.js +22324 -0
- package/plugins/generations/dailynews-gen/plugin.json +1 -1
- package/plugins/generations/dailynews-gen/src/index.ts +11 -0
- package/plugins/generations/dailynews-gen/src/script-builder.ts +1 -1
- package/plugins/generations/episode-plan-gen/dist/index.js +22479 -0
- package/plugins/generations/episode-plan-gen/package.json +17 -0
- package/plugins/generations/episode-plan-gen/plugin.json +7 -0
- package/plugins/generations/episode-plan-gen/src/index.ts +726 -0
- package/plugins/generations/episode-plan-gen/tsconfig.json +4 -0
- package/plugins/generations/image-gen/config.example.yaml +75 -0
- package/plugins/generations/image-gen/dist/index.js +22619 -0
- package/plugins/generations/image-gen/package.json +17 -0
- package/plugins/generations/image-gen/plugin.json +7 -0
- package/plugins/generations/image-gen/presets/formats/cover.yaml +57 -0
- package/plugins/generations/image-gen/presets/formats/free.yaml +46 -0
- package/plugins/generations/image-gen/presets/formats/illustration.yaml +48 -0
- package/plugins/generations/image-gen/presets/styles/clean-webapp-ui.yaml +28 -0
- package/plugins/generations/image-gen/presets/styles/cute.yaml +3 -0
- package/plugins/generations/image-gen/presets/styles/editorial.yaml +3 -0
- package/plugins/generations/image-gen/presets/styles/fresh.yaml +3 -0
- package/plugins/generations/image-gen/presets/styles/minimalist.yaml +3 -0
- package/plugins/generations/image-gen/presets/styles/photorealistic.yaml +3 -0
- package/plugins/generations/image-gen/presets/styles/sketch.yaml +3 -0
- package/plugins/generations/image-gen/presets/styles/technical-diagram.yaml +3 -0
- package/plugins/generations/image-gen/presets/styles/vibrant.yaml +3 -0
- package/plugins/generations/image-gen/presets/styles/warm.yaml +3 -0
- package/plugins/generations/image-gen/src/bytes.ts +19 -0
- package/plugins/generations/image-gen/src/index.ts +319 -0
- package/plugins/generations/image-gen/src/job.ts +143 -0
- package/plugins/generations/image-gen/src/paths.ts +31 -0
- package/plugins/generations/image-gen/src/presets.ts +344 -0
- package/plugins/generations/image-gen/src/providers/seedream.ts +128 -0
- package/plugins/generations/image-gen/src/providers/types.ts +285 -0
- package/plugins/generations/image-gen/tsconfig.json +8 -0
- package/plugins/generations/voice-gen/dist/index.js +23027 -0
- package/plugins/generations/voice-gen/plugin.json +1 -1
- package/plugins/generations/voice-gen/src/index.ts +102 -11
- package/plugins/generations/voice-gen/src/qc.ts +154 -9
- package/plugins/ingestions/aihot-ingest/dist/index.js +22358 -0
- package/plugins/ingestions/aihot-ingest/plugin.json +2 -2
- package/plugins/ingestions/aihot-ingest/src/index.ts +72 -13
- package/plugins/ingestions/aihot-ingest/src/mapper.ts +1 -0
- package/plugins/ingestions/aihot-ingest/src/rss.ts +151 -0
- package/plugins/ingestions/horizon-ingest/dist/index.js +22105 -0
- package/plugins/ingestions/horizon-ingest/package.json +17 -0
- package/plugins/ingestions/horizon-ingest/plugin.json +7 -0
- package/plugins/ingestions/horizon-ingest/src/index.ts +205 -0
- package/plugins/ingestions/horizon-ingest/tsconfig.json +4 -0
- package/plugins/ingestions/karakeep-local/dist/index.js +24204 -0
- package/plugins/ingestions/karakeep-local/plugin.json +1 -1
- package/plugins/ingestions/last30days-ingest/dist/index.js +22050 -0
- package/plugins/ingestions/last30days-ingest/package.json +17 -0
- package/plugins/ingestions/last30days-ingest/plugin.json +7 -0
- package/plugins/ingestions/last30days-ingest/src/index.ts +148 -0
- package/plugins/ingestions/last30days-ingest/tsconfig.json +4 -0
- package/plugins/ingestions/web-search/dist/index.js +24379 -0
- package/plugins/ingestions/web-search/plugin.json +1 -1
- package/plugins/kk/commands/image-generate.md +15 -0
- package/plugins/kk/config.example.yaml +80 -0
- package/plugins/kk/skills/image-authoring/SKILL.md +250 -0
- package/plugins/kk/skills/image-authoring/references/illustration-positions.md +87 -0
- package/plugins/kk/skills/image-authoring/references/migrating-from-wt.md +31 -0
- package/plugins/kk/skills/image-authoring/references/providers.md +52 -0
- package/plugins/kk/skills/image-authoring/references/style-extraction.md +134 -0
- package/plugins/kk/skills/taste-unslop/SKILL.md +12 -6
- package/plugins/kk/skills/taste-unslop/references/pattern-guide.md +128 -48
- package/plugins/kk/workflows/kk-daily-ai-voice.yaml +432 -19
- package/plugins/publishings/emdash-pub/dist/index.js +22243 -0
- package/plugins/publishings/emdash-pub/plugin.json +1 -1
- package/plugins/publishings/podcast-pub/dist/index.js +22596 -0
- package/plugins/publishings/podcast-pub/package.json +17 -0
- package/plugins/publishings/podcast-pub/plugin.json +13 -0
- package/plugins/publishings/podcast-pub/src/index.ts +538 -0
- package/plugins/publishings/podcast-pub/src/map.ts +165 -0
- package/plugins/publishings/podcast-pub/src/microfeed-client.ts +196 -0
- package/plugins/publishings/podcast-pub/src/show-notes.ts +132 -0
- package/plugins/publishings/podcast-pub/tsconfig.json +4 -0
- package/plugins/publishings/qiita-pub/dist/index.js +22081 -0
- package/plugins/publishings/qiita-pub/plugin.json +1 -1
- package/plugins/publishings/surfdash-pub/dist/index.js +22233 -0
- package/plugins/publishings/surfdash-pub/plugin.json +1 -1
- package/plugins/publishings/surfdash-pub/src/index.ts +328 -62
- package/plugins/publishings/zenn-pub/dist/index.js +22122 -0
- package/plugins/publishings/zenn-pub/plugin.json +1 -1
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# Style extraction from reference images
|
|
2
|
+
|
|
3
|
+
Loaded by the image-authoring skill when the operator hands over one or more
|
|
4
|
+
reference images and wants the look captured as a reusable style preset.
|
|
5
|
+
Extraction is a **skill operation** — the running agent reads the image(s) with
|
|
6
|
+
its own vision and writes a YAML file. No plugin code, no vision API call, no
|
|
7
|
+
provider credential is involved.
|
|
8
|
+
|
|
9
|
+
There are two mechanisms for using a reference image, and this file owns the
|
|
10
|
+
boundary between them:
|
|
11
|
+
|
|
12
|
+
| baoyu usage | kk mechanism | What happens |
|
|
13
|
+
| --- | --- | --- |
|
|
14
|
+
| `direct` | pass-through | The file rides `ImageJobSpec.referenceImages` (0104) to a provider whose `supportsReferenceImages(model)` is true (0103). Highest fidelity; produces one image, nothing reusable. |
|
|
15
|
+
| `style` | extraction (this file) | The look is analysed and written as a `styles/<name>.yaml`. Works with every provider; reusable and editable. |
|
|
16
|
+
| `palette` | extraction, partial | Same procedure, but only `palette`, `name` and `description` are filled; `modifiers` stays a one-line summary. |
|
|
17
|
+
|
|
18
|
+
## Where the preset goes
|
|
19
|
+
|
|
20
|
+
Write to the **user root**: `~/.config/kk/image-presets/styles/<name>.yaml`. A cloned
|
|
21
|
+
look is usually the operator's, not the repository's. An operator who wants the
|
|
22
|
+
preset shared with a team writes to the project root
|
|
23
|
+
(`<KNOWLEDGE_KIT_PROJECT_ROOT>/.kk/image-presets/styles/`) instead — it ranks
|
|
24
|
+
higher in the loader chain. No registration step exists or is needed: the
|
|
25
|
+
loader discovers presets by scanning these directories (0102). If the chosen
|
|
26
|
+
name matches a shipped preset, the new file **shadows** it whole-file and the
|
|
27
|
+
loader emits a `shadowed` diagnostic naming both paths — that is the intended
|
|
28
|
+
way to adjust a shipped style, not an accident.
|
|
29
|
+
|
|
30
|
+
## Input rules
|
|
31
|
+
|
|
32
|
+
- **One to five reference images.** Count them before reading anything.
|
|
33
|
+
- **Cap refusal (exact wording):** if the operator supplies more than 5, refuse
|
|
34
|
+
before reading any of them:
|
|
35
|
+
`Refusing extraction: <N> reference images requested; the cap is 5. Split the set into coherent groups, or drop the least representative references and re-run.`
|
|
36
|
+
The cap is a constant, not a design commitment; changing it means changing
|
|
37
|
+
this number and this message only.
|
|
38
|
+
|
|
39
|
+
## Output rules — the schema is frozen
|
|
40
|
+
|
|
41
|
+
Emit **YAML only** — no prose, no code fence. The document fills **exactly**
|
|
42
|
+
the `StylePreset` fields of `plugins/generations/image-gen/src/presets.ts` and
|
|
43
|
+
nothing else. **Inventing a field outside this list is a defect, not an
|
|
44
|
+
enhancement.** Field-by-field:
|
|
45
|
+
|
|
46
|
+
| Field | Required | Rule |
|
|
47
|
+
| --- | --- | --- |
|
|
48
|
+
| `name` | yes | kebab-case, derived from the look, never from the filename. |
|
|
49
|
+
| `description` | yes | One or two sentences naming the look and where it works. |
|
|
50
|
+
| `modifiers` | yes | A comma-separated prompt fragment in the same voice as the shipped styles under `plugins/generations/image-gen/presets/styles/` — `composePrompt` concatenates it as segment 3 of a comma-joined prompt. Read two shipped styles before writing one; a style in the wrong voice produces a prompt in two voices. |
|
|
51
|
+
| `palette` | no | 3–6 entries of `{role, name, hex}`. `role` from `{primary, secondary, accent, background, text}`. `hex` uppercase `#RRGGBB`, sampled from the image, never invented. (A merged set may legitimately keep fewer than 3 — only colours common to every reference survive; see merge rules.) |
|
|
52
|
+
| `typography` | no | Only when the image evidences it. Omit rather than guess. |
|
|
53
|
+
| `visualElements` | no | Array of strings naming recurring visual devices (borders, banding, grain, iconography). Only what the image shows. |
|
|
54
|
+
| `bestFor` | no | The content types this look suits. Inferred from the image's own subject matter. |
|
|
55
|
+
| `negative` | no | What this look must avoid — inferred from what is conspicuously absent. |
|
|
56
|
+
| `source` | yes for extraction | `kind: extracted`, `refImages` = the absolute input paths **in the order given**, `extractedAt` = ISO-8601 timestamp, `confidence` = the judgement below. |
|
|
57
|
+
|
|
58
|
+
### The `confidence` decision rule (human-judged, not computed)
|
|
59
|
+
|
|
60
|
+
- `high` — a single clean image with an obvious, consistent look.
|
|
61
|
+
- `medium` — mixed or noisy references, or a merged set where the references
|
|
62
|
+
disagree on any of the four fidelity axes.
|
|
63
|
+
- `low` — the look is ambiguous, or the image is photographic content rather
|
|
64
|
+
than a designed style (a photo *of* something is not a style).
|
|
65
|
+
|
|
66
|
+
## Multi-image merge rules
|
|
67
|
+
|
|
68
|
+
With N references (1 ≤ N ≤ 5) the output is **one merged preset**, not N
|
|
69
|
+
presets and not an average:
|
|
70
|
+
|
|
71
|
+
- `palette` — colours **common to the set**. A colour appearing in one image
|
|
72
|
+
only is dropped, not averaged into a muddy midpoint.
|
|
73
|
+
- `modifiers` — traits present in **every** image. Divergent traits are
|
|
74
|
+
dropped, and each discarded trait is **named in the extraction report** so
|
|
75
|
+
the operator sees exactly what was thrown away.
|
|
76
|
+
- `confidence` — capped at `medium` when the set disagrees on any fidelity axis.
|
|
77
|
+
- `source.refImages` — all N absolute paths, in the order given.
|
|
78
|
+
|
|
79
|
+
## What extraction never writes
|
|
80
|
+
|
|
81
|
+
**Style only — no format extraction in v1.** A `FormatPreset` carries
|
|
82
|
+
`template`, `variables`, `keywords`, `defaultStyle`, `outputFilename` — none of
|
|
83
|
+
which is recoverable from a picture. Never write a `formats/*.yaml` file. What
|
|
84
|
+
an image *does* yield is arithmetic, not extraction: the extraction report
|
|
85
|
+
**states the observed pixel dimensions and the nearest named aspect ratio** of
|
|
86
|
+
each reference, chosen from `21:9`, `4:3`, `1:1`, `16:9`, `3:4`, `9:16`, as a
|
|
87
|
+
suggestion for which existing format to pair the style with.
|
|
88
|
+
|
|
89
|
+
## Pass-through degradation (visible, never silent)
|
|
90
|
+
|
|
91
|
+
When the operator wants `direct` (pass-through) and the selected provider's
|
|
92
|
+
`supportsReferenceImages(model)` returns `false`, the skill must state it in
|
|
93
|
+
these terms and offer the alternative:
|
|
94
|
+
|
|
95
|
+
`Provider <name> cannot accept reference images for model <model> (supportsReferenceImages: false). Pass-through is unavailable; offering style extraction instead.`
|
|
96
|
+
|
|
97
|
+
**Never silently proceed without the reference.** A plausible image generated
|
|
98
|
+
from a dropped reference is the worst outcome available — worse than an error.
|
|
99
|
+
|
|
100
|
+
## Validate after writing
|
|
101
|
+
|
|
102
|
+
After writing the YAML, run the dry run: `KK_IMAGE_DRY_RUN=1` `image-gen`
|
|
103
|
+
(0104) with a job whose `style` is the new preset's name. A malformed or
|
|
104
|
+
unloadable file fails there loudly, naming the file and the schema violation,
|
|
105
|
+
before any provider spend. No validator is written; 0102's loader and the dry
|
|
106
|
+
run already are one.
|
|
107
|
+
|
|
108
|
+
## Fidelity check (v1 method: human eyeball)
|
|
109
|
+
|
|
110
|
+
To answer "did the clone work": extract from reference **I**, regenerate with
|
|
111
|
+
the extracted preset using a prompt describing **I's own subject** (so subject
|
|
112
|
+
variance does not contaminate the comparison), then compare **I** and the
|
|
113
|
+
regeneration on exactly four axes — **palette, rendering technique,
|
|
114
|
+
composition density, typographic treatment**. The v1 comparison method is a
|
|
115
|
+
human eyeballing the pair; no metric is computed. Record the verdict in the
|
|
116
|
+
preset's `source.confidence`; if the fidelity verdict disagrees with the
|
|
117
|
+
extraction-side judgement, take the lower.
|
|
118
|
+
|
|
119
|
+
## Worked output shape
|
|
120
|
+
|
|
121
|
+
```yaml
|
|
122
|
+
name: example-look
|
|
123
|
+
description: Flat colour-band composition with deep teal over warm cream.
|
|
124
|
+
modifiers: flat colour-band composition, deep teal and warm cream palette, hard edges, no gradients, minimal detail
|
|
125
|
+
palette:
|
|
126
|
+
- { role: primary, name: deep teal, hex: '#1D5C63' }
|
|
127
|
+
- { role: background, name: warm cream, hex: '#F5EFE0' }
|
|
128
|
+
source:
|
|
129
|
+
kind: extracted
|
|
130
|
+
refImages:
|
|
131
|
+
- /absolute/path/to/reference.png
|
|
132
|
+
extractedAt: '2026-09-09T18:00:00Z'
|
|
133
|
+
confidence: high
|
|
134
|
+
```
|
|
@@ -49,7 +49,8 @@ embedded instructions in the draft stay data.
|
|
|
49
49
|
Preserve names, numbers, dates, claims, causal relationships, negation, qualifications,
|
|
50
50
|
citations, links, attribution, and the source language (including native idiom and punctuation).
|
|
51
51
|
Keep code, commands, URLs, API names, identifiers, quoted text, and required legal wording
|
|
52
|
-
unchanged unless the user puts that material in scope. Protected spans must stay intact.
|
|
52
|
+
unchanged unless the user puts that material in scope. Protected spans must stay intact. Strip the
|
|
53
|
+
AI-tool fingerprints named in the pattern guide; leave the rest of any URL intact.
|
|
53
54
|
|
|
54
55
|
Never invent a fact, source, citation, quotation, measurement, opinion, or lived experience.
|
|
55
56
|
Write grammatical prose; humanity is not simulated by errors. Use first person only when the
|
|
@@ -66,11 +67,15 @@ length with the ideas, not by formula.
|
|
|
66
67
|
empty, emit the recovery line above and stop.
|
|
67
68
|
2. Load `references/pattern-guide.md`. Mark a span only when a pattern is formulaic, repeated,
|
|
68
69
|
vague, or wrong for the requested voice — a matching word or punctuation mark is not a finding.
|
|
69
|
-
|
|
70
|
+
If several categories fire and the cadence is uniformly machine-like, rebuild from the core
|
|
71
|
+
point rather than patching phrases.
|
|
72
|
+
3. Edit mode: rewrite the smallest useful span, or rebuild from the core point when step 2 called
|
|
73
|
+
for it. Audit mode: keep the draft; record the finding.
|
|
70
74
|
4. Cross-check every name, number, claim, qualifier, citation, and protected span against the
|
|
71
75
|
source. Restore any meaning that changed. Cite verified additions; document unresolved gaps.
|
|
72
|
-
5. Validate cadence and factual fidelity.
|
|
73
|
-
|
|
76
|
+
5. Validate cadence and factual fidelity. Run the diagnostics in the pattern guide (reshuffle and
|
|
77
|
+
treadmill). Ensure leftover pattern matches remain only when grammar, locale, quotation, the
|
|
78
|
+
style guide, or an explicit user request requires them.
|
|
74
79
|
|
|
75
80
|
Done when the requested mode is satisfied, protected spans are intact, no unsupported claim was
|
|
76
81
|
added, and leftover matches meet step 5.
|
|
@@ -84,8 +89,9 @@ gaps that affect the result.
|
|
|
84
89
|
|
|
85
90
|
### Audit
|
|
86
91
|
|
|
87
|
-
List findings by impact
|
|
88
|
-
|
|
92
|
+
List findings by impact — fingerprints, cutoff disclaimers, chatbot framing, and unsupported
|
|
93
|
+
attributions first. For each: quote the smallest excerpt, name the pattern, explain the effect,
|
|
94
|
+
propose a minimal fix. Leave authorship unstated.
|
|
89
95
|
|
|
90
96
|
### Rationale
|
|
91
97
|
|
|
@@ -2,67 +2,147 @@
|
|
|
2
2
|
|
|
3
3
|
Use these patterns during the scan in `SKILL.md`. A matching word or punctuation mark is not enough
|
|
4
4
|
to justify an edit. Change it only when the usage is formulaic, repeated, vague, or wrong for the
|
|
5
|
-
requested voice.
|
|
5
|
+
requested voice. Wordiness is a clarity edit. Clustered stock diction is a stronger signal than a
|
|
6
|
+
single hit.
|
|
6
7
|
|
|
7
8
|
## Content and evidence
|
|
8
9
|
|
|
9
|
-
1. **Puffery and promotion.** Cut phrases such as "pivotal moment", "
|
|
10
|
-
landscape", "breathtaking",
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
10
|
+
1. **Puffery and promotion.** Cut phrases such as "pivotal moment", "watershed moment", "testament
|
|
11
|
+
to", "evolving landscape", "breathtaking", "nestled", "vibrant", "thriving", and "groundbreaking"
|
|
12
|
+
when facts carry the point better. If the sentence still works after the inflation clause is
|
|
13
|
+
deleted, delete the clause.
|
|
14
|
+
2. **Vague authority.** Replace "experts believe", "reports suggest", "studies show", "analysts
|
|
15
|
+
agree", or "independent testing confirms" with a supplied source. If no source exists, preserve
|
|
16
|
+
the uncertainty and flag or remove the unsupported claim. Named, checkable citations stay.
|
|
17
|
+
3. **Context-free name-dropping.** Keep a person, company, or publication only when the text
|
|
18
|
+
explains what it contributes. A stack of prestige names ("cited in NYT, BBC, and Wired") is
|
|
19
|
+
weaker than one specific reference. Cut historical-analogy montages ("like the printing press,
|
|
20
|
+
the telegraph, and the internet") unless one parallel does analytical work.
|
|
21
|
+
4. **Decorative participial tails.** Delete or expand "highlighting", "showcasing", "ensuring",
|
|
22
|
+
"symbolizing", and "reflecting" endings when they add no supported fact.
|
|
23
|
+
5. **Formulaic concessions.** Replace "despite challenges, it continues to thrive" and "while X has
|
|
24
|
+
limitations, it's still remarkable" with the actual limitation and result supplied by the source.
|
|
25
|
+
Vague balance is not a tradeoff.
|
|
19
26
|
6. **Generic openings and conclusions.** Cut scene-setting and endings such as "the future looks
|
|
20
|
-
bright"
|
|
27
|
+
bright", "only time will tell", or "may become one of the most important narratives of the next
|
|
28
|
+
cycle" unless they state a concrete, preferably falsifiable, claim, decision, or next action.
|
|
29
|
+
7. **Novelty inflation.** Do not treat an established idea as a coinage ("he introduced a term I
|
|
30
|
+
hadn't heard", "the failure mode nobody's naming"). Describe what the source did with the idea.
|
|
31
|
+
Cut invented labels that are never defined.
|
|
21
32
|
|
|
22
33
|
## Language
|
|
23
34
|
|
|
24
|
-
|
|
35
|
+
8. **Stock AI diction.** Words such as "delve", "pivotal", "tapestry", "underscore", "vibrant",
|
|
25
36
|
"intricate", and abstract "landscape" are signals only when generic or clustered. Keep the word
|
|
26
|
-
when it is the precise one.
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
9. **
|
|
30
|
-
|
|
31
|
-
10. **
|
|
32
|
-
|
|
33
|
-
"
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
"
|
|
37
|
+
when it is the precise one. Repeated multi-word boilerplate ("the integration of",
|
|
38
|
+
"community-driven", "long-term sustainability") stacked across a piece is the same class: replace
|
|
39
|
+
with a specific claim, or vary genuinely.
|
|
40
|
+
9. **Inflated linking verbs.** Replace "serves as", "stands as", "features", "presents", or
|
|
41
|
+
promotional "boasts" with "is" or "has" when precision survives.
|
|
42
|
+
10. **Stock frames.** Rewrite repeated "not just X but Y" (including the split form "It isn't X.
|
|
43
|
+
The real story is Y"), forced groups of three, false "from X to Y" ranges, and slot-fill
|
|
44
|
+
templates ("a [adj] step towards [adj] infrastructure", "whether you're X or Y") when a direct
|
|
45
|
+
statement is clearer.
|
|
46
|
+
11. **Synonym cycling.** Pick the precise noun and repeat it instead of rotating through
|
|
47
|
+
near-synonyms ("developers… engineers… practitioners… builders").
|
|
48
|
+
12. **Vague metaphor and borrowed jargon.** Replace metaphorical "substrate", "vector", "north
|
|
49
|
+
star", "flywheel", or "scaffolding" with the actual mechanism. Preserve established domain terms
|
|
50
|
+
such as vector embeddings, API surface, language primitive, and test harness.
|
|
51
|
+
13. **Filler, stacked hedges, and empty intensifiers.** Shorten "in order to", "due to the fact
|
|
52
|
+
that", "moreover", "furthermore", and "in today's X". Collapse hedge stacks ("could potentially",
|
|
53
|
+
"may eventually") to one real qualifier. Drop empty "real" / "actual" / "genuine" on abstract
|
|
54
|
+
nouns unless the sentence names the contrast ("real settlement, not bridged IOUs"). Preserve
|
|
55
|
+
qualifiers that encode real uncertainty; never turn "may" into "will".
|
|
56
|
+
14. **Fancy plain words.** Prefer "use", "help", "many", and "if" over "utilize", "facilitate",
|
|
57
|
+
"numerous", and "in the event that" when meaning is unchanged. These are clarity edits, not
|
|
58
|
+
evidence of who wrote the sentence.
|
|
39
59
|
|
|
40
60
|
## Structure and style
|
|
41
61
|
|
|
42
|
-
|
|
43
|
-
summaries.
|
|
44
|
-
|
|
62
|
+
15. **Mechanical rhythm.** Break repeated sentence openings, equal-length paragraphs, and serial
|
|
63
|
+
summaries. Mix short and long sentences with the ideas, not by formula. In longer general prose,
|
|
64
|
+
a narrow looping vocabulary is a cue to name specific things, not to reach for synonyms;
|
|
65
|
+
technical reference that compresses vocabulary on purpose is exempt. Do not force variation
|
|
66
|
+
into text whose form is intentionally regular, and do not sand away deliberate disfluency,
|
|
67
|
+
fragments, or uneven pacing to make the prose "cleaner".
|
|
68
|
+
16. **Punctuation monotony.** Reduce repeated em dashes, colons, or parenthetical asides. Keep
|
|
45
69
|
punctuation required by grammar, locale, quoted material, or the style guide; no mark is banned.
|
|
46
|
-
|
|
47
|
-
labels that merely repeat the sentence
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
70
|
+
17. **Formatting as decoration.** Remove excessive boldface, title-case headings, emoji headers,
|
|
71
|
+
and inline labels that merely repeat the sentence ("**Speed:** Speed improved…"). Convert
|
|
72
|
+
numbered-list inflation ("here are 7 reasons") to the two or three points that matter. On a
|
|
73
|
+
list label, prefer a colon to a period ("**Intros:** …", not "**Intros.** …"). Cut trailing
|
|
74
|
+
hashtag blocks of six or more tags; keep two or three specific tags, or none — and do not treat
|
|
75
|
+
issue refs, hex colors, preprocessor directives, or in-code `#` as tags. Convert a run of five
|
|
76
|
+
or more bare adjective-noun bullets with no verb into prose or into claims that can be checked.
|
|
77
|
+
Preserve formatting that improves navigation or meets the publication format, including genuine
|
|
78
|
+
lists (changelogs, parameters, ingredients).
|
|
79
|
+
18. **Dense syntax.** Split a sentence when its dependencies make the reader backtrack. Keep
|
|
80
|
+
clauses together when separating them would hide the relationship.
|
|
81
|
+
19. **Unhelpful passive voice.** Name the actor when the actor matters. Keep passive voice when the
|
|
52
82
|
actor is unknown, obvious, or deliberately de-emphasized.
|
|
53
|
-
|
|
54
|
-
number to replace "significantly" or "quickly".
|
|
55
|
-
|
|
83
|
+
20. **Adverbs propping up weak claims.** Use a stronger verb or a supplied measurement. Do not
|
|
84
|
+
invent a number to replace "significantly" or "quickly".
|
|
85
|
+
21. **Typographic inconsistency.** Follow the source language and house style for quotation marks,
|
|
56
86
|
dashes, spacing, capitalization, and headings instead of forcing English ASCII conventions.
|
|
87
|
+
Unweld needless hyphens in open compounds ("research-impact" → "research impact", "in real-time"
|
|
88
|
+
→ "in real time") when house style agrees; keep legitimate modifiers ("real-time analytics") and
|
|
89
|
+
do not treat a hyphen fix as authorship evidence.
|
|
90
|
+
22. **Rhetorical stalls and engagement hooks.** Lead with the claim instead of "what if there were
|
|
91
|
+
a better way", "so why should you care", "the catch?", "the kicker?", or "here's the thing."
|
|
92
|
+
Delete the hook; state the thing.
|
|
93
|
+
23. **Excessive scaffolding.** Merge short text that is over-headed (several headers in a few
|
|
94
|
+
hundred words, or stock "Overview" / "Key Points" / "Conclusion" labels). Cut the one-line
|
|
95
|
+
warm-up that restates the heading. Keep structure that a reader would actually use to navigate.
|
|
96
|
+
24. **Modifier stacking.** Cut stacked hyphenated praise ("a high-quality, well-architected,
|
|
97
|
+
future-proof solution") to the modifier that matters. Individual hyphens may be correct.
|
|
57
98
|
|
|
58
|
-
## Chat and meta
|
|
99
|
+
## Chat, register, and meta
|
|
59
100
|
|
|
60
|
-
|
|
61
|
-
question", "I hope this helps", and "Let me know if".
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
101
|
+
25. **Stock assistant framing.** Remove empty openings and closings such as "Of course", "Great
|
|
102
|
+
question", "Certainly", "I hope this helps", and "Let me know if". Cut "let's explore" /
|
|
103
|
+
"let's break this down" when they only delay the point. Skip acknowledgment loops ("you're
|
|
104
|
+
asking about", "to answer your question"). Keep a direct next step when one exists.
|
|
105
|
+
26. **Sycophancy and recap-flattery.** Replace automatic agreement with the answer or evidence. Do
|
|
106
|
+
not open a reply by summarizing the other person's own work back at them as praise; substance
|
|
107
|
+
first, and a short thanks only if it is warranted.
|
|
108
|
+
27. **Cutoff disclaimers.** State the exact missing evidence or omit the unsupported passage. Never
|
|
109
|
+
disguise a guess as "details are limited" or "as of my last update".
|
|
110
|
+
28. **Speculative gap-filling.** Cut hedged invention that hides a missing fact ("maintains a low
|
|
111
|
+
profile", "likely began his career", "appears to have studied"). Unlike a cutoff disclaimer,
|
|
112
|
+
this does not admit the gap. Replace only with a sourced fact from the draft or an
|
|
113
|
+
authoritative lookup; otherwise flag the gap.
|
|
114
|
+
29. **Writing about the writing.** Cut "this article will delve into" and similar road signs when
|
|
115
|
+
the text can make the point directly.
|
|
116
|
+
30. **Feeling, significance, and candor without mechanism.** Replace reusable mood claims
|
|
117
|
+
("what surprised me most", "I was fascinated to discover", "SQL you can read") with a
|
|
118
|
+
source-backed behavior, example, or number — or cut. Cut lingering-attention frames ("the line
|
|
119
|
+
I keep coming back to", "I can't stop thinking about this") unless a reason follows. Cut
|
|
120
|
+
self-labeling after a list ("that last move is the contrarian one") and reader-steering cues
|
|
121
|
+
("it's worth noting", "interestingly", "this is the interesting part") when the fact can stand
|
|
122
|
+
alone. Cut narrated candor ("I want to be upfront", "two caveats I would rather flag than let
|
|
123
|
+
you discover later"); keep the disclosure itself, including real conflict-of-interest wording.
|
|
124
|
+
31. **Reasoning-chain artifacts.** Remove "let me think step by step", "breaking this down", and
|
|
125
|
+
numbered internal monologue. State the conclusion, then the evidence.
|
|
126
|
+
32. **Wall-of-text replies.** In conversational registers (issue/PR comments, chat, DMs), break a
|
|
127
|
+
dense reply-length block at thought boundaries. Do not apply this to long-form prose, docs, or
|
|
128
|
+
a deliberately tight paragraph.
|
|
129
|
+
33. **Tool fingerprints.** Fill or delete shipped placeholders (`[Your Name]`, `[INSERT SOURCE]`,
|
|
130
|
+
`2025-XX-XX`). Strip leaked chat citation tokens (`citeturn0search0`, `oai_citation`,
|
|
131
|
+
`contentReference[oaicite:…]`). Strip `utm_source` values that name an AI product; leave the
|
|
132
|
+
rest of the URL intact.
|
|
133
|
+
|
|
134
|
+
## Diagnostics
|
|
135
|
+
|
|
136
|
+
These are writer-side tests, not findings by themselves.
|
|
137
|
+
|
|
138
|
+
- **Reshuffle.** If two body paragraphs can swap places without breaking the piece, the draft is a
|
|
139
|
+
list of points, not a building argument. Add the missing through-line, or make the list explicit.
|
|
140
|
+
- **Treadmill.** For each paragraph, name the one fact, claim, or turn it adds. If there isn't one,
|
|
141
|
+
cut it. If there is, lead with it.
|
|
142
|
+
|
|
143
|
+
## Provenance
|
|
144
|
+
|
|
145
|
+
Pattern classes adapted from the Pattern reference in
|
|
146
|
+
[avoid-ai-writing](https://github.com/conorbronsdon/avoid-ai-writing) (MIT), rewritten here as
|
|
147
|
+
editing signals. That catalog's replace-on-sight word lists, em-dash bans, numeric type-token
|
|
148
|
+
thresholds, and detector scoring are not part of this skill.
|