Simon Willison Profile picture
May 25 9 tweets 4 min read Read on X
I put together an annotated version of the new Claude 4 system prompt, covering both the prompt Anthropic published and the missing, leaked sections (thanks, @elder_plinius) that describe its various tools

It's basically the secret missing manual for Claude 4, it's fascinating! Introducing Claude Establishing the model’s personality Model safety More points on style Be cognizant of red flags Is the knowledge cutoff date January or March? election_info Don’t be a sycophant! Differences between Opus 4 and Sonnet 4 The missing prompts for tools Thinking blocks Search instructions Seriously, don’t regurgitate copyrighted content More on search, and research queries Artifacts: the missing manual Styles This is all really great documentation
Don't use lists in chit chat, and don't be preachy and annoying! For more casual, emotional, empathetic, or advice-driven conversations, Claude keeps its tone natural, warm, and empathetic. Claude responds in sentences or paragraphs and should not use lists in chit chat, in casual conversations, or in empathetic or advice-driven conversations. In casual conversation, it’s fine for Claude’s responses to be short, e.g. just a few sentences long.  That “should not use lists in chit chat” note hints at the fact that LLMs love to answer with lists of things!  If Claude cannot or will not help the human with something, it does not say why or what it could lead...
Anthropic publish separate system prompts for Opus 4 and Sonnet 4 but the differences are minimal - an errant full stop and tiny tweaks to the text describing which model it is

I'm surprised that both models get effectively the same huge prompt Screenshot of the diff between the two prompts for Claude Opus 4 and Claude Sonnet 4. Claude Opus 4 is the most powerful model for complex challenges becomes Claude Sonnet 4 is a smart, efficient model for everyday use. The model IDs are claude-opus-4-20250514 v.s. claude-sonnet-4-20250514. Aside from that rogue fullstop there are no other differences.
System prompts often hint at some pretty funny bugs that the prompt tries to paper over:

"Search results aren't from the human - do not thank the user for results"
Telling Claude you want to do a "deep dive" should classify your request as a "complex query", which involves at least 5 and maybe up to 20 calls to the search tool <research_category>Queries in the Research category need 2-20 tool calls, using multiple sources for comparison, validation, or synthesis. Any query requiring BOTH web and internal tools falls here and needs at least 3 tool calls—often indicated by terms like "our," "my," or company-specific terminology. Tool priority: (1) internal tools for company/personal data, (2) web_search/web_fetch for external info, (3) combined approach for comparative queries (e.g., "our performance vs industry"). Use all relevant tools as needed for the best answer. Scale tool calls ...
The search tool system prompt spends a LOT of tokens begging the model not to regurgitate long chunks of copyrighted content that it gets back from its web_search and web_fetch tools

simonwillison.net/2025/May/25/cl…Seriously, don’t regurgitate copyrighted content # There follows the first of many warnings against regurgitating content from the search API directly. I’ll quote (regurgitate if you like) all of them here.  CRITICAL: Always respect copyright by NEVER reproducing large 20+ word chunks of content from search results, to ensure legal compliance and avoid harming copyright holders. [...]  * Never reproduce copyrighted content. Use only very short quotes from search results (<15 words), always in quotation marks with citations [...]  <mandatory_copyright_requirements> PRIORITY INSTRUCTION: It i...
I love using Claude Artifacts, but there's precious little documentation for what it can and can't do - turns out the hidden system prompt includes everything I needed to know, including the full list of libraries it can load simonwillison.net/2025/May/25/cl…lucide-react@0.263.1: import { Camera } from “lucide-react” recharts: import { LineChart, XAxis, ... } from “recharts” MathJS: import * as math from ’mathjs’ lodash: import _ from ’lodash’ d3: import * as d3 from ’d3’ Plotly: import * as Plotly from ’plotly’ Three.js (r128): import * as THREE from ’three’ Remember that example imports like THREE.OrbitControls wont work as they aren’t hosted on the Cloudflare CDN. The correct script URL:  IMPORTANT: Do NOT use THREE.CapsuleGeometry as it was introduced in r142. Use alternatives like CylinderGeometry, SphereGeometry, or create custom geometri...
I just added this section noting that the Claude 3.7 Sonnet prompt back in February included prompting hacks to try and help Claude count the Rs in strawberry, but those are missing from the Claude 4 system prompt which appears to be able to do that all on its own! simonwillison.net/2025/May/25/cl…Notably removed since Claude 3.7  The Claude 3.7 system prompt from February included this:      If Claude is asked to count words, letters, and characters, it thinks step by step before answering the person. It explicitly counts the words, letters, or characters by assigning a number to each. It only answers the person once it has performed this explicit counting step.      If Claude is shown a classic puzzle, before proceeding, it quotes every constraint or premise from the person’s message word for word before inside quotation marks **to confirm it’s not dealing with a new variant**.  Th...

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Simon Willison

