{
  "schemaVersion": "1.0",
  "item": {
    "slug": "mij-kakao-local",
    "name": "MIJ Kakao Local API (PowerShell)",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/MunInJun/mij-kakao-local",
    "canonicalUrl": "https://clawhub.ai/MunInJun/mij-kakao-local",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/mij-kakao-local",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=mij-kakao-local",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "references/config.json.template.md",
      "references/kakao_local.ps1.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/mij-kakao-local"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/mij-kakao-local",
    "agentPageUrl": "https://openagent3.xyz/skills/mij-kakao-local/agent",
    "manifestUrl": "https://openagent3.xyz/skills/mij-kakao-local/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/mij-kakao-local/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Kakao Local API Skill",
        "body": "OpenClaw Skill for Kakao Local (Places & Address) API"
      },
      {
        "title": "개요",
        "body": "카카오 로컬 API를 호출하여 주소 정규화 및 장소 검색을 수행하는 OpenClaw Skill입니다."
      },
      {
        "title": "요구사항",
        "body": "Windows\nPowerShell 5.0+\ncurl.exe (Windows 10+ 기본 포함)\nKakao Developers REST API Key"
      },
      {
        "title": "API Key 설정",
        "body": "중요: API Key는 스킬 파라미터로 전달하지 않습니다 (로그 노출 방지)."
      },
      {
        "title": "방법 1: 환경변수 (권장)",
        "body": "# 사용자 환경변수로 영구 설정\n[Environment]::SetEnvironmentVariable(\"KAKAO_REST_API_KEY\", \"your_rest_api_key_here\", \"User\")\n\n# 또는 현재 세션에만 임시 설정\n$env:KAKAO_REST_API_KEY = \"your_rest_api_key_here\""
      },
      {
        "title": "방법 2: Config 파일",
        "body": "skills/kakao-local/data/config.json (create this file) 생성:\n\n{\n  \"api_key\": \"your_rest_api_key_here\"\n}\n\n⚠️ 주의: config.json은 .gitignore에 추가하여 커밋 금지"
      },
      {
        "title": "API Key 발급",
        "body": "Kakao Developers 접속\n내 애플리케이션 → 앱 추가\n앱 키 → REST API 키 복사"
      },
      {
        "title": "1. NormalizeAddress (주소 정규화)",
        "body": "사용자가 입력한 주소를 정규화하여 도로명/지번 주소와 좌표로 변환합니다.\n\nAPI 엔드포인트: GET https://dapi.kakao.com/v2/local/search/address.json\n\n입력 파라미터:\n\n-Action \"NormalizeAddress\" (필수)\n-Query \"주소 문자열\" (필수)\n-Size 3 (선택, 기본값: 3)\n\n출력 형식:\n\n{\n  \"ok\": true,\n  \"action\": \"NormalizeAddress\",\n  \"query\": \"서울 강남구 테헤란로 152\",\n  \"count\": 2,\n  \"candidates\": [\n    {\n      \"roadAddress\": \"서울 강남구 테헤란로 152\",\n      \"jibunAddress\": \"서울 강남구 역삼동 737\",\n      \"x\": \"127.036557561809\",\n      \"y\": \"37.4985995780801\",\n      \"region\": {\n        \"region1\": \"서울\",\n        \"region2\": \"강남구\",\n        \"region3\": \"역삼동\"\n      },\n      \"buildingName\": \"강남파이낸스센터\",\n      \"zoneNo\": \"06236\"\n    }\n  ],\n  \"raw\": {}\n}\n\n사용 예시:\n\n.\\scripts\\kakao_local.ps1 -Action NormalizeAddress -Query \"판교역로 235\"\n.\\scripts\\kakao_local.ps1 -Action NormalizeAddress -Query \"서울 강남구\" -Size 5"
      },
      {
        "title": "2. SearchPlace (키워드 장소 검색)",
        "body": "키워드로 장소를 검색합니다. 위치 기반 반경 검색과 카테고리 필터링을 지원합니다.\n\nAPI 엔드포인트: GET https://dapi.kakao.com/v2/local/search/keyword.json\n\n입력 파라미터:\n\n-Action \"SearchPlace\" (필수)\n-Query \"검색 키워드\" (필수)\n-Size 5 (선택, 기본값: 5, 최대: 15)\n-Page 1 (선택, 기본값: 1, 최대: 45)\n-X \"127.027\" (선택, 중심 경도)\n-Y \"37.498\" (선택, 중심 위도)\n-Radius 1000 (선택, 검색 반경(m), 최대: 20000)\n-CategoryGroupCode \"CE7\" (선택, 카테고리 그룹 코드)\n\n카테고리 그룹 코드:\n\nMT1: 대형마트\nCS2: 편의점\nPS3: 어린이집, 유치원\nSC4: 학교\nAC5: 학원\nPK6: 주차장\nOL7: 주유소, 충전소\nSW8: 지하철역\nBK9: 은행\nCT1: 문화시설\nAG2: 중개업소\nPO3: 공공기관\nAT4: 관광명소\nAD5: 숙박\nFD6: 음식점\nCE7: 카페\nHP8: 병원\nPM9: 약국\n\n출력 형식:\n\n{\n  \"ok\": true,\n  \"action\": \"SearchPlace\",\n  \"query\": \"대형카페\",\n  \"count\": 5,\n  \"totalCount\": 128,\n  \"isEnd\": false,\n  \"items\": [\n    {\n      \"id\": \"8739036\",\n      \"name\": \"스타벅스 강남점\",\n      \"roadAddress\": \"서울 강남구 테헤란로 152\",\n      \"jibunAddress\": \"서울 강남구 역삼동 737\",\n      \"x\": \"127.036557561809\",\n      \"y\": \"37.4985995780801\",\n      \"phone\": \"02-1234-5678\",\n      \"categoryName\": \"음식점 > 카페\",\n      \"placeUrl\": \"http://place.map.kakao.com/8739036\",\n      \"distance\": \"245\"\n    }\n  ],\n  \"raw\": {}\n}\n\n사용 예시:\n\n# 기본 검색\n.\\scripts\\kakao_local.ps1 -Action SearchPlace -Query \"대형카페\"\n\n# 개수 지정\n.\\scripts\\kakao_local.ps1 -Action SearchPlace -Query \"브런치 맛집\" -Size 10\n\n# 위치 기반 반경 검색\n.\\scripts\\kakao_local.ps1 -Action SearchPlace -Query \"카페\" -X \"127.027\" -Y \"37.498\" -Radius 1000\n\n# 카테고리 필터링\n.\\scripts\\kakao_local.ps1 -Action SearchPlace -Query \"카페\" -CategoryGroupCode \"CE7\" -Size 15\n\n# 페이지네이션\n.\\scripts\\kakao_local.ps1 -Action SearchPlace -Query \"주차 가능한 카페\" -Page 2 -Size 10"
      },
      {
        "title": "API Key 없음",
        "body": "{\n  \"ok\": false,\n  \"errorType\": \"MissingApiKey\",\n  \"message\": \"Set KAKAO_REST_API_KEY env var or create config.json\",\n  \"setupGuide\": \"https://developers.kakao.com/\"\n}"
      },
      {
        "title": "API Key 잘못됨 (401/403)",
        "body": "{\n  \"ok\": false,\n  \"errorType\": \"InvalidApiKey\",\n  \"message\": \"Invalid or expired API key\",\n  \"statusCode\": 401\n}"
      },
      {
        "title": "API 호출 실패",
        "body": "{\n  \"ok\": false,\n  \"errorType\": \"ApiError\",\n  \"message\": \"Failed to call Kakao API\",\n  \"details\": \"...\"\n}"
      },
      {
        "title": "결과 없음",
        "body": "{\n  \"ok\": true,\n  \"action\": \"SearchPlace\",\n  \"query\": \"존재하지않는장소12345\",\n  \"count\": 0,\n  \"items\": []\n}"
      },
      {
        "title": "통합 예시 (상위 에이전트/챗봇)",
        "body": "# 주소 정규화 후 즐겨찾기 저장\n$result = .\\skills\\kakao-local\\scripts\\kakao_local.ps1 -Action NormalizeAddress -Query \"홍대입구역\"\n$data = $result | ConvertFrom-Json\n\nif ($data.ok -and $data.count -gt 0) {\n    $best = $data.candidates[0]\n\n    # 즐겨찾기에 추가\n    $places = Get-Content \".\\skills\\kakao-local\\data\\places.json\" -Raw | ConvertFrom-Json\n    $places | Add-Member -NotePropertyName \"홍대\" -NotePropertyValue @{\n        roadAddress = $best.roadAddress\n        x = $best.x\n        y = $best.y\n        savedAt = (Get-Date -Format \"yyyy-MM-dd HH:mm:ss\")\n    } -Force\n    $places | ConvertTo-Json -Depth 10 | Out-File \".\\skills\\kakao-local\\data\\places.json\" -Encoding UTF8\n\n    Write-Host \"✅ 즐겨찾기 저장: 홍대 → $($best.roadAddress)\"\n}\n\n# 장소 검색 후 상위 3개 추천\n$result = .\\skills\\kakao-local\\scripts\\kakao_local.ps1 -Action SearchPlace -Query \"주차 가능한 카페\" -Size 10\n$data = $result | ConvertFrom-Json\n\nif ($data.ok -and $data.count -gt 0) {\n    Write-Host \"`n🌟 추천 장소 TOP 3:\"\n    $top3 = $data.items | Select-Object -First 3\n    $index = 1\n    foreach ($place in $top3) {\n        Write-Host \"`n[$index] $($place.name)\"\n        Write-Host \"    📍 $($place.roadAddress)\"\n        Write-Host \"    📞 $($place.phone)\"\n        Write-Host \"    🔗 $($place.placeUrl)\"\n        $index++\n    }\n\n    # 캐시에 저장 (중복 검색 방지)\n    $cache = @{\n        query = $data.query\n        timestamp = (Get-Date -Format \"yyyy-MM-dd HH:mm:ss\")\n        ttl = 3600  # 1시간\n        results = $data.items\n    }\n    $cache | ConvertTo-Json -Depth 10 | Out-File \".\\skills\\kakao-local\\data\\cache.json\" -Encoding UTF8\n}"
      },
      {
        "title": "1. 주소 정규화 테스트",
        "body": ".\\scripts\\kakao_local.ps1 -Action NormalizeAddress -Query \"서울 강남구 테헤란로 152\"\n# 기대: 도로명/지번 주소와 좌표 출력"
      },
      {
        "title": "2. 장소 검색 테스트",
        "body": ".\\scripts\\kakao_local.ps1 -Action SearchPlace -Query \"대형카페\" -Size 5\n# 기대: 5개 카페 목록 출력"
      },
      {
        "title": "3. API Key 미설정 테스트",
        "body": "# 환경변수 임시 제거\n$backup = $env:KAKAO_REST_API_KEY\n$env:KAKAO_REST_API_KEY = $null\n\n.\\scripts\\kakao_local.ps1 -Action SearchPlace -Query \"카페\"\n# 기대: {\"ok\": false, \"errorType\": \"MissingApiKey\", ...}\n\n# 복구\n$env:KAKAO_REST_API_KEY = $backup"
      },
      {
        "title": "4. 잘못된 API Key 테스트",
        "body": "$env:KAKAO_REST_API_KEY = \"invalid_key_12345\"\n.\\scripts\\kakao_local.ps1 -Action SearchPlace -Query \"카페\"\n# 기대: {\"ok\": false, \"errorType\": \"InvalidApiKey\", ...}"
      },
      {
        "title": "파일 구조",
        "body": "skills/kakao-local/\n  ├── SKILL.md                    # 이 파일 (스킬 명세)\n  ├── README.md                   # Quick Start\n  ├── .gitignore                  # config.json 보호\n  ├── scripts/\n  │   └── kakao_local.ps1         # 메인 스킬 스크립트\n  └── data/\n      ├── config.json.template    # API Key 설정 템플릿\n      ├── places.json             # 즐겨찾기 (선택)\n      └── cache.json              # 검색 캐시 (선택)"
      },
      {
        "title": "라이선스",
        "body": "MIT License"
      },
      {
        "title": "Publish-safe packaging note",
        "body": "This registry upload is \"text-only\" compatible: script sources are embedded under references/ as Markdown.\n\nTo use the skill locally:\n\nCopy references/kakao_local.ps1.md content into a file: scripts/kakao_local.ps1\nCopy references/config.json.template.md content into: data/config.json.template\nSet API key via env var KAKAO_REST_API_KEY (recommended) or create data/config.json (gitignored)."
      }
    ],
    "body": "Kakao Local API Skill\n\nOpenClaw Skill for Kakao Local (Places & Address) API\n\n개요\n\n카카오 로컬 API를 호출하여 주소 정규화 및 장소 검색을 수행하는 OpenClaw Skill입니다.\n\n요구사항\nWindows\nPowerShell 5.0+\ncurl.exe (Windows 10+ 기본 포함)\nKakao Developers REST API Key\nAPI Key 설정\n\n중요: API Key는 스킬 파라미터로 전달하지 않습니다 (로그 노출 방지).\n\n방법 1: 환경변수 (권장)\n# 사용자 환경변수로 영구 설정\n[Environment]::SetEnvironmentVariable(\"KAKAO_REST_API_KEY\", \"your_rest_api_key_here\", \"User\")\n\n# 또는 현재 세션에만 임시 설정\n$env:KAKAO_REST_API_KEY = \"your_rest_api_key_here\"\n\n방법 2: Config 파일\n\nskills/kakao-local/data/config.json (create this file) 생성:\n\n{\n  \"api_key\": \"your_rest_api_key_here\"\n}\n\n\n⚠️ 주의: config.json은 .gitignore에 추가하여 커밋 금지\n\nAPI Key 발급\nKakao Developers 접속\n내 애플리케이션 → 앱 추가\n앱 키 → REST API 키 복사\n스킬 함수\n1. NormalizeAddress (주소 정규화)\n\n사용자가 입력한 주소를 정규화하여 도로명/지번 주소와 좌표로 변환합니다.\n\nAPI 엔드포인트: GET https://dapi.kakao.com/v2/local/search/address.json\n\n입력 파라미터:\n\n-Action \"NormalizeAddress\" (필수)\n-Query \"주소 문자열\" (필수)\n-Size 3 (선택, 기본값: 3)\n\n출력 형식:\n\n{\n  \"ok\": true,\n  \"action\": \"NormalizeAddress\",\n  \"query\": \"서울 강남구 테헤란로 152\",\n  \"count\": 2,\n  \"candidates\": [\n    {\n      \"roadAddress\": \"서울 강남구 테헤란로 152\",\n      \"jibunAddress\": \"서울 강남구 역삼동 737\",\n      \"x\": \"127.036557561809\",\n      \"y\": \"37.4985995780801\",\n      \"region\": {\n        \"region1\": \"서울\",\n        \"region2\": \"강남구\",\n        \"region3\": \"역삼동\"\n      },\n      \"buildingName\": \"강남파이낸스센터\",\n      \"zoneNo\": \"06236\"\n    }\n  ],\n  \"raw\": {}\n}\n\n\n사용 예시:\n\n.\\scripts\\kakao_local.ps1 -Action NormalizeAddress -Query \"판교역로 235\"\n.\\scripts\\kakao_local.ps1 -Action NormalizeAddress -Query \"서울 강남구\" -Size 5\n\n2. SearchPlace (키워드 장소 검색)\n\n키워드로 장소를 검색합니다. 위치 기반 반경 검색과 카테고리 필터링을 지원합니다.\n\nAPI 엔드포인트: GET https://dapi.kakao.com/v2/local/search/keyword.json\n\n입력 파라미터:\n\n-Action \"SearchPlace\" (필수)\n-Query \"검색 키워드\" (필수)\n-Size 5 (선택, 기본값: 5, 최대: 15)\n-Page 1 (선택, 기본값: 1, 최대: 45)\n-X \"127.027\" (선택, 중심 경도)\n-Y \"37.498\" (선택, 중심 위도)\n-Radius 1000 (선택, 검색 반경(m), 최대: 20000)\n-CategoryGroupCode \"CE7\" (선택, 카테고리 그룹 코드)\n\n카테고리 그룹 코드:\n\nMT1: 대형마트\nCS2: 편의점\nPS3: 어린이집, 유치원\nSC4: 학교\nAC5: 학원\nPK6: 주차장\nOL7: 주유소, 충전소\nSW8: 지하철역\nBK9: 은행\nCT1: 문화시설\nAG2: 중개업소\nPO3: 공공기관\nAT4: 관광명소\nAD5: 숙박\nFD6: 음식점\nCE7: 카페\nHP8: 병원\nPM9: 약국\n\n출력 형식:\n\n{\n  \"ok\": true,\n  \"action\": \"SearchPlace\",\n  \"query\": \"대형카페\",\n  \"count\": 5,\n  \"totalCount\": 128,\n  \"isEnd\": false,\n  \"items\": [\n    {\n      \"id\": \"8739036\",\n      \"name\": \"스타벅스 강남점\",\n      \"roadAddress\": \"서울 강남구 테헤란로 152\",\n      \"jibunAddress\": \"서울 강남구 역삼동 737\",\n      \"x\": \"127.036557561809\",\n      \"y\": \"37.4985995780801\",\n      \"phone\": \"02-1234-5678\",\n      \"categoryName\": \"음식점 > 카페\",\n      \"placeUrl\": \"http://place.map.kakao.com/8739036\",\n      \"distance\": \"245\"\n    }\n  ],\n  \"raw\": {}\n}\n\n\n사용 예시:\n\n# 기본 검색\n.\\scripts\\kakao_local.ps1 -Action SearchPlace -Query \"대형카페\"\n\n# 개수 지정\n.\\scripts\\kakao_local.ps1 -Action SearchPlace -Query \"브런치 맛집\" -Size 10\n\n# 위치 기반 반경 검색\n.\\scripts\\kakao_local.ps1 -Action SearchPlace -Query \"카페\" -X \"127.027\" -Y \"37.498\" -Radius 1000\n\n# 카테고리 필터링\n.\\scripts\\kakao_local.ps1 -Action SearchPlace -Query \"카페\" -CategoryGroupCode \"CE7\" -Size 15\n\n# 페이지네이션\n.\\scripts\\kakao_local.ps1 -Action SearchPlace -Query \"주차 가능한 카페\" -Page 2 -Size 10\n\n에러 처리\nAPI Key 없음\n{\n  \"ok\": false,\n  \"errorType\": \"MissingApiKey\",\n  \"message\": \"Set KAKAO_REST_API_KEY env var or create config.json\",\n  \"setupGuide\": \"https://developers.kakao.com/\"\n}\n\nAPI Key 잘못됨 (401/403)\n{\n  \"ok\": false,\n  \"errorType\": \"InvalidApiKey\",\n  \"message\": \"Invalid or expired API key\",\n  \"statusCode\": 401\n}\n\nAPI 호출 실패\n{\n  \"ok\": false,\n  \"errorType\": \"ApiError\",\n  \"message\": \"Failed to call Kakao API\",\n  \"details\": \"...\"\n}\n\n결과 없음\n{\n  \"ok\": true,\n  \"action\": \"SearchPlace\",\n  \"query\": \"존재하지않는장소12345\",\n  \"count\": 0,\n  \"items\": []\n}\n\n통합 예시 (상위 에이전트/챗봇)\n# 주소 정규화 후 즐겨찾기 저장\n$result = .\\skills\\kakao-local\\scripts\\kakao_local.ps1 -Action NormalizeAddress -Query \"홍대입구역\"\n$data = $result | ConvertFrom-Json\n\nif ($data.ok -and $data.count -gt 0) {\n    $best = $data.candidates[0]\n\n    # 즐겨찾기에 추가\n    $places = Get-Content \".\\skills\\kakao-local\\data\\places.json\" -Raw | ConvertFrom-Json\n    $places | Add-Member -NotePropertyName \"홍대\" -NotePropertyValue @{\n        roadAddress = $best.roadAddress\n        x = $best.x\n        y = $best.y\n        savedAt = (Get-Date -Format \"yyyy-MM-dd HH:mm:ss\")\n    } -Force\n    $places | ConvertTo-Json -Depth 10 | Out-File \".\\skills\\kakao-local\\data\\places.json\" -Encoding UTF8\n\n    Write-Host \"✅ 즐겨찾기 저장: 홍대 → $($best.roadAddress)\"\n}\n\n# 장소 검색 후 상위 3개 추천\n$result = .\\skills\\kakao-local\\scripts\\kakao_local.ps1 -Action SearchPlace -Query \"주차 가능한 카페\" -Size 10\n$data = $result | ConvertFrom-Json\n\nif ($data.ok -and $data.count -gt 0) {\n    Write-Host \"`n🌟 추천 장소 TOP 3:\"\n    $top3 = $data.items | Select-Object -First 3\n    $index = 1\n    foreach ($place in $top3) {\n        Write-Host \"`n[$index] $($place.name)\"\n        Write-Host \"    📍 $($place.roadAddress)\"\n        Write-Host \"    📞 $($place.phone)\"\n        Write-Host \"    🔗 $($place.placeUrl)\"\n        $index++\n    }\n\n    # 캐시에 저장 (중복 검색 방지)\n    $cache = @{\n        query = $data.query\n        timestamp = (Get-Date -Format \"yyyy-MM-dd HH:mm:ss\")\n        ttl = 3600  # 1시간\n        results = $data.items\n    }\n    $cache | ConvertTo-Json -Depth 10 | Out-File \".\\skills\\kakao-local\\data\\cache.json\" -Encoding UTF8\n}\n\n테스트 시나리오\n1. 주소 정규화 테스트\n.\\scripts\\kakao_local.ps1 -Action NormalizeAddress -Query \"서울 강남구 테헤란로 152\"\n# 기대: 도로명/지번 주소와 좌표 출력\n\n2. 장소 검색 테스트\n.\\scripts\\kakao_local.ps1 -Action SearchPlace -Query \"대형카페\" -Size 5\n# 기대: 5개 카페 목록 출력\n\n3. API Key 미설정 테스트\n# 환경변수 임시 제거\n$backup = $env:KAKAO_REST_API_KEY\n$env:KAKAO_REST_API_KEY = $null\n\n.\\scripts\\kakao_local.ps1 -Action SearchPlace -Query \"카페\"\n# 기대: {\"ok\": false, \"errorType\": \"MissingApiKey\", ...}\n\n# 복구\n$env:KAKAO_REST_API_KEY = $backup\n\n4. 잘못된 API Key 테스트\n$env:KAKAO_REST_API_KEY = \"invalid_key_12345\"\n.\\scripts\\kakao_local.ps1 -Action SearchPlace -Query \"카페\"\n# 기대: {\"ok\": false, \"errorType\": \"InvalidApiKey\", ...}\n\n파일 구조\nskills/kakao-local/\n  ├── SKILL.md                    # 이 파일 (스킬 명세)\n  ├── README.md                   # Quick Start\n  ├── .gitignore                  # config.json 보호\n  ├── scripts/\n  │   └── kakao_local.ps1         # 메인 스킬 스크립트\n  └── data/\n      ├── config.json.template    # API Key 설정 템플릿\n      ├── places.json             # 즐겨찾기 (선택)\n      └── cache.json              # 검색 캐시 (선택)\n\n라이선스\n\nMIT License\n\nPublish-safe packaging note\n\nThis registry upload is \"text-only\" compatible: script sources are embedded under references/ as Markdown.\n\nTo use the skill locally:\n\nCopy references/kakao_local.ps1.md content into a file: scripts/kakao_local.ps1\nCopy references/config.json.template.md content into: data/config.json.template\nSet API key via env var KAKAO_REST_API_KEY (recommended) or create data/config.json (gitignored)."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/MunInJun/mij-kakao-local",
    "publisherUrl": "https://clawhub.ai/MunInJun/mij-kakao-local",
    "owner": "MunInJun",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/mij-kakao-local",
    "downloadUrl": "https://openagent3.xyz/downloads/mij-kakao-local",
    "agentUrl": "https://openagent3.xyz/skills/mij-kakao-local/agent",
    "manifestUrl": "https://openagent3.xyz/skills/mij-kakao-local/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/mij-kakao-local/agent.md"
  }
}