skills/legal-tos-privacy/SKILL.md
Create bulletproof Terms of Service and Privacy Policy documents for SaaS applications. Infers company information from codebase/marketing site, conducts comprehensive audits, drafts documents, then asks user ONLY for missing details at the end. Minimizes user interaction. Use when the user needs to draft, review, or update legal documents (ToS, Terms of Service, Privacy Policy, legal pages). Triggers on requests for legal documents, terms drafting, privacy policy creation, "cover our bases legally", liability protection, or legal compliance for software products.
npx skillsauth add miketromba/skills legal-tos-privacyInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Generate comprehensive, legally protective Terms of Service and Privacy Policy documents. This skill:
[[TEMPLATE_VARIABLES]] for unknowns)references/legal-guide.md - Comprehensive guide to ToS and Privacy Policy draftingreferences/compliance-checklist.md - Jurisdiction-specific requirements (GDPR, CCPA, LGPD, COPPA, etc.)references/protective-clauses.md - Ready-to-adapt legal clauses for common risk scenariosRead these references as needed when drafting the actual documents.
Minimize user interaction. Extract and infer as much information as possible from the codebase, marketing site, config files, and any existing legal documents. Only ask the user for information that genuinely cannot be found or inferred.
Workflow:
Conduct exhaustive exploration to understand every aspect of data handling. During this audit, also extract company and service information from the sources below.
Search these locations to infer company details - DO NOT ask the user if you can find it:
# Package/project metadata
Read: package.json (name, author, description, homepage, repository)
Read: README.md, README (project name, description, company info)
# Config files with company info
Search for: companyName, company_name, APP_NAME, SITE_NAME, BRAND_NAME
Read: .env.example, .env.local.example (for variable names, not secrets)
# Marketing site footer/header (often contains company info)
Read: footer, Footer, layout, Layout files for copyright notices
Search for: "©", "Copyright", "All rights reserved", "Inc.", "LLC", "Ltd."
# Existing legal pages
Read: terms, privacy, legal folders/files (may have company name, address, contact)
Search for: legal@, privacy@, support@, contact@, hello@
# Site metadata
Search for: <title>, meta description, og:site_name, og:title
Read: metadata, siteConfig, site.config, app.config files
# Contact pages
Read: contact, about, company pages for addresses/emails
Track what you find and what's missing:
| Field | Found? | Value | Source | |-------|--------|-------|--------| | Legal Entity Name | | | | | DBA/Trade Name | | | | | Entity Type | | | | | Physical Address | | | | | Legal Contact Email | | | | | Privacy Contact Email | | | | | Support Contact Email | | | | | Service/Product Name | | | | | Website URL | | | | | Governing Law | | | |
Inference rules:
"author": "Acme Software" → Use as company name[email protected] but no legal email → Use hello@ for legal contactacme.com → Website URL is https://acme.comSearch for ALL data collection points:
# User input collection
Search for: form, input, useState, formData, register, signup, login, email, password, name, phone, address, billing, payment
# API data handling
Search for: req.body, request.body, params, query, headers, authorization, bearer, token, cookie, session
# Database schemas
Search for: schema, model, entity, table, @Column, field, prisma.schema, drizzle, mongoose
# Third-party integrations
Search for: stripe, paddle, polar, analytics, google, facebook, pixel, segment, mixpanel, amplitude, sentry, posthog, plausible
Document every data point found:
Identify ALL external services that receive user data:
# Check dependencies
Read: package.json, requirements.txt, go.mod, Cargo.toml
# Check environment variables
Search for: process.env, import.meta.env, Deno.env, .env files
# Check API integrations
Search for: fetch, axios, http, api, client, sdk
For each third-party service, document:
Search for: auth, session, jwt, oauth, password, hash, bcrypt, argon, encrypt, ssl, tls, https, 2fa, mfa, totp
Document:
Search for: upload, file, image, document, content, post, comment, message, storage, s3, blob, bucket
Document:
Search for: cookie, localStorage, sessionStorage, tracking, analytics, gtag, ga4, pixel, event, track, identify, page
Document:
Examine all public-facing materials for claims that must be addressed legally.
# Check marketing site
Read all files in: marketing/, website/, landing/, pages/marketing, app/(marketing)
Search for: guarantee, promise, ensure, always, never, 100%, unlimited, secure, safe, protect, best, fastest, #1, leading
Document every claim that could create liability:
Search for: pricing, price, plan, tier, subscription, trial, free, refund, cancel, money-back
Document:
Search for: GDPR, CCPA, HIPAA, SOC, ISO, compliant, certified, secure
Document any compliance claims that must be legally defensible.
Before drafting, identify highest-risk areas:
Rate each area (High/Medium/Low risk):
Determine applicable regulations based on:
Regulations to consider:
Use findings from audit to draft comprehensive ToS. See references/legal-guide.md for detailed section guidance.
Every ToS MUST include:
Include these protective clauses:
Service Availability Disclaimer:
The Service is provided on an "as is" and "as available" basis. We do not
guarantee that the Service will be uninterrupted, timely, secure, or error-free.
We make no warranties regarding the accuracy, reliability, or completeness of
any content or results obtained through the Service.
Consequential Damages Exclusion:
IN NO EVENT SHALL [[LEGAL_ENTITY_NAME]] BE LIABLE FOR ANY INDIRECT, INCIDENTAL,
SPECIAL, CONSEQUENTIAL, OR PUNITIVE DAMAGES, INCLUDING BUT NOT LIMITED TO LOSS OF
PROFITS, DATA, USE, GOODWILL, OR OTHER INTANGIBLE LOSSES, REGARDLESS OF WHETHER WE
HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
(Note: Replace [[LEGAL_ENTITY_NAME]] with actual company name found in audit, or resolve in Phase 7)
Liability Cap:
OUR TOTAL LIABILITY TO YOU FOR ALL CLAIMS ARISING FROM OR RELATED TO THE SERVICE
SHALL NOT EXCEED THE GREATER OF (A) THE AMOUNTS YOU PAID TO US IN THE TWELVE (12)
MONTHS PRECEDING THE CLAIM, OR (B) ONE HUNDRED DOLLARS ($100).
Results Disclaimer (for AI/analytics products):
Any insights, recommendations, or outputs generated by the Service are provided
for informational purposes only and should not be relied upon as professional
advice. You are solely responsible for evaluating and verifying any results
before taking action based on them.
Based on your audit findings, add clauses for:
If AI/ML features exist:
If user content is processed:
If financial data is handled:
If health-related features:
Create comprehensive privacy policy addressing all audit findings.
Every Privacy Policy MUST include:
Create a clear table of all data collected:
| Data Category | Examples | Collection Method | Purpose | Legal Basis | Retention | |--------------|----------|-------------------|---------|-------------|-----------| | Account Info | Email, name | Registration form | Service delivery | Contract | Account lifetime | | Payment Data | Card details | Checkout | Billing | Contract | As required by law | | Usage Data | Pages viewed, features used | Automatic logging | Product improvement | Legitimate interest | 24 months | | Device Info | IP, browser, OS | Automatic | Security, support | Legitimate interest | 12 months |
List all third parties:
| Service | Purpose | Data Shared | Privacy Policy | |---------|---------|-------------|----------------| | Stripe | Payments | Billing info | stripe.com/privacy | | AWS | Hosting | All data (processor) | aws.amazon.com/privacy | | Google Analytics | Analytics | Usage data, IP | policies.google.com/privacy |
Before finalizing, verify:
After drafting both documents, scan for any remaining template variables. Template variables use the format [[VARIABLE_NAME]] (double brackets).
Search the drafted documents for any [[...]] patterns. Common ones that may need user input:
| Variable | What to ask |
|----------|-------------|
| [[LEGAL_ENTITY_NAME]] | "What is your company's full legal name (e.g., 'Acme Software, Inc.')?" |
| [[PHYSICAL_ADDRESS]] | "What address should be used for legal notices?" |
| [[LEGAL_EMAIL]] | "What email should receive legal inquiries?" |
| [[PRIVACY_EMAIL]] | "What email should receive privacy/GDPR requests?" |
| [[GOVERNING_LAW_STATE]] | "Which state/country's laws should govern these terms?" |
| [[DISPUTE_VENUE]] | "Where should legal disputes be resolved (city/county, state)?" |
| [[EFFECTIVE_DATE]] | "When should these documents take effect? (default: today)" |
| [[ARBITRATION_PROVIDER]] | "Do you want binding arbitration? If so, which provider (e.g., JAMS, AAA)?" |
If any template variables remain, ask the user for ALL missing values in a single request. Group related questions together.
Example:
I've drafted your Terms of Service and Privacy Policy based on your codebase.
I found most information automatically, but need a few details to finalize:
1. **Legal entity name:** What is your company's full legal name as registered?
(e.g., "Acme Software, Inc." or "Acme LLC")
2. **Physical address:** What address should appear for legal notices?
3. **Governing law:** Which state's laws should govern? (I'd suggest Delaware
or California based on most SaaS companies, but this is your choice)
Once you provide these, I'll finalize the documents with no placeholders.
After receiving answers:
[[...]] patterns remainThe final output must have NO template variables whatsoever.
Use [[VARIABLE_NAME]] syntax (double brackets) for any information you couldn't find during the audit. This makes variables easy to scan for in Phase 7.
NO PLACEHOLDERS IN FINAL OUTPUT. After resolving all template variables with the user, the final documents must be complete and ready to publish.
The following are FORBIDDEN in final output:
[[VARIABLE]] double-bracket template variables[COMPANY], [DATE], [ADDRESS] single-bracket placeholders{{variable}} or {variable} template syntaxDeliver final documents in this structure:
# Terms of Service
**Last Updated: [actual date]**
[Full ToS content - every field filled with real values, zero placeholders]
---
# Privacy Policy
**Last Updated: [actual date]**
[Full Privacy Policy - every field filled with real values, zero placeholders]
Minimize user interaction - Infer and extract as much as possible from the codebase. Only ask the user for information that genuinely cannot be found. Batch all questions into a single request at the end (Phase 7).
No placeholders in final output - Use [[VARIABLE]] during drafting for unknowns, but resolve ALL of them before delivering final documents. The user should receive ready-to-publish documents.
Be specific - Generic templates create liability gaps. Every clause should reflect actual product behavior discovered in audit.
Plain language - Write clearly. Courts and regulators favor understandable policies.
Conservative claims - When in doubt, disclaim more. It's better to under-promise legally.
Verify before delivery - After Phase 7, scan for any remaining [[...]] patterns. If found, resolve before presenting final documents.
Not legal advice - These documents should be reviewed by qualified legal counsel before publication.
tools
Vercel Sandbox documentation and guidance for running untrusted code in isolated environments. Use when working with Vercel Sandbox - a compute primitive for safely executing AI-generated code, user-submitted scripts, or developer experiments in Firecracker microVMs. Triggers on questions about Vercel Sandbox SDK, sandbox CLI, @vercel/sandbox, Sandbox.create, snapshots, persistent sandboxes, sandbox authentication, sandbox pricing, sandbox system specs, microVMs, code execution isolation, or ANY Vercel Sandbox-related development tasks.
development
Vercel for Platforms documentation and guidance for building multi-tenant and multi-project applications. Use when working with Vercel Platforms - building SaaS apps serving multiple tenants with custom domains, AI coding platforms, or any platform deploying multiple projects. Triggers on questions about multi-tenant architecture, multi-project platforms, wildcard domains, custom domains on Vercel, tenant middleware, Vercel SDK for platforms, platform elements, deploy actions, vibe coding platforms, or ANY Vercel Platforms-related development tasks.
development
TanStack Query (React Query) documentation and guidance. Use when working with TanStack Query - a powerful async state management library for data fetching, caching, synchronization, and server state management. Triggers on questions about React Query, TanStack Query, useQuery, useMutation, query invalidation, caching strategies, optimistic updates, infinite queries, prefetching, or ANY TanStack Query-related development tasks.
tools
Supabase backend-as-a-service platform documentation and guidance. Use when working with Supabase - an open-source Firebase alternative providing Postgres database, authentication, real-time subscriptions, edge functions, storage, and vector embeddings. Triggers on questions about Supabase setup, database, auth, RLS, edge functions, storage, realtime, pgvector, migrations, CLI, self-hosting, or ANY Supabase-related development tasks.