/pm # PM μμ΄μ νΈ μμ (μλ μν 볡ꡬ)
/ci start # CI/CD μΈμ
μμ (ν¬μ€μ²΄ν¬ ν¬ν¨)
/ci auto 5 # μλ λͺ¨λλ‘ 5κ° μμ
μ°μ μ€ν1. PLAN.md μ½κΈ° β "λ€μ μΈμ
μ°μ μμ
" μΉμ
νμΈ
2. PROGRESS.md μ½κΈ° β "νμ¬ μ§ν μν©" μΉμ
νμΈ
3. /health β μμ€ν
μν νμΈ
4. /queue next β λ€μ μμ
νμΈ
νμ¬ μν (2026-02-20):
- β PM μλν μμ€ν μμ± (μνκ΄λ¦¬, μ€μΌμ€λ§, νΌλλ°±, μλ¦Ό)
- β CI/CD ν΅ν© μμ€ν κ΅¬μΆ (μ§μμ μ€ν, ν¬μ€μ²΄ν¬, νμ΄νλΌμΈ)
- β GitHub μ΄μ/PR μλν (μ΄μ λΆμ, PR μμ±, κΈ°μ λ³΄κ³ μ)
- β μ΄λ ₯ κΈ°λ° λ©ν° μμ΄μ νΈ μ€μΌμ€νΈλ μ΄μ (pm-orchestrate)
- β Phase 1 μλ£ (ν μ€νΈ 1,511κ° λͺ¨λ ν΅κ³Ό)
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PM Agent (Orchestrator) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββ ββββββββββββββββ βββββββββββββββ ββββββββββββββ β
β β state- β β work- β β feedback- β β health- β β
β β manager β β scheduler β β loop β β checker β β
β ββββββββ¬βββββββ ββββββββ¬ββββββββ ββββββββ¬βββββββ βββββββ¬βββββββ β
β ββββββββββββββ¬βββββ΄βββββββββββββββββββΌβββββββββββββββββ β
β βΌ βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β pm-orchestrate (μ΄λ ₯ κΈ°λ°) β β
β β execution-patterns.json β λ μνΌ μ ν β λ³λ ¬ μμ΄μ νΈ μ€ν β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βββββββββββββββββββββ΄ββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Execution Layer (λ³λ ¬ μ€ν) β β
β βββββββββββββββ¬ββββββββββββββ¬ββββββββββββββ¬ββββββββββββββββββββββββββ€ β
β β tdd- β task- β code- β security- β β
β β guide β executor β reviewer β reviewer β β
β βββββββββββββββ΄ββββββββββββββ΄ββββββββββββββ΄ββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Claude Codeκ° μΈμ μ μμν λ:
1. /health quick # λΉ λ₯Έ ν¬μ€ 체ν¬
2. state-manager.restore() # μ΄μ μν 볡ꡬ
3. work-scheduler.sync() # GitHub/PLAN.md λκΈ°ν
4. feedback-loop.load() # κ΄λ ¨ ν¨ν΄/μΈμ¬μ΄νΈ λ‘λ
5. PM μμ
μ ν λλ λκΈ°
| 컀맨λ | μ€λͺ | μ¬μ© μμ |
|---|---|---|
/pm |
PM μμ΄μ νΈ μμ | μΈμ μμ μ |
/pm-orchestrate |
μ΄λ ₯ κΈ°λ° λ©ν° μμ΄μ νΈ μ€ν | 볡μ‘ν μμ μ |
/ci start |
CI μΈμ μμ (λνν) | μμ μμ μ |
/ci auto N |
Nκ° μμ μλ μ€ν | μ°μ μμ μ |
/health |
μμ€ν μν νμΈ | λ¬Έμ λ°μ μ |
/queue |
μμ λκΈ°μ΄ νμΈ | λ€μ μμ νμΈ |
/state |
μν μ μ₯/볡ꡬ | μΈμ μ ν μ |
/feedback |
ν¨ν΄/μΈμ¬μ΄νΈ νμΈ | μμ μ μ°Έκ³ |
/notify |
μλ¦Ό/리ν¬νΈ νμΈ | μ§ν νμΈ μ |
/ci start- κ° μμ μλ£ ν μ¬μ©μ νμΈ
- μμ ν κΈ°λ³Έ λͺ¨λ
/ci auto 5 # 5κ° μμ
μλ μ€ν
/ci auto --no-limit # 무μ ν μ€ν- μ¬μ©μ νμΈ μμ΄ μ°μ μ€ν
- μλ¬ μ μλ μΌμμ μ§
/ci watch- GitHub μ΄λ²€νΈ κ°μ
- μ μ΄μ κ°μ§ μ μλ μ²λ¦¬
GitHub μ΄μ λ±λ‘
β
βΌ
βββββββββββββββββββββββ
β issue-manager β β μ΄μ λΆμ/λΌλ²¨λ§
β (1μκ°λ§λ€ λκΈ°ν) β β PM μ½λ©νΈ μΆκ°
βββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββ
β work-scheduler β β μ°μ μμ μ λ ¬
β β β μμ‘΄μ± νμΈ
βββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββ
β issue-developer β β λΈλμΉ μμ±
β β β μ½λ ꡬν
β β β μ½λ 리뷰
β β β κ²μ¦
β β β PR μμ±
βββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββ
β technical-writer β β κΈ°μ λ³΄κ³ μ μμ±
β β β LessonLearn/ μ μ₯
βββββββββββββββββββββββ
β
βΌ
λ€μ μμ
μλ μμ
.claude/config.json- μ 체 μμ€ν μ€μ .claude/state/- μν νμΌλ€.claude/pipelines/- CI/CD νμ΄νλΌμΈ μ μ.claude/triggers/- μΈλΆ νΈλ¦¬κ±° νμΌ
| λ 벨 | μ‘°μΉ | μμ |
|---|---|---|
| μλ μ¬μλ | 3νκΉμ§ μ¬μλ | λΉλ μ€ν¨, λ€νΈμν¬ |
| λ‘€λ°± | 체ν¬ν¬μΈνΈ 볡ꡬ | μ½λ 리뷰 μ€ν¨ |
| μ€ν΅ | λ€μ μμ μ§ν | μ΅λ μ¬μλ μ΄κ³Ό |
| μ€λ¨ | μλ κ°μ μμ² | 볡ꡬ λΆκ° μλ¬ |
PM μμ΄μ νΈκ° μμ¨ μ΄μ μ€ λ°λΌμΌ ν 루ν κ·μΉμ λλ€.
루ν μ§μ
쑰건:
- /ci auto N λλ /ci auto --no-limit μ€ν μ
- μΈλΆ νΈλ¦¬κ±°(.claude/triggers/queue/) νμΌ κ°μ§ μ
루ν μ€ν κ·μΉ:
1. λΈλ‘컀(blocker) μμΌλ©΄ λ€μ μμ
μΌλ‘ κ³μ μ§ν
2. 5ν΄λ§λ€ /compact μ€ν β 컨ν
μ€νΈ μμΆ λ° μ 리
3. 10ν΄λ§λ€ 체ν¬ν¬μΈνΈ μ μ₯ β .claude/state/checkpoint-{timestamp}.json
λΈλ‘컀 μ μ (루ν μΌμ μ μ§ μ‘°κ±΄):
- λΉλ μ€ν¨ 3ν μ°μ
- ν
μ€νΈ 컀λ²λ¦¬μ§ 80% λ―Έλ¬
- 보μ μ΄μ CRITICAL λ°κ²¬
- μμ
λκΈ°μ΄μ΄ λΉμ΄ μμ
- μλ κ°μ
μμ² νλκ·Έ κ°μ§
μμ μλ£ μ μλμΌλ‘ 컀λ°μ μμ±ν©λλ€.
μ»€λ° νΈλ¦¬κ±°:
- κΈ°λ₯ ꡬν μλ£ (ν
μ€νΈ ν΅κ³Ό ν)
- λ²κ·Έ μμ μλ£ (κ²μ¦ ν)
- 리ν©ν λ§ μλ£ (λΉλ ν΅κ³Ό ν)
μ»€λ° λ©μμ§ μ»¨λ²€μ
:
feat: μ κΈ°λ₯ μΆκ°
fix: λ²κ·Έ μμ
test: ν
μ€νΈ μΆκ°/μμ
docs: λ¬Έμ μ
λ°μ΄νΈ
refactor: μ½λ 리ν©ν λ§
chore: λΉλ/μ€μ λ³κ²½
perf: μ±λ₯ κ°μ
ci: CI/CD μ€μ λ³κ²½
μ»€λ° μμ±μ κ·μΉ:
- μμ±μ: Mario Cho <hephaex@gmail.com> λ¨λ
- Co-Authored-By μ€ μΆκ° κΈμ§
- AI μμ± νμ 문ꡬ μΆκ° κΈμ§
- μ»€λ° λ©μμ§λ μλ¬ΈμΌλ‘ μμ± (λ³Έλ¬Έμ νκ΅μ΄ νμ©)
μ»€λ° μ€ν μμ:
git add {λ³κ²½λ_νμΌλ€}
git commit -m "$(cat <<'EOF'
feat: add vector embedding storage for documents
pgvector κΈ°λ° λ¬Έμ μλ² λ© μ μ₯ λ° κ²μ κΈ°λ₯ ꡬν
- DocumentEmbedding λͺ¨λΈ μ μ
- embedding_service.rs ꡬν
- /api/embeddings λΌμ°νΈ μΆκ°
EOF
)"λ λ²¨λ³ λ³΅κ΅¬ μ λ΅κ³Ό μ΅λ μ¬μλ νμλ₯Ό μ μν©λλ€.
| λ 벨 | μ΄λ¦ | 쑰건 | 볡ꡬ μ λ΅ | μ΅λ μ¬μλ |
|---|---|---|---|---|
| L1 | μλ μ¬μλ | μΌμμ μ€ν¨ (λΉλ, λ€νΈμν¬) | μ¦μ μ¬μλ | 3ν |
| L2 | λ‘€λ°± | μ½λ 리뷰 μ€ν¨, ν μ€νΈ μ€ν¨ | λ§μ§λ§ 체ν¬ν¬μΈνΈλ‘ 볡ꡬ | 2ν |
| L3 | μ€ν΅ | L1/L2 μ΅λ μ¬μλ μ΄κ³Ό | νμ¬ μμ 건λλ°κ³ λ€μ μ§ν | - |
| L4 | μ€λ¨ | 보μ μ΄μ, 볡ꡬ λΆκ° μλ¬ | 루ν μ€λ¨ + μλ κ°μ μμ² | - |
둀백 쑰건:
- cargo clippy μλ¬ 3ν μ°μ μμ μ€ν¨
- ν
μ€νΈ 컀λ²λ¦¬μ§κ° 80% μλλ‘ νλ½
- API ν΅ν© ν
μ€νΈ 2ν μ°μ μ€ν¨
λ‘€λ°± μ μ°¨:
1. νμ¬ λ³κ²½μ¬ν git stash
2. λ§μ§λ§ μ±κ³΅ 체ν¬ν¬μΈνΈ λ‘λ
3. .claude/state/current-task.json μνλ₯Ό "failed"λ‘ μ
λ°μ΄νΈ
4. μμ
μ work-queue.json 맨 λ€λ‘ μ΄λ (μ¬μλ μΉ΄μ΄ν° μ¦κ°)
5. λ€μ μμ
μ ν
L4 μ€λ¨ μ μλ¦Ό:
- .claude/triggers/queue/manual-intervention-required.json μμ±
- PROGRESS.mdμ λΈλ‘컀 λ΄μ© κΈ°λ‘
| νμΌ | μν | κ°±μ μ£ΌκΈ° |
|---|---|---|
.claude/state/current-task.json |
νμ¬ μ€ν μ€μΈ μμ | μμ μμ/μλ£ μ |
.claude/state/work-queue.json |
λκΈ° μ€μΈ μμ λͺ©λ‘ | μμ μΆκ°/μλ£ μ |
.claude/state/agent-context.json |
μμ΄μ νΈ κ³΅μ 컨ν μ€νΈ | 5ν΄λ§λ€ |
.claude/state/feedback.json |
ν¨ν΄/μΈμ¬μ΄νΈ λμ | μμ μλ£ μ |
.claude/state/ci-session.json |
νμ¬ CI μΈμ μ 보 | μ€μκ° |
.claude/state/checkpoint-{ts}.json |
10ν΄ μ£ΌκΈ° μ€λ μ· | 10ν΄λ§λ€ |
μΈμ
볡ꡬ μμ:
1. .claude/state/ci-session.json μ½κΈ° β λ§μ§λ§ μΈμ
μν νμΈ
2. .claude/state/current-task.json μ½κΈ° β μ€λ¨λ μμ
νμΈ
3. .claude/state/work-queue.json μ½κΈ° β λκΈ°μ΄ μν 볡ꡬ
4. .claude/state/agent-context.json μ½κΈ° β 곡μ 컨ν
μ€νΈ λ‘λ
5. μ€λ¨λ μμ
μ΄ μμΌλ©΄ μ¬κ°, μμΌλ©΄ λκΈ°μ΄ λ§¨ μ μμ
μμ
컨ν
μ€νΈ μμΆ (/compact νΈλ¦¬κ±°, 5ν΄λ§λ€):
- μλ£λ μμ
μμ½μ agent-context.jsonμ μ μ₯
- μ€λλ μμΈ λ‘κ·Έλ .history/μ μμΉ΄μ΄λΈ
- νμ¬ μμ
컨ν
μ€νΈλ§ λ©λͺ¨λ¦¬μ μ μ§
Sub-agentλ μλ JSON κ΅¬μ‘°λ‘ κ²°κ³Όλ₯Ό λ°νν΄μΌ ν©λλ€.
{
"agent": "agent-name",
"task_id": "task-uuid",
"status": "success | failure | partial",
"result": {
"summary": "μμ
κ²°κ³Ό νμ€ μμ½",
"artifacts": ["μμ±λ νμΌ μ λκ²½λ‘ λͺ©λ‘"],
"metrics": {
"files_changed": 0,
"lines_added": 0,
"lines_removed": 0,
"tests_added": 0
}
},
"next_action": "continue | review | commit | rollback | stop",
"error": null
}| μ½λ | μ΄λ¦ | μλ―Έ | λμ |
|---|---|---|---|
E001 |
BUILD_FAIL | λΉλ μ€ν¨ | L1 μ¬μλ |
E002 |
TEST_FAIL | ν μ€νΈ μ€ν¨ | L1 μ¬μλ |
E003 |
COVERAGE_LOW | 컀λ²λ¦¬μ§ 80% λ―Έλ¬ | L2 λ‘€λ°± |
E004 |
LINT_FAIL | clippy/eslint μ€ν¨ | L1 μ¬μλ |
E005 |
REVIEW_FAIL | μ½λ 리뷰 CRITICAL | L2 λ‘€λ°± |
E006 |
SECURITY_ISSUE | 보μ μ·¨μ½μ λ°κ²¬ | L4 μ€λ¨ |
E007 |
CONFLICT | git μΆ©λ | L2 λ‘€λ°± |
E008 |
TIMEOUT | μμ νμμμ (30λΆ) | L3 μ€ν΅ |
E009 |
QUEUE_EMPTY | λκΈ°μ΄ λΉμ΄ μμ | 루ν μ’ λ£ |
E010 |
UNKNOWN | μ μ μλ μλ¬ | L4 μ€λ¨ |
Orchestrator β Sub-agent:
.claude/triggers/queue/{task-id}.json
Sub-agent β Orchestrator:
.claude/triggers/processed/{task-id}-result.json
νμ:
{
"task_id": "uuid",
"agent": "issue-developer",
"command": "implement",
"payload": { ... },
"timeout_minutes": 30
}
μΈμ μμ μ λ°λμ μλ νμΌλ€μ λ¨Όμ μ½μΌμΈμ:
1. PLAN.md β λ¬΄μ¨ μΌμ ν΄μΌ νλμ§ (ν μΌ λͺ©λ‘)
2. PROGRESS.md β μ΄λκΉμ§ μ§νλμλμ§ (μλ£λ μμ
)
μΈμ
μμ
β
βββ PLAN.md μ½κΈ° (ν μΌ νμΈ)
βββ PROGRESS.md μ½κΈ° (μ§ν μν© νμΈ)
β
βΌ
μμ
μν
β
βββ μμ
μλ£ μ: PROGRESS.md μ
λ°μ΄νΈ
βββ μ ν μΌ λ°κ²¬ μ: PLAN.md μ
λ°μ΄νΈ
β
βΌ
μΈμ
μ’
λ£
β
βββ .history/YYYY-MM-DD_description.mdμ μμΈ λ‘κ·Έ μ μ₯
| νμΌ | λͺ©μ | μ λ°μ΄νΈ μμ |
|---|---|---|
PLAN.md |
ν΄μΌ ν μΌ, μ°μ μμ, λ΄λΉ | μ μμ μΆκ°/μλ£ μ |
PROGRESS.md |
μλ£λ μμ , κ²°μ μ¬ν, μ΄μ | μμ μλ£λ§λ€ |
.history/*.md |
μμΈ μΈμ λ‘κ·Έ | μΈμ μ’ λ£ μ |
MinKyλ 3~9λͺ μκ·λͺ¨ νμ μ묡μ§(tacit knowledge)λ₯Ό νμμ§λ‘ μ ννκ³ , νμ λꡬλ νμν λ μμ°μ΄λ‘ μ°Ύμ νμ©ν μ μκ² νλ μ§μ νλ«νΌμ λλ€.
μλ¬΅μ§ β μΊ‘μ² β AI μ΄ν΄ β μ°κ²° β μμ°μ΄ κ²μ β ν μ±μ₯
- νκ·Έ/λΆλ₯κ° μλ μ΄ν΄: AIκ° λ¬Έμλ₯Ό "μ½κ³ μ΄ν΄"νμ¬ μλμΌλ‘ μ°κ²°
- κ²μμ΄ μλ λν: "μ΄κ±° μ΄λμμ§?" λμ "μ°λ¦¬ νμμ μ΄λ° λ¬Έμ ν΄κ²°ν μ μμ΄?"
- κ°μΈ μ±μ₯ β ν μ±μ₯: ν μ¬λμ νμ΅μ΄ ν μ 체μ μμ°μ΄ λ¨
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Input Sources β
βββββββββββββββ¬ββββββββββββββ¬ββββββββββββββ¬βββββββββββββββββββ€
β Obsidian β Safari β Slack β Direct Input β
β Markdown β Clipper β Messages β Chat/Upload β
ββββββββ¬βββββββ΄βββββββ¬βββββββ΄βββββββ¬βββββββ΄βββββββββ¬ββββββββββ
β β β β
βββββββββββββββ΄βββββββ¬βββββββ΄ββββββββββββββββ
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Knowledge Pipeline β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β 1. Document Ingestion β
β - Markdown/HTML/PDF parsing β
β - Metadata extraction β
β β
β 2. AI Understanding (Claude) β
β - ν΅μ¬ μ£Όμ μΆμΆ β
β - ν΄κ²°ν λ¬Έμ μλ³ β
β - κ΄λ ¨ κΈ°μ /λꡬ νκΉ
β
β - μ°κ²° κ°λ₯ν μ§μ νμ
β
β β
β 3. Vector Embedding β
β - Document embeddings β
β - Chunk-level embeddings β
β - Semantic indexing β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Knowledge Store β
ββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββ€
β PostgreSQL β Vector DB (pgvector/Qdrant) β
β - Documents β - Embeddings β
β - Metadata β - Semantic search β
β - Relations β - Similarity matching β
ββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β RAG Search Layer β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β User Question β Query Understanding β Vector Search β
β β Context Assembly β Claude Generation β Answer β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- Framework: Axum 0.8
- Database: PostgreSQL + pgvector
- Vector Search: pgvector (primary) / Qdrant (optional)
- AI: Claude API (Anthropic)
- Embedding: OpenAI text-embedding-3-small / Voyage AI
- Async Runtime: Tokio
- Framework: React 18+
- State: React Query / Zustand
- UI: Tailwind CSS + shadcn/ui
- Chat: Real-time WebSocket
- Container: Docker
- DB Migration: sqlx-cli
- CI/CD: GitHub Actions
minky/
βββ CLAUDE.md # νλ‘μ νΈ κ°μ΄λ (μ΄ νμΌ)
βββ .history/ # μΈμ
λ‘κ·Έ
βββ BK/ # λ°±μ
νμΌ
βββ Docs/ # λ¬Έμ
β
βββ app/ # Python Backend (Legacy)
β βββ middleware/
β βββ models/
β βββ routes/
β βββ schemas/
β βββ services/
β β βββ agents/ # AI μμ΄μ νΈ
β β βββ llm_providers/ # LLM μ 곡μ
β βββ utils/
β
βββ minky-rust/ # Rust Backend (Active)
β βββ Cargo.toml
β βββ migrations/ # SQL λ§μ΄κ·Έλ μ΄μ
β βββ src/
β βββ main.rs
β βββ lib.rs
β βββ config.rs
β βββ error.rs
β βββ middleware/ # μΈμ¦, λ‘κΉ
β βββ models/ # λ°μ΄ν° νμ
, μ€ν€λ§
β βββ routes/ # API μλν¬μΈνΈ
β βββ services/ # λΉμ¦λμ€ λ‘μ§
β βββ utils/
β
βββ frontend/ # React Frontend
β βββ public/
β βββ src/
β βββ components/ # UI μ»΄ν¬λνΈ
β βββ hooks/ # 컀μ€ν
ν
β βββ pages/ # νμ΄μ§
β βββ services/ # API ν΄λΌμ΄μΈνΈ
β βββ styles/ # CSS/Tailwind
β βββ utils/ # μ νΈλ¦¬ν°
β βββ i18n/ # λ€κ΅μ΄
β
βββ tests/ # Python ν
μ€νΈ
βββ migrations/ # Python DB λ§μ΄κ·Έλ μ΄μ
βββ logs/ # λ‘κ·Έ νμΌ
β
βββ .claude/ # Claude Code μ€μ
βββ agents/ # μμ΄μ νΈ μ μ (21κ°)
βββ commands/ # 컀맨λ μ μ (23κ°)
βββ skills/ # μ€ν¬ μ μ (6κ°)
βββ config.json # μ 체 μμ€ν
μ€μ
βββ state/ # μν κ΄λ¦¬
β βββ current-task.json
β βββ work-queue.json
β βββ agent-context.json
β βββ feedback.json
β βββ ci-session.json
βββ locks/ # λμ μμ
μ κΈ
βββ pipelines/ # CI/CD νμ΄νλΌμΈ μ μ
βββ triggers/ # μΈλΆ νΈλ¦¬κ±°
β βββ queue/
β βββ processed/
βββ logs/ci/ # CI λ‘κ·Έ
βββ backups/ # μν λ°±μ
βββ references/ # μ‘°μ¬/λ νΌλ°μ€ μ μ₯
βββ _index.json # κ²μ μΈλ±μ€
βββ research/ # μ‘°μ¬ κ²°κ³Ό
βββ architecture/ # μν€ν
μ² ν¨ν΄
βββ apis/ # API λ¬Έμ
βββ best-practices/ # λ² μ€νΈ νλν°μ€
| λͺ©μ | κ²½λ‘ |
|---|---|
| Rust μ§μ μ | minky-rust/src/main.rs |
| Rust λͺ¨λΈ μ μ | minky-rust/src/models/ |
| Rust API λΌμ°νΈ | minky-rust/src/routes/ |
| Rust μλΉμ€ λ‘μ§ | minky-rust/src/services/ |
| React μ»΄ν¬λνΈ | frontend/src/components/ |
| React API νΈμΆ | frontend/src/services/api.js |
1. λͺ¨λΈ μ μ β minky-rust/src/models/{feature}.rs
2. μλΉμ€ ꡬν β minky-rust/src/services/{feature}_service.rs
3. λΌμ°νΈ μΆκ° β minky-rust/src/routes/{feature}.rs
4. mod.rs λ±λ‘ β κ° λλ ν 리μ mod.rsμ μΆκ°
5. νλ‘ νΈμλ β frontend/src/components/{Feature}/
-
Document Ingestion Pipeline
- Markdown νμΌ μ λ‘λ/μν¬νΈ
- λ©νλ°μ΄ν° μΆμΆ (μ λͺ©, λ μ§, μΆμ²)
- μ²ν¬ λΆν (semantic chunking)
-
AI Document Analysis
- Claudeλ‘ λ¬Έμ λΆμ
- ν΅μ¬ μ£Όμ 3-5κ° μΆμΆ
- ν΄κ²°ν λ¬Έμ /μΈμ¬μ΄νΈ μλ³
- κ΄λ ¨ κΈ°μ /λꡬ μλ νκΉ
-
Vector Embedding Storage
- pgvector μ€μ
- λ¬Έμ μλ² λ© μμ± λ° μ μ₯
- μ²ν¬λ³ μλ² λ©
-
RAG Search API
- μμ°μ΄ μ§λ¬Έ β λ²‘ν° κ²μ
- 컨ν μ€νΈ μ‘°ν©
- Claude λ΅λ³ μμ±
- μΆμ² λ¬Έμ λ§ν¬
-
Chat Interface
- λνν UI
- μ€νΈλ¦¬λ° μλ΅
- λν νμ€ν 리
- Auto-linking
- κ΄λ ¨ λ¬Έμ μλ μ°κ²°
- μ§μ κ·Έλν μκ°ν
- "μ΄κ²λ λ³Όλ§ν΄μ" μΆμ²
- Conversation Mining (Future)
- Slack/Teams μ°λ
- λνμμ μ§μ μΆμΆ
- νμΈ ν μλ μ μ₯
# Document Pipeline
POST /api/documents/ingest # λ¬Έμ μ
λ‘λ + AI λΆμ
GET /api/documents/{id} # λ¬Έμ μ‘°ν (λΆμ κ²°κ³Ό ν¬ν¨)
GET /api/documents/{id}/related # κ΄λ ¨ λ¬Έμ
# Knowledge Search (RAG)
POST /api/search/ask # μμ°μ΄ μ§λ¬Έ β AI λ΅λ³
POST /api/search/semantic # λ²‘ν° μ μ¬λ κ²μ
GET /api/search/history # κ²μ νμ€ν 리
# Chat
POST /api/chat/message # λν λ©μμ§
GET /api/chat/sessions # λν μΈμ
λͺ©λ‘
WS /api/chat/stream # μ€νΈλ¦¬λ° WebSocket
/// AIκ° λΆμν λ¬Έμ μ΄ν΄ κ²°κ³Ό
pub struct DocumentUnderstanding {
pub document_id: Uuid,
/// ν΅μ¬ μ£Όμ (3-5κ°)
pub topics: Vec<String>,
/// νμ€ μμ½
pub summary: String,
/// ν΄κ²°ν λ¬Έμ (μλ€λ©΄)
pub problem_solved: Option<String>,
/// ν΅μ¬ μΈμ¬μ΄νΈ
pub insights: Vec<String>,
/// κ΄λ ¨ κΈ°μ /λꡬ
pub technologies: Vec<String>,
/// λκ° μλ©΄ μ’μκΉ? (μν κΈ°λ°)
pub relevant_for: Vec<String>,
/// κ΄λ ¨ λ¬Έμ ID
pub related_documents: Vec<Uuid>,
/// λΆμ μΌμ
pub analyzed_at: DateTime<Utc>,
}λ³κ²½ ν λ°λμ κ°λ° μλ²λ‘ ν μ€νΈνμ¬ μλ¬ νμΈ
.history/YYYY-MM-DD_task_description.md νμμΌλ‘ μμ
λ‘κ·Έ μ μ₯
feat: μ κΈ°λ₯
fix: λ²κ·Έ μμ
refactor: 리ν©ν λ§
docs: λ¬Έμ
test: ν
μ€νΈ
- Rust:
cargo clippyν΅κ³Ό - Frontend:
eslint+prettier - ν μ€νΈ 컀λ²λ¦¬μ§ 80% λͺ©ν
- μ¬μ©μκ° νκ·Έ κ³ λ―Όν νμ μμ
- AIκ° λ¬Έλ§₯μ μ΄ν΄νκ³ μλ μ°κ²°
- κ²μμ μμ°μ΄λ‘
- λ―Όκ°ν ν μ§μμ λ‘컬 μ°μ
- Vector DBλ self-hosted κ°λ₯
- μΈλΆ AI API νΈμΆλ§ λ€νΈμν¬ νμ
- Phase 1λ§μΌλ‘λ μ¬μ© κ°λ₯
- κ° Phaseκ° λ 립μ κ°μΉ μ 곡
- ν μν©μ λ§κ² νμ₯
- κ²μ μ±κ³΅λ₯ : μ§λ¬Έμ κ΄λ ¨ λ΅λ³ μ°Ύλ λΉμ¨
- μ§μ μ¬μ¬μ©λ₯ : μ μ₯λ μ§μμ΄ μ€μ νμ©λλ λΉμ¨
- μλ¬΅μ§ μ νμ¨: λν/κ²½ν β λ¬Έμνλ μ§μ
- νμ μ±μ₯: λ€λ₯Έ νμ μ§μμΌλ‘ λ¬Έμ ν΄κ²°ν μ¬λ‘
- pgvector PostgreSQL μ€μ
- Document Understanding νμ΄νλΌμΈ ꡬν
- λ²‘ν° μλ² λ© μ μ₯/κ²μ API
- RAG κΈ°λ° μμ°μ΄ κ²μ
- λνν μΈν°νμ΄μ€
| νμΌ | λ΄μ© |
|---|---|
_index.json |
λ νΌλ°μ€ κ²μ μΈλ±μ€ |
research/2026-02-18_pkm-tools.md |
PKM λꡬ λΉκ΅ μ‘°μ¬ |
architecture/rag-patterns.md |
RAG μν€ν μ² ν¨ν΄ |
apis/embedding-apis.md |
Embedding API λΉκ΅ |
νμ©: /ref-search 컀맨λλ‘ κ²μ, /ref-saveλ‘ μ λ νΌλ°μ€ μ μ₯