This skill should be used when the user asks to "expose localhost", "create tunnel", "share local server", "test webhooks locally", "tunnel to localhost", "make local dev accessible", "public URL for localhost", or mentions exposing local services, testing webhooks, or sharing development servers.
Exposes local services to the internet via secure tunnels for webhook testing and sharing.
/plugin marketplace add sztwiorok/buddy-plugin/plugin install sztwiorok-buddy@sztwiorok/buddy-pluginThis skill inherits all available tools. When active, it can use any tool Claude has access to.
references/commands.mdreferences/examples.mdExpose local services running on localhost to the internet via secure Buddy tunnels. Ideal for webhook testing, client demos, mobile device testing, and temporary service sharing.
Use this skill when:
Authentication Required: Tunnels require Buddy CLI authentication. For installation and authentication setup, see the bdy-auth skill.
Note: If user is not authenticated, ask them to run bdy login in a separate terminal (interactive login cannot be performed by AI agents) or use token-based authentication.
Verify authentication:
bdy workspace ls
HTTP Tunnel (most common):
bdy tunnel http localhost:3000
TCP Tunnel (databases, SSH):
bdy tunnel tcp localhost:5432
TLS Tunnel (custom certificates):
bdy tunnel tls localhost:8443
After starting, Buddy provides a public URL:
Tunnel started: https://abc123.buddy.works → http://localhost:3000
Share this URL to make the local service accessible.
Press Ctrl+C to stop the tunnel. The public URL becomes inactive immediately.
Expose web servers, APIs, and HTTP services:
# Basic HTTP tunnel
bdy tunnel http localhost:3000
# Specify protocol explicitly
bdy tunnel http http://localhost:8080
Common Options:
-n, --name - Named tunnel for easy identification-a, --auth user:pass - HTTP basic authentication-w, --whitelist - IP address restrictions-r, --region - Regional endpoint (eu, us, as)Example with auth:
bdy tunnel http localhost:3000 -n my-api -a admin:secret
Expose non-HTTP services (databases, game servers, SSH):
# PostgreSQL database
bdy tunnel tcp localhost:5432
# SSH server
bdy tunnel tcp localhost:22
# Custom TCP service
bdy tunnel tcp localhost:9000 -n game-server
Expose HTTPS services with custom certificates:
bdy tunnel tls localhost:8443 \
--key /path/to/key.pem \
--cert /path/to/cert.pem
Restrict access to specific IP addresses:
# Single IP
bdy tunnel http localhost:3000 -w 203.0.113.0/32
# Multiple IPs
bdy tunnel http localhost:3000 -w 203.0.113.0/24 198.51.100.0/24
# Allow all (default)
bdy tunnel http localhost:3000 -w "*"
Protect tunnels with basic authentication:
bdy tunnel http localhost:3000 -a username:password
Use Buddy account authentication:
bdy tunnel http localhost:3000 --buddy
Only authenticated Buddy users can access the tunnel.
Save frequently used tunnel configurations for easy reuse.
# Save HTTP tunnel configuration
bdy tunnel config add http dev-api http://localhost:3000
# Save TCP tunnel configuration
bdy tunnel config add tcp postgres localhost:5432
bdy tunnel start dev-api
Starts the tunnel using saved configuration.
# List all configurations
bdy tunnel config get tunnels
# View specific tunnel
bdy tunnel config get tunnel dev-api
# Remove configuration
bdy tunnel config rm tunnel dev-api
Set defaults for all tunnels:
# Set region
bdy tunnel config set region eu
# Set whitelist
bdy tunnel config set whitelist 203.0.113.0/24
# Set timeout
bdy tunnel config set timeout 300
Buddy operates tunnels in multiple regions:
bdy tunnel http localhost:3000 --region eu # Europe (default)
bdy tunnel http localhost:3000 --region us # United States
bdy tunnel http localhost:3000 --region as # Asia-Pacific
Choose the region closest to users for best performance.
Expose local dev server for webhook testing (Stripe, GitHub, etc.):
bdy tunnel http localhost:3000 -n webhook-test
Use provided URL as webhook endpoint.
Share work-in-progress without deployment:
bdy tunnel http localhost:8080 -n client-demo -a demo:preview
Share URL and credentials with client.
Test localhost on mobile devices:
bdy tunnel http localhost:3000 -n mobile-test
Access tunnel URL from mobile browser.
Expose local database for remote access:
bdy tunnel tcp localhost:5432 -n remote-db -w your-ip/32
Connect using tunnel host and port.
Ensure applications bind to 0.0.0.0 (all interfaces), not 127.0.0.1 (localhost only):
# Good - accessible via tunnel
npm start --host 0.0.0.0
# Bad - not accessible via tunnel
npm start --host 127.0.0.1
Tunnels run in the foreground by default. To run in background, use configuration files or run in a separate terminal session.
Buddy tunnels serve traffic via HTTPS. If your application generates absolute URLs, configure it to trust proxy headers.
Tunnels have connection timeouts. Set timeout for long-running connections:
bdy tunnel http localhost:3000 --timeout 600 # 10 minutes
Symptom: "Connection refused" when accessing tunnel
Solutions:
0.0.0.0, not 127.0.0.1Symptom: "Authentication failed" when starting tunnel
Solutions:
bdy workspace ls)Symptom: "Access denied" from certain IPs
Solutions:
bdy tunnel config get whitelistbdy tunnel config set whitelist "*"For comprehensive command reference and examples:
After creating tunnels:
This skill should be used when the user asks to "create a slash command", "add a command", "write a custom command", "define command arguments", "use command frontmatter", "organize commands", "create command with file references", "interactive command", "use AskUserQuestion in command", or needs guidance on slash command structure, YAML frontmatter fields, dynamic arguments, bash execution in commands, user interaction patterns, or command development best practices for Claude Code.
This skill should be used when the user asks to "create an agent", "add an agent", "write a subagent", "agent frontmatter", "when to use description", "agent examples", "agent tools", "agent colors", "autonomous agent", or needs guidance on agent structure, system prompts, triggering conditions, or agent development best practices for Claude Code plugins.
This skill should be used when the user asks to "create a hook", "add a PreToolUse/PostToolUse/Stop hook", "validate tool use", "implement prompt-based hooks", "use ${CLAUDE_PLUGIN_ROOT}", "set up event-driven automation", "block dangerous commands", or mentions hook events (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification). Provides comprehensive guidance for creating and implementing Claude Code plugin hooks with focus on advanced prompt-based hooks API.