Community研究与数据分析github.com

danepps/legal-research-skills

深度法律研究技能,通过多个智能体在免费法律来源中展开搜索,验证每个权威引用,并返回一份格式规范、引用完整的研究备忘录。适用于判例法研究、法学学术文献综述或两者兼具。模式包括:判例法 | 学术文献 | 两者。当用户需要详尽的法理备忘录、学术争论综述、基于案例/法规的答案或对某个法律问题进行深入研究时触发。

legal-research-skills 是什么?

这个技能实现了一个专门用于法律领域的深度研究流程,默认以高效运作为设计核心。它在免费/开放网络法律来源(无Westlaw或LexisNexis)上运行一个检索管道。该设计通过分层架构和控制检索量来减少令牌消耗,同时防止虚构引用。在需要高严谨性的工作时,可以添加 `deep` 参数(例如“做一次深度搜索”),此时会牺牲速度来换取全面性。支持的来源包括判例法(CourtListener、Justia、Google Scholar判例法、康奈尔法律信息研究所、判例法访问项目、官方法院网站)和学术文献(SSRN、Google Scholar、法学院数字共享库、HeinOnline开放内容、期刊网站、教师主页)。学术文献模式还会搜索用户自己的Zotero库(如果Zotero MCP服务器可用)。该技能通过一个结构化工作流管理整个研究过程,包括解析用户请求、确保网络工具有权限、初始化研究管道、生成草稿,最后交付带有结构化格式、超链接和验证统计的最终备忘录。

兼容平台✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/danepps/legal-research-skills/tree/HEAD/claude-code/skills/legal-research

Installed? Explore more 研究与数据分析 skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

法律研究

模拟深度研究流程,专门为法律领域定制,并默认设置为高效模式。 它在免费/开放网络法律来源(无需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之前,使运行自包含:

  1. 读取 ~/.claude/settings.json 并检查 permissions.allow 是否包含 "WebFetch" 和 "WebSearch"。
  2. 如果任一缺失,添加它(合并到现有的 allow 数组中——永远不要替换它;如果路径不存在则创建 permissions.allow 路径)。如果两者都已存在,则不执行任何操作。
  3. 不要就此向用户发出提示——这是该技能的标准设置。(如果文件是托管/只读且你无法编辑,告知用户他们会看到每次获取的提示并应接受它们,或通过 /permissions 添加规则。)
  4. 可选但值得一看:确定性判例引用验证需要一个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)

引用验证和声明校准捕获的是不相交的错误类型:验证捕获关于来源的错误陈述;校准捕获被错误组合成无根据概括的真实发现。管道现在同时强制执行两者——草稿提示包含一个声明强度门(表示频率/优先级/确定性的词语,如"第一"、"唯一"、"压倒性"、"抹去",需要设计相应的搜索来支持它们,否则使用样本范围内的措辞),阅读者为每个来源标记其立场(包括假定性和非先例性的处理方式)和相关性(仅程序性/接受前提/相邻学说),历史运行获得选择偏差、边界日期和损害/排除检查,深度运行在草稿上增加专门的对抗性校准检查。第三类错误介于两者之间:一个

…

[为翻译而截断]

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

danepps/legal-research-skills

Build or extend a Zotero collection of verified sources for a project — find the sources (web, catalogs, HeinOnline via an institutional library proxy), add them with full metadata via the Zotero Web API, then run a deterministic anti-hallucination check that every added item must pass. Trigger when the user wants sources gathered into Zotero ("build a library for X", "add the books/articles on X to my Zotero", "populate <collection> with …").

danepps/legal-research-skills

Gather the full document set for a SCOTUS case being prepped for a podcast episode, class, or article — cert-stage filings, merits briefs, lower-court opinion, questions presented, and oral-argument transcript — and load them onto the user's reMarkable in a per-case folder. Manual trigger — use when the user says "prep <case>", "grab the briefs for <case>", "load up <case>", or similar.

danepps/legal-research-skills

Verify every citation and quotation in an article draft against the real sources — cases via CourtListener + official reporters, scholarship via the user's Zotero library then the open web — and return a graded, footnote-by-footnote report with a "needs your attention" section first, plus a citation-form section (short cites per Bluebook R. 10.9/4.2 and italics/small caps per R. 2.1(a)) decided from the draft alone. Trigger when the user wants a draft cite-checked ("cite-check this", "check the citations/quotes in this draft", "run cite-check on <file>"). Input: a .docx with real Word footnotes (markdown/plain-text fallback). Not a full Bluebook linter — signal order, citation order and cite composition stay out.

danepps/legal-research-skills

Quick, verified citation-finding for a specific proposition — a footnote-filler, not a research memo. Returns a few Supreme Court cites and/or a few scholarly cites (top scholars in flagship journals preferred; student notes only as a last resort), each verified with a pincite and a parenthetical or quote. Trigger when the user asks "find me a cite for X", "what should I cite for this footnote", "I need authority for the proposition that…", or pastes a sentence with an empty footnote.

相关技能