Skip to content

Commit 4d55f53

Browse files
authored
Post-merge cleanup: whitespace, doc sync, canonical skill names, root CLAUDE.md (#33)
Cleanup pass following the CoCounsel merge (#4) and Lexis removal (#5): - Normalize whitespace and JSON indentation across plugin metadata files - Sync marketplace.json with plugin.json (ip-legal description, Courtroom5 title field) - Add missing ai-inventory and invention-intake rows to README skill reference - Replace stale short-form skill names in customize/cold-start SKILL.md prose with canonical directory names across 11 plugins (same bug class as the /setup -> /cold-start-interview QA fix) - Fix FYY -> FYI typo and a phantom WebFetch claim in launch-radar docs - Address review findings: line-wrapped /check-claims, /renewals-due -> /renewal-tracker, stale /setup in references/, agent.yaml comment contradiction, redundant 'intake intake' - Add root CLAUDE.md with validation conventions (claude plugin validate, I1-I11 invariants, frontmatter requirements) and a marketplace.json description + $schema No behavioral changes. claude plugin validate passes clean.
1 parent 9cecd91 commit 4d55f53

35 files changed

Lines changed: 207 additions & 70 deletions

File tree

.claude-plugin/marketplace.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
{
2+
"$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
23
"name": "claude-for-legal",
4+
"description": "Reference agents, skills, and data connectors for the legal workflows we see most — in-house commercial, privacy, product, corporate, employment, litigation, regulatory, AI governance, IP, and the learning side of the practice (law school clinics and students).",
35
"owner": {
46
"name": "Anthropic"
57
},
@@ -95,7 +97,7 @@
9597
{
9698
"name": "ip-legal",
9799
"source": "./ip-legal",
98-
"description": "Runs first-pass trademark clearance and freedom-to-operate triage, drafts and triages cease-and-desist letters and DMCA takedowns (send and respond), checks open source compliance, reviews IP clauses, and tracks registrations and renewal deadlines.",
100+
"description": "Runs first-pass trademark clearance and freedom-to-operate triage, screens invention disclosures for initial patentability, drafts and triages cease-and-desist letters and DMCA takedowns (send and respond), checks open source compliance, reviews IP clauses, and tracks registrations and renewal deadlines.",
99101
"author": {
100102
"name": "Anthropic"
101103
}

CLAUDE.md

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
# CLAUDE.md
2+
3+
Guidance for working on this repo. `claude-for-legal` is a Claude Code plugin
4+
marketplace — twelve first-party legal plugins, one vendor plugin, and five
5+
managed-agent cookbooks. Most work here is editing prompt content (skills,
6+
agents, hooks), plugin metadata, or cookbook config — not application code.
7+
8+
## Layout
9+
10+
```
11+
.claude-plugin/marketplace.json # the marketplace manifest — one entry per plugin
12+
<plugin>/ # 12 first-party plugins (commercial-legal, privacy-legal, ...)
13+
.claude-plugin/plugin.json # plugin manifest (name, version, description, author)
14+
.mcp.json # MCP servers the plugin connects to
15+
CLAUDE.md # practice-profile TEMPLATE (see "Plugin CLAUDE.md" below)
16+
README.md # per-plugin docs
17+
skills/<name>/SKILL.md # one skill per directory
18+
agents/<name>.md # subagent definitions
19+
hooks/hooks.json # hook config (most plugins ship an empty stub)
20+
.gitignore
21+
external_plugins/<vendor>/ # vendor-maintained plugins (CoCounsel)
22+
managed-agent-cookbooks/<name>/ # CMA agent.yaml + subagents/ + steering-examples.json
23+
scripts/ # validate.py, lint-tool-scope.py, orchestrate.py,
24+
# deploy-managed-agent.sh, test-cookbooks.sh
25+
references/ # shared templates (company-profile, dashboard)
26+
```
27+
28+
## Validation — run before opening a PR
29+
30+
This repo follows the same conventions `anthropics/claude-plugins-official`
31+
enforces in CI. Run the equivalent checks locally:
32+
33+
```bash
34+
# 1. Marketplace + per-plugin schema validation (source of truth)
35+
claude plugin validate .claude-plugin/marketplace.json
36+
for d in */; do [ -f "$d/.claude-plugin/plugin.json" ] && claude plugin validate "$d"; done
37+
claude plugin validate external_plugins/cocounsel-legal
38+
39+
# 2. Cookbook tool-scope lint (orchestrators must not over-grant tools)
40+
python3 scripts/lint-tool-scope.py
41+
42+
# 3. JSON/YAML sanity
43+
python3 -c "import json,glob; [json.load(open(f)) for f in glob.glob('**/*.json', recursive=True)]"
44+
```
45+
46+
### Marketplace invariants (I1–I11)
47+
48+
`claude-plugins-official` layers these on top of the schema check. They apply
49+
here too — the ones most likely to trip a contributor:
50+
51+
- **I1**`plugins[]` should be alpha-sorted by name (case-insensitive).
52+
*Currently a known warning: the array is in a curated display order. If you
53+
add a plugin, ask before re-sorting the whole array.*
54+
- **I2** — no duplicate plugin names.
55+
- **I3**`description` 10–2000 chars, no leading/trailing whitespace.
56+
- **I8** — every vendored `source` (`"./<dir>"`) must point at a directory that
57+
contains `.claude-plugin/plugin.json`.
58+
- **I9**`source` paths/URLs must contain no shell metacharacters or `..`.
59+
- **I10** — no hidden Unicode (zero-width chars, bidi controls) in
60+
`name`/`description`.
61+
- **I11**`name` must match `^[a-z0-9][a-z0-9-]{1,63}$`.
62+
63+
### Frontmatter requirements
64+
65+
Every `agents/*.md` needs `name` and `description`. Every
66+
`skills/<name>/SKILL.md` needs `description`. Every `commands/*.md` needs
67+
`description`. Multi-line descriptions use `>` block scalars and that's fine —
68+
`claude plugin validate` parses them correctly.
69+
70+
## Conventions
71+
72+
### Keep `marketplace.json` in sync with `plugin.json`
73+
74+
For first-party plugins, `marketplace.json`'s `name`, `description`, and
75+
`author` should match the plugin's own `.claude-plugin/plugin.json` field for
76+
field. If you change a plugin's description in one place, change it in the
77+
other.
78+
79+
### Skill names in prose must be canonical
80+
81+
When a `SKILL.md` (especially `customize` or `cold-start-interview`) tells the
82+
user "run `/foo`," `foo` must be the actual `skills/<foo>/` directory name.
83+
Short forms like `/triage` for `/use-case-triage` look right in prose but are
84+
dead commands — the user types them and nothing happens. Refs to Claude Code
85+
built-ins (`/mcp`, `/plugin`) and to other plugins (`/<other-plugin>:<skill>`)
86+
are fine.
87+
88+
### Plugin CLAUDE.md is a template, not project context
89+
90+
Each `<plugin>/CLAUDE.md` is a practice-profile template that the
91+
`cold-start-interview` skill copies to `~/.claude/plugins/config/claude-for-legal/<plugin>/CLAUDE.md`
92+
on the user's machine. It is *not* loaded as project context when the plugin is
93+
installed — `claude plugin validate` warns about this and the warning is
94+
expected. Don't "fix" it by moving the content into a skill.
95+
96+
### `external_plugins/` is vendor-maintained
97+
98+
Plugins under `external_plugins/` are built and maintained by the vendor
99+
(README.md has the policy). Don't change vendor-authored content without
100+
checking with them first; whitespace normalization and formatting are usually
101+
fine since the vendor lands changes via PR rather than mirroring a fork.
102+
103+
### Formatting
104+
105+
- 2-space indent in all JSON and `.mcp.json` files.
106+
- Final newline at end of every text file.
107+
- No trailing whitespace.
108+
- Markdown tables: pipe-aligned columns are nice but not required; just keep
109+
the column count consistent.
110+
111+
## Cookbooks
112+
113+
Each `managed-agent-cookbooks/<name>/` has `agent.yaml` (the orchestrator),
114+
`subagents/*.yaml` (the leaves), `steering-examples.json`, and `README.md`. Two
115+
rules that `scripts/lint-tool-scope.py` enforces:
116+
117+
1. The orchestrator gets local-only tools (`read`, `grep`, `glob`,
118+
`agent_toolset`); MCP and write tools belong to specific subagent leaves.
119+
2. The README's security table and the `agent.yaml` comments must match what
120+
the YAML actually grants. Don't claim a tool a subagent doesn't have.
121+
122+
## Things to leave alone
123+
124+
- Per-plugin `.gitignore` files differ slightly across plugins. Probably
125+
intentional; ask before unifying.
126+
- `hooks/hooks.json` is missing in two plugins. Hooks are optional; the missing
127+
files are not a bug.
128+
- `references/` lives only at repo root and is not shipped inside any plugin
129+
directory. Several plugin `CLAUDE.md` templates reference it as if it were —
130+
that's a known gap, not a thing to silently move.

README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ managed-agent-cookbooks/ # Claude Managed Agent cookbooks — one dir per sched
150150
launch-radar/
151151
reg-monitor/
152152
renewal-watcher/
153-
scripts/ # deploy-managed-agent.sh · validate.py · orchestrate.py · lint-tool-scope.py
153+
scripts/ # deploy-managed-agent.sh · validate.py · orchestrate.py · lint-tool-scope.py · test-cookbooks.sh
154154
.claude-plugin/
155155
marketplace.json # plugin registry
156156
```
@@ -361,6 +361,7 @@ The full map across all plugins. The cold-start interview is the first thing to
361361
| Command | Skill | What it does |
362362
|---|---|---|
363363
| `/ai-governance-legal:cold-start-interview` | cold-start-interview | Cold-start — learns your AI governance practice |
364+
| `/ai-governance-legal:ai-inventory` | ai-inventory | EU AI Act per-system inventory — track each system's role and risk tier |
364365
| `/ai-governance-legal:use-case-triage` | use-case-triage | Classify AI use case — approved, conditional, or no |
365366
| `/ai-governance-legal:aia-generation` | aia-generation | Run an AI impact assessment in house format |
366367
| `/ai-governance-legal:vendor-ai-review` | vendor-ai-review | Review vendor AI terms against governance positions |
@@ -465,6 +466,7 @@ The full map across all plugins. The cold-start interview is the first thing to
465466
| `/ip-legal:cold-start-interview` | cold-start-interview | Cold-start — learn your IP practice and posture |
466467
| `/ip-legal:clearance` | clearance | Trademark clearance first pass — knockout + similar marks |
467468
| `/ip-legal:fto-triage` | fto-triage | Freedom-to-operate triage, not an FTO opinion |
469+
| `/ip-legal:invention-intake` | invention-intake | Invention disclosure first-pass screen — novelty, obviousness, §101, bar dates |
468470
| `/ip-legal:cease-desist` | cease-desist | Draft a C&D or triage one you received |
469471
| `/ip-legal:takedown` | takedown | DMCA notice, response triage, or §512(g) counter-notice |
470472
| `/ip-legal:infringement-triage` | infringement-triage | Infringement triage across all four IP rights |

ai-governance-legal/.claude-plugin/plugin.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@
55
"author": {
66
"name": "Anthropic"
77
}
8-
}
8+
}

ai-governance-legal/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ positions and house style.
3232
| Command | Does |
3333
|---|---|
3434
| `/ai-governance-legal:cold-start-interview` | Cold-start interview — writes your practice profile |
35+
| `/ai-governance-legal:ai-inventory [list \| add \| edit \| classify \| show]` | Manage the EU AI Act per-system inventory — track each system's role and risk tier |
3536
| `/ai-governance-legal:use-case-triage [use case]` | Classify a use case against your registry (approved / conditional / never) |
3637
| `/ai-governance-legal:aia-generation [use case]` | Run an AI impact assessment (AIA) in your house style |
3738
| `/ai-governance-legal:vendor-ai-review [vendor/file]` | Review a vendor AI agreement against your positions |
@@ -45,6 +46,7 @@ positions and house style.
4546
| Skill | Purpose |
4647
|---|---|
4748
| **cold-start-interview** | Writes `~/.claude/plugins/config/claude-for-legal/ai-governance-legal/CLAUDE.md` from interview + seed docs |
49+
| **ai-inventory** | EU AI Act per-system inventory — role (provider, deployer, importer, distributor, authorized rep, product manufacturer) and risk tier per system |
4850
| **use-case-triage** | Classifies use cases against the registry; flags missing assessments |
4951
| **aia-generation** | AI impact assessment (AIA) in house format |
5052
| **vendor-ai-review** | AI-specific vendor contract review against governance positions |

ai-governance-legal/skills/cold-start-interview/SKILL.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,7 @@ that's where to go deep first.
269269
### Part 2: Regulatory footprint (2-3 min)
270270

271271
> Which regulations are actually on your radar? I don't want to assume — tell me
272-
> what's real for you. (This feeds /gap-check and /policy-monitor — the gap analysis diffs new regulations against your stated scope, and policy-monitor only watches regimes you've marked in scope.)
272+
> what's real for you. (This feeds /reg-gap-analysis and /policy-monitor — the gap analysis diffs new regulations against your stated scope, and policy-monitor only watches regimes you've marked in scope.)
273273
274274
**Do not assume any regulation applies. Ask the user which regimes they think apply, then research the AI-specific regulations currently in effect or pending in the jurisdictions where the company operates, deploys AI, or has affected parties. This landscape changes quickly — verify currency.**
275275

@@ -336,7 +336,7 @@ walk through each one.
336336

337337
**The red lines question:**
338338
> "What's the use case that's an automatic no — the thing someone could propose
339-
> and you'd stop them immediately without needing to think about it?" (This feeds /triage — the skill checks proposed AI use cases against these red lines before doing anything else, and flags anything on the list as automatic stop.)
339+
> and you'd stop them immediately without needing to think about it?" (This feeds /use-case-triage — the skill checks proposed AI use cases against these red lines before doing anything else, and flags anything on the list as automatic stop.)
340340
341341
Common categories to probe if they're slow: biometric data, emotion detection,
342342
political/religious inference, fully automated adverse decisions affecting employment
@@ -360,7 +360,7 @@ or credit, uses involving children.
360360

361361
**Escalation:**
362362

363-
> "When a review finds something that needs someone more senior to sign off — a vendor AI agreement with training-on-data or liability issues, an AI use case that doesn't fit your registry, a regulatory gap that needs a decision, or a call above your authority — who does that go to? Give me a name or a role (the GC, the Chief Privacy Officer, your boss), or say 'I decide myself.' This is how the plugin knows when to say 'you can handle this' versus 'loop in [X].' (This feeds every skill's routing logic — /triage, /review-vendor-ai, and /gap-check all check the escalation matrix before telling you to hand something up.)"
363+
> "When a review finds something that needs someone more senior to sign off — a vendor AI agreement with training-on-data or liability issues, an AI use case that doesn't fit your registry, a regulatory gap that needs a decision, or a call above your authority — who does that go to? Give me a name or a role (the GC, the Chief Privacy Officer, your boss), or say 'I decide myself.' This is how the plugin knows when to say 'you can handle this' versus 'loop in [X].' (This feeds every skill's routing logic — /use-case-triage, /vendor-ai-review, and /reg-gap-analysis all check the escalation matrix before telling you to hand something up.)"
364364
365365
Also ask:
366366
- Has anything been escalated to the board or C-suite over AI in the last year?
@@ -374,7 +374,7 @@ Also ask:
374374
### Part 5: Seed documents (3-4 min)
375375

376376
> "I want to see what you actually have. Tell me which of these exist, and share
377-
> what you can. (The AI policy feeds /policy-monitor drift detection; the prior impact assessment becomes the /aia-generation template; the vendor agreements become the starting playbook for /review-vendor-ai.)"
377+
> what you can. (The AI policy feeds /policy-monitor drift detection; the prior impact assessment becomes the /aia-generation template; the vendor agreements become the starting playbook for /vendor-ai-review.)"
378378
>
379379
> 1. **AI or acceptable use policy.** Your internal or public-facing policy on how
380380
> AI can and can't be used. This tells me your committed positions.

ai-governance-legal/skills/customize/SKILL.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,9 @@ cold-start interview and without hand-editing YAML.
7070
conditional rather than approved, surface more AIA follow-ups, and
7171
recommend more conservative vendor AI redlines."
7272
- *Adding an escalation contact:* "Every skill that routes escalations
73-
(`/triage`, `/review-vendor-ai`, `/gap-check`) will now include this
73+
(`/use-case-triage`, `/vendor-ai-review`, `/reg-gap-analysis`) will now include this
7474
contact on the relevant risk bands."
75-
- *New use case registry entry:* "`/triage` will match against this entry
75+
- *New use case registry entry:* "`/use-case-triage` will match against this entry
7676
on its next run. Existing AIAs aren't rewritten — re-run them if you want
7777
the new posture reflected."
7878

@@ -92,7 +92,7 @@ cold-start interview and without hand-editing YAML.
9292

9393
- **Never delete a section.** If the user wants to "remove" something, set it
9494
to `[Not configured]` and explain what that means for the plugin's behavior.
95-
("Removing your escalation chain means `/triage` will flag escalation-worthy
95+
("Removing your escalation chain means `/use-case-triage` will flag escalation-worthy
9696
items but won't route them to a specific person.")
9797
- **Flag internal inconsistency.** If the change would make the profile
9898
inconsistent (e.g., risk posture aggressive + escalation "everything goes to

commercial-legal/.claude-plugin/plugin.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@
55
"author": {
66
"name": "Anthropic"
77
}
8-
}
8+
}

commercial-legal/skills/cold-start-interview/SKILL.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ Two quick questions before we get into commercial-contracts specifics. These sha
173173

174174
#### Who's using this?
175175

176-
> Who'll be using this plugin day to day? (This feeds the work-product header on every /review, /amendment-history, and /renewals-due output — lawyer gets "PRIVILEGED & CONFIDENTIAL — ATTORNEY WORK PRODUCT"; non-lawyer gets "RESEARCH NOTES — NOT LEGAL ADVICE" plus research-framed outputs.)
176+
> Who'll be using this plugin day to day? (This feeds the work-product header on every /review, /amendment-history, and /renewal-tracker output — lawyer gets "PRIVILEGED & CONFIDENTIAL — ATTORNEY WORK PRODUCT"; non-lawyer gets "RESEARCH NOTES — NOT LEGAL ADVICE" plus research-framed outputs.)
177177
>
178178
> 1. **Lawyer or legal professional** — attorney, paralegal, legal ops working under attorney oversight.
179179
> 2. **Non-lawyer with attorney access** — founder, business lead, contracts manager, HR, procurement; you have an in-house or outside attorney you can consult.
@@ -347,7 +347,7 @@ If they don't have one: proceed with the questions below.
347347

348348
**Approval levels**
349349

350-
> When a review finds something that needs someone more senior to sign off — a term that's above playbook (a higher LoL cap, an indemnity structure outside your fallbacks), a risk that needs a second opinion, or a decision that's above your authority — who does that go to? Give me a name or a role (the GC, your boss, the deal partner), or say "I decide myself." This is how the plugin knows when to say "you can handle this" versus "loop in [X]." (This feeds /escalate — the skill drafts the escalation ask using this matrix, and /review uses it to decide whether a flagged term lands in your lane or somebody else's.)
350+
> When a review finds something that needs someone more senior to sign off — a term that's above playbook (a higher LoL cap, an indemnity structure outside your fallbacks), a risk that needs a second opinion, or a decision that's above your authority — who does that go to? Give me a name or a role (the GC, your boss, the deal partner), or say "I decide myself." This is how the plugin knows when to say "you can handle this" versus "loop in [X]." (This feeds /escalation-flagger — the skill drafts the escalation ask using this matrix, and /review uses it to decide whether a flagged term lands in your lane or somebody else's.)
351351
352352
**Automatic escalations**
353353
- What triggers an escalation regardless of dollar value? (Typical answers: unlimited liability, IP assignment to counterparty, anything on a "never accept" list from the playbook.)

commercial-legal/skills/customize/SKILL.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ cold-start interview and without hand-editing YAML.
6767
anything above 6 months as a deviation; existing deal-debrief entries
6868
stay as logged."
6969
- *New escalation approver:* "Any redline exceeding your own authority
70-
will now route to this approver — `/escalate` will include them by
70+
will now route to this approver — `/escalation-flagger` will include them by
7171
default for the matching risk band."
7272
- *Risk posture middle → aggressive:* "I'll accept more vendor-friendly
7373
positions without flagging them and shift the `[review]` bar higher."

0 commit comments

Comments
 (0)