{
  "id": "cli-tool",
  "title": "CLI Tool",
  "version": 2,
  "description": "단일 바이너리/스크립트, 웹 UI 없음. dev-script / code-migrator / log-analyzer 같은 개발자 도구.",
  "sourceMd": "harness-engineering/playbooks/cli-tool.md",
  "recommendations": {
    "1": "B",
    "2": "A",
    "3": "B",
    "4": "C",
    "5": "A",
    "6": "A",
    "7": "A",
    "8": "A",
    "9": "C",
    "10": "D",
    "11": "C",
    "12": "C",
    "13": "C"
  },
  "recommendationReasons": {
    "1": "dogfooding 이 방법론 결함 발견에 가장 효과적이며 범위 폭주를 막는다.",
    "2": "CLI 도구가 cli-tool 플레이북의 정의 그 자체.",
    "3": "본인 + 소규모 OSS 가 포트폴리오 가치와 유지보수 부담 사이의 균형점.",
    "4": "TypeScript/Node 는 npm 배포 관례에 가장 부합하며 템플릿 처리가 쉽다. Go 도 cli-tool 친화.",
    "5": "프론트엔드 없음이 cli-tool 의 정의 자체.",
    "6": "MVP 는 stateless. 이력/통계가 필요해지면 SQLite 로 승급.",
    "7": "오프라인 원칙은 cli-tool.md 의 핵심 금기 (매 실행 네트워크 체크 금지) 와 일관.",
    "8": "npm publish 가 가장 단순. 단일 바이너리(Go/Rust) 도 동등한 cli-tool 친화.",
    "9": "cli-tool 은 생성 결과 자체가 제품이므로 골든+E2E 의 회귀 방어가 특히 가치 있다.",
    "10": "stateless CLI 가 일반적. 벡터/NoSQL 은 cli-tool 의 정의에서 벗어남.",
    "11": "CLI 는 단일 사용자 도구가 보통 — 인증 불필요.",
    "12": "오프라인 원칙과 LLM 호출이 상충 — 기본은 LLM 미사용.",
    "13": "LLM/임베딩을 안 쓰므로 임베딩 provider 도 무관."
  },
  "scoring": {
    "exactThreshold": 0.85,
    "closeThreshold": 0.6,
    "rules": [
      {
        "questionId": "1",
        "comment": "목적은 cli-tool 적합도와 약한 상관",
        "scores": { "A": 0.9, "B": 1.0, "C": 0.8, "OTHER": 0.6 }
      },
      {
        "questionId": "2",
        "comment": "도메인 카테고리는 가장 강한 playbook 시그널 — CLI = cli-tool",
        "scores": { "A": 1.0, "B": 0.2, "C": 0.3, "OTHER": 0.5 }
      },
      {
        "questionId": "3",
        "comment": "사용자 규모는 cli-tool 적합도와 무관",
        "scores": { "A": 1.0, "B": 1.0, "C": 1.0, "OTHER": 0.8 }
      },
      {
        "questionId": "4",
        "comment": "TS/Node 가 이상, Go 도 강하게 친화. Java/Python 은 가능하지만 보일러플레이트 ↑",
        "scores": { "A": 0.4, "B": 0.7, "C": 1.0, "D": 0.95, "OTHER": 0.7 }
      },
      {
        "questionId": "5",
        "comment": "프론트엔드 없음이 cli-tool 의 핵심 시그널",
        "scores": { "A": 1.0, "B": 0.3, "C": 0.4, "OTHER": 0.4 }
      },
      {
        "questionId": "6",
        "comment": "stateless 가 cli-tool 의 일반 패턴, SQLite 도 로컬 도구로 가능",
        "scores": { "A": 1.0, "B": 0.4, "C": 0.7, "OTHER": 0.5 }
      },
      {
        "questionId": "7",
        "comment": "오프라인이 cli-tool.md 의 명시적 권장",
        "scores": { "A": 1.0, "B": 0.7, "C": 0.2, "OTHER": 0.5 }
      },
      {
        "questionId": "8",
        "comment": "npm 또는 단일 바이너리가 cli-tool 친화. Docker/PaaS 는 cli-tool 과 거리",
        "scores": { "A": 1.0, "B": 0.3, "C": 0.95, "OTHER": 0.6 }
      },
      {
        "questionId": "9",
        "comment": "골든+E2E 가 cli-tool.md 권장",
        "scores": { "A": 0.7, "B": 1.0, "C": 1.0, "OTHER": 0.5 }
      },
      {
        "questionId": "10",
        "comment": "stateless 가 cli-tool 의 일반 패턴. RDB 도 일부 가능 (이력/캐시).",
        "scores": { "A": 0.4, "B": 0.1, "C": 0.3, "D": 1.0, "OTHER": 0.5 }
      },
      {
        "questionId": "11",
        "comment": "단일 사용자 도구가 일반적 — 인증 불필요.",
        "scores": { "A": 0.1, "B": 0.3, "C": 1.0, "OTHER": 0.4 }
      },
      {
        "questionId": "12",
        "comment": "오프라인 원칙과 상충 — LLM 미사용이 기본.",
        "scores": { "A": 0.2, "B": 0.4, "C": 1.0, "OTHER": 0.4 }
      },
      {
        "questionId": "13",
        "comment": "임베딩 미사용이 일관.",
        "scores": { "A": 0.5, "B": 0.5, "C": 1.0, "OTHER": 0.5 }
      }
    ]
  }
}
