I once asked Claude Code which CMS it would recommend. I wanted to see which one it's biased toward. It said Drupal. Didn't expect that at all. When I asked why, it said it saw my custom Drupal skill and assumed I work with Drupal and would be comfortable with it.

Fair enough. My instructions, skills and settings make my agent biased. For this question, I needed an unbiased one. A plain chatbot would do, but we don't look for easy ways, huh? 😁

So I looked for a way to run Claude Code without my config and found the --safe-mode flag. The description sounded perfect: no CLAUDE.md, no skills, plugins, hooks or MCP servers, my subscription as usual. A clean default Claude Code ✨

I asked again.

Drupal

(╯°□°)╯︵ ┻━┻

This time the reasoning was: my email in the agent's context → amazee.io domain → a company known for Drupal hosting → the user works at a Drupal-centric company.

So much for a clean Claude Code.

That's how /ccu (Claude Code, Unbiased by me) came about: a skill that runs a prompt in a clean Claude Code instance.

I could have made it a shell command that opens a full unbiased Claude Code session. But usually I don't need to work in one. I just need a quick check now and then. So it's a skill: my usual agent writes the prompt, copies the files the task needs into an empty folder, runs a clean instance there and brings back its answer.

What does a clean instance know about me? Nothing. Out of the box, it only sees the OS, the shell, a temp path and today's date.

How the instance is isolated

Each run gets a fresh temporary directory with two folders: work, the instance's working directory with the task files, and home, an empty home directory. Then, roughly:

cd <run dir>/work
env -i HOME=<run dir>/home PATH=$PATH CLAUDE_CODE_OAUTH_TOKEN=<token> \
claude -p --model <model> < prompt

env -i starts from an empty environment, so nothing leaks from my shell. The home directory is empty: no config, skills, memory or history. The token is the one my current session uses; /ccu takes it from the macOS Keychain. Same subscription, but no email: Claude Code keeps the account profile in .claude.json, written at login, and this home has never seen a login.

Permissions have to be granted up front

claude -p denies every tool that needs approval: there's nobody to approve it. So the main agent lists the tools the task needs in work/.claude/settings.json, e.g. for a web task:

{"permissions": {"allow": ["WebFetch", "WebSearch", "Bash(curl:*)"]}}

Claude Code ignores these settings in a folder it doesn't trust, so /ccu also marks work as trusted in the home's .claude.json:

{"projects": {"<run dir>/work": {"hasTrustDialogAccepted": true}}}
The transcript stays for me

After the run, /ccu turns the raw session log into a readable transcript.md. The main agent relays the instance's answer but never reads the transcript. I can read it myself when I want to.

How I use it

In all sorts of ways. One of them: this blog's reviewer personas, like an editor or a colleague.

And the CMS? Through /ccu, Claude Code recommended Payload.

┬─┬ノ( º _ ºノ)

Discuss on LinkedIn