원문: LilMGenius/paperthin · 조사 기준:
main/3bca079a51bcfff5dafb53d1d7f9f523d66ee317· 조사일: 2026-08-29
핵심 요지
Paperthin은 특정 모델이나 코딩 도구를 감싸는 실행 앱이 아니라, 에이전트가 반복해서 꺼내 쓰도록 설계한 plain-Markdown SKILL.md 패키지다.[1][4][7]
저장소의 중심 문장은 산출물을 “clean and true”하게 만드는 저수준 agentic design pattern이며, 기능을 추가하기보다 읽기·검증·정리·재시작의 판단을 습관화하는 데 무게가 있다.[4][7]
현재 패키지는 28개 스킬을 depth, breadth, coil, mesh라는 2×2 관점에 배치하고, Claude Code·Codex·OpenCode·Cursor·Pi·Hermes 등 여러 에이전트에서 쓰는 것을 목표로 한다.[4][9]
재현 가능한 조사 범위
GitHub API에서 저장소는 public, main 기본 브랜치, MIT 라이선스, Shell 언어, 896 stars, 92 forks, 2 open issues, non-archived 상태로 확인됐다.[2]
checkout HEAD, git ls-remote origin refs/heads/main, 그리고 v0.17.4의 peeled tag가 모두 3bca079a51bcfff5dafb53d1d7f9f523d66ee317으로 일치했다.[34][35]
최신 GitHub release는 v0.17.4/Paperthin 0.17.4이고 2026-08-18 21:19:22 UTC에 공개됐으며, npm latest도 0.17.4로 확인됐다.[3][34][36]
package.json은 버전 0.17.4, MIT, paperthin 패키지를 선언하지만 application build/test scripts는 제공하지 않는다.[6]
raw capture는 저장소 전체 mirror가 아니라 README·한국어 README·기여 규칙·호출 규칙·CI/release·runtime adapter·검증 스크립트·28개 SKILL.md를 포함한 47개 선택 파일이다.
선정 raw 47개는 고정 commit URL에서 모두 HTTP 200, local과 동일한 byte 수, SHA-256을 보였고 manifest 결과는 checked=47 errors=0이었다.
raw body SHA-256은 3f860d7205ab2f9d0e6f676771e2f2f651df443f3db4f3d3effdc68c3c71f7ce이며, README verbatim round-trip도 통과했다.
설계 원칙
Artifact over process. CLAUDE.md는 durable 문서에 실제 이슈 번호·핸들·SHA를 예시처럼 남기지 말고, 미래 독자가 현재 사실로 오인할 수 있는 residue를 제거하라고 규정한다.[7]
SSOT와 self-containment의 분리. 한 사실은 한 곳에 두되, 설치된 개별 스킬은 형제 스킬이나 CLAUDE.md를 읽지 않아도 실행 규칙을 알아야 한다는 원칙이 명시돼 있다.[7]
Negative corpus. 실패하거나 폐기한 경로를 삭제하지 않고 원인·대체안·재발 방지 게이트로 남겨 다음 사이클의 학습 자료로 삼는다.[7][29][33]
검증 우선. 테스트나 강한 모델 선택 자체를 완료 증거로 보지 않고, 산출물의 실제 표면을 구동하거나 독립적인 외부 truth를 넣는 proof surface를 따로 요구한다.[24][27][29]
네 관점과 28개 roster
README의 지도는 가로축을 단일/다중 산출물의 cardinality, 세로축을 현재 시점/반복 사이클의 time으로 두고 네 영역을 만든다.[4]
| 영역 | 질문 | 수 | 포함 스킬 |
|---|---|---|---|
depth/ | 한 산출물이 지금 clean and true한가? | 19 | re0, readchk, aim, modelchk, hate, macrothink, feynman, autobahn, reorder, detool, dedash, debloat, shower, factchk, mandela, sip, re0-git, re0-release, re0-merge |
breadth/ | 여러 위치의 한 사실이 일관적인가? | 2 | ssotize, re0-upgrade |
coil/ | 한 프로젝트의 반복이 다음 패스를 가르치는가? | 6 | re0-plan, re0-loop, re0-memo, re0-work, catchup, nba |
mesh/ | 서로 다른 실패 렌즈가 어디서 합치고 갈라지는가? | 1 | prism |
모든 스킬의 SKILL.md가 패키지 manifest에 직접 열거되어 있고, scripts/catalog.cjs는 runtime discovery가 공유하는 같은 28개 이름을 가진다.[9][13]
호출 정책
docs/invocation.md는 사람만 명시적으로 호출할 수 있는 user-invoked와 모델 또는 사람이 도달할 수 있는 model-invoked를 구분한다.[10]
현재 12개는 disable-model-invocation: true로 의도적인 사용자 행위에만 남겨져 있으며, hate, macrothink, feynman, reorder, dedash, debloat, re0-git, re0-release, re0-merge, re0-upgrade, re0-plan, prism이 그 목록이다.[10]
나머지 16개는 모델이 상황에 맞춰 자동으로 도달할 수 있으며, 특히 위험 인접 범위를 먼저 자르는 autobahn과 실행 전 인지 비용을 조언하는 modelchk는 model-invoked로 남긴 예외다.[10][24][25]
user-invoked 스킬은 model-invoked 스킬을 부를 수 있지만, 서로 다른 user-invoked 스킬을 자동 연쇄할 수는 없다는 호출 경계도 문서화돼 있다.[10]
대표 메커니즘
re0, readchk, modelchk
re0는 기존 문서를 변경 이력처럼 덧붙이지 않고, 처음 읽는 사람이 보아도 깨끗한 현재의 v0처럼 다시 쓰는 정리 reflex다.[22]
readchk는 요청을 먼저 자기 말로 재진술하고, 실제로 남은 선택지만 질문하며, 단순한 어휘·표현 확인을 불필요한 clarification으로 만들지 않는다.[23]
modelchk는 특정 vendor나 제품으로 라우팅하지 않고, 가장 싼 충분한 capability tier와 그 tier가 얼마나 깊게 생각할지라는 두 직교 축만 advisory하게 제안한다.[24]
capability tier는 fast·standard·frontier, reasoning effort는 glance·measured·thorough·exhaustive이며, 강한 모델이나 더 긴 추론이 테스트·리뷰·수동 QA를 대체하지 않는다는 proof-surface 규칙을 둔다.[24]
안전 인접 범위와 SSOT
autobahn은 위험 인접 항목을 실행 전에 descope하고, 안전한 대체안만 담은 prompt를 fresh subagent에 전달하는 구조를 취한다.[25]
이 실행은 안전 통제를 우회하는 장치가 아니라, 원래 위험한 요청을 실행 mind에 보여주지 않고 안전 범위만 실행하는 prompt-level isolation이다.[25]
같은 filesystem이나 memory store를 공유하는 harness에서는 decision log·notes·transcript search로 원래 요청을 되찾지 말라는 guard도 carved prompt에 넣도록 한다.[25]
따라서 autobahn은 OS sandbox나 별도 권한 격리를 제공한다고 읽으면 안 되고, 그 한계까지 포함한 범위 분리 규율로 읽는 것이 정확하다.[25]
ssotize는 read-only audit로 모든 복사·부분 복사·오래된 값·모순을 찾고, canonical home과 mutation plan을 보고한 다음 명시적인 승인 뒤에만 통합한다.[26]
검증과 다중 관점
mandela는 eval·metric·experiment가 외부 ground truth를 독립적으로 받는지 8개 leakage pattern으로 점검하며, shared hallucination·tautology·verifier=designer 같은 순환 검증을 구분한다.[27]
prism은 하나의 산출물을 correctness·security·readability·cost 등 2~5개의 genuinely distinct lens로 나누고, 평균값 대신 합의·불일치·불일치를 해소할 단일 질문을 반환한다.[32]
prism이 user-invoked인 이유는 다중 렌즈의 비용과 수렴을 자동 증명처럼 보이게 하지 않기 위해서다.[10][32]
sip은 변경 직후 shower로 cold-read하고, claim이면 factchk, eval이면 mandela, 중복·모순이면 ssotize, portability claim이면 detool, 마지막으로 re0를 적용하는 model-invoked orchestrator다.[28]
sip은 git commit을 하지 않으며, 설치되지 않은 스킬은 적용하지 않고 건너뛴 이유를 남기도록 한다.[28]
반복 사이클과 재진입
re0-loop의 기본 흐름은 FRAME → BUILD → DRIVE → RE0-MEMO → HATE → RE0-WORK → BUILD AGAIN이며, 진전 단위를 시간·파일 수가 아니라 품질을 통과한 template/module과 제거된 anti-pattern으로 정의한다.[29]
그 loop는 테스트를 보조 증거로 두고 browser·HTTP·computer-use·CLI 중 산출물에 맞는 real surface proof를 요구한다.[29]
re0-memo는 성공한 코드나 실패한 시도를 방어하지 않고, 다음 패스가 보존·폐기·검증해야 할 lesson, anti-pattern, hard gate, vocabulary로 일반화한다.[33]
catchup은 대화 기억이 아니라 live file state·git log/diff·plan·memo에서 인간의 마지막 touch 이후 delta를 다시 구성하는 read-only briefing이다.[30]
설치·runtime adapter
README의 quickstart는 npx skills@latest add LilMGenius/paperthin --global --agent '*'이며, plugin manifest도 28개 스킬 디렉터리를 직접 가리킨다.[4][9]
link-skills.sh는 로컬 checkout의 스킬을 ~/.claude/skills에 심볼릭 링크하는 보조 경로이며, 기존 대상이 심볼릭 링크가 아니면 제거 후 링크하는 동작을 포함한다.[21]
따라서 link-skills.sh는 편리하지만 기존 skill directory를 잘못 지정하면 rm -rf가 작동할 수 있는 state-changing script이므로, 사용 전 target path와 백업을 확인해야 한다.[21]
scripts/catalog.cjs가 roster·설치 위치·notice text·~/.re0/last-notice.json을 한 곳에서 관리하고, session-check.cjs와 OpenCode plugin이 이를 공유한다.[13][14][15]
두 adapter는 ~/.agents/skills와 ~/.claude/skills를 읽어 하나라도 보이는 설치가 있을 때만 missing catalog를 계산하고, 아무 스킬도 보이지 않으면 non-standard install인지 알 수 없으므로 침묵한다.[13]
Claude Code/Codex용 session-check.cjs는 SessionStart JSON hook으로 discovery notice를 한 번 내보내고, 24시간 stamp가 있으면 suppressOutput으로 끝낸다.[14]
OpenCode용 opencode-discovery.js는 system.transform에서 같은 notice를 output.system에 한 번 넣고, 동일 세션 재주입을 막으며, shared 24시간 stamp로 다른 세션도 억제한다.[15]
notice는 /re0-upgrade를 자동 실행하지 말고 사용자가 확인된 한 단계로 실행해야 한다는 relay cue까지 포함한다.[13][14]
Catalog·release 거버넌스
check-catalog-sync.cjs는 runtime catalog와 re0-upgrade의 human-facing Current catalog가 정확히 같은지 검사하는 catalog SSOT gate다.[13][19]
check-deploy-home.cjs는 runtime state home이 catalog.cjs에 한 번만 정의되고 이전 .paperthin 경로가 남지 않았는지 검사한다.[13][20]
CI는 Node 24에서 skill catalog, skill reference, relative link, catalog sync, deploy-home gate를 실행한다.[11]
release workflow는 v* tag에서 validation과 package-version/tag 일치를 확인한 뒤 npm provenance publish와 GitHub Release 제목 생성을 workflow가 소유하도록 설계돼 있다.[12]
re0-upgrade의 운영 계약은 install scope를 먼저 고르고, stale/missing/present/unknown을 분류하고, 전체 plan을 보여준 뒤 removal·install·hook wiring 전에 명시적 confirmation을 받도록 한다.[31]
다만 README와 release note의 quickstart는 --agent '*'를 쓰는 반면 re0-upgrade는 exact-agent scope에서는 --agent claude-code 같은 명시적 slug만 사용하고 wildcard를 금지한다.[4][31][34]
이 불일치는 저장소의 가장 실질적인 operator-facing 문서 리스크다.[4][31]
업그레이드 후에는 성공적으로 검증된 경우 GitHub star를 자동·무음으로 시도하고, 현재 존재하는 Claude Code·Codex·OpenCode에 pinned release-tag의 discovery runtime을 배선하도록 되어 있으므로, 사용자는 이 side effect와 config backup 범위를 알고 승인해야 한다.[31]
이번 환경에서 실행한 검증
| 검증 | 실제 결과 |
|---|---|
bash scripts/validate-skills.sh | 성공 — skill catalog valid (28 skills) |
bash scripts/check-skill-refs.sh | 성공 — 28 shipped names, 41 scanned files |
bash scripts/check-links.sh | 성공 — 586 link occurrences across 41 files |
node scripts/check-catalog-sync.cjs | 성공 — 28 skills match re0-upgrade Current catalog |
node scripts/check-deploy-home.cjs | 성공 — home 단일 정의, retired-home references 0 |
| Bash/Node syntax checks | 성공 |
git diff --check | 성공 |
npm pack --dry-run --json --ignore-scripts | 성공 — paperthin@0.17.4, 60 entries, unpackedSize 332,912 bytes |
| pinned raw manifest | 성공 — 47/47 HTTP 200·byte·SHA-256 일치 |
session-check.cjs 격리 HOME | 첫 호출 notice JSON, 두 번째 호출 suppressOutput JSON |
opencode-discovery.js 격리 HOME | 첫 호출 output.system 1개, 동일 세션 0개, 다른 세션 0개 |
npm pack은 .npmignore가 없어 .gitignore를 publish exclusion으로 사용한다는 warning을 냈지만 exit 0이며, 이는 현재 package boundary의 운영상 확인 포인트다.[6][12]
이 저장소에는 native application build나 test suite가 없으므로, 위 결과를 애플리케이션 기능 성공이나 실제 모델 세션 성공으로 확대하지 않았다.[6][11]
실제 npx skills 설치·Claude Code/Codex 설정 변경·GitHub star·hook wiring은 사용자 환경을 변경하므로 실행하지 않았다.[31]
Windows·macOS target agent의 실제 런타임, OpenCode host 내부에서의 plugin loading, 모델 로그인·도구 호출·외부 ground-truth eval은 이 Linux checkout에서 검증하지 않았다.[10][11]
OpenCode adapter를 직접 import해 실행한 결과는 exit 0이었지만 package.json에 type: module이 없어 Node가 ESM 재해석 warning을 냈다.[15]
평가와 도입 시 주의점
Paperthin의 강점은 모델 지능을 약속하지 않고, clean rewrite·scope carve·SSOT·independent truth·negative corpus·real-surface proof를 휴대 가능한 Markdown 계약으로 압축한 점이다.[4][7]
또한 user/model invocation을 분리해 commit·publish·upgrade·다중 렌즈처럼 편향이나 side effect가 큰 reflex를 자동 reach에서 제외한 설계가 분명하다.[10]
반대로 대부분의 안전성은 prompt와 운영 규칙에 의존하며, autobahn은 OS-level sandbox가 아니고 link-skills.sh는 잘못된 target에서 destructive replacement를 할 수 있다.[21][25]
session-check의 missing detection도 ~/.agents/skills와 ~/.claude/skills에 보이는 디렉터리만 읽으므로, 다른 설치 방식은 침묵하거나 shadow install로 남을 수 있다.[13][14]
도입 순서는 먼저 pinned release와 exact install scope를 정하고, wildcard 문서 충돌을 해소하는 편이 안전하다.[4][31] read-only skill과 catalog/link gate를 재현한 뒤 사용 범위를 넓히는 편이 안전하다.[16][19]
관련 개념은 moc-ai-agents, moc-ai-agents-harness, moc-ai-coding, moc-llm-wiki에서 함께 볼 수 있다.
조사 근거 파일
저장소 canonical page와 pinned commit page를 직접 확인했다.[1][35]
GitHub repository API metadata는 branch·license·language·public counters의 근거다.[2]
GitHub latest-release API와 release page는 v0.17.4 공개 상태와 release identity의 근거다.[3][34]
MIT license와 package identity는 고정 LICENSE raw와 package.json raw에 기록돼 있다.[5][6]
CLAUDE.md와 NOTICE는 authoring 원칙·SSOT·self-containment·third-party attribution의 근거다.[7][8]
Claude plugin manifest와 invocation document는 28개 roster 및 user/model boundary의 근거다.[9][10]
CI와 release workflow는 실제 자동화 gate·publish ownership의 근거다.[11][12]
catalog, session-check, OpenCode adapter는 runtime roster·notice·throttle 구현의 근거다.[13][14][15]
validation, reference, link scripts는 checkout에서 실행한 품질 gate의 근거다.[16][17][18]
catalog-sync와 deploy-home checks는 SSOT 및 state-home 검사의 근거다.[19][20]
link-skills script는 symlink 설치와 기존 target 처리의 근거다.[21]
re0, readchk, modelchk는 단일 산출물 정리·요청 확인·인지 비용 sizing의 근거다.[22][23][24]
autobahn과 ssotize는 carve 및 승인 전 SSOT mutation 경계의 근거다.[25][26]
mandela와 sip은 독립 truth leakage audit 및 recursive self-check의 근거다.[27][28]
re0-loop, catchup, re0-memo는 반복 학습·live-state briefing·negative corpus의 근거다.[29][30][33]
re0-upgrade와 prism은 upgrade side effect·exact-agent rule·다중 lens 정책의 근거다.[31][32]
npm registry descriptor와 published tarball URL은 latest, package license, registry integrity의 근거다.[36][37]
Sources
[1] https://github.com/LilMGenius/paperthin [2] https://api.github.com/repos/LilMGenius/paperthin [3] https://api.github.com/repos/LilMGenius/paperthin/releases/latest [4] https://raw.githubusercontent.com/LilMGenius/paperthin/3bca079a51bcfff5dafb53d1d7f9f523d66ee317/README.md [5] https://raw.githubusercontent.com/LilMGenius/paperthin/3bca079a51bcfff5dafb53d1d7f9f523d66ee317/LICENSE [6] https://raw.githubusercontent.com/LilMGenius/paperthin/3bca079a51bcfff5dafb53d1d7f9f523d66ee317/package.json [7] https://raw.githubusercontent.com/LilMGenius/paperthin/3bca079a51bcfff5dafb53d1d7f9f523d66ee317/CLAUDE.md [8] https://raw.githubusercontent.com/LilMGenius/paperthin/3bca079a51bcfff5dafb53d1d7f9f523d66ee317/NOTICE [9] https://raw.githubusercontent.com/LilMGenius/paperthin/3bca079a51bcfff5dafb53d1d7f9f523d66ee317/.claude-plugin/plugin.json [10] https://raw.githubusercontent.com/LilMGenius/paperthin/3bca079a51bcfff5dafb53d1d7f9f523d66ee317/docs/invocation.md [11] https://raw.githubusercontent.com/LilMGenius/paperthin/3bca079a51bcfff5dafb53d1d7f9f523d66ee317/.github/workflows/ci.yml [12] https://raw.githubusercontent.com/LilMGenius/paperthin/3bca079a51bcfff5dafb53d1d7f9f523d66ee317/.github/workflows/release.yml [13] https://raw.githubusercontent.com/LilMGenius/paperthin/3bca079a51bcfff5dafb53d1d7f9f523d66ee317/scripts/catalog.cjs [14] https://raw.githubusercontent.com/LilMGenius/paperthin/3bca079a51bcfff5dafb53d1d7f9f523d66ee317/scripts/session-check.cjs [15] https://raw.githubusercontent.com/LilMGenius/paperthin/3bca079a51bcfff5dafb53d1d7f9f523d66ee317/scripts/opencode-discovery.js [16] https://raw.githubusercontent.com/LilMGenius/paperthin/3bca079a51bcfff5dafb53d1d7f9f523d66ee317/scripts/validate-skills.sh [17] https://raw.githubusercontent.com/LilMGenius/paperthin/3bca079a51bcfff5dafb53d1d7f9f523d66ee317/scripts/check-skill-refs.sh [18] https://raw.githubusercontent.com/LilMGenius/paperthin/3bca079a51bcfff5dafb53d1d7f9f523d66ee317/scripts/check-links.sh [19] https://raw.githubusercontent.com/LilMGenius/paperthin/3bca079a51bcfff5dafb53d1d7f9f523d66ee317/scripts/check-catalog-sync.cjs [20] https://raw.githubusercontent.com/LilMGenius/paperthin/3bca079a51bcfff5dafb53d1d7f9f523d66ee317/scripts/check-deploy-home.cjs [21] https://raw.githubusercontent.com/LilMGenius/paperthin/3bca079a51bcfff5dafb53d1d7f9f523d66ee317/scripts/link-skills.sh [22] https://raw.githubusercontent.com/LilMGenius/paperthin/3bca079a51bcfff5dafb53d1d7f9f523d66ee317/skills/depth/re0/SKILL.md [23] https://raw.githubusercontent.com/LilMGenius/paperthin/3bca079a51bcfff5dafb53d1d7f9f523d66ee317/skills/depth/readchk/SKILL.md [24] https://raw.githubusercontent.com/LilMGenius/paperthin/3bca079a51bcfff5dafb53d1d7f9f523d66ee317/skills/depth/modelchk/SKILL.md [25] https://raw.githubusercontent.com/LilMGenius/paperthin/3bca079a51bcfff5dafb53d1d7f9f523d66ee317/skills/depth/autobahn/SKILL.md [26] https://raw.githubusercontent.com/LilMGenius/paperthin/3bca079a51bcfff5dafb53d1d7f9f523d66ee317/skills/breadth/ssotize/SKILL.md [27] https://raw.githubusercontent.com/LilMGenius/paperthin/3bca079a51bcfff5dafb53d1d7f9f523d66ee317/skills/depth/mandela/SKILL.md [28] https://raw.githubusercontent.com/LilMGenius/paperthin/3bca079a51bcfff5dafb53d1d7f9f523d66ee317/skills/depth/sip/SKILL.md [29] https://raw.githubusercontent.com/LilMGenius/paperthin/3bca079a51bcfff5dafb53d1d7f9f523d66ee317/skills/coil/re0-loop/SKILL.md [30] https://raw.githubusercontent.com/LilMGenius/paperthin/3bca079a51bcfff5dafb53d1d7f9f523d66ee317/skills/coil/catchup/SKILL.md [31] https://raw.githubusercontent.com/LilMGenius/paperthin/3bca079a51bcfff5dafb53d1d7f9f523d66ee317/skills/breadth/re0-upgrade/SKILL.md [32] https://raw.githubusercontent.com/LilMGenius/paperthin/3bca079a51bcfff5dafb53d1d7f9f523d66ee317/skills/mesh/prism/SKILL.md [33] https://raw.githubusercontent.com/LilMGenius/paperthin/3bca079a51bcfff5dafb53d1d7f9f523d66ee317/skills/coil/re0-memo/SKILL.md [34] https://github.com/LilMGenius/paperthin/releases/tag/v0.17.4 [35] https://github.com/LilMGenius/paperthin/commit/3bca079a51bcfff5dafb53d1d7f9f523d66ee317 [36] https://registry.npmjs.org/paperthin [37] https://registry.npmjs.org/paperthin/-/paperthin-0.17.4.tgz