High Quality Content Writer
Use this skill as a closed-loop content system: draft or clean text, score it with deterministic gates, evaluate it in isolation, then retry with concrete fix instructions until quality passes or the retry budget is exhausted.
Operating Model
Default to this loop:
- Prepare an isolated workdir under
.tmp/high-quality-content-writer/<timestamp>/.
- For websites, always separate scoring from extraction:
- For trope scoring, run
slop_score.py --url <url> first so the result is calibrated against the public AI Vetter action when available.
- For token-efficient content review/rewrite, extract compact markdown through Jina Reader and save it as
source.md:
curl -L -s 'https://r.jina.ai/http://https://example.com/path' -o source.md
- If Jina fails or returns an error page, fall back to direct fetch/HTML extraction.
- Save pasted text or extracted markdown as
source.md and the current candidate as candidate.md.
- Run deterministic scoring:
scripts/slop_score.py --file candidate.md --pretty
scripts/quality_gate.py --file candidate.md --pretty
- If available, run an isolated evaluator subagent using
references/evaluator-flow.md. Give it only the candidate text, scoring JSON, user brief, and the skill path.
- If any gate fails, run an isolated writer subagent using
references/writer-flow.md. Give it source.md, candidate.md, previous findings, and fix instructions. Ask it to write the next candidate.md.
- Repeat until pass or
max_attempts is reached. Default max_attempts = 4.
- Return the final text first, then a compact QA report with scores, attempts, remaining risks, and what changed.
Do not stop after analysis when the user asked for final content. The expected output is improved content plus evidence that it passed the gates.
Gates
Use three complementary gates:
- Trope score:
slop_score.py catches tropes.fyi-style AI-writing patterns. Pass target: score <= 25 and verdict Human or AI-assisted; Suspicious is allowed only if the user wants light editing.
- Slop-check score:
quality_gate.py implements the bundled quote/article slop-check criteria. Pass target for articles: clean or good; acceptable is allowed only with explanation; probable_slop and obvious_slop hard fail.
- Quality evaluator score: isolated evaluator scores 1-10 on clarity, specificity, fact density, voice, slop risk, and brief adherence. Pass target: >= 8.
Hard fail if the draft invents facts, drops required claims, adds unsupported numbers, or changes the user's intended meaning.
Common Commands
python3 scripts/slop_score.py --file candidate.md --pretty
python3 scripts/quality_gate.py --file candidate.md --pretty
URL scoring remains available:
python3 scripts/slop_score.py --url https://example.com/article --pretty
For website content checks, prefer explicit Jina extraction when the user wants token-efficient review:
python3 scripts/slop_score.py --url https://example.com/article --pretty
curl -L -s 'https://r.jina.ai/http://https://example.com/article' -o .tmp/high-quality-content-writer/source.md
python3 scripts/quality_gate.py --file .tmp/high-quality-content-writer/source.md --type article --pretty
Output Contract
For a grading-only request:
Verdict: <clean/good/acceptable/probable_slop/obvious_slop + trope verdict>
Score: <quality score>/10
Trope score: <0-100>
Slop-check score: <points>
Findings:
- <issue>: <evidence>
Fix instructions:
- <sentence-level or structural instruction>
For a write/fix request:
<final improved content>
QA:
- Attempts: <n>
- Quality gate: <pass/fail>, <score>/10
- Trope score: <score>, <verdict>
- Slop-check: <score>, <verdict>
- Main fixes: <short list>
- Residual risk: <only if any>
References
references/tropes.md: full uncut tropes.fyi-style rubric supplied by the user.
references/slop-check.md: short quote criteria imported from $slop-check.
references/slop-check-full-criteria.md: full 24-criteria article rubric imported from $slop-check.
references/c8c-loop-analysis.md: distilled mechanics from content-improve-loop.chain and c8c evaluator implementation.
references/writer-flow.md: isolated writer subagent prompt.
references/evaluator-flow.md: isolated evaluator subagent prompt.
references/api-example.md: public Vetter action id, request shape, and response shape.
1---2name: high-quality-content-writer3description: Write, rewrite, audit, and iteratively improve prose until it passes isolated content-quality gates. Use when the user asks for high-quality content, cleanup, anti-slop rewriting, article/copy/landing-page improvement, link/text grading, AI-writing trope removal, slop-check validation, or a loop that keeps revising until the final text is clean, specific, fact-dense, and publishable.4---56# High Quality Content Writer78Use this skill as a closed-loop content system: draft or clean text, score it with deterministic gates, evaluate it in isolation, then retry with concrete fix instructions until quality passes or the retry budget is exhausted.910## Operating Model1112Default to this loop:13141. Prepare an isolated workdir under `.tmp/high-quality-content-writer/<timestamp>/`.152. For websites, always separate scoring from extraction:16 - For trope scoring, run `slop_score.py --url <url>` first so the result is calibrated against the public AI Vetter action when available.17 - For token-efficient content review/rewrite, extract compact markdown through Jina Reader and save it as `source.md`:18 - `curl -L -s 'https://r.jina.ai/http://https://example.com/path' -o source.md`19 - If Jina fails or returns an error page, fall back to direct fetch/HTML extraction.203. Save pasted text or extracted markdown as `source.md` and the current candidate as `candidate.md`.214. Run deterministic scoring:22 - `scripts/slop_score.py --file candidate.md --pretty`23 - `scripts/quality_gate.py --file candidate.md --pretty`245. If available, run an isolated evaluator subagent using `references/evaluator-flow.md`. Give it only the candidate text, scoring JSON, user brief, and the skill path.256. If any gate fails, run an isolated writer subagent using `references/writer-flow.md`. Give it `source.md`, `candidate.md`, previous findings, and fix instructions. Ask it to write the next `candidate.md`.267. Repeat until pass or `max_attempts` is reached. Default `max_attempts = 4`.278. Return the final text first, then a compact QA report with scores, attempts, remaining risks, and what changed.2829Do not stop after analysis when the user asked for final content. The expected output is improved content plus evidence that it passed the gates.3031## Gates3233Use three complementary gates:3435- **Trope score**: `slop_score.py` catches tropes.fyi-style AI-writing patterns. Pass target: score <= 25 and verdict `Human` or `AI-assisted`; `Suspicious` is allowed only if the user wants light editing.36- **Slop-check score**: `quality_gate.py` implements the bundled quote/article slop-check criteria. Pass target for articles: `clean` or `good`; `acceptable` is allowed only with explanation; `probable_slop` and `obvious_slop` hard fail.37- **Quality evaluator score**: isolated evaluator scores 1-10 on clarity, specificity, fact density, voice, slop risk, and brief adherence. Pass target: >= 8.3839Hard fail if the draft invents facts, drops required claims, adds unsupported numbers, or changes the user's intended meaning.4041## Common Commands4243```bash44python3 scripts/slop_score.py --file candidate.md --pretty45python3 scripts/quality_gate.py --file candidate.md --pretty46```4748URL scoring remains available:4950```bash51python3 scripts/slop_score.py --url https://example.com/article --pretty52```5354For website content checks, prefer explicit Jina extraction when the user wants token-efficient review:5556```bash57python3 scripts/slop_score.py --url https://example.com/article --pretty58curl -L -s 'https://r.jina.ai/http://https://example.com/article' -o .tmp/high-quality-content-writer/source.md59python3 scripts/quality_gate.py --file .tmp/high-quality-content-writer/source.md --type article --pretty60```6162## Output Contract6364For a grading-only request:6566```markdown67Verdict: <clean/good/acceptable/probable_slop/obvious_slop + trope verdict>68Score: <quality score>/1069Trope score: <0-100>70Slop-check score: <points>7172Findings:73- <issue>: <evidence>7475Fix instructions:76- <sentence-level or structural instruction>77```7879For a write/fix request:8081```markdown82<final improved content>8384QA:85- Attempts: <n>86- Quality gate: <pass/fail>, <score>/1087- Trope score: <score>, <verdict>88- Slop-check: <score>, <verdict>89- Main fixes: <short list>90- Residual risk: <only if any>91```9293## References9495- `references/tropes.md`: full uncut tropes.fyi-style rubric supplied by the user.96- `references/slop-check.md`: short quote criteria imported from `$slop-check`.97- `references/slop-check-full-criteria.md`: full 24-criteria article rubric imported from `$slop-check`.98- `references/c8c-loop-analysis.md`: distilled mechanics from `content-improve-loop.chain` and c8c evaluator implementation.99- `references/writer-flow.md`: isolated writer subagent prompt.100- `references/evaluator-flow.md`: isolated evaluator subagent prompt.101- `references/api-example.md`: public Vetter action id, request shape, and response shape.