Sign In

patina-cli

Package Overview
Dependencies
Maintainers
1
Versions
14
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

patina-cli

AI text humanizer CLI — detects and removes AI writing patterns

Source
npmnpm
Version
6.0.0
Version published
Weekly downloads
257
-59.01%
Maintainers
1
Weekly downloads
 
Created
Source

patina mark

patina

Strip the AI packaging. Keep the meaning.

한국어 · 中文 · 日本語 · English

Tests License: MIT Skill: Claude Code | Codex | Cursor | OpenCode Languages: KO | EN | ZH | JA Version 6.0.0

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.

Demo

--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.

Animated patina --preview demo toggling rewritten, original, both, and diff views on a Notion Template Pack page; the page layout stays fixed while AI-sounding phrasing is replaced and the score falls from 60 to 0

patina --preview --lang en page.html         # a local .html file
patina --preview https://example.com/post     # or a live URL

The 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.

Quick Start

Browser audit

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.

Agent skill

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 | bash

Then run the skill from Claude Code, Codex CLI, Cursor, or OpenCode:

/patina --lang en

[paste your text here]

Useful skill calls:

/patina --tone professional
/patina --tone auto --lang en

Standalone CLI

Requires Node.js >= 18.

npx patina-cli doctor
npx patina-cli --lang en input.txt

Use 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-cli

Supported 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.

What You Get

168 patterns33 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
Modesrewrite · verify · audit · score · diff
Surfacesagent skill · Node CLI · in-place preview · browser audit playground
Free usagelogged-in codex, claude, or gemini CLI can run rewrites without PATINA_API_KEY
Calibration67.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)
LicenseMIT

Scores are editing signals with false positives and false negatives, not proof of authorship. See Ethics.

Common Commands

patina --lang <ko|en|zh|ja> [mode] [--profile <name>] input.txt
CommandPurpose
patina input.txtrewrite with defaults
patina --audit input.txtdetect patterns only
patina --score input.txtoutput a 0-100 AI-likeness score
patina --score --exit-on 30 input.txtCI gate with exit code 3 when overall > 30
patina --diff input.txtshow pattern-by-pattern changes
patina --preview page.htmlrender rewrites back onto a saved HTML page with toggles and inline diff
patina --verify input.txtrewrite, then check MPS/fidelity floors with one retry
patina --tone auto --lang en input.txtinfer and apply a KO/EN tone axis
patina --format json --quiet input.txtscript-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.

CI

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: true

Other integrations: pre-commit, static sites, Docker, release workflow.

How It Works

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.

Configuration

# .patina.default.yaml
version: "6.0.0"
language: ko              # ko | en | zh | ja
profile: default
output: rewrite           # rewrite | diff | audit | score
tone:                     # casual | professional | auto  (register; genre = profile)

Project .patina.yaml overrides defaults. Pattern packs are auto-discovered by language prefix. Additive list keys (blocklist, allowlist, skip-patterns) merge; other arrays replace.

Documentation

Start here:

Brand assets and usage rules live in Branding. Design notes live in DESIGN.md.

Acknowledgements

Inspired by oh-my-zsh's plugin architecture, Wikipedia's "Signs of AI writing", and blader/humanizer.

License

MIT. See LICENSE and NOTICE.

Keywords

ai

FAQs

Package last updated on 26 Jun 2026

Related posts