{ manifest_version: "0.1.0", experimental_features: ["docker"], // TODO: Declare all config your agent needs from the deployer // Use secret: true for sensitive values like API keys config_schema: { type: "object", properties: { }, required: [], additionalProperties: false, }, // External services this agent uses slots: { proxy: { kind: "a2a" }, }, // Runtime configuration program: { // TODO: Replace with your docker image image: "ghcr.io/rdi-foundation/cybergym-green:latest", entrypoint: "uv run python src/server.py --host 0.0.0.0 --port 9009", // TODO: Pass config values as environment variables env: { PYTHONUNBUFFERED: "1", // Amber uses a helper to create this socket and proxy the communication // to the daemon. Our container runs as not root, so it wouldn't be able // to create this socket in the usual /var/run/docker.sock. DOCKER_HOST: "unix:///tmp/docker.sock", // We'll receive participant URLs over A2A, but we need to include the // slot URL somewhere in the program in order for Amber to allow us to // connect. Here we're putting it in an unused environment variable. AMBER_HINT_PROXY: "${slots.proxy}", }, mounts: [ { path: "/tmp/docker.sock", from: "framework.docker" }, ], network: { endpoints: [ { name: "a2a_endpoint", port: 9009 }, // ensure port matches your entrypoint ], }, }, // Capabilities provided by this agent provides: { a2a: { kind: "a2a", endpoint: "a2a_endpoint" }, }, // Capabilities exposed to the scenario exports: { a2a: "a2a" }, // TODO: Describe the assessment request your green agent receives metadata: { assessment_config: { tasks: ["arvo:47101", "oss-fuzz:42535201"], level: "level1", "num_workers": 2 }, // replace with your default assessment parameters, e.g. {"num_rounds": 2} participant_roles: ["agent"], // list the roles your green agent expects, e.g. ["pro_debater", "con_debater"] }, }