| name | ipzitalk-location-report |
| description | 주소 또는 단지명을 입력받아 교통·생활·교육 환경을 한 번에 분석해 세부 입지 보고서(통합 HTML 리포트 + 종합 지도)를 생성한다. "세부 입지", "입지 분석", "입지 보고서", "이 사업지 입지 어때", "입지 종합", "주변 환경 종합" 등의 표현이 있으면 이 스킬을 사용한다. 단일 분야만 물으면(교통만/학군만) 해당 단일 스킬을 쓴다. 점수화는 입지 평가 스킬로 분리한다.
|
| version | 1.3.5 |
| license | proprietary |
세부 입지 보고서 (조립 · L2)
tier: L2
주소/단지명 하나로 교통 + 생활 + 교육을 종합해 대표 보고용 리포트를 만든다.
※ 각 분야의 직선거리·개수 근사와 hedge를 그대로 승계한다. 정성 판단·우열 단정 금지.
※ 점수를 매기지 않는다. 종합 점수화는 location-score(입지 평가) 담당.
전제: 입지톡 MCP (🚨 없으면 실행하지 않는다)
이 스킬의 모든 데이터 조회는 입지톡(ipzitalk) Remote MCP 서버(https://ipzi-talk.synergylabs.kr/mcp)의 도구로만 한다.
아래 문서에서 get_address·search_by_nearby_category·search_by_nearby_keyword·get_map_embed_url 처럼 접두사 없이 적힌 이름은 전부 이 서버의 도구를 가리킨다.
- 문서의 접두사 없는 이름은 기본 도구명(base tool name) 이다. 먼저 연결된 도구 목록에서 같은 기본 도구명을 찾고,
ipzitalk-remote 플러그인의 ipzitalk 서버 provenance가 확인되는 도구만 우선 사용한다. Codex에서는 실제 호출 이벤트의 server: ipzitalk과 기본 도구명을 기준으로 확인한다.
presale-mcp 또는 다른 로컬 MCP provenance의 동명 도구는 Remote Skill의 대체 수단으로 사용하지 않는다. provenance를 확인할 수 없거나 같은 기본 도구명이 여러 서버에 있어 모호하면 임의 선택하지 말고 중단하여 필요한 Remote 도구명을 안내한다.
- 클라이언트가 provenance를 구조적으로 제공하지 않을 때만 다음 명시적 fallback을 순서대로 확인한다:
mcp__plugin_ipzitalk-remote_ipzitalk__<도구명>, mcp__ipzitalk_mcp__<도구명>, mcp__ipzitalk__<도구명>, mcp__claude_ai_ipzitalk__<도구명>. fallback으로도 Remote 출처가 유일하지 않으면 중단한다.
- 🚨 이름이 비슷한 다른 MCP 서버의 도구로 대체하지 않는다(예: 다른 부동산/지도 커넥터의 유사 도구). 출처가 달라지면 값의 근거가 무너진다.
- 🚨 입지톡 MCP가 연결돼 있지 않으면 즉시 중단하고 연결을 요청한다. 웹 검색·모델 지식·추정값으로 대체해서 보고서를 만들지 않는다. 값 창작 금지가 이 스킬의 1원칙이다.
입력
| 파라미터 | 필수 | 기본 | 설명 |
|---|
address 또는 complex_query | ✅(택1) | - | 주소 또는 단지명 |
radius_m | ✕ | 1500 | 근린 축 검색·사용자 표시·통합 지도 원의 공통 반경. 최대 5,000m. 광역 축(철도·터미널·대학)에는 미적용 |
후보 다수면 자동 확정 말고 선택받는다. ⚠️ 3개 분야 종합 = 검색 다수 → 크레딧·시간 소요 큼.
조립 방식 (방법1 · 복사본)
스킬 간 호출은 불가하다. 하위 스킬을 부르지 않고, 스킬 폴더 안 references/의 복사본을 읽어 각 단계를 이 실행 안에서 수행한다.
references/transit-workflow.md 교통 환경
references/living-workflow.md 생활 환경
references/education-workflow.md 교육 환경
워크플로우
- 논리적 center 해소 1회 — 입력 유형별로 아래 하나의 체인만 실행해 표준번들(좌표·region_code·bjd)을 확정한다. 후보 다수 → 선택.
- 단지명(
complex_query)은 get_complex_info(detail=true)를 먼저 1회 호출한다. 좌표가 없으면 그 응답의 공식 도로명 또는 지번 주소로 get_geocode를 한 번만 호출한다. 단지 해소가 성공한 뒤 get_address를 호출하거나 모델하우스 검색을 반복하는 것은 금지한다.
- 주소 입력은
resolve-site 규약의 주소 resolver를 1회 사용한다. 좌표를 반환하면 보강용 get_geocode를 호출하지 않고 없는 보조 필드는 null로 둔다.
- 3분야가 확정된 center를 공유하며 이후 재해소하지 않는다. 허용된 단지 체인은 MCP 2콜이어도 논리적 center 확정은 1회다.
- 교통 환경 —
references/transit-workflow.md를 읽어 검색·밴드·등급 단계를 center로 실행.
- 생활 환경 —
references/living-workflow.md를 읽어 실행.
- 교육 환경 —
references/education-workflow.md를 읽어 실행.
- 종합 지도 (1콜) — 입력
radius_m과 같은 반경 원 + 3분야 대표 마커. 아래 지도 규칙 준수.
- 조립·출력 — 채팅 요약 +
result.json 및 호출 ledger out/ipzitalk-location-report/audit.json 저장 → 출력 형식(html/pptx/docx) 1개 필수 선택 후 렌더. 아래 출력 포맷 참조. 모든 정본 산출물과 과정 문서는 out/ipzitalk-location-report/ 안에만 저장하고 작업 루트에 중복 파일을 만들지 않는다.
호출 ledger·검색 사실 계약 🚨
- 검색·지도 고정분은 교통 3회 + 생활 7회 + 교육 5회 + 지도 1회인 16회다. 여기에 실제 center 해소 호출 수를 더한다. 주소 resolver가 1콜이면 기본 경로는 총 17회, 단지 공식주소 geocode 체인이 2콜이면 총 18회다. reference의 0건 fallback만 그 밖의 조건부 추가 호출이며
reason allowlist로 구분한다.
- 각 MCP 호출 직후 최초 반환을 바로
out/ipzitalk-location-report/audit.json에 skillBaseDirectory, axis, baseToolName, query 또는 category, radius_m, resultCount, truncated, provenance와 함께 한 행씩 누적한다. 조건부 재호출은 reason도 기록하고, 파일 도구·실행 환경은 shellUsed, webUsed, generatedFiles로 별도 기록한다.
- 최종 도구별 횟수와 총합은
audit.json 행에서 자동 집계한다. 중간 자연어 메모를 더해 수기로 합계를 만들지 않는다.
- 감사 누락 복구·보완을 위한 MCP 재호출은 금지한다. 병렬 출력 표시 누락이나 ledger 기록 실패가 생기면 기존 최초 반환으로 복구하고, 불가능하면
auditIncomplete:true로 남긴 뒤 재조회하지 않는다.
audit.json의 총 호출 수를 16 + center 해소 호출 수 + 허용된 0건 fallback 수와 비교한다. center 체인은 complex_info·official_address_geocode처럼 각 단계와 사유를 기록하고, 그 밖의 초과 행에 allowlist reason이 없으면 완료 처리하지 않는다.
radius_m은 근린 검색·통합 지도 원·지도 캡션에서 같은 의미와 값을 사용한다. 광역 축은 radius_m: null로 ledger에 구분한다.
- 구청은 검색하지 않는다. 검색 신뢰도 한계로 평가 제외라고만 쓰며, 호출하지 않은 구청을
0건으로 표현하지 않는다.
- 최근접 시설은 운영상태 제외 전 후보, 제외 후 후보, 최종 선택 사유를
audit.json의 selection에 남긴다. 고정 fixture는 값 자체가 아니라 center·검색 인자·필터·정렬의 재현성을 검증한다.
- 최종 응답은
audit.json에서 도구별 호출 횟수, Remote provenance, Skill base directory, shell/web 사용 여부, 생성 파일을 계산해 보고한다.
등급 · tone 매핑 (🚨 임의 판단 금지)
axes[].stars / axes[].tone / sections[].tone / sections[].gradeLabel 은 아래 표대로만 쓴다.
| 등급 | stars | tone | gradeLabel |
|---|
| 우수 | 3 | g | ★★★ 우수 |
| 양호 | 2 | y | ★★☆ 양호 |
| 미흡 | 1 | o | ★☆☆ 미흡 |
| 판정 유보(표본·데이터 부족) | null | x | 판정 유보 |
r(red)는 등급에 쓰지 않는다. pills[].tone 도 같은 토큰을 쓴다(강점 pill = g).
- 항목 밴드의
보통: 지하철·상권·공원·공공기관 밴드는 4단계(우수/양호/보통/미흡)다. 여기서의 보통은 축 등급으로 접을 때 y(양호)가 아니라 하위 기여다(대부분 보통~미흡 → ★☆☆). 축 등급 라벨에는 보통을 쓰지 않는다 — 위 표의 4개만 쓴다. 3단계 밴드(중·고, 철도, 터미널)의 가운데는 양호다.
- 🚨 누락·정합성 단서는 경고로 키우지 않는다.
truncated, 데이터 부족, 확인 필요 같은 문구는 포인트 컬러·굵은 글씨로 강조하지 말고 회색 각주로 작게, 블록 구석에 단다. 사고가 난 게 아니라 데이터 한계일 뿐이다.
- 등급 경계는 각
references/*-workflow.md 의 밴드 기준을 따른다. 여기서 새로 만들지 않는다.
지도 규칙 (조립 특화)
- 하나의 근린 지도에 3분야 대표 마커를 모은다. 분야별로 색을 나눈다.
- 교통: 아래 노선색 표 사용. 표에 없는 노선은 색을 지어내지 말고 기본 회색
#6B7280.
- 생활:
#16a34a · 교육(초등) #f59e0b · 교육(중·고) #ea580c · SITE #2563eb
노선색 표 (공식 노선색)
| 노선 | 색 | 노선 | 색 |
|---|
| 1호선 | #0052A4 | 신분당선 | #D4003B |
| 2호선 | #00A84D | 수인분당선 | #FABE00 |
| 3호선 | #EF7C1C | 경의중앙선 | #77C4A3 |
| 4호선 | #00A5DE | 공항철도 | #0090D2 |
| 5호선 | #996CAC | 경춘선 | #0C8E72 |
| 6호선 | #CD7C2F | 우이신설선 | #B7C452 |
| 7호선 | #747F00 | 신림선 | #6789CA |
| 8호선 | #E6186C | 김포골드라인 | #A17E46 |
| 9호선 | #BB8336 | 서해선 | #81A914 |
| 인천1호선 | #7CA8D5 | 인천2호선 | #ED8B00 |
| 의정부경전철 | #FDA600 | 용인에버라인 | #56AD2D |
| 부산1호선 | #F06A00 | 부산2호선 | #81BF48 |
| 부산3호선 | #BB8C00 | 부산4호선 | #217DCB |
| 대구1호선 | #D93F5C | 대구2호선 | #00AA80 |
| 대구3호선 | #FFB100 | 대전1호선 | #007448 |
| 광주1호선 | #009088 | 그 외 | #6B7280 |
- 광역 축(철도 12km·터미널 15km·대학 3km)은 지도에 넣지 않는다. 마커 bounds를 망가뜨린다. 표로만 다룬다.
- 🚨 반경 눈금 마커를 넣지 않는다. 예전엔
fitBounds가 반경 원을 무시해 원이 잘리는 걸 막으려고
정북·남·동·서에 회색 더미 마커 4개를 심었다. 사용자에게는 정체를 알 수 없는 점으로 보여 혼란만 준다.
원이 잘리더라도 마커는 실제 장소만 찍는다. (근본 해결은 render.ts가 원을 bounds에 포함하도록 고치는 것 — 발견사항 6번)
center + radius_m 항상 함께, 마커 2개 이상.
- 카드 CSS:
.map{overflow-x:auto; overflow-y:hidden} + .map iframe{display:block; min-width:720px}.
overflow:hidden만 주면 iframe이 카드 폭에 짓눌려 지도가 최소 줌(한반도)으로 떨어진다.
- 🚨 지도 링크는 발급 후 7일 만료(
map_payloads TTL). 산출물 지도 캡션에 유효기간과 재발급 필요를 반드시 적는다.
만료 시 iframe이 빈 화면이 되는데, 원인 표기가 없으면 리포트가 고장난 것처럼 보인다.
출력 포맷
1단계 — result.json (항상 만든다)
분석이 끝나면 먼저 result.json 하나를 저장한다. 모든 렌더러의 유일한 입력이다.
- 스키마 =
templates/result.html 의 templateDataShape 객체와 동일한 필드(그게 곧 JSON 스키마다) + disclaimer.
필드: brand · title · subtitle · pills[] · map{url,caption,ttlNote} · summary · axes[] · sections[] · wide · manual[] · hedges[] · sources[] · collectedAt · disclaimer
각 필드의 의미·허용값은 템플릿 templateDataShape의 주석이 정본이다(값 없으면 null, 절대 0·추정값으로 채우지 않는다).
disclaimer 값(고정):
입지톡 베타 결과물입니다. 공식 데이터에 없는 값은 임의로 채우지 않지만, 신고·갱신 지연이나 조회 실패, 단지명 매칭 문제, 검색 건수 제한으로 일부 정보가 누락될 수 있습니다. 기준년월과 공식 원문을 확인해 주세요.
- 채팅에는 축별 등급 + 한줄평 + 강점/약점 각 1개를 요약한다.
2단계 — 출력 형식 선택 (🚨 필수. 옵션 아님)
result.json 저장 직후, 사용자가 형식을 미리 지정하지 않았다면 반드시 묻고 답을 기다린다.
어떤 형식으로 만들어 드릴까요? (1) HTML (2) PPTX (3) DOCX — 하나를 선택해 주세요.
선택된 1개만 렌더한다. 요청 없이 여러 형식을 만들지 않는다. 세 렌더러 모두 result.json만 읽고 레이아웃은 고정이다(데이터만 통째로 갈아끼운다).
| 선택 | 절차 | 산출 |
|---|
| (1) HTML | templates/result.html 복사 → 비실행 ipzi-data JSON 블록을 result.json 내용으로 통째 치환. 마크업·CSS·렌더 JS는 손대지 않는다 | <대상>_입지보고서.html (동적 지도 iframe) |
| (2) PPTX | python3 templates/build_pptx.py result.json <대상>_입지보고서.pptx (pip install python-pptx) | <대상>_입지보고서.pptx — HTML 리포트와 같은 다크 스타일(동일 토큰). 표지 → 종합요약(좌: 지도 / 우: 요약·축 카드 2분할) → 섹션별 표(등급 pill·밴드·회색 각주) → 광역축 → 유의사항. 표는 한 장에 8행까지 |
| (3) DOCX | python3 templates/build_docx.py result.json <대상>_입지보고서.docx (pip install python-docx) | <대상>_입지보고서.docx — 상단에 지도 이미지 + 동적 지도 링크 |
- 베타 고지 문구는 세 템플릿 모두에 이미 박혀 있다. 렌더 후 따로 덧붙이지 않는다.
- 렌더러가 실패하면(모듈 없음 등) 조용히 다른 형식으로 바꾸지 말고 원인을 알린다.
HTML 산출물 계약 🚨
result.json·audit.json은 모든 렌더러가 공유하는 내부 계약용 고정 이름으로 유지한다. 사용자 전달 HTML·PPTX·DOCX만 같은 <대상>_입지보고서 basename을 쓴다.
<대상>은 resolver가 확정한 공식 단지명이다. 주소 입력에서 공식 단지명이 없으면 정규화 주소를 사용하며, 둘 다 없으면 이름을 지어내지 말고 ipzitalk-location-report로 폴백한다.
- HTML은
out/ipzitalk-location-report/<대상>_입지보고서.html에 저장한다. 셸 사용이 허용된 환경에서는 스킬 기준 ../../scripts/html_artifact_contract.mjs 검증기를 --file-name "<대상>_입지보고서"와 함께 사용한다. --skill-dir에는 이 스킬의 base directory, --data에는 result.json, --output-root에는 작업공간의 out 디렉터리를 전달한다.
shell-free 또는 셸 금지 환경에서는 File Read/Write로 templates/result.html을 직접 읽고 ipzi-data JSON 블록만 교체한다. 교체 전후의 fixed template region(고정 영역: 데이터 블록 앞 prefix와 뒤 suffix)이 원본과 같은지 비교한다.
- 사용자가 완료 뒤 다른 형식을 추가 요청하면 같은 basename으로 렌더하고 MCP는 재호출하지 않는다.
audit.json.generatedFiles에는 실제 최종 파일명과 경로를 추가하고 과정 문서도 갱신한다.
- 검증기가 통과하기 전에는 완료로 주장하지 않는다. File Read/Write나 고정 영역 비교를 수행할 수 없거나 금지된 도구를 사용했다면 완료 처리하지 말고 제약과 실제 사용 도구를 보고한다.
지도: 동적 지도를 헤드리스 Chrome으로 캡처한다
PPTX·DOCX에는 iframe을 넣을 수 없으므로 지도 이미지 파일이 필요하다. templates/mapshot.py 가 map.url(= get_map_embed_url 결과) 페이지를 설치된 Chrome 헤드리스로 캡처한다. 반경 원·마커 라벨이 그대로 들어온다. 두 렌더러가 알아서 호출하므로 스킬이 따로 할 일은 result.json 의 map.url 을 채우는 것뿐이다.
-
지도 이미지를 이미 로컬에 갖고 있으면 3번째 인자로 넘긴다: build_pptx.py result.json out.pptx map.png
-
Chrome이 없거나 캡처가 실패하면 지도 없이 렌더하고 경고만 남긴다. 리포트는 멈추지 않는다.
-
get_static_map 도구는 이미지를 대화창에만 반환하고 파일로 저장되지 않는다. 산출물 렌더링에 쓰지 않는다.
-
지도 링크는 발급 후 7일 만료다. 만료 뒤에는 캡처도 빈 화면이 되므로 재발급이 필요하다.
-
HTML 리포트 구성: 상단 pill(트리플 역세권 등) → 종합 지도 히어로 → 종합 요약 + 축 카드 3개 → 교통/생활/교육 3섹션(밴드 + 근거 표) → 수기 편집 영역 → 출처·hedge·베타고지 푸터.
-
디자인 규칙(스킬 폴더 밖 문서에 의존하지 않도록 여기 인라인):
- CDN·외부 폰트·이모지 금지. 아이콘은
<symbol> 인라인 + <use> 참조로 self-contained.
- 라이트/다크 양쪽 스타일.
prefers-color-scheme + :root[data-theme] 모두 대응.
- 토큰만 사용:
--g/--y/--o/--r/--x/--brand/--up/--down/--zebra (+ -s 배경 변형).
★·☆는 활자 기호이며 이모지가 아니다. 등급 표기에 사용 가능.
필수 단서 · 금지 표현
- 필수: 하위 3분야의 hedge를 전부 승계한다 — 직선거리 기준 · 배정/학군 미확인(타 자치구 배정주의 + 학구도 링크) · 학원 개수는 계열 무관 총계 · 45건 캡으로 목록 불완전 가능 · 구청 0건은 검색 한계이지 부재 아님 · 출처·조회일.
- 금지: 점수·총점 산출(입지 평가 스킬의 몫) · "입지 우수 확정" 등 우열 단정 · 개통예정 호재 자동 반영(수기 편집 영역).
엣지 · 실패 처리
| 상황 | 처리 |
|---|
지오코딩 실패 / NOT_FOUND | 재입력 요청 |
후보 다수 / AMBIGUOUS | 후보(지역 포함) 나열 후 선택 |
| 특정 분야 전 축 0건 | 해당 섹션 "없음/원거리" 명시. 나머지 분야는 정상 렌더 |
metadata.truncated = true | "목록 불완전" 경고 표기(등급은 유지 — 최근접은 정확) |
| 지하철 0건 | 교통 등급을 철도·터미널로 대체 판정(transit-workflow 참조) |
검증된 사항 (방배롯데캐슬아르떼 · 서울 서초구 방배동 424-28 · 조회 2026-07-09)
A그룹 단독 스킬 3종의 검증값을 재사용해 조립했다. 신규 POI 호출 0건, 지도 1콜(1크레딧).
| 축 | 등급 | 근거 |
|---|
| 교통 | ★★★ 우수 | 지하철 279m · 터미널 2.8km · 철도 5.4km(도심 입지 보정) · 트리플 역세권{7,4,2} |
| 생활 | ★★☆ 양호 | 공원 137m · 도서관 425m · 주민센터 428m · SSM 320m · 백화점 0건 |
| 교육 | ★★☆ 양호 | 초등 425m(동작구·배정주의) · 중 613m · 고 702m · 대학 3곳 · 학원 59곳 |
- 지도 (마커 12 = 기준 단지 + 교통 4 + 생활 3 + 교육 4, 원 1,000m). 실제 장소만 찍는다.
- 조립 파이프라인 검증:
references/ 복사본 3종을 읽어 실행하는 방식이 동작함을 확인. 마스터 갱신(2026-07-09) 후 9개 사본 재배포 완료.
- 광역 축(철도·터미널·대학)을 지도에서 뺀 이유: 5.4km·15km 마커가 들어가면 근린 1km 원이 점이 된다.
섹션마다 출처를 작게 단다
데이터 블록 하단에 .src 한 줄. 도구·API 이름은 쓰지 않는다. 사용자가 아는 기관명만.
| 블록 | 출처 표기 |
|---|
| 단지 개요·세대수·준공·주차·연차 | 공동주택관리정보시스템(K-apt) |
| 매매·전세·평당가·거래량 | 국토교통부 실거래가 |
| 학교·교통·생활·상권 등 장소 | 카카오맵 |
| 분양공고·분양가·주택형·입주월 | 청약홈 |
| 지도 (장소 마커) | 네이버 지도 · 카카오맵 |
| 지도 (분양공고 마커) | 네이버 지도 · 청약홈 |
- 🚨 출처 문자열은
ipzi-data로 받지 않고 템플릿 마크업에 직접 박는다.
어느 블록이 어디서 왔는지는 실행마다 달라지지 않는다. 데이터로 받으면 채우는 걸 잊거나 틀리게 쓸 여지만 생긴다.
- 🚨 한 블록에 두 출처가 섞이면 병기한다. 예:
세대수·주차 — 공동주택관리정보시스템(K-apt) · 위치 — 카카오맵.
하나로 뭉뚱그리면 어느 숫자가 어디서 왔는지 사용자가 알 수 없다.
- 🚨 쓰지 않은 기관을 출처로 적지 않는다. 우리가 부르는 곳은 위 다섯 곳뿐이다.
- 히어로·유의사항·푸터에는 달지 않는다. 데이터 블록에만.
분석 목적 맞춤 요약
목적을 확보하는 방법
- 사용자가 처음부터 목적을 밝혔으면 다시 묻지 않고 사용자 문장을
goal.purpose에 그대로 보존한다.
- 목적이 없고 현재 클라이언트가 4개 선택지와 직접 입력(Other/기타)을 함께 지원하는 네이티브 사용자 입력 UI를 제공하면 그 UI를 정확히 한 번 사용한다.
4인가족 실거주 검토
투자 심의 회의 자료
분양 제안서용 자료
건너뛰기
- UI가 자동 제공하는
기타(직접 입력)으로 자유 입력도 허용한다.
- 네이티브 UI가 직접 입력을 지원하고 지원 가능한 수가 2~3개이면, 그 수만큼 위 목적 프리셋을 앞에서부터 선택지로 제시한다. 질문에는
건너뛰기를 기타(직접 입력)에 입력해도 된다고 알린다.
- 네이티브 사용자 입력 UI가 없거나 직접 입력을 지원하지 않으면 다음 질문만 출력하고 그 턴을 종료해 답을 기다린다:
원하는 분석 목적을 한 문장으로 알려주세요. (예: "4인가족 실거주 검토", "투자 심의 회의 자료", "분양 제안서용 자료") 건너뛰셔도 됩니다.
- 질문 단계에서는 목적 입력 UI 또는 위 텍스트 질문 외의 도구를 사용하지 않는다.
- 사용자가 목적 또는 명시적인 건너뛰기로 답변하기 전에는 MCP·웹·파일·셸 도구를 호출하지 않는다.
- 프리셋을 고르면 해당 문구를
goal.purpose에 그대로 저장하고, 직접 입력을 고르면 사용자가 입력한 원문을 그대로 저장한다.
건너뛰기를 고르거나 사용자가 건너뛰겠다고 답한 경우에만 goal:null로 두고 목적 섹션 없이 진행한다. 목적을 지어내지 않는다.
데이터 수집 후 맞춤 요약
purpose에는 사용자 문장을 그대로 보존한다.
- 데이터 조회·수집이 완료된 후에만
conclusions(결론)·evidence(근거)·cautions(주의사항)·nextActions(다음 행동 제안)를 작성한다. 조회 전에 문구나 결론을 미리 만들지 않는다.
goal은 사용자 표현을 그대로 보존한 purpose, conclusions(35), evidence(13), cautions(02), nextActions(13)로 구성한다.
conclusions는 실제 조회·판정 결과만 목적에 맞춰 요약하고, 각 결론에 실제 evidence를 최소 1개 연결한다.
evidence에는 이번 실행에서 확보한 필드·수치·비교 결과만 쓴다. 예시·검증값·모델 지식으로 빈 값을 채우지 않는다.
- 새 데이터나 없는 수치를 창작하지 않는다.
cautions는 실제로 확인된 데이터 누락·표본 한계·시점 차이·방법상 제약만 쓴다. 본문 경고를 약화하거나 새 위험을 지어내지 않는다.
nextActions는 실제 발견사항·누락·사용자 목적에서 이어지는 검토 행동만 제안한다. URL이나 원시 Skill ID 대신 한글 Skill 이름과 자연어 질의 예시를 쓰며, 거래 후속 분석은 실거래 추이 또는 최근 실거래가 추이로 표현한다. 실거래가·시세 추이처럼 서로 다른 범위를 섞지 않는다.
- 템플릿은 배열 상한을 잘라내고 빈 단계는 숨긴다.
goal:null이면 goal-box 전체를 숨긴다.