New:Socket for Asana Is Now Available.Learn more
Get Started

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
4.3.0
Version published
Weekly downloads
142
-70.66%
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 4.3.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

Before (AI-sounding; same fixture used by the GIF):

The newly released Notion template pack is an innovative solution designed to transform productivity for modern teams. It offers 30 templates optimized for diverse workflows, with a user-friendly design that enables anyone to leverage them effortlessly. This product introduces a new paradigm for maximizing work efficiency.

After (/patina --lang en --tone marketing — same claims, AI packaging removed):

If Notion still starts as a blank page for your team, open this pack first. It includes 30 templates for common workflows. Duplicate one, adjust the fields you need, and use it for a team project or your own planning without starting from scratch.

Score = 0.0% · 30 templates ✓ · workflow fit ✓ · copy-and-edit use ✓

Animated terminal demo showing patina rewriting English AI-sounding copy and scoring the cleaned result

More examples: Before/After Gallery (한국어) · 30-second terminal demo.

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

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 narrative
/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 · audit · score · diff · ouroboros
Surfacesagent skill · Node CLI · 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 --ouroboros input.txtiterate with MPS/fidelity rollback
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: "4.3.0"
language: ko              # ko | en | zh | ja
profile: default
output: rewrite           # rewrite | diff | audit | score
tone:                     # casual | professional | academic | narrative | marketing | instructional | auto

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 13 Jun 2026

Related posts