# DEVONThink PKM 시스템 — Claude Code 작업 가이드 > 마지막 업데이트: 2026-03-29 > 개발 현황: Phase 1 초기 구축 완료 → Phase 1.5 GPU 서버 재구성 + Phase 2 인프라 수정 병행 중 ## 프로젝트 개요 Mac mini M4 Pro(64GB, 4TB) 기반 개인 지식관리(PKM) 시스템. DEVONthink 4를 중앙 허브로, MLX AI 자동 분류 + 법령 모니터링 + 일일 다이제스트를 자동화한다. ## 핵심 문서 (반드시 먼저 읽을 것) 1. `docs/architecture.md` — 전체 시스템 아키텍처 (DB 구조, 태그, AI, 자동화 전체) 2. `docs/industrial-safety-blueprint.md` — 04_Industrial Safety DB 상세 설계 3. `docs/claude-code-commands.md` — 단계별 작업 지시서 (현재 진행 상황 포함) 4. `docs/dev-roadmap.md` — 개발 로드맵 (Phase 1.5~6) 5. `docs/deploy.md` — Mac mini 배포 가이드 + 트러블슈팅 6. `docs/gpu-restructure.md` — GPU 서버 재구성 상세 계획 (Phase 1.5) ## 개발 현황 요약 ``` [Phase 1: 초기 구축] ██████████████████░░ 90% — 코드 작성 완료, 인프라 일부 미해결 ✅ 1단계: 프로젝트 구조 — 완료 ✅ 2단계: AI 분류 프롬프트 — MLX Qwen3.5 OpenAI 호환 전환 완료 ✅ 3단계: AppleScript — auto_classify + omnifocus_sync 완료 ⚠️ 4단계: 법령 모니터링 — 외국(US/JP/EU) OK, 한국 API IP 미등록 ❌ 5단계: MailPlus 수집 — IMAP Connection refused ⚠️ 6단계: Daily Digest — 코드 완성, 실행 테스트 미진행 ✅ 7단계: DEVONagent 가이드 — 완료 ❌ 8단계: 전체 테스트 — 미진행 ✅ 추가: PKM API 서버 — 기본 동작, 개선 필요 [Phase 1.5: GPU 서버 재구성] ░░░░░░░░░░░░░░░░░░░░ 0% — 계획 완료, 실행 대기 → docs/gpu-restructure.md 참조 → GPU 모델 교체, Surya OCR, Komga 이전, Qdrant 통합, RAG 파이프라인 [Phase 2: 인프라 + 버그 픽스] ░░░░░░░░░░░░░░░░░░░░ 0% — Phase 1.5와 병행 착수 대기 → docs/dev-roadmap.md 참조 ``` ## 알려진 이슈 (현재) ``` [P1 — 인프라] - 한국 법령 API: open.law.go.kr에 Mac mini 공인IP 등록 필요 - MailPlus IMAP: 993 포트 Connection refused — Synology DSM에서 IMAP 활성화 확인 - requirements.txt: flask 누락, chromadb→qdrant-client 교체, schedule 미사용 - launchd: plist 파일은 있으나 실제 등록 여부 미확인 - GPU 서버: 중복 LLM 모델 제거 + Surya OCR/Komga 이전 필요 → gpu-restructure.md [P2 — 코드 버그] - JP 번역: MLX thinking 출력이 번역 결과에 오염 ("Wait, I'll check...") - API 서버: /devonthink/stats → 500 에러, 한글 쿼리 인코딩 400 에러 - AppleScript: 경로 하드코딩 + sourceChannel 이중 설정 버그 (73행) - embed_to_chroma.py: GPU_SERVER_IP 미설정으로 미작동 → Qdrant 리라이트 예정 ``` ## 네트워크 환경 ``` Mac mini (운영 서버): - MLX 서버: http://localhost:8800/v1/chat/completions (Qwen3.5-35B-A3B) - PKM API: http://127.0.0.1:9900 (Flask, GUI 세션 필수) - DEVONthink: 로컬 실행 중 - OmniFocus: 로컬 실행 중 Synology NAS (DS1525+): - 도메인: ds1525.hyungi.net - Tailscale IP: 100.101.79.37 - 포트: 15001 - WebDAV: webdav.hyungi.net/Document_Server/DEVONThink/ - MailPlus IMAP: mailplus.hyungi.net:993 (SSL) ← 현재 연결 불가 GPU 서버 (RTX 4070 Ti Super, 192.168.1.186): - 현재: Ollama(11434) + qwen3.5:9b + id-9b, Plex(32400) - 계획: bge-m3(임베딩) + bge-reranker(리랭킹) + Surya OCR(:8400) + Komga(:25600) - → docs/gpu-restructure.md 참조 TKSafety: tksafety.technicalkorea.net (설정만, 나중에 활성화) ``` ## 인증 정보 - 위치: `~/.config/pkm/credentials.env` - 템플릿: `./credentials.env.example` - 스크립트에서 python-dotenv로 로딩 - 필수 키: LAW_OC, MAILPLUS_HOST/PORT/USER/PASS, NAS_DOMAIN, GPU_SERVER_IP ## DEVONthink DB 구조 (13개) ``` 운영 DB (신규 생성 완료): Inbox — 모든 자료 최초 진입점 Archive — 이메일, 채팅 로그 Projects — 진행 중 프로젝트 도메인 DB (기존, 유지): 00_Note_BOX, 01_Philosophie, 02_Language, 03_Engineering, 04_Industrial safety, 05_Programming, 07_General Book, 97_Production drawing, 99_Reference Data, 99_Technicalkorea ``` ## 커스텀 메타데이터 필드 (DEVONthink에 등록 완료) ``` omnifocusTaskID — Single-Line Text — OmniFocus 역링크 sourceURL — URL — 원본 출처 synologyPath — Single-Line Text — NAS 원본 경로 lastAIProcess — Date — 마지막 AI 처리 일시 sourceChannel — Single-Line Text — 유입 경로 (아래 값 중 하나) dataOrigin — Single-Line Text — work 또는 external ``` ## sourceChannel 값 (유입 경로 추적) ``` tksafety — TKSafety API (업무 실적) → dataOrigin = work devonagent — DEVONagent 자동 수집 (뉴스) → dataOrigin = external law_monitor — 법령 API (법령 변경) → dataOrigin = external inbox_route — Inbox → AI 분류 → AI 판별 email — MailPlus 이메일 → AI 판별 web_clip — Web Clipper 스크랩 → dataOrigin = external manual — 직접 추가 → dataOrigin = work (기본) ``` ## AI 모델 구성 ``` Tier 1 (Mac mini, 상시): mlx-community/Qwen3.5-35B-A3B-4bit — 태그 생성, 문서 분류, 요약, JP 번역 → http://localhost:8800/v1/chat/completions (OpenAI 호환 API) → MLX 서버로 실행 중 (Ollama 아님) ※ thinking 모드 주의: /nothink 명시 또는 JSON 추출 후처리 필요 Tier 2 (Claude API, 필요시): claude-sonnet — 복잡한 분석, 장문 처리 → CLAUDE_API_KEY 사용 (아직 미연동) Tier 3 (GPU 서버, 특수) — ※ 재구성 예정 (gpu-restructure.md 참조): 현재: qwen3.5:9b-q8_0, id-9b (제거 예정) 변경 후: bge-m3 — 벡터 임베딩 (1024차원, Ollama) bge-reranker-v2-m3 — RAG 리랭킹 (Ollama) Surya OCR — 이미지/스캔 문서 OCR (FastAPI, 포트 8400) ``` ## 파일 구조 (현재) ``` ./ ├── CLAUDE.md ← 이 파일 (Claude Code 작업 가이드) ├── README.md ← 프로젝트 설명 ├── requirements.txt ← Python 패키지 (flask 추가 필요!) ├── .gitignore ├── credentials.env.example ← 인증 정보 템플릿 ├── scripts/ │ ├── pkm_utils.py ← 공통 유틸 (로깅, 인증, LLM, AppleScript) │ ├── law_monitor.py ← 법령 모니터링 (한국+US/JP/EU) │ ├── mailplus_archive.py ← MailPlus 이메일 수집 │ ├── pkm_daily_digest.py ← 일일 다이제스트 생성 │ ├── pkm_api_server.py ← REST API 서버 (Flask, 포트 9900) │ ├── embed_to_chroma.py ← ChromaDB 벡터 임베딩 (→ embed_to_qdrant.py로 교체 예정) │ └── prompts/ │ └── classify_document.txt ← AI 분류 프롬프트 템플릿 ├── applescript/ │ ├── auto_classify.scpt ← Inbox 자동 분류 Smart Rule │ └── omnifocus_sync.scpt ← OmniFocus 연동 Smart Rule ├── launchd/ │ ├── net.hyungi.pkm.law-monitor.plist │ ├── net.hyungi.pkm.mailplus.plist │ └── net.hyungi.pkm.daily-digest.plist ├── data/ │ ├── law_last_check.json ← 법령 마지막 확인 시점 │ └── laws/ ← 수집된 법령 문서 (16건 수집 완료) ├── logs/ ← 실행 로그 ├── docs/ │ ├── architecture.md ← 시스템 아키텍처 │ ├── industrial-safety-blueprint.md │ ├── claude-code-commands.md ← 단계별 작업 지시서 │ ├── deploy.md ← Mac mini 배포 가이드 │ ├── devonagent-setup.md ← DEVONagent 검색 세트 가이드 │ ├── dev-roadmap.md ← 개발 로드맵 (Phase 1.5~6) │ └── gpu-restructure.md ← GPU 서버 재구성 상세 계획 ├── tests/ │ └── test_classify.py ← AI 분류 테스트 (5종 문서) └── venv/ ← Python 가상환경 ``` ## 작업 순서 ### Phase 1 (완료): 초기 구축 docs/claude-code-commands.md의 1~7단계 → 코드 작성 완료 ### Phase 1.5 (계획 완료): GPU 서버 재구성 docs/gpu-restructure.md 참조: 1. GPU 모델 교체 (LLM 제거, bge-m3/reranker 설치) 2. Docker + NFS + Komga 이전 3. Surya OCR 설치 4. PKM 코드 갱신 (Qdrant 통합, embed 스크립트, AppleScript) 5. RAG 파이프라인 구축 (후순위) ### Phase 2 (진행 중): 인프라 수정 + 버그 픽스 docs/dev-roadmap.md 참조 (Phase 1.5와 병행): 1. requirements.txt 수정 ← Phase 1.5와 합산 (qdrant-client, flask) 2. 한국 법령 API IP 등록 3. MailPlus IMAP 연결 수정 4. JP 번역 thinking 오염 필터링 5. API 서버 한글 인코딩 + stats 500 에러 수정 6. AppleScript 하드코딩 경로 변수화 ← Phase 1.5와 합산 7. launchd 등록 및 확인 ### Phase 3~4: API 서버 개선 + 테스트 - gunicorn 전환 + launchd plist 추가 - 엔드포인트 추가 (/law-monitor/status, /digest/latest) - 모듈별 + E2E 통합 테스트 → docs/test-report.md ### Phase 5~6: 운영 안정화 - 로그 로테이션, Synology Chat 알림, 문서 보완 ## 코딩 규칙 - Python 3.11+ (Mac mini 기본, 현재 3.14 확인됨) - 인증 정보는 반드시 credentials.env에서 로딩 (하드코딩 금지) - AppleScript는 DEVONthink/OmniFocus와 연동 (osascript로 호출) - 로그는 ~/Documents/code/DEVONThink_my\ server/logs/에 저장 - launchd plist는 launchd/ 디렉토리에 생성, Mac mini에서 심볼릭 링크로 등록 - LLM 호출 시 pkm_utils.llm_generate() 사용 (thinking 후처리 포함) - 한글 주석 사용 ## 배포 방법 ``` MacBook Pro (개발) → Gitea push → Mac mini에서 git pull 또는 Cowork 모드에서 직접 파일 수정 → git push Mac mini에서: cd ~/Documents/code/DEVONThink_my\ server/ git pull source venv/bin/activate pip install -r requirements.txt # launchd 등록은 deploy.md 참조 ``` ## 주의사항 - credentials.env는 git에 올리지 않음 (.gitignore에 포함) - DEVONthink, OmniFocus는 Mac mini에서 GUI로 실행 중이어야 AppleScript 작동 - PKM API 서버도 GUI 세션에서 실행 필수 (AppleScript 중계) - 법령 API (LAW_OC): 키 발급 완료, Mac mini 공인IP 등록 필요 - TKSafety 연동은 설계만 완료, 구현은 나중에 - GPU 서버 Tailscale IP는 별도 확인 후 credentials.env에 추가 - MLX 서버 thinking 모드: 번역/분류 시 /nothink 프리픽스 또는 후처리 필수