cat-xierluo/legal-skills/court-sms

Claude Code and agent skill by cat-xierluo/legal-skills

Trust tier 3
  • community
Source check pending

Checking that the SKILL.md file is still in the repository.

本技能应在用户收到法院短信(文书送达、立案通知、开庭提醒等)时使用,自动提取案号、当事人、下载链接,下载文书并归档到对应案件目录。会落盘敏感诉讼数据到本地,请确认目标位置私密。

Install

npx vskill@latest install cat-xierluo/legal-skills/court-sms

SKILL.md

法院短信识别与文书下载

隐私与合规说明(透明告知,不阻挡执行)

本技能处理的是法院诉讼文书与送达短信,内容含案号、当事人、法院信息、送达时间等敏感诉讼数据,部分还可能涉及客户机密与个人隐私。使用即表示你授权本技能按以下方式处理:

  • 下载的文书与归档记录会落到本地文件系统(案件目录 + skill 内部 archive/)。案件目录位置由 config/workspace.json 的 case_root 决定(未配置时用当前工作目录),请把它指向仅你本人可访问的私密路径,且勿提交到公开仓库或同步到第三方服务。
  • 涉及登录凭证(账号、密码、验证码)的步骤,在你粘贴含相关信息的短信后默认自动代入,以实现无感下载。
  • 新建案件目录、写入内部归档记录均按流程自动执行,无需逐步确认。

功能概述

处理法院短信的完整流程:粘贴短信 → 解析内容 → 匹配案件 → 下载文书 → 归档保存。

支持两种触发方式:

方式一:粘贴短信原文

text
收到法院短信,内容如下:
【xx市人民法院】张三,您好!您有(YYYY)苏XXXX民初XXXX号案件文书送达,请点击链接查收:https://zxfw.court.gov.cn/zxfw/#/pagesAjkj/app/wssd/index?qdbh=DEMO1&sdbh=DEMO2&sdsin=DEMO3

方式二:直接发送送达链接

用户可能直接粘贴送达链接(非完整短信文本),此时跳过短信文本解析,直接从 URL 中提取 qdbh、sdbh、sdsin 参数,进入第三步下载流程。

text
https://zxfw.court.gov.cn/zxfw/#/pagesAjkj/app/wssd/index?qdbh=xxx&sdbh=xxx&sdsin=xxx

短信类型分类

类型特征含下载链接处理方式
文书送达含送达平台链接 + 案号是下载文书并归档到案件目录
立案通知含"已立案"等关键词可能有展示解析结果
信息通知无链接,纯信息否展示解析结果

支持的送达平台:zxfw.court.gov.cn(全国)、sd.gdems.com(广东)、jysd.10102368.com(集约送达)、dzsd.hbfy.gov.cn(湖北)、sfpt.cdfy12368.gov.cn(司法送达网)。同一平台可能使用不同域名(同构异域名),通过 URL 路径特征识别平台。详见 references/sms-patterns.json。


工作流(四步)

第一步:输入解析
  1. 读取 references/sms-patterns.json 作为解析参考
  2. 判断输入类型:
  • 完整短信:包含法院签名(如 【xx法院】)+ 正文 + 链接 → 完整解析流程
  • 纯链接:用户直接发送送达 URL(如 https://zxfw.court.gov.cn/...?qdbh=xxx&sdbh=xxx&sdsin=xxx)→ 跳过短信文本解析,直接从 URL 提取参数,进入第三步下载。案号、当事人等信息在下载文书后从文书内容中提取。
  1. 对用户粘贴的短信文本进行分析(纯链接输入跳过此步):

a) 短信分类:根据关键词判断类型

  • 文书送达:包含 zxfw.court.gov.cn 链接
  • 立案通知:包含"已立案"、"立案通知"等
  • 信息通知:其他

b) 案号提取:使用正则 [((〔[]\d{4}[))〕]] 匹配标准案号格式

标准案号格式示例:

  • (YYYY)苏XXXX民初XXXX号
  • (YYYY)粤XXXX执保XXXX号
  • 〔YYYY〕京XXXX民初XXXX号

c) 当事人提取:从短信文本初步识别,最终以文书内容为准

  • 注意:短信中的称呼(如"张三,您好")仅为短信接收人,不作为案件当事人
  • 公司名称:xx有限责任公司、xx有限公司、xx股份有限公司
  • 诉讼对峙:A与B、A诉B、原告A 被告B
  • 角色前缀:原告:xxx、被告:xxx 等
  • 下载文书后,以起诉状、传票中的当事人信息为准,覆盖短信阶段的初步判断

