sql-import
SQL import workflow - connect to MySQL/Postgres/MSSQL, pick a table or write a custom query, discover schema, preview rows, and create a scheduled extract
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
SQL import workflow - connect to MySQL/Postgres/MSSQL, pick a table or write a custom query, discover schema, preview rows, and create a scheduled extract
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Open-source multi-channel campaign launcher. Orchestrates marketing experiments from ICP/positioning input through planning, creative production, and parallel channel launch (Google Ads, Meta Ads, email outreach). No proprietary infrastructure required — works with your own API keys. Use when user says "launch campaign", "campaign launcher", "experiment launch", "multi-channel campaign", "plan and launch experiment".
Use when user says "resume session", "what did I work on", or "find conversation about [topic]". Automatically searches, resumes, and analyzes Claude Code sessions. Handles session discovery, content search, and automatic session restoration from any directory.
Generate a CMO Cross-Channel Performance Dashboard — funnel-stage executive view of marketing spend, pull-through, and per-channel efficiency across Meta, Google, LinkedIn, TikTok, Reddit, TTD, and the Discovery API long tail. Single-screen, three-tab layout (Overview / Channels / Customer Journey) with reactive filter bar (period × channel × conversion event × attribution model). Warehouse-first (ClickHouse `_all_data` views) with Discovery API fallback for channels not in the warehouse; all data from real sources. Built via /business-intelligence-editor as ONE custom-component widget that contains the entire dashboard.
Generate a Daily Performance Console — multi-channel operational dashboard for performance marketers. Blended KPI strip (Spend / Impressions / Clicks / CTR / Conversions / CPA / CR / ROAS), per-channel split with health flags, universal trend chart with date / metric / channel filters, and three tabs (Warnings / Recommendations / Monthly Pacing). Discovery API only, all data live. Built via /business-intelligence-editor as ONE custom-component widget that contains the entire console.
AUTO-INVOKE when user asks to see, fetch, or check current/live/real-time data from any ad platform (Facebook/Meta, Google Ads, TikTok, LinkedIn, Pinterest, Bing, Snap, X, GA4, Google Sheets, etc.), inspect ad accounts/campaigns/ads, pull insights directly from a platform, or any task that requires calling `discoveryRequestTool`, `discoveryListConnectorsTool`, or `discoveryListAccountsTool`. Trigger phrases include: "current campaigns", "live data", "real-time metrics", "show me platform-name ads", "fetch from platform-name API", "what's in my platform-name", "check platform-name insights". Use BEFORE any direct platform API call — the skill defines the mandatory URL/version protocol.
Field mapping and data extraction setup - find report types and validate fields
| name | sql-import |
| description | SQL import workflow - connect to MySQL/Postgres/MSSQL, pick a table or write a custom query, discover schema, preview rows, and create a scheduled extract |
When a user wants to import data from a SQL database (MySQL, Postgres, MSSQL, etc.) into Improvado, use these tools.
Routing rules:
datasourceName: "mysql"datasourceName: "postgres"datasourceName: "mssql"All 4 tools below require a data_source_name matching one of the above (same string as datasourceName in getConnectionsTool).
getConnectionsTool({ datasourceName: "mysql" })
count)title, sql_name, source.{database_name, table_name}, and additional_paramsadditional_params exposes the lookback_window options (e.g. live / max / default) and historical_data_depth_limit bounds — use these when building schedulingdata_source_name, connection_id, and source: { table_name, database_name } OR source: { custom_sql_query }suggested_type and possible_types (often ["number", "string"] or ["date - %Y-%m-%d", "string"]) — agent/user picks the final typeconnection_id, source, fields, sync_historical_data (YYYY-MM-DD)report_type format: "<database_name> <table_name>" (space-separated, NOT sql_name with underscore). Example: "testdb 500k_strok".write_policy default: { method: "upsert", scope: "by_date_range" } — fits tables with a date columnscheduling default: daily at 00:00 UTC with lookback_window.name: "default"Identify engine. Confirm which SQL engine (mysql / postgres / mssql). Ask if ambiguous.
Get connection. getConnectionsTool({ datasourceName: "<engine>" }) → connection_id. If no connection exists, stop and tell the user to create it in the platform UI.
List tables. listSqlReportTypesTool({ data_source_name, connection_id }).
count > page_size), show the first page and ask which table they want, or page through on request.database.table → title.Custom query vs table. If the user wants a custom SQL query instead of a full table, collect the SQL string and use source: { custom_sql_query } in steps 5+. Otherwise use source: { database_name, table_name }.
Discover fields. discoverSqlFieldsTool({ data_source_name, connection_id, source }) → list of { name, suggested_type, possible_types, is_dimension }.
Pick types. For each field, default to suggested_type. Only surface a type choice to the user when possible_types.length > 1 AND the suggestion is non-obvious (e.g. a numeric-looking ID that could be string). Don't spam the user with every column.
Sample. generateSqlDataSampleTool({ connection_id, source, fields, sync_historical_data }) → preview rows. Ask the user for sync_historical_data (start date for initial backfill) if they haven't specified it.
Confirm schema. Present the schema and proposed config as a table, then ask for confirmation:
| Field Name | Type | Is Key | Sample Values |
|----------------|--------|--------|------------------------|
| date_column | Date | Yes | 2024-01-15, 2024-01-16 |
| id | Number | No | 1, 2, 3 |
| string_column | Text | Yes | foo, bar, baz |
Data Table Name: 500k_strok
Scheduling: Daily at 00:00 UTC
Historical Sync From: 2026-03-25
Write Policy: Upsert (by date range)
Lookback: default (7 days)
Create. After confirmation, createSqlExtractTool with:
title and data_table_title — propose a name based on database_name.table_name (snake_case), ask user to confirm if unclearreport_type — "<database_name> <table_name>" (space-separated, lowercase for database)fields — with is_selected: true by default for all; set false if the user wants to drop a columnscheduling — default daily UTC; ask if they want a different interval/time/timezonesync_historical_data — from step 7write_policy — default { method: "upsert", scope: "by_date_range" }; switch to whole_data only if the table has no reliable date columnShow link. After creation succeeds:
| Resource | Link |
|----------|-----------------------------------------------------------------------------------------------|
| Extract | {platform_host}/info_connector/overview/{connection_id}/{extract_id}?workspace={workspace_id} |
Use connection_id from step 2, extract_id from the createSqlExtractTool response, and the current workspace ID.
Same as above, but skip step 3 (listSqlReportTypesTool). Start from step 5 with source: { custom_sql_query: "<user's SQL>" }. The report_type should be a short descriptive snake_case name of what the query represents (the user should provide or confirm it) — there is no database/table pair to build it from.
"<database_name> <table_name>" with a space, not the underscore-joined sql_name. Getting this wrong causes silent ingestion issues.lookback_window options in additional_params. Do not hardcode — read from the list response and use "default" unless the user asks otherwise.sync_historical_data is required — ask the user for a start date if not given. Sensible defaults: 30 days back for exploratory imports, 1 year for production.by_date_range requires a date column in the schema. If there is none, switch to { method: "overwrite" | "upsert", scope: "whole_data" }.database_name — keep that context when presenting to the user (e.g. testdb.500k_strok, not just 500k_strok).