# Giting > 오픈소스를 별점이 아니라 실측으로 읽는다. 리포지토리를 clone 해 코드·이력을 직접 측정하고, 사람 검수를 거친 분석 리포트를 발행하는 한국어 큐레이션 사이트. 모든 수치는 명시된 커밋 기준 실측값이며, 판정은 3단계(도입 후보/참고용/관망)다. 기계 접근: MCP `https://giting.kr/mcp` (streamable HTTP · 도구: list_reports, get_report, get_probe, search) · JSON `https://giting.kr/api/index.json` ## 분석 리포트 - [n8n, TypeScript 코어와 Vue 에디터로 500만 줄 가까이 굴리는 워크플로 자동화 플랫폼](https://giting.kr/api/reports/n8n.json): 노드 기반 워크플로 자동화 도구, 테스트 파일 1만 개·CI 워크플로 101개로 회귀 방지에 무게를 둔 대형 pnpm 모노레포. (판정 ◆ 도입 후보, 2026-09-04, 기준 커밋 0e8fbb0d) - [openclaw, 1,064만 줄로 자란 개인 AI 에이전트의 실체](https://giting.kr/api/reports/openclaw.json): 역사상 가장 빨리 자란 개인 AI 에이전트. 사흘 치 커밋이 클론 상한을 채우는 속도이지만, 조직 도입엔 보안 모델 검토가 먼저다. (판정 ◇ 관망, 2026-09-03, 기준 커밋 7b67c28e) - [Coolify, 36만 라인 PHP 코드베이스로 돌아가는 자체 호스팅 PaaS](https://giting.kr/api/reports/coolify.json): 자체 서버에 Heroku·Netlify 식 배포 경험을 얹는 PHP/Laravel 기반 오픈소스 PaaS, 커밋과 릴리스 태그 모두 활발하다. (판정 ◆ 도입 후보, 2026-09-03, 기준 커밋 b8866b87e) - [Immich, 129명이 넉 달 새 733커밋을 쌓은 자가호스팅 구글포토 대체제](https://giting.kr/api/reports/immich.json): 서버(NestJS)·웹(SvelteKit)·모바일(Flutter)·ML(Python)을 한 모노레포에 묶은 자가호스팅 사진·영상 백업 플랫폼 (판정 ◆ 도입 후보, 2026-09-03, 기준 커밋 26a25f0c) - [diagram-design, 에이전트에게 보기 좋은 다이어그램을 가르치는 스킬 패키지](https://giting.kr/api/reports/diagram-design.json): 38종 편집형 다이어그램을 자가완결 HTML+SVG로 뽑는 Claude Code·Codex용 스킬. 4개월 반에 135커밋·기여자 28명, 검수 시점 스타 29,877. (판정 ◆ 도입 후보, 2026-09-03, 기준 커밋 4451ead) - [PokeTokenBar, AI 코딩 토큰을 포켓몬으로 부화시키는 메뉴바 앱](https://giting.kr/api/reports/poketokenbar.json): Claude Code 등 AI 코딩 도구의 토큰 사용량을 포켓몬 키우기로 바꾼 macOS 메뉴바 앱. 80일에 333커밋을 쌓았지만 아직 신생이다. (판정 ◇ 관망, 2026-09-03, 기준 커밋 56a3547) - [Slidev, 마크다운 한 장을 Vue 런타임으로 굽는 pnpm 모노레포](https://giting.kr/api/reports/slidev.json): 마크다운으로 슬라이드를 작성하면 Vue 컴포넌트로 렌더링하는 개발자용 프레젠테이션 툴, 3년치 이력에 저자 194명·태그 446개가 쌓여 있다. (판정 ◆ 도입 후보, 2026-09-03, 기준 커밋 a8d8ff7) - [excalidraw, 손그림 캔버스를 프랙셔널 인덱싱과 종단간 암호화 협업으로 짜올린 React 라이브러리](https://giting.kr/api/reports/excalidraw.json): 런타임 의존성 0개(devDependencies 34개)인 순수 워크스페이스 모노레포로, 텍스트 328,022줄 중 TS/TSX가 약 59%를 차지하고 168개 테스트 파일과 스냅샷 24개(54,389줄)가 회귀를 받치는 손그림 화이트보드 라이브러리 (판정 ◆ 도입 후보, 2026-09-03, 기준 커밋 e1bb9ff8) - [zed, 편집·협업·확장을 하나의 CRDT 데이터 모델로 엮은 Rust 에디터](https://giting.kr/api/reports/zed.json): Rust 90% 코드베이스에 크레이트 245개, CI 워크플로우 47개를 얹고도 최근 90일 커밋이 클론 상한(1,000)을 채울 만큼 활발한 대형 에디터 프로젝트 (판정 ◆ 도입 후보, 2026-09-03, 기준 커밋 b1a7ef0c) - [ollama, 로컬 LLM 런타임의 사실상 표준은 어떻게 유지되는가](https://giting.kr/api/reports/ollama.json): 104명이 90일간 273커밋을 낸 활발한 로컬 LLM 런타임, MIT 라이선스에 테스트 381개가 붙어 있다 (판정 ◆ 도입 후보, 2026-09-03, 기준 커밋 b79067b) - [screenshot-to-code, 바이럴 데모가 에이전트 제품으로 재건축되기까지](https://giting.kr/api/reports/screenshot-to-code.json): 스크린샷을 코드로 바꾸는 2023년의 데모가 멀티 프로바이더 툴콜링 에이전트와 평가 주도 운영 체계로 전면 개조됐다. (판정 ◈ 참고용, 2026-09-03, 기준 커밋 d026163) - [ai-job-search, Claude Code가 런타임인 소프트웨어의 운영 교과서](https://giting.kr/api/reports/ai-job-search.json): 앱이 아니라 포크해서 쓰는 Claude Code 구직 워크스페이스. 지원 69건에서 취업까지의 실증을 달고 기여자가 붙었다. (판정 ◆ 도입 후보, 2026-09-03, 기준 커밋 9833a5d) - [DeskBox, 1인과 에이전트가 12주에 릴리스 62개를 내는 법](https://giting.kr/api/reports/deskbox.json): 바탕화면 파일을 실제 폴더 기반 위젯으로 정리하는 Windows 오거나이저. 코드보다 먼저 눈에 들어오는 건 출하 체계다. (판정 ◈ 참고용, 2026-09-03, 기준 커밋 db576af) ## 분석 대기열 - tldraw/tldraw: 무한 캔버스 SDK, 실측 예정 - astral-sh/uv: Rust로 다시 쓰는 파이썬 패키징, 실측 예정 --- # n8n, TypeScript 코어와 Vue 에디터로 500만 줄 가까이 굴리는 워크플로 자동화 플랫폼 판정: ◆ 도입 후보 · 2026-09-04 · 기준 커밋 0e8fbb0d · https://github.com/n8n-io/n8n 노드 기반 워크플로 자동화 도구, 테스트 파일 1만 개·CI 워크플로 101개로 회귀 방지에 무게를 둔 대형 pnpm 모노레포. ## 구조와 기능 n8n은 노드 기반 캔버스에서 여러 서비스를 연결해 워크플로를 만드는 자동화 도구로, 자체 호스팅이 가능하다는 점에서 Zapier·Make류의 SaaS 자동화 도구와 다른 포지션을 잡고 있다. 실측 기준 저장소는 파일 27,848개, 텍스트 총 4,988,765줄 규모이며, 그중 TypeScript가 20,163개 파일·3,871,367줄로 전체 라인의 약 78%를 차지한다. Vue 파일은 1,271개·294,150줄로 전체의 6%가량이다. 라인 수 기준으로 보면 노드 실행기·API·통합 로직을 담당하는 TypeScript 코어가 저장소의 절대 다수를 차지하고, 시각적 캔버스를 그리는 Vue 프런트엔드는 상대적으로 얇은 레이어로 구성돼 있다. 저장소에서 가장 큰 파일은 pnpm-lock.yaml(46,789줄)로, npm이 아니라 pnpm 워크스페이스 기반 모노레포임을 보여준다(반면 프로브가 자동 검출한 패키지 매니저 필드는 npm으로 잡혀 있어 실제 도구 체인과 프로브 메타데이터 사이에 불일치가 있다). 원격 태그 수는 2,144개로 매우 많은데, 모노레포에서 패키지별로 개별 태그를 찍는 방식일 가능성이 높다(추정). CI 워크플로는 101개로 대규모 저장소치고도 많은 편이며, 테스트 파일 10,599개(전체 파일의 약 38%)와 함께 커밋마다 상당한 자동 검증이 걸려 있음을 시사한다. 커밋 이력은 shallow clone(depth 1000) 기준으로 1,023건, 저자 109명이 2026-08-07부터 2026-09-03까지 약 27일 구간에 몰려 있다. 프로브 자체가 "shallow clone 기준이라 commitCount는 하한값"이라고 명시하므로 실제 활동량은 이보다 많을 것으로 봐야 한다. 상위 저자 목록에는 사람 기여자(Matsu, Declan Carroll, Jaakko Husso)와 함께 n8n-cat-bot[bot], n8n-assistant[bot] 같은 봇 계정이 섞여 있어, 최상위 커밋량 중 일부는 자동화된 릴리스·라벨링·문서 작업으로 봐야 한다. ## 하이라이트 가장 눈에 띄는 것은 테스트·CI 투자 규모다. 테스트 파일 10,599개는 전체 파일 27,848개의 약 38%에 해당하고, 여기에 스냅샷 테스트 파일 207개·82,630줄이 더해진다. 수백 개의 서드파티 통합 노드를 한 저장소에서 관리하는 구조에서는 노드 하나를 고치다가 다른 노드를 깨뜨리는 회귀가 가장 흔한 실패 모드인데, CI 워크플로 101개와 이 정도 규모의 스냅샷 테스트는 그 리스크를 정면으로 겨냥한 투자로 읽힌다. 이런 프로젝트에 기여하거나 포크해서 쓸 계획이라면, 새 코드를 추가하기 전에 기존 스냅샷 테스트 패턴부터 파악하는 쪽이 CI를 통과시키기 쉽다. 두 번째는 코드 구성의 무게 중심이다. TypeScript가 3,871,367줄로 전체 텍스트 라인의 78%를 차지하는 반면 Vue는 294,150줄(6%)에 그친다. 노드 실행·연결·API 처리를 담당하는 백엔드/코어 레이어가 저장소 크기의 대부분을 차지하고, 사용자가 마주하는 시각적 에디터는 상대적으로 얇다는 뜻이다. "노드 하나 추가"가 프런트엔드 작업보다 백엔드 작업에 가깝다는 걸 이 비율이 보여준다. 세 번째는 에이전트 친화적 문서 패키징이다. 실측에서 hasAgentDocs가 true이고, agentPackaging 하위 항목 중 rootDocs·skillMd·agentsDir가 모두 true로 잡혔다(claudePlugin·codexPlugin은 false). 루트에 코딩 에이전트를 위한 문서와 skill.md, agents 디렉터리를 갖춰 놓았다는 뜻으로, AI 코딩 도구를 통한 기여를 어느 정도 염두에 두고 있다는 신호다. 다만 Claude Code나 Codex 전용 플러그인 매니페스트까지는 아직 연결돼 있지 않다. ## 주의점 가장 먼저 확인해야 할 것은 라이선스다. GitHub의 SPDX 자동 인식이 NOASSERTION으로 나온 이유를 검수 단계에서 LICENSE 원문으로 확인했다(검수 보강): n8n은 표준 오픈소스가 아니라 **Sustainable Use License(페어코드)**를 쓰고, 파일명에 `.ee.`가 들어간 소스는 별도 엔터프라이즈 라이선스로 다시 갈라 둔 이중 구조다. 내부 사용·자체 호스팅은 폭넓게 허용되지만, n8n을 서비스로 재판매·호스팅 제공하는 형태는 제한된다. 사내 자동화 용도면 문제없고, 사업 모델에 얹을 계획이면 법무 검토가 선행이다. 두 번째는 메타데이터 신뢰도다. 프로브가 검출한 패키지 매니저는 npm인데 실제 최대 파일은 pnpm-lock.yaml이다. 이런 자동 검출 필드는 참고용으로만 쓰고, 설치·빌드 절차는 저장소에 실제로 존재하는 lock 파일과 문서를 기준으로 판단하는 편이 안전하다. 이슈 응답 속도도 표본 25건 중 24건이 응답을 받았고 중앙값 응답 시간이 0시간으로 매우 빠르게 나왔는데, 이 정도로 즉각적인 응답은 사람 메인테이너보다 라벨링·트리아지 봇의 자동 응답일 가능성이 높다. 실제 이슈 해결 속도나 깊이를 보장하는 지표는 아니라는 점을 감안해야 한다. 설치 체감도 실측했다. npx 기반 콜드 설치는 7분을 넘겨 우리 실행 실측 도구의 타임아웃(5분)에 걸렸다 — 실패 기록 자체가 정보다. n8n의 권장 경로가 도커 이미지인 이유이며, 로컬 npm 설치로 가볍게 맛보는 도구는 아니라는 점을 감안해야 한다. 판정 근거: 테스트 파일 10,599개, 스냅샷 테스트 82,630줄, CI 워크플로 101개가 한 저장소에 동시에 존재한다는 것은 수백 개 통합 노드를 한 번에 깨뜨리지 않으려는 회귀 방지 체계가 실제로 돌아가고 있다는 뜻이다. 커밋 로그에도 사람 저자 109명과 함께 자동화 봇 계정이 상위 커밋 저자에 올라 있어 릴리스·문서 갱신 다수가 자동화되어 있음을 보여준다. 다만 GitHub SPDX 인식이 NOASSERTION으로 나온다는 것은 표준 OSI 라이선스가 아니라는 신호이므로, 상용·호스팅 재배포를 검토한다면 저장소의 LICENSE 파일을 직접 읽고 조건을 확인해야 한다. 자체 호스팅으로 내부 워크플로 자동화를 도입하는 팀에는 candidate로 판단하되, 라이선스 확인을 선행 조건으로 둔다. --- # openclaw, 1,064만 줄로 자란 개인 AI 에이전트의 실체 판정: ◇ 관망 · 2026-09-03 · 기준 커밋 7b67c28e · https://github.com/openclaw/openclaw 역사상 가장 빨리 자란 개인 AI 에이전트. 사흘 치 커밋이 클론 상한을 채우는 속도이지만, 조직 도입엔 보안 모델 검토가 먼저다. ## 구조와 기능 openclaw는 npm으로 관리되는 TypeScript 중심 모노레포다. 텍스트 소스 기준 총 10,638,101줄, 37,121개 파일 규모이고, 그중 TypeScript가 30,181개 파일·8,979,577줄로 압도적 비중을 차지한다. 라이선스는 MIT다. TypeScript 외 코드 구성을 보면 Swift 1,199개 파일·411,654줄, Kotlin 460개 파일·199,544줄이 뒤를 잇는다. 최대 파일이 `apps/shared/OpenClawKit/Sources/OpenClawProtocol/GatewayModels.swift`(26,676줄)라는 점, 그리고 mts 402개·mjs 377개 파일이 추가로 존재한다는 점을 함께 보면, TS 기반 코어/게이트웨이 위에 Swift(Apple 플랫폼)·Kotlin(Android) 네이티브 클라이언트가 공유 프로토콜 패키지(`OpenClawKit`)를 통해 붙는 구조로 읽힌다. css는 106개 파일·67,099줄로 별도 웹 화면(대시보드 등)이 존재함을 시사한다. 의존성은 npm dependencies 65개, devDependencies 63개다. CI 워크플로가 99개, 테스트 파일이 15,286개(전체 파일의 약 41%, 15,286/37,121)로, 코드베이스 규모 대비 테스트·CI 투자 비중이 낮지 않다. `hasAgentDocs`가 true로 확인되어, 에이전트 대상 문서(예: 저장소 루트의 에이전트 가이드류)가 별도로 존재한다. ## 하이라이트 가장 눈에 띄는 구조적 지점은 `OpenClawProtocol/GatewayModels.swift` 한 파일이 26,676줄이라는 것이다. 파일 경로에 `Protocol`, `GatewayModels`라는 이름이 그대로 들어 있는 걸 보면 TS 백엔드와 Swift/Kotlin 클라이언트가 주고받는 스키마를 한곳에 몰아 정의(혹은 생성)한 형태로 보인다. 크로스플랫폼 프로젝트에서 프로토콜 타입을 단일 거대 파일로 유지하는 선택 자체가 나쁜 건 아니지만, 리뷰·빌드 시간 측면에서 왜 그렇게 됐는지(수동 관리인지 코드젠 산출물인지)는 눈여겨볼 대목이다. 두 번째는 CI·테스트 투자 규모다. 워크플로 99개, 테스트 파일 15,286개는 전체 파일 37,121개의 약 41%에 해당한다. 모노레포 규모(37K 파일, 1,064만 줄)를 감안하면 테스트 인프라를 상당히 진지하게 다루고 있다는 신호로 해석할 수 있다. 세 번째는 관측된 개발 속도다. depth 1000 shallow clone으로 잡힌 커밋 1000개(하한값)가 2026-09-01부터 2026-09-03까지 사흘 범위에 몰려 있고, 저자 100명, 원격 태그 409개가 확인된다. 태그 409개는 릴리스 또는 버전 태깅이 상당히 빈번했음을 뜻하는데, 커밋 밀도와 함께 보면 매우 활발하거나 자동화된 워크플로가 커밋을 다수 생성하고 있을 가능성을 같이 봐야 한다. ## 주의점 라이선스는 MIT로 재사용에 제약이 크지 않다. 다만 이번 실측은 depth 1000 shallow clone이라 commitCount·authorCount가 하한값이라는 점을 감안해야 한다. 특히 관측 범위가 사흘(2026-09-01~2026-09-03)뿐이라 실제 저장소 연혁이나 장기 활동 패턴은 이 데이터만으로 판단할 수 없다. 상위 기여자 목록에 `openclaw-mantis[bot]`이 포함돼 있다. 봇 계정이 상위 기여자로 잡히는 저장소는 원본 커밋 수·저자 수를 그대로 "사람이 만든 변경량"으로 해석하면 과대평가될 수 있다. 이번 패스에서는 GitHub 메타데이터(스타 수, 배지, README 서술)를 외부 fetch로 대조하지 못했으므로, README의 주장과 실측치를 비교하는 절차는 다음 확인에서 보완이 필요하다. 검수 보강으로 확인한 외부 맥락: 검수 시점 GitHub 스타 388,681, 2.0(v2026.8.1) 릴리스에 기여자 933명·PR 16,000개 이상이 참여했다. 흥미로운 불일치도 있다 — 저장소 LICENSE 파일 헤더는 MIT 인데 GitHub 라이선스 분류는 NOASSERTION(인식 불가)이다. 표준 문구에 부가 조항이 붙어 있을 가능성이 있으니 도입 전 원문 확인이 필요하다. 이 리포는 매거진 창간호 특집에서 서사·쟁점·실행 실측까지 깊게 다룬다. 판정 근거: 규모 자체는 작지 않다. 37,121개 파일, 1,064만 줄, CI 워크플로 99개, 테스트 파일 15,286개는 도구 하나가 갖추기엔 상당한 투자다. 다만 이번 실측은 depth 1000의 shallow clone이라 commitCount와 authorCount는 하한값이고, 관측된 커밋 범위가 2026-09-01부터 2026-09-03까지 사흘뿐이다. 즉 1000개 커밋이 사흘 안에 몰려 있다는 뜻이고, 상위 기여자 목록에 openclaw-mantis[bot]이 올라 있어 그 커밋 중 사람 손을 거친 비중을 가늠하기 어렵다. README의 스타 수·배지 등 외부 주장을 이번 패스에서 대조 확인하지 못한 점도 있어, 지금 단계에서는 candidate나 reference로 분류하기보다 관측을 이어가는 쪽이 맞다. --- # Coolify, 36만 라인 PHP 코드베이스로 돌아가는 자체 호스팅 PaaS 판정: ◆ 도입 후보 · 2026-09-03 · 기준 커밋 b8866b87e · https://github.com/coollabsio/coolify 자체 서버에 Heroku·Netlify 식 배포 경험을 얹는 PHP/Laravel 기반 오픈소스 PaaS, 커밋과 릴리스 태그 모두 활발하다. ## 구조와 기능 Coolify는 자기 소유 서버에 Heroku·Netlify·Vercel과 비슷한 배포 경험을 올려주는 자체 호스팅 PaaS다. 웹 UI에서 애플리케이션, 데이터베이스, 각종 서비스를 Docker 기반으로 배포·관리하는 것이 골자다. 실측 기준 전체 4,001개 파일, 53만 3,927줄의 텍스트 코드 중 PHP가 2,551개 파일·36만 2,438줄로 압도적 비중을 차지해, 백엔드가 Laravel 계열 모놀리스로 짜여 있음을 보여준다. JS는 116개 파일에 4,947줄뿐이라 별도 SPA 프런트엔드보다는 서버 렌더링 위주 구조에 가볍게 인터랙션을 얹는 방식으로 보이고, CSS는 파일 수는 4개뿐이지만 4,914줄에 달해 빌드 산출물 성격이 짙다. sh 스크립트가 12개 파일에 4,128줄, sql이 1개 파일에 1,740줄로 관측된 점도 눈에 띈다. 설치·배포 자동화 스크립트와 스키마 정의가 각각 상당한 분량을 차지한다는 뜻이라, 이 프로젝트가 "서버에 뭔가를 실행시키는" 도구라는 성격과 맞아떨어진다. 가장 큰 단일 파일은 openapi.json으로 23,070줄이다. REST API 표면이 넓고 스펙 문서를 코드베이스에 직접 커밋해 관리하는 방식임을 짐작할 수 있다. 의존성 실측은 npm 기준으로 dependencies 6개, devDependencies 6개만 잡혔다. 이는 프런트엔드 빌드 파이프라인 쪽 수치일 뿐, PHP 백엔드의 실제 의존성(Composer 패키지)은 이번 실측 범위에 들어오지 않았다. "의존성이 12개뿐인 가벼운 프로젝트"로 오해해서는 안 된다. ## 하이라이트 가장 먼저 보이는 것은 활동량이다. 90일 커밋 수 858건, 기여자 수 750명, 원격 태그 698개는 개인 사이드 프로젝트가 아니라 거의 매주 단위로 릴리스를 내보내는 현역 프로덕트라는 신호다. 상위 기여자 명단에는 리포 소유자로 공개돼 있는 Andras Bacsai를 포함해 peaklabs-dev, 🏔️ Peak 같은 조직 계정성 이름과 ayntk-ai, ShadowArcanist가 함께 올라 있다. 개인별 서술 대신 집계 규모로만 보면, 창업자 한 명이 주도하되 조직·외부 기여가 폭넓게 붙어 있는 구조로 읽힌다. 두 번째는 테스트·자동화 기반이다. PHP 파일 2,551개 대비 테스트 파일이 919개로, 파일 수 기준 약 36% 비율이다. 여기에 CI 워크플로 18개가 겹쳐 있다는 점이 함께 관측된다. 이 프로젝트가 실제로 사용자 서버에 SSH·Docker로 접속해 배포를 수행하는 코드라는 걸 감안하면, 테스트·CI에 이 정도 투자가 되어 있다는 것 자체가 하나의 신뢰 신호다. 세 번째로 hasAgentDocs가 true로 관측됐다. AI 에이전트를 겨냥한 문서(CLAUDE.md, AGENTS.md류)를 리포 안에 갖추고 있다는 뜻으로, AI 보조 기여 워크플로에 이미 맞춰가고 있는 프로젝트라는 신호다. ## 주의점 실측 JSON의 license 필드는 헤더 문구만 잡혀 버전이 비어 있었는데, 검수 단계에서 GitHub API로 확인한 SPDX 식별자는 **Apache-2.0**이다(검수 보강). 상업 도입에 제약이 낮은 라이선스다. commitCount 16,836은 depth 1000의 shallow clone 기준 하한값이다. 실제 커밋 이력은 이보다 많을 수 있으므로 이 리포트의 커밋·이력 관련 수치는 전부 "적어도 이 정도"로 읽어야 한다. 또한 Coolify는 설계상 사용자의 프로덕션 서버에 대한 SSH·Docker 접근 권한을 쥐는 소프트웨어다. 태그 698개로 나타나는 잦은 릴리스 주기를 고려하면, 실제 도입 시에는 버전 고정과 업그레이드 노트 확인을 배포 프로세스에 명시적으로 넣는 편이 안전하다. 이 부분은 이번 실측이 다루는 코드 지표 밖의 운영 리스크이므로 별도로 점검이 필요하다. 판정 근거: 90일 858커밋, 기여자 750명, 태그 698개라는 수치는 소규모 개인 프로젝트가 아니라 지금도 매주 릴리스를 내보내는 활성 프로덕트라는 뜻이다. PHP 파일 2,551개·919개의 테스트 파일, CI 워크플로 18개가 같이 관측되어 서버에 실제로 접속해 배포를 수행하는 코드치고는 테스트·자동화 기반이 갖춰진 편이다. 다만 이 실측은 shallow clone(depth 1000) 기준이라 commitCount 16,836은 하한값이고, 의존성 수치는 npm 기준(6+6)만 잡혀 PHP 쪽 실제 의존성 규모는 포함되지 않는다는 점을 감안해야 한다. --- # Immich, 129명이 넉 달 새 733커밋을 쌓은 자가호스팅 구글포토 대체제 판정: ◆ 도입 후보 · 2026-09-03 · 기준 커밋 26a25f0c · https://github.com/immich-app/immich 서버(NestJS)·웹(SvelteKit)·모바일(Flutter)·ML(Python)을 한 모노레포에 묶은 자가호스팅 사진·영상 백업 플랫폼 ## 구조와 기능 Immich는 서버(NestJS/TypeScript), 웹(SvelteKit), 모바일(Flutter/Dart), 머신러닝 서비스(Python)를 한 모노레포에 묶은 자가호스팅 사진·영상 백업 플랫폼이다. 실측 기준 확장자별 분포를 보면 ts가 1,057개 파일·164,889줄로 가장 크고, dart가 829개 파일·90,593줄로 뒤를 잇는다. 서버와 웹 UI가 모두 TypeScript 계열이고 모바일 클라이언트는 Flutter로 별도 구현되어 있다는 뜻이다. svelte 파일 417개·42,231줄이 웹 UI를, sql 36개·9,454줄이 DB 마이그레이션을, py 34개·4,676줄이 ML 서비스(임베딩·얼굴 인식류 추정)를 각각 담당하는 구조로 보인다. 모바일 쪽은 Dart 위에 kt(35개·4,584줄)와 swift(28개·3,869줄), pbxproj(1개·1,298줄)가 추가로 붙어 있어 Flutter 앱 안에 안드로이드·iOS 네이티브 연동 코드가 별도로 존재함을 보여준다. 전체 3,454개 파일 중 테스트 파일이 482개로, 대략 7개 파일당 1개꼴로 테스트가 붙어 있는 셈이다. CI 워크플로우는 27개로, 서버·웹·모바일(안드로이드/iOS)을 각각 빌드·검증해야 하는 멀티 클라이언트 프로젝트치고는 상당한 투자가 들어가 있다. 가장 큰 단일 파일은 open-api/immich-openapi-specs.json(33,202줄)인데, 이는 API 스펙을 자동 생성해 커밋한 파일로 보인다. 손으로 짠 코드가 아니라 코드젠 산출물이 저장소 최대 파일 자리를 차지하고 있다는 점은, 이 프로젝트가 API 계약을 클라이언트 코드 생성의 기준점으로 삼고 있다는 신호로 읽을 수 있다. ## 하이라이트 가장 눈에 띄는 건 활동량이다. 관측 범위(섀로우 클론 depth 1000, 하한값) 안에서 최근 90일 커밋이 733건으로, 전체 관측 커밋의 대다수가 최근 넉 달(첫 관측 커밋 2026-05-04부터 2026-09-03까지) 안에 몰려 있다. 기여자도 129명으로, 소수 코어 팀이 아니라 넓은 기여자 풀이 유지되고 있음을 보여준다. topAuthors 목록에 renovate[bot]이 들어 있는 것도 참고할 만하다. 사람 기여자와 나란히 자동 의존성 업데이트 봇이 상위권에 있다는 건, 의존성 관리를 사람 손이 아니라 자동화 파이프라인에 맡기고 있다는 뜻이고, 이는 devDependencies 2개·dependencies 0개인 루트 package.json 구조와도 맞아떨어진다. 즉 루트는 워크스페이스 오케스트레이터 역할만 하고 실제 의존성은 각 서브패키지(server/web/mobile)에 흩어져 있는 전형적인 모노레포 패턴이다. 두 번째는 릴리스 리듬이다. 원격 태그가 330개라는 건, 짧은 주기로 버전을 계속 끊어왔다는 뜻이다. 자가호스팅 소프트웨어에서 이 정도 릴리스 빈도는 사용자 입장에서 업데이트 추적이 수월하다는 신호로 볼 수 있다. 세 번째는 테스트와 CI의 균형이다. 482개 테스트 파일과 27개 CI 워크플로우가 함께 존재한다는 건, 단일 언어·단일 배포 타깃 프로젝트가 아니라 웹·서버·안드로이드·iOS를 동시에 검증해야 하는 복잡도를 실제로 감당하고 있다는 뜻이다. 모노레포에서 클라이언트 종류가 늘어날수록 CI 매트릭스가 기하급수적으로 커지는데, 27개라는 숫자는 그 복잡도를 어느 정도 정면으로 받아들인 결과로 보인다. ## 주의점 라이선스는 AGPL-3.0(GNU AFFERO GENERAL PUBLIC LICENSE)이다. 일반적인 GPL과 달리 네트워크를 통해 수정본을 서비스로 제공하는 경우에도 소스 공개 의무가 발생하는 카피레프트 조항이 핵심이다. 그냥 내려받아 개인·팀 내부에서 자가호스팅하는 용도라면 문제될 게 없지만, 이 코드를 수정해서 별도 서비스로 재배포하거나 SaaS 형태로 운영할 계획이 있다면 이 조항부터 법무 검토가 필요하다. 실측 자체의 한계도 짚어야 한다. 이번 분석은 depth 1000 섀로우 클론 기준이라 commitCount(1,000)는 실제 전체 히스토리의 하한값이고, firstCommitInRange(2026-05-04)도 저장소 생성일이 아니라 관측 범위의 시작점일 뿐이다. 따라서 "최근 90일 733커밋"이라는 활동 밀도는 신뢰할 수 있지만, 프로젝트 전체 수명이나 총 커밋 수를 이 데이터만으로 단정할 수는 없다. 또한 hasAgentDocs가 false로 나온 걸 보면, AI 코딩 에이전트를 활용한 기여를 염두에 둔 별도 가이드 문서는 아직 마련돼 있지 않은 것으로 보인다. 판정 근거: 최근 90일에 733커밋, 129명의 기여자, 27개 CI 워크플로우가 동시에 돌아가는 걸 보면 유지보수가 죽어있을 리스크는 낮다. 서버·웹·모바일·ML을 한 저장소에서 관리하는 구조라 자가 호스팅 사진 백업이 목적이면 그대로 도입할 만하다. 다만 라이선스가 AGPL-3.0이라 수정본을 네트워크 서비스로 재배포할 계획이 있다면 그 조항부터 검토해야 한다. --- # diagram-design, 에이전트에게 보기 좋은 다이어그램을 가르치는 스킬 패키지 판정: ◆ 도입 후보 · 2026-09-03 · 기준 커밋 4451ead · https://github.com/cathrynlavery/diagram-design 38종 편집형 다이어그램을 자가완결 HTML+SVG로 뽑는 Claude Code·Codex용 스킬. 4개월 반에 135커밋·기여자 28명, 검수 시점 스타 29,877. ## 구조와 기능 리포 이름과 `skills/diagram-design/scripts/mermaid_extract.py`라는 경로 구성을 보면, 이 프로젝트는 Claude 스킬(skill) 패키지 관례를 따라 다이어그램 생성·추출 기능을 스크립트 형태로 묶어 놓은 것으로 보인다. 가장 큰 파일이 바로 이 `mermaid_extract.py`로 1,356줄이며, mermaid 다이어그램을 추출하거나 변환하는 핵심 로직이 여기 몰려 있을 가능성이 높다. 실측된 언어 구성이 흥미롭다. Python이 56개 파일 27,375줄, HTML이 155개 파일 27,319줄로 라인 수 기준 거의 동률이다. 반면 정작 다이어그램 소스 파일 자체는 drawio 1개(78줄), mmd 2개(45줄)뿐이다. 즉 이름은 "다이어그램 설계"지만 리포 본문의 대부분은 다이어그램 원본이 아니라 이를 다루는 Python 도구와 대량의 HTML로 채워져 있다. 검수에서 README를 확인한 결과 이 HTML은 "38종 편집형 다이어그램"의 자가완결 산출 템플릿·예시들이다 — 외부 렌더러 없이 단일 HTML+SVG로 떨어지는 출하 방식이 이 스킬의 정체성이다. 테스트 파일은 26개로 전체 398개 파일 중 일부를 차지하고, CI 워크플로가 3개 구성돼 있어 최소한의 자동 검증 체계는 갖춘 것으로 보인다. 라이선스는 MIT. ## 하이라이트 가장 눈에 띄는 것은 활동 속도다. 첫 커밋 범위가 2026-04-16이고 마지막 커밋이 2026-09-02로, 약 4개월 반 사이에 135커밋이 쌓였는데 그중 120개(약 89%)가 최근 90일 안에 발생했다. 기여자도 28명이나 되어, 짧은 기간에 여러 사람이 동시에 손을 댄 프로젝트라는 인상을 준다. 상위 기여자 명단(Cathryn Lavery, Praveen Bishnoi, Matt Van Horn, 0xDarkMatter, Mr-Neutr0n)의 구성도 리포 소유자 한 명이 아니라 여러 명이 활발히 커밋하는 구조를 보여준다. 두 번째로 짚을 부분은 `skills/diagram-design/scripts/mermaid_extract.py`가 리포 전체에서 가장 큰 단일 파일(1,356줄)이라는 점이다. 도구성 스크립트치고는 상당히 크며, mermaid 관련 로직이 한 파일에 집중돼 있다는 뜻이므로 실제로 도입을 검토한다면 이 파일부터 열어 책임 분리가 되어 있는지 확인할 필요가 있다. ## 주의점 가장 큰 리스크는 버전 관리 부재다. 원격 태그가 0개(remoteTagCount: 0)로, 어떤 커밋이 "안정판"인지 리포 자체에서 표시하지 않는다. 89%의 커밋이 최근 90일에 몰려 있다는 활동성과 합쳐 보면, 아직 API나 스크립트 인터페이스가 자주 바뀌는 초기 단계일 가능성이 크다. 도입을 검토한다면 특정 커밋 해시(4451ead 등)를 고정해서 쓰는 편이 안전하다. 두 번째로, 표준 의존성 매니페스트(requirements.txt·pyproject.toml)는 실측되지 않았는데, 스킬 패키지는 라이브러리처럼 설치되는 게 아니라 스크립트 단위로 복사되는 구조라 이 자체가 결함은 아니다. 다만 개별 스크립트가 요구하는 파이썬 패키지는 사용 전 스크립트 헤더에서 직접 확인해야 한다. 에이전트 문서는 초안에서 '없음'으로 잘못 판단됐던 부분을 정정한다 — probe는 루트 AGENTS.md·CLAUDE.md만 검사하는데, 이 리포는 skills/diagram-design/SKILL.md와 .claude-plugin·.codex-plugin·.agents 디렉터리로 멀티 에이전트 패키징을 갖추고 있다(검수 보강: GitHub API 확인). 오히려 스킬 배포 구조의 모범 사례에 가깝다. 판정 근거: 커밋의 89%가 최근 90일에 몰릴 만큼 활동이 뜨겁고, 검수 시점 스타 29,877로 스킬 장르 최상위권이다. 스킬 패키지는 라이브러리와 달리 복사 설치가 관례라 릴리스 태그 부재(0개)는 감점 요인이 덜하며, 커밋 해시를 고정해 쓰면 된다. 초안의 '에이전트 문서 없음' 판단은 probe가 루트 AGENTS.md만 검사한 한계였고, 검수에서 skills/diagram-design/SKILL.md와 .claude-plugin·.codex-plugin·.agents 패키징이 완비된 것을 확인해 정정한다. Claude Code에서 다이어그램 산출물이 필요한 팀이라면 도입 후보로 올릴 만하다. --- # PokeTokenBar, AI 코딩 토큰을 포켓몬으로 부화시키는 메뉴바 앱 판정: ◇ 관망 · 2026-09-03 · 기준 커밋 56a3547 · https://github.com/chattymin/PokeTokenBar Claude Code 등 AI 코딩 도구의 토큰 사용량을 포켓몬 키우기로 바꾼 macOS 메뉴바 앱. 80일에 333커밋을 쌓았지만 아직 신생이다. ## 구조와 기능 PokeTokenBar는 Claude Code·Codex·Gemini CLI 같은 AI 코딩 도구의 토큰 사용량을 "포켓몬을 부화·진화·수집하는" 게임으로 바꿔 보여주는 macOS 메뉴바 앱이다(검수 보강: GitHub 메타데이터 확인 — macOS 14+·Swift 6·Homebrew cask 배포, 검수 시점 스타 371). 초안 생성 단계에선 격리 정책상 리포 본문에 접근하지 못해 실측 JSON만으로 작성됐고, 제품 정체는 검수 단계에서 확인해 보강했다. 전체 저장소는 텍스트 기준 37,719줄, 159개 파일로 구성돼 있고 이 중 94개 파일(34,967줄)이 Swift다. 텍스트 전체 라인의 대부분을 Swift가 차지한다는 뜻이며, 저장소에 .icns 아이콘 파일이 포함돼 있다는 점을 함께 보면 macOS 네이티브 앱 형태로 짐작된다. 셸 스크립트는 8개(638줄)로 빌드나 배포 자동화용으로 보이고, jsonl 파일 7개(56줄)는 테스트 픽스처나 설정 데이터 성격으로 추정된다(추정). 이력을 보면 첫 커밋이 2026-06-15, 가장 최근 커밋이 조사 시점인 2026-09-03이며, 지난 90일 커밋 333건이 곧 전체 커밋 수와 같다. 즉 저장소 전체 이력이 약 80일에 불과한 신생 프로젝트이고, 그 짧은 기간 안에 333회 커밋과 29개의 원격 태그가 쌓였다. 저자는 29명이 실측됐고 상위 기여자로 Patrick.Park, Boris, Justin Jeong, Seong SeungHyeon, 신현호가 확인된다. 개인 프로젝트 규모를 넘어 여러 명이 동시에 커밋을 쌓아온 흐름이다. CI 워크플로는 1개가 확인됐으며, 라이선스는 MIT다. 의존성 매니페스트는 이번 실측에서 deps: null로 잡혀 별도 서드파티 의존성 목록을 확인할 수 없었다. 저장소에는 에이전트용 문서(hasAgentDocs: true)가 포함돼 있다는 것도 실측됐는데, 구체적으로 어떤 내용을 담고 있는지는 JSON 범위 밖이라 언급하지 않는다. ## 하이라이트 가장 눈에 띄는 지점은 저장소 전체에서 가장 큰 단일 파일이 소스 코드가 아니라 테스트 파일이라는 것이다. `Tests/PokeTokenBarTests/CompanionTests.swift`가 1,800줄로 최대 파일이고, 테스트 파일 수는 전체 159개 파일 중 56개에 달한다. Swift 소스 파일이 94개인 것과 겹쳐 보면, 소스 대비 테스트 비중이 상당히 두껍게 잡혀 있는 저장소다. "Companion"이라는 이름이 붙은 영역에 특히 큰 테스트가 붙어 있다는 것은, 해당 로직이 저장소 안에서 무게중심 역할을 하고 있다는 신호로 읽을 수 있다. 두 번째로 볼 만한 것은 릴리스 리듬이다. 333커밋과 29개 태그가 전부 약 80일 구간 안에 들어와 있다. 태그 하나당 평균 11~12커밋 꼴로 짧은 주기로 버전을 태깅해온 흐름이며, 신생 저장소치고는 릴리스 케이던스가 촘촘하다. 다인원(29명) 저자 구성과 맞물려, 여러 사람이 짧은 주기로 합류·기여해온 프로젝트라는 정황이 커밋·태그 수치만으로도 드러난다. 세 번째는 hasAgentDocs가 true로 잡혔다는 점이다. 저장소가 AI 코딩 에이전트를 염두에 둔 문서를 갖추고 있다는 사실 자체는 실측됐지만, 문서의 내용이나 실제 활용 방식은 이번 조사 범위에서 확인되지 않았다. ## 주의점 deps가 null로 잡힌 것이 가장 먼저 짚을 부분이다. 의존성이 실제로 거의 없는 저장소인지, 아니면 실측 도구가 매니페스트 위치를 인식하지 못한 것인지는 이번 실측만으로 구분할 수 없다. 외부 라이브러리를 끌어오는 프로젝트라면 이 공백을 먼저 채워야 한다. 이력 자체가 80일 남짓으로 매우 짧다는 점도 고려해야 한다. 333커밋·29태그라는 활동량은 인상적이지만, 장기 유지보수 실적이라 부를 만한 기간은 아직 쌓이지 않았다. 이번 조사에서는 README나 소스 코드 본문에 직접 접근하지 못해, 배지나 문서상의 주장을 실측과 대조하는 절차도 진행하지 못했다. 라이선스는 MIT License로 확인된다. 판정 근거: 이력 전체가 약 80일(2026-06-15~2026-09-03)에 몰려 있고 그 안에 333커밋, 29개 태그가 쌓였다. 짧은 기간에 태그 기반 릴리스를 촘촘히 이어온 활동량과, 저장소 최대 파일이 소스가 아니라 테스트 파일이라는 점은 눈에 띄는 신호다. 다만 실측 JSON에는 deps가 null로 잡혀 있어 서드파티 의존성 범위를 확인할 수 없고, 이번 조사에서는 소스 코드 본문을 직접 확인하지 못해 아키텍처나 README의 구체 주장을 실측과 대조할 수 없었다. 활동 밀도는 긍정적이지만 검증 가능한 근거가 파일·커밋 통계 수준에 머물러 있어 지금 단계에서는 도입 후보나 참고 구현으로 단정하기보다 관망이 맞다. --- # Slidev, 마크다운 한 장을 Vue 런타임으로 굽는 pnpm 모노레포 판정: ◆ 도입 후보 · 2026-09-03 · 기준 커밋 a8d8ff7 · https://github.com/slidevjs/slidev 마크다운으로 슬라이드를 작성하면 Vue 컴포넌트로 렌더링하는 개발자용 프레젠테이션 툴, 3년치 이력에 저자 194명·태그 446개가 쌓여 있다. ## 구조와 기능 Slidev는 마크다운으로 작성한 문서를 Vue 3 + Vite 기반 런타임에서 슬라이드로 렌더링하는 개발자용 프레젠테이션 도구다. 확장자별 분포를 보면 ts 파일이 284개(24,104줄)로 가장 많고 vue 파일이 147개(10,039줄)로 뒤를 잇는다. 로직은 TypeScript로, 슬라이드 UI와 편집기 화면은 Vue 컴포넌트로 짜여 있다는 구조가 그대로 드러난다. 가장 큰 파일은 pnpm-lock.yaml로 19,921줄이다. 반면 루트 package.json에는 직접 dependencies가 0개, devDependencies만 45개 등록되어 있다. 이 둘을 나란히 놓고 보면 pnpm 워크스페이스 형태의 모노레포임을 알 수 있다. 실제 기능별 의존성(마크다운 파서, 코드 하이라이터, 익스포트용 헤드리스 브라우저 연동 등)은 루트가 아니라 workspace 하위 패키지 각각에 걸려 있을 가능성이 높다. 커밋 이력은 shallow clone(depth 1000) 기준으로 1,046건이 잡히는데 이는 하한값이고, range 내 첫 커밋은 2023-09-23, 마지막 커밋은 2026-08-25다. 최근 90일 63커밋, 저자 194명, 원격 태그 446개로 릴리스가 빈번하게 나가는 프로젝트임을 보여준다. 상위 기여자로 리포 소유 조직과 함께 공개적으로 알려진 Anthony Fu가 이름을 올리고 있다. ## 하이라이트 **모노레포 의존성 분리 구조.** 루트 package.json의 dependencies가 0인 수치만 보면 "의존성 없는 가벼운 도구"로 오해하기 쉽지만, 같은 리포에서 가장 긴 파일이 19,921줄짜리 pnpm-lock.yaml이라는 점이 바로 반증이다(`pnpm-lock.yaml`). devDependencies 45개는 루트에서 관리하는 빌드/린트/테스트 툴체인이고, 실제 무거운 의존성은 워크스페이스 하위 패키지 쪽에 있다고 보는 게 맞다. 모노레포 도구를 평가할 때 루트 매니페스트만 보고 의존성 규모를 판단하면 안 된다는 걸 보여주는 사례다. **TS 대 Vue 파일 비율.** ts 284개 파일(24,104줄)과 vue 147개 파일(10,039줄)의 비율은 대략 2:1이다. 슬라이드 렌더링·파서·CLI 같은 로직이 TypeScript 패키지로 분리되어 있고, 실제 화면(프레젠터 모드, 편집기, 슬라이드 레이아웃)만 Vue 컴포넌트로 얇게 얹힌 구조로 읽힌다. UI 프레임워크 위에서 코어 로직을 프레임워크 비의존적으로 분리해두면 향후 다른 렌더러로 포팅하거나 로직만 테스트하기 쉬워진다는 점에서 참고할 만하다. **활동 지속성과 저자 폭.** 3년이 채 안 되는 범위(2023-09-23 ~ 2026-08-25)에서 저자 194명, 원격 태그 446개가 쌓였고 최근 90일에도 63커밋이 붙었다. 태그 수가 커밋 수(1,046, 하한값)에 비해 상당히 많은 편인데, 이는 세분화된 버전 릴리스 주기를 시사한다. CI 워크플로가 5개 구성되어 있어 릴리스 전 자동 검증 파이프라인이 최소한의 형태로는 갖춰져 있다. ## 주의점 수치는 shallow clone(depth 1000) 기준이라 커밋 수 1,046은 하한값이고, "range 내 첫 커밋(2023-09-23)"은 실제 프로젝트 시작일이 아니라 depth 제한으로 잘린 지점일 뿐이다. 프로젝트의 전체 이력 길이를 판단하는 근거로 이 날짜를 쓰면 안 된다. 테스트 파일은 774개 파일 중 60개(약 7.7%)로, 파일 수 대비 비중이 크지 않다. 마크다운 파싱이나 슬라이드 렌더링처럼 핵심 경로는 스냅샷 테스트(snap 확장자 2개 파일, 2,887줄)로 일부 커버되는 것으로 보이나, PDF/PNG 익스포트처럼 외부 헤드리스 브라우저에 의존하는 기능의 테스트 커버리지는 별도로 확인이 필요하다. 라이선스는 MIT로 상업적 사용에 제약이 없다. hasAgentDocs가 false로 잡혀 있어, AI 코딩 에이전트를 통한 기여나 자동화를 계획한다면 리포에 명시된 별도 가이드 없이 기존 컨트리뷰션 문서만으로 컨벤션을 파악해야 한다. 판정 근거: 3년 가까운 이력에 걸쳐 저자 194명이 태그 446개를 찍었고 최근 90일에도 63커밋이 붙어 활동이 끊기지 않았다. CI 워크플로 5개, MIT 라이선스로 도입 장벽이 낮고, 마크다운 기반 슬라이드 작성이라는 워크플로 자체가 git diff 친화적이라 팀 문서·발표 자료를 코드처럼 버전관리하려는 팀에 바로 시도해볼 만하다. 다만 테스트 파일이 774개 파일 중 60개로 비중이 낮아, 특정 익스포트·플러그인 기능을 프로덕션에 걸기 전에는 해당 경로의 커버리지를 직접 확인해야 한다. --- # excalidraw, 손그림 캔버스를 프랙셔널 인덱싱과 종단간 암호화 협업으로 짜올린 React 라이브러리 판정: ◆ 도입 후보 · 2026-09-03 · 기준 커밋 e1bb9ff8 · https://github.com/excalidraw/excalidraw 런타임 의존성 0개(devDependencies 34개)인 순수 워크스페이스 모노레포로, 텍스트 328,022줄 중 TS/TSX가 약 59%를 차지하고 168개 테스트 파일과 스냅샷 24개(54,389줄)가 회귀를 받치는 손그림 화이트보드 라이브러리 ## 구조와 기능 excalidraw는 React 기반 손그림 스타일 화이트보드 라이브러리로, 저장소는 npm에 `@excalidraw/excalidraw`로 배포되는 핵심 패키지와 실제 서비스(excalidraw.com)인 `excalidraw-app`을 같은 워크스페이스 모노레포에 묶어둔 구조다. 실측 기준 텍스트 파일 1,271개·328,022줄 중 `tsx` 304개·99,051줄과 `ts` 335개·95,380줄을 합치면 194,431줄로 전체의 약 59.3%를 차지하고, 나머지는 `snap`(24개·54,389줄, 스냅샷 테스트), `sfd`(1개·12,222줄, 폰트 소스), `scss`(82개·10,141줄), `mdx`(33개·3,661줄, 문서) 순이다. 루트 `package.json`은 `dependencies`가 0개이고 `devDependencies`만 34개인데, 클론해 확인하면 이건 워크스페이스 전체를 아우르는 private 모노레포 매니페스트라서 실제 런타임 의존성은 각 `packages/*` 하위 매니페스트에 흩어져 있다는 뜻이다. 패키지는 역할별로 나뉘어 있다. `packages/element`는 도형·바인딩·프랙셔널 인덱싱 같은 엘리먼트 모델을, `packages/excalidraw`는 캔버스 렌더링과 씬 직렬화·암복호화를, `packages/fractional-indexing`은 순서 인덱스 생성 알고리즘을, `packages/math`는 기하 연산을 각각 담당한다. `excalidraw-app`은 이 패키지들을 조립해 실시간 협업(`collab/Portal`)과 Firebase 저장(`data/firebase.ts`), Socket.IO 연결을 붙인 완성형 웹앱이다. 메타 정보(`meta.hasAgentDocs: true`)대로 저장소 루트에 `CLAUDE.md`와 `AGENTS.md`가 함께 있고, 클론해 읽어보면 두 문서 모두 위 모노레포 구조와 `yarn test:typecheck`·`yarn test:update` 같은 개발 커맨드를 요약해둔 내용이라 AI 에이전트가 이 리포에서 바로 작업을 시작할 수 있게 정리돼 있다. ## 하이라이트 **엘리먼트 순서를 프랙셔널 인덱싱으로 캐싱.** `packages/element/src/fractionalIndex.ts`는 배열 순서를 그대로 신뢰하지 않고 프랙셔널 인덱스를 진실의 소스로 둔 뒤, 배열은 캐시로만 쓰는 설계를 주석으로 명시한다. ```ts export class InvalidFractionalIndexError extends Error { public code = "ELEMENT_HAS_INVALID_INDEX" as const; } ``` 다중 사용자 환경에서 정렬 충돌 없이 z-index나 리스트 순서를 병합해야 하는 기능이라면, 이 파일의 캐시·재계산 분리 패턴이 바로 참고가 된다. `topExtensions`에 `ts` 335개·95,380줄이 잡힌 것도 이런 세밀한 도메인 로직 파일이 많다는 걸 뒷받침한다. **서버가 콘텐츠를 못 보는 협업 저장.** `packages/excalidraw/data/encryption.ts`는 `window.crypto.subtle`로 AES-GCM 키를 생성·내보내고, `excalidraw-app/data/firebase.ts`는 `encryptData`/`decryptData`로 감싼 씬 데이터만 Firestore에 쓴다. ```ts export const generateEncryptionKey = async < T extends "string" | "cryptoKey" = "string", >( returnAs?: T, ): Promise => { const key = await window.crypto.subtle.generateKey( { name: "AES-GCM", length: ENCRYPTION_KEY_BITS }, true, ["encrypt", "decrypt"], ); ... }; ``` 키가 서버로 전송되지 않고 클라이언트 간에만 공유되는 구조라, 협업 링크 자체가 복호화 키 역할을 한다. 종단간 암호화가 필요한 협업 기능을 처음부터 설계해야 한다면 이 두 파일이 실전 참고가 된다. **스냅샷 테스트로 회귀를 조인다.** `snap` 확장자만 24개 파일·54,389줄로, 전체 텍스트(328,022줄)의 6분의 1이 넘는다. 테스트 파일 168개(`meta`가 아닌 `tree.testFiles` 실측)와 합쳐 보면, 캔버스 렌더링처럼 시각적 회귀가 발생하기 쉬운 영역을 스냅샷으로 촘촘히 잡아두는 팀 문화가 수치로 드러난다. ## 주의점 라이선스는 MIT(`meta.license` 실측과 클론한 `LICENSE` 파일 본문 일치)로 상업적 이용에 제약이 거의 없다. 다만 `commitCount`가 정확히 1,000으로 shallow clone(depth 1000) 상한과 맞물려 있어, 실제 커밋 히스토리와 `commitsLast90d`(90일 내 78건)를 뺀 전체 활동량은 이 실측보다 더 많을 수 있다는 점을 감안해야 한다(`note` 필드 명시). `excalidraw-app`의 실시간 협업 기능은 Firebase(Firestore·Storage)와 Socket.IO 서버를 직접 붙이는 구조라, `@excalidraw/excalidraw` 패키지만 임베드해 쓸 때는 이 협업·암호화 코드가 그대로 딸려오지 않는다. 협업 기능까지 참고하려면 라이브러리가 아니라 `excalidraw-app` 쪽 코드를 봐야 한다는 점, 그리고 AES-GCM 키 배포(URL 공유)를 자체 서비스에 옮겨 쓸 경우 링크 유출이 곧 데이터 노출로 이어지는 구조라는 점은 도입 전에 별도로 검토할 부분이다. 판정 근거: 실측 수치가 가리키는 건 규모보다 정돈됨이다. 루트 package.json의 dependencies가 0개이고 devDependencies만 34개인 건 이 리포가 배포용 라이브러리(@excalidraw/excalidraw)와 workspace 패키지들을 묶는 private 모노레포라는 뜻이고, 실제로 클론해보면 packages/ 아래가 common·element·excalidraw·fractional-indexing·laser-pointer·math·utils로 역할별로 쪼개져 있다. topExtensions에서 snap 확장자가 24개 파일에 54,389줄로 3위에 오른 것도 눈에 띈다. 텍스트 총량(328,022줄)의 6분의 1이 스냅샷 테스트라는 뜻이라, 리팩터링 시 회귀를 스냅샷으로 강하게 잡아두는 팀 문화가 수치로 드러난다. sfd 확장자가 파일 1개·12,222줄로 잡힌 것도 흥미로운 실측인데, 클론해 확인하니 이건 코드가 아니라 손글씨 폰트 'Comic Shanns'의 FontForge 소스 파일이다(수치는 JSON, 파일 정체는 클론 확인) — 화이트보드 특유의 손그림 느낌을 자체 폰트로 구현했다는 신호다. commitCount가 정확히 1,000으로 shallow clone 상한과 일치해 실제 히스토리는 이보다 길다는 점, hasAgentDocs가 true로 잡힌 대로 CLAUDE.md·AGENTS.md가 모노레포 구조를 문서화해두고 있다는 점도 확인했다(문서 존재는 실측 JSON meta.hasAgentDocs 근거, 내용은 클론 확인). 라이선스는 MIT로 상업 이용 제약이 낮다. 코드를 읽어보면 엘리먼트 순서를 프랙셔널 인덱싱으로, 실시간 협업 페이로드를 클라이언트 측 AES-GCM 암호화로 처리하는 구조가 실제로 구현돼 있어, 화이트보드류 캔버스나 종단간 암호화가 필요한 협업 기능을 설계할 때 참고할 실전 사례로 충분하다. --- # zed, 편집·협업·확장을 하나의 CRDT 데이터 모델로 엮은 Rust 에디터 판정: ◆ 도입 후보 · 2026-09-03 · 기준 커밋 b1a7ef0c · https://github.com/zed-industries/zed Rust 90% 코드베이스에 크레이트 245개, CI 워크플로우 47개를 얹고도 최근 90일 커밋이 클론 상한(1,000)을 채울 만큼 활발한 대형 에디터 프로젝트 ## 구조와 기능 zed는 Rust로 작성된 네이티브 코드 에디터로, 저장소는 245개 크레이트(`crates/`)로 잘게 쪼개져 있다. 실측 기준 텍스트 파일 4,025개·1,790,496줄 중 Rust가 1,946개 파일·1,623,288줄로 전체의 약 90.7%를 차지하고, 나머지는 빌드 설정(`toml`, 13,529줄)과 스크립트(`py`, 13,276줄), Tree-sitter 쿼리(`scm`, 9,524줄), 프로토콜 정의(`proto`, 6,546줄), WASM 확장 인터페이스(`wit`, 4,094줄) 등으로 이어진다. `scm`·`wit`·`proto` 세 확장자가 상위권에 든다는 것 자체가, 이 프로젝트가 단순 텍스트 편집기가 아니라 구문 분석·원격 프로토콜·플러그인 인터페이스를 모두 자체 정의하는 플랫폼형 코드베이스라는 걸 실측으로 보여준다. 클론해 직접 읽어보면(수치는 아니므로 실측 JSON 밖 내용) `crates/text/src/text.rs`에 `Operation` enum이 `Edit`/`Undo` 두 변형으로 정의돼 있고, `EditOperation`은 `clock::Lamport` 타임스탬프와 `clock::Global` 버전 벡터를 들고 다닌다. 이건 zed의 텍스트 버퍼가 처음부터 다중 사용자 실시간 협업을 전제로 한 CRDT 구조로 설계됐다는 뜻이다. `crates/collab`, `crates/collab_ui` 크레이트가 별도로 존재하는 것도 이 구조와 맞물린다. 확장 생태계는 `crates/extension`, `extension_api`, `extension_host`, `extension_cli`, `extensions_ui` 다섯 크레이트로 나뉘어 있고, `extension_api/wit/` 아래에 `since_v0.0.1`부터 `since_v0.8.0`까지 버전별 WIT 인터페이스 디렉토리가 쌓여 있다. WASM 기반 확장이 API 버전 호환성을 인터페이스 파일 단위로 관리한다는 뜻이고, 저장소 루트의 `extensions/`(7개 항목, `glsl`·`html`·`proto` 등)는 실제 예시 확장 코드다. ## 하이라이트 **Lamport CRDT로 짠 편집 히스토리.** `crates/text/src/text.rs`의 `Operation` 정의: ```rust pub enum Operation { Edit(EditOperation), Undo(UndoOperation), } pub struct EditOperation { pub timestamp: clock::Lamport, pub version: clock::Global, pub ranges: Vec>, pub new_text: Vec>, } ``` 편집을 절대 위치가 아니라 타임스탬프+버전 벡터로 표현해 순서가 뒤섞여 도착해도 수렴하게 만드는 전형적 CRDT 설계다. 협업 에디터를 직접 만들 계획이 있다면 가장 먼저 읽어볼 파일이다. **245개 크레이트 + 47개 CI 워크플로우로 버티는 빌드 규모.** 실측상 커밋 수가 shallow clone 상한(1,000)을 그대로 채웠다는 건 최근 90일 활동량이 그 이상이라는 뜻이고, 이 정도 변경 빈도를 CI 워크플로우 47개로 감당하고 있다는 것 자체가 대규모 Rust 모노레포 CI 설계 사례로 참고할 만하다. 다만 각 워크플로우의 역할(빌드/테스트/린트 분포)은 이번 실측 범위 밖이라 추가 확인이 필요하다. **WIT 기반 확장 인터페이스의 버전 계층.** `crates/extension_api/wit/`가 `since_v0.0.1`부터 `since_v0.8.0`까지 디렉토리를 나눠 하위 호환을 관리한다. 플러그인 API를 깨지 않고 진화시키는 문제를 겪어본 프로젝트라면 이 구조를 그대로 참고할 수 있다. ## 주의점 라이선스는 저장소 루트에 `LICENSE-APACHE`와 `LICENSE-GPL`(GPLv3) 두 파일이 함께 있는 이중 구성이다. 실측 JSON의 `meta.license` 필드에는 "Copyright 2022 - 2025 Zed Industries, Inc."라는 저작권 고지 문자열만 잡혔고 SPDX 식별자는 프로브가 추출하지 못했다. 크레이트별로 어느 라이선스가 적용되는지는 이번 실측 범위 밖이라, 코드를 가져다 쓸 계획이면 반드시 각 크레이트의 라이선스 파일을 직접 확인해야 한다. `largestFile`이 `crates/editor/src/editor_tests.rs` 45,930줄이라는 점도 짚어둘 만하다. 테스트 파일 한 개가 이 정도면 에디터 코어의 회귀 테스트가 매우 촘촘하다는 신호인 동시에, 코어 로직 자체의 응집도가 높아 부분만 떼어 재사용하기는 어려운 구조라는 뜻이기도 하다(추정). shallow clone(depth 1000) 기반 실측이라 `commitCount`·`commitsLast90d`는 하한값이며, 실제 히스토리는 이보다 길다. 판정 근거: 실측만 봐도 규모와 활동성이 이례적이다. depth 1000 shallow clone인데 90일 커밋 수가 그 상한(1,000)을 그대로 채웠다는 건 실제 90일 커밋이 최소 그 이상이라는 뜻이고, 기여자 335명·원격 태그 1,466개는 단발성 실험 리포가 아니라 정기 릴리스를 도는 프로덕션 프로젝트라는 신호다. 코드 구조도 뒷받침한다. crates/text의 Operation enum이 Lamport 타임스탬프 기반 CRDT로 편집을 표현해 실시간 협업 에디터의 핵심을 코드 수준에서 확인할 수 있고, extension_api의 WIT 인터페이스(4,094줄, 77개 파일)는 WASM 샌드박스 확장 시스템이 문서만이 아니라 실제로 구현돼 있음을 보여준다. 다만 largestFile이 crates/editor/src/editor_tests.rs 45,930줄이라는 점은 에디터 코어 자체의 응집도가 매우 높다는 뜻이라 신규 기여자의 초기 진입 비용은 낮지 않을 것으로 보인다(코드는 읽었지만 이 판단 자체는 추정). 그래도 도입/참고 후보로는 충분하다: 크로스플랫폼 네이티브 에디터를 Rust로 어떻게 설계하는지, 편집-협업-확장을 하나의 데이터 모델로 엮는 실전 사례로서 값이 크다. --- # ollama, 로컬 LLM 런타임의 사실상 표준은 어떻게 유지되는가 판정: ◆ 도입 후보 · 2026-09-03 · 기준 커밋 b79067b · https://github.com/ollama/ollama 104명이 90일간 273커밋을 낸 활발한 로컬 LLM 런타임, MIT 라이선스에 테스트 381개가 붙어 있다 ## 구조와 기능 트리 구조상 코드의 대부분(836개 파일, 324,732줄)이 Go로 작성돼 있고, 그다음으로 큰 언어 그룹이 헤더 파일(h, 43개·16,604줄)과 C/C++(c 4개·3,446줄, cpp 3개·4,155줄), Objective-C(m, 4개·2,602줄)다. Go 코드가 CLI와 서버 로직을 감싸고, C/C++/헤더 계열이 네이티브 추론 엔진 바인딩을 담당하는 전형적인 "고수준 언어가 저수준 추론 엔진을 감싸는" 구조로 읽힌다. app/ui 하위에 tsx 49개(11,767줄)·ts 47개(5,347줄)가 별도로 존재하고, 최대 파일이 app/ui/app/package-lock.json(13,342줄)이라는 점에서 Go 백엔드와는 독립적으로 관리되는 데스크톱 GUI(Electron 또는 유사 프레임워크 기반 앱 셸)가 리포 안에 함께 들어 있다. mdx 파일도 56개(7,185줄) 잡혀 있어 문서화 비중도 작지 않다. 저장소에 AI 에이전트용 가이드 문서(AGENTS.md 계열)가 확인된다. 코드베이스 규모(41.2만 텍스트 LOC)에 비해 이런 온보딩 장치가 있다는 건 외부 기여를 어느 정도 염두에 둔 리포라는 신호다. ## 하이라이트 **활동 밀도**: shallow clone(depth 1000) 제약으로 commitCount 1,028은 하한값에 불과하지만, 그 범위 안에서도 최근 90일 273커밋·104명 기여자가 잡힌다. 리포 규모(1,371개 파일) 대비 기여자 풀이 넓게 퍼져 있다는 뜻이고, 특정 소수 유지보수자에게만 의존하는 구조는 아닌 것으로 보인다. **테스트 자산**: 테스트 파일이 381개로 집계된다. 커버리지 수치 자체는 이번 실측 범위 밖이라 "얼마나 촘촘한가"까지는 말할 수 없지만, 1,371개 전체 파일 중 테스트 파일 비중이 4분의 1을 넘는다는 건 무테스트 상태로 방치된 리포는 아니라는 근거가 된다. **CI 체계**: 워크플로우 5개가 구성돼 있다. 어떤 단계(빌드/테스트/릴리스 등)로 나뉘는지는 워크플로우 파일을 직접 열어야 알 수 있지만, 최소한 커밋마다 자동 검증이 도는 파이프라인은 갖춰져 있다. ## 주의점 **shallow clone의 한계**: 이번 분석은 depth 1000 shallow clone 기준이라 commitCount(1,028)와 firstCommitInRange(2025-10-23)는 실제 리포 전체 이력의 일부만 반영한 하한값이다. 프로젝트가 이보다 훨씬 오래됐고 초기 기여자 구성이 다를 가능성을 배제할 수 없다. **의존성 데이터 부재**: 이번 실측 JSON에는 deps 항목이 null로 비어 있어, Go 모듈이나 app/ui의 npm 의존성 트리를 근거로 한 라이선스 호환성·공급망 리스크는 확인하지 못했다. package-lock.json이 13,342줄에 달하는 걸 보면 프런트엔드 쪽 의존성 트리가 얕지 않은데, 실제 구성은 별도 점검이 필요하다. **라이선스**: MIT License로 표기돼 있어 상업적 임베드에 제약이 적다. 다만 C/C++ 바인딩 영역(헤더 43개·16,604줄 포함)에 서드파티 추론 엔진 코드가 벤더링돼 있을 가능성이 있어, 해당 하위 디렉터리의 개별 라이선스 표기는 별도로 확인하는 편이 안전하다. 판정 근거: shallow clone(depth 1000) 기준으로도 90일 273커밋, 104명 기여자, CI 워크플로우 5개, 테스트 파일 381개가 잡힌다. 커밋 이력이 depth 제한에 걸려 실제 기여자·커밋 수는 이보다 많을 가능성이 높은데, 그 하한값만으로도 활동량이 낮지 않다. MIT 라이선스라 내부 도구에 임베드하는 데 법적 장벽이 없고, 코드베이스가 Go 단일 언어로 836개 파일에 몰려 있어 진입 지점을 찾기 쉽다. 도입 후보로 판정한다. --- # screenshot-to-code, 바이럴 데모가 에이전트 제품으로 재건축되기까지 판정: ◈ 참고용 · 2026-09-03 · 기준 커밋 d026163 · https://github.com/abi/screenshot-to-code 스크린샷을 코드로 바꾸는 2023년의 데모가 멀티 프로바이더 툴콜링 에이전트와 평가 주도 운영 체계로 전면 개조됐다. ## 구조와 기능 스크린샷·목업·화면 녹화를 HTML+Tailwind, React, Vue 등의 코드로 변환한다. 2023년 11월 GPT-4 Vision 데모로 시작해 GitHub 최상위권 스타를 받은 프로젝트지만, 현재 코드베이스는 그 시절과 다르다. 생성 경로는 프롬프트 한 방이 아니라 AgentEngine의 툴콜링 루프다. 도구 9종(create_file, edit_file, 이미지 생성·편집·배경 제거, 실제 로고를 추출해 재사용하는 extract_assets, 자가 시각 검증 screenshot_preview 등)에 최대 20툴턴 가드, 변형 4개를 서로 다른 모델로 병렬 생성해 비교 선택한다. OpenAI·Anthropic·Gemini의 툴 결과 이어붙이기 차이를 ProviderSession 계약으로 격리한 프로바이더 추상화, 스트리밍 중 부분 툴 인자를 파싱해 실행 전에 프론트로 미리 흘리는 라이브 프리뷰까지, 에이전트 백엔드 설계의 교과서적 사례가 많다. 공개 리포는 셀프호스트 판이고 호스팅 SaaS는 별도 비공개 코드베이스로 연결되는 오픈코어 구조다. ## 하이라이트 평가가 모델 선택을 운전한다. eval set(스크린샷·텍스트 브리프)과 작업 기간에 고정되는 eval 세션, 이미지×모델 매트릭스, 사람의 0~4점 채점이 갖춰져 있고, 최근 커밋 이력에 "채점된 평가로 기본 모델 믹스 갱신"이 반복적으로 나타난다. 모델 교체 결정을 감이 아니라 채점 데이터로 하는 운영 루프가 실제로 돌았다는 뜻이다. 비용 거버넌스가 코드에 박혀 있다. 변형·평가 런당 3달러 하드 상한(초과 시 중단), 모델별 단가 테이블, 출력 없이 끝난 에이전트 런의 실패 처리. 에이전트 루프를 제품에 넣을 때 필요한 가드레일의 실물이다. ## 주의점 실측이 배지와 다르게 말한다. README에 CI 배지가 있지만 분석 시점 리포에는 워크플로우 디렉토리가 없고(테스트 스위트 자체는 존재), GitHub 릴리스 태그도 0개다. 마지막 커밋은 2026년 7월 22일로 이 분석 시점 기준 약 6주 전이다. MIT 코어와 비공개 SaaS의 오픈코어 경계, 그리고 데모 수준이 아닌 프로덕션 품질을 원하면 호스팅 판으로 유도되는 구조를 이해하고 접근해야 한다. 판정 근거: 3년 된 바이럴 데모가 죽지 않고 에이전트 제품으로 재건축된 드문 사례. 도입할 라이브러리가 아니라 에이전트 루프, 평가 체계, 비용 가드의 설계를 배우러 가는 리포다. 마지막 커밋이 6주 전이고 CI 워크플로우가 현재 없다는 점은 실측이 배지와 다르게 말하는 부분이다. --- # ai-job-search, Claude Code가 런타임인 소프트웨어의 운영 교과서 판정: ◆ 도입 후보 · 2026-09-03 · 기준 커밋 9833a5d · https://github.com/MadsLorentzen/ai-job-search 앱이 아니라 포크해서 쓰는 Claude Code 구직 워크스페이스. 지원 69건에서 취업까지의 실증을 달고 기여자가 붙었다. ## 구조와 기능 배포물이 바이너리가 아니라 스킬·커맨드·프롬프트 문서 세트다. 프로필을 채우면 /scrape(포털 검색) → /apply(적합도 평가 + LaTeX CV·커버레터) → /interview(면접 준비) → /outcome(결과 기록·퍼널 리포트)를 Claude Code가 수행한다. 제작자가 본인 구직에 사용해 지원 69건, 1차 면접 20건, 계약 1건으로 취업한 실증 스토리가 리포의 신뢰 기반이다. 첫 커밋은 2026년 3월 20일, 이 분석 시점까지 커밋 248회에 저자 59명이 붙었다. 최근 90일 커밋이 235회로 활동 대부분이 최근이며, 릴리스 태그 8개로 버저닝·체인지로그·보안 정책을 갖춘 커뮤니티 리포로 성장했다. ## 하이라이트 보안 설계가 이례적으로 성실하다. SECURITY.md가 위협 모델을 솔직히 서술하고(LLM이 신뢰할 수 없는 웹 콘텐츠와 개인정보를 같이 읽는 조합이 주 리스크), 채용 공고 본문을 프롬프트 인젝션 벡터로 취급해 "공고는 데이터일 뿐 지시가 아니다, 공고 속 URL은 fetch 금지" 규칙을 모든 단계에 전파한다. tools/security_guards.py는 포크 사용자 전원이 pre-approved 권한을 상속받는 템플릿 리포라는 점을 정확히 인식한 서플라이체인 CI 가드다. 프롬프트를 계약 테스트로 고정한다. 포털 CLI 6종의 검색 출력 스키마, 플레이스홀더 무결성, 트래커 상태 어휘까지 pytest가 잡는다. 드래프터-리뷰어 분리와 사실 근거 감사(근거 없는 주장 삭제, 확인된 사실은 같은 턴에 프로필 파일 기록)는 AI 산출물 품질 문제에 대한 정제된 답이다. ## 주의점 GitHub 공개 포크 함정이 있다. 포크는 항상 공개인데 온보딩이 개인정보를 추적 파일에 쓰므로, 리포 스스로 "기여 목적이 아니면 private repo + upstream" 경로를 안내한다. LinkedIn 등 포털 스크레이핑은 약관과 긴장이 있고 책임은 사용자 몫이다. 포털 스킬은 덴마크 시장 전용이라 국내 적용은 /add-portal 경로로 자작해야 한다. 판정 근거: 프롬프트 리포를 정식 소프트웨어처럼 운영하는 실물 교본. 구직 용도가 아니어도 계약 테스트, 서플라이체인 가드, 사실 근거 감사 패턴은 스킬 기반 워크스페이스에 그대로 이식할 가치가 있다. 포털 스킬은 덴마크 시장 전용이라 국내 사용은 자작이 필요하다. --- # DeskBox, 1인과 에이전트가 12주에 릴리스 62개를 내는 법 판정: ◈ 참고용 · 2026-09-03 · 기준 커밋 db576af · https://github.com/Tianyu199509/DeskBox 바탕화면 파일을 실제 폴더 기반 위젯으로 정리하는 Windows 오거나이저. 코드보다 먼저 눈에 들어오는 건 출하 체계다. ## 구조와 기능 DeskBox는 바탕화면 파일을 "실제 폴더 기반 위젯"으로 정리하는 Windows 10/11 네이티브 앱이다. Explorer를 대체하지 않고 파일 구조도 바꾸지 않는다는 것이 핵심 약속이고, 그 위에 위젯 그룹, 바탕화면 자동 정리 상태 머신, Todo·퀵 캡처, USN 저널 기반 로컬 검색 인덱스, 날씨·음악 위젯, 캡슐 모드가 얹혀 있다. Stardock Fences의 오픈소스 대안 포지션. 2026년 6월 10일 첫 커밋부터 이 분석 시점까지 약 12주간 커밋 284회, 원격 릴리스 태그 62개를 냈다. 최근 90일 커밋이 전체와 같다는 것은 이 리포의 전 이력이 곧 최근 활동이라는 뜻이다. 저자는 2명으로 사실상 1인 프로젝트이며, 커밋 이력의 `codex/*` 브랜치 머지와 AGENTS.md가 AI 에이전트 병행 개발을 보여준다. ## 하이라이트 위젯 파운데이션이 문서로 명문화되어 있다. `docs/architecture/current_architecture.md`가 신규 위젯에 공유 콘텐츠 경로(WidgetKind → WidgetRegistry → ContentWidgetWindow)를 강제하고, 위험한 레거시는 점진 이관 원칙을 못 박았다. 1인 프로젝트에서 아키텍처 문서가 실제로 코드를 통제하는 드문 사례다. AGENTS.md의 스테일 빌드 방지 규칙이 실전적이다. 빌드 전에 리포 경로의 실행 중 exe를 먼저 죽이고, 재기동 후 의도한 빌드가 돌고 있는지 실행 경로를 검증해 보고하게 한다. 에이전트 병행 개발에서 반복되는 "옛 빌드 보고 디버깅" 사고를 규칙 한 줄로 봉인했다. 출하 부대가 충실하다. Inno Setup 이중 인스톨러(런타임 자동 검사 경량판 + 사설 런타임 동봉 오프라인판), 별도 업데이터 실행 파일, 12개 언어 로컬라이제이션과 리소스 키 커버리지 보장, 테스트 파일 298개와 CI 워크플로우 3개. ## 주의점 서비스 파일이 비대하다. 분석 시점 기준 SettingsService, SearchIndexService 같은 코어 서비스가 수천 줄 단위이고, UI 자동화 테스트 없이 서비스 단위 테스트에 의존한다. 라이선스가 MIT에서 GPL-3.0으로 전환된 이력이 있으므로(소급 없음 명시, 브랜딩 별도 보호) 코드 차용 전 버전별 라이선스 확인이 필요하다. 판정 근거: 도구 자체보다 출하 체계가 배울 거리다. Windows 데스크톱을 만들 게 아니라면 도입 대상은 아니고, 에이전트 병행 개발의 운영 규율을 훔치러 가는 리포다.