法律研究
模拟深度研究流程,专门为法律领域定制,并默认设置为高效模式。
它在免费/开放网络法律来源(无需Westlaw或LexisNexis)上运行一个检索管道;各个阶段的形态、上限和模型映射位于步骤4中,紧邻调用部分。该设计旨在降低令牌使用量——在简单的扇出模式中,主要成本是前端模型读取每个获取的页面——同时仍能防止虚构引用。对于高风险的严肃工作,可以添加 deep(例如“做一个深度研究”),以全面性优先于速度。
来源(开放网络)
判例法:CourtListener、Justia、Google Scholar判例法、康奈尔LII、判例法访问项目、 官方法院网站。学术文献:SSRN、Google Scholar、法学院数字共享库、 HeinOnline开放内容、期刊网站、教师主页。学术文献模式还会通过Zotero MCP服务器搜索用户自己的Zotero库(如果不可用则优雅跳过)。
如何运行
1. 解析请求
从用户的提示中提取:
- question — 法律问题(必需)。
- mode —
caselaw、scholarship或both。默认为both。根据措辞推断 (“法院如何判决” → 判例法;“学术文献现状/学术争论” → 学术文献)。 - outputStyle —
practitioner(问题陈述/简要答案/IRAC分析)或academic(引言/现状/分析/脚注)。默认为:判例法用 practitioner,学术文献和两者都用 academic。 尊重显式覆盖。 - jurisdiction、asOfDate(默认为今天)以及任何 notes(事实、立场、范围)。
2. 仅在真正阻碍时澄清
如果问题过于模糊以至于无法很好地研究,在启动前提出 2-3 个有针对性的问题。 对于判例法,jurisdiction 和 procedural posture 最重要;对于学术文献,specific thesis or sub-question 和任何 time window 最重要。不要过度提问——选择合理的默认值并注明。
3. 预检查:确保网络工具已被允许(在启动前执行)
研究子智能体会大量调用 WebSearch 和 WebFetch。如果这些工具未被预先允许,每个调用都会弹出交互式权限提示——而中断的提示可能会导致研究智能体在运行中途失败(这是一个真实的故障模式:之前的运行曾因此丢失了4个向量中的2个)。
在调用Workflow之前,使运行自包含:
- 读取
~/.claude/settings.json并检查permissions.allow是否包含"WebFetch"和"WebSearch"。 - 如果任一缺失,添加它(合并到现有的
allow数组中——永远不要替换它;如果路径不存在则创建permissions.allow路径)。如果两者都已存在,则不执行任何操作。 - 不要就此向用户发出提示——这是该技能的标准设置。(如果文件是托管/只读且你无法编辑,告知用户他们会看到每次获取的提示并应接受它们,或通过
/permissions添加规则。) - 可选但值得一看:确定性判例引用验证需要一个CourtListener API令牌。测试它,不要去查找文件——运行
python3 ${CLAUDE_PLUGIN_ROOT}/skills/legal-research/check_cite.py "347 U.S. 483";如果返回exit 0且包含"found": true,则表示令牌工作正常,无需报告。check_cite.py依次从COURTLISTENER_API_TOKEN、然后COURTLISTENER_TOKEN、最后是文件~/.config/courtlistener/token解析令牌——按此顺序, 并且环境变量方式(通常在~/.claude/settings.json的env块中设置)是标准安装方式,因此缺少文件不能证明令牌不可用。如果探测实际失败, 不要阻止运行——验证智能体会回退到网络检查——但在交付步骤中提及一次(令牌页面:https://www.courtlistener.com/profile/api-token/)。
4. 启动工作流
使用捆绑脚本和解析后的参数调用 Workflow 工具:
Workflow({
scriptPath: "${CLAUDE_PLUGIN_ROOT}/skills/legal-research/legal-research.workflow.js",
args: {
skillsDir: "${CLAUDE_PLUGIN_ROOT}/skills", // 捆绑的帮助脚本所在位置
question: "<法律问题>",
mode: "caselaw" | "scholarship" | "both",
outputStyle: "practitioner" | "academic",
jurisdiction: "<例如 federal / 9th Cir. / Missouri / U.S. Supreme Court>",
asOfDate: "<YYYY-MM-DD 或 'today'>",
notes: "<事实、立场、范围、用户强调的任何内容>",
deep: false, // 仅当用户要求深度/全面/高风险研究时为 true
projectDir: "<当前工作目录——启用本地语料库调查向量;
仅当 cwd 明显与问题无关时省略>"
}
})
默认精简模式:约4个仅搜索的调查向量(加上学术文献模式下的Zotero库扫描,以及projectDir的本地语料库扫描——之前的备忘录和下载的来源是地图和线索,永远是地图和线索,绝不可作为可引用权威)。Scope还会对问题进行分类(教义性的 vs. 学术性的;是否历史性)——这会选择一个分析方法摘要注入到草稿(综合原则、裁决/附随意见边界、历史问题的跨时代分类法),对于历史问题,则跨时间层分散搜索向量,使覆盖范围不会聚集在现代经典上。直接答案覆盖单元(学术文献/两者模式,2026-07-16在Codex对比运行中击败了64智能体Claude运行后添加): Scope必须至少分配一个专门研究问题中NAMED PHENOMENON的学术文献向量——基于专家期望的专业标题术语构建,并包含对最相关篇目的引用追踪——与现象仅属的相邻文献保持区别。Survey标记此类核心候选;Triage将其提升为优先全文阅读,优先于广泛的相邻文献调查。此修复解决的问题:映射了五个相邻文献(庭外言论、回避、名人)却错过了直接关于该现象的少数作品(例如司法自传研究、"大法官图书交易"伦理部分),然后将语料库空白误认为是"没有直接学术文献存在"的发现。现在,关于不存在/空白的声明受到核心来源遗漏审计的限制(在学术方法摘要中):除非现象定向搜索和双向引用追踪实际运行,否则不得声称"没有学术文献直接涉及X"——否则该声明范围限定为"在所审查的来源中",并标记未运行的搜索。扇出按照覆盖单元组织,智能体上限是上限而非配额——不重叠的路径优于许多重叠的通用搜索。管道:调查向量 → 去重 → 最多8个独特全文阅读(总计,非每向量;读者在放弃前回退到开放获取镜像——数字共享库、作者页面、CourtListener/LII——通过硬大小限制的获取器 fetch_page.py 路由PDF,并提取立场/限制/单独意见/重要性,以及主张和引用) → 一次会话模型草稿(由方法摘要引导)→ 有界缺口填补(最多3次定向检索和一次重试波,仅在草稿标记缺失权威时)→ 分块引用检查:仅检查已引用的权威(每个智能体8个;判例引用通过CourtListener的引用查找API check_cite.py 确定性确认,加上通过 cl_case_tools.py citing 的系统性引用意见处理扫描——对案件实际引用意见进行相关性排序的处理语言探测,附带存活日期,取代旧的单次搜索快速查看;本运行已打开的来源跳过存在性重新检查)→ 轻量最终化。未被选中的候选者以及每个已读来源本身所依赖的权威,作为带有警示的未读线索带入草稿,从而保持广度而减少获取。每次运行都受支出保护:硬编码软上限(精简模式约250k输出令牌,深度模式约1M——从2026-07-15的600k提升,当时一次深度历史运行在半中间遇到上限,导致43个引用中有35个未经检查)激活与显式 +500k 预算相同的优雅降级阶梯——减少阅读 → 跳过缺口填补 → 仅验证核心引用——因此失控运行会降级而不是螺旋。读取、缺口填补和验证智能体都携带访问纪律块(同日添加):硬尝试上限、仅限WebSearch/WebFetch、以及明确禁止浏览器自动化、图书馆代理和SSO/登录流程——付费墙来源是诚实的 opened=false,而不是继续尝试的理由。模型:仅Haiku用于搜索片段调查;Sonnet用于分类、全文阅读和验证;Scope、Draft和Finalize继承会话模型(如果使用了Fable则使用Fable)。deep:true(或像 +800k 那样的令牌预算)扩展至最多7个向量,将读取上限提高到16,并为每个核心引用(上限8个)提供3轮对抗性反驳检查(重新打开来源以逐字确认引文)。工作流在后台运行,完成后通知。
5. 交付
工作流返回 { memo, exitState, degradation, counts, ... }。
- 在呈现前检查
exitState。complete→ 交付。complete_with_limits→ 交付, 同时揭示已记录的缺口(列在degradation和备忘录的"研究限制"部分中)。budget_exhausted→ 预算保护削减了实际覆盖(减少了阅读、跳过了缺口填补、 未检查引用——详见degradation);备忘录还不具备交付条件。已证实的恢复模式(2026年7月针对1960年以前的运行):启动定向读取和验证Agent运行——每个未覆盖区域一个, 赋予其要获取的特定案例/引文,并针对官方报告文本(CAP static.case.law / LOC usrep 扫描)进行确认——然后根据工作流已验证的核心内容加上填补的运行结果,自行撰写最终备忘录。不要将一半内容写着"置信度:不足"的备忘录交给用户,除非你先填补了空白或询问过。 救援智能体需要与工作流智能体相同的访问纪律(2026年7月一次学术文献运行的教训,当时一个无上限的救援智能体花费了30多分钟和约245k个令牌,升级到浏览器自动化以绕过一篇1962年的付费文章):在每个救援提示中写入严格的尝试上限(每个来源约3次)、仅限WebSearch/WebFetch、明确禁止浏览器自动化/图书馆代理/SSO流程,以及指令"付费墙——这是我到达的最强依据"是完全可接受的答案。如果救援智能体仍然卡住,使用SendMessage命令让其总结报告,而不是等待超时。 - 将备忘录呈现给用户作为主要交付物。
- 超链接(必需,根据作者要求,2026-08-29): 备忘录中出现的每篇新闻报道、博客文章或其他网络来源都必须带有其可点击的工作URL——绝不要仅使用出处名称的归因方式,如 "(Politico)" 或 "(Roll Call, July 14, 2026)"。工作流的引用块在智能体提示中强制执行此规则;对手动编辑、救援运行和任何临时(非工作流)研究备忘录同样适用此规则,并指示任何救援/补充智能体返回他们引用的每个来源的URL(没有URL的声明视为未验证)。
- 研究备忘录头部和生产页脚(必需,根据作者要求 —
~/.claude/CLAUDE.md中的全局规则): 备忘录在标题正下方直接以结构化标题块开头(Topic:/Date:/By:);Production details:块位于文件最末尾(所有附录之后,包括"本研究的限制",用---分隔)——永远不要放在顶部。Date是备忘录交付/撰写的本地日期/时间;By是Claude-<orchestrating session model>(确切ID);Production details注明技能名称、实际使用的工作流智能体模型(从运行的每个智能体进度条目中读取——不要假设)、墙钟持续时间和完成通知中的<usage>块中的令牌计数(标记为子智能体输出令牌;不包括编排器开销)。如果救援/补充运行在工作流之后进行,添加它们的智能体计数并注明持续时间仅涵盖工作流运行。 - 呈现验证计数("N个权威已验证,M个未验证"),以便用户了解可信度,并指向备忘录的**"本研究的限制"**附录(该附录现在披露每个权威的验证基础:直接全文/权威复制/二次佐证/仅引用)。
- 结果还包含
skeleton—— 一个带有引用标记的分析大纲,草稿即基于此撰写(每个关键主张都标记到其发现,缺口标记为 GAP)。默认不呈现;如果用户想审计推理过程,则提供;在手动编辑备忘录时,你自己也要使用它(一个没有骨架行支持的主张,在进一步发展之前,需要一个权威或一个警示)。 - 提供保存选项:Markdown格式保存到工作目录;Word格式通过捆绑的转换器 —
python3 ${CLAUDE_PLUGIN_ROOT}/skills/legal-research/md2docx.py memo.md memo.docx "<标题>";或通过连接器保存到Google Drive。如果用户最初要求的是 .docx 格式,直接生成即可。 - 提供对任何薄弱/未验证点的后续补充运行,或输出样式的切换。
声明校准 (v7)
引用验证和声明校准捕获的是不相交的错误类型:验证捕获关于来源的错误陈述;校准捕获被错误组合成无根据概括的真实发现。管道现在同时强制执行两者——草稿提示包含一个声明强度门(表示频率/优先级/确定性的词语,如"第一"、"唯一"、"压倒性"、"抹去",需要设计相应的搜索来支持它们,否则使用样本范围内的措辞),阅读者为每个来源标记其立场(包括假定性和非先例性的处理方式)和相关性(仅程序性/接受前提/相邻学说),历史运行获得选择偏差、边界日期和损害/排除检查,深度运行在草稿上增加专门的对抗性校准检查。第三类错误介于两者之间:一个
…
[为翻译而截断]