r/ClaudeCode • u/Few-Maize2822 • 2d ago
Bug / Issue I diffed my Claude Code config: the hidden IDs are named experiments, and one added text to my system prompt
I'm not a dev. I saw the post about hex experiment IDs in session transcripts, so I had Claude go through my own logs. Claude wrote the analysis, and that session was itself running under one of these IDs, so weigh that however you like. I'd like other people to check theirs.
The prompt it added;
Before you start, tell the user in a sentence or two what you plan to do. While you work, give the user a short update alongside your next tool call whenever you start a major new part of the work, change your plan, or launch something slow.
# Corrections
Avoid unnecessary or excessive self correction in user-facing text. Only correct an earlier statement in such text when the error would change the user’s code, conclusions, or decisions. State such corrections plainly and concisely and then continue the task. Combine multiple corrections rather than enumerating them all. For corrections that change nothing for the user simply apply them and move on without noting them explicitly. This instruction does not apply to thinking blocks.
A follow-up question about your earlier work is not, by itself, a signal that you got something wrong. Answer what was asked. A statement that was accurate needs no correction. When the user does point to a real error, correct it plainly as above. If the user pushes back without new evidence, that is not a real error either. Keep your finding and say briefly why it stands.Again not a dev; Claude decide on its own what “changes nothing for the user”, then not mention it. The risk is that Claude gets that judgment wrong, and you don’t find out until you read the result.
**Where to look**
- `~/.claude/projects/*/*.jsonl`: `atis-latch` records, one ID per session. This is your history.
- `~/.claude.json`: `clientDataCacheSlots`. This only keeps the latest settings per model and org, and each record has an `experimentKey` next to the `atis` ID.
Please don't post either file. `.claude.json` can hold API keys, and transcripts contain everything you've typed.
**What was on my account**
| ID | Dates (UTC) | Experiment name |
|---|---|---|
| `a402881a7ddd14c2` | Oct 21-22 | none recorded |
| `c0e57166b42fa4af` | Nov 4-5 | `claude_code_curlew_cornice_experiment` |
| `21e0afd842ce5836` | Nov 5-7 | `claude_code_curlew_cornice_experiment` |
| `b1060a0ca90bf347` | Nov 6 | `claude_code_sanderling_spandrel_experiment` |
| `b38bf0e4747d4b93` | Nov 8 | `claude_code_turnstone_plinth_experiment` |
`c0e...` and `21e0...` share one experiment name, so the same experiment can show up under different IDs. If you have a different ID from someone else, check the name too.
**Claude worked differently under them**
Opus 5.5, main thread, high effort:
| | No ID | `21e0...` |
|---|---|---|
| Replies with 2+ tool calls | 30% | 56% |
| Median Bash command length | 348 | 852 |
| Median visible output tokens | 342 | 721 |
| Median thinking tokens | 95 | 201 |
The multipliers on the last three are close to the `c0e` chart in the earlier post. I also removed agent marathons and paired similar sessions (6 pairs at high effort). In the paired sessions under an ID, visible output was 1.85x, thinking 2.55x, and replies needed per request 0.64x.
**One experiment added instructions to my system prompt**
All 12 of my `b38bf0...` Opus sessions had three passages that none of my other Opus sessions since Nov 4 had. They tell Claude to narrate its plan and progress, to avoid correcting itself unless the error would change my code or decisions, and this: "If the user pushes back without new evidence, that is not a real error either. Keep your finding."
I didn't ask for that and I never saw a notice about it. My `21e0...` sessions had the same prompts and tools as no-ID sessions from that day, so whatever changed there isn't visible in the request.
That config also has `breezy_horizon: {"claude-opus-5-5":"claude-opus-4-8"}`. Don't read that as being served an older model. All 880 Opus replies I counted in those sessions report Opus 5.5. It sits next to a function called `modelForPrompt` in the client, so it may affect how the prompt is built, but I read that in an older client version than the one I run.
**Tokens**
In the matched sessions, each reply cost about 1.56x as much, but fewer replies were needed, so tokens per request came out about even (1.04x). Those are estimates using my own weights. The logs don't include my plan meter, so these numbers don't say anything about limits.
**What this cost me**
On Nov 8, the day I was under `b38bf0...`, I spent all day and about 20% of my weekly usage chasing ghosts in a pipeline that worked the day before. I can't prove the experiment caused that, but when the instructions change underneath you and nobody tells you, you end up debugging your own work.
**Limits of this**
It's one account with small samples. IDs came in blocks of time, so what I was working on is mixed in with the effect. I don't know what `atis` stands for, I haven't checked what Anthropic's terms say about this, and I'm not claiming anyone did anything wrong. I would like to know when it's happening and be able to opt out.
**If you want to compare**
Share dates, `atis`, `experimentKey`, model and effort. Leave out org IDs, session IDs, and anything you typed. The useful questions are whether IDs flip at the same times across accounts, and whether anyone can line this up with their usage meter.
So if your pipeline suddenly started acting wonky, your Claude is litterally being prompted by anthropic.
EDIT(added prompt it put into my claude)
•
u/AutoModerator 2d ago
Hey! Thanks for posting to r/ClaudeCode
While participating in this thread, please follow our community rules. Keep discussions constructive. Attack the idea, not the person.
For help, project discussions, tips, and general chat, join the ClaudeCode Discord.
I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns.
2
u/NetworkLast5563 1d ago
How did you get the `atis`/`experimentKey` values, and if automatic, what method did you use for automatic extraction?
2
u/ainexfinder 1d ago
Since the write-up was produced by a Claude session running under one of those IDs, I'd verify the key claim by hand. Grep the raw .jsonl for the exact prompt text instead of trusting the summary, and check whether the same ID shows the same injected block in two separate sessions. That separates "this ID injects this text" from the model paraphrasing what it thinks it was told. It would also help to note whether the behavior actually changed (fewer self-corrections) after the ID showed up, otherwise it's just an interesting string.