From flyio-pack
Monitors Fly.io machine states via API polling, implements Express health checks, processes logs, and automates deployment alerts.
How this skill is triggered — by the user, by Claude, or both
Slash command
/flyio-pack:flyio-webhooks-eventsThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Fly.io does not have traditional webhooks. Instead, monitor machine state changes via the Machines API, process structured logs via `fly logs`, and use health check endpoints for automated responses.
Fly.io does not have traditional webhooks. Instead, monitor machine state changes via the Machines API, process structured logs via fly logs, and use health check endpoints for automated responses.
// Monitor machine state transitions via Machines API
async function watchMachines(appName: string, callback: (event: MachineEvent) => void) {
const client = new FlyClient(appName, process.env.FLY_API_TOKEN!);
const stateCache = new Map<string, string>();
setInterval(async () => {
const machines = await client.listMachines();
for (const m of machines) {
const prev = stateCache.get(m.id);
if (prev && prev !== m.state) {
callback({
machineId: m.id,
region: m.region,
previousState: prev,
currentState: m.state,
timestamp: new Date(),
});
}
stateCache.set(m.id, m.state);
}
}, 10_000); // Check every 10 seconds
}
interface MachineEvent {
machineId: string;
region: string;
previousState: string;
currentState: string;
timestamp: Date;
}
// Implement health check that reports machine health
// Fly.io uses this to auto-restart unhealthy machines
import express from 'express';
const app = express();
app.get('/health', async (req, res) => {
const checks = {
database: await checkPostgres(),
redis: await checkRedis(),
memory: process.memoryUsage().heapUsed < 500 * 1024 * 1024, // < 500MB
};
const healthy = Object.values(checks).every(Boolean);
res.status(healthy ? 200 : 503).json({
status: healthy ? 'healthy' : 'unhealthy',
region: process.env.FLY_REGION,
machine: process.env.FLY_MACHINE_ID,
checks,
});
});
# Stream logs and process with jq
fly logs -a my-app --json | jq -c 'select(.level == "error")' | while read -r line; do
echo "$line" >> errors.jsonl
# Send to Slack, PagerDuty, etc.
done
# Search recent logs for specific patterns
fly logs -a my-app --no-tail | grep -i "error\|crash\|oom"
# Post-deploy notification in CI
fly deploy -a my-app && \
curl -X POST "$SLACK_WEBHOOK_URL" \
-H "Content-Type: application/json" \
-d "{\"text\": \"Deployed my-app to Fly.io. Status: $(fly status -a my-app --json | jq -r '.Status')\"}"
For performance optimization, see flyio-performance-tuning.
npx claudepluginhub jeremylongshore/claude-code-plugins-plus-skills --plugin flyio-packDiagnoses and fixes common Fly.io errors including deployment failures, health check failures, machine issues, and networking problems.
Deploy, configure, and manage applications on the Fly.io platform using flyctl CLI, fly.toml configuration, Fly Machines, Fly Volumes, private networking, secrets, health checks, autoscaling, and GitHub Actions CI/CD. Use when deploying any application to Fly.io, writing or modifying fly.toml configuration, managing Fly Machines or Volumes, configuring networking (public services, private 6PN, Flycast, custom domains, TLS), setting secrets, configuring health checks, setting up autostop/autostart or metrics-based autoscaling, deploying with GitHub Actions, managing Fly Postgres databases, or preparing an app for production on Fly.io.
Deploys and manages Fly.io apps using Docker containers, Fly Machines, fly.toml configs, databases, volumes, secrets. Supports fly launch/deploy, debugging, multi-region setups for Python/Node/Rails/Django apps.