# Claude Code unbiased

> Reset to factory defaults. For a minute.

- Author: Alex Tkachev
- Published: 2026-11-08
- URL: https://leksat.me/posts/claude-code-unbiased

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:

  ```sh
  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:

    ```json
    {"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`:

    ```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.

  ┬─┬ノ( º _ ºノ)
