Remote Gateway
Connect Fleet to external services with Fleet Gateway.
What is Fleet Gateway?
Fleet Gateway is a secure relay service that allows external services to send events to your local Fleet installation. It enables webhook-based automation without exposing your machine to the internet.
Key features:
- Receive webhooks from GitHub, Stripe, Slack, and other services
- Secure connection without port forwarding
- Automatic reconnection
- Event signature verification
How It Works
External Service (GitHub, Stripe, etc.)
│
▼
Fleet Gateway (Cloud)
│
▼ (Secure tunnel)
Your Fleet App (Local)
│
▼
Your Agent
- External services send webhooks to Fleet Gateway
- Gateway securely relays events to your local Fleet
- Fleet triggers subscribed agents
Connecting to Gateway
Step 1: Open Settings
Press Cmd+, or click the gear icon to open Settings.
Step 2: Navigate to Remote
Click Remote in the settings sidebar.
Step 3: Connect
Click Connect to Fleet Gateway and sign in.
Once connected, you'll see:
- Connection status (Connected/Disconnected)
- Your Gateway ID
- Active webhooks
Creating Webhooks
Via Agent
Ask any agent to create a webhook:
Create a webhook for GitHub pull request events
The agent returns a URL like:
https://fleet-gateway.fly.dev/t/abc123xyz
Via API
The agent uses the create_webhook tool:
create_webhook({
name: "github-events",
description: "Receives GitHub webhook events"
})
Configuring External Services
GitHub
- Go to your repository → Settings → Webhooks
- Click Add webhook
- Payload URL: Paste your Fleet webhook URL
- Content type:
application/json - Secret: (Optional) Add for signature verification
- Select events (push, pull_request, issues, etc.)
- Click Add webhook
Stripe
- Go to Dashboard → Developers → Webhooks
- Click Add endpoint
- Endpoint URL: Paste your Fleet webhook URL
- Select events to receive
- Click Add endpoint
- Copy the signing secret to Fleet Vault
Slack
- Go to api.slack.com → Your app
- Event Subscriptions → Enable
- Request URL: Paste your Fleet webhook URL
- Subscribe to events
- Save changes
Generic Webhooks
For any service that supports webhooks:
- Find the webhook configuration in the service
- Paste your Fleet Gateway URL
- Configure event types
- Save
Signature Verification
For security, enable signature verification:
Creating a Verified Webhook
create_webhook(
name: "secure-webhook",
require_signature: true
)
This generates a signing secret stored in your macOS Keychain.
Configuring External Services
Provide the signing secret to the external service. They'll use it to sign payloads.
Fleet verifies signatures using:
- GitHub:
X-Hub-Signature-256(HMAC-SHA256) - Stripe:
Stripe-Signature - Custom: HMAC-SHA256 in
X-Signatureheader
Viewing Signing Secret
Signing secrets are stored securely and not displayed in the UI. Access them through the Secure Vault if needed for configuration.
Webhook Management
View Active Webhooks
Go to Settings → Remote to see all webhooks:
- Webhook name
- URL
- Event count
- Last triggered
Delete Webhooks
Click the delete icon next to any webhook to remove it.
Note: This invalidates the webhook URL. Update external services accordingly.
Test Webhooks
Click Test to send a test payload and verify connectivity.
Security Considerations
What's Exposed
- Webhook URLs are public endpoints
- Payload data is transmitted through Gateway
What's Protected
- Your IP address is never exposed
- Connection is encrypted (TLS)
- Signature verification prevents spoofing
- Gateway doesn't store payload contents
Best Practices
- Enable signature verification for sensitive webhooks
- Use specific event types rather than "send everything"
- Rotate signing secrets periodically
- Delete unused webhooks promptly
- Monitor webhook activity in Settings
Troubleshooting
Connection Issues
Gateway disconnected:
- Check internet connection
- Try reconnecting in Settings → Remote
- Restart Fleet if needed
Webhooks not arriving:
- Verify external service configuration
- Check webhook URL is correct
- Look for delivery errors in external service
- Test with the Test button
Signature Failures
Invalid signature errors:
- Verify signing secret matches in both places
- Check signature header name is correct
- Ensure external service is sending signatures
Limitations
- Requires internet connection
- Some latency for webhook delivery
- Payload size limit: 1MB
- Rate limit: 1000 events/hour per webhook