project-librarian 0.2.0 → 0.3.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.
package/README.ko.md CHANGED
@@ -5,187 +5,293 @@
5
5
  [![Node.js](https://img.shields.io/badge/Node.js-%3E%3D22.13-brightgreen.svg)](https://nodejs.org/)
6
6
  [![코드 근거 인덱스](https://img.shields.io/badge/code%20evidence-node%3Asqlite-blue.svg)](https://nodejs.org/api/sqlite.html)
7
7
 
8
- Codex Claude Code 위한 간결한 프로젝트 메모리와 코드 근거.
8
+ **모든 AI 코딩 에이전트에게 프로젝트에 대한 같은 지속 기억을 주세요.** Project Librarian은 저장소 안에 두는 간결한 계획 위키와 선택적 코드 근거 인덱스를 유지합니다. Codex, Claude Code, Cursor, Gemini CLI가 세션을 시작할 때 이걸 읽으므로, 매번 코드베이스를 처음부터 다시 파악하지 않아도 됩니다.
9
9
 
10
- Project Librarian은 저장소 로컬 계획 위키, 간결한 시작 훅, 선택적 SQLite 코드 근거 인덱스를 생성합니다. 에이전트는 프로젝트 계획에서 시작하고, 필요한 문서로 라우팅하며, 전체 저장소를 반복 스캔하지 않고 코드로 뒷받침되는 근거를 확인할 수 있습니다.
10
+ 언어: [English](README.md) | [한국어](README.ko.md)
11
11
 
12
- 언어: [English](README.md) | [한국어](README.ko.md) | [日本語](README.ja.md) | [简体中文](README.zh.md)
12
+ ## 빠른 시작
13
+
14
+ 대부분의 사용자는 생명주기 명령을 직접 실행하기보다 코딩 에이전트에게 Project Librarian 실행을 요청하면 됩니다.
15
+
16
+ 재사용 가능한 스킬 파일을 한 번 설치하거나, 셸을 사용할 수 있는 에이전트에게 설치를 요청합니다.
17
+
18
+ ```bash
19
+ npx project-librarian install-skill --scope user --agents all
20
+ ```
21
+
22
+ 그다음 대상 저장소에서 Codex, Claude Code, Cursor, Gemini CLI에 자연어로 요청합니다.
23
+
24
+ - "Project Librarian으로 이 저장소의 계획 위키를 설정하고 진단까지 실행해줘."
25
+ - "Project Librarian으로 기존 docs/wiki 내용을 마이그레이션해줘."
26
+ - "Project Librarian 위키에서 authentication decisions를 찾아줘."
27
+
28
+ 설치된 스킬은 에이전트가 로컬 실행 경로를 찾고 프로젝트 루트에서 맞는 명령을 실행하도록 안내합니다. 실행 경로를 대상 저장소의 에이전트 설정 안에 두고 싶을 때만 프로젝트 범위 설치를 선택합니다.
29
+
30
+ ```bash
31
+ npx project-librarian install-skill --scope project --agents all
32
+ ```
33
+
34
+ `install-skill`은 재사용 가능한 실행 파일과 스킬 파일만 복사합니다. `AGENTS.md`, 에이전트 훅, `wiki/`, git 훅 파일, 진단, 선택적 코드 근거 지원을 만들거나 갱신하는 것은 에이전트가 실행하는 생명주기 명령입니다.
35
+
36
+ ## 핵심 강점
37
+
38
+ - **첫 읽기를 작게.** 세션 시작 훅은 `wiki/startup.md`와 `wiki/index.md`만 주입하고, 에이전트는 저장소 전체를 처음부터 훑는 대신 필요할 때 더 깊은 페이지로 이동합니다.
39
+ - **한 번 설정, 네 에이전트.** Codex, Claude Code, Cursor, Gemini CLI가 같은 위키 우선 계약과 훅, 규칙을 공유합니다.
40
+ - **구조적인 위키 작성.** 새 프로젝트 내용은 작성하거나 취합하기 전에 `wiki/meta/document-taxonomy.md`로 분류하므로 PRD, 정책, UX, 데이터, API, QA, 릴리즈, 운영 메모가 하나의 잡다한 페이지로 합쳐지지 않습니다.
41
+ - **막연한 표현이 아니라 측정값.** 모든 성능 주장은 격리된 Codex 벤치마크에서 나오며, 손해를 본 경우도 이긴 경우 바로 옆에 보여 줍니다.
42
+ - **선택적 코드 근거.** 재생성 가능한 SQLite 인덱스와 답변 형태 MCP 도구가 영향·소유권·워크스페이스 그래프 질문에 답하며, 추가 런타임 의존성이 전혀 없습니다.
43
+ - **다시 실행해도 안전.** 부트스트랩은 멱등하고 기존 내용 보존을 우선하며, 진단은 깨진 경로·도달 불가 페이지·오래된 사실을 에이전트가 오해하기 전에 잡아냅니다.
13
44
 
14
45
  ## 존재 이유
15
46
 
16
- LLM 코딩 에이전트는 매 세션마다 프로젝트를 다시 발견하느라 컨텍스트와 도구 호출을 낭비합니다. 오래된 대화 읽기, Markdown 스캔, 소스 검색, 관련 파일 추측이 반복됩니다.
47
+ LLM 코딩 에이전트는 매 세션마다 프로젝트를 처음부터 다시 파악하느라 컨텍스트와 도구 호출을 낭비합니다. 오래된 대화를 읽고, 문서를 훑고, 소스를 검색하고, 어떤 파일이 중요한지 추측하는 일이 반복됩니다.
17
48
 
18
49
  Project Librarian은 에이전트에게 두 가지 로컬 정본을 제공합니다.
19
50
 
20
51
  | 표면 | 에이전트가 얻는 것 |
21
52
  | --- | --- |
22
- | `wiki/startup.md` + `wiki/index.md` | 짧은 세션 시작 요약과 라우터. 필요한 계획 페이지만 읽습니다. |
53
+ | `wiki/startup.md` + `wiki/index.md` | 짧은 세션 시작 요약과 라우터. 관련 계획 페이지만 읽습니다. |
23
54
  | `wiki/canonical/` 및 `wiki/decisions/` | 현재 프로젝트 사실, 제약, 리스크, 패키지 계약, CLI 동작, 지속되는 결정. |
24
- | `.codex/` `.claude/` | 전체 위키를 로드하지 않는 Codex/Claude Code 시작 컨텍스트. |
25
- | `.project-wiki/code-evidence.sqlite` | 파일, 심볼, import, route, 소유권, 작업공간 그래프, 보고서, 영향 확인을 위한 재생성 가능한 코드 근거. |
26
- | 진단마이그레이션 모드 | 링크 확인, 품질 확인, 마이그레이션 수신함, 오래된 신호 보고서, 작업 흐름 문제 발견 시 이슈 초안. |
55
+ | `wiki/meta/document-taxonomy.md` | PRD, 정책, UX, 데이터, 개발, QA, 릴리즈, 운영 정본을 어디에 둘지 안내하는 서비스 생애주기 분류 지도. |
56
+ | `.codex/`, `.claude/`, `.cursor/`, `.gemini/` | 전체 위키를 불러오지 않는 Codex/Claude Code/Cursor/Gemini CLI 시작 컨텍스트. |
57
+ | `GEMINI.md``.cursor/rules/` | Gemini CLI와 Cursor를 같은 간결한 위키 우선 계약으로 안내하는 지침 파일. |
58
+ | `.project-wiki/code-evidence.sqlite` | 파일, 심볼, import, route, 소유권, 워크스페이스 그래프, 보고서, 영향 확인을 위한 재생성 가능한 코드 근거. |
59
+ | 진단 및 마이그레이션 모드 | 링크 확인, 품질 확인, 마이그레이션 수신함, 오래된 신호 보고, 작업 흐름에서 문제가 드러날 때의 이슈 초안. |
27
60
 
28
61
  핵심은 “문서를 더 많이 쓰자”가 아닙니다. 첫 에이전트 읽기량을 작게 유지하고, 더 깊은 프로젝트 정본과 코드 근거로 가는 신뢰 가능한 경로를 제공하는 것입니다.
29
62
 
63
+ 이 분류 체계는 가능한 모든 문서를 만들라는 지시가 아니라 라우팅 보조 장치입니다. 서비스/제품 개발 문서 체계에 맞춘 분류라, 라이브러리/인프라/연구성 프로젝트에는 일부 항목이 덜 맞을 수 있습니다. 그런 경우 관련 있는 영역만 쓰고 나머지는 억지로 문서화하지 않는 것이 맞습니다.
64
+
30
65
  ## 벤치마크 결과
31
66
 
32
- 벤치마크는 관리자 릴리스 근거이며 공개 사용자 작업 흐름이 아닙니다. README와 릴리스 노트가 모호한 성능 표현 대신 경계가 있는 숫자로 설명할 있게 하기 위한 근거입니다.
33
-
34
- 최신 clean 대규모 보고서: `benchmarks/reports/current-large.json`, 2026-06-09T08:08:07.238Z 생성, Node v22.19.0, darwin arm64, Apple M4 Pro, commit `18e730882c4f`, 측정 실행 5회와 버린 예열 실행 1회. 시간 측정 상태는 `stable`, unstable metrics는 `none`이며 git 상태 지문은 clean입니다.
35
-
36
- | 항목 | 결과 |
37
- | --- | ---: |
38
- | Markdown 컨텍스트 추정 회피량 중앙값 | 99.61% |
39
- | Markdown 컨텍스트 추정 회피량 최솟값 | 99.43% |
40
- | 읽기 시간 감소 중앙값 | 99.47% |
41
- | 읽기 시간 감소 최솟값 | 99.26% |
42
- | 측정한 위키 페이지 | 1,601 |
43
- | 코드 인덱스 파일 | 1,608 |
44
- | 코드 인덱스 시간 | 336.312ms |
45
- | 코드 인덱스 처리량 | 4,781.27 files/sec |
46
- | 증분 인덱스 시간 | 186.776ms |
47
- | 전체 대비 증분 시간 감소 | 45.52% |
48
- | 아키텍처 보고서 시간 | 251.175ms |
49
- | 아키텍처 보고서 근거 테이블 | 6 |
50
- | 아키텍처 보고서 라우트 | 24 |
51
- | 샘플 저장소 | 3 |
52
- | 벤치마크 실행 | 5 |
53
- | 예열 실행 | 1 |
54
- | 시간 측정 상태 | stable |
55
- | 불안정한 측정값 | none |
56
-
57
- 시나리오 요약:
58
-
59
- | 시나리오 | 규모 | 결과 |
60
- | --- | ---: | --- |
61
- | 문서가 많은 위키 | 500페이지 | 99.74% Markdown 컨텍스트 추정 회피, 99.47% 읽기 감소, 43.83ms query |
62
- | 모노레포 위키 | 320페이지 | 99.43% Markdown 컨텍스트 추정 회피, 99.26% 읽기 감소, 81.12ms doctor |
63
- | 범위별 라우터 위키 | 720페이지 | 99.61% Markdown 컨텍스트 추정 회피, 99.55% 읽기 감소, 67.684ms refresh |
64
- | 코드가 많은 혼합 인덱스 | 1,608파일 | 336.312ms 전체 인덱스, 186.776ms 증분, 251.175ms 보고서, 626.969ms Tree-sitter 인덱스 |
65
- | 샘플 저장소 검증 | 3개 저장소, 16파일 | 132.363ms 코드 인덱스 중앙값, 135.694ms 아키텍처 보고서 중앙값 |
66
-
67
- 주장 범위: 토큰 추정치는 `ceil(characters / 4)`를 사용한 Markdown 컨텍스트 크기 추정입니다. 모델 토크나이저 출력이나 API 과금 카운터가 아니며, 실제 LLM 토큰 사용량을 측정하지 않습니다. 벤치마크는 targeted retrieval로 읽는 위키 컨텍스트가 fixture의 모든 위키 Markdown 파일을 읽는 naive full-wiki scan 대비 얼마나 많은 Markdown 컨텍스트 입력을 피하는지 비교합니다. 코드 인덱스 측정값은 생성/샘플 저장소에서 측정한 로컬 CLI 하위 프로세스 시간입니다.
68
-
69
- ## 설치
70
-
71
- 초기 skill 설치에만 `npx`를 사용합니다.
67
+ 여기 수치는 모든 상황에 대한 약속이 아니라 관리자 릴리스 근거입니다. 모든 값은 실제 Codex JSONL 사용량과 로컬 실행 시간(ChatGPT/Codex 인증, `gpt-5.5`)이며, 격리된 환경 — 독립 Codex home, 허용 목록 전용 환경 변수, 정결한 작업 트리, 실행 픽스처 검증 에서 시나리오당 측정 3회와 예열 1회로, Project Librarian이 없는 `organic` 대조군과 비교했습니다.
68
+
69
+ 아래 표에서 **“적음” / “많음”** 은 대조군 대비 비용 가중 토큰을, **“빠름” / “느림”** 은 실행 시간을 비교한 것입니다. (비용 가중 = uncached input + 0.1 × cached input + output + reasoning output. 캐시된 재전송은 정가가 아니므로 할인하며, 단순 합산 총량은 턴을 추가하는 도구를 부당하게 불리하게 만들기 때문입니다.) 위키 라우팅 트랙과 코드 그래프 트랙은 분리해 측정·보고하며, 한 트랙의 우위가 다른 트랙의 주장을 뒷받침하지 않습니다. `benchmarks/reports/llm/` 아래 생성 보고서는 기본적으로 무시됩니다. 공개 주장 근거로 쓸 릴리스 기준선만 의도적으로 커밋해야 합니다. 릴리스 후보는 다음 명령으로 재현할 수 있습니다.
72
70
 
73
71
  ```bash
74
- npx project-librarian install-skill --scope user --agents both
72
+ npm run benchmark:release
75
73
  ```
76
74
 
77
- 현재 저장소에 설치:
75
+ ### 위키 트랙 (계획 문서 라우팅)
78
76
 
79
- ```bash
80
- npx project-librarian install-skill --scope project --agents both
81
- ```
77
+ 비용 가중 토큰, Project Librarian 대 대조군:
82
78
 
83
- `install-skill`은 재사용 가능한 skill 파일만 복사합니다. `AGENTS.md`, `CLAUDE.md`, `wiki/`, `.codex/hooks.json`, `.claude/settings.json`은 만들거나 갱신하지 않습니다.
79
+ | 규모 | decision_lookup | aggregation | multi_session (2번째 세션) |
80
+ | --- | --- | --- | --- |
81
+ | 소형 | 7.9% 적음 | 7.0% 많음 | 30.4% 적음 |
82
+ | 중형 | 69.5% 적음 | 8.8% 많음 | 56.6% 적음 |
83
+ | 대형 (게이트 통과 재시도) | 62.6% 적음 | 45.0% 적음* | 70.7% 적음 |
84
84
 
85
- | 상황 | 명령 |
86
- | --- | --- |
87
- | Codex와 Claude Code에 전역 설치 | `npx project-librarian install-skill --scope user --agents both` |
88
- | 현재 저장소에 설치 | `npx project-librarian install-skill --scope project --agents both` |
89
- | Codex만 설치 | `npx project-librarian install-skill --agents codex` |
90
- | Claude Code만 설치 | `npx project-librarian install-skill --agents claude` |
91
- | 설치 결과 미리 보기 | `npx project-librarian install-skill --scope project --agents both --dry-run` |
85
+ 주장 등급 셀(주장 게이트 통과, 전 실행 정확)은 대형의 두 승리입니다: `decision_lookup`(비용 가중 토큰 62.6% 적음, 41.5% 빠름)과 `multi_session`(토큰 70.7% 적음, 33.9% 빠름). 숨기지 않고 함께 공개하는 한계: `aggregation`은 소형/중형에서 토큰을 7~9% *더* 쓰고, 위키를 켜면 토큰이 줄어드는 규모에서도 매 규모 *더 느리며*, *대형 aggregation 수치(45.0% 적음)는 대조군 측 정확성 불안정으로 게이트가 실패한 Stage 1 실행에서 나온 값이라 주장이 아니라 조사 근거로 남습니다.
92
86
 
93
- `--agents`는 `codex,claude` 같은 comma-separated 값도 받습니다. `--scope`는 `user` 또는 `project`를 받습니다.
87
+ ### 코드 그래프 트랙 (코드 근거 인덱스, 실제 저장소)
94
88
 
95
- ## 에이전트 실행 경로
89
+ SHA로 고정한 오픈소스 저장소 2곳에서, 손으로 작성한 정답 키와 격리된 Codex home에 주입한 답변 형태 MCP 도구로 측정했습니다. 평가기 거짓 양성 2건을 고치고 원시 JSONL에서 재채점한 뒤 30/30 정확으로 주장 게이트를 통과했으며, 원시 데이터에서 다시 계산하는 것이 상시 감사 정책입니다. 비용 가중 토큰, Project Librarian 대 대조군:
96
90
 
97
- 설치 에이전트는 `npx`가 아니라 설치된 로컬 복사본을 `node`로 실행해야 합니다. 이렇게 하면 제한된 에이전트 환경에서 네트워크 접근과 고정되지 않은 패키지 실행을 피할 수 있습니다.
91
+ | 질문 | excalidraw (~1.2k 파일) | backstage (~11.8k 파일) |
92
+ | --- | --- | --- |
93
+ | impact_trace | 117% 많음 | **27.7% 적음** |
94
+ | workspace_graph | 106% 많음 | 2.6% 적음 |
95
+ | ownership_lookup | — | 99% 많음 |
98
96
 
99
- | 설치 위치 | 실행 경로 |
100
- | --- | --- |
101
- | 프로젝트 범위 Codex skill | `node .codex/skills/project-librarian/dist/init-project-wiki.js` |
102
- | 프로젝트 범위 Claude skill | `node .claude/skills/project-librarian/dist/init-project-wiki.js` |
103
- | 사용자 범위 Codex skill | `node ~/.codex/skills/project-librarian/dist/init-project-wiki.js` |
104
- | 사용자 범위 Claude skill | `node ~/.claude/skills/project-librarian/dist/init-project-wiki.js` |
97
+ 주장은 규모 교차점이며, 손실도 승리 옆에 함께 공개합니다. 11.8k 파일 저장소에서는 비싼 순회 질문에서 도구가 이기고(impact_trace 비용 가중 토큰 27.7% 적음, 스캔 바이트 24.5% 적음) 워크스페이스 그래프는 손익분기인 반면, 소형 저장소에서는 전부 지고 저렴한 조회(CODEOWNERS 소유권)는 모든 측정 규모에서 집니다. 한마디로, 코드 근거 인덱스는 비싼 순회 질문이 있는 진짜 대형 저장소에서만 이득이며 — 이것이 곧 CLI의 규모 인지 게이트가 구현한 내용입니다: 인덱싱 대상 파일 약 5k개 미만에서는 `--code-index`가 명시적 동의를 요구하고 부트스트랩은 MCP 자동 등록을 건너뜁니다.
105
98
 
106
- 아래 예시는 다음 runner를 사용합니다.
99
+ ### 벤치마크 용어 설명
107
100
 
108
- ```bash
109
- PROJECT_LIBRARIAN="node .codex/skills/project-librarian/dist/init-project-wiki.js"
110
- ```
101
+ 테스트 대상 저장소:
102
+
103
+ - **excalidraw** — 실제 오픈소스 화이트보드/다이어그램 앱(~1.2k 파일). 소형 저장소 표본.
104
+ - **backstage** — Spotify의 오픈소스 개발자 포털 플랫폼(~11.8k 파일). 대형 저장소 표본.
111
105
 
112
- 설치 위치에 맞는 로컬 실행 경로를 사용하세요.
106
+ 질문 유형(task family):
113
107
 
114
- ## 일반 에이전트 작업 흐름
108
+ - **decision_lookup** 위키에서 가장 최근 프로젝트 결정과 그 날짜를 찾기.
109
+ - **aggregation** — 여러 페이지에 흩어진 사실을 종합해야 답할 수 있는 질문.
110
+ - **multi_session** — 같은 프로젝트의 두 번째 세션. 지속되는 위키가 첫 세션뿐 아니라 다음 세션에도 도움이 되는지 측정.
111
+ - **impact_trace** — "이 모듈이 바뀌면 무엇이 영향받나?": 직접·간접으로 import하는 전체 집합을 추적.
112
+ - **ownership_lookup** — "이 파일의 소유자는 누구인가?": CODEOWNERS 마지막 일치 우선순위로 소유자 판정.
113
+ - **workspace_graph** — "이 패키지는 모노레포에서 무엇에 의존하나?": 워크스페이스/패키지 의존성 그래프.
115
114
 
116
- 프로젝트 루트에서 위키를 만들거나 갱신합니다.
115
+ ## 설치 상세
116
+
117
+ 설치 범위나 대상 에이전트를 고를 때 이 섹션을 참고합니다. 초기 스킬 설치에만 `npx`를 사용합니다.
117
118
 
118
119
  ```bash
119
- $PROJECT_LIBRARIAN
120
+ npx project-librarian install-skill --scope user --agents all
120
121
  ```
121
122
 
122
- 위키 검증과 유지보수:
123
+ 현재 저장소에 설치:
124
+
125
+ ```bash
126
+ npx project-librarian install-skill --scope project --agents all
127
+ ```
128
+
129
+ `install-skill`은 재사용 가능한 스킬 파일만 복사합니다. `AGENTS.md`, `CLAUDE.md`, `GEMINI.md`, `wiki/`, `.cursor/rules/`, `.cursor/hooks.json`, `.gemini/settings.json`, `.codex/hooks.json`, `.claude/settings.json`은 만들거나 갱신하지 않습니다.
130
+
131
+ | 상황 | 명령 |
132
+ | --- | --- |
133
+ | 지원하는 모든 에이전트에 전역 설치 | `npx project-librarian install-skill --scope user --agents all` |
134
+ | 현재 저장소에 설치 | `npx project-librarian install-skill --scope project --agents all` |
135
+ | Codex만 설치 | `npx project-librarian install-skill --agents codex` |
136
+ | Claude Code만 설치 | `npx project-librarian install-skill --agents claude` |
137
+ | Cursor만 설치 | `npx project-librarian install-skill --agents cursor` |
138
+ | Gemini CLI만 설치 | `npx project-librarian install-skill --agents gemini` |
139
+ | 설치 결과 미리 보기 | `npx project-librarian install-skill --scope project --agents all --dry-run` |
140
+
141
+ `--agents`는 `codex,claude,cursor,gemini`처럼 쉼표로 구분한 값도 받습니다. `all`은 지원하는 모든 에이전트를 대상으로 합니다. `--scope`는 `user` 또는 `project`를 받습니다.
142
+
143
+ ## 실행 경로
144
+
145
+ 이 경로들은 주로 에이전트와 자동화를 위한 참조입니다. 설치 후 에이전트는 `npx`가 아니라 설치된 로컬 복사본을 `node`로 실행해야 합니다. 이렇게 하면 제한된 에이전트 환경에서 네트워크 접근과 버전이 고정되지 않은 패키지 실행을 피할 수 있습니다.
123
146
 
124
- | 목적 | 에이전트 명령 |
147
+ | 설치 위치 | 실행 경로 |
125
148
  | --- | --- |
126
- | wiki 생성 또는 갱신 | `$PROJECT_LIBRARIAN` |
127
- | 기존 docs/wiki 마이그레이션 | `$PROJECT_LIBRARIAN --migrate` |
128
- | 생성된 설정 검증 | `$PROJECT_LIBRARIAN --lint` |
129
- | 링크와 문서 품질 점검 | `$PROJECT_LIBRARIAN --doctor` |
130
- | 진단 전에 생성된 라우팅 갱신 | `$PROJECT_LIBRARIAN --doctor --fix` |
131
- | project wiki 검색 | `$PROJECT_LIBRARIAN --query "authentication decisions"` |
132
- | 후보 메모 저장 | `$PROJECT_LIBRARIAN --capture-inbox --title "Candidate" --content "Details"` |
133
- | 오래되었거나 미해결인 위키 페이지 보고 | `$PROJECT_LIBRARIAN --prune-check` |
134
- | git config 변경 없이 훅 파일 설치 | `$PROJECT_LIBRARIAN --no-git-config` |
149
+ | 프로젝트 범위 Codex 스킬 | `node .codex/skills/project-librarian/dist/init-project-wiki.js` |
150
+ | 프로젝트 범위 Claude 스킬 | `node .claude/skills/project-librarian/dist/init-project-wiki.js` |
151
+ | 프로젝트 범위 Cursor 스킬 | `node .cursor/skills/project-librarian/dist/init-project-wiki.js` |
152
+ | 프로젝트 범위 Gemini 스킬 | `node .gemini/skills/project-librarian/dist/init-project-wiki.js` |
153
+ | 사용자 범위 Codex 스킬 | `node ~/.codex/skills/project-librarian/dist/init-project-wiki.js` |
154
+ | 사용자 범위 Claude 스킬 | `node ~/.claude/skills/project-librarian/dist/init-project-wiki.js` |
155
+ | 사용자 범위 Cursor 스킬 | `node ~/.cursor/skills/project-librarian/dist/init-project-wiki.js` |
156
+ | 사용자 범위 Gemini 스킬 | `node ~/.gemini/skills/project-librarian/dist/init-project-wiki.js` |
157
+
158
+ ## 일반 에이전트 요청
159
+
160
+ 원하는 결과를 자연어로 요청하면 됩니다. 스킬은 내부적으로 요청을 로컬 실행 경로에 맞는 명령으로 연결합니다.
161
+
162
+ 위키 설정과 유지보수:
163
+
164
+ | 목적 | 에이전트에게 요청할 말 | 내부 액션 |
165
+ | --- | --- | --- |
166
+ | 위키 생성 또는 갱신 | "Project Librarian으로 이 저장소의 계획 위키를 설정하거나 갱신해줘." | `[init]` |
167
+ | 기존 문서/위키 마이그레이션 | "Project Librarian으로 기존 docs/wiki 내용을 마이그레이션해줘." | `--migrate` |
168
+ | 생성된 설정 검증 | "Project Librarian 검증을 실행해줘." | `--lint` |
169
+ | 링크와 문서 품질 점검 | "Project Librarian 진단을 실행해줘." | `--doctor` |
170
+ | 진단 전에 생성된 라우팅 갱신 | "Project Librarian 라우팅을 갱신한 뒤 진단을 실행해줘." | `--doctor --fix` |
171
+ | 위키 내용 검색 | "Project Librarian 위키에서 authentication decisions를 찾아줘." | `--query "authentication decisions"` |
172
+ | 페이지의 역링크/결정 인용 확인 | "decisions/release-policy의 Project Librarian 위키 영향도를 보여줘." | `--wiki-impact "decisions/release-policy"` |
173
+ | 후보 메모 저장 | "이 내용을 Project Librarian 후보 메모로 저장해줘: <내용>." | `--capture-inbox --title "Candidate" --content "Details"` |
174
+ | 오래되었거나 미해결인 위키 페이지 보고 | "Project Librarian에서 오래되었거나 미해결인 페이지를 확인해줘." | `--prune-check` |
175
+ | git 설정 변경 없이 훅 파일 설치 | "git 설정은 바꾸지 말고 Project Librarian 훅 파일만 설정해줘." | `--no-git-config` |
135
176
 
136
177
  코드 근거:
137
178
 
138
- | 목적 | 에이전트 명령 |
139
- | --- | --- |
140
- | 기본 근거 캐시 생성 | `$PROJECT_LIBRARIAN --code-index --code-scope src` |
141
- | 여러 범위 빌드 | `$PROJECT_LIBRARIAN --code-index --code-scope src --code-scope packages/api` |
142
- | 증분 갱신 요구 | `$PROJECT_LIBRARIAN --code-index --incremental` |
143
- | 전체 재생성 강제 | `$PROJECT_LIBRARIAN --code-index --code-index-full` |
144
- | 선택적 Tree-sitter backend 사용 | `$PROJECT_LIBRARIAN --code-index --code-parser tree-sitter` |
145
- | 캐시 상태 보기 | `$PROJECT_LIBRARIAN --code-status` |
146
- | 인덱싱된 파일 목록 | `$PROJECT_LIBRARIAN --code-files` |
147
- | 아키텍처/소유권 보고서 출력 | `$PROJECT_LIBRARIAN --code-report` |
148
- | 보고서 섹션 하나만 출력 | `$PROJECT_LIBRARIAN --code-report --code-report-section routes` |
149
- | 영향 근거 확인 | `$PROJECT_LIBRARIAN --code-impact healthHandler` |
150
- | 인덱싱된 심볼 검색 | `$PROJECT_LIBRARIAN --code-search-symbol Auth` |
151
- | 보수적인 읽기 전용 SQL 실행 | `$PROJECT_LIBRARIAN --code-query "select path from files order by path"` |
179
+ | 목적 | 에이전트에게 요청할 | 내부 액션 |
180
+ | --- | --- | --- |
181
+ | 기본 근거 캐시 생성 | "`src`에 대해 Project Librarian 코드 근거를 만들어줘." | `--code-index --code-scope src` |
182
+ | 여러 범위 빌드 | "`src`와 `packages/api`에 대해 Project Librarian 코드 근거를 만들어줘." | `--code-index --code-scope src --code-scope packages/api` |
183
+ | 증분 갱신 요구 | "Project Librarian 코드 근거 인덱스를 증분 갱신해줘." | `--code-index --incremental` |
184
+ | 전체 재생성 강제 | "Project Librarian 코드 근거 인덱스를 전체 재생성해줘." | `--code-index --code-index-full` |
185
+ | 선택적 Tree-sitter 백엔드 사용 | "Tree-sitter 파서로 Project Librarian 코드 근거를 만들어줘." | `--code-index --code-parser tree-sitter` |
186
+ | 캐시 상태 보기 | "Project Librarian 코드 근거 상태를 보여줘." | `--code-status` |
187
+ | 인덱싱된 파일 목록 | "Project Librarian 코드 근거에 인덱싱된 파일을 보여줘." | `--code-files` |
188
+ | 아키텍처/소유권 보고서 출력 | "Project Librarian 코드 보고서를 보여줘." | `--code-report` |
189
+ | 보고서 섹션 하나만 출력 | "Project Librarian 코드 보고서의 routes 섹션을 보여줘." | `--code-report --code-report-section routes` |
190
+ | 영향 근거 확인 | "`healthHandler`에 대한 Project Librarian 영향 근거를 보여줘." | `--code-impact healthHandler` |
191
+ | 인덱싱된 심볼 검색 | "Project Librarian 코드 근거에서 `Auth` 심볼을 찾아줘." | `--code-search-symbol Auth` |
192
+ | 보수적인 읽기 전용 SQL 실행 | "파일 경로를 확인하는 읽기 전용 Project Librarian 코드 근거 쿼리를 실행해줘." | `--code-query "select path from files order by path"` |
152
193
 
153
194
  코드 근거 모드는 한 번에 하나만 실행할 수 있습니다. `--incremental`, `--code-index-full`, `--code-parser`는 `--code-index`와 함께 쓸 때만 유효합니다.
154
195
 
155
196
  ## 설치되는 파일
156
197
 
198
+ 프로젝트 지침 파일:
199
+
157
200
  - `AGENTS.md`
158
201
  - `CLAUDE.md`
202
+ - `GEMINI.md`
159
203
  - `wiki/AGENTS.md`
204
+ - `.cursor/rules/project-librarian.mdc`
205
+
206
+ 시작 훅:
207
+
160
208
  - `.codex/hooks.json`
161
209
  - `.codex/hooks/wiki-session-start.js`
162
210
  - `.claude/settings.json`
163
211
  - `.claude/hooks/wiki-session-start.js`
212
+ - `.cursor/hooks.json`
213
+ - `.cursor/hooks/wiki-session-start.js`
214
+ - `.gemini/settings.json`
215
+ - `.gemini/hooks/wiki-session-start.js`
216
+
217
+ Git 훅 파일:
218
+
164
219
  - `.githooks/prepare-commit-msg`
165
220
  - `.githooks/wiki-commit-trailers.js`
166
- - `wiki/canonical/`, `wiki/decisions/`, `wiki/inbox/`, `wiki/meta/`, `wiki/sources/`, `wiki/migration/`
167
- - 폐기 가능한 코드 근거 캐시인 `.project-wiki/code-evidence.sqlite`
221
+
222
+ 위키 디렉터리:
223
+
224
+ - `wiki/canonical/`
225
+ - `wiki/decisions/`
226
+ - `wiki/inbox/`
227
+ - `wiki/meta/`
228
+ - `wiki/sources/`
229
+ - `wiki/migration/`
230
+
231
+ 초기 위키 페이지와 라우터:
232
+
233
+ - `wiki/startup.md`
234
+ - `wiki/index.md`
235
+ - `wiki/meta/document-taxonomy.md`
236
+
237
+ `canonical/project-brief.md`, `canonical/open-questions.md`, `canonical/assumptions.md`, `canonical/risks.md`, ADR 템플릿처럼 실제 내용이 없는 빈 프로젝트 문서는 기본 생성하지 않습니다. 나중에 실제 내용이 생기면 문서를 만들고 `--refresh-index`로 라우팅할 수 있습니다. 마이그레이션 중 발견한 양식 전용 legacy 템플릿은 새 위키 페이지나 검토 row로 만들지 않고 `wiki/migration/inventory.md`에 스킵 사유만 남깁니다.
238
+
239
+ MCP 서버 등록 (`mcpServers`에 기존 항목 보존하며 병합):
240
+
241
+ - `.mcp.json` (Claude Code)
242
+ - `.cursor/mcp.json` (Cursor)
243
+ - `.gemini/settings.json`의 `mcpServers` (Gemini CLI)
244
+
245
+ 폐기 가능한 코드 근거 캐시:
246
+
247
+ - `.project-wiki/code-evidence.sqlite`
248
+
249
+ ## 코드 근거 MCP 서버
250
+
251
+ `project-librarian mcp`는 직접 구현한 stdio MCP 서버(줄바꿈 구분 JSON 위의 JSON-RPC 2.0, 추가 런타임 의존성 없음)를 실행해 기존 `.project-wiki` 코드 근거 인덱스를 읽기 전용으로 제공합니다. 답변 형태 도구 — `code_impact`, `code_ownership`(CODEOWNERS 마지막 일치 우선순위), `code_workspace_graph`, `code_search`, `code_status` — 를 노출하며, 각 응답은 한 줄 답변으로 시작해 간결한 경로/심볼/시그니처 근거가 뒤따르고, 응답마다 길이를 제한하며, `code_status`가 인덱스가 오래되었다고 보고하면 경고를 앞에 붙입니다.
252
+
253
+ 부트스트랩은 Claude Code(`.mcp.json`), Cursor(`.cursor/mcp.json`), Gemini CLI(`.gemini/settings.json`의 `mcpServers`)에 서버를 등록하며, 기존 서버와 키를 보존하고 다시 실행하면 `exists`를 보고합니다. 저장소에 로컬 실행 경로가 있으면 `node <runner> mcp`로, 없으면 설치된 `project-librarian mcp` 바이너리로 등록합니다.
254
+
255
+ Codex는 MCP 서버를 사용자 레벨에서만 등록(`codex mcp add`)하므로 부트스트랩은 프로젝트 레벨 Codex MCP 설정을 작성하지 않습니다. Codex에서 서버를 쓰려면 머신당 한 번 실행하세요.
256
+
257
+ ```bash
258
+ codex mcp add project-librarian -- node .codex/skills/project-librarian/dist/init-project-wiki.js mcp
259
+ ```
168
260
 
169
261
  ## 작동 방식
170
262
 
171
- 1. Bootstrap은 보존 우선 위키 구조와 marker로 경계가 정해진 에이전트 지시 섹션을 만듭니다.
263
+ 1. 부트스트랩은 기존 내용 보존을 우선하는 위키 구조와 마커로 경계를 에이전트 지침 섹션을 만듭니다.
172
264
  2. 세션 시작 훅은 문자 예산이 적용된 `wiki/startup.md`와 `wiki/index.md`만 주입합니다.
173
- 3. 상세 계획 정본은 canonical, decision, source, meta page에 있고 에이전트가 필요할읽습니다.
174
- 4. `--refresh-index`는 위키 페이지를 라우팅하며, route가 많으면 `wiki/indexes/auto-*.md` 범위별 라우터로 분리합니다.
175
- 5. `--code-index`는 `.project-wiki/` 아래 폐기 가능한 SQLite 근거 캐시를 만듭니다.
176
- 6. `--code-report`, `--code-impact`, `--code-search-symbol`, `--code-query`가 계획 갱신용 코드 근거를 제공합니다.
177
- 7. 진단은 깨진 링크, 중복 route, orphan page, 오래된 페이지, 누락된 TL;DR, 근거 gap, 마이그레이션 복사 위험을 보고합니다.
265
+ 3. 부트스트랩은 내용 없는 양식 전용 프로젝트 페이지를 만들지 않으며, 초점이 분명한 정본·결정·출처·운영 문서는 실제 내용이 있을 생성됩니다.
266
+ 4. 상세 계획 정본은 정본·결정·출처·운영 문서에 있고 에이전트가 필요할 읽습니다.
267
+ 5. 프로젝트 계획 내용은 작성하거나 취합하기 전에 `wiki/meta/document-taxonomy.md`로 분류해 상위/하위 문서 관계가 보이도록 유지합니다.
268
+ 6. `--refresh-index`는 새로 발견한 위키 페이지를 라우팅하며, route가 많으면 `wiki/indexes/auto-*.md` 범위별 라우터로 분리합니다.
269
+ 7. `--code-index`는 `.project-wiki/` 아래 폐기 가능한 SQLite 근거 캐시를 만듭니다.
270
+ 8. `--code-report`, `--code-impact`, `--code-search-symbol`, `--code-query`가 계획 갱신용 코드 근거를 제공합니다.
271
+ 9. 진단은 깨진 링크, 중복 route, 고아 페이지, 오래된 페이지, 누락된 TL;DR, 근거 누락, 마이그레이션 정책 위반을 보고합니다.
178
272
 
179
- 마이그레이션은 검토 우선입니다. `--migrate`는 기존 `wiki/`를 `wiki_legacy*`로 보존하고 마이그레이션 inbox를 작성하며 legacy Markdown을 canonical truth로 직접 복사하지 않습니다.
273
+ 마이그레이션은 검토를 우선합니다. `--migrate`는 기존 `wiki/`를 `wiki_legacy*`로 보존하고, 양식 전용 legacy 파일은 제외한 뒤, 여러 성격의 내용이 섞인 기존 페이지를 의미 단위로 나눕니다. 이후 각 단위를 문서 분류 체계에 따라 분류해 `wiki/migration/` 아래 검토 파일을 작성합니다.
274
+
275
+ - `inventory.md`는 기존 마크다운 파일 목록과 파일 단위 분류를 기록합니다.
276
+ - `unit-map.md`는 각 제목, 문단, 목록 항목, 표 행, 코드 블록의 권장 분류 영역과 대상 페이지를 기록합니다.
277
+ - `split-plan.md`는 권장 새 위키 대상별로 의미 단위를 묶습니다. 그래서 API 명세, 기능, UX, QA, 정책, 운영 내용이 한 기존 페이지에 섞여 있어도 서로 다른 파일로 재작성할 수 있습니다.
278
+ - `coverage.md`는 각 단위의 편집 가능한 상태 장부입니다. 상태는 pending, adopted, merged, superseded, rejected, resolved, needs-human-review입니다.
279
+ - `verification.md`와 `review.md`는 `--review-migration` 후 커버리지와 의미적 완료 상태를 요약합니다.
280
+
281
+ `--migration-lint`는 `coverage.md`, `unit-map.md`, `split-plan.md`가 현재 마이그레이션 배치의 단위를 계속 빠짐없이 다루는지 검증합니다. 중복/오래된 단위 ID, 잘못된 storage/confidence/status 값, split count 불일치, target drift, 오래된 coverage 표 형식을 잡습니다. 기존 페이지 하나가 여러 대상 파일로 나뉘는 경우 `--review-migration`은 파일 단위 수신함 상태만으로 모든 단위를 완료 처리하지 않으며, 단위별 coverage가 해결되어야 합니다.
282
+
283
+ 보존하거나 복사한 legacy 내용은 새 위키 정책과 구조에 맞으면 허용되며, 새 위키가 `wiki_legacy*` 참조에 의존해서는 안 됩니다.
180
284
 
181
285
  ## 언어 지원 표
182
286
 
287
+ 이 표는 심볼/import 추출이 구현된 언어를 나열합니다. 그 외 인식되는 확장자는 목록 전용입니다. 기본 모드는 `typescript-ast`, `python-light`, `go-light`, 설정 추출, 목록 항목을 사용합니다. `--code-parser tree-sitter`는 지원되는 소스 파일을 `tree-sitter-*` 프로파일로 전환합니다.
288
+
183
289
  | 언어 | 확장자 | 기본 추출 | Tree-sitter 추출 | 인덱싱되는 근거 |
184
290
  | --- | --- | --- | --- | --- |
185
291
  | TypeScript | `.ts`, `.tsx`, `.cts`, `.mts` | `typescript-ast` | `tree-sitter-typescript`, `tree-sitter-tsx` | 함수, 클래스, 메서드, 변수, 인터페이스, 타입, enum, import, export, 호출, 일반 HTTP route |
186
292
  | JavaScript | `.js`, `.jsx`, `.cjs`, `.mjs` | `typescript-ast` | `tree-sitter-javascript` | 함수, 클래스, 메서드, 변수, import, export, `require()` 호출, 일반 HTTP route |
187
293
  | Python | `.py` | `python-light` | `tree-sitter-python` | 함수, 클래스, `import`, `from ... import` |
188
- | Go | `.go` | `go-light` | `tree-sitter-go` | 함수, 메서드, 타입, const, var, 단일 import, import block |
294
+ | Go | `.go` | `go-light` | `tree-sitter-go` | 함수, 메서드, 타입, const, var, 단일 import, import 블록 |
189
295
  | Rust | `.rs` | 목록 전용 | `tree-sitter-rust` | 함수, struct, enum, trait, impl, `use` import |
190
296
  | Java | `.java` | 목록 전용 | `tree-sitter-java` | 클래스, interface, enum, 메서드, import |
191
297
  | PHP | `.php` | 목록 전용 | `tree-sitter-php` | 함수, 클래스, interface, trait, 메서드, namespace use |
@@ -195,21 +301,51 @@ $PROJECT_LIBRARIAN
195
301
  | C++ | `.cc`, `.cpp`, `.cxx`, `.hpp`, `.hh`, `.hxx` | 목록 전용 | `tree-sitter-cpp` | 함수, class/struct, namespace, enum, include/using |
196
302
  | C# | `.cs` | 목록 전용 | `tree-sitter-csharp` | class, interface, struct, enum, 메서드, using |
197
303
 
198
- `.rb`, `.vue`, `.css`는 인식되지만 목록 전용입니다. 설정 파일은 설정 근거 또는 목록 근거로 인덱싱됩니다.
304
+ 인식되지만 목록 전용인 확장자에는 `.rb`, `.vue`, `.css`가 있습니다. 설정 파일(`.json`, `.yaml`, `.yml`, `.toml`, `.env.example`, `package.json`, `tsconfig.json`, `Dockerfile`, `Makefile`)은 설정 근거 또는 목록 근거로 인덱싱됩니다.
199
305
 
200
306
  ## CLI 참조
201
307
 
202
- 에이전트 실행에는 로컬 실행 경로를 사용합니다.
308
+ 자동화나 직접 CLI 실행에는 확인된 로컬 실행 경로를 사용합니다.
203
309
 
204
310
  ```bash
205
- $PROJECT_LIBRARIAN [init] [options]
206
- $PROJECT_LIBRARIAN install-skill [--scope user|project] [--agents codex|claude|both]
311
+ node .codex/skills/project-librarian/dist/init-project-wiki.js [init] [options]
312
+ node .codex/skills/project-librarian/dist/init-project-wiki.js install-skill [--scope user|project] [--agents codex|claude|cursor|gemini|all]
207
313
  ```
208
314
 
209
- 중요 옵션: `--migrate`, `--lint`, `--link-check`, `--quality-check`, `--doctor`, `--doctor --fix`, `--query`, `--refresh-index`, `--capture-inbox`, `--issue-draft`, `--issue-create`, `--glossary-init`, `--prune-check`, `--review-migration`, `--no-git-config`, `--code-index`, `--code-report`, `--code-impact`, `--code-search-symbol`, `--code-query`.
315
+ 중요 옵션:
316
+
317
+ | 옵션 | 용도 |
318
+ | --- | --- |
319
+ | `--migrate`, `--adopt-existing` | 기존 위키를 `wiki_legacy*`로 보존하고 마이그레이션 수신함, unit-map, split-plan, coverage 검토 파일을 만듭니다. |
320
+ | `--lint` | 파일을 수정하지 않고 생성된 설정을 검증합니다. |
321
+ | `--link-check` | 깨진 위키 링크, 중복 route, 고아 페이지, 그리고 시작 라우터가 깊이 예산 안에서 닿지 못하는 페이지를 보고합니다. |
322
+ | `--quality-check` | 오래되거나 충돌하거나 품질이 낮은 위키 문서 신호를 보고합니다. |
323
+ | `--doctor` | lint, link-check, quality-check를 함께 실행합니다. |
324
+ | `--doctor --fix` | 진단 전에 생성된 index 라우팅을 안전하게 갱신합니다. |
325
+ | `--migration-lint` | 마이그레이션 coverage, unit-map, split-plan, 검토 골격을 일반 lint와 분리해 검증합니다. |
326
+ | `--migration-quality-check` | 마이그레이션 정책/구조 신호를 일반 quality-check와 분리해 보고합니다. |
327
+ | `--migration-doctor` | migration-lint와 migration-quality-check를 함께 실행합니다. |
328
+ | `--query <terms>` | 위키 경로, 메타데이터, 제목, 본문을 검색합니다. 답변 우선 출력에 페이지별 TL;DR 줄을 붙이고 고정 크기 상한을 적용합니다. |
329
+ | `--wiki-impact <page-or-term>` | 일치하는 페이지의 위키 역링크, `decision_ref` 인용, 나가는 링크, 라우터 깊이를 보여줍니다. |
330
+ | `--refresh-index` | 생성된 자동 발견 위키 라우팅을 갱신합니다. |
331
+ | `--capture-inbox --title <title> --content <content>` | 위키 수신함에 후보 메모를 추가합니다. |
332
+ | `--issue-draft --issue-title <title>` | 문제 또는 부작용에 대한 읽기 전용 GitHub 이슈 본문 초안을 출력합니다. |
333
+ | `--issue-create --issue-title <title>` | 명시적 사용자 승인 후 `gh`로 GitHub 이슈를 생성합니다. |
334
+ | `--glossary-init` | 선택적 용어집 페이지를 만들고 라우팅합니다. |
335
+ | `--prune-check` | 오래되거나 미해결인 수명 주기 신호가 있는 active 페이지를 보고합니다. |
336
+ | `--review-migration`, `--semantic-migrate` | 마이그레이션 coverage와 수신함 상태를 마이그레이션 검토 파일에 동기화합니다. |
337
+ | `--no-git-config` | `git core.hooksPath`를 바꾸지 않고 훅 파일을 설치합니다. |
338
+ | `--code-index` | 폐기 가능한 코드 근거 인덱스를 빌드합니다. |
339
+ | `--code-report` | 근거 인덱스에서 아키텍처/소유권 요약을 출력합니다. |
340
+ | `--code-report-section <section>` | 한 섹션만 출력: `coverage`, `ownership`, `languages`, `parsers`, `workspaces`, `workspace-graph`, `routes`, `hotspots`, `configs`, `edges`. |
341
+ | `--code-impact <term>` | 파일, 심볼, route, import, edge, 소유자 영향 근거를 보여줍니다. |
342
+ | `--code-search-symbol <term>` | 인덱싱된 심볼을 검색합니다. |
343
+ | `--code-query <sql>` | 근거 인덱스에 대해 보수적인 읽기 전용 SQL을 실행합니다. |
210
344
 
211
345
  ## 개발
212
346
 
347
+ 소스는 TypeScript입니다. 커밋된 `dist/` 디렉터리는 npm 바이너리와 설치된 스킬 복사본이 사용하는 컴파일된 JavaScript입니다.
348
+
213
349
  ```bash
214
350
  npm install
215
351
  npm run typecheck
@@ -218,11 +354,15 @@ npm test
218
354
  npm pack --dry-run
219
355
  ```
220
356
 
221
- 관리자 벤치마크 명령은 [benchmarks/README.md](benchmarks/README.md)에 있습니다. 명령은 릴리스 근거와 공개 주장 검증을 위한 것이며, 일반 최종 사용자 설정 절차가 아닙니다.
357
+ `src/` 아래 TypeScript를 수정할 때는 커밋 전에 빌드해 `dist/`를 최신 상태로 유지하세요.
358
+
359
+ 관리자 벤치마크 명령은 [benchmarks/README.md](benchmarks/README.md)에 있습니다. 이 명령은 릴리스 근거와 공개 주장 검증을 위한 것이며, 일반 사용자 설정 절차가 아닙니다.
222
360
 
223
361
  ## 영감
224
362
 
225
- 이 프로젝트는 Andrej Karpathy의 [LLM Wiki](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f) 패턴에서 영감을 받았습니다.
363
+ 이 프로젝트는 Andrej Karpathy의 [LLM Wiki](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f) 패턴에서 영감을 받았습니다. 긴 대화 기록에서 프로젝트 상태를 재구성하는 대신, 지속되는 markdown 컨텍스트를 작업 가까이에 둡니다.
364
+
365
+ Project Librarian은 그 아이디어를 저장소 로컬 지침, 간결한 시작 훅, 마이그레이션 도구, 진단, 선택적 코드 근거를 갖춘 Codex, Claude Code, Cursor, Gemini CLI용 설치형 CLI 및 스킬로 구현합니다.
226
366
 
227
367
  ## 라이선스
228
368