d) 下载链接提取:识别短信中的送达平台链接并提取参数

平台域名下载方式提取参数
全国法院统一送达平台zxfw.court.gov.cncurl API 直连qdbh, sdbh, sdsin
广东法院电子送达sd.gdems.com浏览器自动化路径中的送达标识码
集约送达平台jysd.10102368.com浏览器自动化key
湖北电子送达dzsd.hbfy.gov.cnHTTP API(免账号)/ 浏览器自动化(账号模式)免账号:msg;账号模式:账号+密码从正文提取
司法送达网sfpt.cdfy12368.gov.cn纯 Playwright(无 API)验证码(手机尾号后6位 / 短信验证码)

e) 送达证据核对(P0):读取 送达与期限规则,区分发送、收到、生成和法律上的送达。

  • zxfw 的 getWsListBySdbhNew 在已测响应中不含 dt_cjsj,不得臆造该字段;即使其他接口有创建时间,也不能自动当送达时间。
  • 按“文书 + 受送达人”核对适用基础、送达回证或系统发送成功/到达证据。二维码生成、文书落款、普通短信时间仅记为线索,不能借同批另一份文书的日期起算。
  • 按参考格式整理证据,执行 python3 scripts/check_service_evidence.py /private/path/service-evidence.json;仅输出 confirmed 时进入期限规则核对。检查器只检查结构和一致性,不替代原始证据核验。
  • 未知、冲突或检查失败时,service.served_on=null,展示“送达时间待确认”及缺口,继续下载与归档;不得输出确定期限或倒计时。

f) 下载期避免 python heredoc:优先写临时 .py 文件或改用 execute_code,避免 python3 <<'PY' 写法——它命中危险命令规则(pattern key script execution via heredoc),逐次触发审批弹窗。python3 -c(key script execution via -e/-c flag)同理。

排除列表:法院名称、法官姓名、地名、法律术语等不应作为当事人提取。详见 sms-patterns.json → party_extraction.exclude_keywords。

输出格式(向用户展示):

text
📋 短信解析结果:
- 类型:文书送达
- 案号:(YYYY)苏XXXX民初XXXX号
- 当事人:张三、xx有限公司
- 下载链接:已提取(zxfw.court.gov.cn)
第二步:确定归档目录

0. 先读归档根目录配置 config/workspace.json 的 case_root,按下列优先级确定「归档基准目录」,不要一上来就扫当前工作区:

优先级条件归档基准说明
1当前工作目录本身就是一个案件目录(目录名含案号,或目录内有 案件信息.md / case.yaml)当前工作目录保留「一案一工作区」习惯,就地归档
2case_root 非空case_root在根目录下按 search_depth(默认 3 层)递归查找命中的案件目录
3case_root 为 null 或配置文件不存在当前工作目录旧行为,向后兼容

命中 case_root 模式时,只在该根目录树内匹配与新建,不得把文书落进当前工作区。必须递归匹配,否则「案件目录已存在于根目录的子文件夹里」会被漏掉,从而在根目录重建一份重复目录——这是最容易出的错。

  1. 在基准目录内匹配案件目录:案号优先(兼容全角 ()/半角 ()/〔〕),其次当事人组合;命中多个同案号目录时取最近修改者,并在归档报告中说明
  2. 查找归档子目录:在匹配到的案件目录下,查找法院文书相关的子目录(如 08*、法院送达、court 等)
  3. 如未找到匹配案件,自动在基准目录下按 `new_case_dir_template` 新建 {案号} {当事人与案由}/,不询问用户
2.1 上下文核验(避免遗漏跨法院/多程序并行的关键事实)

命中已有案件目录后,先读该案件目录根下的 `案件信息.md`(或对应叙事文档)和 case.yaml 的程序历程,再继续第四步。这一步专门应对以下情形——错过任何一项都会产出错误归档:

  • 跨法院并行:同一对当事人、同一标的,已有 A 法院案号在办,新送达来自 B 法院且案号不同——必须用 B 法院案号归到现有项目目录,并标注二者关系;不得默默写入 A 法院案号路径导致日后翻案底找不到对应文书。
  • 重复立案/管辖回流:该项目历史上曾被某法院退回"不属于本院管辖",现在同一法院又出现新案号——属异常事件,必须在报告里点出,由用户决定是否走管辖异议或撤诉协调。
  • 当事人同名陷阱:两个独立项目共享相同原告/被告姓名,目录短码不同——核 case.yaml 的律所案号/法院案号双重校验,避免把新文书归档到错误的同名项目。

