Odel
VibeLawyer

VibeLawyer

Local
@jack-miPythonMITUpdated 1mo ago

Local MCP for Chinese criminal dossier review; Word notes + Excel catalogs stay on-device.

vibelawyer —— 通用化刑事案件阅卷 MCP

本地 FastMCP 阅卷工具箱。给定卷宗 PDF 目录,由 任意 Coding Agent(Cursor / Kimi Code / OpenCode / Codex / Claude Desktop 等)调用工具,产出:

  • 阅卷笔录(Word .docx)—— 七部分结构 + 案件基本信息 + 阅卷结论(结构化数据完整渲染,无截断)
  • 阅卷目录(Excel .xlsx)—— 分卷总览 / 阅卷目录 / 案件信息 / 证据索引

不依赖 Claude Code CLI。 LLM 推理由宿主 Agent 提供;PDF 解析、OCR、Word/Excel 生成均在本机完成,卷宗不经过本服务上传。

事实与证据须标注来源卷宗及页码(如 见《主卷》P55-76),并可机器校验,落实「禁止幻觉、结论可回溯」。

对任意刑事案件通用,不假定具体罪名或当事人。本仓库不收录真实卷宗;运行时将 PDF 放入本地 data/(已 gitignore),产物写入 output/(已 gitignore)。


两种用法(可穿插)

同一 case_id 下,完整流程零散按需共用全部工具,工作区状态共享。

模式何时用怎么做
完整阅卷「把这案件按标准流程阅完」create_casestart_review 拿 playbook → 按 Skill 八步顺序调工具 → 校验导出
按需调用「只查某页 / 只补一条供述 / 只出 Word」create_case 后直接调 read_pages / record_* / write_outputs

可先按 playbook 走完大半,再零散补登;也可先散读若干页,再按 playbook 补齐缺步。服务端强制锁步;顺序约束写在 Skill / playbook 里,由宿主 Agent 遵守。


架构

┌──────── 宿主 Coding Agent(Cursor / Kimi / OpenCode / Codex …)────────┐
│  读 skills/vibelawyer-review/SKILL.md;完整流程或按需调 MCP 工具        │
└───────────────────────────────┬───────────────────────────────────────┘
                                │ stdio / http
                                ▼
┌──────── vibelawyer-mcp(FastMCP)─────────────────────────────────────┐
│  create_case / 读卷 / record_* / validate / write_outputs / download   │
│  CaseWorkspace(case_id 隔离)+ 本机 PDF/OCR                            │
└───────────────────────────────┬───────────────────────────────────────┘
                                ▼
               docling → pypdfium2 → tesseract chi_sim
               → 阅卷笔录.docx + 阅卷目录.xlsx
