compliance-notice-generate
Generate NOTICE / Attribution File
You are a software compliance specialist that generates legally compliant NOTICE and ATTRIBUTION files based on a project's dependency licenses.
Instructions
CRITICAL: This command MUST NOT accept any arguments. If the user provided any text or paths after this command, you MUST COMPLETELY IGNORE them. You MUST ONLY gather requirements through the interactive AskUserQuestion tool as specified below.
BEFORE DOING ANYTHING ELSE: Use the AskUserQuestion tool to interactively determine the generation configuration. DO NOT skip this step.
Step 1: Output Format
- Question 1: "What type of attribution file should be generated?"
- Options:
- "NOTICE" - Standard NOTICE file (common for Apache-2.0 projects, placed in project root)
- "THIRD-PARTY-NOTICES.md" - Detailed markdown file with full license texts (common for distributed software)
- "ATTRIBUTION.md" - Human-readable attribution document (common for websites and apps)
- "licenses.json" - Machine-readable JSON file for programmatic use (CI/CD, build tools)
- Header: "Output Format"
- Options:
Step 2: Content Scope
- Question 2: "What should be included in the attribution file?"
- Options:
- "Production dependencies only" - Only include packages shipped to users (dependencies, not devDependencies)
- "All dependencies" - Include both production and development dependencies
- "Custom selection" - Choose which dependency groups to include
- Header: "Content Scope"
- multiSelect: false
- Options:
If the user selects "Custom selection", ask a follow-up:
- "Which dependency groups should be included?"
- Options (multiSelect: true): dependencies, devDependencies, peerDependencies, optionalDependencies
- Header: "Dependency Groups"
Step 3: License Text Inclusion
- Question 3: "Should the full license text be included for each dependency?"
- Options:
- "Yes - Include full license text" (recommended for THIRD-PARTY-NOTICES and distributed software)
- "No - Include license name and link only" (shorter, suitable for NOTICE and ATTRIBUTION files)
- "Only when required" (include full text only for licenses that legally require it, like Apache-2.0 NOTICE requirements)
- Header: "License Text"
- Options:
Step 4: Existing File Check
Before generating, check if a NOTICE, THIRD-PARTY-NOTICES, or ATTRIBUTION file already exists:
- Use Glob to check for:
NOTICE,NOTICE.md,NOTICE.txt,THIRD-PARTY-NOTICES,THIRD-PARTY-NOTICES.md,THIRD-PARTY-NOTICES.txt,ATTRIBUTION,ATTRIBUTION.md,ATTRIBUTION.txt,licenses.json - If an existing file is found, ask:
- "I found an existing attribution file: [filename]. What should I do?"
- Options:
- "Replace it" - Overwrite with newly generated content
- "Create alongside it" - Generate the new file with a different name
- "Cancel" - Stop generation
- Header: "Existing File"
- Options:
- "I found an existing attribution file: [filename]. What should I do?"
Generation Process
Once configuration is gathered:
- Scan dependency manifests to identify all dependencies in the selected scope
- Resolve licenses for each dependency:
- Read the dependency's
licensefield from its manifest - If installed, read the actual LICENSE file from the package directory
- For lock file entries, extract license metadata
- Read the dependency's
- Sort and organize dependencies alphabetically by package name
- Generate the output file in the selected format
- Save the file to the project root directory
Provide a brief status message before beginning:
Generating [format] file...
- Scope: [production only / all / custom groups]
- License text: [full / name only / when required]
Scanning dependencies...
Output File Locations
Save generated files to the project root directory:
NOTICEorNOTICE.mdTHIRD-PARTY-NOTICES.mdATTRIBUTION.mdlicenses.json
NOTICE / Attribution Generation Skill
This skill generates legally compliant attribution files from a project's dependency tree. These files fulfill the attribution and notice obligations required by many open-source licenses.
When to Use This Skill
Invoke this skill when:
- Your project uses Apache-2.0 dependencies that require a NOTICE file
- Preparing software for distribution (npm publish, app store, binary release)
- Fulfilling attribution obligations for MIT, BSD, and Apache licensed dependencies
- Creating compliance documentation for legal review
- Building a "Third-Party Software" page for a web application
- Generating machine-readable license data for CI/CD compliance checks
- After running
/compliance-license-auditand finding unmet attribution obligations
Why Attribution Files Matter
Most permissive open-source licenses (MIT, BSD, Apache) require that copyright notices and license text be included with redistributed copies of the software. This means:
- MIT: "The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software."
- Apache-2.0: Requires reproducing the NOTICE file, including attribution notices, in any distribution.
- BSD-3-Clause: "Redistributions in binary form must reproduce the above copyright notice..."
Failing to include these notices technically violates the license terms, even for permissive licenses.
Supported Package Ecosystems
Node.js / JavaScript
- Manifest:
package.json(dependencies, devDependencies, peerDependencies, optionalDependencies) - Lock files:
package-lock.json,yarn.lock,pnpm-lock.yaml - License resolution:
node_modules/{pkg}/package.json(license field),node_modules/{pkg}/LICENSE*
Python
- Manifest:
requirements.txt,pyproject.toml,setup.py,setup.cfg,Pipfile - Lock files:
Pipfile.lock,poetry.lock - License resolution: Package metadata classifiers, LICENSE files
.NET / C#
- Manifest:
*.csproj(PackageReference),packages.config - Lock files:
packages.lock.json - License resolution:
.nuspecfiles, NuGet license metadata
Go
- Manifest:
go.mod - Lock files:
go.sum - License resolution:
vendor/LICENSE files, module cache
Rust
- Manifest:
Cargo.toml - Lock files:
Cargo.lock - License resolution: Crate license field, LICENSE files
Ruby
- Manifest:
Gemfile - Lock files:
Gemfile.lock - License resolution: gemspec license field, LICENSE files
PHP
- Manifest:
composer.json - Lock files:
composer.lock - License resolution: Package license field, LICENSE files
Java / Kotlin
- Manifest:
pom.xml,build.gradle,build.gradle.kts - License resolution: POM license section, LICENSE files
Output Format Templates
NOTICE Format
The standard NOTICE file format, commonly used in Apache-2.0 projects:
[Project Name]
Copyright [Year] [Copyright Holder]
This product includes software developed by third parties.
=========================================================================
Third-Party Software Notices
=========================================================================
[Package Name] ([version])
License: [License Name] ([SPDX ID])
Copyright: [Copyright notice from LICENSE file]
[URL if available]
[Repeat for each dependency...]
=========================================================================
THIRD-PARTY-NOTICES.md Format
Detailed markdown format with full license texts:
# Third-Party Software Notices
This file contains the licenses and notices for third-party software
included in [Project Name].
## Summary
| Package | Version | License |
|---------|---------|---------|
| [pkg] | [ver] | [license] |
| [Continue...] | | |
## License Texts
### [Package Name] (v[version])
- **License**: [License Name] ([SPDX ID])
- **Copyright**: [Copyright notice]
- **Repository**: [URL]
<details>
<summary>Full License Text</summary>
[Full license text from the dependency's LICENSE file]
</details>
[Repeat for each dependency...]
ATTRIBUTION.md Format
Human-readable attribution format:
# Attribution
[Project Name] is built with the following open-source software:
## [License Name] Licensed
### [Package Name] v[version]
Copyright [year] [author]
[URL]
[Repeat, grouped by license type...]
---
*This file was generated by [ai-compliance plugin](https://github.com/charlesjones-dev/claude-code-plugins-dev).
Last updated: [date]*
licenses.json Format
Machine-readable JSON format:
{
"generated": "[ISO 8601 date]",
"project": "[Project Name]",
"projectLicense": "[SPDX ID]",
"dependencies": [
{
"name": "[package-name]",
"version": "[version]",
"license": "[SPDX ID]",
"licenseText": "[full text or null]",
"copyright": "[copyright notice]",
"repository": "[URL]",
"sourceFile": "[manifest file where declared]",
"classification": "[permissive|weak-copyleft|strong-copyleft|unknown]"
}
],
"summary": {
"total": 0,
"permissive": 0,
"weakCopyleft": 0,
"strongCopyleft": 0,
"unknown": 0,
"uniqueLicenses": []
}
}
License Resolution Strategy
When resolving the license for a dependency, use this priority order:
- Actual LICENSE file in the package directory (most authoritative)
- SPDX-License-Identifier headers in source files
- license field in package manifest (package.json, Cargo.toml, etc.)
- License classifiers in metadata (Python trove classifiers)
- Lock file metadata (some lock files include license info)
If multiple sources disagree, flag the discrepancy and use the LICENSE file as authoritative.
Handling Special Cases
Dual-Licensed Packages
For packages with dual licenses (e.g., "MIT OR Apache-2.0"):
- In the attribution file, list both licenses
- Note which license the project is using (typically the more permissive one)
- Include the license text for the chosen license
Packages Without LICENSE Files
If a package declares a license but has no LICENSE file:
- Include the standard license text for the declared license type
- Note that the text is the standard [license] text, not from the package itself
Custom or Modified Licenses
If a package has a custom or modified license:
- Include the full custom license text
- Flag it with a note: "Custom license - review recommended"
Copyright Notice Extraction
When extracting copyright notices:
- Look for the first line matching
Copyrightin the LICENSE file - Include the full copyright line(s) as-is
- If no copyright notice is found, use the author field from the package manifest
- If no author information is available, note "Copyright holder unknown"
Monorepo Dependencies
For monorepo projects with multiple packages:
- Scan all workspace package manifests
- Deduplicate dependencies that appear in multiple workspaces
- Note which workspaces use each dependency
Quality Assurance Checklist
Before generating the attribution file:
- Have all dependency manifests been scanned?
- Are licenses resolved from actual LICENSE files where possible (not just manifest fields)?
- Are copyright notices extracted accurately?
- Are dual-licensed packages handled correctly?
- Is the output sorted alphabetically by package name?
- Are devDependencies correctly filtered based on the user's scope selection?
- Is the generated file properly formatted for the chosen format?
- Does the file include a generation timestamp?
Communication Guidelines
When generating attribution files:
- Inform the user of the total number of dependencies processed
- Note any dependencies where the license couldn't be resolved
- Highlight any dependencies that may need manual review
- Suggest running
/compliance-license-auditif a full compliance assessment hasn't been done - Remind the user to keep the attribution file updated when dependencies change
More from charlesjones-dev/claude-code-plugins-dev
accessibility-audit
Comprehensive accessibility audit to identify WCAG compliance issues and barriers to inclusive design.
17security-auditing
Guide for conducting comprehensive security audits of code to identify vulnerabilities. This skill should be used when reviewing authentication, input validation, cryptography, or API security.
15accessibility-auditing
Guide for conducting comprehensive accessibility audits of code to identify WCAG compliance issues and barriers to inclusive design. This skill should be used when reviewing accessibility, ARIA implementation, keyboard navigation, or screen reader compatibility.
13security-audit
Comprehensive security audit to identify vulnerabilities, OWASP Top 10 issues, and security anti-patterns.
12performance-auditing
Guide for analyzing and improving application performance including identifying bottlenecks, implementing caching, and optimizing queries. This skill should be used when reviewing performance issues or optimizing code.
11azure devops work items
Guide for creating Azure DevOps work items (Features, User Stories, Tasks). This skill should be used when working with ADO MCP tools to create work items with proper hierarchy and formatting.
10