{"owner":"anthropics","repo":"claude-for-legal","hasSkills":true,"hasMcp":false,"mcpConfig":null,"found":["CLAUDE.md"],"skills":{"CLAUDE.md":"# CLAUDE.md\n\nGuidance for working on this repo. `claude-for-legal` is a Claude Code plugin\nmarketplace — twelve first-party legal plugins, one vendor plugin, and five\nmanaged-agent cookbooks. Most work here is editing prompt content (skills,\nagents, hooks), plugin metadata, or cookbook config — not application code.\n\n## Layout\n\n```\n.claude-plugin/marketplace.json   # the marketplace manifest — one entry per plugin\n<plugin>/                         # 12 first-party plugins (commercial-legal, privacy-legal, ...)\n  .claude-plugin/plugin.json      # plugin manifest (name, version, description, author)\n  .mcp.json                       # MCP servers the plugin connects to\n  CLAUDE.md                       # practice-profile TEMPLATE (see \"Plugin CLAUDE.md\" below)\n  README.md                       # per-plugin docs\n  skills/<name>/SKILL.md          # one skill per directory\n  agents/<name>.md                # subagent definitions\n  hooks/hooks.json                # hook config (most plugins ship an empty stub)\n  .gitignore\nexternal_plugins/<vendor>/        # vendor-maintained plugins (CoCounsel)\nmanaged-agent-cookbooks/<name>/   # CMA agent.yaml + subagents/ + steering-examples.json\nscripts/                          # validate.py, lint-tool-scope.py, orchestrate.py,\n                                  # deploy-managed-agent.sh, test-cookbooks.sh\nreferences/                       # shared templates (company-profile, dashboard)\n```\n\n## Validation — run before opening a PR\n\nThis repo follows the same conventions `anthropics/claude-plugins-official`\nenforces in CI. Run the equivalent checks locally:\n\n```bash\n# 1. Marketplace + per-plugin schema validation (source of truth)\nclaude plugin validate .claude-plugin/marketplace.json\nfor d in */; do [ -f \"$d/.claude-plugin/plugin.json\" ] && claude plugin validate \"$d\"; done\nclaude plugin validate external_plugins/cocounsel-legal\n\n# 2. Cookbook tool-scope lint (orchestrators must not over-grant tools)\npython3 scripts/lint-tool-scope.py\n\n# 3. JSON/YAML sanity\npython3 -c \"import json,glob; [json.load(open(f)) for f in glob.glob('**/*.json', recursive=True)]\"\n```\n\n### Marketplace invariants (I1–I11)\n\n`claude-plugins-official` layers these on top of the schema check. They apply\nhere too — the ones most likely to trip a contributor:\n\n- **I1** — `plugins[]` should be alpha-sorted by name (case-insensitive).\n  *Currently a known warning: the array is in a curated display order. If you\n  add a plugin, ask before re-sorting the whole array.*\n- **I2** — no duplicate plugin names.\n- **I3** — `description` 10–2000 chars, no leading/trailing whitespace.\n- **I8** — every vendored `source` (`\"./<dir>\"`) must point at a directory that\n  contains `.claude-plugin/plugin.json`.\n- **I9** — `source` paths/URLs must contain no shell metacharacters or `..`.\n- **I10** — no hidden Unicode (zero-width chars, bidi controls) in\n  `name`/`description`.\n- **I11** — `name` must match `^[a-z0-9][a-z0-9-]{1,63}$`.\n\n### Frontmatter requirements\n\nEvery `agents/*.md` needs `name` and `description`. Every\n`skills/<name>/SKILL.md` needs `description`. Every `commands/*.md` needs\n`description`. Multi-line descriptions use `>` block scalars and that's fine —\n`claude plugin validate` parses them correctly.\n\n## Conventions\n\n### Keep `marketplace.json` in sync with `plugin.json`\n\nFor first-party plugins, `marketplace.json`'s `name`, `description`, and\n`author` should match the plugin's own `.claude-plugin/plugin.json` field for\nfield. If you change a plugin's description in one place, change it in the\nother.\n\n### Skill names in prose must be canonical\n\nWhen a `SKILL.md` (especially `customize` or `cold-start-interview`) tells the\nuser \"run `/foo`,\" `foo` must be the actual `skills/<foo>/` directory name.\nShort forms like `/triage` for `/use-case-triage` look right in prose but are\ndead commands — the user types them and nothing happens. Refs to Claude Code\nbuilt-ins (`/mcp`, `/plugin`) and to other plugins (`/<other-plugin>:<skill>`)\nare fine.\n\n### Plugin CLAUDE.md is a template, not project context\n\nEach `<plugin>/CLAUDE.md` is a practice-profile template that the\n`cold-start-interview` skill copies to `~/.claude/plugins/config/claude-for-legal/<plugin>/CLAUDE.md`\non the user's machine. It is *not* loaded as project context when the plugin is\ninstalled — `claude plugin validate` warns about this and the warning is\nexpected. Don't \"fix\" it by moving the content into a skill.\n\n### `external_plugins/` is vendor-maintained\n\nPlugins under `external_plugins/` are built and maintained by the vendor\n(README.md has the policy). Don't change vendor-authored content without\nchecking with them first; whitespace normalization and formatting are usually\nfine since the vendor lands changes via PR rather than mirroring a fork.\n\n### Formatting\n\n- 2-space indent in all JSON and `.mcp.json` files.\n- Final newline at end of every text file.\n- No trailing whitespace.\n- Markdown tables: pipe-aligned columns are nice but not required; just keep\n  the column count consistent.\n\n## Cookbooks\n\nEach `managed-agent-cookbooks/<name>/` has `agent.yaml` (the orchestrator),\n`subagents/*.yaml` (the leaves), `steering-examples.json`, and `README.md`. Two\nrules that `scripts/lint-tool-scope.py` enforces:\n\n1. The orchestrator gets local-only tools (`read`, `grep`, `glob`,\n   `agent_toolset`); MCP and write tools belong to specific subagent leaves.\n2. The README's security table and the `agent.yaml` comments must match what\n   the YAML actually grants. Don't claim a tool a subagent doesn't have.\n\n## Things to leave alone\n\n- Per-plugin `.gitignore` files differ slightly across plugins. Probably\n  intentional; ask before unifying.\n- `hooks/hooks.json` is missing in two plugins. Hooks are optional; the missing\n  files are not a bug.\n- `references/` lives only at repo root and is not shipped inside any plugin\n  directory. Several plugin `CLAUDE.md` templates reference it as if it were —\n  that's a known gap, not a thing to silently move.\n"},"files":{"CLAUDE.md":"# CLAUDE.md\n\nGuidance for working on this repo. `claude-for-legal` is a Claude Code plugin\nmarketplace — twelve first-party legal plugins, one vendor plugin, and five\nmanaged-agent cookbooks. Most work here is editing prompt content (skills,\nagents, hooks), plugin metadata, or cookbook config — not application code.\n\n## Layout\n\n```\n.claude-plugin/marketplace.json   # the marketplace manifest — one entry per plugin\n<plugin>/                         # 12 first-party plugins (commercial-legal, privacy-legal, ...)\n  .claude-plugin/plugin.json      # plugin manifest (name, version, description, author)\n  .mcp.json                       # MCP servers the plugin connects to\n  CLAUDE.md                       # practice-profile TEMPLATE (see \"Plugin CLAUDE.md\" below)\n  README.md                       # per-plugin docs\n  skills/<name>/SKILL.md          # one skill per directory\n  agents/<name>.md                # subagent definitions\n  hooks/hooks.json                # hook config (most plugins ship an empty stub)\n  .gitignore\nexternal_plugins/<vendor>/        # vendor-maintained plugins (CoCounsel)\nmanaged-agent-cookbooks/<name>/   # CMA agent.yaml + subagents/ + steering-examples.json\nscripts/                          # validate.py, lint-tool-scope.py, orchestrate.py,\n                                  # deploy-managed-agent.sh, test-cookbooks.sh\nreferences/                       # shared templates (company-profile, dashboard)\n```\n\n## Validation — run before opening a PR\n\nThis repo follows the same conventions `anthropics/claude-plugins-official`\nenforces in CI. Run the equivalent checks locally:\n\n```bash\n# 1. Marketplace + per-plugin schema validation (source of truth)\nclaude plugin validate .claude-plugin/marketplace.json\nfor d in */; do [ -f \"$d/.claude-plugin/plugin.json\" ] && claude plugin validate \"$d\"; done\nclaude plugin validate external_plugins/cocounsel-legal\n\n# 2. Cookbook tool-scope lint (orchestrators must not over-grant tools)\npython3 scripts/lint-tool-scope.py\n\n# 3. JSON/YAML sanity\npython3 -c \"import json,glob; [json.load(open(f)) for f in glob.glob('**/*.json', recursive=True)]\"\n```\n\n### Marketplace invariants (I1–I11)\n\n`claude-plugins-official` layers these on top of the schema check. They apply\nhere too — the ones most likely to trip a contributor:\n\n- **I1** — `plugins[]` should be alpha-sorted by name (case-insensitive).\n  *Currently a known warning: the array is in a curated display order. If you\n  add a plugin, ask before re-sorting the whole array.*\n- **I2** — no duplicate plugin names.\n- **I3** — `description` 10–2000 chars, no leading/trailing whitespace.\n- **I8** — every vendored `source` (`\"./<dir>\"`) must point at a directory that\n  contains `.claude-plugin/plugin.json`.\n- **I9** — `source` paths/URLs must contain no shell metacharacters or `..`.\n- **I10** — no hidden Unicode (zero-width chars, bidi controls) in\n  `name`/`description`.\n- **I11** — `name` must match `^[a-z0-9][a-z0-9-]{1,63}$`.\n\n### Frontmatter requirements\n\nEvery `agents/*.md` needs `name` and `description`. Every\n`skills/<name>/SKILL.md` needs `description`. Every `commands/*.md` needs\n`description`. Multi-line descriptions use `>` block scalars and that's fine —\n`claude plugin validate` parses them correctly.\n\n## Conventions\n\n### Keep `marketplace.json` in sync with `plugin.json`\n\nFor first-party plugins, `marketplace.json`'s `name`, `description`, and\n`author` should match the plugin's own `.claude-plugin/plugin.json` field for\nfield. If you change a plugin's description in one place, change it in the\nother.\n\n### Skill names in prose must be canonical\n\nWhen a `SKILL.md` (especially `customize` or `cold-start-interview`) tells the\nuser \"run `/foo`,\" `foo` must be the actual `skills/<foo>/` directory name.\nShort forms like `/triage` for `/use-case-triage` look right in prose but are\ndead commands — the user types them and nothing happens. Refs to Claude Code\nbuilt-ins (`/mcp`, `/plugin`) and to other plugins (`/<other-plugin>:<skill>`)\nare fine.\n\n### Plugin CLAUDE.md is a template, not project context\n\nEach `<plugin>/CLAUDE.md` is a practice-profile template that the\n`cold-start-interview` skill copies to `~/.claude/plugins/config/claude-for-legal/<plugin>/CLAUDE.md`\non the user's machine. It is *not* loaded as project context when the plugin is\ninstalled — `claude plugin validate` warns about this and the warning is\nexpected. Don't \"fix\" it by moving the content into a skill.\n\n### `external_plugins/` is vendor-maintained\n\nPlugins under `external_plugins/` are built and maintained by the vendor\n(README.md has the policy). Don't change vendor-authored content without\nchecking with them first; whitespace normalization and formatting are usually\nfine since the vendor lands changes via PR rather than mirroring a fork.\n\n### Formatting\n\n- 2-space indent in all JSON and `.mcp.json` files.\n- Final newline at end of every text file.\n- No trailing whitespace.\n- Markdown tables: pipe-aligned columns are nice but not required; just keep\n  the column count consistent.\n\n## Cookbooks\n\nEach `managed-agent-cookbooks/<name>/` has `agent.yaml` (the orchestrator),\n`subagents/*.yaml` (the leaves), `steering-examples.json`, and `README.md`. Two\nrules that `scripts/lint-tool-scope.py` enforces:\n\n1. The orchestrator gets local-only tools (`read`, `grep`, `glob`,\n   `agent_toolset`); MCP and write tools belong to specific subagent leaves.\n2. The README's security table and the `agent.yaml` comments must match what\n   the YAML actually grants. Don't claim a tool a subagent doesn't have.\n\n## Things to leave alone\n\n- Per-plugin `.gitignore` files differ slightly across plugins. Probably\n  intentional; ask before unifying.\n- `hooks/hooks.json` is missing in two plugins. Hooks are optional; the missing\n  files are not a bug.\n- `references/` lives only at repo root and is not shipped inside any plugin\n  directory. Several plugin `CLAUDE.md` templates reference it as if it were —\n  that's a known gap, not a thing to silently move.\n"},"items":[{"name":"CLAUDE.md","path":"CLAUDE.md","title":"CLAUDE.md","content":"# CLAUDE.md\n\nGuidance for working on this repo. `claude-for-legal` is a Claude Code plugin\nmarketplace — twelve first-party legal plugins, one vendor plugin, and five\nmanaged-agent cookbooks. Most work here is editing prompt content (skills,\nagents, hooks), plugin metadata, or cookbook config — not application code.\n\n## Layout\n\n```\n.claude-plugin/marketplace.json   # the marketplace manifest — one entry per plugin\n<plugin>/                         # 12 first-party plugins (commercial-legal, privacy-legal, ...)\n  .claude-plugin/plugin.json      # plugin manifest (name, version, description, author)\n  .mcp.json                       # MCP servers the plugin connects to\n  CLAUDE.md                       # practice-profile TEMPLATE (see \"Plugin CLAUDE.md\" below)\n  README.md                       # per-plugin docs\n  skills/<name>/SKILL.md          # one skill per directory\n  agents/<name>.md                # subagent definitions\n  hooks/hooks.json                # hook config (most plugins ship an empty stub)\n  .gitignore\nexternal_plugins/<vendor>/        # vendor-maintained plugins (CoCounsel)\nmanaged-agent-cookbooks/<name>/   # CMA agent.yaml + subagents/ + steering-examples.json\nscripts/                          # validate.py, lint-tool-scope.py, orchestrate.py,\n                                  # deploy-managed-agent.sh, test-cookbooks.sh\nreferences/                       # shared templates (company-profile, dashboard)\n```\n\n## Validation — run before opening a PR\n\nThis repo follows the same conventions `anthropics/claude-plugins-official`\nenforces in CI. Run the equivalent checks locally:\n\n```bash\n# 1. Marketplace + per-plugin schema validation (source of truth)\nclaude plugin validate .claude-plugin/marketplace.json\nfor d in */; do [ -f \"$d/.claude-plugin/plugin.json\" ] && claude plugin validate \"$d\"; done\nclaude plugin validate external_plugins/cocounsel-legal\n\n# 2. Cookbook tool-scope lint (orchestrators must not over-grant tools)\npython3 scripts/lint-tool-scope.py\n\n# 3. JSON/YAML sanity\npython3 -c \"import json,glob; [json.load(open(f)) for f in glob.glob('**/*.json', recursive=True)]\"\n```\n\n### Marketplace invariants (I1–I11)\n\n`claude-plugins-official` layers these on top of the schema check. They apply\nhere too — the ones most likely to trip a contributor:\n\n- **I1** — `plugins[]` should be alpha-sorted by name (case-insensitive).\n  *Currently a known warning: the array is in a curated display order. If you\n  add a plugin, ask before re-sorting the whole array.*\n- **I2** — no duplicate plugin names.\n- **I3** — `description` 10–2000 chars, no leading/trailing whitespace.\n- **I8** — every vendored `source` (`\"./<dir>\"`) must point at a directory that\n  contains `.claude-plugin/plugin.json`.\n- **I9** — `source` paths/URLs must contain no shell metacharacters or `..`.\n- **I10** — no hidden Unicode (zero-width chars, bidi controls) in\n  `name`/`description`.\n- **I11** — `name` must match `^[a-z0-9][a-z0-9-]{1,63}$`.\n\n### Frontmatter requirements\n\nEvery `agents/*.md` needs `name` and `description`. Every\n`skills/<name>/SKILL.md` needs `description`. Every `commands/*.md` needs\n`description`. Multi-line descriptions use `>` block scalars and that's fine —\n`claude plugin validate` parses them correctly.\n\n## Conventions\n\n### Keep `marketplace.json` in sync with `plugin.json`\n\nFor first-party plugins, `marketplace.json`'s `name`, `description`, and\n`author` should match the plugin's own `.claude-plugin/plugin.json` field for\nfield. If you change a plugin's description in one place, change it in the\nother.\n\n### Skill names in prose must be canonical\n\nWhen a `SKILL.md` (especially `customize` or `cold-start-interview`) tells the\nuser \"run `/foo`,\" `foo` must be the actual `skills/<foo>/` directory name.\nShort forms like `/triage` for `/use-case-triage` look right in prose but are\ndead commands — the user types them and nothing happens. Refs to Claude Code\nbuilt-ins (`/mcp`, `/plugin`) and to other plugins (`/<other-plugin>:<skill>`)\nare fine.\n\n### Plugin CLAUDE.md is a template, not project context\n\nEach `<plugin>/CLAUDE.md` is a practice-profile template that the\n`cold-start-interview` skill copies to `~/.claude/plugins/config/claude-for-legal/<plugin>/CLAUDE.md`\non the user's machine. It is *not* loaded as project context when the plugin is\ninstalled — `claude plugin validate` warns about this and the warning is\nexpected. Don't \"fix\" it by moving the content into a skill.\n\n### `external_plugins/` is vendor-maintained\n\nPlugins under `external_plugins/` are built and maintained by the vendor\n(README.md has the policy). Don't change vendor-authored content without\nchecking with them first; whitespace normalization and formatting are usually\nfine since the vendor lands changes via PR rather than mirroring a fork.\n\n### Formatting\n\n- 2-space indent in all JSON and `.mcp.json` files.\n- Final newline at end of every text file.\n- No trailing whitespace.\n- Markdown tables: pipe-aligned columns are nice but not required; just keep\n  the column count consistent.\n\n## Cookbooks\n\nEach `managed-agent-cookbooks/<name>/` has `agent.yaml` (the orchestrator),\n`subagents/*.yaml` (the leaves), `steering-examples.json`, and `README.md`. Two\nrules that `scripts/lint-tool-scope.py` enforces:\n\n1. The orchestrator gets local-only tools (`read`, `grep`, `glob`,\n   `agent_toolset`); MCP and write tools belong to specific subagent leaves.\n2. The README's security table and the `agent.yaml` comments must match what\n   the YAML actually grants. Don't claim a tool a subagent doesn't have.\n\n## Things to leave alone\n\n- Per-plugin `.gitignore` files differ slightly across plugins. Probably\n  intentional; ask before unifying.\n- `hooks/hooks.json` is missing in two plugins. Hooks are optional; the missing\n  files are not a bug.\n- `references/` lives only at repo root and is not shipped inside any plugin\n  directory. Several plugin `CLAUDE.md` templates reference it as if it were —\n  that's a known gap, not a thing to silently move.\n","category":"root","tokens":1500}]}