Loading...
Loading...
Open source license compliance check for a dependency list, a single library, or outbound code. Use when reviewing a manifest, SBOM, or repo for copyleft obligations and license compatibility, when asked whether a library can ship, or when preparing code to be open-sourced.
npx skill4agent add anthropics/claude-for-legal oss-review~/.claude/plugins/config/claude-for-legal/ip-legal/CLAUDE.md~/.claude/plugins/config/claude-for-legal/ip-legal/CLAUDE.md/ip-legal:cold-start-interview/ip-legal:oss-review ~/code/my-project/package.json
/ip-legal:oss-review ~/code/my-project/requirements.txt
/ip-legal:oss-review redis
/ip-legal:oss-review ~/code/my-project # repo root — scan all manifestsCONNECTORS.md## Matter workspacesEnabled✗/ip-legal:matter-workspace switch <slug>practice-levelmatter.md~/.claude/plugins/config/claude-for-legal/ip-legal/matters/<matter-slug>/Cross-matter contexton~/.claude/plugins/config/claude-for-legal/ip-legal/CLAUDE.md/ip-legal:cold-start-interviewWhat are we reviewing?
- A dependency list —
,package.json,requirements.txt,go.mod,Gemfile,Cargo.toml, an SBOM (SPDX / CycloneDX), a lockfilepom.xml- A single library — one specific package you're considering adding
- Our own code — we're planning to open-source this and need to check what's embedded
How will this be deployed?
- SaaS / hosted service — users access over a network; nothing ships to the user
- Distributed binary — we ship compiled code to users (desktop app, mobile app, on-prem server, CLI tool)
- Internal only — used only inside the company, not distributed outside
- Embedded / firmware — shipped in hardware or as closed-system firmware
| Deployment | Licenses that materially matter |
|---|---|
| SaaS | AGPL (network-trigger), permissive attribution in any UI, SSPL/BUSL/Elastic if repurposing as competing service |
| Distributed binary | GPL, LGPL, MPL, EPL (all trigger on distribution), permissive attribution |
| Internal only | Most copyleft does not trigger — no distribution. Permissive attribution still good hygiene. AGPL still triggers if users outside the company interact over the network. |
| Embedded / firmware | GPL is especially hard to comply with here (source disclosure + reproducible build + installation information in some cases). Plan for this before shipping, not after. |
| Bucket | Examples | Key obligations |
|---|---|---|
| Permissive | MIT, BSD-2-Clause, BSD-3-Clause, Apache-2.0, ISC, Zlib, Unlicense | Attribution, preserve license text, Apache-2.0 adds patent grant + NOTICE requirement |
| Weak copyleft | LGPL-2.1, LGPL-3.0, MPL-2.0, EPL-1.0, EPL-2.0, CDDL | File-level or library-level source disclosure; linking rules vary |
| Strong copyleft | GPL-2.0, GPL-3.0, AGPL-3.0, OSL, EUPL (depending on version) | Broad source disclosure; AGPL extends to network use |
| Public domain / dedication | CC0, Unlicense, WTFPL | Typically no obligations, but some are contested in jurisdictions that don't recognize dedication to public domain |
| Non-OSI source-available | SSPL, BUSL, Commons Clause, Elastic License, Confluent Community, fair-source family | Not open source — restrict commercial use, competing-service use, or both. Read the specific license. |
| Other / custom / unknown | vendor-specific, proprietary, missing license file, license conflict between file and headers | Stop — do not treat as permissive by default |
### [package@version] — [License]
**Classification:** [Permissive / Weak copyleft / Strong copyleft / Public domain / Non-OSI / Unknown]
**Obligations for our deployment ([SaaS / binary / internal / embedded]):**
- [ ] [Specific obligation — e.g., "Include attribution in a NOTICES file shipped with the app"]
- [ ] [e.g., "If we modify and distribute, publish source of our modifications"]
- [ ] [e.g., "AGPL network trigger — if users access our modified version over a network, source must be offered to them"]
**Risk:** 🔴 Critical | 🟠 High | 🟡 Medium | 🟢 Low
**Recommendation:** [Comply with obligations | Replace with [alternative] | Remove | Attorney review before shipping | Seek commercial license from [vendor]]How is the copyleft dependency consumed? The linking relationship determines whether copyleft actually triggers. Ask or determine:
- Static linking / compilation together: The works are combined into one binary. Strong signal that copyleft triggers (LGPL "work based on the Library," GPL derivative work).
- Dynamic linking / shared library: The works remain separable at runtime. LGPL explicitly permits this ("work that uses the Library"). GPL's position is contested (FSF says derivative, others disagree).
- Header inclusion / inline functions: Can create a derivative work depending on how much is included.
- Subprocess / IPC: Separate processes communicating over well-defined interfaces. Generally not derivative.
- Network API call: For most licenses, no. For AGPL, the network-interaction clause means serving the software over a network IS distribution. In a microservices architecture, an AGPL component behind an API still triggers.
- File-scope copyleft (MPL): Only the modified files carry copyleft, not the whole work. Check whether any copyleft files were modified.
The severity rating depends on this. "LGPL — weak copyleft, linking rules vary" without the linking analysis is the answer that gets an engineer sued. Static-linked LGPL in a proprietary product is 🔴 Critical. Dynamic-linked LGPL is 🟢 Low. Same license, opposite rating.
| Level | Means |
|---|---|
| 🔴 Critical | Strong copyleft in a deployment that triggers it (e.g., GPL in a distributed binary, AGPL in a SaaS). Non-OSI license that the business model actually conflicts with (e.g., SSPL while we're building a managed service). License cannot be determined and the package is load-bearing. |
| 🟠 High | Weak copyleft with obligations the team hasn't set up for (file-level disclosure, NOTICE requirements). Dual-licensed where the chosen license is ambiguous. License file says one thing, headers say another. |
| 🟡 Medium | Permissive with attribution requirements that haven't been wired into the build (missing NOTICES file, missing LICENSE in distribution). Transitive copyleft in a position that may or may not trigger, depending on how the library is consumed. |
| 🟢 Low | Permissive with obligations already satisfied. Copyleft in a deployment model that doesn't trigger it (e.g., GPL library used internally only, with no redistribution). |
~/.claude/plugins/config/claude-for-legal/ip-legal/CLAUDE.md## Outputs## Who's using thisNo silent supplement. If a research query to the configured legal research tool returns few or no results for a rule the memo needs (enforceability of AGPL's network trigger in a given jurisdiction, scope of GPL-3.0's patent grant, latest license text for a recently-relicensed package), report what was found and stop. Do NOT fill the gap from web search or model knowledge without asking. Say: "The search returned [N] results from [tool]. Coverage appears thin for [rule / license / jurisdiction]. Options: (1) broaden the search query, (2) try a different research tool, (3) search the web — results will be taggedand should be checked against a primary source before relying, or (4) flag as unverified and stop. Which would you like?" A lawyer decides whether to accept lower-confidence sources.[web search — verify]Source attribution. Where the memo cites a license text, a court decision interpreting a license, or guidance from a steward (FSF, OSI, SPDX, SFLC), tag the citation:,[OSI],[SPDX],[FSF],[SFC/SFLC], or the MCP tool name for citations retrieved from a connector;[Westlaw]for web-search citations;[web search — verify]for citations recalled from training data;[model knowledge — verify]for license text read directly from the repo. Citations tagged[user provided]carry higher fabrication risk. Never strip or collapse the tags.verify
[WORK-PRODUCT HEADER — per plugin config ## Outputs]
# OSS Review: [Project / Dependency List / Package]
**Reviewed:** [date]
**Scope:** [Dependency list / Single library / Outbound code]
**Deployment model:** [SaaS / Binary / Internal / Embedded]
---
## Bottom line
[Two sentences. Can this ship? What has to happen first?]
**Packages reviewed:** [N]
**By classification:** [N permissive, N weak copyleft, N strong copyleft, N public domain, N non-OSI, N unknown]
**Issues:** [N]🔴 [N]🟠 [N]🟡 [N]🟢
**Approval needed from:** [name, per practice profile]
---
## Top-of-memo flags
[License-unknown list, license-conflict list, non-OSI-posing-as-OSS list, incompatible combinations]
---
## By package
[Blocks from Step 4, grouped by severity]
---
## Jurisdiction note
OSS license enforceability varies — AGPL's network trigger has not been broadly tested in court; GPL-3.0's patent clause reads differently under US vs. EU patent law; dedications to public domain are not universally recognized. State the governing-law choice for any downstream distribution (e.g., vendor agreements incorporating the code) and flag jurisdictions the practice profile marks as escalate.
---
## Outbound check (if applicable)
[From Step 6]
---
## Approval routing
[From practice profile — who approves, what triggers automatic escalation]verify## Outputs## Outputs → Dashboard offer for data-heavy outputs