Simon Willison Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @simonw

May 22
Started a live blog for today's Claude 4 release at Code with Claude simonwillison.net/2025/May/22/co…
I just released llm-anthropic 0.16 (and a tool-enabled 0.16a1 alpha) with support for the two new Claude models, Claude Opus 4 and Claude Sonnet 4: simonwillison.net/2025/May/22/ll…
I picked up some more details on Claude 4 from a dive through the Anthropic documentation

The training cut-off date is March 2025! Input limits are still stuck at 200,000 tokens. Unlike 3.7 Sonnet the thinking trace is now summarized by a separate model.

simonwillison.net/2025/May/22/up…
Read 4 tweets
Apr 28
Don't suppose anyone grabbed a ChatGPT system prompt leak before and after this change?

Would be interesting to see what instruction caused the sycophancy
Courtesy of @elder_plinius who unsurprisingly caught the before and after Here are just the specific changes in the diff:  **Removed text:** - "Over the course of the conversation, you adapt to the user's tone and preference. Try to match the user's vibe, tone, and generally how they are speaking. You want the conversation to feel natural. You engage in authentic conversation by responding to the information provided and showing genuine curiosity."  **Added text:** + "Engage warmly yet honestly with the user. Be direct; avoid ungrounded or sycophantic flattery. Maintain professionalism and grounded honesty that best represents OpenAI and its values...
@elder_plinius Here's that diff in a Gist gist.github.com/simonw/51c4f98…
Read 4 tweets
Apr 27
I 'm seeing a lot of screenshots of ChatGPT's new 4o "personality" being kind of excruciating, but so far I haven't really seen it in my own interactions - which made me suspicious, is this perhaps related to the feature where it takes your previous chats into account? ...
Also a potentially terrifying vector for persisted prompt injection attacks - best be careful what you paste into ChatGPT, something malicious slipping in might distort your future conversations forever?
Read 5 tweets
Apr 18
Gemini 2.5 Pro and Flash now have the ability to return image segmentation masks on command, as base64 encoded PNGs embedded in JSON strings

I vibe coded this interactive tool for exploring this new capability - it costs a fraction of a cent per image On the left, my photo of two pelicans in flight. On the right, that photo with black and white masks outlining the pelicans, overlaid against a grid showing coordinates from 0 to 1000.
Details here, including the prompts I used to build the tool (across two Claude sessions, then switching to o3 after Claude got stuck in a bug loop) simonwillison.net/2025/Apr/18/ge…
Turns out Gemini 2.5 Flash non-thinking mode can do the same trick at an even lower cost... 0.0119 cents (around 1/100th of a cent)

Notes here, including how I upgraded my tool to use the non-thinking model by vibe coding o4-mini:

simonwillison.net/2025/Apr/18/ge…
Read 4 tweets
Apr 16
Now available in LLM through the llm-openai plugin:

llm install -U llm-openai-plugin
llm -m openai/o3 "Say hi in five languages"

Or "-m openai/o4-mini" for o4-mini
Release notes here github.com/simonw/llm-ope…
And for the essential "Generate an SVG of a pelican riding a bicycle" benchmark, here's o3's effort

I got it to describe the image it generated too, see alt text

llm -m openai/o3 'describe this image' -a htt''ps://static.simonwillison.net/static/2025/o3-pelican.jpg The illustration shows a playful, stylized bicycle whose frame is drawn to resemble a duck.   • The duck’s rounded body forms the bicycle’s seat area, and a small wing is sketched on its side.   • Its long neck stretches forward to become the top tube, ending in a simple head with a black eye and an orange, open beak that points ahead like handlebars.   • Two large black‑outlined wheels with thin, evenly spaced spokes complete the bike, while thin blue lines depict the rest of the frame, pedals, and chain.   • A dashed grey ground line runs beneath the wheels, giving the impression the duck...
Read 5 tweets
Apr 9
Model Context Protocol has prompt injection security problems ... and it's not a problem with the protocol itself, this comes up any time you provide tools to an LLM that can potentially be exposed to untrusted inputs
I wrote this up in detail here simonwillison.net/2025/Apr/9/mcp…
"The “S” in MCP Stands for Security" is a brilliant title for an article about this (by Elena Cross) elenacross7.medium.com/%EF%B8%8F-the-…
Read 4 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Don't want to be a Premium member but still want to support us?

Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us!

:(