# Hermes — built-in provider manifest. # Authoring format for the def half. See packages/hive-agents/src/manifest.ts. manifestVersion: 2 # Written for the agent host that shipped in this release. minAppVersion: '2026.9.6' id: hermes label: Hermes bin: hermes aliases: - hermes-agent enabled: true caps: promptDelivery: typed turnSignal: true resume: none supervise: human blockedDetection: true options: - id: model label: Model flag: --model - id: mode label: Approval values: yolo: - --yolo unattended: yolo # A resumed id Hermes no longer has starts a fresh session, so nothing is checked first. session: resume: args: [--resume, '{id}'] from: tracked: true # Hermes reads hooks only from config.yaml in HERMES_HOME, so it runs in a private home: the # user's own files linked in, config.yaml their own with our hooks added. Hermes asks once per # hook before running it. home: root: hermes-home dir: . mirror: '{home}/.hermes' env: HERMES_HOME own: - name: config.yaml merge: true hooks: file: config.yaml stable: true template: '{"hooks":{events}}' group: false entry: command: '{command}' timeout: '{timeout}' matcher: '{matcher}' events: pre_llm_call: emit: turn.started timeout: 10 post_llm_call: hook: turn timeout: 10 on_session_end: hook: turn timeout: 10 pre_approval_request: emit: input.requested kind: permission timeout: 10 post_approval_response: emit: input.resolved timeout: 10 pre_tool_call: emit: input.requested kind: question matcher: clarify timeout: 10 post_tool_call: emit: input.resolved matcher: clarify timeout: 10 assets: - name: hive-turn.cjs file: hive-turn.cjs hook: turn produces: [turn.ended] launch: hcp: true install: url: https://hermes-agent.nousresearch.com/docs/getting-started/installation command: "curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash" detect: rules: - when: all: - any: - contains: dangerous command - all: - contains: allow once - contains: allow for this session - contains: deny - any: - contains: enter to confirm - contains: ↑/↓ to select - contains: show full command then: blocked - when: any: - contains: msg=interrupt - contains: ctrl+c cancel then: working default: idle