patina-detector

patina-detector is an agent for coding agents from devswha/patina. It costs 81 tokens per session (1,513 once invoked), scanned A, original, MIT.

A detection agent that scans Korean, English, Chinese, or Japanese text for patterns associated with AI-generated writing and reports the suspicious sections.

In plain words
What is it for?
Use it to find machine-sounding wording, repeated structures, filler, and other language-specific signals in text.
Why use it?
It gives a separate review of writing style before another step rewrites the text.

Agent

Part of the patina plugin — 1 skill, 3 agents shipped together

Install

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.

agentmods
npx agentmods add agents/devswha/patina/patina-detector
Clone the repo
git clone --depth 1 https://github.com/devswha/patina

Or install patina, the plugin that ships this one along with the rest of its 1 skill, 3 agents.

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

agentmods badge for patina-detector

README.md
[![agentmods](https://agentmods.dev/badge/agents/devswha/patina/patina-detector.svg)](https://agentmods.dev/agents/devswha/patina/patina-detector)
Your own site
<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>
Per session 81 Only the description is in the session, so the agent can decide to use it. The body loads when it is invoked.
When invoked 1,513 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

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.

ModelPer sessionOnce 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

Measured 4d ago against content hash 38fae616eb24, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

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.

agents/patina-detector.md · 108 lines

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:

  1. 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.
  2. 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.
  3. AI-lexicon density — count lexicon hits / total paragraph tokens. Threshold and min_hits per core/stylometry.md §6 hot-decision rule (CJK default min_hits = 2).
  4. Korean diagnostic composite (ko only) — compute spacing.eojeolLengthCV, comma.perSentence, posProxy.classDiversity per core/stylometry.md §5.1. koDiagnostics.hot=true only when all three conservative thresholds are met simultaneously.

Read the full file on GitHub · 108 lines

Changes

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.

  1. 4d ago First seen · 108 lines · 81 tokens per session scan A 38fae616eb24

Subscribe to this mod's changes

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.

Related

Other agents, from other repositories

humanize-monolith

5,000자 이하 한글 텍스트의 "AI 티"를 한 콜 안에서 탐지·윤문·자체검증까지 끝낸다. v1.1v1.4의 5인 파이프라인이 wall-clock 25분에 도달한 원인 — 에이전트 간 컨텍스트 재로드 + 도구 호출 chain 누적 — 을 통째로 제거하는 게 본 에이전트의 존재 이유다.

epoko77-ai/im-not-ai · 141 tokens

humanize-diagnostician

정밀(strict) 모드 1단계 진단 에이전트. 글 전체를 한 번에 보고 "가장 지배적인 AI 티 패턴 36개"를 taxonomy ID와 함께 진단한다. 불안정한 span 열거(0↔18개로 요동) 대신 "무엇이 이 글을 지배하는가"라는 안정적 판단을 내려, 후속 윤문 콜이 그 진단을 겨냥하게 한다. 산출물은 02diagnosis.md 1개. 도구 호출 3회 캡(Read 결합입력 + Read taxonomy + Write 진단). 이 진단이 정밀 모드 품질의 결정 변수다.

epoko77-ai/im-not-ai · 159 tokens

humanize-finalizer

정밀(strict) 모드 3단계 마무리 에이전트. 원문과 윤문본을 직접 대조해 ①의미 보존(15항 — 각주·제목·없던 주장 주입 포함) ②자연성(잔존 AI 티 + 과윤문 양방향)을 한 콜로 병합 판정하고, 문제 구간만 국소 보정한다. 전체 재작성 금지 — 의미 드리프트(빈 수사를 없던 주장으로 대체)를 막는 게 존재 이유. 은퇴한 content-fidelity-auditor·naturalness-reviewer 2인을 대체한다. 산출물은 final.md + 09finalize.json. 도구 호출 4회 캡.

epoko77-ai/im-not-ai · 164 tokens

korean-translation-scholar

한국 번역학계(이근희·김정우·김도훈·김순영·김혜영·이영옥·곽은주·조의연)와 국제 번역학(Baker·Toury·Laviosa·Chesterman·Toral·Sarti)의 학술 인용 계보를 Humanize KR 본진 SSOT(taxonomy.md)와 외부 references/scholarship.md 양면에 안전하게 안착시키는 학술 정통성 큐레이터. 보고서의 학술 자산을 본진 분류 체계가 검증 가능한 형태로 흡수하되, SSOT 룰북 슬림성을 해치지 않게 메타필드 + 외부 파일로 분리. 본진 패턴에 출처를 박을 때 호출.

epoko77-ai/im-not-ai · 180 tokens

post-editese-metric-engineer

Toral 2019 post-editese 3축(단순화·정규화·간섭)을 한국어 정량 지표로 구체화하고, 보고서 8유형 검출 시그널을 metrics.py에 추가해 회귀 검증 가능 상태로 만드는 정량 엔지니어. 표준 라이브러리만, 형태소 분석은 정규식·접미사 사전으로 근사(konlpy·mecab 금지 — v1.6 정책 보존). monolith 외부 사전 처리(preparemonolithinput.py)에 결합되어 도구 호출 캡 3회 보존. 신규 metric 추가 또는 metric 회귀 검증 시 호출.

epoko77-ai/im-not-ai · 158 tokens

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로 발행 직전 단계에서 호출.

epoko77-ai/im-not-ai · 151 tokens