# yaml-language-server: $schema=https://schema.zeabur.app/template.json
apiVersion: zeabur.com/v1
kind: Template
metadata:
    name: Claude Cloak
spec:
    description: Lightweight API proxy that cloaks requests as Claude Code CLI format
    coverImage: https://raw.githubusercontent.com/waylon256yhw/Claude-Cloak/main/assets/logo.svg
    icon: https://raw.githubusercontent.com/waylon256yhw/Claude-Cloak/main/assets/logo.svg
    variables:
        - key: TARGET_URL
          type: STRING
          name: Target URL
          description: Upstream API base URL (e.g., https://api.anthropic.com)
        - key: API_KEY
          type: STRING
          name: API Key
          description: Upstream API credential
        - key: ADMIN_KEY
          type: STRING
          name: Admin Key
          description: Authentication key for accessing this proxy and admin panel
        - key: PUBLIC_DOMAIN
          type: DOMAIN
          name: Domain
          description: Public domain for this service
    tags:
        - Tool
        - API
        - Proxy
    readme: |
        # Claude Cloak

        A lightweight reverse proxy that cloaks API requests as Claude Code CLI format.

        ## Features

        - **Request Cloaking**: Transforms requests to appear as Claude Code CLI
        - **Outbound Proxy**: Optional HTTP/HTTPS outbound proxy for IP obfuscation
        - **Multi-Credential Management**: Store and switch between API credentials
        - **Admin Panel**: Web UI for management at `/admin/`
        - **Streaming Support**: Full SSE streaming with backpressure handling
        - **Sensitive Word Filtering**: Aho-Corasick based single-pass obfuscation
        - **Parameter Normalization**: Automatically strips top_p/top_k to prevent upstream errors

        ## Configuration

        After deployment, access the Admin Panel at `https://your-domain/admin/` using your `ADMIN_KEY`.

        ## Usage

        ```bash
        curl -X POST https://your-domain/v1/messages \
          -H "Authorization: Bearer YOUR_ADMIN_KEY" \
          -H "Content-Type: application/json" \
          -d '{
            "model": "claude-sonnet-4-20250514",
            "max_tokens": 1024,
            "messages": [{"role": "user", "content": "Hello"}]
          }'
        ```

        ## Links

        - [GitHub Repository](https://github.com/waylon256yhw/Claude-Cloak)
        - [Documentation](https://github.com/waylon256yhw/Claude-Cloak#readme)
    services:
        - name: claude-cloak
          icon: https://raw.githubusercontent.com/waylon256yhw/Claude-Cloak/main/assets/logo.svg
          template: PREBUILT
          spec:
            id: claude-cloak
            source:
                image: ghcr.io/waylon256yhw/claude-cloak:latest
            ports:
                - id: web
                  port: 4000
                  type: HTTP
            volumes:
                - id: data
                  dir: /app/data
            env:
                ADMIN_KEY:
                    default: ${ADMIN_KEY}
                API_KEY:
                    default: ${API_KEY}
                CLI_VERSION:
                    default: 2.1.50
                LOG_LEVEL:
                    default: info
                NORMALIZE_PARAMS:
                    default: "true"
                OUTBOUND_PROXY:
                    default: ""
                PORT:
                    default: "4000"
                REQUEST_TIMEOUT:
                    default: "60000"
                SDK_VERSION:
                    default: 0.72.1
                SENSITIVE_WORDS_MAX_ENTRIES:
                    default: "20000"
                STRICT_MODE:
                    default: "true"
                TARGET_URL:
                    default: ${TARGET_URL}
                TEST_REQUEST_TIMEOUT:
                    default: "15000"
          domainKey: PUBLIC_DOMAIN
localization:
    zh-CN:
        description: 轻量级 API 代理，伪装请求为 Claude Code CLI 格式
        variables:
            - key: TARGET_URL
              type: STRING
              name: 上游 API 地址
              description: 上游 API 基础 URL（例如 https://api.anthropic.com）
            - key: API_KEY
              type: STRING
              name: API 密钥
              description: 上游 API 凭证
            - key: ADMIN_KEY
              type: STRING
              name: 管理密钥
              description: 访问代理和管理面板的认证密钥
            - key: PUBLIC_DOMAIN
              type: STRING
              name: 域名
              description: 服务的公开域名
        readme: |
            # Claude Cloak

            轻量级反向代理，将 API 请求伪装为 Claude Code CLI 格式。

            ## 功能特点

            - **请求伪装**：将请求转换为 Claude Code CLI 格式
            - **出口代理**：可选的 HTTP/HTTPS 出口代理，混淆源 IP
            - **多凭证管理**：存储和切换多个 API 凭证
            - **管理面板**：通过 `/admin/` 访问 Web 管理界面
            - **流式支持**：完整的 SSE 流式传输，支持背压处理
            - **敏感词过滤**：基于 Aho-Corasick 的单次扫描替换
            - **参数规范化**：自动移除 top_p/top_k，防止上游错误

            ## 配置

            部署后，使用 `ADMIN_KEY` 访问管理面板 `https://your-domain/admin/`。

            ## 使用方法

            ```bash
            curl -X POST https://your-domain/v1/messages \
              -H "Authorization: Bearer YOUR_ADMIN_KEY" \
              -H "Content-Type: application/json" \
              -d '{
                "model": "claude-sonnet-4-20250514",
                "max_tokens": 1024,
                "messages": [{"role": "user", "content": "Hello"}]
              }'
            ```

            ## 链接

            - [GitHub 仓库](https://github.com/waylon256yhw/Claude-Cloak)
