Sunday, April 5

If you’ve spent any time building multi-agent systems with Claude, you’ve probably hit the same wall: context gets stale, instructions drift between sessions, and keeping a shared “brain” across agents requires duct tape and prayer. Claude Projects is Anthropic’s answer to that problem — a persistent workspace that holds files, custom instructions, and conversation history in one place. When you layer that on top of a structured development environment like Cowork, you get something genuinely useful for complex agent architectures.

This isn’t a surface-level walkthrough of clicking buttons in the Claude UI. We’re going to cover how to structure real multi-agent work: how to set up Projects so your agents share coherent context, how to write project-level instructions that actually change model behavior, and where this whole approach falls apart so you can plan around it.

What Claude Projects Actually Gives You (And What It Doesn’t)

Claude Projects, available in Claude.ai’s Pro and Team tiers, lets you create named workspaces that persist across conversations. Inside a project, you can upload files (up to 200,000 tokens of combined context), write custom instructions that apply to every conversation in that project, and keep a conversation history that Claude can reference.

The immediate practical value: you stop re-uploading your system architecture doc, your API spec, or your agent persona definitions every time you start a new session. The project-level instructions sit above the conversation level — they’re always on, always loaded, always shaping responses before you type a single word.

What it doesn’t give you: programmatic API access to project context (at time of writing, Projects is UI-only), true shared memory across agents running simultaneously, or vector search over your uploaded files. It’s persistent context, not a database. That distinction matters when you’re designing production systems.

The Cowork Connection

Cowork, for readers who haven’t encountered it, is a collaborative AI workspace that lets teams work alongside AI agents in shared environments. Think of it as the operational layer where your agents actually do work — drafting, reviewing, executing tasks — while Claude Projects functions as the knowledge layer that gives those agents consistent grounding.

The combination works well because they solve different problems. Projects handles the “what does this agent know and how does it behave” question. Cowork handles the “how do multiple agents and humans coordinate on tasks” question. Used together, you’re not just talking to Claude — you’re deploying context-aware agents into a structured workflow.

Structuring a Multi-Agent Project: The Folder Pattern

The biggest mistake I see developers make with Claude Projects is treating it like a single conversation with extra files. For multi-agent work, you want to think in functional separation: one project per agent role, with a shared-resources project that all agents reference conceptually.

Here’s the folder pattern I use:

  • Core Knowledge Project: Architecture docs, API specs, shared data schemas, business rules. This is the ground truth. Every other agent project’s instructions reference what’s documented here.
  • Orchestrator Agent Project: Instructions for a planning/routing agent. Files include task decomposition templates, agent capability summaries, escalation logic.
  • Specialist Agent Projects: One per domain (research agent, code agent, QA agent). Each has role-specific instructions and only the files relevant to that function.
  • Review/Output Project: Where synthesized outputs land. Instructions focus on quality checks, formatting standards, and handoff criteria.

This isn’t theoretical — it maps directly to how you’d structure agent roles in LangGraph or a custom orchestration layer. The project structure mirrors the agent graph.

Writing Project Instructions That Actually Change Behavior

Default Claude behavior is helpful but generic. Project instructions let you install persistent behavioral constraints, personas, and output formats. Most people write weak instructions and then wonder why Claude keeps breaking character or reformatting outputs.

Strong project instructions have four components:

1. Role and Identity

Be explicit about what this agent is and what it isn’t. “You are a senior software architect reviewing code for a fintech startup” beats “You are a helpful coding assistant.” Include the constraints: what the agent should refuse, what it should escalate, what it should never assume.

2. Output Format Specification

Specify structure, not just style. If your downstream system expects JSON with specific keys, put that in the instructions with an example. Claude is good at format compliance when you’re explicit, and terrible at it when you’re vague. Specify whether responses should include reasoning or just results — that alone cuts output tokens significantly in production.

3. Context References

Point the instructions at your uploaded files. “When answering questions about data models, refer to schema.json before responding” actually works. It creates a lookup habit rather than relying on Claude to spontaneously recall what’s in a file it loaded 10 messages ago.

4. Failure Mode Instructions

Tell the agent what to do when it doesn’t know something. “If the answer isn’t in the provided files, say so explicitly and list what additional context would resolve the uncertainty” is more useful than hoping the model volunteers that information. This is especially important for agents that feed into automated pipelines.

Here’s a concrete example of project instructions for a code review agent:

You are a code review agent for a TypeScript/Node.js backend team.

ROLE: Identify bugs, security issues, and architectural violations. Do not suggest style improvements unless they affect correctness or maintainability in a measurable way.

OUTPUT FORMAT: Always respond with structured JSON:
{
  "severity": "critical|high|medium|low",
  "issues": [{"line": number, "type": string, "description": string, "fix": string}],
  "summary": string,
  "approved": boolean
}

REFERENCE FILES: Before reviewing, check api-contracts.json for expected input/output shapes. Check security-policies.md for forbidden patterns (SQL concatenation, unvalidated env vars, etc.).

