Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add devswha/patina --skill patinagit clone --depth 1 https://github.com/devswha/patinaWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/devswha/patina/patina)<a href="https://agentmods.dev/skills/devswha/patina/patina"><img src="https://agentmods.dev/badge/skills/devswha/patina/patina/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/devswha/patina/patina"><img src="https://agentmods.dev/badge/skills/devswha/patina/patina.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00038 | $0.14988 |
| Opus 5.5 | $0.00015 | $0.05995 |
| Sonnet 5.5 | $0.00008 | $0.02998 |
| Haiku 4.5 | $0.00004 | $0.01499 |
Grade A, and why
patina scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 29d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 787 lines — stays where its author put it; the contents beside it link to each section on GitHub.
patina: AI 글쓰기 패턴 제거 오케스트레이터
당신은 AI가 생성한 텍스트에서 AI 특유의 패턴을 찾아 제거하여, 글을 자연스럽고 사람이 쓴 것처럼 만드는 편집자입니다. 처리 언어는 1단계에서 결정된 언어 코드에 따른다.
0단계: 실행 경로 결정 (라우팅)
이 스킬에는 두 실행 경로만 있다. 요청을 처리하기 전에 경로를 하나 선택하고, 선택한 경로 밖으로 절대 빠져나가지 않는다.
기본 경로: 검증된 CLI 실행
--instruction-only나 "CLI 없이 지시문 파이프라인으로만 실행해 달라"처럼 동등하게 명시적인 요청이 없으면, 모든 /patina 호출과 자연어 교정 요청은 이 경로다. --strict도 이 경로에서 같은 검증 재작성을 뜻한다.
실행 절차:
- 설치된
SKILL.md의 실제 부모 디렉터리를 스킬 디렉터리로 정한다. 호스트가 스킬을 심볼릭 링크로 연결한 경우에도 링크 위치가 아니라 실제 설치 위치를 기준으로 한다. - 기존 입력 파일은 실제 사용자 원본 경로를 그대로 헬퍼의
--input에 전달한다. 미리 복사하지 않는다. 헬퍼가 비공개 스냅샷을 만들고 실행 후 원본 파일의 변경 여부를 직접 확인한다. 붙여 넣은 텍스트만 호스트의 파일 도구로 비공개 임시 파일에 기록하고, 처리가 끝나면 그 임시 파일을 지운다. 원문 내용을 명령행 인자로 전달하지 않는다. - 호스트의 명령 실행 도구로 헬퍼를 실행한다.
node <skill-directory>/bin/patina-skill.js --input <source-file> [--lang ko] [--backend codex-cli]
지원 플래그는 헬퍼의 --help 출력이 전부다. --input FILE은 필수이고, 모드는 --mode rewrite|audit|score|diff 또는 별칭 --audit, --score, --diff, --strict로 하나만 고른다(기본 rewrite). 값 플래그는 --lang, --document-type, --persona, --register casual|professional, --backend, --model, --config, --provider, --api-key-file뿐이다. 모드 플래그를 겹쳐 쓰면 사용법 오류로 거부된다. 여기 없는 옵션은 존재하지 않으므로 새로 만들어 내지 않는다.
플래그는 모두 선택적 오버라이드다. 생략된 값은 헬퍼가 기존 설정 선택 규칙(배포 기본값 → ~/.patina.yaml → 프로젝트 .patina.yaml, --config가 있으면 그 파일)으로 정하므로, 사용자가 요청하지 않은 플래그를 임의로 붙이지 않는다. 어느 설정도 백엔드를 고르지 않으면 기존 기본값(HTTP)이 그대로 적용된다.
헬퍼는 내용 없는 JSON 한 줄을 stdout에 반환한다.
{"schemaVersion":1,"ok":true,"status":"verified","code":null,"exitCode":0,"receiptPath":"/private/run/receipt.json","outputPath":"/private/run/output.txt","reportPath":null,"sourceHash":"<sha256>","outputHash":"<sha256>","notice":null}
결과 해석과 인수 규칙:
- 호스트가 헬퍼 프로세스의 실제 종료 코드 0을 관찰하고, 요약이
ok: true,status: "verified",exitCode: 0이며, 해당receiptPath의 receipt가 종료 상태verified,exitCode: 0임을 확인한 경우에만outputPath파일의 수락된 바이트를 그대로 반환하거나 복사한다. 요약의exitCode만으로 실제 프로세스 종료를 대신 확인하지 않는다. 수락된 출력을 다듬거나 덧붙이지 않는다. 문체가 약하다고 판단하면 거부 사유를 보고할 수는 있지만, 몰래 수정한 뒤 원래 receipt가 그 결과를 보증한다고 주장해서는 안 된다. 실행 중이거나 미완성인 receipt는 검증이 아니다. - 기본적으로 출력은 원본과 별도로 유지하고 원본을 덮어쓰지 않는다. 사용자가 명시적으로 기존 원본 덮어쓰기를 요청한 경우에만, 적용 직전에 그 대상 파일을 다시 읽고 SHA-256을 계산하여 해당 호출의
sourceHash와 비교한다. 일치하지 않거나 다시 읽을 수 없으면 변경된 입력으로 거부하고 덮어쓰지 않는다. 일치할 때만 수락된 출력 바이트를 그대로 적용한다. - audit/score/diff는 보고서 모드다. 성공하면
status: "unverified-report"이고 결과는reportPath의 JSON이며, 그 receipt는 검증된 재작성을 주장하지 않는다. 보고서를 재작성 결과처럼 제시하지 않는다. - 요약의
notice가"star"면 결과를 전달한 뒤, 본문과 떨어진 마지막 줄에 한 번만 안내한다: "patina가 쓸 만했다면 GitHub star 하나가 다른 사람이 찾는 데 도움이 됩니다 → https://github.com/devswha/patina". 사용자의 대화 언어로 옮겨 쓴다. 헬퍼는 검증된 재작성 누적 3회째와 20회째에만, 통틀어 최대 두 번 이 값을 넣는다. 이 줄은 호스트의 말이지 수락된 출력이 아니므로outputPath의 바이트나 사용자가 요청한 파일에는 넣지 않는다.notice가null이면 star를 언급하지 않는다. - 실패(
ok: false)면 원문은 보존된 채다. 종료 코드와 안정code를 보고하고 멈춘다. exit 1은 설정·런타임·백엔드·저장소 실패, 2는 인자·설정·입력 오류, 4는 검증 거부, 130은 취소다. 실패한 요청을 아래 지시문 파이프라인이나 자체 재작성으로 대체하지 않는다.
What ships with it
60 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
- assets/brand/patina-badge.svg 1.3 KB
- assets/brand/patina-icon.svg 599 B
- assets/brand/patina-logo.svg 1.4 KB
- assets/brand/patina-mark.svg 521 B
- assets/demo/patina-demo-live-en.gif 669 KB
- assets/demo/patina-playground-en.gif 747 KB
- assets/demo/patina-playground-en.png 253 KB
- assets/demo/patina-preview-en.png 180 KB
- assets/demo/README.md 3.2 KB
- assets/social/patina-before-after-en.svg 5.1 KB
- assets/social/patina-before-after-ja.svg 5.0 KB
- assets/social/patina-before-after-ko.svg 5.3 KB
- assets/social/patina-before-after-zh.svg 5.2 KB
- assets/social/patina-before-after.svg 5.1 KB
- assets/social/patina-og.svg 2.5 KB
- examples/01-failure-01.md 1.3 KB
- examples/01-success-01.md 1.4 KB
- examples/02-failure-01.md 1.3 KB
- examples/02-success-01.md 1.2 KB
- examples/03-failure-01.md 995 B
- examples/03-success-01.md 1.2 KB
- examples/04-failure-01.md 1.2 KB
- examples/04-success-01.md 1.2 KB
- examples/05-failure-01.md 1.3 KB
- examples/05-success-01.md 1.5 KB
- examples/06-failure-01.md 1.3 KB
- examples/06-success-01.md 1.5 KB
- examples/07-failure-01.md 1.1 KB
- examples/07-success-01.md 1.2 KB
- examples/08-failure-01.md 1.0 KB
- examples/08-success-01.md 1.2 KB
- examples/09-failure-01.md 1.1 KB
- examples/09-success-01.md 1.4 KB
- examples/10-failure-01.md 1.3 KB
- examples/10-success-01.md 1.7 KB
- examples/11-failure-01.md 992 B
- examples/11-success-01.md 1.4 KB
- examples/12-failure-01.md 1.1 KB
- examples/12-success-01.md 1.4 KB
- examples/13-failure-01.md 1.0 KB
- examples/13-success-01.md 1.4 KB
- examples/14-failure-01.md 1.1 KB
- examples/14-success-01.md 1.4 KB
- examples/15-failure-01.md 1.2 KB
- examples/15-success-01.md 1.5 KB
- examples/16-failure-01.md 1.5 KB
- examples/16-success-01.md 1.5 KB
- examples/17-failure-01.md 912 B
- examples/17-success-01.md 1.5 KB
- examples/18-failure-01.md 1.1 KB
- examples/18-success-01.md 1.4 KB
- examples/19-failure-01.md 1.0 KB
- examples/19-success-01.md 1010 B
- examples/20-failure-01.md 997 B
- examples/20-success-01.md 1.5 KB
- examples/21-failure-01.md 1016 B
- examples/21-success-01.md 1.2 KB
- examples/22-failure-01.md 894 B
- examples/22-success-01.md 1.2 KB
- examples/23-failure-01.md 901 B
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 29d ago Changed · -6 lines b6bc77058640
- 1mo ago Changed · +1 lines 7b2491693e6c
- 1mo ago Changed 3431639d4aa9
- 1mo ago Changed fe3294d0dd8e
- 1mo ago Changed ba736ee9c6c0
- 1mo ago Changed · +56 lines d34bd210809b
- 1mo ago Changed 9c6ba8a2b01e
- 1mo ago Changed · +5 lines 6fdfc921f988
- 1mo ago Changed 7198116aaa02
- 1mo ago First seen · 731 lines · 38 tokens per session scan A ec7e2951bd5d
patina is a skill published in the GitHub repository devswha/patina (379 stars, last pushed 26d ago), licensed MIT. It adds 38 tokens to every session and 14,988 once invoked, about $0.0002 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
humanizer
Remove signs of AI-generated writing from text. Use when editing or reviewing text to make it sound more natural and human-written. Based on Wikipedia's comprehensive "Signs of AI writing" guide. Detects and fixes patterns including: inflated symbolism, promotional language, superficial -ing analyses, vague…
structural-humanizer
Remove the discourse-level (structural) signs of AI writing that survive surface editing: stated lessons and moral-of-the-story closers, tidy single-track arcs, embodied-emotion performance ("chest tightened"), vague allusions instead of named references, unbroken linear structure, and shape convergence across pieces.…
humanize-korean
A Korean-language editing skill that makes AI-written text sound more natural while preserving its meaning, facts, numbers, names, quotations, and genre. It focuses on patterns such as translation-like wording, repetitive structure, and overly mechanical rhythm.
humanize-scan
A Korean-language checker that measures signs commonly associated with AI-written prose and shows sample edits. It is a quick scan, not a full rewrite.
commit-ko
A Korean commit-message editor that removes stiff, translated-sounding wording while preserving the message's meaning, scope, and type. A commit message is the short record attached to a change in Git.
humanize-redo
A second editing pass for Korean text produced by the humanize-korean workflow. It can revisit remaining issues in selected categories or paragraphs, with adjustable editing strictness.