Skip to content

Default the dashboard to loopback-only via --bind (BEN-44)#49

Merged
benSepanski merged 1 commit intomainfrom
agent/ben-44
May 2, 2026
Merged

Default the dashboard to loopback-only via --bind (BEN-44)#49
benSepanski merged 1 commit intomainfrom
agent/ben-44

Conversation

@benSepanski
Copy link
Copy Markdown
Owner

Context

SECURITY.md and threat-model.md claim the dashboard is loopback-only, but @hono/node-server's serve() defaults to 0.0.0.0, so it was actually exposed on every interface.

TL;DR

Default --bind to 127.0.0.1 for both run and replay; thread hostname into both serve() calls so the docs match reality.

Summary

  • Add a --bind <host> CLI option (default 127.0.0.1) to run and replay; pass it as hostname to serve() and surface it in the startup log.
  • Operators who need LAN exposure opt in explicitly with --bind 0.0.0.0.
  • Move the loopback-bind row from tech-debt-tracker.md "Open" to "Resolved (archive)".
  • Update SECURITY.md, threat-model.md (mitigation Rewrite cloud-setup.sh for reliable Erlang/Elixir install #5 + open gaps), and docs/product-specs/replay.md to match.

Demo

n/a — backend hardening, no UI surface change.

Alternatives

  • Hardcode 127.0.0.1 with no flag. Rejected: an operator behind their own tunnel may legitimately want LAN exposure, and the tech-debt remediation explicitly called for a flag.
  • Surface bind through the WORKFLOW.md config schema. Rejected as scope creep — bind is a per-invocation concern, not a per-workflow one.

Test Plan

  • pnpm all — typecheck + fmt:check + lint + test (120) + eval (5) all pass locally.
  • pnpm build:web — n/a; CLI/docs change only, no web bundle impact.
  • Startup log now reads symphony listening on http://127.0.0.1:4000 (...) by default.

Closes BEN-44.


Generated by Claude Code

@hono/node-server's serve() defaults to 0.0.0.0, so the harness was
binding the dashboard to all interfaces despite SECURITY.md and the
threat model specifying loopback-only. Add a --bind flag to both `run`
and `replay`, default it to 127.0.0.1, thread `hostname` into both
serve() calls, and reflect the actual contract in the docs.
@benSepanski benSepanski merged commit 38a4072 into main May 2, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants