database-analyst
Answer business questions from read-only connected databases using deterministic schema discovery and SQL evidence
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Answer business questions from read-only connected databases using deterministic schema discovery and SQL evidence
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
On-demand time-series forecasting. CAPTURE params from project context, call run_forecast, present deterministic engine results.
Use when helping initialize, configure, or prepare a Seeknal project like a coding agent
Translate business questions into metrics, SQL evidence, and actionable recommendations
Run multi-step SQL plus Python/statistics/ML analysis while keeping tools thin and evidence grounded
Run Python code in an isolated subprocess for statistical/ML/visualization work beyond what SQL can express
End-to-end workflow for adding a new pipeline node to a seeknal project — scaffold, validate, apply, and (optionally) run via the 5 thin pipeline-build tools
| name | database-analyst |
| description | Answer business questions from read-only connected databases using deterministic schema discovery and SQL evidence |
| tags | ["database","connected-source","read-only","business-analysis"] |
| version | 1.0.0 |
Use this workflow when the user asks a business or analytical question and the project has a connected/read-only database source such as PostgreSQL, MySQL, DuckDB, or a warehouse catalog. This is the default path for "tap into my existing database" users.
Tools stay thin. The skill owns the workflow:
list_source_context / read_source_context load generated source docs,
column profiles, and relationship hints.list_sql_pairs / execute_sql_pair / read_sql_pair load and run
project-owned prompt→SQL examples.list_ask_tests / read_ask_test / run_ask_test inspect and run
project-owned QA oracles when the user asks about test coverage or failures.list_tables discovers queryable relations.describe_table inspects exact columns/types.execute_sql runs one read-only query at a time.execute_python is only for statistics/ML/visualization after SQL scopes the
dataset; do not use it for ordinary trend tables that SQL already answered.
A request for a "trend" means table/text analysis unless the user explicitly
asks for a chart, plot, dashboard, report, or visual.Do not invent schema. Do not suggest building pipelines unless the user asks for pipeline creation or durable transformation work.
For broad executive prompts such as "apa yang perlu diperhatikan?", "what should I watch?", "what are the key issues?", or "where should we focus?", do not answer with source setup, SQL-pair inventory, table lists, or developer context. Treat the prompt as an insight request: run a small set of focused SQL queries and return priorities, anomalies, risks, opportunities, and next checks in business language.
Discover
list_source_context with a query derived from the
user's business terms and read the relevant SOURCE.md,
relationships.md, columns.md, or profiling.md.list_sql_pairs with the same business terms; project-owned
SQL pairs are reusable examples, not harness hardcoding.execute_sql_pair(authoritative=true) so the pair's SQL runs as-is and
can be used as the final answer. Use read_sql_pair first only when you
need to inspect the pair notes.execute_sql_pair(...) without authoritative=true, then adapt the
SQL or inspect another pair. Do not answer from a partial-match pair alone.list_ask_tests or
read_ask_test_result before proposing fixes.list_tables when generated context is absent, too broad, or needs
verification, unless the user already supplied a fully-qualified table
and columns.warehouse.analytics.orders when available.Inspect
describe_table for the most likely fact/view tables before writing joins or aggregations.describe_table confirms the column exists.Query
execute_sql_pair(authoritative=true) for an exact/direct SQL-pair
match; otherwise call execute_sql_pair(...) only as an example and then
execute_sql with the canonical argument sql.execute_sql(sql="SELECT ...").query may be accepted as an alias, but prefer sql so tool calls are portable across providers.column ILIKE '%term%', not
function-style ILIKE(column, '%term%').CAST(SUM(revenue) AS DOUBLE) AS revenue.COALESCE(NULLIF(TRIM(CAST(column AS VARCHAR)), ''), 'Unknown').Recover
list_tables and retry with the discovered qualified name.describe_table and retry with the correct column.Answer
Carry forward the discovered source/table names in the conversation. When the user asks "now by region" or "compare with segment", reuse the prior table and only run the additional SQL needed. Do not re-ask what can be inferred from the previous turn.