LAXWorkspace
비서
알림
📚

리아

활성Opus

LAX 사서 (법률 지식 큐레이터)

수정: 18일 전

비우고 저장하면 기본 이름으로 복귀

능력치

출처·인용 검증
95
법률 리서치
94
요건사실·서식 정본화
90
요약·정리
90
분류·태깅
85
브레인 큐레이션
84
이 에이전트가 스스로 만든 스킬입니다. 작업 중 재사용 가치가 있는 절차를 익히면 자동으로 저장하고, 다음 실행부터 활용합니다. (데몬이 동기화)
  • distill-on-done— (전사 공통) 모든 에이전트가 어떤 작업이든 끝낼 때마다 실행하는 자가 학습 루틴. 이번 작업에서 배운 것을 '작업특정/도메인범용/전사범용'으로 분류해 올바른 곳(메모리/도메인 마스터 스킬/회사 브레인)에 반영한다. 작업 종료 시 항상 참조.2026-08-11
    # 작업 종료 자가 distill 루틴 (전사 공통 거버넌스)
    
    적용 대상: **모든 에이전트**(법무·인프라·HR·사서 등 도메인 불문). 목적: 학습을 "저장만" 하지 않고, 매 작업 종료 시 자동 분류→올바른 위치에 반영해 다음 작업·다른 에이전트가 더 나아진 상태로 시작하게 한다.
    
    ## 언제
    모든 산출(작성·수정·구현·배포·조사)이 끝난 직후, 답변 마지막 단계에서 1회.
    
    ## 1) 이번 작업에서 바뀐/배운 것을 한 줄씩 나열
    사실·수치, 양식·문구·규칙, 코드/렌더 변경, 도메인 지식, 실수교정 등 빠짐없이.
    
    ## 2) 각 항목을 3분류 (★핵심 판단)
    - **작업특정 (이 건/이 산출물에만)**: 이 사건·이 PR·이 고객 고유값.
      → **개인 메모리(category=working)**. 스킬·브레인 안 건드림.
    - **도메인 범용 (이 도메인 작업마다 매번 적용)**: 양식·절차·규칙·도메인 법리/기술 패턴.
      → **그 도메인의 마스터 스킬 1개**를 갱신(domain-skill-catalog 참조; 같은 name STORE_SKILL 덮어쓰기 또는 SKILL.md 편집). 코드와 얽힌 계약이면 **코드와 스킬을 같이** 고쳐 동기화.
    - **전사 범용 (모든 도메인/모든 에이전트에 적용)**: 공통 계약·배포검증 규칙·거버넌스·공통 지식.
      → **회사 브레인 STORE_WIKI**(공유). 다른 에이전트·온보딩 시딩이 참조.
    
    ## 3) 새 도메인의 첫 작업이면
    - 그 도메인 **마스터 스킬을 신규 생성**(name=`<domain>-spec` 또는 `<domain>-form`).
    - domain-skill-catalog 및 회사 브레인 카탈로그에 1줄 등록(온보딩 시딩 입력).
    
    ## 4) 검증 (자가 'DONE' 금지)
    - 자가 "됐다" 라벨 금지. **결정적 검증**(스크립트 실행·재읽기·렌더 확인·빌드가드).
    - 코드 변경은 배포까지(always-deploy) + 반영 위치·검증결과 보고.
    
    ## 5) 공유 + 드리프트 주의
    - 도메인 마스터 스킬의 핵심 요지를 **브레인에도** 남겨 미래 에이전트가 시드받게 한다.
    - ★시드된 스킬 사본은 "출발점"일 뿐. **distill 환류 대상은 항상 정본**(브레인 카탈로그/마스터 본산). 사본을 정본처럼 고치지 말 것.
    - 중복 병합·정리 같은 지속 큐레이션은 **사서(리아/미라)** 담당 — 각 에이전트는 매 작업 distill, 사서는 주기 정리로 역할 분담.
    
    > 도메인 구현 예시: 법무(변우석)의 `doc-task-distill`/`doc-skill-map`은 이 공통 루틴의 법무 특화 구현체다.
  • domain-skill-catalog— (전사 공통) 도메인/산출물타입 → 정본(canonical) 마스터 스킬 인덱스 + '1 도메인타입 = 1 마스터 스킬' 규칙. 어떤 작업을 맡든 시작 전 이 인덱스(및 회사 브레인 카탈로그)로 마스터 스킬을 찾아 먼저 로드한다. 새 도메인타입이면 등록.2026-08-11
    # 도메인 → 마스터 스킬 인덱스 (전사 공통 규칙)
    
    규칙: **1 도메인/산출물 타입 = 마스터 스킬 1개**(정본). 작업 시작 전 반드시 그 마스터를 로드해 양식·절차·규칙·계약을 적용한다. 세부는 보조 스킬로.
    
    ## 정본 보관·시딩 구조
    - 정본 소스 본산: `daemon/agent-skills/_master/`(공통은 `_master/_common/`, 도메인별은 `_master/<domain>/`).
    - 전사 카탈로그(권위본): **회사 브레인 STORE_WIKI "도메인 → 정본 마스터 스킬" 인덱스**. 온보딩이 이걸 조회해 신규 에이전트 폴더로 시드(복사).
    - 각 에이전트 `…/<slug>/.claude/skills/`의 사본은 출발점 — 갱신 환류는 항상 정본으로(드리프트 금지).
    
    ## 전사 공통 거버넌스 스킬(모든 에이전트 시드)
    - **distill-on-done** — 작업 종료 자가 학습 분류·반영 루틴.
    - **domain-skill-catalog** — (이 스킬) 도메인→정본 마스터 인덱스.
    
    ## 도메인별 마스터(현재 등록분 — 법무)
    | 도메인/문서타입 | 마스터 스킬(정본) | 보조 |
    | --- | --- | --- |
    | 지급명령신청서(구상금) | jigeup-myeongryeong-format-spec | — |
    | 소장(구상금·계약분쟁) | seoul-singbo-gusang-sojang-form | seoul-singbo-sojang-format-spec, gusang-sojang-draft |
    | 답변서·준비서면 | (미생성 — 다음 작업 시 생성) | — |
    
    ## 신규 도메인타입 등록 절차
    1. 마스터 스킬 신규 생성(`<domain>-spec`/`-form`), 정본은 `_master/<domain>/`에도 사본 배치.
    2. 이 표 + 회사 브레인 카탈로그에 1행 추가.
    3. 온보딩(구교환)이 해당 도메인 신규 에이전트에 시드.
    
    ## 자동화 — 현황 및 계획(2026-06, 손석구·구교환 확인)
    - ★현재 상태: **미구현 = 수동 시드.** `daemon.js ensureSkillsDir`는 mkdir만 하고 시드 복사가 없어, 신규·기존 모두 사람이 복사해야 함(현재 공통 2종 보유 0곳).
    - 시딩 훅(예정): `ensureSkillsDir` 직후, 빈 폴더+`.seeded` 마커 없을 때만 매핑된 SKILL.md 복사(멱등·이름충돌 skip). createAgent(Worker)는 FS 없어 불가 → daemon에 건다.
    - 원칙 강제(예정): 헌장 조항 + daemon 런타임 공통 주입 블록(skillGuide)에 "작업 종료 시 distill-on-done 실행" 한 줄.
    - 스케줄드 큐레이션(예정): Cloudflare Cron→사서 세션 메시지→enqueueTask(→/activity 노출), 1차 제안모드(실삭제 사람 승인).
  • precedent-knowledge-layer-weekly-refresh— 판례 지식층 wiki 4종(지식층·조문클러스터·리딩케이스·키워드축)을 lax-db 재큐리로 갱신·재생성할 때2026-08-11
    # 판례 지식층 갱신·재생성
    
    대상 wiki: company/wiki/판례-지식층.md, 판례-조문클러스터.md, 판례-리딩케이스.md, 판례-키워드축.md
    
    ## 쿼리 도구
    `node C:/Users/user/LAX-site/daemon/tools/d1q.mjs "<SQL>"` — 원격 lax-db 결과를 TSV로 출력(rows_read/written도 표기). 여러 문장은 `;`로 연결.
    조인키는 `prec_serial`(TEXT). 같은 case_no가 복수 prec_serial로 존재하므로 **case_no 기준 dedup(MAX) 필수**.
    
    ## 렌즈 3종 — 절대 혼동 금지
    1. **전체 51k indeg** = `precedent_citations.internal_serial` 빈도 전량 → 인덱스표 '대표사건', 리딩케이스 top15.
    2. **도메인 내부 indeg** = citations의 `from_serial`이 query_tag 4키워드(구상금·보증채무·대위변제·신용보증)인 것만 카운트 → 조문클러스터 섹션 멤버표.
    3. **구상금 단일태그(1,382)** = 확장 전 옛 렌즈. 2026-08-04에 멤버표가 이 값으로 오염돼 있던 것을 정정했다. **검증 스팟체크: 민법105 클러스터의 2000다33607 — 1회면 오염(구상금-only), 5회면 정상(도메인 1,844).**
    
    ## 절차
    1. company/index.md → 4종 Read. 정적값 신뢰 금지.
    2. 코퍼스 무결성 먼저 — 한 호출에 `;`로 묶어 스냅샷:
    ```sql
    SELECT query_tag, COUNT(*) n, SUM(CASE WHEN body IS NOT NULL AND length(body)>0 THEN 1 ELSE 0 END) body_n FROM precedents GROUP BY query_tag ORDER BY n DESC;
    SELECT COUNT(*) total, SUM(CASE WHEN body IS NOT NULL AND length(body)>0 THEN 1 ELSE 0 END) body_total FROM precedents;
    SELECT source, CASE WHEN workspace_id IS NULL THEN 'NULL' ELSE 'HAS_WS' END ws, COUNT(*) n FROM precedents GROUP BY source, ws;
    SELECT (SELECT COUNT(*) FROM precedent_statutes) statutes_rows, (SELECT COUNT(*) FROM precedent_citations) citations_rows, (SELECT COUNT(*) FROM precedent_citations WHERE internal_serial IS NOT NULL) internal_edges
    ```
    2-1. **산문 속 규모 수치도 반드시 grep**: 표·인덱스만 갱신하고 도입부/설계 서술은 방치되는 게 반복 실패 패턴이다. 4종에 `grep -n "1,382\|1,339\|3,169\|1,818"` 류로 확장 전 수치를 훑어 실측으로 교체. (2026-08-11: 판례-지식층.md 도입부가 1,382인데 같은 페이지 그래프 절은 51,481 — 자기모순 [주소 비공개]주 방치됐다.)
    3. E1 조문 top20(도메인 필터 필수) → E2 클러스터별 멤버 top15(렌즈 2) → E3 리딩케이스 top15(렌즈 1) → E4 ego-net.
    4. 동점(tie) 다발 구간은 정렬키를 명시(멤버표=deg desc, 선고일 desc)하고, 인덱스표 대표사건 동점은 기존 큐레이션 선택 유지 + 본문에 동점 목록 기재.
    5. 판시 1줄은 네이티브 컬럼 없음 → 본문에서 추출: `substr(body, instr(body,'【이'), 650)`. 사실관계만 나오면 `+1500` 오프셋으로 '이 법원의 판단' 구간 재추출.
    6. cross-link 표시 규칙(고정): `←피인용 = 선고일 최신순 12건 + 총건수`, `→인용 = 내부엣지 전량`.
    7. frontmatter updated·source 갱신 + 본문에 무엇을 왜 바꿨는지 + log.md append + git commit.
    8. 보고는 Before/After 표. '무변동'도 재산출 근거(rows_written=0)와 함께 명시.
    
    ## 원칙
    - 법률 수치는 추측 금지. DB 결과 또는 명시 출처만.
    - 소장 판례(source='변호사 소장', workspace_id 有)는 **통계 포함, 개별 노출 시 워크스페이스·의뢰인 식별정보 미사용**.
    - 원문 통째 복사 금지, 참조(요약+경로)로 적재.
  • precedent-search-citation— 브레인 질문에 판례 근거가 필요할 때(판례·사건번호·요건사실·법리 관련 질문 전부) lax-db precedents FTS를 직접 검색해 사건번호·법원·선고일·조문·링크와 함께 인용해 답한다.2026-08-11
    # 판례 검색 → 근거 인용 (상시 절차)
    
    ## 언제
    LAX 브레인 질문이 **법리·요건사실·판례·조문**에 걸리면 wiki 검색과 **함께** 판례 DB를 반드시 조회한다.
    "판례 알려줘"가 아니어도, 법적 근거를 대야 하는 답이면 돌린다.
    
    ## 실행 위치
    `cd C:/Users/user/LAX-site` → `npx wrangler d1 execute lax-db --remote --json --command "..."`
    (wrangler.toml `[[d1_databases]] binding="DB" database_name="lax-db"`. wrangler 4.83.0 확인)
    
    ## 보안 규칙 (무조건)
    - **모든 쿼리에 `AND p.workspace_id IS NULL`을 건다.** workspace_id 有 = 특정 고객 매터 자료 → 브레인 답변 인용 금지.
    - **lax-db는 조회 전용.** INSERT/UPDATE/DELETE/DDL 금지.
    - `lax-prod`는 조회하지 않는다(37건 전부 workspace_id 有 = 전부 인용 불가).
    
    ## 기본 검색 쿼리
    ```sql
    SELECT p.id, p.case_no, p.court, p.decision_date, p.case_name,
           substr(p.body,1,400) snip, round(bm25(precedents_fts),2) sc
    FROM precedents_fts f JOIN precedents p ON p.id = f.rowid
    WHERE precedents_fts MATCH '연대보증'
      AND p.workspace_id IS NULL
    ORDER BY bm25(precedents_fts) LIMIT 5;
    ```
    
    ## 조문까지 붙일 때 (CTE 필수)
    `bm25()`는 GROUP BY와 같은 쿼리에서 쓰면 `unable to use function bm25 in the requested context (7500)`로 실패한다.
    → 랭킹은 CTE 안에서 끝내고, 조인·집계는 바깥에서.
    ```sql
    WITH hit AS (
      SELECT p.id, p.prec_serial, p.case_no, p.court, p.decision_date, bm25(precedents_fts) sc
      FROM precedents_fts f JOIN precedents p ON p.id = f.rowid
      WHERE precedents_fts MATCH '구상권' AND p.workspace_id IS NULL
      ORDER BY bm25(precedents_fts) LIMIT 5)
    SELECT h.id, h.case_no, h.court, h.decision_date,
           group_concat(s.statute_law||' '||s.statute_art, ' / ') laws
    FROM hit h LEFT JOIN precedent_statutes s ON s.prec_serial = h.prec_serial
    GROUP BY h.id ORDER BY h.sc;
    ```
    **조인 키는 `prec_serial`(TEXT)이다. `id`로 조인하면 안 된다.**
    
    ## 스키마 사실
    - `precedents`: id PK, prec_serial UNIQUE, case_name, case_no, court, case_type, decision_date, decision_type, detail_link, body, body_fetched, source, query_tag, created_at, workspace_id, local_path
    - `precedents_fts`: fts5(case_no, case_name, body) content='precedents' content_rowid='id' tokenize='trigram'
    - trigram이라 **검색어 3자 이상** 필요(2자 키워드는 매치 안 됨 — "보증"→"연대보증"처럼 늘려 쓴다)
    - 규모(2026-08-02): 51,481건 전부 workspace_id NULL, body 채워진 건 28,893건(56%)
    - 비용: 1회 FTS 검색 rows_read ≈ 5천, 8ms. `SELECT COUNT(*)`는 51,481행 풀스캔이니 남발 금지.
    
    ## 인용 형식
    ```
    - 대법원 2019.02.14. 선고 2017다274703 — [판시요지 1줄]
      근거조문: 민법 제441조, 제442조
      https://app.wikicomu.com/brain/lax/case?id=10925
    ```
    링크는 `https://app.wikicomu.com/brain/lax/case?id=<precedents.id>` (prec_serial 아님).
    
    ## 답변 원칙
    - 판례는 **찾은 그대로** 인용한다. 판시요지는 body에서 발췌하고, body_fetched=0이면 "본문 미수집"이라 표시한다.
    - 법적 해석·적용 판단은 하지 않는다(변호사·드래프터 몫). 나는 근거의 위치와 내용을 댄다.
    - 검색 결과 0건이면 "판례 DB에서 해당 키워드 검색 결과 없음"이라고 분명히 말한다. 지어내지 않는다.