| name | ipzitalk-complex-overview-all |
| description | 아파트명 또는 소재 주소 하나로 단지 개요·매매/전세 시세·최근 거래·주변 입지(교통·생활·교육)· 입주 예정 단지·인근 비교 단지를 한 장에 모아 보여준다. "이 아파트에 대해 전반적으로 알려줘", "이 아파트 한눈에 보기", "종합해서 알려줘", "이 아파트 전반적으로 정리해줘" 등의 표현이 있으면 이 스킬을 사용한다. 단일 항목만 물으면(시세만/학군만) 해당 단일 스킬을 쓴다. 범위를 밝히지 않은 "OO아파트 어때" 는 이 스킬이 아니라 단지 개요 요약(ipzitalk-complex-overview)으로 보낸다. 23크레딧이라 개요 요약(3크레딧)의 8배다. 애매하면 싼 쪽을 쓰고, 부족하면 이 스킬을 권한다.
|
| version | 1.1.5 |
| license | proprietary |
이 아파트 한눈에 보기
아파트 하나를 입력받아 개요·시세·입지·입주예정·인근단지를 23크레딧 · 1페이지로 만든다.
※ 참고용 자료이며 시세 감정이 아니다. 실거래 신고 기준이라 계약일과 시차가 있고 층·향·수리 상태는 미반영.
설계 원칙 🚨
하위 스킬을 호출하지 않는다. 교통·생활·교육·실거래 추이·전세가율 스킬을 그대로 부르면 60크레딧을 넘고,
각 스킬의 등급 판정·게이지·리포트 문구는 여기서 대부분 버려진다.
데이터 수집 스펙만 재사용하고 렌더는 독립한다.
탭·토글을 쓰지 않는다. 배치로 푼다.
- 거래유형 → 매매 큰 차트 + 하단 좌우 2분할(전세 / 매매가 대비 전세가)
- 초·중·고 → 수평 3분할 게이지 카드
- 지역 비교 → 매매 차트에 혼합 대조선 1개 병치
입력
| 파라미터 | 필수 | 기본 | 설명 |
|---|
target | ✅ | - | 아파트명 또는 소재 주소 |
months | ✕ | 12 | 최신 확정월로 끝나는 실거래 조회 개월. 최근 2개월은 조회 창에서 제외한다 |
poi_radius_m | ✕ | 2000 수집 / 1000 표시 | 아래 §반경 규칙 |
presale_radius_km | ✕ | 3 | 입주 예정 단지 반경 |
필수 도구
| 도구 | 용도 | 콜 |
|---|
get_complex_info(detail=true) | 개요·unit_mix·주차·주소 | 1 |
get_geocode | 좌표 (K-apt가 준 도로명 주소로) | 1 |
get_complex_trades(trade_type='all') | 매매+전월세+분양권 12개월 | 12 |
search_by_nearby_category | 초·중·고·지하철·마트 5종 일괄 | 1 |
search_by_nearby_keyword ×4 | 공원 · 도서관 · 백화점 · 종합병원 | 4 |
search_by_nearby_keyword + enrich_complex_info | 인근 단지 + 실거래 | 2 |
search_announcement_info | 입주 예정 | 1 |
get_map_embed_url | 지도 | 1 |
| | 23 |
워크플로우
1. 기준점 해소 🚨 순서 주의
get_complex_info(complex_query=target, detail=true) → kapt_code · address_road · unit_mix
get_geocode(address = 위에서 받은 address_road) → lat · lng
- 🚨 단지명을
get_geocode에 넣으면 실패한다. 실측: get_geocode("반포래미안아이파크") → ADDRESS_NOT_FOUND.
- 🚨
get_complex_info 응답에는 좌표가 없다. resolved_location은 주소·법정동코드뿐이다.
- 입력이 처음부터 주소면 두 콜의 순서를 바꿔도 된다.
2. 실거래 12개월
get_complex_trades(complex_query, year_month, trade_type='all', limit=100) × 12
- ✅
trade_type='all'은 1콜 = 1크레딧. 내부에서 매매·전월세·분양권 3개 원천을 쳐도 과금은 1이다.
- 조회 창은 최신 확정월로 끝나는 12개월이다. 최근 2개월은 신고 등록 지연 때문에 호출·차트에서 제외한다. 오늘이 2026-07이면 최신 확정월은 2026.05이고 조회 집합은 2025.06~2026.05 정확히 12개다.
2025.08~2026.07처럼 집계 중 2개월을 포함한 12개월 창으로 바꾸지 않는다.
- 호출 전에 오름차순
year_month 12개 집합을 확정해 audit.json에 기록한다. 각 월은 정확히 1회만 호출하며 year_month 중복은 0건인지 검증한다. 이미 호출한 월을 보정·감사 목적으로 재호출하지 않는다.
- 중복 제거: 같은
(전용, 층, 계약일, 금액)은 1건으로.
실측: 반포 84.93㎡ 12층 2026-05-16 166,950이 2행(한 행만 계약구분 필드 존재).
- 🚨 거래가 0건인 달에도
[PARTIAL] 시세 생성 금지가 붙는다. 중단하지 말고 결측월로 넘긴다.
조회한 모든 달이 0일 때만 해소 실패로 본다. (실측: 반포 매매 12개월 중 6개월이 PARTIAL인데 전월세는 정상)
3. 전용타입군 결정
- 84를 상수로 박지 말 것.
unit_mix가 정한다(대형 전용만·소형 전용만인 단지가 모두 존재).
unit_mix의 면적 구간(밴드)을 정확한 단일 주택형으로 추론하지 않는다. 예를 들어 60~85㎡ 839세대는 해당 구간 재고일 뿐 84㎡ 839세대의 근거가 아니다. 60~85㎡ 구간 839세대와 실제 거래에서 확인한 84㎡ 표본은 별도 사실로 구분해 쓴다.
- 정수부 일치(
Math.trunc) 단독 매칭 금지 → ±1.5㎡ 밴드. 밴드 폭 상한은 3㎡ 또는 중앙값의 3% 중 작은 쪽.
- 최신 확정월 표본이 0인 밴드는 주계열로 고르지 않는다.
- 매매 표본이 얇으면(관측월 3개 등) 차트는 그리되 추세를 단정하지 않는다.
3-b. 매매 차트 요소
| 요소 | 스타일 | 규칙 |
|---|
| 주계열 | --brand 실선 2.6px | 거래 없는 달에서 선을 끊는다. 보간 금지 |
| 대조선(모든 평형 섞은 값) | --x 점선 | 평형이 섞인 단지에서만. 단일 평형 단지면 생략 |
| 기간 평균선 | 계열색 stroke-dasharray:"2 3" 수평선 | 계열마다 1개. 우측 끝에 값 라벨 |
| 거래 없는 달 밴드 | --x opacity:.10 세로 밴드 + "거래없음" | 선만 끊으면 차트가 고장난 것처럼 보인다 |
| 확정/집계중 경계 | 표시하지 않음 | 최근 2개월은 조회 창 밖이며 캡션에 제외 사유만 명시 |
| N 라벨 | x축 아래 N3 | 표본 수를 항상 노출 |
- 🚨 기간 평균은 관측된 달만으로 낸다. 결측월을 0으로 채우지 않는다. 0으로 채우면 평균이 내려앉아 없는 하락을 만든다.
→ 그래서 템플릿은 평균값을
ipzi-data로 받지 않고 렌더 JS가 main/mixed의 non-null 값만으로 직접 계산한다.
숫자를 손으로 넣지 말 것.
- 두 평균선의 간격이 곧 구성 편향의 크기다(반포자이 실측 84㎡ 18,887 vs 혼합 15,405 → 3,482만원/평).
- 차트 캡션에 "가로 점선은 1년 평균"을 명시한다.
- 평균이 y축 범위 밖이면 선을 그리지 않는다(축을 늘리든지, 축을 유지하고 생략하든지 — 잘린 선을 그리지 않는다).
4. 전세 · 매매가 대비 전세가
- 신규 계약만. 갱신은 5% 상한에 묶여 시세가 아니다.
- 응답의 전세가율 필드는 **항상
null**이다. 직접 계산한다.
- 🚨 매매와 전세의 시점이 어긋나면 반드시 명시한다.
- 🚨 전세 카드 값과 전세가율 계산 값이 같아야 한다. 데모에서 실제로 어긋났다(카드 16.75억 vs 계산 17.5억).
- 🚨
ratio.band를 반드시 값에 맞춰 넣는다. 기본값 "g"(초록)를 그대로 두면
주의선을 넘긴 전세가율을 안전한 색으로 칠하게 된다.
| 매매가 대비 전세가 | band | 라벨 |
|---|
| < 60% | g | 여유 있는 편 |
| 60 ~ 70% | y | 양호 |
| 70 ~ 80% | o | 주의 |
| ≥ 80% | r | 위험 |
실측 대비: 반포래미안아이파크 39.9%(g) vs 부산오션시티푸르지오 76.8%(o).
5. 주변 POI — 수집 2km / 표시 1km 🚨
radius_m은 콜당 1개뿐인데 블록마다 자연 반경이 다르다. 반경을 넓혀도 크레딧은 그대로 1이다.
search_by_nearby_category(radius_m=2000,
categories=['school_elementary','school_middle','school_high','subway','mart_large'])
→ 수집 후 1km 이내로 필터
- 🚨 1km로 수집하면 안 된다. 실측: 지하철 0건(최근접 역 1,313m), 병원 45건 캡 도달.
- 🚨 지하철만 예외 — 1km 밖이어도 제일 가까운 1곳은 표시한다("역이 먼 편"도 정보다).
- 🚨 병원(
hospital)을 카테고리에 넣지 말 것. 동물병원·치과·피부과가 전부 같은 카테고리다.
키워드 4콜(각 1키워드, 묶을 수 없다):
| 축 | 검색식 |
|---|
| 공원 | query="공원", grid=true, include=["공원"], exclude=["공원시설물","음식점","카페","화장실","학원","지하철"] |
| 도서관 | preset="library" |
| 백화점 | query="백화점", grid=true, include=["백화점"] |
| 종합병원 | query="병원", grid=true 1회 호출 후 장소명·카테고리에서 종합병원·대학병원·국립병원 중 하나와 일치하는 결과를 로컬 OR 필터 |
- 🚨
categories:['park']는 죽은 검색식이다. 카카오 카테고리 코드 18종에 공원이 없다.
실측 2곳 모두 0건. 반포엔 1.5km 내 공원이 32개 있는데도 0건이다.
- 🚨
grid=true 없이 query="백화점"을 부르면 입점 매장이 45건 캡을 다 먹는다.
실측: 반포 4km → 45건 전부 입점 매장, 본체 0건. grid로 2km를 부르면 신세계백화점 강남점(888m)이 나온다.
- 🚨 병원 검색을 세 키워드로 나누지 않는다. 공원·도서관·백화점·병원으로 POI keyword는 정확히 4회이며, 기본 전체 MCP 호출 예산은 23회다.
- 🚨
0건이라고 쓰기 전에 잘림 여부를 본다. 잘렸으면 "없음"이 아니라 "확인되지 않음".
6. 인근 단지
search_by_nearby_keyword(preset="apartment", radius_m=2000, grid=true)
enrich_complex_info(complexes, include_trades=true)
- 후보에서 아파트부속시설(커뮤니티센터 등)과 **장소명에
예정·(20NN년**이 든 항목을 뺀다.
실측: 오티에르반포아파트 (2026년07월예정) · 논현영동빌라주택재건축아파트 (예정).
- 🚨
enrich의 실거래를 단지 간 비교에 쓰지 말 것. 아래 §알려진 결함 참조.
7. 지도
- 마커: SITE(브랜드색) + 각 축 제일 가까운 곳 + 입주예정 1곳처럼 실제 장소만 사용한다.
- 🚨 반경 눈금용 가짜 마커는 금지한다. 반경 원이 bounds에서 잘리는 문제를 가짜 장소로 보정하지 않는다.
- 🚨 지도 링크는 발급 후 7일 만료. 캡션에 유효기간을 적는다.
8. 결과·호출 감사 파일 🚨
- MCP 호출을 시작하기 전에 출력 디렉터리
out/ipzitalk-complex-overview-all/을 고정한다.
- 완성 데이터는 HTML 안에서만 보관하지 말고 **
out/ipzitalk-complex-overview-all/result.json**에 먼저 저장한다.
- 각 MCP 호출 직후 **
out/ipzitalk-complex-overview-all/audit.json**에 skillBaseDirectory, baseToolName, 입력 요약, year_month(해당 시), resultCount, truncated, provenance, reason을 누적한다. 파일 도구·실행 환경은 shellUsed, webUsed, generatedFiles로 별도 기록한다.
- 기본 호출 합계는 23회다.
get_complex_trades는 12행·서로 다른 year_month 12개여야 하며 전체 행 수가 23이 아니면 완료 처리하지 않는다.
- 지도 audit에는 실제 호출 횟수 1회와 marker의
name·type을 남겨 반경 눈금 가짜 마커가 0개인지 검증한다.
- 최종 응답은
audit.json에서 도구별 호출 횟수, Remote provenance, Skill base directory, shell/web 사용 여부, 생성 파일을 계산해 보고하며 수기로 재구성하지 않는다. 감사 누락을 채우기 위한 MCP 재호출은 금지한다.
🚨 알려진 결함 — 스킬로 못 고치는 것
인근 단지 실거래는 단지 비교에 쓸 수 없다 (실측 2026-07-10)
1. 달이 서로 다르다. 단지마다 "최근 거래가 있는 달"을 각자 고른다.
반포 실측: 라클라스 26.06 · 리체 26.04 · 삼호가든5차 26.05 · 반포자이 26.05 — 같은 시점 비교가 아니다.
2. 다른 단지 거래가 섞인다. 지번 본번 매칭이라 30-1 · 30-20 · 30-26이 한 덩어리가 된다.
반포써밋 (반포동 30-20, 2018년, 764세대) → 202605 · 2건 · 432,000 · 평당 9,639
반포삼호가든맨션5차(반포동 30-1, 1986년, 168세대) → 202605 · 2건 · 432,000 · 평당 9,639 ← 완전히 동일
2018년 신축의 평당가가 1986년 단지와 같을 수 없다. 응답만 보고는 구분이 불가능하다.
→ 인근 단지 표에는 세대수·준공·주차만 싣고, 실거래는 확인되지 않음 배지로 비운다.
매칭 실패가 조용하다
반포 실측: 후보 9곳 중 2곳 미매칭. 인근 단지 표는 전부가 아니다. 그 사실을 화면에 한 줄로 남긴다.
용적률 · 건폐율은 만들 수 없다
K-apt 기본·상세 어디에도 필드가 없다. 연면적은 있으나 대지면적이 없어 계산 불가.
→ 확인되지 않음으로 둔다. 값 추정 금지.
단지명 매칭이 느슨하다
지번 매칭 기준이라 단일 지번 단지에선 결과가 맞지만,
다지번 단지에서 옆 단지가 섞이는 것을 스킬이 감지할 수 없다.
표본 규칙
| 표본 N | 처리 |
|---|
| ≥ 8~10 | 정상 적용 |
| 4 ~ 7 | 참고용 표기 |
| < 4 | ⬜ 등급·추세 단정 금지. 값은 나열하되 "거래가 적어 참고용"으로 |
- 단지+타입 고정이면 월별 표본이 필연적으로 얇다. 반포(829세대)는 12개월 매매 11건, 99㎡ 4건.
- 🚨 시작점이 N<4인 달이면 그 달 기준 변화율을 제시하지 말 것.
🚨 화면 문구는 일반인 언어로
독자는 부동산 전문가가 아니다. 내부 용어를 화면에 그대로 쓰지 않는다.
수치·임계값은 그대로 두고 라벨만 바꾼다.
| 쓰지 않는 말 | 대신 |
|---|
| 판정 유보 · 표본 부족 | 거래가 적어 흐름은 참고용 |
| 신고지연 · 확정 아님 | 아직 집계 중인 기간 |
| 전용타입 혼합 · 주계열 | 모든 평형 섞은 값 · 전용 99㎡ 기준 |
| 최근접 | 제일 가까운 |
| 이격 · 다소 이격 | 먼 편 · 조금 먼 편 |
| 정보없음 · 미확인 · 데이터 오염 | 확인되지 않음 |
| 1km 내 | 1km 안 |
| 도보 환산 = 직선거리 ÷ 4.5km/h | 직선거리로 어림잡은 값이라 실제 걷는 길과 다를 수 있습니다 |
| hedge | 꼭 읽어주세요 |
- 금액은 만원 나열 대신 억 단위로(
530,000 → 53.0억). 거리는 1,984m → 2.0km.
- 표 안에는 단위를 붙여 헤더를 안 봐도 읽히게 한다(
829세대 · 4층 · 1.62대).
- 🚨 부드럽게 쓰되 사실은 그대로. "가깝다"가 "좋다"가 되면 안 된다.
- 🚨 숫자는 화면 전체에서 일치해야 한다.
🚨 안내문은 "결과"만 쓴다 — 내부 사정을 설명하지 않는다
| 종류 | 예 | 처리 |
|---|
| 오독 방지 | "거래 시점이 단지마다 다릅니다. 옆에 적힌 달을 함께 봐주세요" | ✅ 한 줄로 남긴다 |
| 불완전 고지 | "1km 안 아파트 전부는 아닙니다" | ✅ 한 줄로 남긴다 |
| 내부 사정 | "K-apt에 필드가 없어서", "지번 앞번호가 겹쳐서", "이름이 맞지 않아서" | ❌ 쓰지 않는다 |
- 결측은 표 안에서
확인되지 않음으로 끝낸다. 왜 비었는지 문단으로 설명하지 않는다.
- 🚨 줄인다고 사실을 감추면 안 된다. "전부는 아니다" · "시점이 다르다"는 사용자의 판단을 바꾸는 정보라 반드시 남긴다.
반대로 "왜 그런지"는 판단을 바꾸지 않으므로 뺀다. 원인·재현 근거는 이 문서에만 적는다.
- 조회 크레딧·도구 호출 수는 화면에 쓰지 않는다.
섹션마다 출처를 작게 단다
데이터 블록 하단에 .src 한 줄. 도구·API 이름은 쓰지 않는다. 사용자가 아는 기관명만.
| 블록 | 출처 표기 |
|---|
| 개요 | 공동주택관리정보시스템(K-apt) |
| 지도 | 네이버 지도 · 카카오맵 |
| 매매 · 전세 · 최근거래 | 국토교통부 실거래가 |
| 학교 · 교통 · 생활 | 카카오맵 |
| 입주 예정 | 청약홈 |
| 함께 볼만한 아파트 | 세대수·준공·주차 — 공동주택관리정보시스템(K-apt) · 최근 거래 — 국토교통부 실거래가 · 위치 — 카카오맵 |
- 배정 학교 문구에는 학구도 안내서비스 링크를 건다:
https://schoolzone.emac.kr/gis/gis.do
링크 없이 "학구도로 확인하세요"만 쓰면 사용자가 못 찾는다.
출력 = 공통 템플릿
먼저 out/ipzitalk-complex-overview-all/result.json과 audit.json을 저장한 뒤, templates/result.html의 비실행 ipzi-data JSON 블록을 채운다(스킬 폴더 내부, self-contained).
마크업·CSS·렌더 JS는 고정이다. 실행마다 바뀌는 것은 ipzi-data 블록 하나뿐.
HTML 산출물 계약 🚨
result.json·audit.json은 내부 계약용 고정 이름으로 유지하고, 사용자 전달 HTML만 대상 기반 이름을 쓴다.
get_complex_info로 확정한 공식 단지명에서 공백만 정리해 <단지명>_한눈에보기를 만들고, 최종 HTML은 out/ipzitalk-complex-overview-all/<단지명>_한눈에보기.html에 저장한다. 공식 단지명을 확보하지 못하면 이름을 지어내지 말고 --file-name을 생략해 ipzitalk-complex-overview-all.html로 폴백한다.
- 셸 사용이 허용된 환경에서는 스킬 기준
../../scripts/html_artifact_contract.mjs 검증기를 --file-name "<단지명>_한눈에보기"와 함께 사용한다. --skill-dir에는 이 스킬의 base directory, --data에는 완성한 JSON 파일, --output-root에는 작업공간의 out 디렉터리를 전달한다. 스크립트가 경로·예약문자·길이를 안전화한다.
shell-free 또는 셸 금지 환경에서는 File Read/Write로 templates/result.html을 직접 읽고 ipzi-data JSON 블록만 교체한다. 교체 전후의 fixed template region(고정 영역: 데이터 블록 앞 prefix와 뒤 suffix)이 원본과 같은지 비교한다.
audit.json.generatedFiles에는 예시 이름이 아니라 실제 최종 파일명과 경로를 기록한다.
- 검증기가 통과하기 전에는 완료로 주장하지 않는다. File Read/Write나 고정 영역 비교를 수행할 수 없거나 금지된 도구를 사용했다면 완료 처리하지 말고 제약과 실제 사용 도구를 보고한다.
섹션 순서(고정): 개요 KPI 4칸 → 지도 → 매매 차트 → 전세/전세가율 2분할 → 최근 매매 5행 →
학교 3분할 게이지 + 리스트 → 교통·생활 카드 → 주변 입주 예정 → 함께 볼만한 아파트 → 출처·안내 푸터.
필수 단서 · 금지 표현
- 필수: 전용타입 기준 명시 · 표본 수 · 거래가 적으면 참고용 표기 · 최근 2개월 제외 사유 · 전용면적 기준 평당가 ·
직선거리 명시 · 걸어서 시간은 어림값 · 지도 유효기간 · 출처·조회일 · 용적률/건폐율
확인되지 않음.
- 금지: 모든 평형 섞은 중위값을 시세로 제시 · 최근월을 전월과 비교 · 거래 없는 달 보간 · "상승세/하락세 확정" 단정 ·
휴교/개교예정 시설로 판정 · 인근 단지 실거래로 단지 간 시세 비교 · 배정 학교 단정 · 용적률 추정.
엣지 · 실패 처리
| 상황 | 처리 |
|---|
단지 해소 실패 / NOT_FOUND | 재입력 요청. 리포트 생성 금지 |
후보 다수 / AMBIGUOUS | 후보 나열 후 선택 |
| 단일 월 거래 0건 | 결측월로 넘어간다. 중단 금지 |
| 전 기간 거래 0건 | 해소 실패로 보고 중단 |
unit_mix에 84타입 없음 | 84 재조회 금지 → 우세 타입군 자동 선택 |
| POI 결과가 잘림 | "없음" 금지 → "확인되지 않음" |
장소명에 휴교·폐교·예정·(20NN년 | 게이지·개수에서 제외, 목록에만 꼬리표 |
| 입주예정 좌표 없음 | 반경 판정 불가 → 별도 회색 블록 |
| 인근 단지 미매칭 다수 | "전부는 아닙니다" 한 줄. 사유는 쓰지 않는다 |
검증된 사항 (반포래미안아이파크 · 서울 서초구 반포동 1341 · 조회 2026-07-10)
- 829세대 · 11개동 · 2018.08 사용승인 · 세대당 주차 1.62 · 평형 구성 144/237/415/33
- 매매 12개월 11건. 99㎡ 4건(25.08 · 26.04 · 26.05). 최신 확정월 26.05 중위 평당가 14,326만원
- 전세 84㎡ 신규 26.06 중위 16.75억 · 매매가 대비 전세가 39.9%(16.75억 ÷ 42.0억, 시점 어긋남)
- 지하철 제일 가까운 곳 사평역 9호선 308m, 1km 안 6개역 · 초등학교 서울서원초 208m
- 종합병원 가톨릭대 서울성모병원 765m · 백화점 신세계 강남점 888m(
grid 필수) · 공원 미도공원 235m
- 입주예정 5건 · 좌표 전부 확인 · 제일 가까운 곳 오티에르 반포 806m (2026.07 · 86세대)
- 인근 단지 9곳 중 7곳 매칭 · 2곳 실패
- 휴교 학교 혼입 확인:
서울반포초등학교 (휴교) 2.0km
디자인 정본
스킬 폴더 밖 문서에 의존하지 않도록 규칙을 여기 인라인으로 둔다.
- CDN·외부 폰트·이모지 금지. 아이콘은
<symbol> 인라인 + <use> 참조로 self-contained.
(인라인 렌더 JS는 허용된다. 외부 스크립트만 금지.)
- 라이트/다크 양쪽.
prefers-color-scheme + :root[data-theme] 모두 대응.
- 토큰만 사용:
--g/--y/--o/--r/--x/--brand/--up/--down/--zebra (+ -s 배경 변형).
- 예외 상태:
null은 확인되지 않음(0 아님) · 표본 부족은 등급 단정 금지 · 결과가 잘리면 "목록 불완전" 표기.
★·☆는 활자 기호이며 이모지가 아니다. 등급 표기에 사용 가능.
- 상승은
--up(빨강) · 하락은 --down(파랑) — 국내 관행.
- 지도 카드 CSS:
.map{overflow-x:auto; overflow-y:hidden} + .map iframe{display:block; min-width:720px}.
overflow:hidden만 주면 iframe이 카드 폭에 짓눌려 지도가 최소 줌으로 떨어진다.
- 숫자 열은
th.n·td.n 양쪽에 우측 정렬을 준다. th.n을 빠뜨리면 헤더만 좌측에 남는다.
- 컨테이너
svg 규칙(.mini svg{width:100%} 등)은 직계 자식으로 한정한다(.mini > svg).
자손 선택자로 두면 .ic 아이콘까지 카드 폭으로 부풀어 제목이 접힌다.
- 🚨 지도 링크는 발급 후 7일 만료. 캡션에 유효기간·재발급 필요를 반드시 적는다.
이름 충돌 주의 ⚠️
기존 ipzitalk-complex-overview(K-apt 단일 단지 요약)와 다른 스킬이다.
ipzitalk-complex-overview = 세대수·연차·주차 정도의 한 장 요약. 실거래·POI 없음.
ipzitalk-complex-overview-all = 실거래 + 입지 + 입주예정 + 인근단지까지. 23크레딧.
- "간단히 정리"·"단지 개요" →
ipzitalk-complex-overview / "전반적으로"·"한눈에" → 이 스킬.
분석 목적 맞춤 요약
목적을 확보하는 방법
- 사용자가 처음부터 목적을 밝혔으면 다시 묻지 않고 사용자 문장을
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 전체를 숨긴다.
MCP 도구 네임스페이스와 출처
ipzitalk MCP 도구의 네임스페이스는 실행 환경(Codex, Claude Code, Hermes, claude.ai 커넥터 등)에 따라 다르다.
이 문서에 적힌 도구 이름(search_announcement_info, get_geocode, get_map_embed_url 등)은 접두사 없는 기본 도구명(base tool name) 이다.
- 먼저 연결된 도구 목록에서 같은 기본 도구명을 찾는다.
- 그중
ipzitalk-remote 플러그인의 ipzitalk 서버 provenance가 확인되는 도구만 우선 사용한다. Codex에서는 실제 도구 호출 이벤트의 server: ipzitalk과 기본 도구명을 기준으로 확인한다.
presale-mcp 또는 다른 로컬 MCP provenance의 동명 도구는 Remote Skill의 대체 수단으로 사용하지 않는다.
- provenance를 확인할 수 없거나 같은 기본 도구명이 여러 서버에 있어 모호하면 임의 선택하지 말고 중단하여 필요한 Remote 도구명을 안내한다.
클라이언트가 연결 도구 목록에 plugin/server provenance를 구조적으로 제공하지 않을 때만 다음 명시적 fallback을 사용한다.
mcp__plugin_ipzitalk-remote_ipzitalk__<도구명>
mcp__ipzitalk_mcp__<도구명>
mcp__ipzitalk__<도구명>
mcp__claude_ai_ipzitalk__<도구명>
fallback으로도 Remote 출처를 유일하게 확인할 수 없으면 값을 추정하지 말고, 사용자에게 ipzitalk Remote MCP 연결 상태를 확인하도록 안내한 뒤 중단한다.