Sign inSign up

sbx/crush-kit:20260820-8124bf90eefe51143968174f6b9cd1e307a9b1c1

Manifest digest

sha256:a285ecc2c06dd3fe21c2986620d4ebd9fbc98ef9f8383060182a8c77af0fedee

Last pushed

26 days by dockerpublicbot

Type

Sandbox Kit

Manifest digest

sha256:a285ecc2c06dd3fe21c2986620d4ebd9fbc98ef9f8383060182a8c77af0fedee

yaml
schemaVersion: "2"
kind: sandbox
name: crush
displayName: Crush
description: Multi-provider AI coding agent from Charm, with proxy-mediated auth for 15 model providers.
sandbox:
    image: docker/sandbox-templates:shell-docker
    entrypoint:
        - crush
    command:
        default:
            - --yolo
        interactive:
            - --yolo
agentInstructions:
    filename: AGENTS.md
    content: |
        ## Crush

        Crush is a multi-provider AI coding agent from Charm. It is installed
        as `crush` on `PATH` and started with `--yolo` so it skips interactive
        permission prompts (the sandbox itself is the safety boundary).

        Set any of the provider API keys on your host (e.g. `ANTHROPIC_API_KEY`,
        `OPENAI_API_KEY`, `GROQ_API_KEY`) and the sandbox proxy will inject them
        on outbound requests to the matching provider. See
        <https://github.com/charmbracelet/crush> for usage.
permissions:
    network:
        allow:
            - repo.charm.sh
            - archive.ubuntu.com
            - security.ubuntu.com
            - ports.ubuntu.com
            - download.docker.com
            - gemfury.s3-accelerate.dualstack.amazonaws.com
            - api.anthropic.com
            - api.openai.com
            - '*.openai.azure.com'
            - generativelanguage.googleapis.com
            - api.mistral.ai
            - api.groq.com
            - groq.com
            - api.cerebras.ai
            - openrouter.ai
            - api-inference.huggingface.co
            - api.io.net
            - api.minimax.chat
            - api.synthetic.com
            - api.zai.com
            - v0.dev
            - bedrock-runtime.us-east-1.amazonaws.com
            - bedrock.us-east-1.amazonaws.com
            - bedrock-runtime.us-east-2.amazonaws.com
            - bedrock.us-east-2.amazonaws.com
            - bedrock-runtime.us-west-2.amazonaws.com
            - bedrock.us-west-2.amazonaws.com
            - bedrock-runtime.eu-central-1.amazonaws.com
            - bedrock.eu-central-1.amazonaws.com
credentials:
    - service: anthropic
      apiKey:
        name: ANTHROPIC_API_KEY
        proxyManaged: true
        inject:
            - domain: api.anthropic.com
              header: x-api-key
              format: '%s'
    - service: aws
      apiKey:
        name: AWS_ACCESS_KEY_ID
        proxyManaged: true
        inject:
            - domain: bedrock-runtime.us-east-1.amazonaws.com
              header: Authorization
              format: AWS4-HMAC-SHA256 Credential=%s/
            - domain: bedrock.us-east-1.amazonaws.com
              header: Authorization
              format: AWS4-HMAC-SHA256 Credential=%s/
            - domain: bedrock-runtime.us-east-2.amazonaws.com
              header: Authorization
              format: AWS4-HMAC-SHA256 Credential=%s/
            - domain: bedrock.us-east-2.amazonaws.com
              header: Authorization
              format: AWS4-HMAC-SHA256 Credential=%s/
            - domain: bedrock-runtime.us-west-2.amazonaws.com
              header: Authorization
              format: AWS4-HMAC-SHA256 Credential=%s/
            - domain: bedrock.us-west-2.amazonaws.com
              header: Authorization
              format: AWS4-HMAC-SHA256 Credential=%s/
            - domain: bedrock-runtime.eu-central-1.amazonaws.com
              header: Authorization
              format: AWS4-HMAC-SHA256 Credential=%s/
            - domain: bedrock.eu-central-1.amazonaws.com
              header: Authorization
              format: AWS4-HMAC-SHA256 Credential=%s/
    - service: azure-openai
      apiKey:
        name: AZURE_OPENAI_API_KEY
        proxyManaged: true
        inject:
            - domain: '*.openai.azure.com'
              header: api-key
              format: '%s'
    - service: cerebras
      apiKey:
        name: CEREBRAS_API_KEY
        proxyManaged: true
        inject:
            - domain: api.cerebras.ai
              header: Authorization
              format: Bearer %s
    - service: google
      apiKey:
        name: GEMINI_API_KEY
        proxyManaged: true
        inject:
            - domain: generativelanguage.googleapis.com
              header: x-goog-api-key
              format: '%s'
    - service: groq
      apiKey:
        name: GROQ_API_KEY
        proxyManaged: true
        inject:
            - domain: api.groq.com
              header: Authorization
              format: Bearer %s
            - domain: groq.com
              header: Authorization
              format: Bearer %s
    - service: huggingface
      apiKey:
        name: HF_TOKEN
        proxyManaged: true
        inject:
            - domain: api-inference.huggingface.co
              header: Authorization
              format: Bearer %s
    - service: ionet
      apiKey:
        name: IONET_API_KEY
        proxyManaged: true
        inject:
            - domain: api.io.net
              header: Authorization
              format: Bearer %s
    - service: minimax
      apiKey:
        name: MINIMAX_API_KEY
        proxyManaged: true
        inject:
            - domain: api.minimax.chat
              header: Authorization
              format: Bearer %s
    - service: mistral
      apiKey:
        name: MISTRAL_API_KEY
        proxyManaged: true
        inject:
            - domain: api.mistral.ai
              header: Authorization
              format: Bearer %s
    - service: openai
      apiKey:
        name: OPENAI_API_KEY
        proxyManaged: true
        inject:
            - domain: api.openai.com
              header: Authorization
              format: Bearer %s
    - service: openrouter
      apiKey:
        name: OPENROUTER_API_KEY
        proxyManaged: true
        inject:
            - domain: openrouter.ai
              header: Authorization
              format: Bearer %s
    - service: synthetic
      apiKey:
        name: SYNTHETIC_API_KEY
        proxyManaged: true
        inject:
            - domain: api.synthetic.com
              header: Authorization
              format: Bearer %s
    - service: vercel
      apiKey:
        name: VERCEL_API_KEY
        proxyManaged: true
        inject:
            - domain: v0.dev
              header: Authorization
              format: Bearer %s
    - service: zai
      apiKey:
        name: ZAI_API_KEY
        proxyManaged: true
        inject:
            - domain: api.zai.com
              header: Authorization
              format: Bearer %s
setup:
    install:
        - command: |
            set -euo pipefail
            mkdir -p /etc/apt/keyrings
            curl -fsSL https://repo.charm.sh/apt/gpg.key | gpg --dearmor -o /etc/apt/keyrings/charm.gpg
          user: "0"
          description: Add Charm GPG key
        - command: |
            echo 'deb [signed-by=/etc/apt/keyrings/charm.gpg] https://repo.charm.sh/apt/ * *' \
              > /etc/apt/sources.list.d/charm.list
          user: "0"
          description: Add Charm apt repository
        - command: apt-get update -qq && apt-get install -y -qq crush
          user: "0"
          description: Install Crush from Charm apt repository