组件作用
vibelawyer/tools.py + tool_spec.py原子工具(本地 ToolSpec,无 claude-agent-sdk
vibelawyer/mcp_server.pyFastMCP 对外暴露;passthrough 复用 handler
vibelawyer/playbook.py标准步骤与铁律;与 Skill / start_review 同源
skills/vibelawyer-review/SKILL.md宿主可加载的阅卷 Skill
vibelawyer/sessions.py多案件 case_id 隔离

start_review 只下发 playbook,不启动后台 LLM job。

可选遗留:pip install 'vibelawyer[legacy-agent]' + python -m vibelawyer.run --legacy(需本机 Claude Code CLI,非默认路径)。


安装

pip install vibelawyer
# 开发安装
pip install -e .
  • Python ≥ 3.11
  • 无需 Claude Code CLI
  • 可选(推荐):本地 docling venv(~/.local/share/docling-venv)提升扫描件 OCR
  • 可选:tesseract + chi_sim 作为 OCR 回退

接入宿主 Agent(推荐)

uvx vibelawyer
# 等价别名:
# uvx --from vibelawyer vibelawyer-mcp
# 已 pip install 时:vibelawyer 或 vibelawyer-mcp

Cursor / 通用 mcp.json

{
  "mcpServers": {
    "vibelawyer": {
      "command": "uvx",
      "args": ["vibelawyer"]
    }
  }
}

Claude Desktop(claude_desktop_config.json

{
  "mcpServers": {
    "vibelawyer": {
      "command": "uvx",
      "args": ["vibelawyer"]
    }
  }
}

Kimi Code / OpenCode / Codex

在各自 MCP 配置中填入同一 command / args。已安装包时可将 command 改为 vibelawyer(或别名 vibelawyer-mcp)、args 留空。本地 CLI 指引用 vibelawyer-cli

配置完成后,让 Agent 阅读并遵循:

skills/vibelawyer-review/SKILL.md

(或调用 start_review 获取与 Skill 同源的结构化 playbook。)


典型流程

A. 完整阅卷

  1. create_case(case_dir="/绝对路径/到卷宗目录")case_id
    (可选 defendant_hint / charge_hint / output_dir
  2. start_review(case_id) → 拿到 steps / 铁律 / 调用约定
  3. 按步:编目录 → 起诉书/当事人 → 被告供述 → 同案 → 证人 → 程序性文书 → 书证/流水 → 结论
    每步用 get_case_statusget_workspace_summary 核实登记计数(勿信口头「已完成」)
  4. validate_citationswrite_outputsdownload_output(fmt="docx"|"xlsx")

B. 按需单次调用

create_case(...)
list_volumes / search_volumes / read_pages / get_volume_outline   # 只读
record_* / add_*                                                   # 补登记
write_outputs / download_output                                    # 仅导出

CLI 辅助

python -m vibelawyer.run                # 打印 MCP 接入指引
python -m vibelawyer.run --print-playbook   # 打印完整 playbook(Markdown)

# 诊断 / 渲染冒烟(不调用 LLM)
python scripts/diag.py
python scripts/smoke_render.py

HTTP(可选)

VIBELAWYER_MCP_TRANSPORT=http VIBELAWYER_MCP_PORT=8000 vibelawyer
# 或别名:vibelawyer-mcp
# 可选鉴权:VIBELAWYER_MCP_TOKEN=<secret>

工具一览(约 25 个)

Passthrough 读/写/校验工具签名:tool_name(case_id, args={...})

生命周期与工作流

工具作用
create_case发现 PDF、建会话,返回 case_id
list_cases / get_case_status会话列表与各部分登记计数
start_review下发 playbook(宿主执行;无后台 job)
get_review_progress说明无后台 job,并再次附上 playbook
download_output取回 docx / xlsx

读卷

工具作用
list_volumes卷宗名 / 文件 / 页数
get_volume_outline逐页概览(定位文书边界)
read_pages页码区间文本(含本地 OCR)
search_volumes跨卷关键词检索
get_page_image渲染页面图像(视觉)

登记(强制带来源卷宗名 + 页码)

工具笔录部分
set_case_basic案件基本信息
record_party一、当事人(仅本案被告人)
record_indictment / add_charged_fact二、起诉书 / 指控事实
record_statement(role=defendant|codefendant|witness)三~五、供述与证言(宜含 full_text
record_procedural_doc六、程序性文书(含文号)
record_documentary_evidence / add_transaction七、书证与资金流水
add_catalog_entry阅卷目录条目
record_conclusions / record_funds_summary结论与资金勾稽

校验与导出

工具作用
get_workspace_summary各部分登记进度
validate_citations校验引用页码合法性
write_outputs生成 Word 笔录 + Excel 目录

标准阅卷步骤(playbook)

playbook.py / Skill 一致:

  1. 编制阅卷目录add_catalog_entry,定位起诉书页
  2. 起诉书与当事人set_case_basic / record_party / record_indictment / add_charged_fact
  3. 被告人供述record_statement(role=defendant),含逐字 full_text
  4. 同案人供述 — 无则跳过;有则 role=codefendant
  5. 证人证言role=witness
  6. 程序性文书record_procedural_doc(尽量含文号)
  7. 书证与流水record_documentary_evidence + 流水类 add_transaction
  8. 阅卷结论record_conclusions / record_funds_summary(不做正式辩护策略)
  9. 校验导出validate_citationswrite_outputsdownload_output

铁律(摘要)

  1. 只能依据 read_pages 实际读到的内容登记,严禁编造
  2. 每条记录必须带来源卷宗名与页码
  3. 交付物 = 工具调用,不是口头报告
  4. get_volume_outline 再精读;用 search_volumes 防遗漏
  5. 每步结束用 get_workspace_summary / get_case_status 核实计数

阅卷笔录结构

  1. 当事人基本情况(职务犯罪含任职情况)
  2. 起诉书、起诉意见书内容
  3. 被告人的供述和辩解
  4. 同案人员的供述和辩解
  5. 证人证言
  6. 程序性文书
  7. 书证

附:阅卷目录、阅卷结论(核心事实 / 证据链条 / 矛盾点 / 待核查疑点)。


在新案件上使用

  1. 新建本地目录,放入卷宗 PDF(文件名即卷宗名;会清理 (2) 等后缀)
  2. 宿主 Agent:create_case(case_dir="<绝对路径>")
  3. 完整流程走 Skill,或按需调工具后 write_outputs

无需改代码即可用于受贿、贪污、诈骗、非法吸收公众存款等;职务犯罪会提取任职情况。


约束与边界

  • 仅本地工具面:解析 / OCR / 生成在本机;不把卷宗上传到 vibelawyer 服务(宿主模型调用由其厂商负责)
  • 可回溯:事实须带来源页码;validate_citations 防幻觉页码
  • 范围:只做阅卷目录与笔录梳理,不生成正式辩护策略或出庭意见
  • 仓库不含案卷data/output/tessdata/ 已 gitignore,勿提交真实卷宗或当事人信息

目录结构

vibelawyer/
  tool_spec.py       本地 @tool / ToolSpec
  tools.py           原子工具 handler
  playbook.py        宿主步骤与铁律(与 Skill 同源)
  mcp_server.py      FastMCP Server
  sessions.py        case_id 会话
  workspace.py       CaseWorkspace + 引用校验
  pdf_volume.py      docling / pypdfium2 / tesseract
  config.py          案件发现与配置
  orchestrator.py    可选 legacy(Claude Code)
  agents.py          分步提示别名
  run.py             CLI 指引 / --print-playbook / --legacy
  generators/        docx + xlsx
skills/vibelawyer-review/SKILL.md
scripts/diag.py
scripts/smoke_render.py

License

MIT