From legal-skills
Parses court SMS messages (service, filing, hearing notices) to extract case numbers, parties, and download links, then downloads documents and archives them to case directories.
How this skill is triggered — by the user, by Claude, or both
Slash command
/legal-skills:court-smsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
处理法院短信的完整流程:**粘贴短信 → 解析内容 → 匹配案件 → 下载文书 → 归档保存**。
处理法院短信的完整流程:粘贴短信 → 解析内容 → 匹配案件 → 下载文书 → 归档保存。
支持两种触发方式:
方式一:粘贴短信原文
收到法院短信,内容如下:
【xx市人民法院】张三,您好!您有(2025)苏0981民初1234号案件文书送达,请点击链接查收:https://zxfw.court.gov.cn/zxfw/#/pagesAjkj/app/wssd/index?qdbh=DEMO1&sdbh=DEMO2&sdsin=DEMO3
方式二:直接发送送达链接
用户可能直接粘贴送达链接(非完整短信文本),此时跳过短信文本解析,直接从 URL 中提取 qdbh、sdbh、sdsin 参数,进入第三步下载流程。
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。
references/sms-patterns.json 作为解析参考【xx法院】)+ 正文 + 链接 → 完整解析流程https://zxfw.court.gov.cn/...?qdbh=xxx&sdbh=xxx&sdsin=xxx)→ 跳过短信文本解析,直接从 URL 提取参数,进入第三步下载。案号、当事人等信息在下载文书后从文书内容中提取。a) 短信分类:根据关键词判断类型
b) 案号提取:使用正则 [((〔[]\d{4}[))〕]] 匹配标准案号格式
标准案号格式示例:
(2025)苏0981民初1234号(2024)粤0604执保5678号〔2025〕京0105民初901号c) 当事人提取:从短信文本初步识别,最终以文书内容为准
xx有限责任公司、xx有限公司、xx股份有限公司A与B、A诉B、原告A 被告B原告:xxx、被告:xxx 等d) 下载链接提取:识别短信中的送达平台链接并提取参数
| 平台 | 域名 | 下载方式 | 提取参数 |
|---|---|---|---|
| 全国法院统一送达平台 | zxfw.court.gov.cn | curl API 直连 | qdbh, sdbh, sdsin |
| 广东法院电子送达 | sd.gdems.com | 浏览器自动化 | 路径中的送达标识码 |
| 集约送达平台 | jysd.10102368.com | 浏览器自动化 | key |
| 湖北电子送达 | dzsd.hbfy.gov.cn | HTTP API(免账号)/ 浏览器自动化(账号模式) | 免账号:msg;账号模式:账号+密码从正文提取 |
| 司法送达网 | sfpt.cdfy12368.gov.cn | 纯 Playwright(无 API) | 验证码(手机尾号后6位 / 短信验证码) |
e) 发送时间提取(P0):从送达平台 API 响应中提取发送时间,用于后续上诉期限计算
dt_cjsj 字段(送达记录创建时间,ISO 8601 格式)发送:YYYY-MM-DD HH:mm 格式document.sent_at 字段排除列表:法院名称、法官姓名、地名、法律术语等不应作为当事人提取。详见
sms-patterns.json→party_extraction.exclude_keywords。
输出格式(向用户展示):
📋 短信解析结果:
- 类型:文书送达
- 案号:(2025)苏0981民初1234号
- 当事人:张三、xx有限公司
- 下载链接:已提取(zxfw.court.gov.cn)
08*、法院送达、court 等){案号} {当事人与案由}/,不询问用户平台判断:根据第一步识别的链接域名,选择下载策略。
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 路径匹配已知平台特征 → 按路径识别平台(同构异域名支持)
- 完全无法识别 → 提示用户提供链接信息
⛔ 降级铁律:严格串行,禁止并行。当前方案成功即停止,绝不降级。禁止"双保险"并行尝试多个方案。
| 依赖 | 用途 | 适用方案 | 安装方式 |
|---|---|---|---|
curl | API 下载 | 方案一 | macOS/Linux 预装 |
jq | JSON 解析(可选) | 方案一 | brew install jq |
| Playwright | 浏览器自动化 | 方案二/三 | 见下方 |
Playwright 安装指引(仅方案二/三需要):
# 方案二: 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 平台或方案一失败后才需要方案二/三。禁止在方案一执行期间同时打开浏览器。
完全无头,无需浏览器。直接调用 zxfw 后端 API 获取文书下载链接,再用 curl 下载 PDF。
API 信息:
POST https://zxfw.court.gov.cn/yzw/yzw-zxfw-sdfw/api/v1/sdfw/getWsListBySdbhNewapplication/json{ "qdbh": "xxx", "sdbh": "xxx", "sdsin": "xxx" }(从短信 URL 提取)data[].c_wsmc(文书名称)、data[].wjlj(OSS 签名下载链接)、data[].c_fymc(法院名称)# 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
当方案一 API 不可用或链接过期时,用 Playwright CLI 无头模式打开页面,拦截网络请求获取下载链接。
# 需要先安装 playwright
npx playwright install chromium 2>/dev/null
# 无头模式运行(脚本需自行编写,拦截 getWsListBySdbhNew API 响应)
node scripts/download_court_docs.mjs --url "{短信链接}" --output /tmp/court-sms-staging/
当方案二不可用时(需要已配置 Playwright MCP):
1. browser_navigate → 打开短信中的 zxfw URL
2. 等待页面加载
3. browser_evaluate → 直接调用 fetch API 获取文书列表
4. browser_run_code → 下载 PDF 文件到 /tmp/court-sms-staging/
如 API 调用未成功,改用页面交互:
1. browser_snapshot → 查看当前页面结构
2. 找到文书列表或 PDF 预览区域
3. 定位下载按钮(可能在 iframe 内)
4. browser_click → 点击下载
5. 等待下载完成,保存到临时目录
dzsd.hbfy.gov.cn)湖北电子送达平台有两种链路,根据 URL 格式自动选择:
链路一:免账号模式(URL 含 /hb/msg=xxx)
msg 参数值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
链路二:账号模式(URL 含 /sfsddz)
账号\s*(\d{15,20})默认密码[::]\s*([0-9A-Za-z]+)提示:湖北平台两种模式都可能遇到验证码。免账号模式优先尝试 HTTP API,账号模式建议引导用户手动打开链接或使用 Playwright MCP。
sfpt.cdfy12368.gov.cn)司法送达网所有 POST 请求使用 TDHCryptoUtil 加密,无法通过 HTTP API 下载,只能使用纯 Playwright 流程。
广西实例:171.106.48.55:28083 域名下的链接路由到同一 SFDW 平台,下载流程相同。
验证码获取(两种方式,按优先级尝试):
验证码[::]\s*(\w{4,6})Playwright MCP 流程:
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(格式)。
当三级均失败时:
⚠️ 自动下载失败,请手动访问以下链接下载:
{原始链接}
下载后请将文件放到对应案件目录中。
我将为您创建待处理记录。
确定目标目录:根据当前项目环境自动判断,不询问用户
08*、法院送达、court 等);如无子目录则直接归档到案件根目录{案号} {当事人与案由}/获取当前日期:date "+%Y%m%d"
确定文书标题:
sms-patterns.json 中的 document_titles 映射推断未知文书构建文件名:{title}({case_name})_{YYYYMMDD}收.pdf
受理通知书(张三与李四合同纠纷)_20260404收.pdf< > : " | ? * \ /_2 后缀移入目标目录
写入内部记录:保存本次处理的完整信息到 skill 内部的 archive/ 目录(即 .claude/skills/court-sms/archive/),不是案件文件夹。格式详见 references/archive-format.md
基础文书解析:法院 PDF 通常带文字层,提取首页文本,快速识别文书类型和关键信息
深度分析(如判决书解读、合同审查)不在此技能范围内,请使用专用分析技能处理。
上诉期限计算(P1):当识别到判决书/裁定书时自动计算
sms-patterns.json → appeal_calculation):
| 案件类型 | 上诉期限 |
|---|---|
| 民事一审判决 | 送达后15天 |
| 民事裁定 | 送达后10天 |
| 行政判决 | 送达后15天 |
| 刑事判决 | 送达后10天 |
| 刑事裁定 | 送达后5天 |
上诉截止日期 = 送达日期 + 上诉期限天数dt_cjsj 字段(送达记录创建时间)received_atdocument.appeal_deadline 和 document.appeal_days_remaining向用户汇报:按 references/report-format.md 输出结构化报告
不默认启用。仅在检测到文件拆分时主动提示用户。
归档完成后,扫描目标目录中的 PDF 文件,检测是否有同一文书被拆分为多个文件的情况。
读取 config/user-preferences.json 获取用户的合并和重命名偏好。如文件不存在,使用默认值(参考 config/user-preferences.example.json)。
关键偏好项:
| 偏好 | 默认值 | 说明 |
|---|---|---|
merge_strategy | per_evidence | 合并策略:per_evidence(按编号分别合并)或 unified(统一合并) |
merge_options.unified.bookmarks.enabled | true | 统一合并时是否添加 PDF 书签 |
rename.enabled | true | 是否精简文件名 |
读取 references/sms-patterns.json → post_processing.trigger 配置,按以下规则分组:
分组规则:
1. 证据类:文件名以"证据"开头 → 按编号分组(证据1、证据2、证据3…)
2. 其他文书:按文书类型分组(传票、起诉状、应诉通知书…)
3. 如任一组内文件数 > 3(threshold),触发提示
示例:证据3 下有 10 个 PDF → 触发。
使用 AskUserQuestion 提示用户,列出检测到的拆分情况:
检测到以下文书被拆分为多个 PDF:
- 证据3:10 个文件
- 证据5:4 个文件
是否执行 PDF 后处理(合并 + 重命名)?
→ 是,合并所有
→ 让我选择(逐个确认)
→ 跳过
用户确认后,根据 user-preferences.json 中的 merge_strategy 执行:
策略一:per_evidence(默认)
按单个证据编号分别合并,每个证据独立保留:
- 证据3 有 10 个拆分文件 → 合并为「证据3:打印截图.pdf」
- 证据5 有 4 个拆分文件 → 合并为「证据5:电脑截图.pdf」
- 未被拆分的证据(如证据1 只有 1 个文件)保持不动
策略二:unified
将证据目录 + 所有证据合并为一个「原告证据.pdf」,并添加 PDF 书签:
合并顺序:证据目录 → 证据1 → 证据2 → … → 证据N
书签格式:
📑 证据目录
📑 证据1:仲裁申请书、不予受理通知书
📑 证据2:劳动合同、保密协议
📑 证据3:被告工资表
📑 证据4:泄露账号密码的电脑截图
📑 证据5:打印及拷贝资料的电脑截图
📑 证据6:删除电脑操作痕迹的截图
书签名称使用简洁版:证据编号 + 冒号 + 证据标题(去除当事人和日期后缀)。使用 pypdf 的 add_outline_item 添加书签。
用户可随时修改
user-preferences.json切换策略,无需改动 skill 本身。
合并过程中同时标准化页面尺寸为 A4(210×297mm)。使用 pypdf 逐页处理:
from pypdf import PdfReader, PdfWriter, Transformation
A4_W = 595.27 # 210mm in points
A4_H = 841.89 # 297mm in points
for page in reader.pages:
pw, ph = float(page.mediabox.width), float(page.mediabox.height)
is_landscape = pw > ph
# 保持原始方向:纵向→A4纵向,横向→A4横向
target_w = A4_H if is_landscape else A4_W
target_h = A4_W if is_landscape else A4_H
# 等比缩放并居中
scale = min(target_w / pw, target_h / ph)
offset_x = (target_w - pw * scale) / 2
offset_y = (target_h - ph * scale) / 2
new_page = writer.add_blank_page(width=target_w, height=target_h)
page.add_transformation(Transformation().scale(scale).translate(offset_x, offset_y))
new_page.merge_page(page)
规则:
根据 user-preferences.json → rename 配置对所有文件统一重命名:
去除规则(strip_patterns):
- 去掉括号内的当事人信息:(张三与李四合同纠纷)
- 去掉日期后缀:_20260405收
- 去掉平台标记:(合并)、(自贸法庭)、(素)-
特殊映射(special_mappings):
- 起诉状(素)… → 起诉状(要素式).pdf
- 开庭传票 → 传票.pdf
重命名示例:
| 原始 | 重命名后 |
|---|---|
传票(张三与李四合同纠纷)_20260405收.pdf | 传票.pdf |
起诉状(合并).pdf | 起诉状.pdf |
起诉状(素)-要素式起诉状(合并).pdf | 起诉状(要素式).pdf |
应诉通知书(自贸法庭).pdf | 应诉通知书.pdf |
E法桥平台使用告知书(xxx)_20260405收.pdf | E法桥平台使用告知书.pdf |
每次处理完成后在 archive/ 下创建 JSON 记录,格式详见 references/archive-format.md。
【xx市人民法院】张三,您好!您有(2025)苏0981民初1234号案件文书送达,
请点击链接查收:
https://zxfw.court.gov.cn/zxfw/#/pagesAjkj/app/wssd/index?qdbh=DEMO1&sdbh=DEMO2&sdsin=DEMO3
如非本人操作请联系法院。
【xx市xx区人民法院】您好,您提交的立案材料已审核通过。
案号:(2025)京0105民初54321号
请及时缴纳诉讼费用。
【xx市xx区人民法院】提醒:您有(2025)苏0508民初567号案件,
定于2025年3月15日上午9:30在第3法庭开庭,请准时到庭。
【xx人民法院】您有案件文书待查收,请点击链接查收:
http://dzsd.hbfy.gov.cn/hb/msg=XXXXXXX
如有疑问请联系法院。
【xx人民法院】您有(2025)鄂xxxx民初xxxx号案件文书送达。
账号 420xxxxxxxxxxxxx
默认密码:xxxxxx
请登录 http://dzsd.hbfy.gov.cn/sfsddz 查收。
【xx人民法院】您有(2025)川xxxx民初xxxx号案件文书送达。
验证码:A1B2C3
请点击链接查收:https://sfpt.cdfy12368.gov.cn/sfsdw//r/xxxxxxxxxxxx
| 问题 | 解决方案 |
|---|---|
| 短信无法识别类型 | 展示原文,请用户确认类型后继续 |
| 案号提取失败 | 手动输入案号 |
| 当事人识别不准 | 提示用户确认/修正当事人列表 |
| 无匹配案件 | 提供三个选项:选已有/新建/暂存 |
| Playwright 下载超时 | 检查网络连接,尝试刷新页面重试 |
| 页面需要验证码 | 通知用户,暂停等待手动处理 |
| 下载文件损坏 | 清理临时目录,重新尝试下载 |
| 目标目录不存在 | 自动创建对应目录 |
| SFDW 验证码验证失败 | 尝试手机尾号后6位和短信验证码两种方式,均失败时提示用户联系法院 |
无额外配置需求。解析规则参考 references/sms-patterns.json。
如需修改解析规则(添加新文书标题、调整正则等),编辑该 JSON 文件即可。
完整变更日志见 CHANGELOG.md。归属声明见 references/ATTRIBUTION.md。
npx claudepluginhub cat-xierluo/legal-skills --plugin transcription-correctorActivated when you receive a court investigation order or administrative cooperation notice. Classifies, analyzes scope and confidentiality, cross-references cases, and generates objection frameworks and compliance plans.
Organizes law firm PDFs by detecting text layers, splitting/merging by document content, generating page indexes, draft manifests, and handoff files for downstream review. Also rotates, deskews, and normalizes pages to A4.
Cria skill customizada de download do PJE para qualquer tribunal, usando engenharia reversa de HAR. Ideal ao adaptar pje-download para tribunal diferente do TRF5, com HAR disponível.