读取到的关键背景写进 archive.archive.context_notes,归档报告里也单独列「与现有项目的关系」一节,避免用户只看短信原文时漏掉案号冲突。

第三步:文书下载
平台判断:根据第一步识别的链接域名,选择下载策略。
- zxfw.court.gov.cn → 方案一(API 直连)→ 方案二 → 方案三
- sd.gdems.com 或 jysd.10102368.com → 跳过方案一,直接方案二 → 方案三
- dzsd.hbfy.gov.cn → 湖北专属流程(见下方)
- sfpt.cdfy12368.gov.cn(含广西实例 171.106.48.55:28083)→ SFDW 专属流程(见下方)
- 未知域名但 URL 路径匹配已知平台特征 → 按路径识别平台(同构异域名支持)
- 完全无法识别 → 提示用户提供链接信息
⛔ 降级铁律:严格串行,禁止并行。当前方案成功即停止,绝不降级。禁止"双保险"并行尝试多个方案。
依赖
依赖用途适用方案安装方式
Python 3.8+送达证据检查(标准库,无需 pip)期限核对前macOS/Linux 使用已有 python3;缺少时提示安装后重试期限核对
curlAPI 下载方案一macOS/Linux 预装
jqJSON 解析(可选)方案一brew install jq
Playwright浏览器自动化方案二/三见下方

Playwright 安装指引(仅方案二/三需要):

bash
# 方案二: Playwright CLI
npm install -g playwright
npx playwright install chromium
# 方案三: Playwright MCP(需在 Claude Code 设置中配置)
# 在 settings.json 的 mcpServers 中添加:
# "playwright": { "command": "npx", "args": ["@anthropic-ai/mcp-playwright"] }
⛔ 大多数情况下不需要 Playwright:zxfw 平台方案一直接 curl 调用 API,无需浏览器。仅 gdems/jysd 平台或方案一失败后才需要方案二/三。禁止在方案一执行期间同时打开浏览器。
方案一 — API 直连(优先)

完全无头,无需浏览器。直接调用 zxfw 后端 API 获取文书下载链接,再用 curl 下载 PDF。

API 信息:

  • 端点:POST https://zxfw.court.gov.cn/yzw/yzw-zxfw-sdfw/api/v1/sdfw/getWsListBySdbhNew
  • Content-Type:application/json
  • 请求体:{ "qdbh": "xxx", "sdbh": "xxx", "sdsin": "xxx" }(从短信 URL 提取)
  • 响应字段:data[].c_wsmc(文书名称)、data[].wjlj(OSS 签名下载链接)、data[].c_fymc(法院名称)
  • 无需认证、无需浏览器
