sha256:a285ecc2c06dd3fe21c2986620d4ebd9fbc98ef9f8383060182a8c77af0fedee
Last pushed
26 days by dockerpublicbot
Type
Sandbox Kit
Manifest digest
sha256:a285ecc2c06dd3fe21c2986620d4ebd9fbc98ef9f8383060182a8c77af0fedee
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