Skip to content

feat: thunderbolt-stdio-bridge — bridge local stdio ACP agents and MCP servers#989

Open
ital0 wants to merge 19 commits into
italomenezes/thu-600-acp-marketplace-browse-catalog-bridge-agent-link-outsfrom
italomenezes/thu-601-acp-marketplace-acp-bridge-run-local-stdio-agents-in
Open

feat: thunderbolt-stdio-bridge — bridge local stdio ACP agents and MCP servers#989
ital0 wants to merge 19 commits into
italomenezes/thu-600-acp-marketplace-browse-catalog-bridge-agent-link-outsfrom
italomenezes/thu-601-acp-marketplace-acp-bridge-run-local-stdio-agents-in

Conversation

@ital0

@ital0 ital0 commented Jun 16, 2026

Copy link
Copy Markdown
Collaborator

Note

Medium Risk
Changes ACP/MCP transport routing for loopback targets (intentional proxy skip on web) and ships a new local bridge that fronts privileged agents; mitigated by origin checks, tests, and unchanged non-loopback proxy behavior.

Overview
Introduces thunderbolt-stdio-bridge, a local CLI that relays stdio agents to Thunderbolt over --mode acp (localhost WebSocket) or --mode mcp (Streamable HTTP at /mcp, optional cloudflared tunnel with mandatory bearer). The app is updated so those URLs actually work from the web app, not only desktop.

Loopback bypass: New isLoopbackUrl / isLoopbackHost detection drives two carve-outs—remote ACP WebSockets and MCP HTTP now use a native connect (no universal cloud proxy) when the target is localhost / 127.0.0.0/8 / ::1 / *.localhost, including in the browser. Non-loopback remote agents still proxy as before.

Settings UX: Agent catalog cards get Connect via bridge (install + npx thunderbolt-stdio-bridge --mode acp -- … commands from registry distribution), CopyableCommand, and handoff to Add Custom Agent. Loopback URLs in that dialog show a local network permission hint.

The bridge package includes Origin allowlisting, PII-safe logging, child supervision, and broad unit/integration tests.

Reviewed by Cursor Bugbot for commit 661bf2e. Bugbot is set up for automated code reviews on this repo. Configure here.

@ital0 ital0 self-assigned this Jun 16, 2026
@github-actions

Copy link
Copy Markdown

Semgrep Security Scan

No security issues found.

@github-actions

github-actions Bot commented Jun 16, 2026

Copy link
Copy Markdown

PR Metrics

Metric Value
Lines changed (prod code) +4690 / -21
JS bundle size (gzipped) 🟢 682.3 KB → 682.3 KB (+16 B, +0.0%)
Test coverage 🟢 78.09% → 78.60% (+0.5%)
Performance (preview) Preview not ready — Render deploy may have timed out
Accessibility
Best Practices
SEO

Updated Thu, 18 Jun 2026 22:28:03 GMT · run #1963

@ital0 ital0 marked this pull request as ready for review June 16, 2026 15:47
Comment thread thunderbolt-acp-bridge/src/server.js Outdated
Comment thread thunderbolt-acp-bridge/src/server.js Outdated
Comment thread acp-bridge/src/server.js Outdated
Comment thread thunderbolt-acp-bridge/src/server.js Outdated
Comment thread thunderbolt-stdio-bridge/src/log.js
Comment thread acp-bridge/src/server.js Outdated
Comment thread thunderbolt-acp-bridge/src/server.js Outdated
Comment thread thunderbolt-acp-bridge/src/server.js Outdated
Comment thread thunderbolt-acp-bridge/src/server.js Outdated
@ital0 ital0 changed the title feat: acp-bridge — run local stdio ACP agents in Thunderbolt feat: thunderbolt-stdio-bridge — bridge local stdio ACP agents and MCP servers Jun 18, 2026
Comment thread thunderbolt-stdio-bridge/src/server.js
Comment thread thunderbolt-stdio-bridge/src/mcp-server.js
Comment thread thunderbolt-stdio-bridge/src/mcp-server.js
Comment thread thunderbolt-stdio-bridge/src/mcp-server.js

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 661bf2e. Configure here.

'agent) is now reachable by other hosts on the network, not just this\n' +
'machine. Keep the default 127.0.0.1 unless you really need remote access.\n',
)
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bridge bind warning too narrow

Low Severity

emitInsecureFlagWarnings treats only 127.0.0.1, localhost, and ::1 as loopback. Other valid loopback binds (rest of 127.0.0.0/8, *.localhost) still get the “reachable by other hosts on the network” warning even though they remain local-only.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 661bf2e. Configure here.

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.

1 participant