Stash / Blog · June 2026 · 6 min read

Claude Custom Instructions Limit: What To Do When You've Hit the Cap

Claude's custom instructions field has a hard limit: 2,000 characters for claude.ai, and roughly the same for the API's system prompt in practice. Most people hit it faster than they expect.

You start with the basics — your role, your company, your preferred tone. Then you add your current projects. Then you want Claude to know your key contacts. Then your technical constraints. Then the three things you always have to remind it about. Before long you're trimming adjectives to fit inside the box.

This is a structural problem, not a copy-editing problem. Here's what actually works.


Why the limit bites harder than it looks

2,000 characters is about 350–400 words — roughly half a typed page. That sounds like enough until you realise how much standing context a real work setup requires:

That's already 1,350 characters, and you haven't included anything specific enough to actually be useful. You've described the shape of your context without giving Claude the content.

Claude Projects have a "project knowledge" section that's more generous — but it's still static, and the effective limit for what Claude uses from it per conversation is limited by the context window it's willing to load up front.


The three approaches people try (and why two don't scale)

1. Paste at the start of every conversation

Works. Burns 200–500 tokens before you've done anything. Takes time to maintain a pasteable block. Breaks if you're using Claude on mobile. Doesn't compose — if you have ten different context blocks for ten different work modes, you're managing a personal copy-editing system.

2. Use Claude Projects

Better — projects give you persistent knowledge per project. But you're still managing separate projects for different contexts, can't easily mix-and-match (some contacts across all projects, some project-specific), and the knowledge is read-only (you can't have Claude update your contact list mid-conversation and have it persist).

3. Load context dynamically via MCP

This is the right answer. Instead of stuffing context into a static field that Claude reads whether or not it's relevant, you load exactly the context you need at the start of a conversation — via a tool call that costs 10–80 tokens.


How dynamic context loading works

An MCP (Model Context Protocol) connector is a remote service that Claude can talk to via tools. You add it once in Claude Settings → Connectors, and it's available in every conversation.

Stash is an MCP record store with a built-in context() tool. The workflow:

  1. You store your standing context once: add(collection="context", key="me", text="Senior engineer at Acme...")
  2. You add one line to your custom instructions: Start every conversation by calling context().
  3. Every new Claude conversation loads your full context via one tool call — no character limit, no pasting

The custom instructions field now contains one sentence instead of 1,900 characters of compressed context. What Claude actually gets is richer, costs fewer tokens, and you can update it at any time without touching the settings page.

Token cost: A context() call that returns 5 records typically costs 80–150 tokens total (request + response). Compare that to pasting 400 words of context directly into the conversation: ~600 tokens, before Claude has said a word.

What to store in your context collection

Think of the context collection as the things Claude should know at the start of any conversation — your standing brief. A sensible starting setup:

add(collection="context", key="me",     text="Product manager at a fintech startup, 8 years exp...")
add(collection="context", key="style",  text="Prefer bullets over prose, direct, no hedging...")
add(collection="context", key="now",    text="Q2 focus: payments redesign. Launch June 30...")
add(collection="context", key="team",   text="Maria (eng lead), Ben (design), Priya (data)...")

These four records give Claude more useful context than most people can fit in 2,000 characters — and you can update them at any time by asking Claude: "Update my context: we shipped the payments redesign, now focusing on onboarding."


Composing context for different modes

One advantage of the dynamic approach: you can have multiple named collections and load the one that matches your current task.

context()                          # load your default standing context
context(expand=["work-projects"])  # also load your current project list
context(expand=["client-acme"])    # also load everything about the Acme client

The custom instructions stay short ("Call context() at the start of every session."), and you select the right context for the task as you start the conversation. You're not locked into one monolithic context block.


When to stick with custom instructions

Static custom instructions are still the right tool for truly universal, rarely-changing configuration: the language Claude should respond in, a hard-and-fast rule it must always follow, a persona you always want maintained. If it genuinely never changes and applies to every single conversation with no exception, it belongs in custom instructions.

Everything that changes, evolves, or is contextual — that belongs somewhere that can be updated without navigating to a settings page.


Setup: under 5 minutes

  1. Go to app.stashlite.com/mcp → Add to Claude
  2. Sign in with Google (free, no card required)
  3. In Claude, call add(collection="context", key="me", text="[your role and background]")
  4. Add to your custom instructions: Call context() at the start of every conversation.

That's it. Your context is now stored outside the character limit, loads in one cheap tool call, and you can update it from within any conversation.

Stop cramming context into 2,000 characters

Stash loads your standing context in one tool call. Free tier: 10,000 records, 100 queries/month.

Add Stash to Claude →

Related