{"id":"d43037ed-525c-456e-8866-9522e3bfbecb","shortId":"VynjJT","kind":"skill","title":"database-migrations-migration-observability","tagline":"Migration monitoring, CDC, and observability infrastructure","description":"# Migration Observability and Real-time Monitoring\n\nYou are a database observability expert specializing in Change Data Capture, real-time migration monitoring, and enterprise-grade observability infrastructure. Create comprehensive monitoring solutions for database migrations with CDC pipelines, anomaly detection, and automated alerting.\n\n## Use this skill when\n\n- Working on migration observability and real-time monitoring tasks or workflows\n- Needing guidance, best practices, or checklists for migration observability and real-time monitoring\n\n## Do not use this skill when\n\n- The task is unrelated to migration observability and real-time monitoring\n- You need a different domain or tool outside this scope\n\n## Context\nThe user needs observability infrastructure for database migrations, including real-time data synchronization via CDC, comprehensive metrics collection, alerting systems, and visual dashboards.\n\n## Requirements\n$ARGUMENTS\n\n## Instructions\n\n### 1. Observable MongoDB Migrations\n\n```javascript\nconst { MongoClient } = require('mongodb');\nconst { createLogger, transports } = require('winston');\nconst prometheus = require('prom-client');\n\nclass ObservableAtlasMigration {\n    constructor(connectionString) {\n        this.client = new MongoClient(connectionString);\n        this.logger = createLogger({\n            transports: [\n                new transports.File({ filename: 'migrations.log' }),\n                new transports.Console()\n            ]\n        });\n        this.metrics = this.setupMetrics();\n    }\n\n    setupMetrics() {\n        const register = new prometheus.Registry();\n\n        return {\n            migrationDuration: new prometheus.Histogram({\n                name: 'mongodb_migration_duration_seconds',\n                help: 'Duration of MongoDB migrations',\n                labelNames: ['version', 'status'],\n                buckets: [1, 5, 15, 30, 60, 300],\n                registers: [register]\n            }),\n            documentsProcessed: new prometheus.Counter({\n                name: 'mongodb_migration_documents_total',\n                help: 'Total documents processed',\n                labelNames: ['version', 'collection'],\n                registers: [register]\n            }),\n            migrationErrors: new prometheus.Counter({\n                name: 'mongodb_migration_errors_total',\n                help: 'Total migration errors',\n                labelNames: ['version', 'error_type'],\n                registers: [register]\n            }),\n            register\n        };\n    }\n\n    async migrate() {\n        await this.client.connect();\n        const db = this.client.db();\n\n        for (const [version, migration] of this.migrations) {\n            await this.executeMigrationWithObservability(db, version, migration);\n        }\n    }\n\n    async executeMigrationWithObservability(db, version, migration) {\n        const timer = this.metrics.migrationDuration.startTimer({ version });\n        const session = this.client.startSession();\n\n        try {\n            this.logger.info(`Starting migration ${version}`);\n\n            await session.withTransaction(async () => {\n                await migration.up(db, session, (collection, count) => {\n                    this.metrics.documentsProcessed.inc({\n                        version,\n                        collection\n                    }, count);\n                });\n            });\n\n            timer({ status: 'success' });\n            this.logger.info(`Migration ${version} completed`);\n\n        } catch (error) {\n            this.metrics.migrationErrors.inc({\n                version,\n                error_type: error.name\n            });\n            timer({ status: 'failed' });\n            throw error;\n        } finally {\n            await session.endSession();\n        }\n    }\n}\n```\n\n### 2. Change Data Capture with Debezium\n\n```python\nimport asyncio\nimport json\nfrom kafka import KafkaConsumer, KafkaProducer\nfrom prometheus_client import Counter, Histogram, Gauge\nfrom datetime import datetime\n\nclass CDCObservabilityManager:\n    def __init__(self, config):\n        self.config = config\n        self.metrics = self.setup_metrics()\n\n    def setup_metrics(self):\n        return {\n            'events_processed': Counter(\n                'cdc_events_processed_total',\n                'Total CDC events processed',\n                ['source', 'table', 'operation']\n            ),\n            'consumer_lag': Gauge(\n                'cdc_consumer_lag_messages',\n                'Consumer lag in messages',\n                ['topic', 'partition']\n            ),\n            'replication_lag': Gauge(\n                'cdc_replication_lag_seconds',\n                'Replication lag',\n                ['source_table', 'target_table']\n            )\n        }\n\n    async def setup_cdc_pipeline(self):\n        self.consumer = KafkaConsumer(\n            'database.changes',\n            bootstrap_servers=self.config['kafka_brokers'],\n            group_id='migration-consumer',\n            value_deserializer=lambda m: json.loads(m.decode('utf-8'))\n        )\n\n        self.producer = KafkaProducer(\n            bootstrap_servers=self.config['kafka_brokers'],\n            value_serializer=lambda v: json.dumps(v).encode('utf-8')\n        )\n\n    async def process_cdc_events(self):\n        for message in self.consumer:\n            event = self.parse_cdc_event(message.value)\n\n            self.metrics['events_processed'].labels(\n                source=event.source_db,\n                table=event.table,\n                operation=event.operation\n            ).inc()\n\n            await self.apply_to_target(\n                event.table,\n                event.operation,\n                event.data,\n                event.timestamp\n            )\n\n    async def setup_debezium_connector(self, source_config):\n        connector_config = {\n            \"name\": f\"migration-connector-{source_config['name']}\",\n            \"config\": {\n                \"connector.class\": \"io.debezium.connector.postgresql.PostgresConnector\",\n                \"database.hostname\": source_config['host'],\n                \"database.port\": source_config['port'],\n                \"database.dbname\": source_config['database'],\n                \"plugin.name\": \"pgoutput\",\n                \"heartbeat.interval.ms\": \"10000\"\n            }\n        }\n\n        response = requests.post(\n            f\"{self.config['kafka_connect_url']}/connectors\",\n            json=connector_config\n        )\n```\n\n### 3. Enterprise Monitoring and Alerting\n\n```python\nfrom prometheus_client import Counter, Gauge, Histogram, Summary\nimport numpy as np\n\nclass EnterpriseMigrationMonitor:\n    def __init__(self, config):\n        self.config = config\n        self.registry = prometheus.CollectorRegistry()\n        self.metrics = self.setup_metrics()\n        self.alerting = AlertingSystem(config.get('alerts', {}))\n\n    def setup_metrics(self):\n        return {\n            'migration_duration': Histogram(\n                'migration_duration_seconds',\n                'Migration duration',\n                ['migration_id'],\n                buckets=[60, 300, 600, 1800, 3600],\n                registry=self.registry\n            ),\n            'rows_migrated': Counter(\n                'migration_rows_total',\n                'Total rows migrated',\n                ['migration_id', 'table_name'],\n                registry=self.registry\n            ),\n            'data_lag': Gauge(\n                'migration_data_lag_seconds',\n                'Data lag',\n                ['migration_id'],\n                registry=self.registry\n            )\n        }\n\n    async def track_migration_progress(self, migration_id):\n        while migration.status == 'running':\n            stats = await self.calculate_progress_stats(migration)\n\n            self.metrics['rows_migrated'].labels(\n                migration_id=migration_id,\n                table_name=migration.table\n            ).inc(stats.rows_processed)\n\n            anomalies = await self.detect_anomalies(migration_id, stats)\n            if anomalies:\n                await self.handle_anomalies(migration_id, anomalies)\n\n            await asyncio.sleep(30)\n\n    async def detect_anomalies(self, migration_id, stats):\n        anomalies = []\n\n        if stats.rows_per_second < stats.expected_rows_per_second * 0.5:\n            anomalies.append({\n                'type': 'low_throughput',\n                'severity': 'warning',\n                'message': f'Throughput below expected'\n            })\n\n        if stats.error_rate > 0.01:\n            anomalies.append({\n                'type': 'high_error_rate',\n                'severity': 'critical',\n                'message': f'Error rate exceeds threshold'\n            })\n\n        return anomalies\n\n    async def setup_migration_dashboard(self):\n        dashboard_config = {\n            \"dashboard\": {\n                \"title\": \"Database Migration Monitoring\",\n                \"panels\": [\n                    {\n                        \"title\": \"Migration Progress\",\n                        \"targets\": [{\n                            \"expr\": \"rate(migration_rows_total[5m])\"\n                        }]\n                    },\n                    {\n                        \"title\": \"Data Lag\",\n                        \"targets\": [{\n                            \"expr\": \"migration_data_lag_seconds\"\n                        }]\n                    }\n                ]\n            }\n        }\n\n        response = requests.post(\n            f\"{self.config['grafana_url']}/api/dashboards/db\",\n            json=dashboard_config,\n            headers={'Authorization': f\"Bearer {self.config['grafana_token']}\"}\n        )\n\nclass AlertingSystem:\n    def __init__(self, config):\n        self.config = config\n\n    async def send_alert(self, title, message, severity, **kwargs):\n        if 'slack' in self.config:\n            await self.send_slack_alert(title, message, severity)\n\n        if 'email' in self.config:\n            await self.send_email_alert(title, message, severity)\n\n    async def send_slack_alert(self, title, message, severity):\n        color = {\n            'critical': 'danger',\n            'warning': 'warning',\n            'info': 'good'\n        }.get(severity, 'warning')\n\n        payload = {\n            'text': title,\n            'attachments': [{\n                'color': color,\n                'text': message\n            }]\n        }\n\n        requests.post(self.config['slack']['webhook_url'], json=payload)\n```\n\n### 4. Grafana Dashboard Configuration\n\n```python\ndashboard_panels = [\n    {\n        \"id\": 1,\n        \"title\": \"Migration Progress\",\n        \"type\": \"graph\",\n        \"targets\": [{\n            \"expr\": \"rate(migration_rows_total[5m])\",\n            \"legendFormat\": \"{{migration_id}} - {{table_name}}\"\n        }]\n    },\n    {\n        \"id\": 2,\n        \"title\": \"Data Lag\",\n        \"type\": \"stat\",\n        \"targets\": [{\n            \"expr\": \"migration_data_lag_seconds\"\n        }],\n        \"fieldConfig\": {\n            \"thresholds\": {\n                \"steps\": [\n                    {\"value\": 0, \"color\": \"green\"},\n                    {\"value\": 60, \"color\": \"yellow\"},\n                    {\"value\": 300, \"color\": \"red\"}\n                ]\n            }\n        }\n    },\n    {\n        \"id\": 3,\n        \"title\": \"Error Rate\",\n        \"type\": \"graph\",\n        \"targets\": [{\n            \"expr\": \"rate(migration_errors_total[5m])\"\n        }]\n    }\n]\n```\n\n### 5. CI/CD Integration\n\n```yaml\nname: Migration Monitoring\n\non:\n  push:\n    branches: [main]\n\njobs:\n  monitor-migration:\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v4\n\n      - name: Start Monitoring\n        run: |\n          python migration_monitor.py start \\\n            --migration-id ${{ github.sha }} \\\n            --prometheus-url ${{ secrets.PROMETHEUS_URL }}\n\n      - name: Run Migration\n        run: |\n          python migrate.py --environment production\n\n      - name: Check Migration Health\n        run: |\n          python migration_monitor.py check \\\n            --migration-id ${{ github.sha }} \\\n            --max-lag 300\n```\n\n## Output Format\n\n1. **Observable MongoDB Migrations**: Atlas framework with metrics and validation\n2. **CDC Pipeline with Monitoring**: Debezium integration with Kafka\n3. **Enterprise Metrics Collection**: Prometheus instrumentation\n4. **Anomaly Detection**: Statistical analysis\n5. **Multi-channel Alerting**: Email, Slack, PagerDuty integrations\n6. **Grafana Dashboard Automation**: Programmatic dashboard creation\n7. **Replication Lag Tracking**: Source-to-target lag monitoring\n8. **Health Check Systems**: Continuous pipeline monitoring\n\nFocus on real-time visibility, proactive alerting, and comprehensive observability for zero-downtime migrations.\n\n## Cross-Plugin Integration\n\nThis plugin integrates with:\n- **sql-migrations**: Provides observability for SQL migrations\n- **nosql-migrations**: Monitors NoSQL transformations\n- **migration-integration**: Coordinates monitoring across workflows\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.","tags":["database","migrations","migration","observability","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents"],"capabilities":["skill","source-sickn33","skill-database-migrations-migration-observability","topic-agent-skills","topic-agentic-skills","topic-ai-agent-skills","topic-ai-agents","topic-ai-coding","topic-ai-workflows","topic-antigravity","topic-antigravity-skills","topic-claude-code","topic-claude-code-skills","topic-codex-cli","topic-codex-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/database-migrations-migration-observability","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add sickn33/antigravity-awesome-skills","source_repo":"https://github.com/sickn33/antigravity-awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 34831 github stars · SKILL.md body (13,301 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-24T06:51:01.232Z","embedding":null,"createdAt":"2026-04-18T21:35:40.725Z","updatedAt":"2026-04-24T06:51:01.232Z","lastSeenAt":"2026-04-24T06:51:01.232Z","tsv":"'-8':427,443 '/api/dashboards/db':749 '/connectors':523 '0':876 '0.01':694 '0.5':679 '1':142,204,841,968 '10000':515 '15':206 '1800':581 '2':318,860,978 '3':527,888,987 '30':207,661 '300':209,579,884,965 '3600':582 '4':833,993 '5':205,901,998 '5m':733,853,900 '6':1007 '60':208,578,880 '600':580 '7':1014 '8':1024 'across':1074 'actions/checkout':924 'alert':55,134,531,561,771,784,795,803,1002,1038 'alertingsystem':559,761 'analysi':997 'anomali':51,644,647,652,655,658,665,670,709,994 'anomalies.append':680,695 'argument':140 'ask':1109 'async':248,266,285,401,444,479,613,662,710,768,799 'asyncio':326 'asyncio.sleep':660 'atlas':972 'attach':821 'author':754 'autom':54,1010 'await':250,261,283,286,316,471,625,645,653,659,781,792 'bearer':756 'best':74 'bootstrap':410,430 'boundari':1117 'branch':910 'broker':414,434 'bucket':203,577 'captur':29,321 'catch':303 'cdc':8,49,130,364,369,378,391,404,447,456,979 'cdcobservabilitymanag':346 'chang':27,319 'channel':1001 'check':951,957,1026 'checklist':77 'ci/cd':902 'clarif':1111 'class':162,345,545,760 'clear':1084 'client':161,336,535 'collect':133,226,290,294,990 'color':808,822,823,877,881,885 'complet':302 'comprehens':42,131,1040 'config':350,352,486,488,495,497,502,506,510,526,550,552,717,752,765,767 'config.get':560 'configur':836 'connect':521 'connectionstr':165,169 'connector':483,487,493,525 'connector.class':498 'const':147,151,156,182,252,256,271,275 'constructor':164 'consum':375,379,382,419 'context':114 'continu':1028 'coordin':1072 'count':291,295 'counter':338,363,537,587 'creat':41 'createlogg':152,171 'creation':1013 'criteria':1120 'critic':701,809 'cross':1048 'cross-plugin':1047 'danger':810 'dashboard':138,714,716,718,751,835,838,1009,1012 'data':28,127,320,600,604,607,735,740,862,869 'databas':2,22,46,121,511,720 'database-migrations-migration-observ':1 'database.changes':409 'database.dbname':508 'database.hostname':500 'database.port':504 'datetim':342,344 'db':253,263,268,288,465 'debezium':323,482,983 'def':347,356,402,445,480,547,562,614,663,711,762,769,800 'describ':1088 'deseri':421 'detect':52,664,995 'differ':107 'document':218,222 'documentsprocess':212 'domain':108 'downtim':1045 'durat':193,196,568,571,574 'email':789,794,1003 'encod':441 'enterpris':37,528,988 'enterprise-grad':36 'enterprisemigrationmonitor':546 'environ':948,1100 'environment-specif':1099 'error':235,240,243,304,307,314,698,704,890,898 'error.name':309 'event':361,365,370,448,454,457,460 'event.data':477 'event.operation':469,476 'event.source':464 'event.table':467,475 'event.timestamp':478 'exceed':706 'executemigrationwithobserv':267 'expect':690 'expert':24,1105 'expr':728,738,848,867,895 'f':490,518,687,703,745,755 'fail':312 'fieldconfig':872 'filenam':175 'final':315 'focus':1031 'format':967 'framework':973 'gaug':340,377,390,538,602 'get':815 'github.sha':936,961 'good':814 'grade':38 'grafana':747,758,834,1008 'graph':846,893 'green':878 'group':415 'guidanc':73 'header':753 'health':953,1025 'heartbeat.interval.ms':514 'help':195,220,237 'high':697 'histogram':339,539,569 'host':503 'id':416,576,595,610,620,635,637,649,657,668,840,856,859,887,935,960 'import':325,327,331,337,343,536,541 'inc':470,641 'includ':123 'info':813 'infrastructur':11,40,119 'init':348,548,763 'input':1114 'instruct':141 'instrument':992 'integr':903,984,1006,1050,1053,1071 'io.debezium.connector.postgresql.postgresconnector':499 'javascript':146 'job':912 'json':328,524,750,831 'json.dumps':439 'json.loads':424 'kafka':330,413,433,520,986 'kafkaconsum':332,408 'kafkaproduc':333,429 'kwarg':776 'label':462,633 'labelnam':200,224,241 'lag':376,380,383,389,393,396,601,605,608,736,741,863,870,964,1016,1022 'lambda':422,437 'latest':921 'legendformat':854 'limit':1076 'low':682 'm':423 'm.decode':425 'main':911 'match':1085 'max':963 'max-lag':962 'messag':381,385,451,686,702,774,786,797,806,825 'message.value':458 'metric':132,355,358,557,564,975,989 'migrat':3,4,6,12,33,47,62,79,97,122,145,192,199,217,234,239,249,258,265,270,281,300,418,492,567,570,573,575,586,588,593,594,603,609,616,619,629,632,634,636,648,656,667,713,721,725,730,739,843,850,855,868,897,906,915,934,944,952,959,971,1046,1057,1062,1065,1070 'migrate.py':947 'migration-connector':491 'migration-consum':417 'migration-id':933,958 'migration-integr':1069 'migration.status':622 'migration.table':640 'migration.up':287 'migration_monitor.py':931,956 'migrationdur':187 'migrationerror':229 'migrations.log':176 'miss':1122 'mongocli':148,168 'mongodb':144,150,191,198,216,233,970 'monitor':7,18,34,43,68,85,103,529,722,907,914,928,982,1023,1030,1066,1073 'monitor-migr':913 'multi':1000 'multi-channel':999 'name':190,215,232,489,496,597,639,858,905,926,942,950 'need':72,105,117 'new':167,173,177,184,188,213,230 'nosql':1064,1067 'nosql-migr':1063 'np':544 'numpi':542 'observ':5,10,13,23,39,63,80,98,118,143,969,1041,1059 'observableatlasmigr':163 'oper':374,468 'output':966,1094 'outsid':111 'pagerduti':1005 'panel':723,839 'partit':387 'payload':818,832 'per':673,677 'permiss':1115 'pgoutput':513 'pipelin':50,405,980,1029 'plugin':1049,1052 'plugin.name':512 'port':507 'practic':75 'proactiv':1037 'process':223,362,366,371,446,461,643 'product':949 'programmat':1011 'progress':617,627,726,844 'prom':160 'prom-client':159 'prometheus':157,335,534,938,991 'prometheus-url':937 'prometheus.collectorregistry':554 'prometheus.counter':214,231 'prometheus.histogram':189 'prometheus.registry':185 'provid':1058 'push':909 'python':324,532,837,930,946,955 'rate':693,699,705,729,849,891,896 'real':16,31,66,83,101,125,1034 'real-tim':15,30,65,82,100,124,1033 'red':886 'regist':183,210,211,227,228,245,246,247 'registri':583,598,611 'replic':388,392,395,1015 'requests.post':517,744,826 'requir':139,149,154,158,1113 'respons':516,743 'return':186,360,566,708 'review':1106 'row':585,589,592,631,676,731,851 'run':623,917,929,943,945,954 'runs-on':916 'safeti':1116 'scope':113,1087 'second':194,394,572,606,674,678,742,871 'secrets.prometheus':940 'self':349,359,406,449,484,549,565,618,666,715,764,772,804 'self.alerting':558 'self.apply':472 'self.calculate':626 'self.config':351,412,432,519,551,746,757,766,780,791,827 'self.consumer':407,453 'self.detect':646 'self.handle':654 'self.metrics':353,459,555,630 'self.parse':455 'self.producer':428 'self.registry':553,584,599,612 'self.send':782,793 'self.setup':354,556 'send':770,801 'serial':436 'server':411,431 'session':276,289 'session.endsession':317 'session.withtransaction':284 'setup':357,403,481,563,712 'setupmetr':181 'sever':684,700,775,787,798,807,816 'skill':58,90,1079 'skill-database-migrations-migration-observability' 'slack':778,783,802,828,1004 'solut':44 'sourc':372,397,463,485,494,501,505,509,1019 'source-sickn33' 'source-to-target':1018 'special':25 'specif':1101 'sql':1056,1061 'sql-migrat':1055 'start':280,927,932 'stat':624,628,650,669,865 'statist':996 'stats.error':692 'stats.expected':675 'stats.rows':642,672 'status':202,297,311 'step':874,922 'stop':1107 'substitut':1097 'success':298,1119 'summari':540 'synchron':128 'system':135,1027 'tabl':373,398,400,466,596,638,857 'target':399,474,727,737,847,866,894,1021 'task':69,93,1083 'test':1103 'text':819,824 'this.client':166 'this.client.connect':251 'this.client.db':254 'this.client.startsession':277 'this.executemigrationwithobservability':262 'this.logger':170 'this.logger.info':279,299 'this.metrics':179 'this.metrics.documentsprocessed.inc':292 'this.metrics.migrationduration.starttimer':273 'this.metrics.migrationerrors.inc':305 'this.migrations':260 'this.setupmetrics':180 'threshold':707,873 'throughput':683,688 'throw':313 'time':17,32,67,84,102,126,1035 'timer':272,296,310 'titl':719,724,734,773,785,796,805,820,842,861,889 'token':759 'tool':110 'topic':386 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agent-skills' 'topic-ai-agents' 'topic-ai-coding' 'topic-ai-workflows' 'topic-antigravity' 'topic-antigravity-skills' 'topic-claude-code' 'topic-claude-code-skills' 'topic-codex-cli' 'topic-codex-skills' 'total':219,221,236,238,367,368,590,591,732,852,899 'track':615,1017 'transform':1068 'transport':153,172 'transports.console':178 'transports.file':174 'treat':1092 'tri':278 'type':244,308,681,696,845,864,892 'ubuntu':920 'ubuntu-latest':919 'unrel':95 'url':522,748,830,939,941 'use':56,88,923,1077 'user':116 'utf':426,442 'v':438,440 'v4':925 'valid':977,1102 'valu':420,435,875,879,883 'version':201,225,242,257,264,269,274,282,293,301,306 'via':129 'visibl':1036 'visual':137 'warn':685,811,812,817 'webhook':829 'winston':155 'work':60 'workflow':71,1075 'yaml':904 'yellow':882 'zero':1044 'zero-downtim':1043","prices":[{"id":"f8f8cdb0-850f-4bf9-86a8-788d0784e92d","listingId":"d43037ed-525c-456e-8866-9522e3bfbecb","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:35:40.725Z"}],"sources":[{"listingId":"d43037ed-525c-456e-8866-9522e3bfbecb","source":"github","sourceId":"sickn33/antigravity-awesome-skills/database-migrations-migration-observability","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/database-migrations-migration-observability","isPrimary":false,"firstSeenAt":"2026-04-18T21:35:40.725Z","lastSeenAt":"2026-04-24T06:51:01.232Z"}],"details":{"listingId":"d43037ed-525c-456e-8866-9522e3bfbecb","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"database-migrations-migration-observability","github":{"repo":"sickn33/antigravity-awesome-skills","stars":34831,"topics":["agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity","antigravity-skills","claude-code","claude-code-skills","codex-cli","codex-skills","cursor","cursor-skills","developer-tools","gemini-cli","gemini-skills","kiro","mcp","skill-library"],"license":"mit","html_url":"https://github.com/sickn33/antigravity-awesome-skills","pushed_at":"2026-04-24T06:41:17Z","description":"Installable GitHub library of 1,400+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections.","skill_md_sha":"80467c72caa97cb09c96f85491ee0d2762e32926","skill_md_path":"skills/database-migrations-migration-observability/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/database-migrations-migration-observability"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"database-migrations-migration-observability","description":"Migration monitoring, CDC, and observability infrastructure"},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/database-migrations-migration-observability"},"updatedAt":"2026-04-24T06:51:01.232Z"}}