Skip to main content

Stef

@skunk-ape/stefv2026.08.16.1· 26d agoMODELSSKILLS
01README

Simple Technical English Flavored — a deterministic prose linter, a mechanical fixer, and a bounded LLM rewrite loop.

The design is a split, not a pipeline. A linter decides the eleven mechanical ASD-STE100 rules a script can decide. An LLM handles the rules no script can judge, and reworks the draft until the linter is clean or the attempt budget runs out. The linter is the oracle and the model is the writer, so nothing grades its own work and the retry loop has a real exit condition.

Methods

  • lint — run the eleven checks and emit kind: findings. Deterministic, no model call, no API key.
  • normalize — apply the fixes a script can make without judgement, then re-lint. Deterministic, no model call, no API key.
  • rewrite — tool-call mode: run the whole loop in one command by spawning claude -p. Runs on whatever credential Claude Code already holds, so no API key is stored in a vault.
  • start / record — referee mode: hold state and enforce the attempt cap while a driving agent does the writing. Executes nothing, needs no credential. The bundled simple-english skill drives this loop.

Every method takes the same arguments. Pass text or path to say what to read. Pass session to name the state slot to write, so two drafts in flight never overwrite each other.

Mechanical fixes

Three checks have deterministic repairs: emphasis punctuation, Latin abbreviations, and unambiguous contractions. rewrite and start both apply them first, which spends no model call on work a script can do. Set normalizeFirst: false in globalArguments to turn this off.

Checks

long-sentence (25 words descriptive / 20 procedural), contraction, banned-modal, perfect-tense, ing-clause, semicolon, latin-abbrev, slop-word, trailing-condition, synonym-rotation, and emphasis. Code blocks, inline code, headings, tables, URLs, blockquotes, and shell-prompt lines are stripped before any check runs, so a command or a quoted log line is never rewritten.

Interoperability

Findings use the kind: findings contract that @swamp/software-factory's findings-clear gate consumes, so a scripted rule and a judgement-based LLM reviewer merge behind one gate.

Configuration

The style guide is data, not code. Per-check severities, the blocking severity list, the sentence limit, the reason-checked guidance block, and wrong/right anti-pattern examples all live in globalArguments, so a writer tunes the style without republishing the extension.

Prerequisites

  • swamp initialized in the repository (swamp repo init)
  • Claude Code on PATH, for rewrite only (referee mode needs nothing)
02Models1
@skunk-ape/stefv2026.08.16.1stef.ts

Global Arguments

ArgumentTypeDescription
textTypeenum
maxWords?number
severitiesrecord
blockingarray
maxAttemptsnumber
normalizeFirstboolean
guidancestring
antiPatternsarray
modelstring
claudePathstring
wallTimeoutMsnumber
fn lint(text?: string, path?: string, textType?: enum, maxWords?: number)
Lint a draft against the eleven mechanical Simple English checks and emit kind: findings. Deterministic — no model call, no credential.
ArgumentTypeDescription
text?string
path?string
textType?enum
maxWords?number
fn normalize(text?: string, path?: string, textType?: enum, maxWords?: number)
Apply the mechanical fixes a script can make without judgement — emphasis punctuation, Latin abbreviations, and unambiguous contractions — then re-lint. Deterministic, no model call, no credential.
ArgumentTypeDescription
text?string
path?string
textType?enum
maxWords?number
fn rewrite(text?: string, path?: string, textType?: enum, maxWords?: number)
Tool-call mode: rewrite a draft and re-lint after each attempt, feeding findings back into the next prompt. Runs the whole loop in one command by spawning `claude -p`.
ArgumentTypeDescription
text?string
path?string
textType?enum
maxWords?number
fn start(text?: string, path?: string, textType?: enum, maxWords?: number)
Referee mode: open a rewrite session. Lints the draft and records what the driving agent must fix. Executes nothing — no model call, no credential.
ArgumentTypeDescription
text?string
path?string
textType?enum
maxWords?number
fn record(text?: string, path?: string)
Referee mode: submit the driving agent's rewrite. Re-lints it, counts the attempt against the cap, and refuses once the session is clean or exhausted.
ArgumentTypeDescription
text?string
path?string

Resources

findings(30d)— Simple English lint findings, in the software-factory findings contract.
rewrite(30d)— Tool-call mode: the rewritten draft and any findings that survived.
normalized(30d)— Mechanically fixed text, the fixes applied, and what still needs judgement.
session(30d)— Referee mode: rewrite-loop state and the next action for the driver.
03Skills1
simple-english1 file
04Stats
A
100 / 100
Downloads
1
Archive size
35.5 KB
  • Has README or module doc2/2earned
  • README has a code example1/1earned
  • README is substantive1/1earned
  • Most symbols documented1/1earned
  • No slow types (deprecated)1/1earned
  • Dependencies pass trust audit2/2earned
  • Has description1/1earned
  • Platform support declared (or universal)2/2earned
  • License declared1/1earned
  • Verified public repository2/2earned
05Platforms
06Labels