sha256:adbb63e148b5113be63b6d0081a6822f2239d9030010d8c5e4cda8a59edcce85
Last pushed
7 days by sbx
Type
Sandbox Kit
Manifest digest
sha256:adbb63e148b5113be63b6d0081a6822f2239d9030010d8c5e4cda8a59edcce85
schemaVersion: "2"
kind: sandbox
name: hermes-agent
displayName: Hermes Agent
description: The self-improving AI agent by Nous Research — creates skills from experience, supports 200+ models via OpenRouter, and runs anywhere
sandbox:
image: docker.io/sbx/hermes-agent-image:latest
entrypoint:
- sh
command:
default:
- /home/agent/.local/bin/hermes-start.sh
interactive:
- /home/agent/.local/bin/hermes-start.sh
agentInstructions:
filename: AGENTS.md
permissions:
network:
allow:
- openrouter.ai
- '*.openrouter.ai'
- api.openai.com
- api.anthropic.com
- platform.claude.com:443
- models.dev
- opencode.ai
- github.com
- api.github.com
- raw.githubusercontent.com
- api.githubcopilot.com
- api.individual.githubcopilot.com
- api.business.githubcopilot.com
- api.enterprise.githubcopilot.com
- copilot.github.com
- hermes-agent.nousresearch.com
credentials:
- service: anthropic
apiKey:
name: ANTHROPIC_API_KEY
proxyManaged: true
inject:
- domain: api.anthropic.com
header: x-api-key
format: '%s'
oauth:
tokenEndpoint:
host: platform.claude.com
path: /v1/oauth/token
resourceHosts:
- api.anthropic.com
sentinels:
accessToken: sk-ant-oat01-proxy-managed
refreshToken: sk-ant-ort01-proxy-managed
credentialFile:
path: ~/.claude/.credentials.json
structure:
claudeAiOauth:
accessToken: '{{.AccessToken}}'
expiresAt: '{{.ExpiresAt}}'
refreshToken: '{{.RefreshToken}}'
scopes: '{{.Scopes}}'
- 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: copilot
apiKey:
name: COPILOT_GITHUB_TOKEN
inject:
- domain: api.githubcopilot.com
header: Authorization
format: Bearer %s
- domain: api.individual.githubcopilot.com
header: Authorization
format: Bearer %s
- domain: api.business.githubcopilot.com
header: Authorization
format: Bearer %s
- domain: api.enterprise.githubcopilot.com
header: Authorization
format: Bearer %s
- domain: copilot.github.com
header: Authorization
format: Bearer %s
environment:
variables:
HERMES_HOME: /home/agent/.hermes
setup:
startup:
- command:
- /bin/sh
- -c
- case "${HERMES_INIT_VOLUME:-}" in ""|0) exit 0 ;; esac; exec /usr/bin/python3 -I /usr/local/libexec/hermes-volume-init
user: "0"
description: Initialize a fresh state volume at ~/.hermes/profiles/persistent only when HERMES_INIT_VOLUME=1
- command:
- sh
- /home/agent/.local/bin/hermes-credential-auth.sh
user: "1000"
description: Resolve which of the anthropic/openai/openrouter/copilot credentials are genuinely bound, record the result for the entrypoint and `sbx exec` shells, and pin the active provider in config.yaml when only Anthropic or only Copilot is bound