patina-cli 3.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. package/.patina.default.yaml +211 -0
  2. package/CHANGELOG.md +265 -0
  3. package/LICENSE +21 -0
  4. package/README.md +319 -0
  5. package/README_JA.md +254 -0
  6. package/README_KR.md +253 -0
  7. package/README_ZH.md +254 -0
  8. package/SKILL-MAX.md +455 -0
  9. package/SKILL.md +730 -0
  10. package/assets/brand/patina-icon.svg +9 -0
  11. package/assets/brand/patina-logo.svg +17 -0
  12. package/assets/social/patina-before-after.svg +46 -0
  13. package/assets/social/patina-og.svg +31 -0
  14. package/bin/patina.js +9 -0
  15. package/core/scoring.md +657 -0
  16. package/core/standalone-prompt.md +364 -0
  17. package/core/stylometry.md +754 -0
  18. package/core/voice.md +163 -0
  19. package/docs/AUTHENTICATION.md +105 -0
  20. package/docs/AUTHENTICATION_KR.md +105 -0
  21. package/docs/BRANDING.md +37 -0
  22. package/docs/CLI.md +80 -0
  23. package/docs/COMPARISON.md +38 -0
  24. package/docs/COOKBOOK.md +173 -0
  25. package/docs/DEMO.md +40 -0
  26. package/docs/ETHICS.md +27 -0
  27. package/docs/EXAMPLES.md +130 -0
  28. package/docs/EXAMPLES_KR.md +130 -0
  29. package/docs/EXIT-CODES.md +25 -0
  30. package/docs/FAQ.md +67 -0
  31. package/docs/FAQ_KR.md +65 -0
  32. package/docs/FLAG-PARITY.md +53 -0
  33. package/docs/GLOSSARY.md +123 -0
  34. package/docs/PATTERNS-EN.md +718 -0
  35. package/docs/PATTERNS-JA.md +706 -0
  36. package/docs/PATTERNS-KO.md +707 -0
  37. package/docs/PATTERNS-ZH.md +706 -0
  38. package/docs/PATTERNS.md +22 -0
  39. package/docs/ROADMAP.md +315 -0
  40. package/docs/audits/2026-05-deep-research.md +290 -0
  41. package/docs/benchmarks/detector-comparison.json +442 -0
  42. package/docs/benchmarks/detector-comparison.md +65 -0
  43. package/docs/benchmarks/latest.json +988 -0
  44. package/docs/benchmarks/latest.md +112 -0
  45. package/docs/integrations/docker.md +19 -0
  46. package/docs/integrations/github-action.md +59 -0
  47. package/docs/integrations/pre-commit.md +77 -0
  48. package/docs/integrations/release.md +43 -0
  49. package/docs/internal/HARNESS.md +14 -0
  50. package/docs/internal/README.md +14 -0
  51. package/docs/internal/WARP.md +23 -0
  52. package/docs/research/2025-rebaseline-plan.md +89 -0
  53. package/docs/research/ai-human-metrics.md +380 -0
  54. package/docs/social/gstack-cardnews.html +236 -0
  55. package/docs/social/gstack-cardnews.md +88 -0
  56. package/docs/social/gstack-thread.md +106 -0
  57. package/docs/social/patina-launch-copy.md +227 -0
  58. package/docs/superpowers/specs/2026-04-03-meaning-preservation-design.md +299 -0
  59. package/lexicon/ai-en.md +162 -0
  60. package/lexicon/ai-ko.md +159 -0
  61. package/package.json +100 -0
  62. package/patina-max/SKILL.md +523 -0
  63. package/patina-max/composite.py +457 -0
  64. package/patterns/en-communication.md +89 -0
  65. package/patterns/en-content.md +133 -0
  66. package/patterns/en-filler.md +113 -0
  67. package/patterns/en-language.md +163 -0
  68. package/patterns/en-structure.md +173 -0
  69. package/patterns/en-style.md +139 -0
  70. package/patterns/en-viral-hook.md +211 -0
  71. package/patterns/ja-communication.md +101 -0
  72. package/patterns/ja-content.md +153 -0
  73. package/patterns/ja-filler.md +123 -0
  74. package/patterns/ja-language.md +190 -0
  75. package/patterns/ja-structure.md +142 -0
  76. package/patterns/ja-style.md +147 -0
  77. package/patterns/ja-viral-hook.md +216 -0
  78. package/patterns/ko-communication.md +98 -0
  79. package/patterns/ko-content.md +154 -0
  80. package/patterns/ko-filler.md +105 -0
  81. package/patterns/ko-language.md +182 -0
  82. package/patterns/ko-structure.md +147 -0
  83. package/patterns/ko-style.md +146 -0
  84. package/patterns/ko-viral-hook.md +211 -0
  85. package/patterns/zh-communication.md +101 -0
  86. package/patterns/zh-content.md +153 -0
  87. package/patterns/zh-filler.md +118 -0
  88. package/patterns/zh-language.md +173 -0
  89. package/patterns/zh-structure.md +145 -0
  90. package/patterns/zh-style.md +159 -0
  91. package/patterns/zh-viral-hook.md +216 -0
  92. package/profiles/academic.md +53 -0
  93. package/profiles/blog.md +81 -0
  94. package/profiles/casual-conversation.md +105 -0
  95. package/profiles/code-comment.md +104 -0
  96. package/profiles/commit-message.md +99 -0
  97. package/profiles/default.md +62 -0
  98. package/profiles/email.md +52 -0
  99. package/profiles/formal.md +98 -0
  100. package/profiles/instructional.md +80 -0
  101. package/profiles/legal.md +57 -0
  102. package/profiles/marketing.md +56 -0
  103. package/profiles/medical.md +53 -0
  104. package/profiles/narrative.md +79 -0
  105. package/profiles/release-notes.md +98 -0
  106. package/profiles/social.md +56 -0
  107. package/profiles/technical.md +53 -0
  108. package/scripts/benchmark-report.mjs +252 -0
  109. package/scripts/check-release-metadata.mjs +48 -0
  110. package/scripts/detector-comparison.mjs +267 -0
  111. package/scripts/lint.mjs +40 -0
  112. package/scripts/precommit-score.mjs +31 -0
  113. package/scripts/prose-score.mjs +186 -0
  114. package/scripts/update-benchmark-ranges.mjs +108 -0
  115. package/src/api.js +330 -0
  116. package/src/auth.js +105 -0
  117. package/src/backends/claude-cli.js +112 -0
  118. package/src/backends/codex-cli.js +121 -0
  119. package/src/backends/contract.js +21 -0
  120. package/src/backends/gemini-cli.js +135 -0
  121. package/src/backends/index.js +159 -0
  122. package/src/cache.js +106 -0
  123. package/src/cli.js +1280 -0
  124. package/src/commands/doctor.js +229 -0
  125. package/src/commands/init.js +208 -0
  126. package/src/config.js +126 -0
  127. package/src/errors.js +53 -0
  128. package/src/features/index.js +96 -0
  129. package/src/features/lexicon.js +90 -0
  130. package/src/features/segment.js +49 -0
  131. package/src/features/stylometry.js +50 -0
  132. package/src/loader.js +103 -0
  133. package/src/logger.js +70 -0
  134. package/src/manifest.js +162 -0
  135. package/src/max-mode.js +207 -0
  136. package/src/ouroboros.js +233 -0
  137. package/src/output.js +480 -0
  138. package/src/prompt-builder.js +409 -0
  139. package/src/providers.js +100 -0
  140. package/src/scoring.js +531 -0
  141. package/src/security.js +133 -0
  142. package/tests/fixtures/suspect-zones/en/ai/en-ai-01.md +16 -0
  143. package/tests/fixtures/suspect-zones/en/ai/en-ai-02.md +16 -0
  144. package/tests/fixtures/suspect-zones/en/ai/en-ai-03.md +17 -0
  145. package/tests/fixtures/suspect-zones/en/ai/en-ai-04.md +15 -0
  146. package/tests/fixtures/suspect-zones/en/ai/en-ai-05.md +16 -0
  147. package/tests/fixtures/suspect-zones/en/ai/en-ai-06-chat-register.md +16 -0
  148. package/tests/fixtures/suspect-zones/en/natural/en-nat-01.md +15 -0
  149. package/tests/fixtures/suspect-zones/en/natural/en-nat-02.md +15 -0
  150. package/tests/fixtures/suspect-zones/en/natural/en-nat-03.md +15 -0
  151. package/tests/fixtures/suspect-zones/en/natural/en-nat-04.md +15 -0
  152. package/tests/fixtures/suspect-zones/en/natural/en-nat-05.md +15 -0
  153. package/tests/fixtures/suspect-zones/expected-ranges.json +939 -0
  154. package/tests/fixtures/suspect-zones/ja/ai/ja-ai-01.md +11 -0
  155. package/tests/fixtures/suspect-zones/ja/ai/ja-ai-02.md +11 -0
  156. package/tests/fixtures/suspect-zones/ja/ai/ja-ai-03.md +11 -0
  157. package/tests/fixtures/suspect-zones/ja/natural/ja-nat-01.md +11 -0
  158. package/tests/fixtures/suspect-zones/ja/natural/ja-nat-02.md +11 -0
  159. package/tests/fixtures/suspect-zones/ja/natural/ja-nat-03.md +11 -0
  160. package/tests/fixtures/suspect-zones/ko/ai/ko-ai-01.md +14 -0
  161. package/tests/fixtures/suspect-zones/ko/ai/ko-ai-02.md +16 -0
  162. package/tests/fixtures/suspect-zones/ko/ai/ko-ai-03.md +15 -0
  163. package/tests/fixtures/suspect-zones/ko/ai/ko-ai-04.md +15 -0
  164. package/tests/fixtures/suspect-zones/ko/ai/ko-ai-05.md +16 -0
  165. package/tests/fixtures/suspect-zones/ko/ai/ko-ai-06-chat-register.md +16 -0
  166. package/tests/fixtures/suspect-zones/ko/natural/ko-nat-01.md +15 -0
  167. package/tests/fixtures/suspect-zones/ko/natural/ko-nat-02.md +15 -0
  168. package/tests/fixtures/suspect-zones/ko/natural/ko-nat-03.md +15 -0
  169. package/tests/fixtures/suspect-zones/ko/natural/ko-nat-04.md +14 -0
  170. package/tests/fixtures/suspect-zones/ko/natural/ko-nat-05.md +15 -0
  171. package/tests/fixtures/suspect-zones/zh/ai/zh-ai-01.md +11 -0
  172. package/tests/fixtures/suspect-zones/zh/ai/zh-ai-02.md +11 -0
  173. package/tests/fixtures/suspect-zones/zh/ai/zh-ai-03.md +11 -0
  174. package/tests/fixtures/suspect-zones/zh/natural/zh-nat-01.md +11 -0
  175. package/tests/fixtures/suspect-zones/zh/natural/zh-nat-02.md +11 -0
  176. package/tests/fixtures/suspect-zones/zh/natural/zh-nat-03.md +11 -0
  177. package/tests/quality/README.md +121 -0
  178. package/tests/quality/benchmark.mjs +306 -0
  179. package/tests/quality/detectors.manual.example.json +31 -0
  180. package/tests/quality/dogfood.mjs +44 -0
@@ -0,0 +1,88 @@
1
+ ---
2
+ title: gstack 카드뉴스 초안
3
+ source_repo: https://github.com/garrytan/gstack
4
+ created: 2026-03-27
5
+ format: cardnews-storyboard
6
+ notes:
7
+ - GitHub stats checked on 2026-03-27 UTC via gh CLI
8
+ - README self-reported productivity metrics are labeled explicitly
9
+ ---
10
+
11
+ # Slide 1 — Cover
12
+ - 제목: gstack
13
+ - 부제: Claude Code를
14
+ 팀처럼 쓰는 법
15
+ - 한 줄 메시지: 프롬프트 모음이 아니라 개발 프로세스 세트
16
+
17
+ # Slide 2 — 문제 제기
18
+ - 제목: AI 코딩이 자꾸
19
+ 어긋나는 이유
20
+ - 포인트:
21
+ - 역할이 없다
22
+ - 리뷰가 없다
23
+ - QA가 없다
24
+ - 그래서 결국 사람이 다시 본다
25
+ - 강조 문장: 모델보다 운영 방식이 더 중요하다
26
+
27
+ # Slide 3 — gstack가 하는 일
28
+ - 제목: Claude Code를
29
+ 역할 분리된 팀으로
30
+ - 포인트:
31
+ - `/office-hours` — 문제 재정의
32
+ - `/plan-ceo-review` — 범위 점검
33
+ - `/plan-eng-review` — 설계 고정
34
+ - `/review` — production bug 관점 검토
35
+ - `/qa` — 실제 브라우저 확인
36
+ - `/ship` — PR/릴리즈 마무리
37
+
38
+ # Slide 4 — 핵심 구조
39
+ - 제목: 이건 도구 모음보다
40
+ 프로세스에 가깝다
41
+ - 흐름:
42
+ - 생각
43
+ - 계획
44
+ - 구현
45
+ - 리뷰
46
+ - 테스트
47
+ - 배포
48
+ - 회고
49
+ - 강조 문장: 각 스킬이 다음 단계의 입력을 만든다
50
+
51
+ # Slide 5 — 왜 화제가 됐나
52
+ - 제목: 숫자보다
53
+ 주장 구조가 세다
54
+ - 포인트:
55
+ - README 기준 최근 60일 생산 코드 60만+ 라인
56
+ - 테스트 비중 35%
57
+ - 하루 1만~2만 라인 주장
58
+ - 1주일 362 commits, 140,751 lines added
59
+ - 주의 문구:
60
+ - 위 수치는 README의 자기 보고 기준
61
+ - 핵심은 처리량이 아니라 역할 분리 + 리뷰 루프
62
+
63
+ # Slide 6 — Codex 사용자에게 중요한 점
64
+ - 제목: Claude 전용에서
65
+ 안 멈춘다
66
+ - 포인트:
67
+ - SKILL.md 표준 기반 호환성 강조
68
+ - Codex / Gemini CLI / Cursor 설치 경로 제공
69
+ - Codex는 `.agents/skills/gstack` + `./setup --host codex`
70
+ - 강조 문장: 워크플로우를 다른 에이전트로도 이식하려는 시도
71
+
72
+ # Slide 7 — 지금 볼 만한 이유
73
+ - 제목: AI를 잘 쓰는 건
74
+ 모델 선택이 끝이 아니다
75
+ - 포인트:
76
+ - 역할을 나누고
77
+ - 순서를 고정하고
78
+ - 검토와 QA를 붙여야 한다
79
+ - CTA:
80
+ - AI가 자꾸 엉뚱한 방향으로 가면
81
+ - gstack README의 Quick start부터 읽어볼 것
82
+
83
+ # Reference
84
+ - Repo: https://github.com/garrytan/gstack
85
+ - Stats checked on 2026-03-27 UTC:
86
+ - Stars: 50,844
87
+ - Forks: 6,519
88
+ - License: MIT
@@ -0,0 +1,106 @@
1
+ ---
2
+ title: gstack — Claude Code를 팀처럼 쓰는 법
3
+ category: Github
4
+ source_repo: https://github.com/garrytan/gstack
5
+ created: 2026-03-27
6
+ notes:
7
+ - GitHub stats checked on 2026-03-27 UTC via gh CLI
8
+ - README self-reported productivity metrics are marked as README claims
9
+ ---
10
+
11
+ ## 본문
12
+
13
+ [Github] gstack
14
+ https://github.com/garrytan/gstack
15
+
16
+ Claude Code를 그냥 채팅창처럼 쓰면 금방 막힌다.
17
+ 역할도 없고, 검토도 없고, QA도 없으니까.
18
+
19
+ gstack는 그걸 "한 명의 AI"가 아니라 "역할이 나뉜 팀"처럼 쓰게 만드는 세팅이다. Garry Tan이 공개했다.
20
+
21
+ ## 답글 1
22
+
23
+ 이 레포를 한 줄로 요약하면 이렇다.
24
+
25
+ - 아이디어를 재정의하는 `/office-hours`
26
+ - CEO 시점으로 범위를 다시 보는 `/plan-ceo-review`
27
+ - 엔지니어링 관점으로 설계를 고정하는 `/plan-eng-review`
28
+ - 브랜치 변경을 잡아내는 `/review`
29
+ - 실제 브라우저로 확인하는 `/qa`
30
+ - PR까지 마무리하는 `/ship`
31
+
32
+ 핵심은 "좋은 프롬프트 모음"이 아니라, 개발 과정을 순서로 강제한다는 점이다.
33
+
34
+ ## 답글 2
35
+
36
+ README 기준으로 gstack는 Claude Code를 "가상 엔지니어링 팀"처럼 쓰게 만든다.
37
+ CEO, 엔지니어링 매니저, 디자이너, 리뷰어, QA, 보안 책임자, 릴리즈 엔지니어 역할을 나눠 놓았다.
38
+
39
+ 그래서 흐름도 단순하다.
40
+
41
+ 생각 → 계획 → 구현 → 리뷰 → 테스트 → 배포 → 회고
42
+
43
+ AI를 똑똑하게 쓰는 사람들은 대개 여기서 차이가 난다.
44
+ 모델 성능보다, 일을 어떤 순서로 시키는지가 더 중요하다.
45
+
46
+ ## 답글 3
47
+
48
+ 이 레포가 특히 재밌는 이유는 Claude 전용에서 안 멈춘다는 점이다.
49
+ README에 따르면 SKILL.md 표준을 지원하는 에이전트라면 쓸 수 있게 열어뒀다.
50
+
51
+ 즉:
52
+ - Claude Code
53
+ - Codex
54
+ - Gemini CLI
55
+ - Cursor
56
+
57
+ 같은 계열로 확장해서 설치할 수 있다.
58
+ Codex 쪽은 `.agents/skills/gstack`에 clone한 뒤 `./setup --host codex`로 붙이는 방식이다.
59
+
60
+ ## 답글 4
61
+
62
+ 수치도 강하게 적혀 있다.
63
+ 다만 이건 외부 검증 수치가 아니라 README에 적힌 자기 보고라는 점은 감안해서 봐야 한다.
64
+
65
+ README에 따르면:
66
+ - 최근 60일 생산 코드 60만+ 라인
67
+ - 테스트 비중 35%
68
+ - 하루 1만~2만 라인
69
+ - 1주일 기준 362 commits, 140,751 lines added
70
+
71
+ 중요한 건 숫자 자체보다,
72
+ "혼자 많이 친다"가 아니라 "역할 분리와 리뷰 루프를 붙였더니 처리량이 폭증했다"는 주장이다.
73
+
74
+ ## 답글 5
75
+
76
+ 2026-03-27 UTC 기준 GitHub 지표는 이렇다.
77
+ - Stars: 50,844
78
+ - Forks: 6,519
79
+ - License: MIT
80
+
81
+ 왜 많이 보느냐면,
82
+ 단순히 "Claude Code 잘 쓰는 법"이 아니라
83
+ "AI 에이전트를 팀처럼 운영하는 운영체제"에 가깝기 때문이다.
84
+
85
+ 처음 써볼 거면 README가 권하는 진입점대로
86
+ `/office-hours` → `/plan-ceo-review` → `/review` → `/qa`
87
+ 이 순서만 따라가도 감이 올 거다.
88
+
89
+ ## 답글 6
90
+
91
+ 다만 바로 따라 쓰면 안 맞는 팀도 있다.
92
+
93
+ - 프로세스를 싫어하는 사람
94
+ - 작은 스크립트만 빨리 고치는 사람
95
+ - 이미 자기 워크플로우가 단단한 팀
96
+
97
+ 한테는 과할 수 있다.
98
+
99
+ 반대로,
100
+ "AI가 코드는 짜는데 자꾸 방향이 틀어진다"
101
+ "리뷰와 QA가 빠져서 결국 내가 다시 본다"
102
+ 싶으면 한 번 뜯어볼 가치가 충분하다.
103
+
104
+ 소스:
105
+ - GitHub repo: https://github.com/garrytan/gstack
106
+ - README / repo metadata checked on 2026-03-27 UTC
@@ -0,0 +1,227 @@
1
+ # patina Launch Copy
2
+
3
+ Use this file as the source of truth for public launch posts. The positioning is deliberately "auditable cleanup / editing tool", not detector bypass.
4
+
5
+ ## Positioning
6
+
7
+ patina detects recurring AI-writing patterns, rewrites the affected passages, and checks whether the original claims were preserved.
8
+
9
+ Short tagline:
10
+
11
+ > Strip the AI packaging. Keep the meaning.
12
+
13
+ Long tagline:
14
+
15
+ > A pattern-based cleanup tool for AI-sounding text. It shows what changed, why it changed, and whether the original claims survived.
16
+
17
+ ## Before posting
18
+
19
+ - Run `npm run benchmark:report && npm test`.
20
+ - Check the current benchmark: [`docs/benchmarks/latest.md`](../benchmarks/latest.md).
21
+ - If comparing tools, link the factual comparison page: [`docs/COMPARISON.md`](../COMPARISON.md).
22
+ - Use the launch social preview when the surface supports images: [`assets/social/patina-og.svg`](../../assets/social/patina-og.svg).
23
+ - Keep claims to "editing signal" and "suspect-zone benchmark"; do not imply authorship proof.
24
+ - Link issues for useful feedback: false positives, missing patterns, benchmark fixtures.
25
+
26
+ ## Avoid
27
+
28
+ Do not frame patina as:
29
+
30
+ - an AI detector bypass tool
31
+ - a way to fake authorship
32
+ - proof that text is human-written
33
+ - a universal paraphraser
34
+
35
+ Use these instead:
36
+
37
+ - auditable editing
38
+ - pattern-based cleanup
39
+ - meaning preservation
40
+ - false-positive-aware scoring
41
+ - diff/audit/score modes
42
+
43
+ ## Show HN
44
+
45
+ Title:
46
+
47
+ ```text
48
+ Show HN: patina – Strip the AI packaging, keep the meaning
49
+ ```
50
+
51
+ Post body:
52
+
53
+ ```text
54
+ Hi HN,
55
+
56
+ I built patina, a pattern-based cleanup tool for AI-sounding text.
57
+
58
+ It detects recurring LLM writing habits, rewrites the affected passages, and checks whether the original claims were preserved. It supports Korean, English, Chinese, and Japanese, and runs as a skill for Claude Code, Codex CLI, Cursor, and OpenCode, or as a standalone Node.js CLI.
59
+
60
+ The main difference from a generic paraphraser is auditability: patina can show what pattern it found, what it changed, and whether semantic anchors such as claims, polarity, causation, numbers, and negation survived the rewrite.
61
+
62
+ Example:
63
+
64
+ Before:
65
+ "Coffee has emerged as a pivotal cultural phenomenon that has fundamentally transformed social interactions across the globe. This beloved beverage serves as a catalyst for community building, fosters meaningful connections, and facilitates cross-cultural dialogue."
66
+
67
+ After:
68
+ "Coffee has quietly changed how people meet. Sit across from someone long enough, and something like a real connection tends to form — even between people from very different cultures."
69
+
70
+ This is not meant as an AI-detector bypass tool. Detectors are noisy. I treat the score as an editing signal, and the diff/audit output as the useful artifact.
71
+
72
+ Repo:
73
+ https://github.com/devswha/patina
74
+
75
+ I would especially like feedback on false positives, missing pattern families, and whether the MPS / diff / audit modes are useful for real writing workflows.
76
+ ```
77
+
78
+ ## Reddit / ClaudeAI Megathread
79
+
80
+ ```text
81
+ I built patina, a Claude Code skill / CLI for cleaning up AI-sounding text.
82
+
83
+ It detects recurring AI writing patterns, rewrites them, and checks that the original meaning is preserved. It supports Korean, English, Chinese, and Japanese, and also works with Codex CLI, Cursor, OpenCode, and standalone Node.js.
84
+
85
+ Quick before/after:
86
+
87
+ Before:
88
+ “Coffee has emerged as a pivotal cultural phenomenon that has fundamentally transformed social interactions across the globe. This beloved beverage serves as a catalyst for community building, fosters meaningful connections, and facilitates cross-cultural dialogue.”
89
+
90
+ After:
91
+ “Coffee has quietly changed how people meet. Sit across from someone long enough, and something like a real connection tends to form, even between people from very different cultures.”
92
+
93
+ Repo:
94
+ https://github.com/devswha/patina
95
+
96
+ I’d especially like feedback on false positives, missing AI-writing patterns, and whether the audit/score/diff modes make sense for real Claude output.
97
+ ```
98
+
99
+ ## X launch thread
100
+
101
+ ### 1
102
+
103
+ ```text
104
+ I built patina: a pattern-based cleanup tool for AI-sounding text.
105
+
106
+ It strips the AI packaging while keeping the meaning.
107
+
108
+ Claude Code / Codex CLI / Cursor / OpenCode / Node CLI
109
+ KO / EN / ZH / JA
110
+
111
+ https://github.com/devswha/patina
112
+ ```
113
+
114
+ ### 2
115
+
116
+ ```text
117
+ The goal is not detector bypass.
118
+
119
+ AI detectors are noisy. patina treats the score as an editing signal, not proof of authorship.
120
+
121
+ The useful parts are audit, diff, and meaning-preservation checks: what changed, why it changed, and whether the original claims survived.
122
+ ```
123
+
124
+ ### 3
125
+
126
+ ```text
127
+ Example before:
128
+
129
+ “Coffee has emerged as a pivotal cultural phenomenon that has fundamentally transformed social interactions across the globe...”
130
+
131
+ This is the kind of AI packaging patina looks for: inflated stakes, vague abstraction, and generic benefit stacking.
132
+ ```
133
+
134
+ ### 4
135
+
136
+ ```text
137
+ After:
138
+
139
+ “Coffee has quietly changed how people meet. Sit across from someone long enough, and something like a real connection tends to form — even between people from very different cultures.”
140
+
141
+ Same claims. Less model voice.
142
+ ```
143
+
144
+ ### 5
145
+
146
+ ```text
147
+ Under the hood, patina tracks semantic anchors: claims, polarity, causation, numbers, and negation.
148
+
149
+ If a rewrite drops or flips an anchor, it retries or rolls back the change.
150
+
151
+ That is the part I care about most: editable output with a safety rail.
152
+ ```
153
+
154
+ ### 6
155
+
156
+ ```text
157
+ Current calibration:
158
+
159
+ - 146 pattern catalog
160
+ - 91% Korean editing-hotspot recall [84.0-95.4%], n=100
161
+ - 76% English HC3 editing-hotspot recall [66.7-83.3%], n=100
162
+ - 13-25% human-prose false-positive point-estimate range across registers
163
+ - Latest fixture benchmark: https://github.com/devswha/patina/blob/main/docs/benchmarks/latest.md
164
+
165
+ False positives are documented because this should be used as an editor, not a judge.
166
+ ```
167
+
168
+ ### 7
169
+
170
+ ```text
171
+ If you write with LLMs and hate the default polished-but-empty voice, try it and tell me where it fails.
172
+
173
+ I’m especially looking for missing patterns, false positives, and better before/after examples.
174
+
175
+ https://github.com/devswha/patina
176
+ ```
177
+
178
+ ## Short Korean community post
179
+
180
+ ```text
181
+ patina라는 오픈소스 도구를 만들고 있습니다.
182
+
183
+ AI가 쓴 글에서 자주 보이는 표현 패턴을 잡아서, 의미는 유지한 채 더 자연스럽게 고치는 도구입니다. Claude Code 스킬로 쓸 수 있고, Codex CLI / Cursor / OpenCode / Node CLI에서도 동작합니다. 한국어, 영어, 중국어, 일본어 패턴을 지원합니다.
184
+
185
+ 핵심은 “AI detector 우회”가 아니라 편집입니다. 어떤 패턴을 잡았는지, 왜 바꿨는지, 원래 주장과 의미가 보존됐는지를 audit / diff / score 모드로 확인할 수 있게 만드는 쪽에 집중했습니다.
186
+
187
+ 레포:
188
+ https://github.com/devswha/patina
189
+
190
+ 특히 한국어 false positive, 빠진 AI 문체 패턴, before/after 예시 피드백을 받고 싶습니다.
191
+ ```
192
+
193
+ ## Maintainer reply templates
194
+
195
+ ### Detector-bypass concern
196
+
197
+ ```text
198
+ Fair concern. I do not think of patina as a detector-bypass tool. AI detectors are noisy anyway.
199
+
200
+ The goal is editing: find repeated writing habits that make LLM output feel synthetic, rewrite those parts, and keep the meaning checkable through audit/diff/score modes.
201
+ ```
202
+
203
+ ### False positives
204
+
205
+ ```text
206
+ False positives are real. Human prose can trigger patina, especially encyclopedic, corporate, academic, or heavily edited writing.
207
+
208
+ That is why I treat the score as a rough editing signal, not a truth machine. The diff and the highlighted patterns matter more than the exact number.
209
+ ```
210
+
211
+ ### Install help
212
+
213
+ ```text
214
+ Install:
215
+
216
+ curl -fsSL https://raw.githubusercontent.com/devswha/patina/main/install.sh | bash
217
+
218
+ Then in Claude Code:
219
+
220
+ /patina --lang en
221
+
222
+ [paste text]
223
+
224
+ Or as a standalone CLI:
225
+
226
+ patina --lang en input.txt
227
+ ```