UNCERTAINTY HANDLING: If you cannot determine whether a pattern is intentional, flag it as a question rather than a finding. Do not approve PRs with unresolved questions.

That instruction set, loaded once at the project level, means every conversation in that project behaves consistently — without you re-pasting it each time.

Managing File Context Across Agent Projects

The 200,000 token file limit sounds generous until you start loading real codebases or long spec documents. In practice, you’ll hit meaningful constraints around 50–80 files of moderate size. Here’s how to stay under budget without losing coverage:

Distilled Reference Files

Instead of uploading raw source files, upload distilled summaries. A 2,000-token architectural summary of a 50,000-token codebase will give an agent 90% of the context it needs at 4% of the cost. Write these summaries yourself or use a separate “distillation” Claude conversation to generate them.

Versioned Snapshots

Projects don’t auto-sync with your actual files. Build a habit of updating project files on a cadence — weekly or per sprint. Stale context is worse than no context because it generates confident, wrong answers. I keep a checklist in the project instructions noting the last file update date.

Layered Context Strategy

Put universal context in the project files (things that don’t change conversation to conversation). Put session-specific context in the conversation itself. Don’t try to make the project files handle everything — that’s what the conversation window is for.

Wiring Claude Projects Into Your Automation Stack

Here’s the current friction point: Claude Projects has no API surface. You can’t programmatically create projects, upload files, or read project-level instructions via the API. Projects is a UI feature for human-in-the-loop workflows.

For fully automated pipelines (n8n, Make, custom scripts), you’re still using the standard Messages API with system prompts. The practical workaround is to treat your project instructions as a versioned text asset in your codebase, and inject them as system prompts programmatically.

import anthropic
from pathlib import Path

# Load your "project instructions" as a versioned file
system_prompt = Path("agents/code_review/instructions.txt").read_text()

# Load relevant context files
api_contracts = Path("context/api-contracts.json").read_text()
security_policies = Path("context/security-policies.md").read_text()

# Build the context block
context_block = f"""
<documents>
<document name="api-contracts">
{api_contracts}
</document>
<document name="security-policies">
{security_policies}
</document>
</documents>
"""

client = anthropic.Anthropic()

response = client.messages.create(
    model="claude-3-5-sonnet-20241022",
    max_tokens=1024,
    system=system_prompt + "\n\n" + context_block,  # Instructions + files combined
    messages=[
        {"role": "user", "content": f"Review this PR diff:\n\n{pr_diff}"}
    ]
)

print(response.content[0].text)

This approach means your “project” is just a directory in version control. You get the same behavioral consistency as Claude Projects, plus full programmatic control, plus git history on your instructions. For production systems, this is actually the better pattern — the UI-based Projects feature is most valuable for exploratory work and human-in-the-loop review cycles.

Where This Breaks in Production

Honest assessment of failure modes you’ll hit:

  • Context window mid-conversation: Long Projects conversations can cause earlier file content to fall out of the effective context window. Claude won’t tell you this happened. Symptoms: the agent stops referencing uploaded files correctly, gives vaguer answers. Fix: start fresh conversations more frequently rather than extending single sessions indefinitely.
  • Instruction conflicts: Project-level instructions that conflict with conversation-level instructions create unpredictable behavior. Claude generally resolves these in favor of the more recent message, but not always. Keep instructions layered cleanly — project level for invariants, conversation level for session-specific overrides.
  • Team context drift: In Team tier, multiple users can add to a project’s conversation history. Without discipline, you’ll accumulate contradictory instructions across sessions. Designate one person to own project file and instruction updates.
  • No webhook or change detection: You won’t know when a teammate modifies project instructions. Add a changelog file to your project if you’re working in a team — a simple text file where instruction changes are logged with dates and authors.

Who Should Use This Pattern

Solo founders and small teams building multi-agent workflows will get the most immediate value from Claude Projects as a way to stop losing context between sessions. The UI-first nature is a feature here, not a bug — you’re moving fast, you want something that works without infrastructure.

Teams running Claude in production via API should treat Projects as the prototyping layer. Build your agent instructions in the UI, validate behavior, then migrate the working instructions into version-controlled system prompts for your API implementation. It’s a great prompt engineering workbench.

Enterprises with compliance requirements will want the API-based pattern regardless — you need audit trails, reproducibility, and integration with existing secret management. The UI Projects feature isn’t designed for that use case yet.

The bottom line on Claude Projects: it’s a genuine productivity multiplier for the development phase of multi-agent systems. It removes the per-session setup tax that makes iterating on agent behavior so tedious. The absence of an API surface limits how far you can take it in production, but for the exploratory and prototyping work that shapes what actually ends up in production, it’s the best tool Anthropic has shipped for structured agent development.

Editorial note: API pricing, model capabilities, and tool features change frequently — always verify current details on the vendor’s website before building in production. Code examples are tested at time of writing; pin your dependency versions to avoid breaking changes. Some links in this article may be affiliate links — we may earn a commission if you sign up, at no extra cost to you.

Share.
Leave A Reply