bash
# 1. 从短信 URL 提取参数(示例)
qdbh="DEMO_qdbh_value"
sdbh="DEMO_sdbh_value"
sdsin="DEMO_sdsin_value"
# 2. 调用 API 获取文书列表
mkdir -p /tmp/court-sms-staging/
resp=$(curl -s -X POST "https://zxfw.court.gov.cn/yzw/yzw-zxfw-sdfw/api/v1/sdfw/getWsListBySdbhNew" \
-H "Content-Type: application/json" \
-d "{\"qdbh\":\"$qdbh\",\"sdbh\":\"$sdbh\",\"sdsin\":\"$sdsin\"}")
# 3. 解析文书列表,逐个下载 PDF
echo "$resp" | jq -r '.data[] | "\(.c_wsmc)\t\(.wjlj)"' | while IFS=$'\t' read -r name url; do
curl -sL -o "/tmp/court-sms-staging/${name}.pdf" "$url"
done
# 4. 验证下载结果
ls -lh /tmp/court-sms-staging/*.pdf
方案二 — 无头浏览器(Playwright CLI)

当方案一 API 不可用或链接过期时,用 Playwright CLI 无头模式打开页面,拦截网络请求获取下载链接。

bash
# 需要先安装 playwright
npx playwright install chromium 2>/dev/null
# 无头模式运行(脚本需自行编写,拦截 getWsListBySdbhNew API 响应)
node scripts/download_court_docs.mjs --url "{短信链接}" --output /tmp/court-sms-staging/
方案三 — 交互式浏览器(Playwright MCP)

当方案二不可用时(需要已配置 Playwright MCP):

text
1. browser_navigate → 打开短信中的 zxfw URL
2. 等待页面加载
3. browser_evaluate → 直接调用 fetch API 获取文书列表
4. browser_run_code → 下载 PDF 文件到 /tmp/court-sms-staging/

如 API 调用未成功,改用页面交互:

text
1. browser_snapshot → 查看当前页面结构
2. 找到文书列表或 PDF 预览区域
3. 定位下载按钮(可能在 iframe 内)
4. browser_click → 点击下载
5. 等待下载完成,保存到临时目录
湖北平台下载流程(dzsd.hbfy.gov.cn)

湖北电子送达平台有两种链路,根据 URL 格式自动选择:

链路一:免账号模式(URL 含 /hb/msg=xxx)

  1. 从 URL 提取 msg 参数值
  2. 尝试 HTTP API 直连:
bash
msg="从URL提取的msg值"
mkdir -p /tmp/court-sms-staging/
# 查询文书信息
resp=$(curl -s -X POST "http://dzsd.hbfy.gov.cn/delimobile/tDeliSms/findSmsInfo?t=$(date +%s%3N)" \
-H "Content-Type: application/json" \
-H "Referer: http://dzsd.hbfy.gov.cn/deli-mobile-ui/" \
-d "{\"msg\":\"$msg\"}")
# 检查是否需要验证码(data.isNeedCaptcha == "Y")
# 如需验证码或无可下载文书,降级到 Playwright MCP
# 逐个下载文书
echo "$resp" | jq -r '.data.docList[] | "\(.docName)\t\(.downloadPath)"' | while IFS=$'\t' read -r name path; do
if [ -n "$path" ]; then
curl -sL -o "/tmp/court-sms-staging/${name}.pdf" "http://dzsd.hbfy.gov.cn/delimobile${path}"
fi
done
  1. 如需验证码或 HTTP 失败,降级到 Playwright MCP(方案三)

链路二:账号模式(URL 含 /sfsddz)

  1. 从短信正文提取凭证:
  • 账号:匹配 账号\s*(\d{15,20})
  • 默认密码:匹配 默认密码[::]\s*([0-9A-Za-z]+)
  1. 需要浏览器自动化(Playwright MCP),登录页包含验证码
  2. 登录后遍历待签收/已签收/已过期文书列表,逐个下载
提示:湖北平台两种模式都可能遇到验证码。免账号模式优先尝试 HTTP API,账号模式建议引导用户手动打开链接或使用 Playwright MCP。
司法送达网下载流程(SFDW - sfpt.cdfy12368.gov.cn)

司法送达网所有 POST 请求使用 TDHCryptoUtil 加密,无法通过 HTTP API 下载,只能使用纯 Playwright 流程。

广西实例:171.106.48.55:28083 域名下的链接路由到同一 SFDW 平台,下载流程相同。

验证码获取(两种方式,按优先级尝试):

  1. 手机尾号后6位(优先):从案件分配信息中获取律师手机号,取后6位作为验证码输入
  2. 短信验证码:从短信正文中提取,匹配 验证码[::]\s*(\w{4,6})

Playwright MCP 流程:

text
1. browser_navigate → 打开短信中的 SFDW 链接
2. 等待页面自动重定向到 pc.html?tdhParams=xxx
3. browser_snapshot → 查看验证码输入页面(input#checkCode)
4. 输入验证码(优先手机尾号后6位,其次短信验证码)
5. browser_evaluate → 调用 Vue app.checkYzm() 触发验证
6. 验证通过后 browser_evaluate → 获取 app.$data.wsList(文书列表)
7. 遍历 wsList,逐个调用 downloadFile(app, ws) 下载文书
8. 保存到 /tmp/court-sms-staging/
提示:如手机尾号验证失败,提示用户查看短信中的验证码并手动输入。wsList 每项包含 wjmc(文件名)、wjgs(格式)。
失败兜底

当三级均失败时:

text
⚠️ 自动下载失败,请手动访问以下链接下载:
{原始链接}
下载后请将文件放到对应案件目录中。
我将为您创建待处理记录。
第四步:归档保存
  1. 确定目标目录:直接沿用第二步得出的「归档基准目录 + 案件目录」,不再按当前工作区重新判断,不询问用户
  • 基准目录按第二步的三级优先级确定(案件工作区 > config/workspace.json 的 case_root > 当前工作区)
  • 如找到匹配案件目录,优先查找法院文书子目录(如 08*、法院送达、court 等);如无子目录则直接归档到案件根目录
  • 如未找到匹配案件,自动在基准目录下新建:{案号} {当事人与案由}/
  • 如目标目录不存在,自动创建
  1. 获取当前日期:date "+%Y%m%d"
  2. 确定文书标题:
  • 优先使用 API 返回的标题
  • 否则根据 sms-patterns.json 中的 document_titles 映射推断
  • 最后回退到原始文件名(去除扩展名),如仍无法确定则使用 未知文书
  1. 构建文件名:{title}({case_name})_{YYYYMMDD}收.pdf
  • 示例:受理通知书(张三与李四合同纠纷)_20260404收.pdf
  • 清理非法字符:< > : " | ? * \ /
  • 如同名文件已存在,追加 _2 后缀
  • 跨法院/多程序场景:短信案号与项目目录短码不一致时,文书名以短信案号为准({短信案号} {title}-{接收人}_{YYYYMMDD}收.pdf),不使用项目旧案号,避免后续翻案底时找不到对应文书。
  1. 移入目标目录
  • 不要顺手改 `案件信息.md`、`case.yaml`、时间线等叙事/任务文件——遇到跨法院、案号冲突、管辖异常等需要人工判断的事项,归档仅落 PDF,叙事更新由用户确认后再单独处理。
  1. 写入内部记录:保存本次处理的完整信息到 skill 内部的 `archive/` 目录(即 .claude/skills/court-sms/archive/),不是案件文件夹。格式详见 `references/archive-format.md`

> 透明告知:archive/ 会留存短信原文(sms_raw)、案号、当事人、法院编号、下载参数与 API 响应等敏感诉讼信息。该目录默认不纳入版本库(已加入 .gitignore),请勿将其同步到公开仓库、第三方网盘或共享目录。

  1. 基础文书解析:法院 PDF 通常带文字层,提取首页文本,快速识别文书类型和关键信息
  • 传票:提取开庭时间、地点、法庭、案号,向用户高亮提醒
  • 通知书/告知书:提取缴费期限、举证期限等关键日期
  • 起诉状/答辩状:提取案由、当事人、诉讼请求概要
  • 判决书/裁定书:读取正文及末尾救济告知,核对审级、程序和可上诉性;不能仅凭标题认定一审或可上诉
  • 其他文书:展示文书标题和法院名称
  • 如一次下载多份文书,逐一解析,汇总为一份报告

> 深度分析(如判决书解读、合同审查)不在此技能范围内,请使用专用分析技能处理。

  1. 上诉期限核对(P1):按 送达与期限规则 执行,不按标题直接计算
  • 先通过送达证据检查,再阅读该份文书的救济告知,核对适用期间、当事人及例外。普通民事15/10日等仅是候选规则;保全、终审、小额诉讼、境内无住所等须分别判断。
  • 核对当年官方放假调休日历及适用程序法;按日通常不计起算当日,期间内节假日照计,仅末日按规则顺延,调休上班日不按普通周末处理。
  • 送达、可上诉性、期间规则或日历任一未确认,deadline_status=pending,appeal_deadline=null、appeal_days_remaining=null,报告明确待核验项。确认无该项上诉权时用 not_applicable。
  • 只有全部核对完成才记录 deadline_status=confirmed,附 deadline_basis 和对应 service 证据。多文书、多受送达人分别计算;历史 sent_at 不能直接迁移为已确认送达日期。
  • 缴费、举证等期限单独读取原通知的起算事件与义务,禁止复用上诉期限表。
  1. 向用户汇报:按 `references/report-format.md` 输出结构化报告
  • 先确认归档完成(案号、法院、当事人、案由、文件数、位置)
  • 列出所有已归档的文书清单
  • 如含传票,⚠️ 高亮提醒开庭时间、地点、审理程序
  • 如含判决书/裁定书,⏰ 展示已核实期限或待核验原因,不省略未知状态
  • 如部分失败,列出失败文书和原始链接
第五步:PDF 后处理(可选)
不默认启用。仅在检测到文件拆分时主动提示用户。

归档完成后,扫描目标目录中的 PDF 文件,检测是否有同一文书被拆分为多个文件的情况。

读取用户偏好

读取 config/user-preferences.json 获取用户的合并和重命名偏好。如文件不存在,使用默认值(参考 config/user-preferences.example.json)。

关键偏好项:

偏好默认值说明
merge_strategyper_evidence合并策略:per_evidence(按编号分别合并)或 unified(统一合并)
merge_options.unified.bookmarks.enabledtrue统一合并时是否添加 PDF 书签
rename.enabledtrue是否精简文件名
触发检测

读取 references/sms-patterns.json → post_processing.trigger 配置,按以下规则分组:

This is the start of the file. Read the full SKILL.md on GitHub.

Security

  • Security scanPassed, 90 of 100Pattern checks on the skill's files.
  • Model reviewPassed

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
450
Repository forks
66
7-day trend score
31

Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/cat-xierluo/legal-skills/court-sms/badge)](https://verified-skill.com/skills/cat-xierluo/legal-skills/court-sms)

Something wrong with this skill or its page? Tell us.