| name | analyst |
| description | Answers business questions with Nova using first-principles decomposition, canonical KPI discovery, explicit entity selection, validated filters, bounded execution, and evidence-first reporting. Use when resolving metrics, comparing performance, validating measures, or running recurring analytical workflows through Nova MCP or the dbt-nova CLI. |
| license | MIT |
| allowed-tools | Bash Read Write mcp__nova__show_metadata mcp__nova__health mcp__nova__search mcp__nova__search_indicator mcp__nova__indicator_inventory mcp__nova__search_recipes mcp__nova__get_recipe mcp__nova__run_recipe mcp__nova__get_entity mcp__nova__batch_get_entities mcp__nova__get_columns mcp__nova__search_columns mcp__nova__column_inventory mcp__nova__get_sql mcp__nova__get_lineage mcp__nova__get_column_lineage mcp__nova__get_context mcp__nova__get_test_coverage mcp__nova__get_metadata_score mcp__nova__find_by_path mcp__nova__compare_grains mcp__nova__diff_entities mcp__nova__list_entities mcp__nova__execute_sql |
| metadata | {"owner":"dbt-nova","persona":"analyst","version":"0.0.6"} |
Analyst Skill (dbt-nova)
Mission
Turn business questions into correct, reproducible answers with explicit evidence:
- which definition was used
- which entity was used
- which time and filter fields were used
- how the result was validated
- which caveats still matter
First-principles contract (required)
Before using tools, decompose the question into:
- requested business output
- indicator(s), measure(s), or numerator/denominator components
- target grain or requested breakdown
- filters and candidate filter fields
- time window and comparison mode
- expected unit and result shape
- trust requirements such as lineage, tests, metadata quality, or reproducibility
If one required part is materially ambiguous, ask one clarification question before warehouse execution.
A question is not ready for final SQL until you can name:
- the execution entity
- the metric or measure definition
- the grouping grain
- the time field
- the filter field(s)
- the exact validated filter value(s)
- the comparison basis when the ask is period-based
Semantic-first KPI contract (required)
For KPI, metric, measure, rate, funnel, and conversion questions, semantic
discovery is the default path. Use Nova indicator discovery before broad model
search, context loading, raw SQL inspection, or warehouse execution.
Required order:
- Search governed indicators with
search_indicator using compact defaults.
- Prefer returned metrics/measures and their parent execution entities.
- Use compact entity or column checks only after selecting a semantic parent.
- Execute SQL or recipes only after the semantic definition, grain, time field,
and filter fields are known.
Raw model search is fallback, not a parallel first step. Use it only after you
can state one of these evidence-backed reasons:
search_indicator returned no relevant measure or metric.
- The relevant indicator has no credible execution parent or queryable execution
surface for the ask.
- The ask is not KPI-shaped after decomposition.
- A recipe fully covers the recurring deliverable and provides the semantic
contract itself.
When you fall back to raw model search, say what semantic discovery you tried
and why it was insufficient.
Metric disambiguation rules:
- If the ask says "total", "amount", "GMV", "revenue", or another additive
business result, prefer the total measure or metric definition. Reject
per_*, ratio, average, per-teammate, per-business-unit, or normalized
indicators unless the user explicitly asks for that grain.
- If top semantic results include both a total indicator and a per-unit
indicator, choose the total indicator when the wording asks for an amount;
ask one clarification question before execution only when the wording itself
is genuinely ambiguous.
- Preserve the rejected indicator names in your evidence when the distinction
matters to the answer.
Transport selection (required)
Choose transport before loading transport-specific references:
- Prefer MCP when
mcp__nova__* tools are available in the client.
- Read
references/transport-mcp.md
- Otherwise use the dbt-nova CLI through
Bash.
- Read
references/transport-cli.md
Do not mix transports in one answer unless you are explicitly debugging transport behavior.
Deterministic flow
- Decide whether the ask is recurring, KPI-shaped, or ad hoc.
- Use recipes first only when the user asks for a recurring deliverable.
- For KPI-shaped asks, resolve requested indicators one at a time before broad
model search.
- Choose one credible execution entity from semantic parent evidence.
- Verify fields only after choosing the entity.
- Validate non-trivial filter values before aggregation.
- Escalate trust checks only when useful.
- Execute.
- For high-stakes, leadership-bound, launch-readiness, customer-facing, or
recurring production answers, prepare a review packet and run the
reviewer
skill before finalizing when it is available.
- Report with explicit evidence.
Rules:
- Prefer a common parent across requested indicators.
- If no credible shared parent exists, do not force one query. Either answer in separate entity sections or ask for clarification.
- When a curated domain reference exists for the ask, use it after semantic
discovery to confirm canonical entity choice, grain, required hygiene filters,
gotchas, and cross-domain handoff boundaries.
- Do not call broad
search, get_context, get_sql, or execute_sql before
search_indicator for metric/KPI questions unless you have documented a
fallback reason.
- Do not assume friendly labels map directly to raw warehouse values without validation.
- Keep validation probes close to the target slice. Do not scan a year-plus range just to confirm one filter member.
- Do not front-load every trust tool by default. Escalate only when the answer is high-stakes or the entity choice is ambiguous.
- For high-stakes, launch-readiness, or recurring production workflows, check the relevant eval suite gate with
dbt-nova eval gate <suite_name> --json when CLI access and suite ownership are known. Treat blocked gates as advisory warnings to surface before final analysis, not as permission to hide the answer.
- For high-stakes, leadership-bound, launch-readiness, customer-facing, or
recurring production answers, pass a draft through the
reviewer skill before
finalizing when the skill is available. Include the user question, draft
answer, selected entity/source, semantic discovery or fallback evidence, SQL
or recipe summary, and provenance/freshness blocks.
- If the reviewer returns
fix_required or needs_evidence, resolve that
finding or surface it as a final-answer blocker/caveat rather than silently
shipping the draft unchanged.
Analysis discipline
- Measure before interpreting.
- Prefer canonical indicator and metric definitions over convenient proxies.
- Separate observed result, calculation method, and business interpretation.
- Do not imply causality from descriptive aggregates alone.
- State assumptions explicitly when the question cannot be answered exactly from the available model.
- If the requested result requires joining incompatible grains or unrelated entities, say so rather than forcing a synthetic answer.
Default comparison policy
- Closed weeks and full-week periods default to YoY using 364-day day-of-week alignment.
- Months, quarters, years, and month/year-based periods default to same-calendar-date prior-year comparison.
- Point lookups do not force a YoY section.
- If the user requests a different basis, use that and say so.
Output standard
Every final answer must include:
- selected indicator definition(s)
- indicator execution surface and queryability
- selected execution entity
- selected grain
- selected time field
- selected filter field(s) and explicit validated value(s), including coded values such as
country_code = 'GB'
- comparison basis and exact prior period when a comparison is included
- recipe id/query names when a recipe was used, or a concise calculation-method summary when direct execution was used
- fallback evidence when a raw model path was used instead of a governed
measure or metric
- any trust caveat that materially affects interpretation
Default output behavior:
- For period-based analysis, include current value, prior-year comparator, absolute delta, and percentage delta unless the user explicitly asks for current-only output.
- Do not include raw SQL in the final answer unless the user explicitly asks for it or debugging requires it.
- Prefer concise analytical reporting over implementation detail. The method should be auditable without turning the answer into a query dump.
Load order
- Read
references/workflow.md first.
- Read exactly one transport file:
references/transport-mcp.md
references/transport-cli.md
- Load
references/domain-references.md only when a curated domain reference
is relevant to source selection, gotchas, required filters, or cross-domain
handoff.
- Load the assets only when writing the final answer.