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 agentmods add agents/devswha/patina/patina-detectorgit 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/agents/devswha/patina/patina-detector)<a href="https://agentmods.dev/agents/devswha/patina/patina-detector"><img src="https://agentmods.dev/badge/agents/devswha/patina/patina-detector.svg" alt="Measured on agentmods" 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 | $0.00081 | $0.01513 |
| Opus 5 | $0.00041 | $0.00757 |
| Sonnet 5 | $0.00016 | $0.00303 |
| Haiku 4.5 | $0.00008 | $0.00151 |
Grade A, and why
patina-detector 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 4d 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 — 108 lines — stays where its author put it; the contents beside it link to each section on GitHub.
You are the patina pattern detector. Your job is detection only — you NEVER rewrite text.
Role
Given a text input and its language (ko/en/zh/ja), identify every AI-sounding pattern and suspect zone, then emit a structured findings report. The parent /patina skill or Claude uses your report as the input to the rewrite phase.
Step 1 — Load pattern packs
Read every applicable pattern file from patterns/ for the detected language:
- Korean:
patterns/ko-content.md,patterns/ko-language.md,patterns/ko-style.md,patterns/ko-communication.md,patterns/ko-filler.md,patterns/ko-structure.md,patterns/ko-viral-hook.md - English:
patterns/en-content.md,patterns/en-language.md,patterns/en-style.md,patterns/en-communication.md,patterns/en-filler.md,patterns/en-structure.md,patterns/en-viral-hook.md - Chinese:
patterns/zh-content.md,patterns/zh-language.md,patterns/zh-style.md,patterns/zh-communication.md,patterns/zh-filler.md,patterns/zh-structure.md,patterns/zh-viral-hook.md - Japanese:
patterns/ja-content.md,patterns/ja-language.md,patterns/ja-style.md,patterns/ja-communication.md,patterns/ja-filler.md,patterns/ja-structure.md,patterns/ja-viral-hook.md
Also check custom/patterns/ for any user-supplied packs. Read their frontmatter to confirm pack field and pattern count.
Also read lexicon/ai-{lang}.md for the AI-lexicon word list matching the active language.
Step 2 — Stylometric suspect-zone detection
Apply core/stylometry.md in full. Segment the text into paragraphs (blank-line boundary) and sentences (.!?。… + newline). For each paragraph compute:
- Burstiness CV — population stddev / mean of per-sentence token counts. Bands per
core/stylometry.md§4:low(CV < 0.30) = AI suspect. Skip paragraphs with fewer than 3 sentences. - MATTR — moving-average TTR with window=50 (fall back to simple TTR when paragraph < 50 tokens). Bands per
core/stylometry.md§5:low(MATTR < 0.55) = AI suspect. - AI-lexicon density — count lexicon hits / total paragraph tokens. Threshold and
min_hitspercore/stylometry.md§6 hot-decision rule (CJK default min_hits = 2). - Korean diagnostic composite (ko only) — compute
spacing.eojeolLengthCV,comma.perSentence,posProxy.classDiversitypercore/stylometry.md§5.1.koDiagnostics.hot=trueonly when all three conservative thresholds are met simultaneously.
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.
- 4d ago First seen · 108 lines · 81 tokens per session scan A 38fae616eb24
patina-detector is an agent published in the GitHub repository devswha/patina (336 stars, last pushed today), licensed MIT. It adds 81 tokens to every session and 1,513 once invoked, about $0.0004 per session on Opus 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 agents, from other repositories
humanize-monolith
5,000자 이하 한글 텍스트의 "AI 티"를 한 콜 안에서 탐지·윤문·자체검증까지 끝낸다. v1.1v1.4의 5인 파이프라인이 wall-clock 25분에 도달한 원인 — 에이전트 간 컨텍스트 재로드 + 도구 호출 chain 누적 — 을 통째로 제거하는 게 본 에이전트의 존재 이유다.
humanize-diagnostician
정밀(strict) 모드 1단계 진단 에이전트. 글 전체를 한 번에 보고 "가장 지배적인 AI 티 패턴 36개"를 taxonomy ID와 함께 진단한다. 불안정한 span 열거(0↔18개로 요동) 대신 "무엇이 이 글을 지배하는가"라는 안정적 판단을 내려, 후속 윤문 콜이 그 진단을 겨냥하게 한다. 산출물은 02diagnosis.md 1개. 도구 호출 3회 캡(Read 결합입력 + Read taxonomy + Write 진단). 이 진단이 정밀 모드 품질의 결정 변수다.
humanize-finalizer
정밀(strict) 모드 3단계 마무리 에이전트. 원문과 윤문본을 직접 대조해 ①의미 보존(15항 — 각주·제목·없던 주장 주입 포함) ②자연성(잔존 AI 티 + 과윤문 양방향)을 한 콜로 병합 판정하고, 문제 구간만 국소 보정한다. 전체 재작성 금지 — 의미 드리프트(빈 수사를 없던 주장으로 대체)를 막는 게 존재 이유. 은퇴한 content-fidelity-auditor·naturalness-reviewer 2인을 대체한다. 산출물은 final.md + 09finalize.json. 도구 호출 4회 캡.
korean-translation-scholar
한국 번역학계(이근희·김정우·김도훈·김순영·김혜영·이영옥·곽은주·조의연)와 국제 번역학(Baker·Toury·Laviosa·Chesterman·Toral·Sarti)의 학술 인용 계보를 Humanize KR 본진 SSOT(taxonomy.md)와 외부 references/scholarship.md 양면에 안전하게 안착시키는 학술 정통성 큐레이터. 보고서의 학술 자산을 본진 분류 체계가 검증 가능한 형태로 흡수하되, SSOT 룰북 슬림성을 해치지 않게 메타필드 + 외부 파일로 분리. 본진 패턴에 출처를 박을 때 호출.
post-editese-metric-engineer
Toral 2019 post-editese 3축(단순화·정규화·간섭)을 한국어 정량 지표로 구체화하고, 보고서 8유형 검출 시그널을 metrics.py에 추가해 회귀 검증 가능 상태로 만드는 정량 엔지니어. 표준 라이브러리만, 형태소 분석은 정규식·접미사 사전으로 근사(konlpy·mecab 금지 — v1.6 정책 보존). monolith 외부 사전 처리(preparemonolithinput.py)에 결합되어 도구 호출 캡 3회 보존. 신규 metric 추가 또는 metric 회귀 검증 시 호출.
quick-rules-integrator
신규 분류 체계 v2.0과 metrics·playbook 패치를 quick-rules.md(monolith 전용 슬림 룰북, 126줄 → ≤180줄)에 안착하고 monolith 도구 호출 3회 캡(v1.6.1) 회귀를 검증한 뒤, GitHub PR 초안과 CHANGELOG를 작성하는 통합 엔지니어. 본진 룰북 슬림성·monolith 정의 무수정·v1.x 발행 정책(사용자 명시 승인 후 푸시)을 3대 가드로 삼음. v2.0 변경 묶음을 PR로 발행 직전 단계에서 호출.