Strip the AI packaging. Keep the meaning.
Try the browser audit — no install
patina is a deterministic, pattern-based humanizer for Korean, English, Chinese, and Japanese. It finds AI-sounding phrasing and rewrites it without changing the claim, numbers, polarity, or causation.
It is not a black-box paraphraser, authorship detector, or detector-bypass tool. patina is built for allowed AI-assisted drafting where the author wants cleaner voice, an audit trail, and meaning-preservation checks.
--preview is the main sample: patina snapshots a live URL or local .html, rewrites only the prose blocks, and renders the result back onto the page. The floating bar switches between Rewritten / Original / Both / Diff, jumps between every changed block, and shows the deterministic score before → after.
patina --preview --lang en page.html # a local .html file
patina --preview https://example.com/post # or a live URLThe sample keeps the page structure, headings, CTA, and concrete facts (30 templates, planning docs, handoffs). It removes inflated phrasing like “innovative solution,” “transform productivity,” and “new paradigm” with an inline audit trail instead of a black-box paraphrase.
More examples: Before/After Gallery (한국어) · CLI transcript.
Open patina.vibetip.help to score KO / EN / ZH / JA text in your browser. The playground is audit-only: it does not rewrite text, call external LLMs, or send API keys to a server. For Korean, the browser and CLI may surface translationese / koPostEditese.v1 metadata as editing hints; this metadata is advisory only, is not calibrated score input, and must not drive hot paragraphs, gates, severity, baselines, percentiles, benchmark claims, prompt/rewrite gates, or authorship verdicts.
Claude Code — plugin marketplace (no clone, recommended):
/plugin marketplace add devswha/patina
/plugin install patina@patina
Claude Code · Codex CLI · Cursor · OpenCode — install script:
curl -fsSL https://raw.githubusercontent.com/devswha/patina/main/install.sh | bashThen run the skill from Claude Code, Codex CLI, Cursor, or OpenCode:
/patina --lang en
[paste your text here]
Useful skill calls:
/patina --tone narrative
/patina --tone auto --lang en
Requires Node.js >= 18.
npx patina-cli doctor
npx patina-cli --lang en input.txtUse a logged-in local model CLI without an API key:
printf '%s\n' 'Coffee has emerged as a pivotal cultural phenomenon.' \
| npx patina-cli --lang en --backend codex-cliSupported local backends: codex-cli, claude-cli, gemini-cli, kimi-cli.
Without --model, patina passes the strongest documented default per backend:
gpt-5.5 for OpenAI/Codex, claude-sonnet-4-6 for Claude, gemini-2.5-pro
for Gemini, and kimi-code/kimi-for-coding for Kimi Code. See
Authentication (한국어).
For large --batch rewrites, prefer an OpenAI-compatible HTTP backend. Local
CLI backends are agent runtimes; patina caps them conservatively, uses compact
prompts for them, and exposes --timeout-ms, --max-concurrency,
--max-retries, --max-failures, and --max-failure-rate for batch safety.
| 168 patterns | 33 rewrite-capable + 9 score-only viral-hook per language (42 each across KO/EN/ZH/JA) — see the full 168-pattern catalog in PATTERNS.md |
| Modes | rewrite · audit · score · diff · ouroboros |
| Surfaces | agent skill · Node CLI · in-place preview · browser audit playground |
| Free usage | logged-in codex, claude, or gemini CLI can run rewrites without PATINA_API_KEY |
| Calibration | 67.3% editing-hotspot catch [63.5–71.0%] across GPT-5.5 / Claude Sonnet 4.6 / Gemini 2.5 Pro (n=600, KO+EN); 16.0% false positives [11.6–21.7%] on KO+EN human controls (n=200) |
| License | MIT |
Scores are editing signals with false positives and false negatives, not proof of authorship. See Ethics.
patina --lang <ko|en|zh|ja> [mode] [--profile <name>] input.txt| Command | Purpose |
|---|---|
patina input.txt |
rewrite with defaults |
patina --audit input.txt |
detect patterns only |
patina --score input.txt |
output a 0-100 AI-likeness score |
patina --score --exit-on 30 input.txt |
CI gate with exit code 3 when overall > 30 |
patina --diff input.txt |
show pattern-by-pattern changes |
patina --preview page.html |
render rewrites back onto a saved HTML page with toggles and inline diff |
patina --ouroboros input.txt |
iterate with MPS/fidelity rollback |
patina --tone auto --lang en input.txt |
infer and apply a KO/EN tone axis |
patina --format json --quiet input.txt |
script-friendly output |
patina --batch docs/*.md --outdir cleaned/ |
batch file processing |
patina --help prints the full flag list. patina doctor --json checks Node, backend, tmux, and API-key readiness without making an LLM call.
For GitHub Actions, the maintained wrapper is shorter than hand-rolled setup:
name: Patina prose score
on:
pull_request:
paths: ['**/*.md', '**/*.mdx']
permissions:
contents: read
pull-requests: read
issues: write
jobs:
patina:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: devswha/patina-action@v1
with:
score-threshold: 30
lang: auto
comment: trueOther integrations: pre-commit, static sites, Docker, release workflow.
Input
-> semantic anchor extraction (claims, polarity, causation, numbers)
-> stylometry + AI-lexicon scan
-> pattern-guided rewrite
-> self-audit and MPS/fidelity checks
-> cleaned text
If meaning drifts, the change is retried or rolled back. Deterministic analysis lives in src/features/*; LLM-backed rewrite and score calls use the selected backend.
# .patina.default.yaml
version: "5.4.0"
language: ko # ko | en | zh | ja
profile: default
output: rewrite # rewrite | diff | audit | score
tone: # casual | professional | academic | narrative | marketing | instructional | autoProject .patina.yaml overrides defaults. Pattern packs are auto-discovered by language prefix. Additive list keys (blocklist, allowlist, skip-patterns) merge; other arrays replace.
Start here:
- Cookbook — common recipes and workflows
- CLI Contract — flags, formats, score gates, exit behavior
- Authentication — local CLI backends and API providers
- Patterns — full pattern catalog
- Subagents & strict flow — optional read-only detector/fidelity/naturalness subagents and the
--strictmulti-pass mode - Benchmarks · latest report · 2026 rebaseline
- Measurement harness — index of every benchmark, calibration, and gate tool (incl. the signal-impact ablation harness)
- FAQ (한국어)
- Ethics
- Contributing (한국어)
- Changelog
Brand assets and usage rules live in Branding. Design notes live in DESIGN.md.
Inspired by oh-my-zsh's plugin architecture, Wikipedia's "Signs of AI writing", and blader/humanizer.
