google-agents-cli-scaffold
Project scaffolding, deployment configuration, and CI/CD setup for Google ADK agents.
maintainx-incident-runbook
Incident response procedures for MaintainX integration failures. Use when experiencing outages, investigating issues, or responding to MaintainX integration incidents. Trigger with phrases like "maintainx incident", "maintainx outage", "maintainx down", "maintainx emergency", "maintainx runbook".
Full skill instructions
Step-by-step procedures for responding to MaintainX integration incidents, from detection through resolution.
| Severity | Definition | Response Time | Example |
|---|---|---|---|
| SEV1 | Complete outage | 15 min | API unreachable |
| SEV2 | Major degradation | 30 min | >50% errors |
| SEV3 | Minor degradation | 2 hours | Elevated latency |
| SEV4 | Informational | Next business day | Low cache hit rate |
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ DETECT │────▶│ TRIAGE │────▶│ DIAGNOSE │
│ │ │ │ │ │
│ Alert fires │ │ Determine │ │ Identify │
│ User report │ │ severity │ │ root cause │
└─────────────┘ └──────┬──────┘ └──────┬──────┘
│ │
▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ CLOSE │◀────│ RECOVER │◀────│ MITIGATE │
│ │ │ │ │ │
│ Post-mortem │ │ Verify fix │ │ Stop impact │
│ Document │ │ Monitor │ │ Temporary │
└─────────────┘ └─────────────┘ └─────────────┘
Symptoms:
Diagnostic Steps:
#!/bin/bash
# scripts/diagnose-api-unreachable.sh
echo "=== MaintainX API Connectivity Diagnostic ==="
echo ""
# Step 1: Basic connectivity
echo "1. Testing DNS resolution..."
nslookup api.getmaintainx.com
echo ""
echo "2. Testing TCP connectivity..."
nc -zv api.getmaintainx.com 443
echo ""
echo "3. Testing HTTPS endpoint..."
curl -v --max-time 10 https://api.getmaintainx.com/v1/users?limit=1 \
-H "Authorization: Bearer $MAINTAINX_API_KEY" 2>&1
echo ""
echo "4. Checking MaintainX status page..."
curl -s https://status.getmaintainx.com/api/v2/status.json | jq '.status.indicator'
echo ""
echo "5. Checking from different regions (if available)..."
# Add region-specific tests if you have multi-region deployment
Mitigation:
Resolution:
Symptoms:
MaintainXHighErrorRate alert firingDiagnostic Steps:
// scripts/diagnose-errors.ts
async function diagnoseHighErrorRate() {
console.log('=== Error Rate Diagnostic ===\n');
// Get recent error logs
const errors = await getRecentErrors(100);
// Group by error type
const errorGroups = new Map<string, number>();
errors.forEach(e => {
const key = `${e.status}:${e.endpoint}`;
errorGroups.set(key, (errorGroups.get(key) || 0) + 1);
});
console.log('Error distribution:');
errorGroups.forEach((count, key) => {
console.log(` ${key}: ${count}`);
});
// Check for patterns
console.log('\nCommon patterns:');
const status401 = errors.filter(e => e.status === 401);
if (status401.length > 0) {
console.log(' - 401 Unauthorized: Check API key validity');
}
const status429 = errors.filter(e => e.status === 429);
if (status429.length > 0) {
console.log(' - 429 Rate Limited: Reduce request rate');
}
const status5xx = errors.filter(e => e.status >= 500);
if (status5xx.length > 0) {
console.log(' - 5xx Server Errors: MaintainX side issue');
}
}
Mitigation by Error Type:
| Error | Immediate Action |
|---|---|
| 401 | Rotate API key |
| 403 | Check permissions |
| 429 | Enable throttling |
| 5xx | Enable circuit breaker |
Resolution:
Symptoms:
webhook_failures metric elevatedDiagnostic Steps:
#!/bin/bash
# Check webhook endpoint health
curl -v https://your-app.com/webhooks/maintainx/health
# Check webhook queue depth
redis-cli LLEN maintainx:webhook:queue
# Check recent failed webhooks
redis-cli LRANGE maintainx:webhook:failed 0 10
# Test webhook signature verification
./scripts/test-webhook.sh
Mitigation:
Resolution:
Symptoms:
Diagnostic Steps:
// scripts/diagnose-sync.ts
async function diagnoseSyncIssues() {
const client = new MaintainXClient();
console.log('=== Sync Diagnostic ===\n');
// Get sample from MaintainX
const maintainxWOs = await client.getWorkOrders({ limit: 100 });
// Get sample from local
const localWOs = await localStore.getWorkOrders({ limit: 100 });
// Compare
const maintainxIds = new Set(maintainxWOs.workOrders.map(wo => wo.id));
const localIds = new Set(localWOs.map(wo => wo.id));
const missingLocally = [...maintainxIds].filter(id => !localIds.has(id));
const extraLocally = [...localIds].filter(id => !maintainxIds.has(id));
console.log(`MaintainX work orders: ${maintainxIds.size}`);
console.log(`Local work orders: ${localIds.size}`);
console.log(`Missing locally: ${missingLocally.length}`);
console.log(`Extra locally: ${extraLocally.length}`);
if (missingLocally.length > 0) {
console.log('\nMissing IDs (first 10):');
missingLocally.slice(0, 10).forEach(id => console.log(` - ${id}`));
}
}
Mitigation:
Resolution:
Symptoms:
MaintainXHighLatency alert firingDiagnostic Steps:
// scripts/diagnose-performance.ts
async function diagnosePerformance() {
console.log('=== Performance Diagnostic ===\n');
// Test API latency
const endpoints = ['/workorders', '/assets', '/locations', '/users'];
for (const endpoint of endpoints) {
const start = Date.now();
await client.request(`GET ${endpoint}?limit=10`);
const latency = Date.now() - start;
const status = latency > 1000 ? '[SLOW]' : '[OK]';
console.log(`${status} ${endpoint}: ${latency}ms`);
}
// Check cache performance
const cacheStats = await cache.getStats();
console.log('\nCache stats:');
console.log(` Hit rate: ${cacheStats.hitRate}%`);
console.log(` Size: ${cacheStats.size}`);
// Check connection pool
const poolStats = await getConnectionPoolStats();
console.log('\nConnection pool:');
console.log(` Active: ${poolStats.active}`);
console.log(` Idle: ${poolStats.idle}`);
console.log(` Waiting: ${poolStats.waiting}`);
}
Mitigation:
Resolution:
| Role | Contact | Escalation |
|---|---|---|
| On-call Engineer | PagerDuty | Automatic |
| MaintainX Support | [email protected] | Manual |
| Infrastructure | #infra-oncall Slack | Manual |
## Incident Report: [TITLE]
**Date:** YYYY-MM-DD
**Duration:** HH:MM - HH:MM (X hours)
**Severity:** SEVX
**Status:** Resolved
### Summary
Brief description of what happened.
### Timeline
- HH:MM - Alert fired
- HH:MM - Investigation started
- HH:MM - Root cause identified
- HH:MM - Mitigation applied
- HH:MM - Resolution confirmed
### Root Cause
What caused the incident.
### Impact
- X work orders affected
- Y minutes of downtime
- Z users impacted
### Resolution
What was done to fix it.
### Action Items
- [ ] Prevent recurrence
- [ ] Improve detection
- [ ] Update runbooks
For data handling patterns, see maintainx-data-handling.
Project scaffolding, deployment configuration, and CI/CD setup for Google ADK agents.
Set up tracing, logging, and monitoring for deployed ADK agents across Cloud Trace, BigQuery, and third-party platforms.
Enterprise Azure infrastructure architect generating Bicep or Terraform from workload descriptions.
Plan and configure production-ready Azure Kubernetes Service clusters with Day-0 and Day-1 best practices.
Raw mechanical interfaces fusing Swiss typographic print with military terminal aesthetics. Rigid grids, extreme type scale contrast, utilitarian color, analog degradation effects. For data-heavy dashboards, portfolios, or editorial sites that need to feel like declassified blueprints.
Web search, scraping, extraction, crawling, and monitoring via ScrapeGraph AI CLI.
Skill for working with Firebase Hosting (Classic). Use this when you want to deploy static web apps, Single Page Apps (SPAs), or simple microservices. Do NOT use for Firebase App Hosting.
Deploy and manage web apps with Firebase App Hosting. Use this skill when deploying Next.js/Angular apps with backends.
Deploy applications and websites to Vercel. Use when the user requests deployment actions like "deploy my app", "deploy and give me the link", "push this live", or "create a preview deployment".
Build SEO-optimized pages at scale using templates, data, and proven playbook patterns.
Design and build isolated, reusable Convex backend components with clear boundaries and app-facing wrappers.
Deploy and manage projects on Vercel using token-based authentication. Use when working with Vercel CLI using access tokens rather than interactive login — e.g. "deploy to vercel", "set up vercel", "add environment variables to vercel".
Opus.ai: Revolutionize Your Web Experience
Build a no-code AI app in minutes.
An IDE for code migration from legacy to modern frameworks through coding agents.
Automate CGI animation in live-action scenes
Branded artistic QR-code concepts
Launch a website in seconds with AI.
Streamline Your Coding Experience with AI Code Helper
Convert any screenshot or design to clean code.