06 · Configuration & extensibility

How you teach each product about your organisation. Cowork's Projects vs Claude Code's CLAUDE.md and .claude/ — plus the shared skills / plugins / MCP layer, and the one gotcha that catches every developer.

The gotcha, first

Side by side: a Cowork project holding description, folders, instructions, links, chat projects and memory, noted as living on your computer and not shareable; and a Claude Code directory holding CLAUDE.md, rules, skills, settings, hooks and auto memory, noted as committed to the repo. A dashed red barrier between them reads Cowork does not read tilde slash dot claude.
Fig 6.1 · The unit of configuration. Two different answers to "how do I teach it about my organisation" — and a hard barrier between them.
Verbatim — Cowork overview

"Cowork loads the connectors, skills, and plugins enabled for your claude.ai account, synced at session start, and doesn't read the Claude Code CLI's ~/.claude directory on your machine. To use a skill or plugin that exists only in ~/.claude, add it in Customize."

Consequences to state explicitly in class:

Cowork: the Project as the configuration unit

A Cowork project "collects everything Claude needs for a recurring area of work." Contents, verbatim from the docs:

ItemPurpose
DescriptionWhat the project is for; Dispatch reads it when choosing a project for a task
FoldersOne or more local folders Claude can read and write inside this project's sessions
InstructionsStanding guidance applied to every session in the project
LinksReference URLs (documents, dashboards, repositories) Claude can consult
Projects from Chatclaude.ai projects whose knowledge this Cowork project can draw on
MemoryA project-scoped memory store that persists across sessions

Creating one

Three starting points: Start from scratch (empty project, new folder), Import a project (bring in an existing claude.ai project), or Use an existing folder.

Cowork project vs claude.ai project — a distinction people conflate

Cowork projectclaude.ai project
LivesOn your computer onlyIn your Claude account
Holds local folders✓ Yes✗ No
Shareable with teammates✗ No✓ Yes, on Team and Enterprise

You can link a claude.ai project into a Cowork project so sessions draw on its knowledge. "Linking doesn't merge them; the claude.ai project stays where it is."

Other documented behaviours

Claude Code: CLAUDE.md and the .claude/ directory

Where CLAUDE.md lives, in load order

ScopeLocationShared with
Managed policymacOS /Library/Application Support/ClaudeCode/CLAUDE.md
Linux/WSL /etc/claude-code/CLAUDE.md
Windows C:\Program Files\ClaudeCode\CLAUDE.md
All users in the organisation
User~/.claude/CLAUDE.mdJust you, all projects
Project./CLAUDE.md or ./.claude/CLAUDE.mdTeam, via source control
Local./CLAUDE.local.md (gitignore it)Just you, this project

How they load

The size discipline Anthropic prescribes

Documented guidance

"Target under 200 lines per CLAUDE.md file. Longer files consume more context and reduce adherence." Move reference content into skills or path-scoped rules. Note that @path imports help organisation but do not reduce context, because imported files load at launch anyway.

Rules — path-scoped instructions

.claude/rules/*.md files load every session, unless they carry paths: frontmatter, in which case they load only when Claude touches matching files:

---
paths:
  - "src/api/**/*.ts"
---

# API Development Rules
- All API endpoints must include input validation
- Use the standard error response format

Rules support glob patterns, brace expansion (budget: 1,000 expanded patterns / 4 MiB per rule), symlinks for sharing across projects, and a user-level variant at ~/.claude/rules/.

Auto memory

AGENTS.md interoperability

Claude Code reads CLAUDE.md, not AGENTS.md. If a repo already has one, create a CLAUDE.md that imports it:

@AGENTS.md

## Claude Code
Use plan mode for changes under `src/billing/`.

/init also reads Cursor rules, Copilot instructions, and (with CLAUDE_CODE_NEW_INIT=1) AGENTS.md, Devin, Windsurf and Cline rules.

The shared extension layer

Skills

Markdown files containing knowledge, workflows or instructions. Invocable as /name, or loaded automatically by the model when relevant. Both products support them.

