Files
member-console/scripts/agent-runner/compose.yaml
T
cgalo5758 5829091881 Track the agent runner and its method page
The contained runner that drove the 2026-09 security audit, the README
review and four rounds of design ideation lived only inside the ignored
notebook. It moves to scripts/agent-runner/: the prepare, tools, audit,
ideation and teardown scripts, the compose and container files, the
allowlist proxy and the prompt templates, with the paths that assumed
the notebook fixed and findings written to a caller-named directory. Run
outputs, transcripts and the round-specific sheet scripts stay behind.

docs/agent-runner.md states the method: the disposable git archive
copy and the fail-closed proxy, how a task is shaped, union rather than
intersection of findings across models, separate adjudication of every
finding against the source, and the evidence a finding must carry.
2026-09-19 19:47:15 -05:00

56 lines
2.0 KiB
YAML

name: member-console-audit
networks:
# Proxy reaches the internet through here.
egress:
driver: bridge
labels: { com.member-console.audit: "1" }
# Auditor lives here ONLY. `internal: true` means no route off-box except
# via a container that also sits on `egress` — i.e. the proxy. Fail-closed.
isolated:
driver: bridge
internal: true
labels: { com.member-console.audit: "1" }
services:
egress-proxy:
build:
context: .
dockerfile: Dockerfile.proxy
image: member-console-audit-proxy:latest
networks: [egress, isolated]
volumes:
- ./tinyproxy.conf:/etc/tinyproxy/tinyproxy.conf:ro
- ./allowlist.txt:/etc/tinyproxy/allowlist.txt:ro
labels: { com.member-console.audit: "1" }
auditor:
build:
context: .
dockerfile: Dockerfile
image: member-console-audit:latest
# Auditor is on the isolated (internal) network only. Its sole path out is
# the proxy, addressed by name; the proxy enforces the host allowlist.
networks: [isolated]
environment:
HTTPS_PROXY: http://egress-proxy:8888
HTTP_PROXY: http://egress-proxy:8888
ALL_PROXY: http://egress-proxy:8888
NO_PROXY: localhost,127.0.0.1,egress-proxy
# Scanners must not reach for modules at run time; the cache is baked in.
GOPROXY: "off"
GOFLAGS: "-mod=mod"
volumes:
# Disposable git-archive copy — the auditor's writable working tree.
# The real repository is never mounted.
- ./.code:/src
# The only path that survives the run: the caller's findings directory.
# Every script that produces findings exports OUT; the fallback exists
# so `docker compose build` parses this file without it.
- ${OUT:-./.run/out}:/out
# Model-provider keys, read-only. Override the host path with
# AUDIT_AUTH_JSON if your opencode auth lives elsewhere.
- ${AUDIT_AUTH_JSON:-${HOME}/.local/share/opencode/auth.json}:/root/.local/share/opencode/auth.json:ro
working_dir: /src
labels: { com.member-console.audit: "1" }