{"id":50458331,"url":"https://github.com/hunhee98/pluck","last_synced_at":"2026-06-01T03:32:48.236Z","repository":{"id":358044116,"uuid":"1239425398","full_name":"hunhee98/pluck","owner":"hunhee98","description":"MCP-native code retrieval for AI agents — 84-88% fewer read tokens, BM25F + semantic search, AST chunks, session dedup","archived":false,"fork":false,"pushed_at":"2026-05-22T07:08:30.000Z","size":8447,"stargazers_count":34,"open_issues_count":2,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-22T15:25:53.679Z","etag":null,"topics":["ai-agents","bm25","claude-code","cli","code-intelligence","code-search","codex","context-window","developer-tools","embeddings","llm","mcp","mcp-server","rag","ripgrep","rust","semantic-search","tantivy","token-optimization","tree-sitter"],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hunhee98.png","metadata":{"files":{"readme":"README.ko.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-15T04:43:07.000Z","updated_at":"2026-05-22T07:08:34.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/hunhee98/pluck","commit_stats":null,"previous_names":["hunhee98/pluck"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/hunhee98/pluck","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hunhee98%2Fpluck","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hunhee98%2Fpluck/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hunhee98%2Fpluck/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hunhee98%2Fpluck/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hunhee98","download_url":"https://codeload.github.com/hunhee98/pluck/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hunhee98%2Fpluck/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33759178,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-01T02:00:06.963Z","response_time":115,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-agents","bm25","claude-code","cli","code-intelligence","code-search","codex","context-window","developer-tools","embeddings","llm","mcp","mcp-server","rag","ripgrep","rust","semantic-search","tantivy","token-optimization","tree-sitter"],"created_at":"2026-06-01T03:32:46.970Z","updated_at":"2026-06-01T03:32:48.224Z","avatar_url":"https://github.com/hunhee98.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch2 align=\"center\"\u003e\n  \u003c!-- GPT IMAGE PROMPT: A sleek, modern logo for 'pluck', an AI code search tool. The logo should feature a stylized bird or feather motif, or a fast-moving abstract shape, with a clean tech-focused aesthetic. Use vibrant green and dark blue tones. Transparent background. --\u003e\n  \u003cimg width=\"30%\" alt=\"pluck logo\" src=\"assets/images/pluck_logo.png\"\u003e\u003cbr/\u003e\n  AI 코딩 에이전트를 위한 MCP-네이티브 코드 검색기\u003cbr/\u003e\n  \u003csub\u003e코드 읽기 토큰 84-88 % 절감 · CI 로그 71 % 압축 · 웜 검색 0.07 ms — 모든 수치는 \u003ca href=\"benchmarks/baseline.json\"\u003e\u003ccode\u003ebenchmarks/baseline.json\u003c/code\u003e\u003c/a\u003e의 게이트된 값이에요\u003c/sub\u003e\n\u003c/h2\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003ch2\u003e\n    \u003ca href=\"https://crates.io/crates/pluck-mcp\"\u003e\u003cimg src=\"https://img.shields.io/crates/v/pluck-mcp?color=%23007ec6\u0026label=crates.io\" alt=\"Crates.io version\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/hunhee98/pluck/blob/main/LICENSE\"\u003e\n      \u003cimg src=\"https://img.shields.io/badge/license-MIT-green\" alt=\"License - MIT\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://www.rust-lang.org\"\u003e\u003cimg src=\"https://img.shields.io/badge/rust-1.75%2B-orange.svg\" alt=\"Rust\"\u003e\u003c/a\u003e\n  \u003c/h2\u003e\n\n[빠른 시작](#빠른-시작) •\n[왜 pluck을 써야 할까요?](#왜-pluck을-써야-할까요) •\n[MCP 툴](#mcp-툴) •\n[CLI](#독립-실행-cli-에이전트-없이) •\n[성능 및 토큰 절감](#성능-및-토큰-절감-효과)\n\n\u003c/div\u003e\n\n**pluck**은 AI 에이전트가 코드를 읽고 검색할 때 사용하는 `cat`과 `grep`을 대체하는 로컬 Rust 데몬이에요. MCP(Model Context Protocol)를 통해 심볼(Symbol)을 인식해서 코드를 읽고 검색할 수 있게 해줘요. 스마트 아웃라인은 절감 대상 코드 읽기 토큰을 **84-88 %** 줄이고, CI 로그는 **71 %** 압축하며, 웜 검색은 1밀리초 미만으로 유지돼요. 모든 툴에 `--raw` 폴백을 제공해 에이전트가 pluck을 기본으로 써도 기능 손실이 전혀 없어요.\n\n```\npluck 없이:  ls → grep → cat file1 → cat file2 → cat file3 → ...\npluck 사용:  pluck.plan \"auth-token 만료 버그 수정\" → 다음 3-5 retrieval 호출 추천\n             pluck.search \"auth flow\"            → BM25 + 시맨틱으로 랭킹된 청크\n             pluck.peek validate_token           → 시그니처 + 호출 함수만\n             pluck.symbol validate_token         → 해당 함수 본문만\n             pluck.impact validate_token         → 모든 호출자, depth 제한\n             pluck.deps src/auth/login.ts        → 정/역방향 import 그래프\n             pluck.digest \u003c cargo-build.log      → 71% 짧게, 에러는 그대로\n```\n\n## 빠른 시작\n\n`pluck`은 AI 코딩 에이전트의 기본 검색 도구로 사용되도록 만들어졌어요.\n\n### 1. 에이전트 설정 프롬프트 붙여 넣기\n\n```text\nInstall and configure pluck for this repo.\n\nInstall / register:\n- If pluck is missing, install pluck-mcp and pluck-cli with Cargo or Homebrew.\n- Register pluckd as an MCP server named `pluck` for this repository.\n- Prefer project-scoped config when the agent supports it.\n- Preserve existing MCP servers, rules, hooks, permissions, and comments.\n\nTo make pluck the first retrieval choice:\n- Use the strongest official mechanism this agent supports.\n- Claude Code: use project MCP config or\n  `claude mcp add --transport stdio --scope project pluck -- pluckd --repo \u003crepo-root\u003e`;\n  approve the `pluck` MCP server in settings/permissions when needed; add\n  durable instructions in `CLAUDE.md`; use PreToolUse hooks or permission\n  deny rules only when they can safely redirect repo-local cat/grep/rg/read\n  retrieval to mcp__pluck__* tools.\n- Codex: use `codex mcp add pluck -- pluckd --repo \u003crepo-root\u003e` or\n  `~/.codex/config.toml` / trusted project `.codex/config.toml`; add the\n  pluck-first retrieval policy to `AGENTS.md`.\n- Cursor: use project `.cursor/mcp.json`; add an always-applied Project Rule\n  in `.cursor/rules/` or an `AGENTS.md` instruction for the workspace.\n\nPluck-first retrieval policy:\n- Use mcp__pluck__read before cat, head, tail, sed -n, or built-in file reads\n  for files inside the indexed repo.\n- Use mcp__pluck__search for conceptual code lookup.\n- Use mcp__pluck__grep before grep or rg for exact strings, regexes, TODOs,\n  and all textual matches inside the repo.\n- Use mcp__pluck__peek, mcp__pluck__symbol, mcp__pluck__expand,\n  mcp__pluck__impact, and mcp__pluck__deps for symbol shape, bodies, call\n  chains, refactor impact, and import relationships.\n- Use mcp__pluck__digest before pasting long cargo, npm, pytest, or GitHub\n  Actions logs into context.\n- Fall back to Bash or built-in reads only for binary files, paths outside the\n  repo, byte-exact shell pipelines, unsupported formats, or when pluck is\n  unavailable.\n\nVerify:\n- Restart or reload the agent if MCP changes require it.\n- Confirm the `pluck` MCP server is connected and mcp__pluck__* tools exist.\n- Run one repo code-search/read task and confirm the agent calls mcp__pluck__*\n  before Bash, grep/rg, cat, or built-in file reads.\n- Show the files changed and the verification result.\n```\n\n안전 체크와 폴백 지시를 더 자세히 넣은 버전은\n[전체 에이전트 설치 프롬프트](docs/AGENT_INSTALL.md)를 쓰면 돼요.\n\n### 2. 직접 설정하고 싶다면\n\n```bash\n# crates.io에서 데몬 + 독립 실행형 CLI 설치\ncargo install pluck-mcp pluck-cli\n\n# 또는 Homebrew tap을 통해 설치\nbrew tap hunhee98/pluck \u0026\u0026 brew install pluck\n```\n\n**Claude Code**\n```bash\npluck init --target claude --mode aggressive  # MCP + 권한 + Bash 검색 차단\n```\n*(수동으로 추가하려면 `/plugin marketplace add hunhee98/pluck`을 입력해도 돼요)*\n\n**Codex**\n```bash\npluck init --target codex --mode strong  # MCP + AGENTS.md pluck-first 정책\n```\n\n**Cursor**\n```bash\npluck init --target cursor --mode strong  # MCP + always-apply Cursor rule\n```\n\n## 왜 pluck을 써야 할까요?\n\nAI 에이전트가 기존의 `cat`이나 `grep`으로 코드를 탐색하면 정말 많은 토큰을 낭비하게 돼요. 같은 코드를 반복해서 읽거나, 상관없는 함수까지 스크롤하고, 똑같은 import 구문을 매번 읽다 보면 한 세션에서만 수천 개의 토큰이 버려지거든요.\n\n`pluck`은 에이전트를 위한 전용 코드 검색 계층을 제공해서 이 문제를 해결해요. 핵심은 **에이전트가 코드를 검색할 때 무조건 `pluck`을 기본으로 사용하게 만드는 것**이에요. Bash는 `pluck`이 도와줄 수 없는 경우(예: 바이너리 파일이나 레포지토리 밖의 경로)에만 사용하는 최후의 수단이죠.\n\n- **스마트 아웃라인 (`pluck.read`)**: 1,000줄짜리 파일을 통째로 주는 대신, 시그니처와 아주 작은 helper 본문만 포함한 효율적인 아웃라인을 반환해요. 에이전트는 여기서 필요한 큰 함수 본문만 쏙쏙 골라올 수 있어요.\n- **세션 중복 제거 (Session Dedup)**: 에이전트가 \"auth\"를 검색하고 나중에 \"token\"을 검색했을 때 겹치는 코드가 있다면, 단 1토큰짜리 플레이스홀더(`[already-shown: ...]`)로 대체해요. 이미 에이전트가 알고 있는 내용을 반복해서 알려줄 필요는 없으니까요.\n- **기본적으로 무손실 (Lossless Default)**: 주석을 지우거나 타입을 없애면 에이전트의 판단력이 떨어질 수 있어요. `pluck`은 원본 바이트를 그대로 유지하고, 코드를 축약하는 기능은 원할 때만 켜서 사용할 수 있어요.\n- **100% 역량 보장**: 모든 pluck 도구에는 `cat`이나 `grep`과 바이트 단위로 정확히 동일하게 동작하는 `--raw` 폴백 옵션이 있어요.\n\n## 작동 원리\n\npluck은 Tree-sitter를 사용해 파일을 AST 단위로 청크화해요. 에이전트가 쿼리를 보내면 BM25 (키워드)와 `model2vec` 스타일 정적 임베딩 ([`potion-code-16M`](https://huggingface.co/minishlab/potion-code-16M))을 RRF(reciprocal-rank fusion)로 결합해 청크의 순위를 매겨요. 덕분에 에이전트는 변수명을 정확히 몰라도 \"결제 흐름\" 같은 개념으로 검색할 수 있어요.\n\n\u003c!-- GPT IMAGE PROMPT: A clean, modern architectural diagram showing how 'pluck' works. It should show 'Source files' going into 'Tree-sitter AST chunking', splitting into 'tantivy BM25F index' and 'static model2vec embedding (potion-code-16M)'. These feed into an 'in-RAM index' managed by 'pluckd MCP daemon'. An 'Agent query' comes in, goes through 'BM25 + semantic RRF', 'Noise cutoff', 'Session dedup', and finally returns a 'Ranked snippet'. Use a dark theme with neon green and blue accents. --\u003e\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/images/architecture_overview.png\" alt=\"Architecture Overview\"\u003e\n\u003c/p\u003e\n\n### 세션 중복 제거 동작\n\n\u003c!-- GPT IMAGE PROMPT: A sequence diagram illustrating 'Session dedup'. An 'Agent' asks 'pluckd' for \"auth token\". pluckd returns Chunk A (420 tokens) and Chunk B (380 tokens). Later, the Agent asks for \"session expiry\". pluckd realizes Chunk A was already sent, so it returns a 1-token placeholder [already-shown: chunk A] along with a new Chunk C (340 tokens). The diagram should visually highlight the \"Saved 419 tokens\" aspect. --\u003e\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/images/session_dedup_flow.png\" alt=\"Session Dedup Flow\"\u003e\n\u003c/p\u003e\n\n## MCP 툴\n\n에이전트는 필요에 따라 특정 툴을 호출해요. Bash는 기본값이 아니라 최후의 수단(fallback)이랍니다.\n\n| 툴 (와이어명) | 대체 대상 | 사용 시점 |\n|---------------|-----------|-----------|\n| `mcp__pluck__read` | `cat` | 코드 파일 읽기 (기본은 스마트 아웃라인; `raw: true`로 설정하면 바이트 단위로 정확히 읽어와요) |\n| `mcp__pluck__grep` | `grep` / `rg` | 키워드 검색 (모든 ripgrep 플래그를 래핑했어요) |\n| `mcp__pluck__search` | — | 랭킹된 청크 검색 (BM25 + 시맨틱 RRF) |\n| `mcp__pluck__symbol` | `cat` + 스크롤 | 특정 함수/클래스만 쏙쏙 읽어오기 |\n| `mcp__pluck__peek` | — | 시그니처 + 직접 호출되는 요소(callee)만 확인 |\n| `mcp__pluck__expand` | 여러 번의 `cat` | 심볼 + N홉까지의 호출 체인(callee) 확인 |\n| `mcp__pluck__impact` | grep + 호출자마다 read | 역방향 호출 그래프 — \"이 심볼을 누가 호출해?\" |\n| `mcp__pluck__deps` | grep imports + 파일마다 read | 파일 단위 import 그래프 — \"이 파일이 뭘 의존하나? / 누가 import하나?\" |\n| `mcp__pluck__digest` | `cargo build`/`pytest`/CI 로그를 `cat`으로 파이프 | 장황한 도구 출력을 압축 (에러/패닉은 그대로, 진행 로그는 카운트로 축약) |\n| `mcp__pluck__plan` | 추측성 `search`/`read` 반복 | 자유 형식 task를 받아 다음 3-5 retrieval 호출 + confidence 지표 추천 |\n\n## 독립 실행 CLI (에이전트 없이)\n\n터미널에서 직접 pluck을 사용할 수도 있어요:\n\n```bash\npluck index .\npluck search \"auth flow\" --repo .\npluck read src/auth/login.ts        # 스마트 아웃라인\npluck read src/auth/login.ts --raw  # 바이트 단위 cat과 동일\n```\n\n## 성능 및 토큰 절감 효과\n\n이 페이지의 모든 수치는 동결된 baseline 행 또는 실측 시나리오를 인용해요. 추정 / 희망 수치는 쓰지 않아요.\n\n\u003c!-- GPT IMAGE PROMPT: A bar chart comparing token usage per session between \"bash (rg+cat)\" and \"pluck\". The \"bash\" bar should be high and colored red or gray. The \"pluck\" bar should be lower and colored bright green. The title should be \"Tokens per session\". Clean, modern UI style. --\u003e\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/images/token_savings_chart.png\" alt=\"Token Savings Chart\"\u003e\n\u003c/p\u003e\n\n### 게이트된 엔진 메트릭\n\n[`benchmarks/baseline.json`](benchmarks/baseline.json)에 동결된 불변값이에요. 엔진 코어를 건드리는 모든 커밋은 `scripts/regression-gate.py`로 검사하고, tolerance를 벗어나면 빌드가 막혀요.\n\n| 메트릭 | 값 | `baseline.json`의 row |\n|--------|-----|-----------------------|\n| Chunker p50 (medium, 500줄) | **1.05 ms** | `chunker_medium_ms_p50` |\n| Indexer 처리량 (medium, 500 파일) | **2 747 files/s** | `indexer_files_per_sec_medium` |\n| 웜 검색 p50 (medium) | **0.07 ms** | `warm_search_p50_ms_medium` |\n| 파일 저장 → 검색 가능 p50 | **171 ms** | `freshness_p50_ms_medium` |\n| 세션 중복 제거 절감률 (5-쿼리 벤치) | **23 %** | `session_dedup_session_savings_pct` |\n| `pluck.digest` 로그 압축률 (6개 fixture 중앙값) | **71 %** | `digest_savings_pct` |\n\n### 절감 대상 코드 읽기 토큰 절감\n\n`pluck.read` 아웃라인 모드는 에이전트가 `cat` 비용을 그대로 내지 않게 해줘요. 파일 전체를 쏟아내는 대신 심볼 맵과 아주 작은 helper 본문만 반환하고, 에이전트는 필요한 큰 본문만 가져오면 돼요.\n\n| 읽기 워크로드 | `cat` 토큰 | `pluck.read` 토큰 | 절감률 |\n|---------------|-----------:|------------------:|-------:|\n| medium realistic (함수 5개, 약 120줄) | 929 | 116 | **88 %** |\n| large realistic (함수 25개, 약 600줄) | 4 549 | 556 | **88 %** |\n| xl realistic (함수 100개, 약 2 400줄) | 18 124 | 2 320 | **87 %** |\n| class (클래스 1개 + 메서드 50개) | 8 608 | 1 302 | **85 %** |\n\n작은 파일과 `raw` 읽기는 control case예요. 바이트 단위 폴백이 목적이라 절감률이 거의 없거나 0 %인 게 정상이에요.\n\n### 실측 단일 시나리오 토큰 절감\n\n`fix-auth-token-expiry`: 동일한 JIRA 스타일 작업을 bash 워크플로(`rg -l` + 여러 `cat`) vs pluck 워크플로(`search` + `read` + `symbol`)로 수행. 둘 다 같은 버그를 같은 결론으로 고침:\n\n| 러너 | 사용 토큰 | 출처 |\n|------|-----------|------|\n| bash (`rg + cat`) | 1 248 | [`fix-auth-token-expiry-1778750775.json`](benchmarks/results/fix-auth-token-expiry-1778750775.json) |\n| **pluck** (`search + read + symbol`) | **931 (−25 %)** | 동일 파일 |\n\n`fix` / `refactor` / `explore` / `search` / `review` 시나리오 전반에 걸친 LLM-in-the-loop 측정은 v0.8.0 작업으로 잡혀 있어요. 측정되기 전엔 적지 않아요.\n\n### 기능(Capability) 비교\n\n| 기능 | `cat` + `grep` / `rg` | 다른 코드 검색 도구 | **pluck** |\n|------------|----------------------|-------------------------|-----------|\n| Hybrid BM25 + 시맨틱 랭킹 | ✗ | 대체로 ✓ | ✓ |\n| AST 수준 청크 분할 | ✗ | 대체로 ✓ | ✓ |\n| 영구 데몬 (MCP stdio) | — | ✗ (호출 시마다 콜드 CLI 실행) | **✓** |\n| 영구 디스크 인덱스 (mmap) | — | 대체로 ✗ | ✗ — 로드맵 (v0.7.0) |\n| 증분 재색인 (파일 감시자) | — | 대체로 ✗ | **✓ — 171 ms p50** |\n| **세션 범위 내 중복 제거** | — | ✗ | **✓ — 벤치 기준 23 % 절감** |\n| **`--raw` cat/grep 바이트 동등성** | — | ✗ | **✓** |\n| **기본적으로 무손실, 옵션으로 손실 모드 제공** | — | 도구마다 다름 | **✓** |\n| `peek` (시그니처 + 직접 호출 요소) | ✗ | ✗ | **✓** |\n| 단일 파일 아웃라인 (`pluck.read`) | ✗ | ✗ | **✓** |\n| 다중 홉 `expand` (호출 그래프) | ✗ | ✗ | **✓** |\n| 역방향 호출 그래프 (`impact`) | ✗ | ✗ | **✓** |\n| 파일 단위 import 그래프 (`deps`) | ✗ | ✗ | **✓** |\n| 빌드 / CI / 테스트 로그 압축 (`digest`) | ✗ | ✗ | **✓ — 중앙값 71 %** |\n| 탐색 추천기 (`plan`) | ✗ | ✗ | **✓** |\n\n## 로드맵\n\n- **v0.2.0**: crates.io 첫 발행, MCP 툴, 세션 중복 제거, 스마트 아웃라인,\n  확장된 검색 표면 — `digest`, `impact`, `deps`, `plan`.\n- **v0.3.0**: 자연어 리콜 품질 — 쿼리 확장, 2단계 cascade, NDCG@10 측정.\n- **v0.4.0**: Java + 레포 포맷 커버리지 — Java와 HTML은 반영됨;\n  CSS/SCSS, Markdown/MDX, YAML/JSON/TOML, Dockerfile, Shell은 남아 있음.\n- **v0.5.0**: 시스템 + JVM 티어 — C, C++, Kotlin, SQL, Terraform/HCL.\n- **v0.6.0**: 앱 프레임워크 티어 — Ruby, PHP, Swift, Vue, Svelte, Astro,\n  OpenAPI / GraphQL.\n- **v0.7.0**: 스케일 + 영속성 — mmap index, schema versioning,\n  incremental embedding re-encode, memory/disk cap.\n- **v0.8.0**: 채택 + 관측성 — adoption counter, tool-description A/B harness,\n  LLM-in-loop bench, 다국어 tool description.\n- **v0.9.0**: 워크플로우 지능 + 생태계 — JSON output, `diff`, `history`,\n  `profile`, Aider / OpenHands / Cursor / Cline / Continue.\n- **v1.0.0**: 안정적인 기본 retrieval layer — stable MCP/CLI contract,\n  benchmark dashboard, release checklist, config migration, supply-chain review.\n\n## 라이선스\n\nMIT — 자세한 내용은 [LICENSE](LICENSE)를 참고하세요.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhunhee98%2Fpluck","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhunhee98%2Fpluck","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhunhee98%2Fpluck/lists"}