Plugins — the interoperability layer

Verbatim — Cowork plugins guide

"Plugins are available in Cowork and Code. They aren't used in Chat."

A plugin manifest can declare any combination of:

ComponentWhat it adds
SkillsReusable instructions that teach Claude a workflow
ConnectorsMCP servers that give Claude access to an external service
AgentsSpecialised subagents Claude can delegate to
HooksScripts that run at defined points in a session
Why this matters strategically

Plugins are the only documented mechanism for a single packaged capability to work in both products. If an organisation wants "our way of doing X" to hold for both engineers and knowledge workers, a plugin is the answer — not a Cowork project and not a CLAUDE.md.

Distribution

Documented limits (both products)

LimitValue
Plugin package size (uncompressed)200 MB
Files per plugin package5,000
Marketplace repository archive512 MB
Plugins per marketplace500
Marketplaces you can add25
In-app skill viewer preview1 MB per file (larger files still available to Claude at runtime)

MCP / connectors

Model Context Protocol is the open standard connecting Claude to external systems — Google Drive, Jira, Slack, Linear, Notion, databases, internal APIs. Both products consume it.

Hooks — the asymmetry

Hooks are Claude Code's enforcement primitive, and the documentation is unusually direct about why they matter:

Verbatim — Extend Claude Code

"Put guardrails in hooks. An instruction like 'never edit .env' in CLAUDE.md or a skill is a request, not a guarantee. A PreToolUse hook that blocks the edit is enforcement. If a rule must hold every time, make it a hook rather than a prompt instruction."

In Cowork, hooks exist only as a component that an installed plugin can provide. There is no documented user-authored hook workflow. This is the sharpest governance gap between the two products and is worth its own slide for any risk or compliance stakeholder.

Two columns. On the left, request — CLAUDE.md, project instructions, skills and prompts flow into Claude interprets and decides, giving an outcome of usually followed. On the right, guarantee — permissions deny, PreToolUse hooks, sandbox and managed settings flow into blocked before the model acts, giving an outcome of always holds.
Fig 6.3 · Request vs guarantee. The single most useful distinction in the corpus. Anything you tell a probabilistic system is a request; only an out-of-band deterministic check is a guarantee. Cowork has the left column; Claude Code has both.

Choosing the right mechanism — Anthropic's own guidance

Claude Code's docs publish a "build your setup over time" table that transfers well to Cowork with light translation:

TriggerClaude Code answerCowork equivalent
Claude gets a convention wrong twiceAdd it to CLAUDE.mdAdd it to the project's Instructions
You keep typing the same prompt to start a taskSave it as a user-invocable skillSave it as a skill in Customize
You paste the same playbook for the third timeCapture it as a skillCapture it as a skill
You keep copying data from a system Claude can't seeConnect it as an MCP serverAdd the connector
A side task floods the conversation with outputRoute it through a subagentLet Cowork's sub-agent coordination handle it, or use Dispatch
You want something to happen every time without askingWrite a hook◐ No native equivalent — requires a plugin
A second repo / team needs the same setupPackage it as a pluginPackage it as a plugin

Context cost — a concept worth teaching in both products

Four tiers plotted against a when-it-loads axis: always-on instructions loading at session start and costing on every request; on-demand skills and MCP tools; isolated sub-agents with their own context window; and hooks running outside the conversation at zero cost.
Fig 6.2 · What enters working memory, and when. Loading strategy is the real classification axis for extension mechanisms — and the design rule falls straight out of it.
FeatureWhen it loadsContext cost
CLAUDE.md / Project instructionsSession startEvery request
SkillsDescriptions at start; full content when usedLow
MCP serversTool names at start; schemas on demandLow until a tool is used
SubagentsWhen spawnedIsolated from the main session
HooksOn triggerZero, unless the hook returns output
The executive-friendly framing

"Context is the agent's working memory, and it is finite. Standing instructions cost you on every request; skills cost you only when used. So put rules in instructions and reference material in skills." That single sentence explains 80% of good setup hygiene in either product.