ktx-analytics — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited ktx-analytics (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
You have access to ktx MCP tools for data discovery, semantic-layer analysis, raw read-only SQL, wiki context, and memory ingest. Follow this workflow.
<workflow>
discover_data first to see what exists across wiki pages, semantic-layer sources, metrics, dimensions, raw tables, and columns. Returns refs only.kind: 'wiki' -> wiki_readkind: 'sl_source', kind: 'sl_measure', or kind: 'sl_dimension' -> sl_read_sourcekind: 'table' or kind: 'column' -> entity_detailsdictionary_search to find which column holds it.sl_query when the semantic layer covers the question.sql_execution only for questions the semantic layer does not cover.memory_ingest whenever a turn produces something worth remembering (business rules, metric definitions, schema gotchas, recurring findings) or whenever the user asks you to remember something. Pass markdown in content including any source context the memory agent should weigh. Each call is a feedback loop; better notes today mean smarter discover_data and wiki_search results tomorrow.</workflow>
<rules>
discover_data before writing SQL. Do not guess table names.sql_execution as read-only. Writes are rejected by the server.dictionary_search instead of guessing case or spelling. Treat a dictionary_search miss as non-authoritative. The index is built from profile-sampled values, so a missing value may simply have been outside the sample. Follow up with sql_execution against the most plausible columns before concluding the value is absent.connectionId scoping when connection_list shows multiple connections:entity_details, sl_read_source, sql_execution.sl_query, discover_data, dictionary_search.memory_ingest: pass it for warehouse-specific knowledge (e.g. "in our warehouse"); without it the memory lands as wiki-only and cannot update the semantic layer.connection_list, wiki_search, wiki_read, memory_ingest_status.</rules>
<examples> Input: "How many orders did Acme Corp place last month?"
Workflow:
dictionary_search({ values: ["Acme Corp"] }) finds customers.name.discover_data({ query: "orders customer monthly" }) finds an orders semantic-layer source.sl_read_source({ connectionId: "warehouse", sourceName: "orders_facts" }) confirms the source grain, measures, and dimensions.sl_query({ connectionId: "warehouse", measures: ["order_count"], filters: ["customer_name = 'Acme Corp'"] }) answers through the semantic layer.memory_ingest({ connectionId: "warehouse", content: "Acme Corp order analysis used orders_facts.order_count filtered by customers.name = 'Acme Corp'. Source: current analysis turn." }) captures the durable finding.Input: "What columns does the events table have?"
Workflow:
discover_data({ query: "events table" }) returns a table ref.entity_details({ connectionId: "warehouse", entities: [{ table: "analytics.events" }] }) returns columns, types, and foreign keys.Input: "Heads up: ARR is always reported in cents in our warehouse."
Workflow:
connection_list and identify the warehouse the user means. Ask if ambiguous.memory_ingest({ connectionId: "warehouse", content: "ARR is reported in cents (not dollars) in this warehouse. Multiply by 0.01 for dollar amounts. Source: user clarification." }) remembers the warehouse-specific rule without running an analysis turn.</examples>
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.