diff --git a/docs-site/content/docs/concepts/context-as-code.mdx b/docs-site/content/docs/concepts/context-as-code.mdx index e6ebcd7c..6636b700 100644 --- a/docs-site/content/docs/concepts/context-as-code.mdx +++ b/docs-site/content/docs/concepts/context-as-code.mdx @@ -5,100 +5,110 @@ description: Treat analytics context like code - version it, review it, merge it ## The idea -dbt proved that analytics transformations belong in version control. Before dbt, SQL lived in BI tools, scheduling systems, and spreadsheets - scattered, unreviewed, impossible to audit. "Analytics as code" changed that: put your models in git, review them in PRs, deploy them by merging. +dbt moved analytics transformations into git. KTX applies the same pattern to +analytics context: metric definitions, joins, business rules, wiki pages, and +ingest decisions become files that can be reviewed, merged, and audited. -KTX applies the same principle to analytics context. Metric definitions, business rules, join relationships, wiki pages - these are artifacts that determine whether an agent produces correct results. They change over time. They need review. They need history. They need to be treated like code. - -A KTX project is a git repository. Semantic sources are YAML files. Wiki pages are Markdown files. Changes are commits. Updates are pull requests. Deployment is a merge. The entire lifecycle of your analytics context follows the same workflow your team already uses for dbt models, application code, and infrastructure. +| Before | With KTX | +|--------|----------| +| Context scattered across BI tools, chats, docs, and analyst memory | Context lives in YAML and Markdown | +| Agent changes are hard to inspect | Agent changes are git diffs | +| Imports overwrite local judgment | Ingest reconciles with existing files | +| History depends on tool logs | History lives in commits and transcripts | ## Auto-ingestion -Most analytics context already exists - it's in your dbt manifests, LookML models, Metabase questions, and team Notion pages. KTX pulls from these sources automatically through adapters. +Most context already exists in dbt manifests, LookML, MetricFlow, Metabase, +Notion, warehouse metadata, and analyst notes. KTX reads those inputs through +adapters, then reconciles them into local files. -An ingestion run works like this: +```text +source tools -> adapters -> reconciliation agent -> YAML + Markdown diffs +``` -1. **Adapters extract metadata.** Each configured source - dbt, LookML, Metabase, MetricFlow, Notion, or your live database - provides structured metadata about models, metrics, dimensions, questions, and documentation. +| Step | What happens | Output | +|------|--------------|--------| +| **Extract** | Adapters read models, metrics, questions, schemas, and docs | Structured metadata | +| **Reconcile** | The agent compares incoming facts with existing context | Create, update, skip, or flag | +| **Write** | KTX saves changed semantic sources and wiki pages | Reviewable project files | -2. **The LLM agent reconciles.** KTX doesn't blindly overwrite existing context. An LLM agent compares incoming metadata against your current semantic sources and wiki pages. It decides what to create, what to update, and what to leave alone. If your dbt project added a new model, the agent writes a new semantic source. If a Metabase question references a metric you've already defined, the agent skips the duplicate. - -3. **Files are written.** New and updated YAML sources and Markdown wiki pages are written to the project directory. Every decision is recorded in the session transcript. - -This reconciliation step is what separates auto-ingestion from a simple sync. A naive import would overwrite your hand-tuned metric definitions every time dbt's manifest changes. KTX's agent-driven approach merges intelligently: it respects your edits, fills gaps, and flags conflicts for human review. +Reconciliation is the key difference from a sync. KTX preserves accepted local +edits, fills gaps, and surfaces conflicts instead of blindly overwriting files. ## The git workflow -Auto-ingestion is designed to plug into a PR-based workflow. Run ingestion on a branch, review the changed YAML and Markdown files, and merge them the same way you merge dbt models or application code. +Run ingestion on a branch, review the changed YAML and Markdown, then merge the +accepted context the same way you merge dbt or application code. ```text -dbt / Looker / Metabase / Notion - | - v - metadata changes - | - v - nightly cron or CI ingest - | - v - branch: ingest/nightly - | - | + 3 new sources - | ~ 2 updated joins - | + 1 wiki page - v - open PR - | - v - review semantic diff - | - v - approve & merge - | - v - agents see updated context +dbt / BI / docs / warehouse + | + v + ktx ingest --all + | + v + branch: ingest/nightly + | + v + semantic diff in PR + | + v + approve and merge + | + v + agents read updated files ``` -A typical branch shows a semantic diff: "this ingest added 3 new sources from dbt, updated 2 join definitions based on schema changes, and created 1 wiki page from a Notion doc." Analytics engineers review the diff, verify that the new sources look correct, and merge. +Typical review checklist: -Teams usually run this on demand while setting up a source, then schedule it -once the source is stable. A cron job or CI schedule can run `ktx ingest --all --no-input` -overnight on an ingest branch so the latest schema context, dbt manifests, BI -metadata, and documentation updates are ready for review each morning. +- new sources match the warehouse and source-tool evidence; +- joins have the right relationship direction; +- generated measures match business definitions; +- wiki pages capture caveats without duplicating YAML; +- `.ktx/` runtime state stays out of git unless your team intentionally reviews + a report or transcript. -Once merged, agents querying through the KTX CLI see the updated context immediately. No deployment step, no cache invalidation, no restart. The files are the source of truth, and agents read them on every request. - -This workflow gives you the same review guarantees you have for dbt models. No semantic source reaches production without a human approving it. But unlike maintaining context manually, the heavy lifting - discovering new tables, drafting source definitions, extracting business rules from documentation - is done by the ingestion agent. You review and approve. You don't write from scratch. +Teams often run ingestion on demand during setup, then schedule +`ktx ingest --all --no-input` on an ingest branch once the source is stable. ## Feedback loops -Context improves over time through two feedback channels. +Context improves when human corrections and agent signals flow back into the +same reviewed files. -**Analyst corrections.** When an analytics engineer spots something wrong - a measure formula that doesn't match the business definition, a join that should be `many_to_one` instead of `one_to_many`, a wiki page that's out of date - they edit the YAML or Markdown directly and commit. These corrections become part of the project's git history, and the next ingestion run respects them. If you manually fix a measure definition, KTX won't overwrite it on the next ingest. +| Signal | Example | Where it lands | +|--------|---------|----------------| +| Analyst correction | A measure excludes test accounts | `semantic-layer/**/*.yaml` | +| Business clarification | ARR changed definition this quarter | `wiki/**/*.md` | +| Agent query issue | A filter returns no rows unexpectedly | Wiki caveat or tighter source filter | +| Join problem | A path duplicates order-level measures | Relationship metadata or grain fix | -**Agent feedback.** When an agent queries the semantic layer and gets unexpected results - a query that returns no rows because of a bad filter, a join path that produces duplicated results - it can flag the issue. These signals feed back into the context: wiki pages can note known data quality issues, and source definitions can be tightened with better filters, join paths, or grain declarations. - -Each of these channels makes the next ingestion cycle better. Analyst corrections teach the system what your team considers authoritative. Agent feedback surfaces gaps in coverage. Context is not a static artifact - it's a living system that converges toward accuracy with every iteration. +Accepted corrections become input to the next ingest run. That makes the +context layer converge toward the team's current source of truth. ## Deterministic replay -Every ingestion session in KTX produces a full transcript: every tool call the LLM agent made, every response it received, every source it created or modified, and the reasoning behind each decision. +Every ingestion session records the adapter inputs, tool calls, LLM responses, +write decisions, and reasoning behind each change. -This matters for three reasons. +| Use case | What replay gives you | +|----------|-----------------------| +| **Debugging** | Trace a bad source, join, or measure back to the input that produced it | +| **Trust** | Show where a definition came from and who reviewed the resulting diff | +| **Reproducibility** | Compare old and new ingest behavior after config or model changes | -**Debugging.** When a semantic source looks wrong - the grain is off, a join points to the wrong table, a measure formula doesn't match the business definition - you can trace it back to the ingestion session that created it. The transcript shows exactly which adapter provided the input, how the LLM interpreted it, and why it made the decision it did. You don't have to guess. - -**Trust.** Analytics teams need to trust the context that agents consume. Deterministic replay means you can verify any part of the context layer by re-examining the session that produced it. If a stakeholder asks "where did this revenue definition come from?", you have a complete audit trail - from the dbt manifest entry, through the LLM's reconciliation logic, to the YAML file that was written. - -**Reproducibility.** Because ingestion sessions are recorded as structured transcripts (tool calls and responses, not just logs), they can be replayed for testing and validation. If you change your ingestion configuration or upgrade the LLM, you can replay previous sessions to see how the output would differ. This gives you a safety net for changes that affect how context is generated. - -The transcript is stored with local ingest run state and can be reviewed or replayed when you need to audit a decision. Commit the resulting YAML and Markdown changes; commit reports or transcripts only when they are part of your team's review workflow. +Commit the YAML and Markdown changes. Commit reports or transcripts only when +they are part of your team's review workflow. ## Agent usage notes -Use this page when an agent needs to explain review workflows, ingestion diffs, replayability, or why KTX writes YAML and Markdown instead of hiding context in a hosted service. +Use this page when an agent needs to explain review workflows, ingestion diffs, +replayability, or why KTX writes YAML and Markdown instead of hiding context in +a hosted service. | Agent task | Relevant section | Next page | |------------|------------------|-----------| | Explain how generated context should be reviewed | The git workflow | [Building Context](/docs/guides/building-context) | -| Diagnose why ingestion changed a semantic source | Auto-ingestion and Deterministic replay | [ktx ingest](/docs/cli-reference/ktx-ingest) | +| Diagnose why ingestion changed a semantic source | Auto-ingestion / Deterministic replay | [ktx ingest](/docs/cli-reference/ktx-ingest) | | Explain how context improves over time | Feedback loops | [Building Context](/docs/guides/building-context) | | Tell a user what to commit | The git workflow | [Writing Context](/docs/guides/writing-context) | diff --git a/docs-site/content/docs/concepts/the-context-layer.mdx b/docs-site/content/docs/concepts/the-context-layer.mdx index ba7ee3f3..a62fca8c 100644 --- a/docs-site/content/docs/concepts/the-context-layer.mdx +++ b/docs-site/content/docs/concepts/the-context-layer.mdx @@ -3,223 +3,66 @@ title: The Context Layer description: What a context layer is, why agents need one, and how KTX compares to other semantic layers. --- -## The problem +## Why agents need context -Give an agent access to your database and it will generate SQL. It might even produce a decent chart. But ask it a real analytics question - "what's our net revenue trend by segment?" - and things fall apart. +Database access lets an agent generate SQL. It does not tell the agent which +tables matter, which joins are safe, which metrics are canonical, or what your +team means by "enterprise", "net revenue", or "active customer". -The agent doesn't know that `orders.amount` includes refunds and needs a status filter. It doesn't know that `customers` should join to `orders` on `customer_id`, not `id`. It doesn't know that your team stopped using `legacy_segments` six months ago, or that "enterprise" means contracts over $100k, not just big logos. It sees column names and types. It doesn't see your business. +That missing business context is where plausible SQL becomes wrong SQL: -This isn't a model capability problem. Claude Code, Codex, and your BI agents can write correct SQL when they know what correct means. The gap is context: which tables matter, which joins are valid, which metrics are canonical, what the business terms actually refer to. Without that, agents produce plausible-looking artifacts that are subtly, dangerously wrong. Wrong enough to pass a glance, wrong enough to drive a decision. - -Analytics engineers already know this pain. It's the same reason you write dbt tests, maintain a data dictionary, and spend half of standup explaining why someone's dashboard number doesn't match the board deck. The difference is that agents make decisions at machine speed, so the wrong context propagates faster than a human can catch it. +- `orders.amount` may include refunds unless filtered. +- `customers.id` may not be the right join key for every source. +- `legacy_segments` may be stale even though it still exists. +- A metric may have a board-approved definition that is not obvious from + column names. ## Three waves of AI analytics -The industry has moved through three distinct approaches to getting AI and data to work together. +| Wave | What it gives agents | Where it breaks | +|------|----------------------|-----------------| +| **Database access** | Tables, columns, and query execution | Agents guess joins, filters, and metric logic | +| **Semantic layers** | Modeled metrics, dimensions, joins, and SQL generation | They often miss operating context: anomalies, caveats, ownership, and review history | +| **Agentic context** | Semantic definitions plus wiki knowledge, scans, provenance, and edit workflows | Requires context to be kept current and reviewable | -**Wave one: database access.** Connect an LLM to a database, let it generate SQL. This works for simple lookups - "how many orders last week?" - but breaks on anything that requires business knowledge. The agent guesses at joins, invents metrics, and hallucinates table relationships. Every query is a coin flip. +KTX is built for the third wave: agents that generate SQL, maintain semantic +files, write docs, propose tests, and leave reviewable diffs. -**Wave two: semantic layers and text-to-SQL.** Add structure. Define metrics in MetricFlow or Cube, expose schemas, build text-to-SQL pipelines. This is better - the agent knows that `revenue` means `sum(amount) where status != 'refunded'` - but building and maintaining that structure by hand is manual, time-consuming, and still limited. Semantic layers define what to calculate, not why, when, or how to interpret the result. The agent can compute net revenue but doesn't know about the February refund anomaly, the segment reclassification, or the fact that `enterprise` changed definition last quarter. +## What KTX adds -**Wave three: agentic context.** AI is no longer just answering questions - it's generating dashboards, writing semantic definitions, proposing dbt models, creating tests and documentation. For that to work, agents need more than metric definitions. They need the full picture: business rules, known data quality issues, relationship maps, historical context, and the institutional knowledge that lives in your team's heads. They need a context layer. +A context layer is the trusted knowledge surface between analytics systems and +agents. The semantic layer is the core, but agents also need business rules, +schema evidence, provenance, and a safe way to update files. -## What a context layer is +```text +Warehouses + dbt + BI + docs + | + v + ktx ingest + | + v +semantic-layer/ + wiki/ + raw-sources/ + provenance + | + v +Agents search, query, explain, validate, and patch context +``` -A context layer is the infrastructure that gives agents the business knowledge they need to produce correct analytics artifacts. It includes a semantic layer - that's a critical component - but it's not the whole thing. +| Pillar | Format | What it answers | +|--------|--------|-----------------| +| **Semantic sources** | `semantic-layer/**/*.yaml` | How do agents query a source safely? | +| **Wiki pages** | `wiki/**/*.md` | What does the business mean, and what caveats matter? | +| **Scan artifacts** | `raw-sources/**` | What did KTX observe in the warehouse or source tool? | +| **Provenance** | Ingest transcripts and run state | Why was this context created or changed? | -
- {"How KTX works"} -
-- {"KTX pulls structured metadata and human knowledge from your analytics stack, reconciles it into reviewable files, then gives agents a trusted surface for search, SQL generation, validation, and edits."} -
-- {"Source systems"} -
-- {"Warehouses"} -
-- {"schemas, types, row counts, constraints, query history"} -
-- {"Modeling tools"} -
-- {"dbt, MetricFlow, LookML"} -
-- {"BI systems"} -
-- {"Looker explores, Metabase questions, dashboards"} -
-- {"Notion and team knowledge"} -
-- {"runbooks, definitions, policies, analyst notes"} -
-- {"KTX ingest"} -
-{"Extract"}
-- {"adapters read metadata, files, APIs, and warehouse evidence"} -
-{"Reconcile"}
-- {"the ingest agent merges new facts with existing context"} -
-{"Verify"}
-- {"validation and provenance make each write auditable"} -
-- {"KTX project"} -
-- {"Agent workflows"} -
-