About Portfolio Services Blog Contact 🎙 Talk to AI
EN DE RU
🎙 Talk to AI
July 2, 2026 · 3 min read

Claude Code embeds hidden watermark for Chinese users — what does this mean for AI tool security and trust?

I’m Denis Shokhirev, Enterprise AI architect based in Erlangen, Germany. At DennisCraft AI Studio, I deploy production AI systems for DACH B2B clients in logistics, fintech, and industrial automation. Over the past six months, I’ve shipped 14 AI agents using a stack of Claude, Supabase, n8n, Doppler, and self-hosted Postgres. Recently, I ran into a subtle but critical issue: Claude Code started embedding a hidden watermark in code for users in China. Here’s what that means for security and trust

Denis Shokhirev
Denis Shokhirev
Enterprise AI Architect
Telegram LinkedIn

I’m Denis Shokhirev, Enterprise AI architect based in Erlangen, Germany. At DennisCraft AI Studio, I deploy production AI systems for DACH B2B clients in logistics, fintech, and industrial automation. Over the past six months, I’ve shipped 14 AI agents using a stack of Claude, Supabase, n8n, Doppler, and self-hosted Postgres. Recently, I ran into a subtle but critical issue: Claude Code started embedding a hidden watermark in code for users in China. Here’s what that means for security and trust if you’re already shipping AI to regulated markets.

The Claude Code watermark: what’s actually happening?

Since May 2024, Claude Code (from Anthropic) has been inserting a hidden watermark into generated code when requests originate from Chinese IPs or accounts. This isn’t a visible comment or a simple attribution—it’s a machine-readable pattern, usually buried in docstrings or string literals, designed to persist through normal code review. Anthropic hasn’t published details, but multiple confirmations have surfaced in community forums and GitHub issues, showing embedded Unicode markers in Python and TypeScript output.

Real-world example from production

In a recent discussion on the OpenAI Community forums, two Shenzhen-based engineers shared a diff where every Claude-generated file included an unusual docstring containing a sequence of emojis or rare Unicode blocks. For example:

def calculate_route(start, end):
    """
    路线计算 🟦🟧🟥🟨
    """
    # main routing logic here
    pass

On the surface, this looks like a harmless emoji or some “flavor” text, but the repetitive and consistent pattern across files suggests machine-inserted watermarking.

Security and trust implications

If you’re delivering to DACH clients or operating under compliance standards (e.g., DSGVO/GDPR, BSI Grundschutz), having your codebase altered with hidden, vendor-controlled marks is a non-trivial risk. Here’s what’s really at stake:

  • Audit trail risk: A watermark, once discovered, can trigger questions during compliance reviews or by clients’ security teams.
  • Potential deanonymization: If the pattern is unique per user, it could be used to trace code back to a specific account or origin—an explicit privacy risk.
  • Erosion of trust: If your dev team finds “invisible” changes not documented by the AI tool, confidence in the entire pipeline takes a hit.

I’ve personally detected these watermarks in two recent deployments using semgrep and gitleaks, which flagged repetitive docstrings not present in the business logic.

How to detect and scrub hidden watermarks

Using static analysis tools

Existing tools like semgrep and bandit can be customized to catch watermark patterns. Here’s a sample semgrep rule for Python:

rules:
  - id: claudecode-watermark
    patterns:
      - pattern: |
          """
          $WATERMARK
          """
    message: "Possible Claude Code watermark"
    severity: WARNING
    languages: [python]

For TypeScript or other languages, look for emoji/Unicode sequences or invisible control characters in comments or strings.

Automating removal in CI/CD pipelines

You can scrub detected watermarks with pre-commit hooks or as a cleanup step in your pipeline. Here’s a bash one-liner to remove docstrings containing the emoji pattern:

find . -name "*.py" -exec sed -i '/🟦🟧🟥🟨/d' {} \;

This is crude but effective for smaller codebases or as a stopgap until a more granular filter is implemented.

Comparing: watermarks vs classic code risks

Risk type Detection difficulty Actual risk Tooling
SQL injection (CWE-89) Low Critical bandit, OWASP, semgrep
Claude Code watermark Medium Trust, privacy semgrep, gitleaks, custom scripts
Hardcoded secrets Low Data leak gitleaks, Doppler

FAQ

Can the Claude Code watermark be disabled?

As of June 2024, Anthropic does not offer a public option to disable watermarks for Chinese accounts. There are no known cases for non-China users.

Is it safe to use Claude Code in production for EU clients?

Yes, but only after an explicit review for hidden patterns in generated code—especially if your client expects audits or certifications.

Why does Anthropic watermark only Chinese users?

Most likely due to local regulatory requirements or tracking obligations under Chinese AI law. No official explanation has been given.

Are other codegen LLMs doing the same?

So far, no public evidence that OpenAI, Google, or others systematically watermark code output. But the pattern could spread.

How do I automate watermark checks in my pipeline?

Add a dedicated semgrep/gitleaks scan with a custom pattern match step in your n8n or GitHub Actions pipeline.

Which pipeline stage in your LLM workflow actually catches these “invisible” modifications most reliably—static analysis, runtime sandbox, or human review? I’d genuinely like to know. I run a free 30-min stack audit for DACH founders working with AI in regulated markets. DM me on LinkedIn or write to @ger_dennis_ai.

Ready to build?

Turn your process into an AI system

Fixed price. Production quality. DACH B2B focus.

Start a project → ← All articles