Files
Hermes Agent ffaff66505 deps: REA 6.8.0 (+ Node 24.22.1), and the admissions that moved with it
Upstream: https://github.com/morluto/rea/releases/tag/rea-agents-6.8.0
Check:    make check-updates  ->  0 actionable / 6 pending / 0 unknown
Harness:  scripts/verify-all-engines.sh  121/0/3 · 109/0/8 · 102/0/7 · 94/0/11

REA 6.8.0 changes two things this image has to follow:

- engines.node is now ^22.23.4 || ^24.22.1 || >=26.12.1, so the 24.22.0
  runtime that 6.7.0 accepted is *refused*. NODE_VERSION moves to 24.22.1
  in the same commit, in the Dockerfile and in the compose default.
- the bundled skill is v49 with 229 MCP tools (was v42 / 207), read from the
  shipped dist/mcp-catalog.json rather than the release notes.

No engine admission moved: GhidraReleasePolicy.ts is byte-identical
(12.1.4, Java 21) and Hopper is still the vendor feed's 6.6.0 demo, so the
engine pins are untouched and the harness re-proved both providers.

Two checks had to change shape, and both got stricter:

- binwalk/unblob left CapabilityInventory's remediation prose for structured
  defineToolRequirement() entries in
  src/contracts/firmware/firmwareToolRequirements.ts. scrape_rea now reads
  those first and falls back to the prose, so both rows keep showing the
  admitted value instead of printing `ok` with nothing verified.
- extract-artifact lost its second positional (REA picks the destination and
  reports output_root). The harness now asserts containment_verified,
  coverage complete, cleanup verified, non-empty created artifacts, and that
  the reported files exist under the reported root - one check more per
  image than the exit-status check it replaces.

Docs regenerated for this run: docs/verify-engines.txt,
docs/verify-summary.txt, the size table (make sizes), and the skill/tool
counts in README, HERMES-MCP, IMAGES, ARCHITECTURE and UPDATES.
2026-10-25 10:02:32 +00:00

86 lines
3.6 KiB
YAML

# =============================================================================
# Optional overlay: publish REA's MCP surface over Streamable HTTP.
#
# docker compose -f docker-compose.yml -f compose.http.yml up -d
#
# Useful when the MCP client does not run `docker exec` itself (other
# containers, remote agents, a browser-based client, mcp-inspector, ...).
# The endpoint is http://<bind>:<port>/mcp with the default Docker publish
# below reachable on the Docker host.
#
# Note: with Docker-in-Docker Hermes setups, 127.0.0.1 inside the Hermes
# container is NOT the Docker host - use the stdio path (docker exec) or
# point the client at the host gateway address instead.
# =============================================================================
name: rea-agent
services:
rea-mcp-http:
# Works with whichever engine image you are running: set REA_IMAGE +
# REA_ENGINE in .env to match (see docs/IMAGES.md), e.g.
# REA_IMAGE=rea-agent-hopper:6.8.0-linux-amd64 REA_ENGINE=hopper
# `make http-up-ghidra` / `-hopper` / `-ida` do this for you.
image: ${REA_IMAGE:-ghcr.io/alexmi256/rea-agent:6.8.0-linux-amd64}
container_name: ${REA_MCP_HTTP_CONTAINER_NAME:-rea-mcp-http}
platform: linux/amd64
init: true
restart: unless-stopped
user: "${REA_UID:-1000}:${REA_GID:-1000}"
working_dir: /work
shm_size: ${REA_SHM_SIZE:-1gb}
ports:
- "${REA_MCP_HTTP_BIND:-127.0.0.1}:${REA_MCP_HTTP_PORT:-8811}:8811"
environment:
# The image's own /usr/local/share/rea/engine.env supplies the engine paths, so this
# sidecar carries any engine. Override REA_ENGINE_* here only if you run
# an engine path that differs from the image default.
REA_ENGINE: ${REA_ENGINE:-all}
GHIDRA_INSTALL_DIR: ${GHIDRA_INSTALL_DIR:-/opt/ghidra}
JAVA_HOME: ${JAVA_HOME:-/usr/lib/jvm/java-21-openjdk-amd64}
HOPPER_LAUNCHER_PATH: ${HOPPER_LAUNCHER_PATH:-/opt/hopper/bin/Hopper}
HOPPER_STATE_DIR: ${HOPPER_STATE_DIR:-/home/rea/.local/share/hopper}
REA_GHIDRA_STARTUP_TIMEOUT_MS: ${REA_GHIDRA_STARTUP_TIMEOUT_MS:-900000}
REA_HOPPER_STARTUP_TIMEOUT_MS: ${REA_HOPPER_STARTUP_TIMEOUT_MS:-300000}
GHIDRA_HEADLESS_MAXMEM: ${GHIDRA_HEADLESS_MAXMEM:-4G}
REA_MCP_INPUT_SCHEMA_PROFILE: ${REA_MCP_INPUT_SCHEMA_PROFILE:-compact}
IDADIR: ${IDADIR:-/opt/ida}
REA_IDA_MCP_LOCAL_PORT: ${REA_IDA_MCP_LOCAL_PORT:-8745}
REA_BROWSER_NO_SANDBOX: ${REA_BROWSER_NO_SANDBOX:-1}
REA_ENTRYPOINT_DOCTOR: "0"
TMPDIR: /tmp/rea
# Optional REA_* settings (REA_ANALYSIS_PROVIDER, IDA/JEB registrations,
# REA_MCP_MAX_RESPONSE_BYTES, ...) come from ./config/rea.env. REA rejects
# empty values, so they must not be defined here with empty defaults.
env_file:
- path: ./config/rea.env
required: false
volumes:
- ./work:/work
- ${REA_TARGETS_DIR:-./targets}:/targets:ro
- ./config:/etc/rea:ro
- rea-home-http:/home/rea
- ${IDA_INSTALL_DIR:-./vendor/ida}:/opt/ida:ro
- ${HOPPER_STATE_VOLUME:-./vendor/hopper-state}:/home/rea/.local/share/hopper
# supergateway bridges stdio (REA's only transport) to Streamable HTTP.
command:
- supergateway
- --stdio
- rea mcp
- --outputTransport
- streamableHttp
- --port
- "8811"
- --host
- 0.0.0.0
- --stateful
healthcheck:
test: ["CMD-SHELL", "curl -fsS -o /dev/null http://127.0.0.1:8811/mcp || exit 1"]
interval: 60s
timeout: 20s
start_period: 90s
retries: 3
volumes:
rea-home-http:
name: ${REA_HOME_VOLUME:-rea-agent-home}-http