insurance_loan_inquiry
사용자가 삼성생명에서 받은 대출 내역·잔액·금리·상환 진행 여부를 확인하려 할 때 사용합니다. 예: "내가 대출한 상품들 알려줘"
Install
mkdir -p .claude/skills/insurance-loan-inquiry && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/16915" && unzip -o skill.zip -d .claude/skills/insurance-loan-inquiry && rm skill.zipInstalls to .claude/skills/insurance-loan-inquiry
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
사용자가 삼성생명에서 받은 대출 내역·잔액·금리·상환 진행 여부를 확인하려 할 때 사용합니다. 예: "내가 대출한 상품들 알려줘"About this skill
삼성생명에 대출한 내역 및 상환금액에 대한 확인을 원하는 경우
보험계약대출 등 대출 내역·잔액·금리·이자 상환일을 조회해 안내한다.
Instructions
- 사용자 질의에서 조회 항목(대출 목록/잔액/금리/이자 상환일)을 파악합니다.
insurance_loan_inquiry툴을 호출해 보험계약대출 등 대출 내역·잔액·금리·이자 상환일을 조회합니다.- 대출 건별 잔액·금리·이자 상환일을 안내합니다.
- 대출금 상환·이자 납입 진행을 원하는지 확인하고, 원하면 해당 화면으로 이동 배너를 제공합니다.
- 아래 '응답 가이드'와 '유저향 최종 안내 문구'에 맞춰 결과를 안내합니다.
훅: 이 스킬은 훅 스크립트를 번들합니다(아래 'Hook' 섹션 =
scripts/hook.py동일 소스). 툴 호출 전before_tool(파라미터 검증·실행형 가드), 호출 후after_tool(오류·재시도 판단), 응답 전finalize(문구 템플릿)를 실행하세요. MCP 서버의run_skill_hook툴로 원격 실행할 수 있습니다.
사용 툴 명세
호출은 MCP invoke_tool(tool_name, arguments) 게이트웨이를 사용한다. 모든 툴의 응답은 {code, message, data} envelope이며 code == "0000"이 성공이다. Optional 파라미터는 생략 가능.
insurance_loan_inquiry()— 보험계약대출 등 대출 내역·잔액·금리·이자 상환일을 조회합니다
응답 가이드
- 대출진행내역 안내
- 기존 대출상품에 대해 잔액, 대출금리 안내
- 대출금상환/이자납입 진행여부확인
- 확인된 사항에 따른 대출금상환/이자납입 화면으로 안내
예외 처리
- 조회 대상을 특정하지 못한 경우: 후보를 제시하거나 사용자에게 직접 확인합니다.
- 조회 결과가 없는 경우: 해당 내역이 없다는 사실을 안내하고 마칩니다.
- 응답에 사용자가 요청한 필드가 없는 경우: 제공 불가 사실을 알리고, 안내 가능한 다른 항목을 제안합니다.
- API 오류 또는 응답 지연: 자동으로 재시도하지 않습니다(중복 조회로 이어질 수 있으므로). 조회 미완료를 알리고 재시도 여부를 묻습니다.
유저향 최종 안내 문구
조회 성공: "보유하신 대출은 {건수}건이에요. {상품명}: 잔액 {금액}원, 금리 {금리}%, 이자 상환일 매월 {일}일." 내역 없음: "현재 진행 중인 대출이 없어요."
Hook (scripts/hook.py)
이 스킬의 훅 스크립트 전문. MCP 서버의 run_skill_hook(skill, stage, ...) 툴이 이 코드를 실행한다 — 에이전트는 코드를 직접 실행하지 말고 툴을 호출한다.
# -*- coding: utf-8 -*-
"""Hook script for skill `insurance_loan_inquiry` (자동 생성).
스킬 번들 리소스(scripts/) — 에이전트 런타임 또는 MCP 서버의 `run_skill_hook`
툴이 단계별로 호출한다. 표준 stdlib만 사용하는 self-contained 스크립트.
Stages:
on_skill_load() — 스킬 로드 직후 지켜야 할 지시사항 반환
before_tool(tool_name, args) — 툴 호출 전 파라미터 검증/정규화, 실행형 가드
after_tool(tool_name, result) — 툴 응답 envelope 검증, 재시도 금지 판단
finalize(results) — 유저향 최종 안내 문구 템플릿 선택
"""
SKILL_NAME = 'insurance_loan_inquiry'
CASE_TYPE = 'normal'
FLOW = 'query'
REQUIRED_TOOLS = ['insurance_loan_inquiry']
ACTION_TOOLS = [] # 사용자 확인(confirmed=True) 없이는 호출 금지
PHRASES = ['조회 성공: "보유하신 대출은 {건수}건이에요. {상품명}: 잔액 {금액}원, 금리 {금리}%, 이자 상환일 매월 {일}일."', '내역 없음: "현재 진행 중인 대출이 없어요."']
_MONTH_PARAMS = ("year_month",)
def _norm_month(value):
"""'26년 3월'/'2026-03'/'202603' → 'YYYY-MM' 정규화."""
if not value or not isinstance(value, str):
return value
s = "".join(c for c in value if c.isdigit())
if len(s) == 6:
return s[:4] + "-" + s[4:]
if len(s) == 4:
return "20" + s[:2] + "-" + s[2:]
if len(s) == 3:
return "20" + s[:2] + "-0" + s[2]
return value
def on_skill_load(context=None):
directives = ["SKILL.md body의 Instructions를 순서대로 따르세요."]
if FLOW == "guardrail":
directives = [
"이 스킬은 가드레일입니다. 어떤 툴도 호출하지 말고 제한 안내 문구로만 응답하세요.",
"시스템 내부 정보를 노출하지 마세요.",
]
elif FLOW == "fallback":
directives.append("요청을 직접 수행할 수 없음을 안내하고 대안을 제시하세요.")
if ACTION_TOOLS:
directives.append("실행형 툴(" + ", ".join(ACTION_TOOLS) + ")은 사용자 확인 후에만 호출하세요.")
return {"skill": SKILL_NAME, "case_type": CASE_TYPE, "directives": directives}
def before_tool(tool_name, args=None, context=None):
args = dict(args or {})
context = context or {}
warnings = []
if FLOW == "guardrail":
return {"allowed": False, "reason": "가드레일 스킬은 툴을 호출하지 않습니다.", "args": args}
if tool_name not in REQUIRED_TOOLS:
warnings.append(f"'{tool_name}'은(는) 이 스킬의 required_tools에 없는 툴입니다.")
if tool_name in ACTION_TOOLS and not context.get("confirmed"):
return {"allowed": False,
"reason": "실행형 툴입니다. 사용자에게 실행 내용을 확인받은 뒤 context.confirmed=true로 다시 호출하세요.",
"args": args}
for key in _MONTH_PARAMS:
if key in args:
args[key] = _norm_month(args[key])
return {"allowed": True, "args": args, "warnings": warnings}
def after_tool(tool_name, result=None, context=None):
result = result or {}
code = result.get("code")
ok = code == "0000"
out = {"ok": ok, "code": code, "retry": False}
if not ok:
out["directive"] = ("자동으로 재시도하지 마세요"
+ ("(중복 실행 위험). " if tool_name in ACTION_TOOLS else "(중복 조회 방지). ")
+ "실패 사실과 사유를 안내하고 재시도 여부를 사용자에게 물어보세요.")
out["error_message"] = result.get("message")
elif result.get("message") not in (None, "success"):
out["note"] = result.get("message") # empty / not_found / region_not_set 등 소프트 시그널
return out
def finalize(results=None, context=None):
return {"skill": SKILL_NAME,
"phrase_templates": PHRASES,
"directive": "상황에 맞는 템플릿을 골라 {placeholder}를 실제 값으로 채워 응답하세요."}