sha256:9a6d16d8e9f9650cc7e4f42cca551b2cd6d6c86035c15861645a6822b94b1dc2
Last pushed
11 days by olegselajev241
Type
Sandbox Kit
Manifest digest
sha256:9a6d16d8e9f9650cc7e4f42cca551b2cd6d6c86035c15861645a6822b94b1dc2
schemaVersion: "2"
kind: sandbox
name: herdr-crew
version: 0.2.0
displayName: Herdr Crew
description: |
Task sandbox running a nested Herdr server and a crew of coding agents
(Claude Code, Codex, pi with Google models) in rotating roles: a sandboxed orchestrator
that holds the goal, plus planner, implementer, and QC. The host only
delivers goals and arbitrates resources.
sourceURL: https://github.com/shelajev/herdr
args:
gemini_model:
default: gemini-3.8-flash
description: Google model the pi role pins with --provider google --model
image:
default: docker.io/olegselajev241/herdr-crew:latest
description: Herdr crew template image (published, linux/arm64; for local builds pass herdr-crew:local after scripts/sbx/build-crew-template.sh)
roles:
default: orchestrator=claude,planner=codex,implementer=claude,qc=pi
description: Role assignment for this task; the host rotates this per task and guarantees qc differs from implementer
sandbox:
image: ${{ kit.args.image }}
entrypoint:
- crew-entry
agentInstructions:
filename: AGENTS.md
content: |
## Herdr crew
This sandbox runs a crew of coding agents: an orchestrator that holds the
task goal and coordinates everyone through the local herdr CLI, plus a
planner, an implementer, and quality control. Your role is named in the
prompt you receive; read your prompt pack in `/home/agent/crew/roles/`
and follow it. Only the orchestrator drives other agents; every other
role works solely on what it is prompted with. The role-to-agent
assignment for this task is recorded in `/home/agent/crew/assignment`.
Shared crew files under `/home/agent/crew/`: `goal.md` (the goal, owned by
the orchestrator), `plan.md` (the plan, owned by the planner), `qc-log.md`
(findings and VERDICT lines, owned by qc), `status.md` (progress notes and
the final RESULT line, owned by the orchestrator), and `escalations.md`
(resource requests for the host to approve or deny).
permissions:
network:
allow:
- api.anthropic.com
- statsig.anthropic.com
- api.openai.com
- auth.openai.com
- chatgpt.com
- generativelanguage.googleapis.com
- github.com
- api.github.com
- raw.githubusercontent.com
- objects.githubusercontent.com
- release-assets.githubusercontent.com
- registry.npmjs.org
- archive.ubuntu.com
- security.ubuntu.com
- ports.ubuntu.com
- download.docker.com
credentials:
- service: anthropic
apiKey:
name: ANTHROPIC_API_KEY
proxyManaged: true
inject:
- domain: api.anthropic.com
header: x-api-key
format: '%s'
- service: openai
apiKey:
name: OPENAI_API_KEY
proxyManaged: true
inject:
- domain: api.openai.com
header: Authorization
format: Bearer %s
- service: gemini
required: true
apiKey:
name: GEMINI_API_KEY
proxyManaged: true
inject:
- domain: generativelanguage.googleapis.com
header: x-goog-api-key
format: '%s'
environment:
variables:
HERDR_CREW: "1"
HERDR_CREW_GEMINI_MODEL: ${{ kit.args.gemini_model }}
setup:
install:
- command: crew-check
user: "1000"
description: Verify herdr and the crew agent CLIs are present
files:
- path: /home/agent/crew/assignment
content: ${{ kit.args.roles }}
description: Role-to-agent assignment for this task
- path: /home/agent/crew/workdir
content: ${WORKDIR}
description: Absolute workspace path, read by the host task driver