agent-email
Agent 专用邮箱统一管理:让 Claude Code、Codex 等平台的 Agent 用一套命令收发邮件、整理收件箱、分发任务。支持网易 ClawEmail(claw.163.com)和腾讯 Agent Mail(QQ…
本技能应在用户需要 OCR、扫描识别、图片文字识别、文档识别,或将 PDF、图片、Office 文档、URL 转换为 Markdown 时使用。检测到法律材料时可进行保守的法律术语与文书结构优化。不要用于法律事实判断、补写缺失内容、语义改写、印章深度识别或图表实体分析。
$ npx -y skills add cat-xierluo/legal-skills --skill legal-ocr --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/legal-ocrContext preview
The summary Claude sees to decide when to auto-load this skill.
本技能应在用户需要 OCR、扫描识别、图片文字识别、文档识别,或将 PDF、图片、Office 文档、URL 转换为 Markdown 时使用。检测到法律材料时可进行保守的法律术语与文书结构优化。不要用于法律事实判断、补写缺失内容、语义改写、印章深度识别或图表实体分析。
name: legal-ocr description: 本技能应在用户需要 OCR、扫描识别、图片文字识别、文档识别,或将 PDF、图片、Office 文档、URL 转换为 Markdown 时使用。检测到法律材料时可进行保守的法律术语与文书结构优化。不要用于法律事实判断、补写缺失内容、语义改写、印章深度识别或图表实体分析。 version: "1.6.0" license: MIT author: 杨卫薪律师(微信ywxlaw) homepage: https://github.com/cat-xierluo/legal-skills
本技能用于 OCR、扫描识别、图片文字识别、文档识别,以及把 PDF、图片、Office 文档和 URL 转换为可继续编辑、分析和归档的 Markdown。它首先是通用 OCR 入口;当结果被识别为法律材料时,再自动启用保守型法律后处理。默认使用配置优先的自动路由:
旧的 `paddle-ocr` 和 `mineru-ocr` 保持可用;本技能是新的统一入口,目标是覆盖两者的常用 OCR/转换场景。
在以下场景使用本技能:
不优先使用本技能的场景:
| 依赖 | 安装方式 | |------|----------| | `python3` | macOS 通常已内置 | | `uv` | macOS: `brew install uv` |
脚本使用 `uv run` 执行,依赖写在脚本头部;推荐直接使用 `uv run scripts/convert.py`,无需单独维护 `requirements.txt`。
| 包名 | 用途 | 安装命令 | |------|------|----------| | `httpx` | 调用 PaddleOCR 与 MinerU API | `pip install httpx` | | `pypdfium2` | 读取 PDF 页数与拆分页码范围 | `pip install pypdfium2` | | `rapidocr` + `onnxruntime` | 可选:本地 RapidOCR 后端(`--backend rapid`) | `uv run --with rapidocr --with onnxruntime scripts/convert.py ...` 或 `pip install rapidocr` |
如直接用 `python scripts/convert.py` 运行且缺少依赖,脚本会给出安装提示。
复制配置模板:
cd legal-ocr/config cp .env.example .env nano .env
可选配置:
本技能也会尝试读取环境变量和 `~/.mineru/config.yaml` 中的 MinerU Token。 PaddleOCR 也兼容 `pdf-processor` 使用的 `PADDLE_OCR_API_ENDPOINT` / `PADDLE_OCR_API_KEY`,并支持 `/api/v2/ocr/jobs` 异步任务接口。
在技能根目录运行:
uv run scripts/convert.py "/path/to/file.pdf" uv run scripts/convert.py "/path/to/file.pdf" --pages "1-20" uv run scripts/convert.py "/path/to/file.pdf" --backend paddle uv run scripts/convert.py "/path/to/file.pdf" --backend paddle --paddle-model PaddleOCR-VL-1.5 uv run scripts/convert.py "https://example.com/document.pdf" --backend auto uv run scripts/convert.py "https://example.com/article" --backend mineru uv run scripts/convert.py "/path/to/judgment.pdf" --legal-terms always uv run scripts/convert.py checktoken
敏感材料本地识别(不出本机):
uv run --with rapidocr --with onnxruntime scripts/convert.py "/path/to/scan.pdf" --backend rapid
兼容 JXA 入口:
/usr/bin/osascript -l JavaScript scripts/convert.js "/path/to/file.pdf"
可选参数:
| 参数 | 说明 | |------|------| | `--backend auto|paddle|mineru|rapid` | 指定后端;默认读取 `LEGAL_OCR_BACKEND`,未配置时为 `auto`。`rapid` 为本地 RapidOCR(onnx 推理,不出本机) | | `--text-layer auto|never|always` | PDF 原生文本层分支;默认 `auto`,达标则直读跳过 OCR;`never` 强制走 OCR;`always` 强制文本层,不可用即失败 | | `--output <path>` | 输出 Markdown 路径或目录 | | `--pages <spec>` | 页码范围,如 `1-20`、`1-5,8,10-12` | | `--archive-name <name>` | 自定义 archive 目录名 | | `--no-archive` | 不写入 archive | | `--no-post-process` | 跳过全部后处理 | | `--no-legal-terms` | 跳过法律术语优化 | | `--legal-terms auto|always|never` | 法律术语优化模式;默认 `auto` | | `--no-line-merge` | 跳过 OCR 硬换行整理 | | `--model pipeline|vlm` | MinerU Token API 模型 | | `--paddle-model PP-OCRv5|PaddleOCR-VL-1.5` | PaddleOCR 异步任务模型 | | `--paddle-api-protocol auto|sync|async` | PaddleOCR API 协议 | | `--paddle-api-extra-json <path>` | 合并额外 PaddleOCR optionalPayload |
PaddleOCR 同步接口会校验后端实际返回页数。若返回页数少于本地 PDF 批次页数,转换会失败并提示降低 `PADDLEOCR_BATCH_PAGES` 或使用 `--pages` 重跑,避免缺页结果被误当作成功。
本地 PDF 进入 OCR 后端之前,会先探测是否带可用的原生文本层(v1.5.0+)。这是法律场景里的高频优化:法院电子送达判决书、电子合同、政府公文等 PDF 通常已带可靠文本层,直读比 OCR 更准、更快、不耗 API 额度。
1. 仅本地 `.pdf` 触发;图片、Office、URL 不参与。 2. 用 `pypdfium2` 逐页抽取文字,计算 4 个指标:文本页覆盖率、平均 CJK / 页、乱码比例(PUA + 替换字符 + 非常见字符)、总字符数。 3. 全部阈值达标 → 直接转 Markdown,复用既有 post-process(法律术语 → 硬换行整理 → 基础清理)。 4. 任一不达标 → 落回原有 OCR 候选(PaddleOCR → MinerU),完全兼容旧工作流。
| 模式 | 行为 | |------|------| | `auto`(默认) | 探测后达标走文本层,不达标回退 OCR | | `never` | 完全禁用文本层,回到旧版纯 OCR 行为 | | `always` | 强制走文本层;不可用时直接 exit=2 失败,便于排障 |
| env | 默认 | 含义 | |-----|------|------| | `LEGAL_OCR_TEXT_LAYER_MIN_COVERAGE` | `0.8` | 文本页占探测页比例下限 | | `LEGAL_OCR_TEXT_LAYER_MIN_CHARS_PER_PAGE` | `50` | 文本页平均 CJK 字符下限 | | `LEGAL_OCR_TEXT_LAYER_MAX_GARBLE_RATIO` | `0.05` | PUA + 替换字符 + 非常见字符占比上限 | | `LEGAL_OCR_TEXT_LAYER_MIN_TOTAL_CHARS` | `100` | 非空白字符总数下限 |
阈值默认值的理由见 `references/text-layer-detection.md` 与 `DECISIONS.md`。如果你拿到一批真实卷宗发现误判(例如应该走 OCR 的 PDF 走了文本层,或反之),把指标和样本反馈给维护者,再调阈值或加新规则。
无论是否走文本层,PDF 输入都会在 `metadata.json` 留下 `text_layer` 字段:
Agent 专用邮箱统一管理:让 Claude Code、Codex 等平台的 Agent 用一套命令收发邮件、整理收件箱、分发任务。支持网易 ClawEmail(claw.163.com)和腾讯 Agent Mail(QQ…
把一句自然语言(机票/高铁/开庭/会议/截止日期/聚会/看病等)或一张票据截图,自动变成苹果「日历」事件 + 一串按事件类型智能提前的「提醒事项」。在 macOS 上运行、经 iCloud 同步到 iPhone/iPad。当用户说「帮我加个日程/提醒」「机票…
律师案件看板。本地零依赖看板服务(案件总览、任务三态看板、期限预警、进度写回)+周研判分析。当用户说"打开看板/dashboard/案件面板/看下案件进度/给我案件周报研判"时使用。案件状态写入与上下文管理用 case-progress(/progress…
案件进度与状态台账管理。案件 case.yaml 的唯一写入引擎(新增任务、推进任务、登记期限、更新案件阶段、校验、存量迁移),Agent 会话的进度加载与写回契约,以及案件进度监控对账。当用户或 Agent…