From ef000c5fc6aa6a1bfbed46f477c9839965ce1c01 Mon Sep 17 00:00:00 2001 From: Sarav Date: Mon, 10 Aug 2026 12:50:32 +0530 Subject: [PATCH] =?UTF-8?q?docs:=20re-sync=20from=20help-docs=20=E2=80=94?= =?UTF-8?q?=20absolutize=20all=20cross-section=20links=20[docs-sync]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Picks up the tool fix so /snowflake-native-app/ (and any other cross-section link) is rewritten to https://help.altimate.ai/... instead of 404ing standalone. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_011fcN8kPwzjDeBysYUzKfJU --- docs/docs/assets/brand/logo-white.svg | 37 + docs/docs/assets/stylesheets/copy-page.css | 161 + docs/docs/assets/stylesheets/extra.css | 2740 +++++++++++++++++ .../assets/stylesheets/neoteroi-cards.css | 108 + docs/docs/configure/acp.md | 5 + docs/docs/configure/agents.md | 7 +- .../configure/bedrock-custom-endpoints.md | 5 + docs/docs/configure/commands.md | 7 +- docs/docs/configure/config.md | 5 + docs/docs/configure/context-management.md | 5 + docs/docs/configure/custom-tools.md | 5 + docs/docs/configure/formatters.md | 5 + docs/docs/configure/governance.md | 5 + docs/docs/configure/index.md | 5 + docs/docs/configure/keybinds.md | 5 + docs/docs/configure/lsp.md | 5 + docs/docs/configure/mcp-servers.md | 4 + docs/docs/configure/models.md | 5 + docs/docs/configure/permissions.md | 5 + docs/docs/configure/providers.md | 5 + docs/docs/configure/rules.md | 5 + docs/docs/configure/skills.md | 15 +- docs/docs/configure/themes.md | 5 + docs/docs/configure/tools.md | 4 + docs/docs/configure/tools/config.md | 5 + docs/docs/configure/tools/core-tools.md | 5 + docs/docs/configure/tools/custom.md | 4 + docs/docs/configure/tools/index.md | 5 + docs/docs/configure/trace.md | 5 + docs/docs/configure/warehouses.md | 5 + docs/docs/data-engineering/agent-modes.md | 5 + .../data-engineering/guides/ci-headless.md | 155 - .../data-engineering/guides/clickhouse.md | 5 + .../guides/cost-optimization.md | 5 + .../data-engineering/guides/data-parity.md | 5 + docs/docs/data-engineering/guides/index.md | 5 + .../docs/data-engineering/guides/migration.md | 5 + .../guides/using-with-claude-code.md | 5 + .../guides/using-with-codex.md | 5 + docs/docs/data-engineering/tools/dbt-tools.md | 7 +- .../data-engineering/tools/finops-tools.md | 5 + docs/docs/data-engineering/tools/index.md | 5 + .../data-engineering/tools/lineage-tools.md | 5 + .../data-engineering/tools/memory-tools.md | 5 + .../data-engineering/tools/schema-tools.md | 5 + docs/docs/data-engineering/tools/sql-tools.md | 5 + .../data-engineering/tools/warehouse-tools.md | 5 + docs/docs/data-engineering/training/index.md | 5 + .../training/team-deployment.md | 5 + docs/docs/data-engineering/validators.md | 5 + docs/docs/develop/ecosystem.md | 9 +- docs/docs/develop/plugins.md | 5 + docs/docs/develop/sdk.md | 5 + docs/docs/develop/server.md | 5 + docs/docs/drivers.md | 5 + docs/docs/examples/index.md | 5 + docs/docs/getting-started.md | 5 + docs/docs/getting-started/index.md | 187 +- docs/docs/getting-started/quickstart-new.md | 209 -- docs/docs/getting-started/quickstart.md | 431 +-- docs/docs/getting-started/setup.md | 454 +++ docs/docs/index.md | 106 +- docs/docs/llms.txt | 12 +- docs/docs/quickstart.md | 5 +- docs/docs/reference/changelog.md | 7 +- docs/docs/reference/network.md | 5 + docs/docs/reference/security-faq.md | 8 +- docs/docs/reference/telemetry.md | 8 +- docs/docs/reference/troubleshooting.md | 4 + docs/docs/reference/windows-wsl.md | 4 + docs/docs/usage/check.md | 5 + docs/docs/usage/ci-headless.md | 5 + docs/docs/usage/cli.md | 5 + docs/docs/usage/dbt-pr-review-corpus.md | 5 + docs/docs/usage/dbt-pr-review.md | 4 + docs/docs/usage/github.md | 5 + docs/docs/usage/gitlab.md | 5 + docs/docs/usage/ide.md | 26 +- docs/docs/usage/tui.md | 5 + docs/docs/usage/web.md | 5 + docs/mkdocs.yml | 167 +- 81 files changed, 4295 insertions(+), 860 deletions(-) create mode 100644 docs/docs/assets/brand/logo-white.svg create mode 100644 docs/docs/assets/stylesheets/copy-page.css create mode 100644 docs/docs/assets/stylesheets/extra.css create mode 100644 docs/docs/assets/stylesheets/neoteroi-cards.css delete mode 100644 docs/docs/data-engineering/guides/ci-headless.md delete mode 100644 docs/docs/getting-started/quickstart-new.md create mode 100644 docs/docs/getting-started/setup.md diff --git a/docs/docs/assets/brand/logo-white.svg b/docs/docs/assets/brand/logo-white.svg new file mode 100644 index 0000000000..48bfade239 --- /dev/null +++ b/docs/docs/assets/brand/logo-white.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/docs/assets/stylesheets/copy-page.css b/docs/docs/assets/stylesheets/copy-page.css new file mode 100644 index 0000000000..564ddc0e3f --- /dev/null +++ b/docs/docs/assets/stylesheets/copy-page.css @@ -0,0 +1,161 @@ +/* Firecrawl-style "Copy page" split-button. Themed with Material's + CSS vars so it adapts to slate/default palettes automatically. */ + +.ak-copy-page { + position: relative; + float: right; + display: inline-flex; + align-items: stretch; + margin: 0 0 0.75rem 1rem; + font-family: var(--md-text-font-family, inherit); + font-size: 0.7rem; + z-index: 3; +} + +.ak-copy-page__main, +.ak-copy-page__toggle { + background: var(--md-default-bg-color); + color: var(--md-default-fg-color); + border: 1px solid var(--md-default-fg-color--lightest); + cursor: pointer; + display: inline-flex; + align-items: center; + font: inherit; + line-height: 1; + transition: background-color 0.15s ease, border-color 0.15s ease; +} + +.ak-copy-page__main { + gap: 0.4rem; + padding: 0.45rem 0.7rem; + border-radius: 0.4rem 0 0 0.4rem; + font-weight: 500; +} + +.ak-copy-page__toggle { + padding: 0.45rem 0.45rem; + border-left: none; + border-radius: 0 0.4rem 0.4rem 0; +} + +.ak-copy-page__main:hover, +.ak-copy-page__toggle:hover, +.ak-copy-page__toggle[aria-expanded='true'] { + background: var(--md-default-fg-color--lightest); + border-color: var(--md-default-fg-color--lighter); +} + +.ak-copy-page__main svg, +.ak-copy-page__toggle svg { + flex: 0 0 auto; + opacity: 0.85; +} + +.ak-copy-page__menu { + position: absolute; + top: calc(100% + 6px); + right: 0; + min-width: 280px; + background: var(--md-default-bg-color); + border: 1px solid var(--md-default-fg-color--lightest); + border-radius: 0.55rem; + padding: 0.3rem; + box-shadow: 0 12px 32px rgba(0, 0, 0, 0.35), + 0 2px 6px rgba(0, 0, 0, 0.18); + display: flex; + flex-direction: column; + gap: 0.1rem; + z-index: 10; +} + +.ak-copy-page__menu[hidden] { + display: none; +} + +[data-md-color-scheme='default'] .ak-copy-page__menu { + box-shadow: 0 12px 32px rgba(15, 23, 42, 0.12), + 0 2px 6px rgba(15, 23, 42, 0.06); +} + +.ak-copy-page__menu button { + background: none; + border: none; + color: var(--md-default-fg-color); + cursor: pointer; + text-align: left; + font: inherit; + padding: 0.55rem 0.6rem; + border-radius: 0.4rem; + display: grid; + grid-template-columns: 32px 1fr; + gap: 0.7rem; + align-items: center; + width: 100%; +} + +.ak-copy-page__menu button:hover { + background: var(--md-default-fg-color--lightest); +} + +.ak-copy-page__menu-icon { + display: inline-flex; + align-items: center; + justify-content: center; + width: 32px; + height: 32px; + border-radius: 0.4rem; + background: var(--md-default-fg-color--lightest); +} + +.ak-copy-page__menu-icon svg { + opacity: 0.9; +} + +.ak-copy-page__menu-text { + display: flex; + flex-direction: column; + line-height: 1.2; + min-width: 0; +} + +.ak-copy-page__menu-text strong { + font-weight: 600; + font-size: 0.72rem; + display: inline-flex; + align-items: center; + gap: 0.25rem; +} + +.ak-copy-page__menu-text em { + font-style: normal; + font-size: 0.6rem; + opacity: 0.65; + margin-top: 2px; +} + +.ak-copy-page__ext { + font-size: 0.6rem; + opacity: 0.6; +} + +/* Make sure floats inside the article don't bleed past the footer. */ +.md-content__inner::after { + content: ''; + display: block; + clear: both; +} + +/* On narrow screens, full-width the menu so it never overflows the viewport. */ +@media (max-width: 480px) { + .ak-copy-page { + float: none; + display: flex; + margin: 0 0 0.75rem 0; + } + .ak-copy-page__menu { + left: 0; + right: auto; + min-width: 0; + width: 100%; + } +} diff --git a/docs/docs/assets/stylesheets/extra.css b/docs/docs/assets/stylesheets/extra.css new file mode 100644 index 0000000000..c9a02dc2df --- /dev/null +++ b/docs/docs/assets/stylesheets/extra.css @@ -0,0 +1,2740 @@ +/* ============================================================ + Altimate Docs — brand-true styling + Follows altimate.ai/brand: Orange #F07030, Teal #00CCAA on + #09090B. No gradient soup, no chip-pill clutter, no logo + filters (brand rules forbid). Sharp, deliberate, restrained. + ============================================================ */ + +/* ---- Brand tokens ------------------------------------------------------ */ +:root { + --alt-orange: #F07030; + --alt-orange-deep: #C5571F; + --alt-orange-tint: rgba(240, 112, 48, 0.12); + --alt-teal: #00CCAA; + --alt-teal-tint: rgba(0, 204, 170, 0.12); + + --alt-bg-dark: #09090B; + --alt-panel: #141418; + --alt-surface: #111113; + --alt-border-dark: rgba(255, 255, 255, 0.08); + --alt-border-dark-strong: rgba(255, 255, 255, 0.16); + + --alt-fg-light: #FAFAFA; + --alt-fg-dim: #DDDDDD; + --alt-fg-muted: #A1A1AA; + + --alt-bg-light: #FFFFFF; + --alt-fg-dark: #09090B; + --alt-fg-dark-muted: #52525B; + --alt-border-light: rgba(9, 9, 11, 0.10); + --alt-border-light-strong: rgba(9, 9, 11, 0.18); + + --alt-font-ui: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; + --alt-font-mono: "JetBrains Mono", "Fira Code", "SF Mono", Consolas, Monaco, monospace; +} + +/* ---- Light theme — clean, off-white-leaning -------------------------- */ +[data-md-color-scheme="default"] { + --md-primary-fg-color: var(--alt-bg-light); + --md-primary-fg-color--light: #F4F4F5; + --md-primary-fg-color--dark: var(--alt-fg-dark); + --md-accent-fg-color: var(--alt-orange); + --md-accent-fg-color--transparent: var(--alt-orange-tint); + --md-default-bg-color: var(--alt-bg-light); + --md-default-fg-color: var(--alt-fg-dark); + --md-default-fg-color--light: #3F3F46; + --md-default-fg-color--lighter: var(--alt-fg-dark-muted); + --md-default-fg-color--lightest: var(--alt-border-light); + --md-code-bg-color: #FAFAFA; + --md-code-fg-color: #18181B; + --md-typeset-a-color: var(--alt-orange-deep); + --md-footer-bg-color: var(--alt-bg-dark); + --md-footer-bg-color--dark: #000000; +} + +/* ---- Dark theme — true black, brand-correct ------------------------- */ +[data-md-color-scheme="slate"] { + --md-hue: 240; + --md-primary-fg-color: var(--alt-bg-dark); + --md-primary-fg-color--light: var(--alt-panel); + --md-primary-fg-color--dark: #000000; + --md-accent-fg-color: var(--alt-orange); + --md-accent-fg-color--transparent: var(--alt-orange-tint); + --md-default-bg-color: var(--alt-bg-dark); + --md-default-bg-color--light: var(--alt-panel); + --md-default-fg-color: var(--alt-fg-light); + --md-default-fg-color--light: var(--alt-fg-dim); + --md-default-fg-color--lighter: var(--alt-fg-muted); + --md-default-fg-color--lightest: var(--alt-border-dark); + --md-code-bg-color: var(--alt-panel); + --md-code-fg-color: var(--alt-fg-light); + --md-typeset-a-color: var(--alt-orange); + --md-footer-bg-color: #000000; + --md-footer-bg-color--dark: #000000; +} + +[data-md-color-scheme="slate"] body, +[data-md-color-scheme="slate"] .md-main, +[data-md-color-scheme="slate"] .md-container { + background-color: var(--alt-bg-dark); +} + +/* ---- Header — flat, no glass blur (slows screenshots, feels overcooked) -- */ +.md-header { + box-shadow: none; + border-bottom: 1px solid var(--alt-border-light); +} +[data-md-color-scheme="default"] .md-header { + background-color: var(--alt-bg-light); + color: var(--alt-fg-dark); +} +[data-md-color-scheme="slate"] .md-header { + background-color: var(--alt-bg-dark); + color: var(--alt-fg-light); + border-bottom-color: var(--alt-border-dark); +} +[data-md-color-scheme="default"] .md-tabs { + background-color: var(--alt-bg-light); + color: var(--alt-fg-dark); + border-bottom: 1px solid var(--alt-border-light); +} +[data-md-color-scheme="slate"] .md-tabs { + background-color: var(--alt-bg-dark); + color: var(--alt-fg-light); + border-bottom: 1px solid var(--alt-border-dark); +} + +/* Tabs — clean underline (orange), no gradient */ +.md-tabs__link { + opacity: 0.72; + font-weight: 500; + letter-spacing: -0.005em; + transition: opacity 0.15s ease; +} +.md-tabs__link:hover, +.md-tabs__link--active { + opacity: 1; +} +.md-tabs__link--active { + font-weight: 600; + position: relative; +} +.md-tabs__link--active::after { + content: ""; + position: absolute; + left: 0; + right: 0; + bottom: -2px; + height: 2px; + background: var(--alt-orange); +} + +/* ---- Logo: swap to white in dark mode (no filter; brand requires + unmodified files, so we just point at the official white variant). -- */ +[data-md-color-scheme="slate"] .md-header__button.md-logo img, +[data-md-color-scheme="slate"] .md-header__button.md-logo svg { + content: url("../brand/logo-white.svg"); +} +.md-header__button.md-logo img, +.md-header__button.md-logo svg { + height: 1.55rem; + width: auto; + filter: none !important; +} + +/* ---- Typography — confident, restrained ------------------------------ */ +body, .md-typeset { + font-family: var(--alt-font-ui); + font-feature-settings: "cv02", "cv03", "cv04", "cv11", "ss01"; + letter-spacing: -0.005em; +} +.md-typeset h1, +.md-typeset h2, +.md-typeset h3, +.md-typeset h4 { + font-family: var(--alt-font-ui); + letter-spacing: -0.025em; + font-weight: 700; +} +.md-typeset h1 { font-size: 2.05rem; line-height: 1.15; margin: 0 0 1rem; font-weight: 800; } +.md-typeset h2 { font-size: 1.45rem; line-height: 1.25; margin: 2.4rem 0 0.7rem; } +.md-typeset h3 { font-size: 1.1rem; margin: 1.7rem 0 0.5rem; font-weight: 700; } +.md-typeset code, +.md-typeset pre { + font-family: var(--alt-font-mono); + font-feature-settings: "calt", "liga"; +} +.md-typeset .headerlink { + opacity: 0; + margin-left: 0.4rem; + transition: opacity 0.15s ease; +} +.md-typeset h1:hover .headerlink, +.md-typeset h2:hover .headerlink, +.md-typeset h3:hover .headerlink, +.md-typeset h4:hover .headerlink { + opacity: 0.55; +} + +/* ---- Announcement banner — flat, off-brand-gradient REMOVED --------- */ +.md-banner { + background: var(--alt-bg-dark); + color: var(--alt-fg-light); + font-size: 0.74rem; + line-height: 1.3; + font-weight: 500; + border-bottom: 1px solid var(--alt-border-dark); +} +.md-banner__inner { + padding: 0.45rem 1rem; + display: flex; + align-items: center; + justify-content: center; + gap: 0.55rem; + flex-wrap: wrap; + margin: 0 auto; + min-height: 0; +} +.md-banner a { + color: var(--alt-fg-light); + text-decoration: none; + font-weight: 600; + transition: color 0.15s ease; +} +.md-banner a:hover { color: var(--alt-orange); } +.md-banner .md-banner__button { + margin: 0; + padding: 0; + width: 1rem; + height: 1rem; + color: var(--alt-fg-muted); +} +.ak-banner-tag { + display: inline-flex; + align-items: center; + padding: 0.05rem 0.45rem; + font-size: 0.62rem; + font-weight: 700; + letter-spacing: 0.08em; + text-transform: uppercase; + color: var(--alt-orange); + border: 1px solid var(--alt-orange); + border-radius: 2px; + line-height: 1.4; +} +.ak-banner-cta { + color: var(--alt-orange) !important; + font-weight: 600; +} +.ak-banner-cta::after { + content: " →"; + display: inline; +} + +/* ---- Cards — clean, neutral, anti-slop -------------------------------- */ +.nt-card-title { + text-align: left; + font-size: 1.02rem; + font-weight: 700; + letter-spacing: -0.015em; +} +.nt-card .nt-card-image:empty { + display: none; + min-height: 0; +} +/* Grid: [icon] [title] / [description spans both] */ +.nt-card-content { + display: grid; + grid-template-columns: auto 1fr; + column-gap: 0.85rem; + row-gap: 0.45rem; + align-items: start; + padding: 0.9rem 1rem 1rem; +} +.nt-card-content > h2, +.nt-card-content > h3, +.nt-card-content > h4 { + grid-column: 2; + grid-row: 1; + align-self: center; + margin: 0 !important; + padding: 0 !important; + font-size: 1.05rem; + font-weight: 700; + letter-spacing: -0.015em; + line-height: 1.25; +} +.nt-card-content > h2 a, +.nt-card-content > h3 a, +.nt-card-content > h4 a { + color: var(--alt-orange-deep) !important; + text-decoration: none !important; +} +[data-md-color-scheme="slate"] .nt-card-content > h2 a, +[data-md-color-scheme="slate"] .nt-card-content > h3 a, +[data-md-color-scheme="slate"] .nt-card-content > h4 a { + color: var(--alt-orange) !important; +} +.nt-card-content > h2 .headerlink, +.nt-card-content > h3 .headerlink, +.nt-card-content > h4 .headerlink { + display: none !important; +} +.nt-card-content > p, +.nt-card-content > .nt-card-text { + grid-column: 1 / -1; + margin: 0 !important; + color: var(--md-default-fg-color--light); + line-height: 1.5; + font-size: 0.85rem; +} +.nt-card { + position: relative; + background: var(--md-default-bg-color); + border-radius: 8px !important; + padding: 0 !important; + margin-bottom: 0 !important; + overflow: hidden; + transition: border-color 0.15s ease, background 0.15s ease; +} +[data-md-color-scheme="default"] .nt-card { + border: 1px solid var(--alt-border-light); + box-shadow: none; +} +[data-md-color-scheme="default"] .nt-card:hover { + border-color: var(--alt-orange); + background: #FFFFFF; +} +[data-md-color-scheme="slate"] .nt-card { + background-color: var(--alt-panel); + border: 1px solid var(--alt-border-dark); + box-shadow: none; +} +[data-md-color-scheme="slate"] .nt-card:hover { + border-color: var(--alt-orange); + background-color: #18181B; +} + +/* Icon swatch — bigger, sits inline with the title in row 1 */ +.nt-card .ak-card-icon { + grid-column: 1; + grid-row: 1; + width: 40px; + height: 40px; + border-radius: 8px; + background: rgba(240, 112, 48, 0.08); + display: inline-flex; + align-items: center; + justify-content: center; + margin: 0; + border: 1px solid var(--alt-border-light); + flex-shrink: 0; +} +[data-md-color-scheme="slate"] .nt-card .ak-card-icon { + background: rgba(240, 112, 48, 0.1); + border-color: var(--alt-border-dark); +} +.nt-card:hover .ak-card-icon { + background: rgba(240, 112, 48, 0.14); + border-color: var(--alt-orange); +} +.nt-card .ak-card-icon svg { + width: 20px; + height: 20px; + stroke: var(--alt-orange); + fill: none; + stroke-width: 1.8; +} + +/* ---- Home hero — editorial, no gradient text, no radial glow ------- */ +.ak-home .md-content h1:first-of-type { + display: none; +} +.ak-home > section { + padding: 2.4rem 0; +} +.ak-home > section:first-child { + padding-top: 0.6rem; +} +.ak-home .ak-popular { + padding-top: 3rem; +} +.ak-home .ak-needs { + padding-top: 3.2rem; + border-top: 1px solid var(--alt-border-light); + margin-top: 0.8rem; +} +[data-md-color-scheme="slate"] .ak-home .ak-needs { + border-top-color: var(--alt-border-dark); +} +.ak-hero { + position: relative; + padding: 2.2rem 0 1.6rem; + margin: -1rem 0 0; + text-align: left; +} +.ak-eyebrow { + display: inline-flex; + align-items: center; + gap: 0.5rem; + font-size: 0.7rem; + font-weight: 700; + letter-spacing: 0.14em; + text-transform: uppercase; + color: var(--alt-orange); + margin: 0 0 0.8rem; +} +.ak-eyebrow::before { + content: ""; + width: 22px; + height: 1px; + background: var(--alt-orange); + display: inline-block; +} +.ak-hero-title { + font-size: 3.2rem; + font-weight: 800; + margin: 0 0 0.7rem; + letter-spacing: -0.035em; + line-height: 1.04; + color: var(--md-default-fg-color); + max-width: 900px; + text-wrap: balance; +} +.ak-hero-title .ak-orange { + color: var(--alt-orange); +} +.ak-hero-sub { + font-size: 1.08rem; + color: var(--md-default-fg-color--light); + max-width: 640px; + margin: 0 0 1.4rem; + line-height: 1.55; +} + +/* ---- Hero search bar ------------------------------------------------ */ +.ak-search-hero { + display: flex; + align-items: center; + gap: 0.7rem; + max-width: 560px; + padding: 0.75rem 1rem; + border-radius: 8px; + border: 1px solid var(--alt-border-light-strong); + background: var(--md-default-bg-color); + cursor: pointer; + transition: border-color 0.15s ease, box-shadow 0.15s ease; + margin: 0 0 0.8rem; +} +[data-md-color-scheme="slate"] .ak-search-hero { + border-color: var(--alt-border-dark-strong); + background: var(--alt-panel); +} +.ak-search-hero:hover, +.ak-search-hero:focus-visible { + border-color: var(--alt-orange); + box-shadow: 0 0 0 3px var(--alt-orange-tint); + outline: none; +} +.ak-search-icon { + width: 18px; + height: 18px; + flex-shrink: 0; + opacity: 0.5; +} +.ak-search-text { + flex: 1; + font-size: 0.88rem; + color: var(--md-default-fg-color--lighter); + letter-spacing: -0.005em; +} +.ak-search-kbd { + display: inline-flex; + align-items: center; + justify-content: center; + min-width: 22px; + height: 22px; + padding: 0 5px; + border-radius: 4px; + border: 1px solid var(--alt-border-light-strong); + background: var(--md-default-bg-color); + font-size: 0.72rem; + font-family: var(--alt-font-mono); + color: var(--md-default-fg-color--lighter); + line-height: 1; +} +[data-md-color-scheme="slate"] .ak-search-kbd { + border-color: var(--alt-border-dark-strong); + background: var(--alt-surface); +} + +/* Hero quick-link tags */ +.ak-hero-tags { + display: flex; + align-items: center; + gap: 0.5rem; + flex-wrap: wrap; + font-size: 0.78rem; + margin: 0 0 1.2rem; +} +.ak-hero-tags-label { + color: var(--md-default-fg-color--lighter); + font-weight: 500; +} +.ak-hero-tags a { + color: var(--alt-orange); + text-decoration: none; + font-weight: 500; + transition: opacity 0.12s ease; +} +.ak-hero-tags a:hover { opacity: 0.75; } + +/* ---- CTAs — solid orange primary, no gradient, no glow shadow ------- */ +.ak-cta-row { + display: flex; + gap: 0.6rem; + flex-wrap: wrap; + margin: 0 0 2rem; + justify-content: flex-start; +} +.ak-btn { + display: inline-flex; + align-items: center; + gap: 0.45rem; + padding: 0.62rem 1rem; + border-radius: 6px; + font-weight: 600; + font-size: 0.84rem; + letter-spacing: -0.005em; + text-decoration: none !important; + transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease; + border: 1px solid transparent; + cursor: pointer; + line-height: 1.25; +} +.ak-btn svg { width: 15px; height: 15px; } +.ak-btn-primary { + background: var(--alt-orange); + color: #FFFFFF !important; +} +.ak-btn-primary:hover { + background: var(--alt-orange-deep); +} +.ak-btn-secondary { + background: transparent; + color: var(--md-default-fg-color) !important; + border-color: var(--alt-border-light-strong); +} +[data-md-color-scheme="slate"] .ak-btn-secondary { + border-color: var(--alt-border-dark-strong); +} +.ak-btn-secondary:hover { + border-color: var(--alt-orange); + color: var(--alt-orange) !important; +} + +/* ---- Metrics — quiet, mono numerals, no gradient fill text -------- */ +.ak-metrics { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 0; + margin: 0 0 2.5rem; + border-top: 1px solid var(--alt-border-light); + border-bottom: 1px solid var(--alt-border-light); +} +[data-md-color-scheme="slate"] .ak-metrics { + border-color: var(--alt-border-dark); +} +.ak-metric { + padding: 1.1rem 1rem 1rem; + border-right: 1px solid var(--alt-border-light); +} +[data-md-color-scheme="slate"] .ak-metric { + border-right-color: var(--alt-border-dark); +} +.ak-metric:last-child { + border-right: 0; +} +.ak-metric-value { + font-size: 1.7rem; + font-weight: 800; + letter-spacing: -0.03em; + color: var(--md-default-fg-color); + line-height: 1; + font-feature-settings: "tnum"; +} +.ak-metric-value .ak-orange { color: var(--alt-orange); } +.ak-metric-value .ak-teal { color: var(--alt-teal); } +.ak-metric-label { + font-size: 0.7rem; + color: var(--md-default-fg-color--lighter); + text-transform: uppercase; + letter-spacing: 0.1em; + margin-top: 0.4rem; + font-weight: 600; +} +@media (max-width: 720px) { + .ak-metrics { grid-template-columns: repeat(2, 1fr); } + .ak-metric { border-right: 0; border-bottom: 1px solid var(--alt-border-light); } + .ak-metric:nth-last-child(-n+2) { border-bottom: 0; } + [data-md-color-scheme="slate"] .ak-metric { border-bottom-color: var(--alt-border-dark); } + .ak-hero-title { font-size: 2.1rem; } +} + +/* ---- Trusted-by — legacy (now superseded by .ak-proof) ------------- */ +.ak-trusted { + margin: 0 0 2.5rem; + padding: 1.2rem 0 1.6rem; +} +.ak-trusted-label { + font-size: 0.68rem; + font-weight: 600; + letter-spacing: 0.16em; + text-transform: uppercase; + color: var(--md-default-fg-color--lighter); + margin: 0 0 0.85rem; +} +.ak-logo-row { + display: flex; + align-items: center; + gap: 2.4rem; + flex-wrap: wrap; +} +.ak-logo-row span { + font-weight: 600; + font-size: 0.95rem; + color: var(--md-default-fg-color--light); + letter-spacing: -0.015em; +} + +/* ---- Section heading — eyebrow + plain heading. NO vertical bar. --- */ +.ak-section { + margin: 3rem 0 1.2rem; +} +.ak-section-eyebrow { + font-size: 0.68rem; + font-weight: 700; + letter-spacing: 0.16em; + text-transform: uppercase; + color: var(--alt-orange); + margin: 0 0 0.6rem; +} +.ak-section-title { + font-size: 1.55rem; + font-weight: 700; + letter-spacing: -0.025em; + margin: 0 0 0.4rem; +} +.ak-section-sub { + color: var(--md-default-fg-color--light); + font-size: 0.95rem; + margin: 0 0 1.4rem; + line-height: 1.5; +} + +/* Inline mention: "Altimate Code · #1 on ADE-Bench" — pure typography */ +.ak-bench-line { + display: inline-flex; + align-items: center; + gap: 0.5rem; + font-size: 0.78rem; + color: var(--md-default-fg-color--light); + font-weight: 500; + letter-spacing: 0.005em; +} +.ak-bench-line strong { color: var(--alt-orange); font-weight: 700; } +.ak-bench-line .ak-dot { + width: 4px; + height: 4px; + border-radius: 50%; + background: var(--md-default-fg-color--lighter); +} + +/* ---- Code blocks — sharper, monospace-confident -------------------- */ +.md-typeset pre > code, +.md-typeset .highlight pre { + border-radius: 6px; + border: 1px solid var(--alt-border-light); +} +[data-md-color-scheme="slate"] .md-typeset pre > code, +[data-md-color-scheme="slate"] .md-typeset .highlight pre { + border: 1px solid var(--alt-border-dark); + background: var(--alt-panel) !important; +} +.md-typeset code { + border-radius: 3px; + padding: 0.12em 0.36em; + font-size: 0.85em; +} +[data-md-color-scheme="slate"] .md-typeset :not(pre) > code { + background: rgba(255, 255, 255, 0.06); + color: var(--alt-fg-light); + border: 1px solid var(--alt-border-dark); +} +[data-md-color-scheme="default"] .md-typeset :not(pre) > code { + background: #F4F4F5; + color: #18181B; + border: 1px solid var(--alt-border-light); +} + +.md-clipboard { + color: var(--md-default-fg-color--lighter); + transition: color 0.15s ease; +} +.md-clipboard:hover { + color: var(--alt-orange); +} + +/* ---- Admonitions — orange and teal only ---------------------------- */ +.md-typeset .admonition, +.md-typeset details { + border-radius: 6px; + border-width: 0; + border-left: 3px solid var(--alt-orange); + box-shadow: none; +} +[data-md-color-scheme="slate"] .md-typeset .admonition, +[data-md-color-scheme="slate"] .md-typeset details { + background: var(--alt-panel); +} +.md-typeset .admonition.tip, +.md-typeset details.tip { border-left-color: var(--alt-teal); } +.md-typeset .admonition.warning, +.md-typeset details.warning { border-left-color: #F59E0B; } +.md-typeset .admonition.danger, +.md-typeset details.danger, +.md-typeset .admonition.failure, +.md-typeset details.failure { border-left-color: #EF4444; } +.md-typeset .admonition.info, +.md-typeset details.info { border-left-color: var(--alt-teal); } + +/* ---- Tables -------------------------------------------------------- */ +.md-typeset table:not([class]) { + border-radius: 6px; + overflow: hidden; + border: 1px solid var(--alt-border-light); + box-shadow: none; +} +.md-typeset table:not([class]) th { + background: #FAFAFA; + font-weight: 700; + letter-spacing: -0.005em; + text-transform: none; +} +[data-md-color-scheme="slate"] .md-typeset table:not([class]) { + border-color: var(--alt-border-dark); +} +[data-md-color-scheme="slate"] .md-typeset table:not([class]) th { + background: var(--alt-panel); +} + +/* ---- Search -------------------------------------------------------- */ +.md-search__form { + border-radius: 6px; + background: rgba(0, 0, 0, 0.05); + backdrop-filter: none; +} +[data-md-color-scheme="slate"] .md-search__form { + background: rgba(255, 255, 255, 0.05); + border: 1px solid var(--alt-border-dark); +} +.md-search__input::placeholder { + color: var(--md-default-fg-color--lighter); +} + +/* ---- Sidebar nav --------------------------------------------------- */ +.md-nav__title { + font-weight: 700; + letter-spacing: -0.005em; + font-size: 0.78rem; +} +.md-nav__link { + transition: color 0.12s ease; +} +.md-nav__link:hover { + color: var(--alt-orange); +} +.md-nav__link--active { + font-weight: 600; + color: var(--alt-orange) !important; +} +.md-nav--secondary .md-nav__link--active { + position: relative; +} +.md-nav--secondary .md-nav__link--active::before { + content: ""; + position: absolute; + left: -12px; + top: 6px; + bottom: 6px; + width: 2px; + background: var(--alt-orange); +} + +/* ---- Footer — solid black with orange top accent ------------------ */ +.md-footer { + background: var(--md-footer-bg-color); +} +.md-footer-meta { + background: var(--md-footer-bg-color--dark); +} +.md-footer__inner { + padding-bottom: 1.5rem; +} +.md-footer::before { + content: ""; + display: block; + height: 1px; + background: var(--alt-orange); +} + +/* ---- Scroll-to-top FAB — solid orange, no gradient -------------- */ +.md-top { + background: var(--alt-orange); + color: #FFFFFF !important; + font-weight: 600; + border-radius: 6px; + box-shadow: 0 4px 12px rgba(240, 112, 48, 0.30); +} +.md-top:hover { + background: var(--alt-orange-deep); +} + +/* ---- Reading-progress hairline — orange, not gradient ----------- */ +.ak-progress { + position: fixed; + top: 0; + left: 0; + right: 0; + height: 2px; + background: var(--alt-orange); + transform-origin: 0 50%; + transform: scaleX(0); + z-index: 999; + pointer-events: none; + transition: transform 0.06s linear; +} + +/* ---- Hide ToC button on hub indexes (we hide toc in frontmatter) -- */ +.md-content__button { display: none; } + +/* ---- Navbar GitHub star — proper pill with icon + count ------------- */ +.ak-nav-star.ak-nav-star { + display: inline-flex !important; + align-items: center; + justify-content: center; + gap: 11px; + height: 34px; + width: auto; + padding: 0 16px; + margin: 0 8px 0 0; + box-sizing: border-box; + border: 1px solid var(--alt-border-light-strong); + background: transparent; + border-radius: 999px; + font-size: 13px; + font-weight: 700; + font-variant-numeric: tabular-nums; + line-height: 1; + text-decoration: none !important; + color: var(--md-default-fg-color) !important; + opacity: 1; + transition: border-color 0.15s ease, color 0.15s ease, background 0.15s ease; + white-space: nowrap; +} +[data-md-color-scheme="slate"] .ak-nav-star { + border-color: rgba(255, 255, 255, 0.22); + color: var(--alt-fg-light) !important; +} +.ak-nav-star:hover { + border-color: var(--alt-orange); + color: var(--alt-orange) !important; + background: rgba(240, 112, 48, 0.08); +} +.ak-nav-star > svg { + width: 17px; + height: 17px; + flex-shrink: 0; + color: currentColor; + display: block; +} +.ak-nav-star-count { + display: inline-flex; + align-items: center; + gap: 6px; + padding-left: 11px; + border-left: 1px solid var(--alt-border-light-strong); + color: var(--md-default-fg-color); + font-weight: 700; + line-height: 1; + height: 18px; +} +[data-md-color-scheme="slate"] .ak-nav-star-count { + border-left-color: rgba(255, 255, 255, 0.22); + color: var(--alt-fg-light); +} +.ak-nav-star:hover .ak-nav-star-count { + border-left-color: var(--alt-orange); + color: var(--alt-orange); +} +.ak-nav-star-count::before { + content: ""; + width: 14px; + height: 14px; + background: var(--alt-orange); + -webkit-mask: url("data:image/svg+xml;utf8,") center/contain no-repeat; + mask: url("data:image/svg+xml;utf8,") center/contain no-repeat; + display: inline-block; + flex-shrink: 0; +} +@media (max-width: 600px) { + .ak-nav-star { padding: 0 12px; gap: 9px; height: 32px; } + .ak-nav-star-count { padding-left: 9px; gap: 5px; } + .ak-nav-star > svg { width: 16px; height: 16px; } + .ak-nav-star-count::before { width: 12px; height: 12px; } +} + +/* ---- Top nav tab icons — pure CSS, survives Material hydration ------- */ +.md-tabs__link { + display: inline-flex !important; + align-items: center; + gap: 7px; +} +.md-tabs__link::before { + content: ""; + display: inline-block; + width: 16px; + height: 16px; + flex-shrink: 0; + background-color: currentColor; + opacity: 0.65; + transition: opacity 0.15s ease, background-color 0.15s ease; + -webkit-mask-repeat: no-repeat; + mask-repeat: no-repeat; + -webkit-mask-position: center; + mask-position: center; + -webkit-mask-size: contain; + mask-size: contain; +} +.md-tabs__link:hover::before, +.md-tabs__item--active > .md-tabs__link::before { + opacity: 1; + background-color: var(--alt-orange); +} + +/* Home: first tab in the list (no specific slug) */ +.md-tabs__list > .md-tabs__item:first-child > .md-tabs__link::before { + -webkit-mask-image: url("data:image/svg+xml;utf8,"); + mask-image: url("data:image/svg+xml;utf8,"); +} +/* Getting Started — rocket */ +.md-tabs__link[href*="/getting-started/"]::before { + -webkit-mask-image: url("data:image/svg+xml;utf8,"); + mask-image: url("data:image/svg+xml;utf8,"); +} +/* Altimate Code — code brackets */ +.md-tabs__link[href*="/code/"]::before { + -webkit-mask-image: url("data:image/svg+xml;utf8,"); + mask-image: url("data:image/svg+xml;utf8,"); +} +/* Power User for dbt — puzzle / extension */ +.md-tabs__link[href*="/dbt-power-user/"]::before { + -webkit-mask-image: url("data:image/svg+xml;utf8,"); + mask-image: url("data:image/svg+xml;utf8,"); +} +/* Altimate MCP — connect / link */ +.md-tabs__link[href*="/datamates/"]::before { + -webkit-mask-image: url("data:image/svg+xml;utf8,"); + mask-image: url("data:image/svg+xml;utf8,"); +} +/* Enterprise Platform — building */ +.md-tabs__link[href*="/platform/"]::before { + -webkit-mask-image: url("data:image/svg+xml;utf8,"); + mask-image: url("data:image/svg+xml;utf8,"); +} +/* Snowflake Native App — snowflake */ +.md-tabs__link[href*="/snowflake-native-app/"]::before { + -webkit-mask-image: url("data:image/svg+xml;utf8,"); + mask-image: url("data:image/svg+xml;utf8,"); +} +/* Resources — book */ +.md-tabs__link[href*="/resources/"]::before { + -webkit-mask-image: url("data:image/svg+xml;utf8,"); + mask-image: url("data:image/svg+xml;utf8,"); +} + +/* ---- Mobile -------------------------------------------------------- */ +@media (max-width: 600px) { + .ak-hero { padding: 2rem 0 1.6rem; } + .ak-hero-title { font-size: 1.9rem; } + .ak-hero-sub { font-size: 0.95rem; } + .ak-btn { font-size: 0.8rem; padding: 0.6rem 0.9rem; } + .nt-cards.nt-grid.cols-3, + .nt-cards.nt-grid.cols-2 { + grid-template-columns: 1fr !important; + } +} + +/* ---- Card grid — slightly tighter spacing -------------------------- */ +.nt-cards.nt-grid { + gap: 0.75rem; +} + +/* ============================================================ + Homepage v2 — new sections + ============================================================ */ + +/* ---- Shared section header ----------------------------------------- */ +.ak-section-head { + margin: 0 0 1rem; + text-align: center; +} +.ak-home .ak-section-title { + font-size: 1.55rem; + font-weight: 700; + letter-spacing: -0.025em; + margin: 0 0 0.25rem; + line-height: 1.15; +} +.ak-home .ak-section-sub { + color: var(--md-default-fg-color--light); + font-size: 0.92rem; + margin: 0; + line-height: 1.5; +} + +/* ---- Product picker — vertical sidebar layout ---------------------- */ +.ak-search-hero--section { + max-width: 100%; + margin: 0 0 1rem; + font-size: 0.95rem; +} +.ak-search-hero--section .ak-search-text { + font-size: 0.95rem; +} + +.ak-picker-layout { + display: grid; + grid-template-columns: 270px 1fr; + border: 1px solid var(--alt-border-light); + border-radius: 8px; + overflow: hidden; + min-height: 240px; +} +[data-md-color-scheme="slate"] .ak-picker-layout { + border-color: var(--alt-border-dark); +} + +.ak-picker-sidebar { + display: flex; + flex-direction: column; + background: var(--md-primary-fg-color--light); + border-right: 1px solid var(--alt-border-light); +} +[data-md-color-scheme="slate"] .ak-picker-sidebar { + background: var(--alt-surface); + border-right-color: var(--alt-border-dark); +} + +.ak-picker-tab { + display: flex; + align-items: center; + gap: 0.55rem; + width: 100%; + padding: 1.05rem 1rem; + border: 0; + border-left: 3px solid transparent; + border-bottom: 1px solid var(--alt-border-light); + border-radius: 0; + background: transparent; + color: var(--md-default-fg-color--light); + font-size: 0.82rem; + font-weight: 500; + font-family: var(--alt-font-ui); + text-align: left; + cursor: pointer; + transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +[data-md-color-scheme="slate"] .ak-picker-tab { + border-bottom-color: var(--alt-border-dark); +} +.ak-picker-tab:last-child { border-bottom: 0; } +.ak-picker-tab svg { + width: 15px; + height: 15px; + flex-shrink: 0; + opacity: 0.7; +} +.ak-picker-tab:hover { + background: var(--alt-orange-tint); + color: var(--alt-orange); + border-left-color: var(--alt-orange-tint); +} +.ak-picker-tab--active { + background: var(--alt-orange-tint); + color: var(--alt-orange); + font-weight: 600; + border-left-color: var(--alt-orange); +} +.ak-picker-tab--active svg { opacity: 1; } + +.ak-picker-content { + display: flex; + flex-direction: column; + background: var(--md-default-bg-color); +} +[data-md-color-scheme="slate"] .ak-picker-content { + background: var(--alt-panel); +} + +.ak-picker-panel { display: none; } +.ak-picker-panel--active { display: flex; flex: 1; } + +.ak-picker-body { + display: block; + padding: 1.6rem; + width: 100%; +} + +.ak-picker-body h3 { + font-size: 1.15rem; + font-weight: 700; + letter-spacing: -0.02em; + margin: 0 0 0.4rem; + color: var(--md-default-fg-color); +} +.ak-picker-use { + font-size: 0.88rem; + color: var(--md-default-fg-color--light); + line-height: 1.5; + margin: 0 0 0.8rem; + max-width: 480px; +} +.ak-picker-features { + display: flex; + flex-wrap: wrap; + gap: 0.35rem; + margin: 0 0 1rem; +} +.ak-picker-features span, +.ak-picker-features a.ak-feature-chip { + display: inline-flex; + align-items: center; + gap: 0.25rem; + padding: 0.2rem 0.5rem; + border-radius: 4px; + font-size: 0.72rem; + font-weight: 600; + color: var(--alt-orange); + background: var(--alt-orange-tint); + letter-spacing: 0.01em; + text-decoration: none; +} +a.ak-feature-chip::after { + content: "↗"; + font-size: 0.62rem; + opacity: 0.7; + font-style: normal; +} +a.ak-feature-chip:hover { + background: var(--alt-orange); + color: #fff; +} +a.ak-feature-chip:hover::after { + opacity: 1; +} + +/* ---- Install command (terminal chip, reveals Copy on hover) -------- */ +.ak-install { + display: inline-flex; + align-items: center; + gap: 0.6rem; + max-width: 100%; + margin: 0 0 1rem; + padding: 0.5rem 0.7rem; + border: 1px solid var(--alt-border-light); + border-radius: 6px; + background: rgba(9, 9, 11, 0.04); + cursor: pointer; + text-align: left; + transition: border-color 0.15s ease, background 0.15s ease; +} +[data-md-color-scheme="slate"] .ak-install { + border-color: var(--alt-border-dark); + background: rgba(255, 255, 255, 0.04); +} +.ak-install code { + font-family: var(--alt-font-mono); + font-size: 0.78rem; + color: var(--md-default-fg-color); + background: none; + padding: 0; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.ak-install-sign { + color: var(--alt-orange); + margin-right: 0.5rem; + font-weight: 700; + user-select: none; +} +.ak-install-action { + margin-left: auto; + flex-shrink: 0; + font-family: var(--alt-font-ui); + font-size: 0.68rem; + font-weight: 600; + letter-spacing: 0.04em; + text-transform: uppercase; + color: var(--alt-orange); + opacity: 0; + transition: opacity 0.15s ease; +} +.ak-install:hover, +.ak-install:focus-visible { + border-color: var(--alt-orange); + background: var(--alt-orange-tint); + outline: none; +} +.ak-install:hover .ak-install-action, +.ak-install:focus-visible .ak-install-action { + opacity: 1; +} +.ak-install--copied .ak-install-action { + opacity: 1; + color: #16a34a; +} + +/* ---- Popular articles ---------------------------------------------- */ +.ak-popular-grid { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 0.6rem; +} +.ak-popular-item { + display: flex; + align-items: flex-start; + gap: 0.65rem; + padding: 0.75rem 0.85rem; + border-radius: 8px; + border: 1px solid var(--alt-border-light); + text-decoration: none !important; + color: var(--md-default-fg-color) !important; + transition: border-color 0.15s ease, background 0.15s ease; +} +[data-md-color-scheme="slate"] .ak-popular-item { + border-color: var(--alt-border-dark); +} +.ak-popular-item:hover { + border-color: var(--alt-orange); + background: var(--alt-orange-tint); +} +.ak-popular-icon { + width: 32px; + height: 32px; + flex-shrink: 0; + display: flex; + align-items: center; + justify-content: center; + border-radius: 6px; + background: var(--alt-orange-tint); +} +.ak-popular-icon svg { + width: 16px; + height: 16px; + stroke: var(--alt-orange); +} +.ak-popular-text { + display: flex; + flex-direction: column; + gap: 0.15rem; + min-width: 0; +} +.ak-popular-text strong { + font-size: 0.82rem; + font-weight: 700; + letter-spacing: -0.01em; + line-height: 1.25; +} +.ak-popular-text span { + font-size: 0.72rem; + color: var(--md-default-fg-color--light); + line-height: 1.4; +} + +/* ---- Ecosystem stack visualization --------------------------------- */ +.ak-stack { + display: flex; + flex-direction: column; + align-items: center; + max-width: 680px; + margin: 0 auto; +} +.ak-stack-layer { + width: 100%; + padding: 0.9rem 1.2rem; + border-radius: 8px; + border: 1px solid var(--alt-border-light); + background: var(--md-default-bg-color); + transition: transform 0.2s cubic-bezier(0.16, 1, 0.3, 1), border-color 0.15s ease, box-shadow 0.2s ease; +} +[data-md-color-scheme="slate"] .ak-stack-layer { + border-color: var(--alt-border-dark); + background: var(--alt-panel); +} +.ak-stack-layer:hover { + transform: scale(1.015); + border-color: var(--alt-orange); +} +.ak-stack-layer--highlight { + border-color: var(--alt-orange); + border-width: 2px; + background: var(--alt-orange-tint); +} +[data-md-color-scheme="slate"] .ak-stack-layer--highlight { + border-color: var(--alt-orange); + background: rgba(240, 112, 48, 0.06); +} +.ak-stack-layer--highlight:hover { + box-shadow: 0 0 0 4px var(--alt-orange-tint); +} +.ak-stack-label { + display: flex; + align-items: center; + gap: 0.5rem; + margin: 0 0 0.4rem; +} +.ak-stack-label svg { + width: 20px; + height: 20px; + flex-shrink: 0; + stroke: var(--alt-orange); +} +.ak-stack-label strong { + font-size: 0.72rem; + font-weight: 700; + letter-spacing: 0.1em; + text-transform: uppercase; + color: var(--md-default-fg-color); +} +.ak-stack-layer--highlight .ak-stack-label strong { + color: var(--alt-orange); +} +.ak-stack-desc { + font-size: 0.78rem; + color: var(--md-default-fg-color--light); + margin-left: 30px; +} +.ak-stack-items { + display: flex; + flex-wrap: wrap; + gap: 0.35rem; + margin-left: 30px; +} +.ak-stack-chip { + display: inline-flex; + align-items: center; + padding: 0.2rem 0.55rem; + border-radius: 4px; + border: 1px solid var(--alt-border-light); + background: var(--md-default-bg-color); + font-size: 0.72rem; + font-weight: 500; + color: var(--md-default-fg-color); + text-decoration: none !important; + transition: border-color 0.12s ease, background 0.12s ease, color 0.12s ease; + white-space: nowrap; +} +[data-md-color-scheme="slate"] .ak-stack-chip { + border-color: var(--alt-border-dark); + background: var(--alt-surface); +} +a.ak-stack-chip:hover { + border-color: var(--alt-orange); + color: var(--alt-orange) !important; + background: var(--alt-orange-tint); +} + +/* Stack connectors */ +.ak-stack-conn { + display: flex; + align-items: center; + gap: 0.6rem; + padding: 0 0 0 2rem; + height: 32px; +} +.ak-stack-line { + width: 2px; + height: 100%; + background: var(--alt-orange); + opacity: 0.4; + position: relative; +} +.ak-stack-line::after { + content: ""; + position: absolute; + bottom: -1px; + left: -3px; + width: 8px; + height: 8px; + border-left: 2px solid var(--alt-orange); + border-bottom: 2px solid var(--alt-orange); + transform: rotate(-45deg); + opacity: 0.4; +} +.ak-stack-stage { + font-size: 0.68rem; + font-weight: 700; + letter-spacing: 0.08em; + text-transform: uppercase; + color: var(--alt-orange); + opacity: 0.7; +} + +.ak-stack-tagline { + text-align: center; + font-size: 0.88rem; + color: var(--alt-orange); + margin: 1.2rem 0 0; + font-weight: 600; + letter-spacing: -0.01em; +} + +/* ---- Browse by need ------------------------------------------------ */ +.ak-needs-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 0.7rem; +} +.ak-need-box { + display: flex; + flex-direction: column; + gap: 0.5rem; + padding: 1.2rem 1.1rem; + border-radius: 8px; + border: 1px solid var(--alt-border-light); + background: var(--md-default-bg-color); + text-decoration: none !important; + color: var(--md-default-fg-color) !important; + transition: border-color 0.15s ease, background 0.15s ease, transform 0.2s cubic-bezier(0.16, 1, 0.3, 1); +} +[data-md-color-scheme="slate"] .ak-need-box { + border-color: var(--alt-border-dark); + background: var(--alt-panel); +} +.ak-need-box:hover { + border-color: var(--alt-orange); + transform: translateY(-2px); +} +[data-md-color-scheme="default"] .ak-need-box:hover { + background: #FFFFFF; +} +[data-md-color-scheme="slate"] .ak-need-box:hover { + background: #18181B; +} +.ak-need-icon { + width: 44px; + height: 44px; + border-radius: 10px; + background: var(--alt-orange-tint); + border: 1px solid var(--alt-border-light); + display: flex; + align-items: center; + justify-content: center; + transition: background 0.15s ease, border-color 0.15s ease; +} +[data-md-color-scheme="slate"] .ak-need-icon { + border-color: var(--alt-border-dark); +} +.ak-need-box:hover .ak-need-icon { + background: rgba(240, 112, 48, 0.14); + border-color: var(--alt-orange); +} +.ak-need-icon svg { + width: 22px; + height: 22px; + stroke: var(--alt-orange); + fill: none; +} +.ak-need-box h3 { + font-size: 1rem; + font-weight: 700; + letter-spacing: -0.015em; + margin: 0; + line-height: 1.25; +} +.ak-need-box p { + font-size: 0.8rem; + color: var(--md-default-fg-color--light); + line-height: 1.45; + margin: 0; +} + +/* ---- Scroll animations --------------------------------------------- */ +.ak-anim { + opacity: 0; + transform: translateY(16px); + transition: opacity 0.4s cubic-bezier(0.16, 1, 0.3, 1), transform 0.4s cubic-bezier(0.16, 1, 0.3, 1); +} +.ak-anim--visible { + opacity: 1; + transform: translateY(0); +} +@media (prefers-reduced-motion: reduce) { + .ak-anim { + opacity: 1; + transform: none; + transition: none; + } +} + +/* ---- Homepage mobile overrides ------------------------------------- */ +@media (max-width: 900px) { + .ak-popular-grid { grid-template-columns: repeat(2, 1fr); } +} +@media (max-width: 680px) { + .ak-picker-layout { grid-template-columns: 1fr; } + .ak-picker-sidebar { + flex-direction: row; + flex-wrap: wrap; + border-right: 0; + border-bottom: 1px solid var(--alt-border-light); + } + [data-md-color-scheme="slate"] .ak-picker-sidebar { + border-bottom-color: var(--alt-border-dark); + } + .ak-picker-tab { + flex: 1 0 auto; + border-left: 0; + border-bottom: 0; + border-right: 1px solid var(--alt-border-light); + border-top: 3px solid transparent; + padding: 0.6rem 0.75rem; + font-size: 0.78rem; + } + .ak-picker-tab--active { border-top-color: var(--alt-orange); } + .ak-picker-tab:last-child { border-right: 0; } +} +@media (max-width: 600px) { + .ak-hero-title { font-size: 1.9rem; } + .ak-hero-sub { font-size: 0.95rem; } + .ak-hero { padding: 1.6rem 0 1.2rem; } + .ak-popular-grid { grid-template-columns: 1fr; } + .ak-needs-grid { grid-template-columns: 1fr; } + .ak-stack { max-width: 100%; } + .ak-stack-items { margin-left: 0; } + .ak-stack-desc { margin-left: 0; } + .ak-btn { font-size: 0.8rem; padding: 0.6rem 0.9rem; } +} + +/* ============================================================ + Homepage v3 — hero image, horizontal flow, dark proof strip + ============================================================ */ + +/* ---- Hero: two-column with image on the right ---------------------- */ +.ak-home .ak-hero { + padding: 1.4rem 0 1.2rem; + margin: -1rem 0 0; +} +.ak-hero-grid { + display: grid; + grid-template-columns: minmax(0, 0.78fr) minmax(0, 1.3fr); + gap: 2.4rem; + align-items: center; +} +.ak-hero-right { + justify-content: flex-end; + padding-right: 0; + margin-right: calc(-1 * var(--alt-hero-bleed, 2vw)); +} +@media (min-width: 1280px) { + :root { --alt-hero-bleed: 3vw; } +} +@media (min-width: 1500px) { + :root { --alt-hero-bleed: 4vw; } +} +.ak-hero-left { min-width: 0; } +.ak-home .ak-hero-title { + font-size: 3rem; + font-weight: 800; + margin: 0 0 1.3rem; + letter-spacing: -0.035em; + line-height: 1.05; + text-wrap: balance; +} +.ak-home .ak-hero .ak-search-hero { + max-width: 480px; + margin: 0 0 1rem; +} +.ak-hero-right { + display: flex; + justify-content: flex-end; + align-items: center; +} +.ak-hero-right img { + width: 100%; + max-width: 780px; + height: auto; + background: transparent; + border: 0; + border-radius: 0; + box-shadow: none; + display: block; +} +@media (max-width: 960px) { + .ak-hero-grid { grid-template-columns: 1fr; gap: 1.6rem; } + .ak-hero-right { justify-content: flex-start; margin-right: 0; } + .ak-hero-right img { max-width: 520px; } +} +@media (max-width: 600px) { + .ak-home .ak-hero-title { font-size: 1.95rem; } +} + +/* ---- Hub layout: Altimate Platform as the centerpiece -------------- */ +.ak-hub { + position: relative; + display: grid; + grid-template-columns: minmax(220px, 1fr) 110px minmax(360px, 1.55fr) 110px minmax(220px, 1fr); + gap: 0; + align-items: stretch; + margin: 0 calc(-1 * var(--alt-hub-bleed, 3vw)); + padding: 0.4rem 0; +} +@media (min-width: 1280px) { + :root { --alt-hub-bleed: 5vw; } +} +@media (min-width: 1500px) { + :root { --alt-hub-bleed: 7vw; } +} + +.ak-hub-col { + display: flex; + flex-direction: column; + gap: 1rem; + min-width: 0; +} +.ak-hub-eyebrow { + font-size: 0.6rem; + font-weight: 700; + letter-spacing: 0.2em; + text-transform: uppercase; + color: var(--md-default-fg-color--lighter); + padding-bottom: 0.1rem; +} +.ak-hub-eyebrow--end { text-align: right; } + +.ak-hub-card { + flex: 1; + display: flex; + flex-direction: column; + gap: 0.55rem; + padding: 0.95rem 1rem; + border-radius: 12px; + border: 1px solid var(--alt-border-light); + background: var(--md-default-bg-color); + transition: transform 0.2s cubic-bezier(0.16, 1, 0.3, 1), + border-color 0.15s ease, + box-shadow 0.2s ease; + min-height: 0; +} +[data-md-color-scheme="slate"] .ak-hub-card { + border-color: var(--alt-border-dark); + background: var(--alt-panel); +} +.ak-hub-card:hover { + transform: translateY(-2px); + border-color: var(--alt-orange); + box-shadow: 0 14px 30px -20px rgba(240, 112, 48, 0.45); +} + +.ak-hub-head { + display: flex; + align-items: center; + gap: 0.55rem; + font-size: 0.92rem; + font-weight: 700; + letter-spacing: -0.01em; + color: var(--md-default-fg-color); + line-height: 1.2; +} +.ak-hub-ico { + width: 30px; + height: 30px; + border-radius: 7px; + display: inline-flex; + align-items: center; + justify-content: center; + background: var(--alt-orange-tint); + flex-shrink: 0; +} +.ak-hub-ico svg { + width: 16px; + height: 16px; + stroke: var(--alt-orange); +} + +.ak-hub-chips { + display: flex; + flex-wrap: wrap; + gap: 0.3rem; + margin-top: 0.1rem; +} +.ak-hub-chip { + display: inline-flex; + align-items: center; + padding: 0.2rem 0.5rem; + border-radius: 999px; + border: 1px solid var(--alt-border-light); + background: transparent; + font-size: 0.7rem; + font-weight: 600; + color: var(--md-default-fg-color); + text-decoration: none !important; + white-space: nowrap; + font-family: var(--alt-font-ui); + transition: border-color 0.12s ease, color 0.12s ease, background 0.12s ease; +} +[data-md-color-scheme="slate"] .ak-hub-chip { + border-color: var(--alt-border-dark-strong); +} +a.ak-hub-chip:hover { + border-color: var(--alt-orange); + color: var(--alt-orange) !important; + background: var(--alt-orange-tint); +} + +/* ---- Connectors between columns ------------------------------------- */ +.ak-hub-link { + position: relative; + display: flex; + flex-direction: column; + justify-content: space-around; + align-items: stretch; + padding-top: 1.7rem; + pointer-events: none; +} +.ak-hub-line { + position: relative; + height: 2px; + background: var(--alt-orange); + opacity: 0.55; + display: flex; + align-items: center; + justify-content: center; +} +.ak-hub-line::after { + content: ""; + position: absolute; + right: -1px; + top: -4px; + border-left: 8px solid var(--alt-orange); + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; +} +.ak-hub-link--out .ak-hub-line::after { + right: -1px; +} +.ak-hub-link--in .ak-hub-line::after { + right: -1px; +} +.ak-hub-label { + position: absolute; + top: -16px; + left: 50%; + transform: translateX(-50%); + font-size: 0.62rem; + font-weight: 700; + letter-spacing: 0.18em; + text-transform: uppercase; + color: var(--alt-orange); + background: var(--md-default-bg-color); + padding: 0 0.4rem; + white-space: nowrap; +} +[data-md-color-scheme="slate"] .ak-hub-label { + background: var(--md-default-bg-color); +} + +/* ---- The centerpiece: Altimate Platform ----------------------------- */ +.ak-hub-core { + position: relative; + display: flex; + flex-direction: column; + gap: 1rem; + padding: 1.3rem 1.3rem 1.35rem; + border-radius: 16px; + border: 1px solid rgba(240, 112, 48, 0.42); + background: + radial-gradient(120% 80% at 100% 0%, rgba(240, 112, 48, 0.16), transparent 55%), + linear-gradient(180deg, rgba(240, 112, 48, 0.07), transparent 60%), + var(--md-default-bg-color); + box-shadow: + 0 30px 70px -36px rgba(240, 112, 48, 0.55), + 0 10px 24px -16px rgba(15, 15, 23, 0.2), + inset 0 1px 0 rgba(255, 255, 255, 0.6); + overflow: hidden; +} +[data-md-color-scheme="slate"] .ak-hub-core { + border-color: rgba(240, 112, 48, 0.55); + background: + radial-gradient(120% 80% at 100% 0%, rgba(240, 112, 48, 0.22), transparent 55%), + linear-gradient(180deg, rgba(240, 112, 48, 0.10), transparent 60%), + var(--alt-panel); + box-shadow: + 0 30px 70px -30px rgba(240, 112, 48, 0.42), + inset 0 1px 0 rgba(255, 255, 255, 0.05); +} +.ak-hub-core-glow { + position: absolute; + inset: -30% -10% auto auto; + width: 55%; + height: 65%; + background: radial-gradient(circle, rgba(240, 112, 48, 0.22), transparent 65%); + pointer-events: none; + z-index: 0; + filter: blur(8px); +} +.ak-hub-core > * { position: relative; z-index: 1; } + +.ak-hub-core-title { + display: flex; + align-items: center; + gap: 0.85rem; +} +.ak-hub-core-logo { + width: 44px; + height: 44px; + flex-shrink: 0; + object-fit: contain; + filter: drop-shadow(0 4px 10px rgba(36, 126, 254, 0.25)); +} +.ak-hub-core-title-text { + display: flex; + flex-direction: column; + gap: 0.18rem; + min-width: 0; +} +.ak-hub-core-title-text strong { + font-size: 1.32rem; + font-weight: 800; + letter-spacing: -0.028em; + line-height: 1.1; + color: var(--md-default-fg-color); +} +.ak-hub-core-sub { + font-size: 0.8rem; + color: var(--md-default-fg-color--light); + margin: 0; + line-height: 1.4; + letter-spacing: -0.005em; +} + +.ak-hub-core-grid { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 0.5rem; +} +.ak-hub-cap { + display: flex; + align-items: center; + gap: 0.7rem; + padding: 0.7rem 0.85rem; + border-radius: 10px; + border: 1px solid rgba(0, 0, 0, 0.06); + background: rgba(255, 255, 255, 0.55); + text-decoration: none !important; + color: var(--md-default-fg-color) !important; + letter-spacing: -0.005em; + transition: transform 0.18s ease, border-color 0.15s ease, background 0.15s ease, box-shadow 0.18s ease; + min-width: 0; +} +[data-md-color-scheme="slate"] .ak-hub-cap { + border-color: rgba(255, 255, 255, 0.06); + background: rgba(255, 255, 255, 0.025); +} +.ak-hub-cap > svg { + width: 22px; + height: 22px; + stroke: var(--alt-orange); + flex-shrink: 0; + padding: 4px; + box-sizing: content-box; + background: rgba(240, 112, 48, 0.12); + border-radius: 7px; +} +[data-md-color-scheme="slate"] .ak-hub-cap > svg { + background: rgba(240, 112, 48, 0.18); +} +.ak-hub-cap-text { + display: flex; + flex-direction: column; + gap: 2px; + min-width: 0; + flex: 1; +} +.ak-hub-cap-text strong { + font-size: 0.82rem; + font-weight: 700; + line-height: 1.15; + color: var(--md-default-fg-color); + letter-spacing: -0.012em; +} +.ak-hub-cap-text span { + font-size: 0.72rem; + line-height: 1.3; + color: var(--md-default-fg-color--light); + font-weight: 500; + letter-spacing: -0.003em; +} +.ak-hub-cap:hover { + transform: translateY(-1px); + border-color: var(--alt-orange); + background: rgba(240, 112, 48, 0.10); + box-shadow: 0 10px 22px -12px rgba(240, 112, 48, 0.45); +} +[data-md-color-scheme="slate"] .ak-hub-cap:hover { + background: rgba(240, 112, 48, 0.14); +} +.ak-hub-cap:hover > svg { + background: var(--alt-orange); + stroke: #FFFFFF; +} +.ak-hub-cap:hover .ak-hub-cap-text strong { color: var(--alt-orange); } + +.ak-hub-tagline { + text-align: center; + font-size: 0.92rem; + color: var(--alt-orange); + margin: 1.3rem 0 0; + font-weight: 600; + letter-spacing: -0.005em; +} + +/* ---- Hub responsive ------------------------------------------------- */ +@media (max-width: 1100px) { + .ak-hub { + grid-template-columns: 1fr; + gap: 1rem; + margin: 0; + } + .ak-hub-link { + height: 36px; + padding-top: 0; + flex-direction: row; + justify-content: center; + align-items: center; + gap: 1.2rem; + } + .ak-hub-line { + width: 100%; + max-width: 200px; + height: 2px; + transform: rotate(90deg); + } + .ak-hub-label { + background: transparent; + color: var(--alt-orange); + position: static; + transform: none; + font-size: 0.62rem; + } + .ak-hub-line::after { + right: -1px; + top: -4px; + } + .ak-hub-eyebrow--end { text-align: left; } +} +@media (max-width: 720px) { + .ak-hub-core-grid { grid-template-columns: repeat(2, 1fr); } + .ak-hub-core { padding: 1.2rem 1.1rem; } + .ak-hub-core-title { font-size: 1.15rem; } +} + +/* ---- Horizontal swimlane flow diagram (legacy, kept for safety) ---- */ +.ak-flow { + position: relative; + overflow-x: auto; + padding: 0.2rem 0 0.6rem; + margin: 0 calc(-1 * var(--alt-flow-bleed, 4vw)); + -webkit-overflow-scrolling: touch; +} +@media (min-width: 1100px) { + :root { --alt-flow-bleed: 5vw; } +} +@media (min-width: 1400px) { + :root { --alt-flow-bleed: 7vw; } +} +.ak-flow::-webkit-scrollbar { height: 6px; } +.ak-flow::-webkit-scrollbar-thumb { background: var(--alt-border-light-strong); border-radius: 3px; } +[data-md-color-scheme="slate"] .ak-flow::-webkit-scrollbar-thumb { background: var(--alt-border-dark-strong); } + +.ak-flow-track { + display: grid; + grid-template-columns: minmax(140px, 1fr) 104px minmax(160px, 1.05fr) 104px minmax(180px, 1.18fr) 104px minmax(160px, 1.05fr) 104px minmax(140px, 1fr); + gap: 0; + align-items: stretch; + min-width: 1180px; +} +.ak-flow-lane { + display: flex; + flex-direction: column; + gap: 0.45rem; + min-width: 0; +} +.ak-flow-stage { + font-size: 0.58rem; + font-weight: 700; + letter-spacing: 0.2em; + text-transform: uppercase; + color: var(--md-default-fg-color--lighter); + padding: 0 0.1rem 0.3rem; +} +.ak-flow-stage--brand { + color: var(--alt-orange); +} +.ak-flow-card { + display: flex; + flex-direction: column; + gap: 0.5rem; + flex: 1; + padding: 0.8rem 0.85rem; + border-radius: 10px; + border: 1px solid var(--alt-border-light); + background: var(--md-default-bg-color); + transition: transform 0.18s cubic-bezier(0.16, 1, 0.3, 1), + border-color 0.15s ease, + box-shadow 0.18s ease; +} +[data-md-color-scheme="slate"] .ak-flow-card { + border-color: var(--alt-border-dark); + background: var(--alt-panel); +} +.ak-flow-card:hover { + transform: translateY(-2px); + border-color: var(--alt-orange); + box-shadow: 0 12px 28px -18px rgba(240, 112, 48, 0.45); +} +.ak-flow-lane--highlight .ak-flow-card { + border-color: var(--alt-orange); + border-width: 1.5px; + background: + linear-gradient(180deg, rgba(240, 112, 48, 0.10), rgba(240, 112, 48, 0.03) 60%, transparent), + var(--md-default-bg-color); + box-shadow: 0 14px 36px -22px rgba(240, 112, 48, 0.55); +} +[data-md-color-scheme="slate"] .ak-flow-lane--highlight .ak-flow-card { + background: + linear-gradient(180deg, rgba(240, 112, 48, 0.15), rgba(240, 112, 48, 0.04) 70%, transparent), + var(--alt-panel); +} +.ak-flow-head { + display: flex; + align-items: center; + gap: 0.5rem; + font-size: 0.82rem; + font-weight: 700; + letter-spacing: -0.005em; + color: var(--md-default-fg-color); + line-height: 1.2; +} +.ak-flow-head strong { + white-space: nowrap; +} +.ak-flow-ico { + width: 26px; + height: 26px; + display: inline-flex; + align-items: center; + justify-content: center; + border-radius: 6px; + background: var(--alt-orange-tint); + flex-shrink: 0; +} +.ak-flow-ico svg { + width: 14px; + height: 14px; + stroke: var(--alt-orange); +} +.ak-flow-lane--highlight .ak-flow-ico { + background: var(--alt-orange); +} +.ak-flow-lane--highlight .ak-flow-ico svg { stroke: #FFFFFF; } +.ak-flow-desc { + font-size: 0.74rem; + color: var(--md-default-fg-color--light); + margin: 0; + line-height: 1.45; +} +.ak-flow-chips { + display: flex; + flex-wrap: wrap; + gap: 0.3rem; +} +.ak-flow-chip { + display: inline-flex; + align-items: center; + padding: 0.18rem 0.45rem; + border-radius: 999px; + border: 1px solid var(--alt-border-light); + background: transparent; + font-size: 0.68rem; + font-weight: 600; + letter-spacing: -0.003em; + color: var(--md-default-fg-color); + text-decoration: none !important; + transition: border-color 0.12s ease, color 0.12s ease, background 0.12s ease; + white-space: nowrap; + font-family: var(--alt-font-ui); +} +[data-md-color-scheme="slate"] .ak-flow-chip { + border-color: var(--alt-border-dark-strong); +} +a.ak-flow-chip:hover { + border-color: var(--alt-orange); + color: var(--alt-orange) !important; + background: var(--alt-orange-tint); +} +.ak-flow-lane--highlight .ak-flow-chip { + border-color: rgba(240, 112, 48, 0.45); + color: var(--alt-orange); +} +.ak-flow-lane--highlight a.ak-flow-chip:hover { + background: var(--alt-orange); + color: #FFFFFF !important; + border-color: var(--alt-orange); +} + +.ak-flow-arrow { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding-top: 1.1rem; + color: var(--alt-orange); + opacity: 0.95; + gap: 0.35rem; + min-width: 0; +} +.ak-flow-arrow svg { + width: 40px; + height: 12px; + flex-shrink: 0; +} +.ak-flow-arrow-label { + font-size: 0.6rem; + font-weight: 700; + letter-spacing: 0.16em; + text-transform: uppercase; + color: var(--alt-orange); + white-space: nowrap; + opacity: 0.85; + text-align: center; +} +.ak-flow-tagline { + text-align: center; + font-size: 0.84rem; + color: var(--alt-orange); + margin: 0.9rem 0 0; + font-weight: 600; + letter-spacing: -0.005em; +} + +@media (max-width: 1080px) { + .ak-flow-track { min-width: 880px; } +} +@media (max-width: 720px) { + .ak-flow { overflow-x: auto; padding-bottom: 1rem; } + .ak-flow-track { + grid-template-columns: 1fr; + gap: 0.4rem; + min-width: 0; + } + .ak-flow-arrow { + padding: 0.15rem 0; + transform: rotate(90deg); + height: 22px; + } + .ak-flow-arrow svg { width: 28px; } + .ak-flow-arrow-label { + transform: rotate(-90deg); + position: relative; + top: -10px; + } + .ak-flow-stage { padding-bottom: 0.25rem; } +} + +/* ---- Proof strip: dark band with stats + customer logos ----------- */ +.ak-proof { + background: #0B0D12; + color: #E6E8EE; + margin: 0; + padding: 2.6rem 0; + border-radius: 14px; + position: relative; + overflow: hidden; + margin-top: 2rem; +} +.ak-proof::before { + content: ""; + position: absolute; + inset: 0; + background: + radial-gradient(70% 90% at 80% 10%, rgba(240, 112, 48, 0.14), transparent 60%), + radial-gradient(60% 80% at 20% 90%, rgba(240, 112, 48, 0.06), transparent 65%); + pointer-events: none; +} +.ak-proof-inner { + position: relative; + z-index: 1; + display: flex; + justify-content: center; + align-items: center; + padding: 0 2rem; +} +.ak-stats { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 0.4rem 4rem; + max-width: 800px; + width: 100%; + text-align: center; +} +.ak-stat { + display: flex; + flex-direction: column; + gap: 0.35rem; + padding: 0.4rem 0; +} +.ak-stat-value { + font-size: 1.85rem; + font-weight: 800; + letter-spacing: -0.03em; + color: #FFFFFF; + line-height: 1; + font-feature-settings: "tnum"; +} +.ak-stat-accent { color: var(--alt-orange); } +.ak-stat-label { + font-size: 0.66rem; + color: rgba(230, 232, 238, 0.62); + text-transform: uppercase; + letter-spacing: 0.14em; + font-weight: 600; +} +.ak-proof-divider { + width: 1px; + height: 80%; + background: linear-gradient(180deg, transparent, rgba(255, 255, 255, 0.12), transparent); + justify-self: center; +} +.ak-proof-logos { + display: flex; + flex-direction: column; + gap: 0.9rem; +} +.ak-proof-label { + font-size: 0.62rem; + font-weight: 700; + letter-spacing: 0.18em; + text-transform: uppercase; + color: rgba(230, 232, 238, 0.55); +} +.ak-logo-strip { + display: flex; + align-items: center; + flex-wrap: wrap; + gap: 1.6rem 2rem; +} +.ak-logo-strip span { + font-weight: 600; + font-size: 0.95rem; + color: rgba(230, 232, 238, 0.85); + letter-spacing: -0.015em; + position: relative; + transition: color 0.15s ease, transform 0.18s ease; +} +.ak-logo-strip span:hover { + color: #FFFFFF; + transform: translateY(-1px); +} +.ak-logo-img { + height: 28px !important; + width: auto !important; + max-width: 160px !important; + max-height: 28px !important; + display: inline-block !important; + filter: brightness(0) invert(1); + opacity: 0.75; + transition: opacity 0.15s ease, transform 0.18s ease; + flex-shrink: 0; +} +.ak-logo-img:hover { + opacity: 1; + transform: translateY(-1px); +} +.ak-hero-pillars { + display: flex; + gap: 0.6rem; + margin-bottom: 1.5rem; +} +.ak-pillar { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 0.45rem; + flex: 1; + min-width: 0; + padding: 0.9rem 0.6rem; + border-radius: 8px; + border: 1px solid rgba(255, 107, 28, 0.35); + background: rgba(255, 107, 28, 0.05); + font-size: 0.62rem; + font-weight: 700; + color: rgba(255, 255, 255, 0.8); + letter-spacing: 0.07em; + text-transform: uppercase; + text-align: center; + line-height: 1.2; +} +.ak-pillar svg { + width: 22px; + height: 22px; + color: rgba(255, 107, 28, 0.9); + flex-shrink: 0; +} + +@media (max-width: 900px) { + .ak-proof-inner { padding: 0 1.4rem; } + .ak-stats { grid-template-columns: repeat(2, 1fr); gap: 1.2rem 2rem; } + .ak-stat-value { font-size: 1.6rem; } +} +@media (max-width: 480px) { + .ak-stats { grid-template-columns: repeat(2, 1fr); gap: 1rem; } +} + +/* ============================================================ + Homepage v4 — numbered starts list + horizontal need rows + ============================================================ */ + +/* ---- Horizontal need rows ------------------------------------------ */ +.ak-needs-rows { + display: grid; + grid-template-columns: repeat(2, 1fr); + border: 1px solid var(--alt-border-light); + border-radius: 10px; + overflow: hidden; +} +[data-md-color-scheme="slate"] .ak-needs-rows { + border-color: var(--alt-border-dark); +} + +.ak-need-row { + display: flex; + align-items: center; + gap: 1rem; + padding: 1.1rem 1.2rem; + text-decoration: none !important; + color: var(--md-default-fg-color) !important; + border-bottom: 1px solid var(--alt-border-light); + border-right: 1px solid var(--alt-border-light); + transition: background 0.15s ease; +} +[data-md-color-scheme="slate"] .ak-need-row { + border-bottom-color: var(--alt-border-dark); + border-right-color: var(--alt-border-dark); +} +.ak-need-row:nth-child(2n) { border-right: 0; } +.ak-need-row:nth-last-child(-n+2) { border-bottom: 0; } + +.ak-need-row:hover { + background: rgba(0, 204, 170, 0.05); +} +[data-md-color-scheme="slate"] .ak-need-row:hover { + background: rgba(0, 204, 170, 0.06); +} + +.ak-need-row-ico { + width: 40px; + height: 40px; + border-radius: 9px; + background: rgba(0, 204, 170, 0.08); + border: 1px solid rgba(0, 204, 170, 0.18); + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + transition: background 0.15s ease, border-color 0.15s ease; +} +.ak-need-row:hover .ak-need-row-ico { + background: rgba(0, 204, 170, 0.15); + border-color: var(--alt-teal); +} +.ak-need-row-ico svg { + width: 20px; + height: 20px; + stroke: var(--alt-teal); + fill: none; +} + +.ak-need-row-body { + display: flex; + flex-direction: column; + gap: 0.16rem; + flex: 1; + min-width: 0; +} +.ak-need-row-body strong { + font-size: 0.9rem; + font-weight: 700; + letter-spacing: -0.012em; + line-height: 1.25; +} +.ak-need-row-body span { + font-size: 0.73rem; + color: var(--md-default-fg-color--light); + line-height: 1.4; +} + +.ak-need-row-arrow { + width: 17px; + height: 17px; + flex-shrink: 0; + stroke: var(--md-default-fg-color--lighter); + fill: none; + transition: transform 0.2s cubic-bezier(0.16, 1, 0.3, 1), stroke 0.15s ease; +} +.ak-need-row:hover .ak-need-row-arrow { + transform: translateX(3px); + stroke: var(--alt-teal); +} + +@media (max-width: 720px) { + .ak-needs-rows { grid-template-columns: 1fr; } + .ak-need-row { border-right: 0 !important; } + .ak-need-row:nth-last-child(-n+2) { + border-bottom: 1px solid var(--alt-border-light) !important; + } + [data-md-color-scheme="slate"] .ak-need-row:nth-last-child(-n+2) { + border-bottom-color: var(--alt-border-dark) !important; + } + .ak-need-row:last-child { border-bottom: 0 !important; } +} + +/* ---- Orange variant for need rows (used in Quickstart section) ------ */ +.ak-need-row--orange:hover { + background: var(--alt-orange-tint); +} +[data-md-color-scheme="slate"] .ak-need-row--orange:hover { + background: rgba(240, 112, 48, 0.07); +} +.ak-need-row-ico--orange { + background: rgba(240, 112, 48, 0.08); + border: 1px solid rgba(240, 112, 48, 0.18); +} +.ak-need-row--orange:hover .ak-need-row-ico--orange { + background: rgba(240, 112, 48, 0.15); + border-color: var(--alt-orange); +} +.ak-need-row-ico--orange svg { + stroke: var(--alt-orange); +} +.ak-need-row--orange:hover .ak-need-row-arrow { + stroke: var(--alt-orange); +} + +/* ---- Proof strip: clickable stat ----------------------------------- */ +a.ak-stat { + text-decoration: none; + color: inherit; + transition: opacity 0.15s ease; +} +a.ak-stat:hover { + opacity: 0.8; +} + +/* ---- Marketplace — two distinct channels, sharp + sleek ------------- */ +.ak-mp { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 1.25rem; + margin: 2.5rem 0; +} +.ak-mp-channel { + display: flex; + flex-direction: column; + border: 1px solid var(--alt-border-light-strong); + background: var(--md-default-bg-color); + /* sharp corners — no border-radius */ +} +[data-md-color-scheme="slate"] .ak-mp-channel { + border-color: var(--alt-border-dark-strong); + background: var(--alt-panel); +} +.ak-mp-head { + display: flex; + align-items: center; + gap: 0.85rem; + padding: 1rem 1.25rem; + border-bottom: 1px solid var(--alt-border-light-strong); +} +[data-md-color-scheme="slate"] .ak-mp-head { + border-bottom-color: var(--alt-border-dark-strong); +} +.ak-mp-logo { + width: 32px; + height: 32px; + flex-shrink: 0; + display: flex; + align-items: center; + justify-content: center; +} +.ak-mp-logo svg { + width: 100%; + height: 100%; + display: block; +} +.ak-mp-head-text { + display: flex; + flex-direction: column; + gap: 0.1rem; + line-height: 1.2; + min-width: 0; +} +.ak-mp-head-text strong { + font-size: 0.98rem; + font-weight: 700; + letter-spacing: -0.01em; + color: var(--md-default-fg-color); +} +.ak-mp-head-text span { + font-size: 0.7rem; + font-weight: 500; + letter-spacing: 0.01em; + color: var(--md-default-fg-color--light); +} +.ak-mp-cards { + display: flex; + flex-direction: column; + flex: 1; +} +.ak-mp-card { + position: relative; + display: flex; + flex-direction: column; + gap: 0.25rem; + padding: 1rem 1.25rem; + border-bottom: 1px solid var(--alt-border-light); + text-decoration: none !important; + color: var(--md-default-fg-color) !important; + transition: background 0.12s ease, padding-left 0.12s ease; +} +[data-md-color-scheme="slate"] .ak-mp-card { + border-bottom-color: var(--alt-border-dark); +} +.ak-mp-card:last-child { + border-bottom: 0; +} +.ak-mp-card::before { + content: ""; + position: absolute; + left: 0; + top: 0; + bottom: 0; + width: 3px; + background: var(--alt-orange); + transform: scaleY(0); + transform-origin: top center; + transition: transform 0.15s ease; +} +.ak-mp-card:hover { + background: var(--alt-orange-tint); + padding-left: 1.5rem; +} +.ak-mp-card:hover::before { + transform: scaleY(1); +} +.ak-mp-card-name { + font-size: 0.95rem; + font-weight: 700; + letter-spacing: -0.01em; +} +.ak-mp-card-desc { + font-size: 0.78rem; + color: var(--md-default-fg-color--light); + line-height: 1.45; +} +.ak-mp-card-cta { + margin-top: 0.4rem; + display: inline-flex; + align-items: center; + gap: 0.3rem; + font-size: 0.76rem; + font-weight: 600; + color: var(--alt-orange); +} +.ak-mp-card-cta svg { + width: 13px; + height: 13px; + transition: transform 0.15s ease; +} +.ak-mp-card:hover .ak-mp-card-cta svg { + transform: translateX(3px); +} +.ak-mp-channel--wide { + grid-column: 1 / -1; +} +@media (max-width: 760px) { + .ak-mp { grid-template-columns: 1fr; } +} + +/* ============================================================ + Homepage v5 — stacked hero + platform areas section + ============================================================ */ + +/* ---- Stacked hero: centered title, full-width image below ----------- */ +.ak-hero--stacked { + text-align: center; + padding: 2rem 0 0; + margin: -1rem 0 0; +} +.ak-hero--stacked .ak-hero-title { + font-size: 2.4rem; + margin: 0 auto 1.6rem; + max-width: 800px; + text-wrap: balance; +} +.ak-hero-img-wrap { + width: 100%; + max-width: 1140px; + margin: 0 auto; +} +.ak-hero-img-wrap img { + width: 100%; + height: auto; + display: block; + border-radius: 10px 10px 0 0; +} + + +@media (max-width: 720px) { + .ak-hero--stacked .ak-hero-title { font-size: 1.8rem; } + .ak-hero-img-wrap { border-radius: 0; } + .ak-hero-img-wrap img { border-radius: 0; } +} +@media (max-width: 480px) { + .ak-hero--stacked .ak-hero-title { font-size: 1.55rem; } +} + +/* ---- Docs hero: search-forward, compact supporting image ---------- */ +.ak-home .ak-hero--docs { + padding-top: 0.2rem; + padding-bottom: 0.1rem; +} +.ak-hero-docs-title { + font-size: 1.75rem; + font-weight: 800; + letter-spacing: -0.03em; + line-height: 1.1; + margin: 0 0 0.5rem; + color: var(--md-default-fg-color); +} +.ak-hero-docs-lead { + font-size: 1rem; + line-height: 1.55; + color: var(--md-default-fg-color--light); + max-width: 600px; + margin: 0 auto 1.6rem; + text-wrap: balance; +} +.ak-home .ak-hero--docs .ak-search-hero--lead { + max-width: 580px; + margin: 0 auto 1.1rem; + padding: 0.95rem 1.2rem; + text-align: left; +} +.ak-search-hero--lead .ak-search-icon { + width: 20px; + height: 20px; + opacity: 0.6; +} +.ak-search-hero--lead .ak-search-text { + font-size: 0.98rem; +} +.ak-hero-img-wrap--compact { + max-width: 880px; +} +.ak-hero-img-wrap--compact img { + border-radius: 10px; +} +@media (max-width: 720px) { + .ak-hero-docs-title { font-size: 1.45rem; } + .ak-hero-img-wrap--compact img { border-radius: 8px; } +} + + +/* ---- Next-step CTA at the foot of each page ------------------------- + Reuses .ak-eyebrow / .ak-btn / .ak-cta-row so it reads as part of the + existing system rather than a bolted-on ad. Deliberately quiet: a hairline + rule and a tinted panel, no heavy border or shadow — it sits after the + content and should not compete with it. */ +.ak-next-step { + margin: 3rem 0 0; + padding: 1.5rem 1.5rem 0.4rem; + border-top: 1px solid var(--md-default-fg-color--lightest); + border-radius: 8px; + background: var(--md-default-bg-color); +} + +.ak-next-step__title { + margin: 0.6rem 0 0.3rem; + font-size: 1.05rem; + font-weight: 700; + letter-spacing: -0.01em; + color: var(--md-default-fg-color); +} + +.ak-next-step__body { + margin: 0 0 1.1rem; + font-size: 0.86rem; + line-height: 1.6; + color: var(--md-default-fg-color--light); +} + +.ak-next-step .ak-cta-row { + margin-bottom: 1.2rem; +} + +[data-md-color-scheme="default"] .ak-next-step { + background: #FAFAFA; +} + +[data-md-color-scheme="slate"] .ak-next-step { + background: var(--alt-panel); +} + +/* Material's mobile breakpoint — tighten the padding only. */ +@media screen and (max-width: 44.9375em) { + .ak-next-step { + padding: 1.2rem 1rem 0.3rem; + } +} + +/* Let the buttons fill the row on phones, so a pair that wraps stacks to equal + full-width blocks instead of a ragged two-line row. The longest pair + ("Install the extension" + "See pricing") needs ~320px, which already wraps + at a 390px viewport. + Deliberately NOT tied to the 719px breakpoint above — at that width the same + rule stretched the two buttons to 336px and 300px on a small tablet, which + looked broken beside the identical buttons at 720px. 30em is where the pair + stops needing the help. */ +@media screen and (max-width: 30em) { + .ak-next-step .ak-cta-row .ak-btn { + flex: 1 1 auto; + justify-content: center; + } +} diff --git a/docs/docs/assets/stylesheets/neoteroi-cards.css b/docs/docs/assets/stylesheets/neoteroi-cards.css new file mode 100644 index 0000000000..a07078ebd9 --- /dev/null +++ b/docs/docs/assets/stylesheets/neoteroi-cards.css @@ -0,0 +1,108 @@ +.nt-cards.nt-grid { + display: grid; + grid-auto-columns: 1fr; + gap: 0.5rem; + max-width: 100vw; + overflow-x: auto; + padding: 1px; +} +.nt-cards.nt-grid.cols-1 { + grid-template-columns: repeat(1, 1fr); +} +.nt-cards.nt-grid.cols-2 { + grid-template-columns: repeat(2, 1fr); +} +.nt-cards.nt-grid.cols-3 { + grid-template-columns: repeat(3, 1fr); +} +.nt-cards.nt-grid.cols-4 { + grid-template-columns: repeat(4, 1fr); +} +.nt-cards.nt-grid.cols-5 { + grid-template-columns: repeat(5, 1fr); +} +.nt-cards.nt-grid.cols-6 { + grid-template-columns: repeat(6, 1fr); +} + +@media only screen and (max-width: 400px) { + .nt-cards.nt-grid { + grid-template-columns: repeat(1, 1fr) !important; + } +} +.nt-card { + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); +} +.nt-card:hover { + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.24), 0 3px 1px -2px rgba(0, 0, 0, 0.3), 0 1px 5px 0 rgba(0, 0, 0, 0.22); +} + +[data-md-color-scheme=slate] .nt-card { + background-color: #111827; + border: 1px solid rgba(148, 163, 184, 0.1); + border-radius: 10px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3); + transition: all 0.25s ease; +} +[data-md-color-scheme=slate] .nt-card:hover { + border-color: rgba(59, 130, 246, 0.35); + box-shadow: 0 4px 16px rgba(59, 130, 246, 0.12), 0 2px 8px rgba(0, 0, 0, 0.3); + transform: translateY(-2px); +} + +.nt-card > a { + color: var(--md-default-fg-color); +} + +.nt-card > a > div { + cursor: pointer; +} + +.nt-card { + padding: 5px; + margin-bottom: 0.5rem; +} + +.nt-card-title { + font-size: 1rem; + font-weight: bold; + margin: 4px 0 8px 0; + line-height: 22px; +} + +.nt-card-content { + padding: 0.4rem 0.8rem 0.8rem 0.8rem; +} + +.nt-card-text { + font-size: 14px; + padding: 0; + margin: 0; +} + +.nt-card .nt-card-image { + text-align: center; + border-radius: 2px; + background-position: center center; + background-size: cover; + background-repeat: no-repeat; + min-height: 120px; +} + +.nt-card .nt-card-image.tags img { + margin-top: 12px; +} + +.nt-card .nt-card-image img { + height: 105px; + margin-top: 5px; +} + +.nt-card a:hover, +.nt-card a:focus { + color: var(--md-accent-fg-color); +} + +.nt-card h2 { + margin: 0; +} diff --git a/docs/docs/configure/acp.md b/docs/docs/configure/acp.md index 653c1bd9c6..ddb3184d51 100644 --- a/docs/docs/configure/acp.md +++ b/docs/docs/configure/acp.md @@ -1,3 +1,8 @@ +--- +title: ACP (Agent Communication Protocol) Support +description: "Use Altimate Code with the Agent Communication Protocol (ACP) for interoperability with other AI agents and editor integrations." +--- + # ACP Support altimate implements the Agent Communication Protocol (ACP), allowing it to act as a backend for editors and IDEs. diff --git a/docs/docs/configure/agents.md b/docs/docs/configure/agents.md index 2452f85216..dc813bd3b8 100644 --- a/docs/docs/configure/agents.md +++ b/docs/docs/configure/agents.md @@ -1,3 +1,8 @@ +--- +title: Agent Modes — Builder, Analyst, Plan +description: "Altimate Code ships three AI agent personas — Builder, Analyst, and Plan — each with different tool access levels and use cases." +--- + # Agents Agents define different AI personas with specific models, prompts, permissions, and capabilities. @@ -95,7 +100,7 @@ Create agents as markdown files in `.altimate-code/agents/`: --- name: cost-reviewer model: anthropic/claude-sonnet-4-6 -description: Reviews queries for cost efficiency +description: "Reviews queries for cost efficiency" --- You are a Snowflake cost optimization expert. For every query: diff --git a/docs/docs/configure/bedrock-custom-endpoints.md b/docs/docs/configure/bedrock-custom-endpoints.md index 85fffb8925..010efcb3f3 100644 --- a/docs/docs/configure/bedrock-custom-endpoints.md +++ b/docs/docs/configure/bedrock-custom-endpoints.md @@ -1,3 +1,8 @@ +--- +title: Amazon Bedrock Custom Endpoints — Altimate Code +description: "Configure Altimate Code to use a custom Amazon Bedrock endpoint, API gateway, or proxy for your LLM calls." +--- + # Amazon Bedrock Custom Endpoints This guide covers using Altimate Code with a custom Amazon Bedrock endpoint — such as a corporate API gateway, reverse proxy, or VPC endpoint that sits in front of Bedrock. diff --git a/docs/docs/configure/commands.md b/docs/docs/configure/commands.md index d09d6a3e91..91ace2ce4e 100644 --- a/docs/docs/configure/commands.md +++ b/docs/docs/configure/commands.md @@ -1,3 +1,8 @@ +--- +title: Built-in Slash Commands — Altimate Code +description: "Reference for all built-in slash commands in Altimate Code: /init, /discover, /review, /feedback, /configure-claude, and /configure-codex." +--- + # Commands ## Built-in Commands @@ -95,7 +100,7 @@ Create markdown files in `.altimate-code/commands/`: ```markdown --- name: review -description: Review SQL for anti-patterns and best practices +description: "Review SQL for anti-patterns and best practices" --- Review the following SQL file for: diff --git a/docs/docs/configure/config.md b/docs/docs/configure/config.md index 6300fbf939..737d0e03ef 100644 --- a/docs/docs/configure/config.md +++ b/docs/docs/configure/config.md @@ -1,3 +1,8 @@ +--- +title: Config File Reference — Altimate Code +description: "JSON and JSONC configuration file locations, priority order, and all available settings for Altimate Code." +--- + # Configuration altimate uses JSON (or JSONC) configuration files. The config file is named `altimate-code.json` or `altimate-code.jsonc`. diff --git a/docs/docs/configure/context-management.md b/docs/docs/configure/context-management.md index 19cb216ab5..1d5424683d 100644 --- a/docs/docs/configure/context-management.md +++ b/docs/docs/configure/context-management.md @@ -1,3 +1,8 @@ +--- +title: Context Management — Altimate Code +description: "How Altimate Code automatically manages conversation context to stay within model limits using pruning and compacting." +--- + # Context Management altimate automatically manages conversation context so you can work through long sessions without hitting model limits. When a conversation grows large, the CLI summarizes older messages, prunes stale tool outputs, and recovers from provider overflow errors, all without losing the important details of your work. diff --git a/docs/docs/configure/custom-tools.md b/docs/docs/configure/custom-tools.md index 18f121070c..a16983b7cb 100644 --- a/docs/docs/configure/custom-tools.md +++ b/docs/docs/configure/custom-tools.md @@ -1,3 +1,8 @@ +--- +title: Custom Tools (TypeScript Plugins) — Altimate Code +description: "Extend Altimate Code with custom TypeScript plugins. Quick start guide for building and registering your own tools." +--- + # Custom Tools Create custom tools using TypeScript and the altimate plugin system. diff --git a/docs/docs/configure/formatters.md b/docs/docs/configure/formatters.md index d34d07224f..1f805c2375 100644 --- a/docs/docs/configure/formatters.md +++ b/docs/docs/configure/formatters.md @@ -1,3 +1,8 @@ +--- +title: Formatters — Altimate Code +description: "Altimate Code auto-formats files after editing using language-specific formatters. See the full list of supported languages." +--- + # Formatters altimate auto-formats files after editing using language-specific formatters. diff --git a/docs/docs/configure/governance.md b/docs/docs/configure/governance.md index b04a30c44b..e37b54ecd6 100644 --- a/docs/docs/configure/governance.md +++ b/docs/docs/configure/governance.md @@ -1,3 +1,8 @@ +--- +title: Governance & Permissions — Altimate Code +description: "Task-scoped permissions and deterministic tool guards that keep Altimate Code safe in production data environments." +--- + # Governance Most people think of governance as a cost — something you bolt on for compliance. In practice, governance makes agents produce **better results**, not just safer ones. diff --git a/docs/docs/configure/index.md b/docs/docs/configure/index.md index d2df2d3ed8..ff089a421b 100644 --- a/docs/docs/configure/index.md +++ b/docs/docs/configure/index.md @@ -1,3 +1,8 @@ +--- +title: Configure Altimate Code +description: "Configure warehouses, LLM providers, agent modes, and preferences in Altimate Code." +--- + # Configure Set up your warehouses, LLM providers, and preferences. For agents, tools, skills, and commands, see the [Use](../data-engineering/agent-modes.md) section. For rules, permissions, and context management, see [Governance](rules.md). diff --git a/docs/docs/configure/keybinds.md b/docs/docs/configure/keybinds.md index 8628446d47..e16d6170ae 100644 --- a/docs/docs/configure/keybinds.md +++ b/docs/docs/configure/keybinds.md @@ -1,3 +1,8 @@ +--- +title: Keybindings — Altimate Code TUI +description: "85+ customizable keybindings for the Altimate Code terminal UI. Configure the leader key and reassign any shortcut." +--- + # Keybinds altimate supports 85+ customizable keybindings for the TUI. diff --git a/docs/docs/configure/lsp.md b/docs/docs/configure/lsp.md index 73c0631178..ae51aa8fbd 100644 --- a/docs/docs/configure/lsp.md +++ b/docs/docs/configure/lsp.md @@ -1,3 +1,8 @@ +--- +title: LSP Server Integration — Altimate Code +description: "Built-in Language Server Protocol (LSP) support in Altimate Code for TypeScript, Deno, Vue, ESLint, and more." +--- + # LSP Servers altimate integrates with Language Server Protocol (LSP) servers for diagnostics, completions, and code intelligence. diff --git a/docs/docs/configure/mcp-servers.md b/docs/docs/configure/mcp-servers.md index d00badb8cb..c2b860e7b1 100644 --- a/docs/docs/configure/mcp-servers.md +++ b/docs/docs/configure/mcp-servers.md @@ -1,3 +1,7 @@ +--- +title: MCP Servers — Altimate Code +description: "Configure Model Context Protocol (MCP) servers in Altimate Code to connect external tool providers." +--- # MCP Servers altimate supports the Model Context Protocol (MCP) for connecting to external tool servers. diff --git a/docs/docs/configure/models.md b/docs/docs/configure/models.md index 726832ab5b..efd8ef0ae2 100644 --- a/docs/docs/configure/models.md +++ b/docs/docs/configure/models.md @@ -1,3 +1,8 @@ +--- +title: LLM Model Configuration — Altimate Code +description: "Configure which LLM models Altimate Code uses for primary and small tasks across all supported providers." +--- + # Models altimate supports models from all configured providers. Use the `model` and `small_model` fields to set defaults. diff --git a/docs/docs/configure/permissions.md b/docs/docs/configure/permissions.md index 3b4e7e7557..f381029b8d 100644 --- a/docs/docs/configure/permissions.md +++ b/docs/docs/configure/permissions.md @@ -1,3 +1,8 @@ +--- +title: Permissions — Altimate Code +description: "Set allow, ask, or deny permissions for Altimate Code tool actions globally or per-project." +--- + # Permissions Permissions control which tools agents can use and what actions they can perform. diff --git a/docs/docs/configure/providers.md b/docs/docs/configure/providers.md index 4814162423..d07992a929 100644 --- a/docs/docs/configure/providers.md +++ b/docs/docs/configure/providers.md @@ -1,3 +1,8 @@ +--- +title: LLM Providers — Altimate Code +description: "Altimate Code supports 35+ LLM providers. Configure your provider, API key, and base URL in altimate-code.json." +--- + # Providers altimate supports 35+ LLM providers. Configure them in the `provider` section of your config file. diff --git a/docs/docs/configure/rules.md b/docs/docs/configure/rules.md index f2b5e6751e..5c0633accb 100644 --- a/docs/docs/configure/rules.md +++ b/docs/docs/configure/rules.md @@ -1,3 +1,8 @@ +--- +title: Rules (AGENTS.md / CLAUDE.md) — Altimate Code +description: "Provide persistent behavior instructions to Altimate Code agents via AGENTS.md or CLAUDE.md rule files." +--- + # Rules Rules are instructions that guide agent behavior. They are loaded automatically from well-known file patterns and merged into the agent's system prompt. diff --git a/docs/docs/configure/skills.md b/docs/docs/configure/skills.md index ab850a6900..2fc7b45b87 100644 --- a/docs/docs/configure/skills.md +++ b/docs/docs/configure/skills.md @@ -1,3 +1,8 @@ +--- +title: Agent Skills — Reusable Prompt Templates +description: "Create reusable SKILL.md prompt templates to give Altimate Code agents repeatable, shareable capabilities." +--- + # Agent Skills Skills are reusable prompt templates that extend agent capabilities. @@ -9,7 +14,7 @@ Skills are markdown files named `SKILL.md`: ```markdown --- name: cost-review -description: Review SQL queries for cost optimization +description: "Review SQL queries for cost optimization" --- Analyze the SQL query for cost optimization opportunities: @@ -48,7 +53,7 @@ name: dbt-develop applyPaths: - "dbt_project.yml" # matches if any dbt_project.yml exists in the worktree - "**/dbt_project.yml" -description: ... +description: "..." --- ``` @@ -58,7 +63,7 @@ or, for unconditional loading: --- name: house-rules alwaysApply: true -description: ... +description: "..." --- ``` @@ -240,7 +245,7 @@ A skill references its paired CLI tool through bash code blocks: ```markdown --- name: freshness-check -description: Check data freshness across tables +description: "Check data freshness across tables" --- # Freshness Check @@ -266,7 +271,7 @@ You can also create skills as plain prompt templates: ```markdown --- name: cost-review -description: Review SQL queries for cost optimization +description: "Review SQL queries for cost optimization" --- Analyze the SQL query for cost optimization opportunities. diff --git a/docs/docs/configure/themes.md b/docs/docs/configure/themes.md index de628c9d42..e395f01d0d 100644 --- a/docs/docs/configure/themes.md +++ b/docs/docs/configure/themes.md @@ -1,3 +1,8 @@ +--- +title: Themes — Altimate Code TUI +description: "Choose from 12+ built-in color themes or create a custom theme for the Altimate Code terminal interface." +--- + # Themes altimate includes 12+ built-in themes and supports custom themes. diff --git a/docs/docs/configure/tools.md b/docs/docs/configure/tools.md index c8662ec5e0..2690c1f99c 100644 --- a/docs/docs/configure/tools.md +++ b/docs/docs/configure/tools.md @@ -1,3 +1,7 @@ +--- +title: Built-in Tools Reference — Altimate Code +description: "Reference for Altimate Code's built-in tools: bash, read, edit, write, glob, grep, and list." +--- # Tools altimate includes built-in tools that agents use to interact with your codebase and environment. diff --git a/docs/docs/configure/tools/config.md b/docs/docs/configure/tools/config.md index b3f1062ede..29a542f2f6 100644 --- a/docs/docs/configure/tools/config.md +++ b/docs/docs/configure/tools/config.md @@ -1,3 +1,8 @@ +--- +title: Tool Configuration Reference — Altimate Code +description: "Configuration reference for Altimate Code tools including built-in and custom tool settings." +--- + # Tools altimate includes built-in tools that agents use to interact with your codebase and environment. diff --git a/docs/docs/configure/tools/core-tools.md b/docs/docs/configure/tools/core-tools.md index ef0fc3716b..6a4c30b1f9 100644 --- a/docs/docs/configure/tools/core-tools.md +++ b/docs/docs/configure/tools/core-tools.md @@ -1,3 +1,8 @@ +--- +title: Core SQL Engine Tools — Altimate Code +description: "Reference for 28 Rust-based SQL engine tools in Altimate Code: altimate_core_check, altimate_core_validate, and more." +--- + # Core Tools The `altimate_core_*` tools are powered by a Rust-based SQL engine that provides fast, deterministic analysis without LLM calls. These tools handle validation, linting, safety scanning, lineage, formatting, and more. diff --git a/docs/docs/configure/tools/custom.md b/docs/docs/configure/tools/custom.md index 7dca729fac..c7b70ea276 100644 --- a/docs/docs/configure/tools/custom.md +++ b/docs/docs/configure/tools/custom.md @@ -1,3 +1,7 @@ +--- +title: Custom Tools Guide — CLI and Plugin Approaches +description: "Two ways to add custom tools to Altimate Code: CLI tools (recommended) and TypeScript plugin tools." +--- # Custom Tools There are two ways to extend altimate-code with custom tools: diff --git a/docs/docs/configure/tools/index.md b/docs/docs/configure/tools/index.md index 7c1a387606..ea8b32ded3 100644 --- a/docs/docs/configure/tools/index.md +++ b/docs/docs/configure/tools/index.md @@ -1,3 +1,8 @@ +--- +title: Tools Reference — Altimate Code +description: "Complete reference for 100+ specialized data engineering tools in Altimate Code, organized by category." +--- + # Tools Reference Altimate Code has 100+ specialized tools organized by function. diff --git a/docs/docs/configure/trace.md b/docs/docs/configure/trace.md index d5d735178c..59df84bbea 100644 --- a/docs/docs/configure/trace.md +++ b/docs/docs/configure/trace.md @@ -1,3 +1,8 @@ +--- +title: Session Traces & Recordings — Altimate Code +description: "Altimate Code records session traces with LLM calls, tool usage, token counts, and costs. Stored locally by default." +--- + # Trace Altimate Code captures detailed traces (session recordings) of every session, including LLM generations, tool calls, token usage, cost, and timing, and saves them locally as JSON files. Traces are invaluable for debugging agent behavior, optimizing cost, and understanding how the agent solves problems. diff --git a/docs/docs/configure/warehouses.md b/docs/docs/configure/warehouses.md index 6f7d72e1e4..fc473058ee 100644 --- a/docs/docs/configure/warehouses.md +++ b/docs/docs/configure/warehouses.md @@ -1,3 +1,8 @@ +--- +title: Warehouse Connections — Altimate Code +description: "Connect Altimate Code to 13 warehouse types including Snowflake, BigQuery, Databricks, and DuckDB." +--- + # Warehouses Altimate Code connects to 13 warehouse types. Configure them in `.altimate-code/connections.json` (project-local) or `~/.altimate-code/connections.json` (global). diff --git a/docs/docs/data-engineering/agent-modes.md b/docs/docs/data-engineering/agent-modes.md index 0c6b4da394..8a87c88cc9 100644 --- a/docs/docs/data-engineering/agent-modes.md +++ b/docs/docs/data-engineering/agent-modes.md @@ -1,3 +1,8 @@ +--- +title: "Agent Modes — Builder, Analyst, and Plan" +description: "Altimate Code offers three agent modes: Builder (full tool access), Analyst (read-only), and Plan (planning only)." +--- + # Agent Modes altimate runs in one of three specialized modes. Each mode has different permissions, tool access, and behavioral guardrails. diff --git a/docs/docs/data-engineering/guides/ci-headless.md b/docs/docs/data-engineering/guides/ci-headless.md deleted file mode 100644 index 79a76a18f0..0000000000 --- a/docs/docs/data-engineering/guides/ci-headless.md +++ /dev/null @@ -1,155 +0,0 @@ -# CI & Headless Mode - -Run any altimate prompt non-interactively from scripts, CI pipelines, or scheduled jobs. No TUI. Output is plain text or JSON. - ---- - -## Basic Usage - -```bash -altimate run "your prompt here" -``` - -Key flags: - -| Flag | Description | -|---|---| -| `--output json` | Structured JSON output instead of plain text | -| `--model ` | Override the configured model | -| `--connection ` | Select a specific warehouse connection | -| `--no-color` | Disable ANSI color codes (for CI logs) | - -See `altimate run --help` for the full flag list, or [CLI Reference](../../usage/cli.md). - ---- - -## Environment Variables for CI - -Configure without committing an `altimate-code.json` file: - -```bash -# LLM provider -ALTIMATE_PROVIDER=anthropic -ALTIMATE_ANTHROPIC_API_KEY=your-key-here - -# Or OpenAI -ALTIMATE_PROVIDER=openai -ALTIMATE_OPENAI_API_KEY=your-key-here - -# Warehouse (Snowflake example) -SNOWFLAKE_ACCOUNT=myorg-myaccount -SNOWFLAKE_USER=ci_user -SNOWFLAKE_PASSWORD=${{ secrets.SNOWFLAKE_PASSWORD }} -SNOWFLAKE_DATABASE=analytics -SNOWFLAKE_SCHEMA=public -SNOWFLAKE_WAREHOUSE=compute_wh -``` - ---- - -## Exit Codes - -| Code | Meaning | -|---|---| -| `0` | Success (task completed) | -| `1` | Task completed but result indicates issues (e.g., anti-patterns found) | -| `2` | Configuration error (missing API key, bad connection) | -| `3` | Tool execution error (warehouse unreachable, query failed) | - -Use exit codes to fail CI on actionable findings: - -```bash -altimate run "validate models in models/staging/ for anti-patterns" || exit 1 -``` - ---- - -## Worked Examples - -### Example 1: Nightly Cost Check (GitHub Actions) - -```yaml -# .github/workflows/cost-check.yml -name: Nightly Cost Check - -on: - schedule: - - cron: '0 8 * * 1-5' # 8am UTC, weekdays - -jobs: - cost-check: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - - name: Install altimate - run: npm install -g altimate-code - - - name: Run cost report - env: - ALTIMATE_PROVIDER: anthropic - ALTIMATE_ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} - SNOWFLAKE_ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }} - SNOWFLAKE_USER: ${{ secrets.SNOWFLAKE_CI_USER }} - SNOWFLAKE_PASSWORD: ${{ secrets.SNOWFLAKE_CI_PASSWORD }} - SNOWFLAKE_DATABASE: analytics - SNOWFLAKE_WAREHOUSE: compute_wh - run: | - altimate run "/cost-report" --output json > cost-report.json - cat cost-report.json - - - name: Upload cost report - uses: actions/upload-artifact@v4 - with: - name: cost-report - path: cost-report.json -``` - -### Example 2: Post-Deploy SQL Validation - -Add to your dbt deployment workflow to catch anti-patterns before they reach production: - -```yaml - - name: SQL anti-pattern check - env: - ALTIMATE_PROVIDER: anthropic - ALTIMATE_ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} - run: | - altimate run "validate all SQL files in models/staging/ for anti-patterns and fail if any are found" \ - --no-color \ - --output json -``` - -### Example 3: Automated Test Generation (Pre-commit) - -```bash -#!/bin/bash -# .git/hooks/pre-commit -# Generate tests for any staged SQL model files - -STAGED_MODELS=$(git diff --cached --name-only --diff-filter=A | grep "models/.*\.sql") - -if [ -n "$STAGED_MODELS" ]; then - echo "Generating tests for new models..." - altimate run "/generate-tests for: $STAGED_MODELS" --no-color -fi -``` - ---- - -## Traces in Headless Mode - -Tracing works in headless mode. View traces (session recordings) after the run: - -```bash -altimate trace list -altimate trace view -``` - -See [Trace](../../configure/trace.md) for the full trace reference. - ---- - -## Security Recommendation - -Use a **read-only warehouse user** for CI jobs that only need to read data. Reserve write-access credentials for jobs that explicitly need them (e.g., test generation that writes files). See [Security FAQ](../../reference/security-faq.md) and [Permissions](../../configure/permissions.md). diff --git a/docs/docs/data-engineering/guides/clickhouse.md b/docs/docs/data-engineering/guides/clickhouse.md index dd9e80f4ee..f8195c7527 100644 --- a/docs/docs/data-engineering/guides/clickhouse.md +++ b/docs/docs/data-engineering/guides/clickhouse.md @@ -1,3 +1,8 @@ +--- +title: "ClickHouse Guide — Altimate Code" +description: "First-class ClickHouse support in Altimate Code. Add a ClickHouse warehouse and start running SQL analysis in minutes." +--- + # ClickHouse Guide Altimate Code has first-class ClickHouse support — connect to self-hosted clusters, ClickHouse Cloud, or local Docker instances and use the full suite of SQL analysis, schema inspection, and optimization tools. diff --git a/docs/docs/data-engineering/guides/cost-optimization.md b/docs/docs/data-engineering/guides/cost-optimization.md index 654651383b..bce451cd5b 100644 --- a/docs/docs/data-engineering/guides/cost-optimization.md +++ b/docs/docs/data-engineering/guides/cost-optimization.md @@ -1,3 +1,8 @@ +--- +title: "Cost Optimization Guide — Altimate Code" +description: "Find and reduce warehouse costs using Altimate Code's finops_analyze_credits and finops_expensive_queries tools." +--- + # Cost Optimization Guide altimate is your cost advocate. Here's how to use it to cut warehouse spend. diff --git a/docs/docs/data-engineering/guides/data-parity.md b/docs/docs/data-engineering/guides/data-parity.md index 8703753f6f..1f3b056142 100644 --- a/docs/docs/data-engineering/guides/data-parity.md +++ b/docs/docs/data-engineering/guides/data-parity.md @@ -1,3 +1,8 @@ +--- +title: "Data Parity (Table Diff) — Altimate Code" +description: "Validate table equivalence across databases for migrations, ETL refactors, and data quality checks with Altimate Code." +--- + # Data Parity (Table Diff) Validate that two tables — or two query results — are identical across databases, or diagnose exactly how they differ. Use for **migration validation**, **ETL regression**, and **query refactor verification**. diff --git a/docs/docs/data-engineering/guides/index.md b/docs/docs/data-engineering/guides/index.md index a3fc13262a..0f5245b0bf 100644 --- a/docs/docs/data-engineering/guides/index.md +++ b/docs/docs/data-engineering/guides/index.md @@ -1,3 +1,8 @@ +--- +title: "Data Engineering Guides — Altimate Code" +description: "Practical guides for Altimate Code: cost optimization, SQL migration, dbt PR review, ClickHouse, and CI headless mode." +--- + # Guides Practical guides for common data engineering workflows. diff --git a/docs/docs/data-engineering/guides/migration.md b/docs/docs/data-engineering/guides/migration.md index c7b594ccfa..7070d1199b 100644 --- a/docs/docs/data-engineering/guides/migration.md +++ b/docs/docs/data-engineering/guides/migration.md @@ -1,3 +1,8 @@ +--- +title: "SQL Migration Guide — Altimate Code" +description: "Translate SQL across warehouse dialects using Altimate Code's Builder agent and deterministic SQL migration tools." +--- + # Migration Guide Use altimate to translate SQL across warehouse dialects while preserving lineage and correctness. diff --git a/docs/docs/data-engineering/guides/using-with-claude-code.md b/docs/docs/data-engineering/guides/using-with-claude-code.md index 4c584a5bb8..48533ce8b6 100644 --- a/docs/docs/data-engineering/guides/using-with-claude-code.md +++ b/docs/docs/data-engineering/guides/using-with-claude-code.md @@ -1,3 +1,8 @@ +--- +title: "Using Altimate with Claude Code" +description: "Run Altimate's data engineering tools alongside Claude Code via the /altimate command or MCP server integration." +--- + # Using altimate with Claude Code altimate can work alongside Claude Code. While Claude Code handles general coding tasks, altimate provides specialized data engineering capabilities that Claude Code doesn't have. diff --git a/docs/docs/data-engineering/guides/using-with-codex.md b/docs/docs/data-engineering/guides/using-with-codex.md index 493d3987c2..494d46c549 100644 --- a/docs/docs/data-engineering/guides/using-with-codex.md +++ b/docs/docs/data-engineering/guides/using-with-codex.md @@ -1,3 +1,8 @@ +--- +title: "Using Altimate with OpenAI Codex" +description: "Two ways to integrate Altimate with Codex: as an LLM provider or as a Codex skill for data engineering tasks." +--- + # Using altimate with Codex altimate integrates with Codex in two ways: as an **LLM provider** (use your ChatGPT subscription to power altimate) and as a **Codex skill** (invoke altimate from within Codex CLI). diff --git a/docs/docs/data-engineering/tools/dbt-tools.md b/docs/docs/data-engineering/tools/dbt-tools.md index 6e4e580e17..79714e1bb5 100644 --- a/docs/docs/data-engineering/tools/dbt-tools.md +++ b/docs/docs/data-engineering/tools/dbt-tools.md @@ -1,3 +1,8 @@ +--- +title: "dbt Tools — Altimate Code" +description: "Run dbt commands from Altimate Code using the dbt_run tool with full output capture and error reporting." +--- + # dbt Tools ## dbt_run @@ -83,7 +88,7 @@ Unit Test Gen: 4 test(s) for fct_orders === Unit Test Generation Summary === Model: fct_orders -Description: Daily order totals by order ID +Description: "Daily order totals by order ID" Materialization: table Upstream dependencies: 2 Tests generated: 4 diff --git a/docs/docs/data-engineering/tools/finops-tools.md b/docs/docs/data-engineering/tools/finops-tools.md index 4ff651732c..2824e46231 100644 --- a/docs/docs/data-engineering/tools/finops-tools.md +++ b/docs/docs/data-engineering/tools/finops-tools.md @@ -1,3 +1,8 @@ +--- +title: "FinOps Tools — Cost Optimization — Altimate Code" +description: "Monitor warehouse costs, query history, and credits with Altimate Code's FinOps tools including finops_query_history." +--- + # FinOps Tools Cost optimization and warehouse governance. These tools help you find where money is being wasted and fix it. diff --git a/docs/docs/data-engineering/tools/index.md b/docs/docs/data-engineering/tools/index.md index 246768a129..be774c4dcc 100644 --- a/docs/docs/data-engineering/tools/index.md +++ b/docs/docs/data-engineering/tools/index.md @@ -1,3 +1,8 @@ +--- +title: "Data Engineering Tools Reference — Altimate Code" +description: "Reference for 100+ specialized data engineering tools in Altimate Code, organized by SQL, schema, FinOps, lineage, and more." +--- + # Tools Reference altimate has 100+ specialized tools organized by function. diff --git a/docs/docs/data-engineering/tools/lineage-tools.md b/docs/docs/data-engineering/tools/lineage-tools.md index effe274e31..9c2b96f0ef 100644 --- a/docs/docs/data-engineering/tools/lineage-tools.md +++ b/docs/docs/data-engineering/tools/lineage-tools.md @@ -1,3 +1,8 @@ +--- +title: "Lineage Tools — Column-Level Lineage — Altimate Code" +description: "Trace column-level data lineage across your warehouse with Altimate Code's lineage_check tool." +--- + # Lineage Tools ## lineage_check diff --git a/docs/docs/data-engineering/tools/memory-tools.md b/docs/docs/data-engineering/tools/memory-tools.md index 03f837dd6c..bdb4e5d79b 100644 --- a/docs/docs/data-engineering/tools/memory-tools.md +++ b/docs/docs/data-engineering/tools/memory-tools.md @@ -1,3 +1,8 @@ +--- +title: "Memory Tools — Persistent Agent Memory — Altimate Code" +description: "Altimate Code's memory tools provide persistent, cross-session memory stored as Markdown files on disk." +--- + # Altimate Memory Tools Altimate Memory gives your data engineering agent **persistent, cross-session memory**. Instead of re-explaining your warehouse setup, naming conventions, or team preferences every session, the agent remembers what matters and picks up where you left off. diff --git a/docs/docs/data-engineering/tools/schema-tools.md b/docs/docs/data-engineering/tools/schema-tools.md index 78726177aa..e58922797b 100644 --- a/docs/docs/data-engineering/tools/schema-tools.md +++ b/docs/docs/data-engineering/tools/schema-tools.md @@ -1,3 +1,8 @@ +--- +title: "Schema Tools — Altimate Code" +description: "Inspect table schemas, column types, and metadata with Altimate Code's schema_inspect and related tools." +--- + # Schema Tools ## schema_inspect diff --git a/docs/docs/data-engineering/tools/sql-tools.md b/docs/docs/data-engineering/tools/sql-tools.md index f953f2ee15..a36e483427 100644 --- a/docs/docs/data-engineering/tools/sql-tools.md +++ b/docs/docs/data-engineering/tools/sql-tools.md @@ -1,3 +1,8 @@ +--- +title: "SQL Tools — Altimate Code" +description: "Execute SQL against any connected warehouse using Altimate Code's sql_execute tool with full type safety." +--- + # SQL Tools ## sql_execute diff --git a/docs/docs/data-engineering/tools/warehouse-tools.md b/docs/docs/data-engineering/tools/warehouse-tools.md index 27c220710e..9c20660966 100644 --- a/docs/docs/data-engineering/tools/warehouse-tools.md +++ b/docs/docs/data-engineering/tools/warehouse-tools.md @@ -1,3 +1,8 @@ +--- +title: "Warehouse Tools — Altimate Code" +description: "Scan your warehouse environment with Altimate Code's project_scan and warehouse management tools." +--- + # Warehouse Tools ## project_scan diff --git a/docs/docs/data-engineering/training/index.md b/docs/docs/data-engineering/training/index.md index 39050a65f4..788e8cc09c 100644 --- a/docs/docs/data-engineering/training/index.md +++ b/docs/docs/data-engineering/training/index.md @@ -1,3 +1,8 @@ +--- +title: "Agent Training — Corrections That Stick" +description: "Teach Altimate Code agents once and they remember forever. Corrections propagate to your whole team via shared training files." +--- + # Training: Corrections That Stick > **Correct the agent once. It remembers forever. Your team inherits it.** diff --git a/docs/docs/data-engineering/training/team-deployment.md b/docs/docs/data-engineering/training/team-deployment.md index a7ccfcd2f5..10ee6a1aa0 100644 --- a/docs/docs/data-engineering/training/team-deployment.md +++ b/docs/docs/data-engineering/training/team-deployment.md @@ -1,3 +1,8 @@ +--- +title: "Deploying Team Training — Altimate Code" +description: "Create and share team-wide training entries using /teach or /train to standardize agent behavior across your organization." +--- + # Deploying Team Training Get every teammate's AI automatically applying the same SQL conventions, naming standards, and anti-pattern rules. Achieved by committing `.altimate-code/memory/` to git so that teammates inherit your training on `git pull`. diff --git a/docs/docs/data-engineering/validators.md b/docs/docs/data-engineering/validators.md index 43ca985f15..4241989a22 100644 --- a/docs/docs/data-engineering/validators.md +++ b/docs/docs/data-engineering/validators.md @@ -1,3 +1,8 @@ +--- +title: "Validators (Completion Gates) — Altimate Code" +description: "Harness-side validators run after the agent declares done, catching SQL errors, schema drift, and test failures automatically." +--- + # Validators (completion gates) Validators are harness-side checks that run **after** the agent declares done. diff --git a/docs/docs/develop/ecosystem.md b/docs/docs/develop/ecosystem.md index be68eee84a..28acae9454 100644 --- a/docs/docs/develop/ecosystem.md +++ b/docs/docs/develop/ecosystem.md @@ -1,3 +1,8 @@ +--- +title: "Ecosystem & Integrations — Altimate Code" +description: "Official Altimate Code packages and integrations, including the GitHub Actions connector for CI/CD workflows." +--- + # Ecosystem altimate has a growing ecosystem of plugins, tools, and integrations. @@ -14,8 +19,8 @@ altimate has a growing ecosystem of plugins, tools, and integrations. - **GitHub Actions**: Automated PR review and issue triage - **GitLab CI**: Merge request analysis -- **VS Code / Cursor / Windsurf**: [IDE integration](../usage/ide.md) via the Datamates extension -- **[Datamates](https://help.altimate.ai/datamates/)**: AI teammates platform with MCP integrations, Knowledge Hub, Memory, and Guardrails +- **VS Code / Cursor / Windsurf**: [IDE integration](../usage/ide.md) via the Datamates extension (branded **Altimate MCP** in-editor) +- **[Altimate MCP](https://help.altimate.ai/datamates/)**: AI teammates platform with MCP integrations, Knowledge Hub, Memory, and Guardrails - **MCP**: Model Context Protocol servers - **ACP**: Agent Communication Protocol for editors diff --git a/docs/docs/develop/plugins.md b/docs/docs/develop/plugins.md index a4bb14b979..6714e1ccca 100644 --- a/docs/docs/develop/plugins.md +++ b/docs/docs/develop/plugins.md @@ -1,3 +1,8 @@ +--- +title: "Plugins — Custom TypeScript Tools — Altimate Code" +description: "Build custom tools for Altimate Code using the TypeScript plugin system. Scaffold with npm init in seconds." +--- + # Plugins Plugins extend altimate with custom tools, hooks, and behaviors. Use plugins to add domain-specific rules, integrate with internal APIs, log telemetry, enforce governance policies, or customize how the agent interacts with your data stack. diff --git a/docs/docs/develop/sdk.md b/docs/docs/develop/sdk.md index bdd30dfe1c..2390777625 100644 --- a/docs/docs/develop/sdk.md +++ b/docs/docs/develop/sdk.md @@ -1,3 +1,8 @@ +--- +title: "TypeScript SDK — Altimate Code" +description: "The Altimate Code TypeScript SDK gives you programmatic access to all tools and agent capabilities from your own applications." +--- + # SDK The altimate SDK (`@altimateai/altimate-code-sdk`) provides a TypeScript client for programmatic access to altimate functionality. Use it to automate SQL analysis, manage sessions, and integrate altimate into your CI/CD pipelines or internal tools. diff --git a/docs/docs/develop/server.md b/docs/docs/develop/server.md index 5bae917ed6..976263e9b6 100644 --- a/docs/docs/develop/server.md +++ b/docs/docs/develop/server.md @@ -1,3 +1,8 @@ +--- +title: "HTTP Server Mode — Altimate Code" +description: "Run Altimate Code as an HTTP API server for remote access and tool invocation from external applications." +--- + # Server altimate includes an HTTP API server for remote access and integrations. diff --git a/docs/docs/drivers.md b/docs/docs/drivers.md index 36c3d9d9d2..fc9c13530a 100644 --- a/docs/docs/drivers.md +++ b/docs/docs/drivers.md @@ -1,3 +1,8 @@ +--- +title: Database Driver Support — Altimate Code +description: "Altimate Code supports 13 native database connections via TypeScript drivers. See the full compatibility matrix." +--- + # Database Driver Support ## Overview diff --git a/docs/docs/examples/index.md b/docs/docs/examples/index.md index b7fe65841e..be0c7c8b19 100644 --- a/docs/docs/examples/index.md +++ b/docs/docs/examples/index.md @@ -1,3 +1,8 @@ +--- +title: "Showcase & Real-World Examples — Altimate Code" +description: "End-to-end automation examples built with Altimate Code, from dbt peer review to full data product pipelines." +--- + # Showcase Real-world examples showing what altimate can do across data engineering workflows. Each example demonstrates end-to-end automation — from discovery to implementation. diff --git a/docs/docs/getting-started.md b/docs/docs/getting-started.md index f68db2ec84..5a39c6b1cc 100644 --- a/docs/docs/getting-started.md +++ b/docs/docs/getting-started.md @@ -1,3 +1,8 @@ +--- +title: Getting Started with Altimate Code +description: "Overview of Altimate Code — the open-source data engineering harness with 100+ deterministic tools for dbt, SQL, and warehouse workflows." +--- + # Getting Started > **New to altimate?** [Start with the 5-minute quickstart](quickstart.md) to go from install to your first analysis in minutes. diff --git a/docs/docs/getting-started/index.md b/docs/docs/getting-started/index.md index da8c37efb6..2916b563aa 100644 --- a/docs/docs/getting-started/index.md +++ b/docs/docs/getting-started/index.md @@ -1,5 +1,6 @@ --- title: Altimate Code +description: "Altimate Code is the open-source data engineering harness with 100+ deterministic tools for SQL, dbt, and warehouse automation." hide: - toc --- @@ -21,8 +22,8 @@ hide:

-[Get Started](quickstart.md){ .md-button .md-button--primary } -[See Examples](../examples/index.md){ .md-button } +[Get Started](/getting-started/quickstart/){ .md-button .md-button--primary } +[See Examples](/examples/){ .md-button } [View on GitHub :material-github:](https://github.com/AltimateAI/altimate-code){ .md-button }

@@ -40,43 +41,103 @@ npm install -g altimate-code ---

Why Altimate Code?

-

Every major data platform is building AI agents — but they're all locked to one ecosystem. Your data stack isn't.

+

Every major data platform is building AI agents, but they're all locked to one ecosystem. Your data stack isn't. Altimate Code connects to your entire stack and lets you bring any LLM. No vendor lock-in, no platform tax.

-Your transformation logic is in dbt. Your orchestration is in Airflow or Dagster. Your warehouses span Snowflake and BigQuery (and maybe that Redshift cluster nobody wants to talk about). Your governance requirements cross every platform boundary. +
-Altimate Code goes the other direction. It connects to your **entire** stack and lets you bring **any LLM** you want. No vendor lock-in. No platform tax. +
+
+
+ +
+ +### [Bring Your Own LLM](/configure/providers/) + +Works with Anthropic, OpenAI, Google, AWS Bedrock, Azure, Ollama, and 10+ more providers. Swap models without swapping your harness. No vendor lock-in. + +
+
+ +
+
+
+ +
-
+### [Cross-Platform](/usage/tui/) -- :material-open-source-initiative:{ .lg .middle } **Open source & auditable** +Claude Code, Cursor, Windsurf, VS Code, and any MCP-compatible client. Terminal, IDE, CI, or web. One install, everywhere. - --- +
+
- Every tool, every agent prompt, every analysis rule is inspectable, extensible, and auditable. For data teams in regulated industries, that's not a nice-to-have — it's a requirement. +
+
+
+ +
-- :material-connection:{ .lg .middle } **Cross-platform, not single-vendor** +### [100+ Deterministic Tools](/configure/tools/) - --- +SQL analysis, column-level lineage, dbt integration, FinOps, warehouse connectivity. Purpose-built for data work, not hallucinated by a model. - Optimize a Snowflake query in the morning. Migrate a SQL Server pipeline to BigQuery in the afternoon. Same agent, same tools. No warehouse subscription required. First-class support for :material-snowflake: Snowflake, :material-google-cloud: BigQuery, :simple-databricks: Databricks, :material-elephant: PostgreSQL, :material-aws: Redshift, :material-database: Trino, :material-database: ClickHouse, :material-duck: DuckDB, :material-database: MySQL, :material-microsoft: SQL Server, and :material-leaf: MongoDB. +
+
-- :material-cloud-outline:{ .lg .middle } **Works with any LLM** +
+
+
+ +
- --- +### [Validation Layer](/data-engineering/validators/) + +SQL, lineage, and equivalence checks run in compiled Rust, not the model. 100% F1 across 1,077 anti-pattern queries, ~2 ms each, zero tokens. + +
+
+ +
+
+
+ +
+ +### [Token Efficiency](/configure/context-management/) + +Context compaction trims the schema payload per task. The model gateway routes each call to the cheapest model that clears your accuracy bar. + +
+
+ +
+
+
+ +
- Model-agnostic — bring your own provider, use your existing subscription, or run locally. Swap models without swapping your harness. Supports :material-cloud: Anthropic, :material-creation: OpenAI, :material-google: Google Gemini, :material-google: Google Vertex AI, :material-aws: AWS Bedrock, :material-microsoft-azure: Azure OpenAI, :material-server: Ollama, :material-router-wireless: OpenRouter, :material-cog: Mistral, :material-lightning-bolt: Groq, :material-head-snowflake-outline: DeepInfra, :material-brain: Cerebras, :material-message-text: Cohere, :material-group: Together AI, :material-compass: Perplexity, :material-alpha-x-circle: xAI, and :material-github: GitHub Copilot. +### [Data Governance](/configure/governance/) -- :material-puzzle:{ .lg .middle } **Customizable to your workflow** +Built-in PII detection, policy enforcement, and compliance validation across your data stack. Three agent modes — Builder, Analyst, Plan — with tool-level permissions. - --- +
+
- Bring your own rules, agents, skills, and tools. Customize the framework to match your company's data conventions, naming standards, and testing patterns. +
-- :material-shield-check:{ .lg .middle } **Governed by design — five agent modes** +
- --- + + +Open source & auditableEvery tool, prompt and rule is inspectable on GitHub. A requirement for regulated industries, not a nice-to-have. + + - Three agent modes — Builder, Analyst, and Plan — each with tool-level permissions you can `allow`, `ask`, or `deny` per agent. Create custom agents for specialized workflows. Layer on project rules via `AGENTS.md`, automatic context compaction for long sessions, and auto-formatting on every edit. Governance enforced by the harness. + + +Customizable to your workflowBring your own rules, agents, skills and tools. Match your company's data conventions and testing patterns. + +
@@ -85,43 +146,85 @@ Altimate Code goes the other direction. It connects to your **entire** stack and

100+ specialized tools

Unlike general-purpose coding agents, every tool is purpose-built for data engineering workflows.

-
+
-- :material-database-search:{ .lg .middle } **SQL Anti-Pattern Detection** +
+
+
+ +
- --- +### [SQL Anti-Pattern Detection](/data-engineering/tools/sql-tools/) - 19 rules with confidence scoring. Catches SELECT *, missing filters, cartesian joins, non-sargable predicates, and more. 100% accuracy across 1,077 benchmark queries. +19 rules with confidence scoring. Catches SELECT *, missing filters, cartesian joins, non-sargable predicates, and more. 100% accuracy across 1,077 benchmark queries. -- :material-graph-outline:{ .lg .middle } **Live Column-Level Lineage** +
+
- --- +
+
+
+ +
- Real-time lineage extraction from SQL. Trace any column back through joins, CTEs, and subqueries to its source. Not a cached graph — a living lineage that updates with every change. +### [Live Column-Level Lineage](/data-engineering/tools/lineage-tools/) -- :material-cash-multiple:{ .lg .middle } **FinOps & Cost Analysis** +Real-time lineage extraction from SQL. Trace any column back through joins, CTEs, and subqueries to its source. Not a cached graph — a living lineage that updates with every change. - --- +
+
- Credit analysis, expensive query detection, warehouse right-sizing, and unused resource cleanup. Specific optimization recommendations with estimated savings. +
+
+
+ +
-- :material-translate:{ .lg .middle } **Cross-Dialect Translation** +### [FinOps & Cost Analysis](/data-engineering/tools/finops-tools/) - --- +Credit analysis, expensive query detection, warehouse right-sizing, and unused resource cleanup. Specific optimization recommendations with estimated savings. - Deterministic engine translating SQL between Snowflake, BigQuery, Databricks, Redshift, PostgreSQL, MySQL, SQL Server, and DuckDB with lineage verification. +
+
-- :material-shield-lock-outline:{ .lg .middle } **PII Detection & Safety** +
+
+
+ +
- --- +### [Cross-Dialect Translation](/data-engineering/tools/sql-tools/) - Automatic column scanning across 15+ PII categories. Safety checks and policy enforcement before every query touches production. +Deterministic engine translating SQL between Snowflake, BigQuery, Databricks, Redshift, PostgreSQL, MySQL, SQL Server, and DuckDB with lineage verification. -- :material-pipe:{ .lg .middle } **dbt Native** +
+
+ +
+
+
+ +
+ +### [PII Detection & Safety](/configure/governance/) - --- +Automatic column scanning across 15+ PII categories. Safety checks and policy enforcement before every query touches production. + +
+
- Manifest parsing, test generation, model scaffolding, incremental model detection, and lineage-aware refactoring. Builds models that fit your project conventions. +
+
+
+ +
+ +### [dbt Native](/data-engineering/tools/dbt-tools/) + +Manifest parsing, test generation, model scaffolding, incremental model detection, and lineage-aware refactoring. Builds models that fit your project conventions. + +
+
@@ -157,7 +260,7 @@ Altimate Code goes the other direction. It connects to your **entire** stack and > Debug this Airflow DAG failure: ``` -

[:octicons-arrow-right-24: Browse more examples](../examples/index.md)

+

[:octicons-arrow-right-24: Browse more examples](/examples/)

--- @@ -177,6 +280,6 @@ Altimate Code goes the other direction. It connects to your **entire** stack and diff --git a/docs/docs/getting-started/quickstart-new.md b/docs/docs/getting-started/quickstart-new.md deleted file mode 100644 index 047c488da7..0000000000 --- a/docs/docs/getting-started/quickstart-new.md +++ /dev/null @@ -1,209 +0,0 @@ ---- -description: "Get value from Altimate Code in 10 minutes. For data engineers who know dbt, Snowflake, and SQL — skip the basics, see what Altimate adds to your workflow." ---- - -# Quickstart - ---- - -## Step 1: Install - -```bash -npm install -g altimate-code -``` - ---- - -## Step 2: Sign in - -```bash -altimate # Launch the TUI -``` - -On a fresh install, a welcome panel appears with a curated 6-provider picker: - -- **Altimate LLM Gateway** *(recommended)* — 10M tokens free, no API keys. Routes to the best model per task across Sonnet, Opus, GPT-5, and more. Sign-in opens a browser tab; complete Google or email signup and you're back in the TUI. If your terminal can't open a browser (SSH / tmux / WSL), the CLI prints the URL — paste it into a browser on your desktop. -- **Anthropic** / **OpenAI** / **Google** — paste an API key or OAuth in. -- **Big Pickle** — free tier, chats work but many data tasks fail; useful for kicking tires. -- **Search all providers…** — full picker if you need Bedrock, Databricks AI Gateway, Cloudflare AI Gateway, Snowflake Cortex, DigitalOcean Inference, etc. - -Or set an environment variable and skip the picker: - -```bash -export ANTHROPIC_API_KEY=sk-ant-... -altimate -``` - -!!! tip "Don't want to manage API keys?" - The [Altimate LLM Gateway](https://help.altimate.ai/datamates/user-guide/components/llm-gateway/) is the top row of the picker — 10M free tokens, and altimate-code auto-selects the right model per task. First-run sign-in uses a loopback OAuth on `127.0.0.1:7317-7325` (falls back if the preferred port is taken). - ---- - -## Step 2.5: First-run scan (optional) - -Immediately after model setup, a **"Scan your environment?"** Yes/No dialog appears. Say **Yes** and altimate-code reads local config files (`.dbt/profiles.yml`, `dbt_project.yml`, `.git/config`) — no credentials are read or sent, and no schema, model contents, or queries leave your computer. An anonymous environment summary (e.g. "dbt project detected, no warehouse configured") may be included in the standard telemetry stream if telemetry is enabled; disable via `OPENCODE_DISABLE_TELEMETRY=1` or the [telemetry docs](../usage/telemetry.md) if you want a strictly-offline scan. The scan then routes you into one of four branches: - -- **Found a warehouse** → offers to add + verify each connection, then index its schema. -- **Found dbt project, no warehouse** → asks which warehouse it runs against and walks you through `warehouse_add`. -- **In a git repo, no dbt** → suggests you `cd` into the right project and re-run. -- **Nothing yet** → offers to try Altimate on a sample dbt project (bundled jaffle-shop DuckDB, no warehouse needed) or another exploratory job. - -Every branch ends on a numbered "**What would you like to do?**" menu in the chat — pick a job by typing the number, or free-text if none fit. **The menu is chat text, not an arrow-key picker; type your answer and press Enter.** - -Say **No** to the scan gate and you land on the same activation menu without the scan detail — good for users who already know what they want to run. - ---- - -## Step 3: Connect Your Warehouse - -### Option A: Auto-detect from dbt profiles - -If you have a `profiles.yml` — either in your home directory's `.dbt/` folder, in your project repo, or pointed to by `DBT_PROFILES_DIR`: - -```bash -/discover -``` - -Altimate searches for `profiles.yml` in this order: `DBT_PROFILES_DIR` env var → project root (next to `dbt_project.yml`) → `/.dbt/profiles.yml`. It reads your dbt profiles and creates warehouse connections automatically. You'll see output like: - -``` -Found dbt project: jaffle_shop (dbt-snowflake) -Found profile: snowflake_prod → Added connection 'snowflake_prod' -Indexing schema... 142 tables, 1,847 columns indexed -``` - -### Option B: Manual configuration - -Add to `.altimate-code/connections.json` in your project root: - -=== "Snowflake" - - ```json - { - "snowflake": { - "type": "snowflake", - "account": "xy12345.us-east-1", - "user": "dbt_user", - "password": "${SNOWFLAKE_PASSWORD}", - "warehouse": "TRANSFORM_WH", - "database": "ANALYTICS", - "schema": "PUBLIC", - "role": "TRANSFORMER" - } - } - ``` - -=== "BigQuery" - - ```json - { - "bigquery": { - "type": "bigquery", - "project": "my-project-id", - "keyfile": "~/.config/gcloud/application_default_credentials.json" - } - } - ``` - -=== "PostgreSQL" - - ```json - { - "postgres": { - "type": "postgres", - "host": "localhost", - "port": 5432, - "database": "analytics", - "user": "postgres", - "password": "${POSTGRES_PASSWORD}" - } - } - ``` - -=== "DuckDB (local)" - - ```json - { - "local": { - "type": "duckdb", - "database": "./data/analytics.duckdb" - } - } - ``` - -Then index the schema for autocomplete and analysis: - -```bash -/schema-index snowflake -``` - ---- - -## Step 4: Your First Workflow — NYC Taxi Cab Analytics - -Try this end-to-end example. Paste this prompt into the TUI: - -``` -Take the New York City taxi cab public dataset, bring up a DuckDB instance, -and build a dashboard showing areas of maximum coverage and lowest coverage. -Set up a complete dbt project with staging, intermediate, and mart layers, -and create an Airflow DAG to orchestrate the pipeline. -``` - -**What altimate does:** - -1. **Downloads the NYC TLC trip data** into a local DuckDB instance -2. **Scaffolds a full dbt project** with proper directory structure: - ``` - nyc_taxi/ - models/ - staging/ - stg_yellow_trips.sql - stg_taxi_zones.sql - intermediate/ - int_trips_by_zone.sql - int_zone_coverage_stats.sql - marts/ - fct_zone_coverage.sql - dim_zones.sql - seeds/ - taxi_zone_lookup.csv - dbt_project.yml - profiles.yml # points to DuckDB - ``` -3. **Generates mart models** that aggregate pickup/dropoff counts per zone, rank zones by trip volume, and classify them as high-coverage or low-coverage -4. **Creates an Airflow DAG** (`dags/nyc_taxi_pipeline.py`) with tasks for data ingestion, `dbt run`, `dbt test`, and dashboard generation -5. **Builds an interactive dashboard** visualizing zone coverage across NYC — top zones, bottom zones, and geographic distribution - -This single prompt exercises warehouse connections, dbt scaffolding, SQL generation, orchestration wiring, and visualization — the full altimate toolkit. - ---- - -## Skill Discovery: What Can I Do? - -Type `/` in the TUI to see all available skills. Here's a quick reference for common tasks: - -| I want to... | Skill | Example | -| ------------------------- | ------------------- | -------------------------------------------------------- | -| Optimize a slow query | `/query-optimize` | `/query-optimize SELECT * FROM big_table` | -| Review SQL before merging | `/sql-review` | `/sql-review models/staging/stg_orders.sql` | -| Check Snowflake costs | `/cost-report` | `/cost-report` (last 30 days) | -| Scan for PII exposure | `/pii-audit` | `/pii-audit` (full schema) or `/pii-audit models/marts/` | -| Debug a dbt error | `/dbt-troubleshoot` | Paste the error message | -| Add tests to a model | `/dbt-test` | `/dbt-test models/staging/stg_orders.sql` | -| Document a model | `/dbt-docs` | `/dbt-docs models/marts/fct_revenue.sql` | -| Analyze downstream impact | `/dbt-analyze` | `/dbt-analyze stg_orders` (before refactoring) | -| Create a new dbt model | `/dbt-develop` | `Create a staging model for the raw_orders source` | -| Translate SQL dialects | `/sql-translate` | `/sql-translate snowflake bigquery SELECT DATEADD(...)` | -| Check migration safety | `/schema-migration` | `/schema-migration migrations/V003__alter_orders.sql` | -| Teach a pattern | `/teach` | `/teach @models/staging/stg_orders.sql` | - -**Pro tip:** You don't need to memorize these. Just describe what you want in plain English — the agent routes to the right skill automatically. - ---- - -## What's Next - -- **[Setup](quickstart.md)** — Warehouses, LLM providers, agent modes, skills, and permissions -- **[Examples](../examples/index.md)** — End-to-end walkthroughs for common data engineering tasks -- **[Interfaces](../usage/tui.md)** — TUI, CLI, CI, IDE, and GitHub/GitLab integrations diff --git a/docs/docs/getting-started/quickstart.md b/docs/docs/getting-started/quickstart.md index 551aaa6dc8..0b1a58c187 100644 --- a/docs/docs/getting-started/quickstart.md +++ b/docs/docs/getting-started/quickstart.md @@ -1,10 +1,9 @@ --- -description: "Install altimate-code, connect your warehouse and LLM, configure agent modes, skills, and permissions." +title: "Quickstart — Altimate Code in 10 Minutes" +description: "Get value from Altimate Code in 10 minutes. For data engineers who know dbt, Snowflake, and SQL — skip the basics, see what Altimate adds to your workflow." --- -# Setup - -> **You need:** npm 8+. An API key for any supported LLM provider. +# Quickstart --- @@ -14,189 +13,69 @@ description: "Install altimate-code, connect your warehouse and LLM, configure a npm install -g altimate-code ``` -> **Zero additional setup.** One command install. - --- -## Step 2: Configure Your LLM +## Step 2: Sign in ```bash altimate # Launch the TUI -/connect # Choose your provider and enter your API key ``` -Or set an environment variable: +On a fresh install, a welcome panel appears with a curated 6-provider picker: -```bash -export ANTHROPIC_API_KEY=your-key-here # Anthropic Claude (recommended) -export OPENAI_API_KEY=your-key-here # OpenAI -``` +- **Altimate LLM Gateway** *(recommended)* — 10M tokens free, no API keys. Routes to the best model per task across Sonnet, Opus, GPT-5, and more. Sign-in opens a browser tab; complete Google or email signup and you're back in the TUI. If your terminal can't open a browser (SSH / tmux / WSL), the CLI prints the URL — paste it into a browser on your desktop. +- **Anthropic** / **OpenAI** / **Google** — paste an API key or OAuth in. +- **Big Pickle** — free tier, chats work but many data tasks fail; useful for kicking tires. +- **Search all providers…** — full picker if you need Bedrock, Databricks AI Gateway, Cloudflare AI Gateway, Snowflake Cortex, DigitalOcean Inference, etc. -Minimal config file option (`altimate-code.json` in your project root): +Or set an environment variable and skip the picker: -```json -{ - "provider": { - "anthropic": { - "apiKey": "{env:ANTHROPIC_API_KEY}" - } - }, - "model": "anthropic/claude-sonnet-4-6" -} +```bash +export ANTHROPIC_API_KEY=sk-ant-... +altimate ``` -### Changing your LLM provider - -Switch providers at any time by updating the `provider` and `model` fields in `altimate-code.json`: - -=== "Anthropic" - - ```json - { - "provider": { - "anthropic": { - "apiKey": "{env:ANTHROPIC_API_KEY}" - } - }, - "model": "anthropic/claude-sonnet-4-6" - } - ``` - -=== "OpenAI" - - ```json - { - "provider": { - "openai": { - "apiKey": "{env:OPENAI_API_KEY}" - } - }, - "model": "openai/gpt-4o" - } - ``` +!!! tip "Don't want to manage API keys?" + The [Altimate LLM Gateway](https://help.altimate.ai/datamates/user-guide/components/llm-gateway/) is the top row of the picker — 10M free tokens, and altimate-code auto-selects the right model per task. First-run sign-in uses a loopback OAuth on `127.0.0.1:7317-7325` (falls back if the preferred port is taken). -=== "Amazon Bedrock" - - ```json - { - "provider": { - "amazon-bedrock": { - "options": { - "region": "us-east-1" - } - } - }, - "model": "amazon-bedrock/anthropic.claude-sonnet-4-6-v1" - } - ``` - - Uses the standard AWS credential chain (`AWS_PROFILE`, `AWS_ACCESS_KEY_ID`/`AWS_SECRET_ACCESS_KEY`, IAM roles, SSO). - For custom API gateways, see [Bedrock Custom Endpoints](../configure/bedrock-custom-endpoints.md). - -=== "Azure OpenAI" - - ```json - { - "provider": { - "azure": { - "apiKey": "{env:AZURE_OPENAI_API_KEY}", - "baseURL": "https://your-resource.openai.azure.com/openai/deployments/your-deployment" - } - }, - "model": "azure/gpt-4o" - } - ``` +--- -=== "Google Gemini" +## Step 2.5: First-run scan (optional) - ```json - { - "provider": { - "google": { - "apiKey": "{env:GOOGLE_API_KEY}" - } - }, - "model": "google/gemini-2.5-pro" - } - ``` +Immediately after model setup, a **"Scan your environment?"** Yes/No dialog appears. Say **Yes** and altimate-code reads local config files (`.dbt/profiles.yml`, `dbt_project.yml`, `.git/config`) — no credentials are read or sent, and no schema, model contents, or queries leave your computer. An anonymous environment summary (e.g. "dbt project detected, no warehouse configured") may be included in the standard telemetry stream if telemetry is enabled; disable via `ALTIMATE_TELEMETRY_DISABLED=true` or the [telemetry docs](../reference/telemetry.md) if you want a strictly-offline scan. The scan then routes you into one of four branches: -=== "Ollama (Local)" +- **Found a warehouse** → offers to add + verify each connection, then index its schema. +- **Found dbt project, no warehouse** → asks which warehouse it runs against and walks you through `warehouse_add`. +- **In a git repo, no dbt** → suggests you `cd` into the right project and re-run. +- **Nothing yet** → offers to try Altimate on a sample dbt project (bundled jaffle-shop DuckDB, no warehouse needed) or another exploratory job. - ```json - { - "provider": { - "ollama": { - "baseURL": "http://localhost:11434" - } - }, - "model": "ollama/llama3.1" - } - ``` +Every branch ends on a numbered "**What would you like to do?**" menu in the chat — pick a job by typing the number, or free-text if none fit. **The menu is chat text, not an arrow-key picker; type your answer and press Enter.** -=== "LM Studio (Local)" - - ```json - { - "provider": { - "lmstudio": { - "name": "LM Studio", - "npm": "@ai-sdk/openai-compatible", - "options": { - "apiKey": "lm-studio", - "baseURL": "http://localhost:1234/v1" - }, - "models": { - "qwen2.5-7b-instruct": { - "name": "Qwen 2.5 7B Instruct", - "tool_call": true, - "limit": { "context": 131072, "output": 8192 } - } - } - } - }, - "model": "lmstudio/qwen2.5-7b-instruct" - } - ``` - -=== "OpenRouter" - - ```json - { - "provider": { - "openrouter": { - "apiKey": "{env:OPENROUTER_API_KEY}" - } - }, - "model": "openrouter/anthropic/claude-sonnet-4-6" - } - ``` - -You can also set a smaller model for lightweight tasks like summarization: - -```json -{ - "model": "anthropic/claude-sonnet-4-6", - "small_model": "anthropic/claude-haiku-4-5-20251001" -} -``` +Say **No** to the scan gate and you land on the same activation menu without the scan detail — good for users who already know what they want to run. --- ## Step 3: Connect Your Warehouse -### Auto-discover with `/discover` +### Option A: Auto-detect from dbt profiles -> Skip this step if you want to work locally. You can always run `/discover` later. +If you have a `profiles.yml` — either in your home directory's `.dbt/` folder, in your project repo, or pointed to by `DBT_PROFILES_DIR`: ```bash -altimate /discover +/discover ``` -Auto-detects your dbt projects, warehouse credentials from `profiles.yml` (checks `DBT_PROFILES_DIR`, then your project directory, then the default `/.dbt/profiles.yml`), running Docker containers, and environment variables (`SNOWFLAKE_ACCOUNT`, `PGHOST`, `DATABASE_URL`, etc.). +Altimate searches for `profiles.yml` in this order: `DBT_PROFILES_DIR` env var → project root (next to `dbt_project.yml`) → `/.dbt/profiles.yml`. It reads your dbt profiles and creates warehouse connections automatically. You'll see output like: -### Manual configuration +``` +Found dbt project: jaffle_shop (dbt-snowflake) +Found profile: snowflake_prod → Added connection 'snowflake_prod' +Indexing schema... 142 tables, 1,847 columns indexed +``` -Add a warehouse connection to `.altimate-code/connections.json`: +### Option B: Manual configuration + +Add to `.altimate-code/connections.json` in your project root: === "Snowflake" @@ -206,7 +85,7 @@ Add a warehouse connection to `.altimate-code/connections.json`: "type": "snowflake", "account": "xy12345.us-east-1", "user": "dbt_user", - "password": "{env:SNOWFLAKE_PASSWORD}", + "password": "${SNOWFLAKE_PASSWORD}", "warehouse": "TRANSFORM_WH", "database": "ANALYTICS", "schema": "PUBLIC", @@ -222,22 +101,7 @@ Add a warehouse connection to `.altimate-code/connections.json`: "bigquery": { "type": "bigquery", "project": "my-project-id", - "credentials_path": "~/.config/gcloud/application_default_credentials.json" - } - } - ``` - -=== "Databricks" - - ```json - { - "databricks": { - "type": "databricks", - "server_hostname": "dbc-abc123.cloud.databricks.com", - "http_path": "/sql/1.0/warehouses/abcdef", - "access_token": "{env:DATABRICKS_TOKEN}", - "catalog": "main", - "schema": "default" + "keyfile": "~/.config/gcloud/application_default_credentials.json" } } ``` @@ -252,202 +116,95 @@ Add a warehouse connection to `.altimate-code/connections.json`: "port": 5432, "database": "analytics", "user": "postgres", - "password": "{env:POSTGRES_PASSWORD}" + "password": "${POSTGRES_PASSWORD}" } } ``` -=== "DuckDB" +=== "DuckDB (local)" ```json { "local": { "type": "duckdb", - "path": "./data/analytics.duckdb" + "database": "./data/analytics.duckdb" } } ``` -=== "Redshift" - - ```json - { - "redshift": { - "type": "redshift", - "host": "my-cluster.abc123.us-east-1.redshift.amazonaws.com", - "port": 5439, - "database": "analytics", - "user": "admin", - "password": "{env:REDSHIFT_PASSWORD}" - } - } - ``` - -All warehouse types support SSH tunneling for bastion hosts. See the [Warehouses reference](../configure/warehouses.md) for full options including key-pair auth, IAM roles, and ADC. - -Verify your connection: - -``` -> warehouse_test snowflake -✓ Connected successfully -``` - ---- - -## Step 4: Choose an Agent Mode - -altimate ships with specialized agent modes, each with its own tool permissions: - -| Mode | Access | Use when you want to... | -|---|---|---| -| **Builder** | Read/Write | Create and modify SQL, dbt models, pipelines. SQL writes prompt for approval. | -| **Analyst** | Read-only | Explore production data safely, run cost analysis. SQL writes denied entirely. | -| **Plan** | Minimal | Plan an approach before switching to builder to execute it | - -Switch modes in the TUI: - -``` -/agent analyst -``` - -Or from the CLI: +Then index the schema for autocomplete and analysis: ```bash -altimate --agent analyst +/schema-index snowflake ``` -The **Analyst** mode is production-safe — it blocks INSERT, UPDATE, DELETE, and DROP statements at the harness level. The **Builder** mode has full read/write access for creating and editing SQL and dbt files. - ---- - -## Step 5: Select Skills - -Skills are reusable prompt templates for common workflows. Type `/` in the TUI to browse all available skills: - -| Skill | Purpose | -|---|---| -| `/query-optimize` | Optimize slow queries with anti-pattern detection | -| `/sql-review` | SQL quality gate with grading | -| `/sql-translate` | Cross-dialect SQL translation | -| `/cost-report` | Snowflake/Databricks cost analysis | -| `/pii-audit` | Scan for PII exposure | -| `/dbt-develop` | Scaffold new dbt models | -| `/dbt-test` | Generate dbt tests | -| `/dbt-docs` | Generate dbt documentation | -| `/dbt-analyze` | Column-level lineage and impact analysis | -| `/dbt-troubleshoot` | Debug dbt errors | -| `/data-viz` | Interactive dashboards and visualizations | -| `/teach` | Teach patterns from example files | -| `/train` | Load standards from documents | - -You don't need to memorize these — describe what you want in plain English and the agent routes to the right skill automatically. - -### Custom skills - -Add your own skills as Markdown files in `.altimate-code/skill/`: - -```markdown ---- -name: cost-review -description: Review SQL queries for cost optimization --- -Analyze the SQL query for cost optimization opportunities. -Focus on: $ARGUMENTS -``` - -Skills are loaded from these paths (highest priority first): +## Step 4: Your First Workflow — NYC Taxi Cab Analytics -1. `.altimate-code/skill/` (project) -2. `~/.altimate-code/skills/` (global) -3. Custom paths via config: +Try this end-to-end example. Paste this prompt into the TUI: -```json -{ - "skills": { - "paths": ["./my-skills", "~/shared-skills"] - } -} ``` - ---- - -## Step 6: Configure Permissions - -Governance is enforced at the harness level, not via prompts. Every tool has a permission level: `allow`, `ask`, or `deny`. - -### Per-agent permissions - -Set tool permissions for each agent mode in `altimate-code.json`: - -```json -{ - "agent": { - "analyst": { - "permission": { - "write": "deny", - "edit": "deny", - "bash": { - "dbt docs generate": "allow", - "*": "deny" - } - } - }, - "builder": { - "permission": { - "write": "allow", - "edit": "allow", - "bash": { - "dbt *": "allow", - "rm -rf *": "deny" - } - } - } - } -} +Take the New York City taxi cab public dataset, bring up a DuckDB instance, +and build a dashboard showing areas of maximum coverage and lowest coverage. +Set up a complete dbt project with staging, intermediate, and mart layers, +and create an Airflow DAG to orchestrate the pipeline. ``` -### Project rules with AGENTS.md - -Define project-wide conventions in an `AGENTS.md` file at your project root. These rules are automatically loaded into every agent's system prompt: - -```markdown -# Project Rules +**What altimate does:** -- All staging models must be prefixed with `stg_` -- Never run queries without a WHERE clause on production tables -- Use `ref()` instead of hardcoded table names in dbt models -- All new models require at least one unique test and one not_null test -``` - -### Default permissions by agent mode +1. **Downloads the NYC TLC trip data** into a local DuckDB instance +2. **Scaffolds a full dbt project** with proper directory structure: + ``` + nyc_taxi/ + models/ + staging/ + stg_yellow_trips.sql + stg_taxi_zones.sql + intermediate/ + int_trips_by_zone.sql + int_zone_coverage_stats.sql + marts/ + fct_zone_coverage.sql + dim_zones.sql + seeds/ + taxi_zone_lookup.csv + dbt_project.yml + profiles.yml # points to DuckDB + ``` +3. **Generates mart models** that aggregate pickup/dropoff counts per zone, rank zones by trip volume, and classify them as high-coverage or low-coverage +4. **Creates an Airflow DAG** (`dags/nyc_taxi_pipeline.py`) with tasks for data ingestion, `dbt run`, `dbt test`, and dashboard generation +5. **Builds an interactive dashboard** visualizing zone coverage across NYC — top zones, bottom zones, and geographic distribution -| Agent | File writes | SQL writes | Bash | Training | -|---|---|---|---|---| -| Builder | allow | ask (prompts for approval) | ask | allow | -| Analyst | deny | deny (blocked entirely) | deny (safe commands auto-allowed) | allow | -| Plan | deny | deny | deny | deny | +This single prompt exercises warehouse connections, dbt scaffolding, SQL generation, orchestration wiring, and visualization — the full altimate toolkit. --- -## Step 7: Build Your First Artifact +## Skill Discovery: What Can I Do? -In the TUI, paste this prompt: +Type `/` in the TUI to see all available skills. Here's a quick reference for common tasks: -``` -Build a NYC taxi analytics dashboard using BigQuery public data and dbt -for transformations. Include geographic demand analysis with -pickup/dropoff hotspots, top routes, airport traffic, and borough -comparisons. Add revenue analytics with fare breakdowns, fare -distribution, tip analysis, payment trends, and revenue-per-mile -by route. -``` +| I want to... | Skill | Example | +| ------------------------- | ------------------- | -------------------------------------------------------- | +| Optimize a slow query | `/query-optimize` | `/query-optimize SELECT * FROM big_table` | +| Review SQL before merging | `/sql-review` | `/sql-review models/staging/stg_orders.sql` | +| Check Snowflake costs | `/cost-report` | `/cost-report` (last 30 days) | +| Scan for PII exposure | `/pii-audit` | `/pii-audit` (full schema) or `/pii-audit models/marts/` | +| Debug a dbt error | `/dbt-troubleshoot` | Paste the error message | +| Add tests to a model | `/dbt-test` | `/dbt-test models/staging/stg_orders.sql` | +| Document a model | `/dbt-docs` | `/dbt-docs models/marts/fct_revenue.sql` | +| Analyze downstream impact | `/dbt-analyze` | `/dbt-analyze stg_orders` (before refactoring) | +| Create a new dbt model | `/dbt-develop` | `Create a staging model for the raw_orders source` | +| Translate SQL dialects | `/sql-translate` | `/sql-translate snowflake bigquery SELECT DATEADD(...)` | +| Check migration safety | `/schema-migration` | `/schema-migration migrations/V003__alter_orders.sql` | +| Teach a pattern | `/teach` | `/teach @models/staging/stg_orders.sql` | + +**Pro tip:** You don't need to memorize these. Just describe what you want in plain English — the agent routes to the right skill automatically. --- ## What's Next -- [Agent Modes](../data-engineering/agent-modes.md): Deep dive into each mode's capabilities -- [Warehouses Reference](../configure/warehouses.md): All warehouse types, auth methods, SSH tunneling -- [Config Reference](../configure/config.md): Full config file schema -- [CI & Automation](../data-engineering/guides/ci-headless.md): Run altimate in automated pipelines +- **[Setup](setup.md)** — Warehouses, LLM providers, agent modes, skills, and permissions +- **[Examples](../examples/index.md)** — End-to-end walkthroughs for common data engineering tasks +- **[Interfaces](../usage/tui.md)** — TUI, CLI, CI, IDE, and GitHub/GitLab integrations diff --git a/docs/docs/getting-started/setup.md b/docs/docs/getting-started/setup.md new file mode 100644 index 0000000000..ee5c2a11fd --- /dev/null +++ b/docs/docs/getting-started/setup.md @@ -0,0 +1,454 @@ +--- +title: "Setup Guide — Altimate Code" +description: "Install altimate-code, connect your warehouse and LLM, configure agent modes, skills, and permissions." +--- + +# Setup + +> **You need:** npm 8+. An API key for any supported LLM provider. + +--- + +## Step 1: Install + +```bash +npm install -g altimate-code +``` + +> **Zero additional setup.** One command install. + +--- + +## Step 2: Configure Your LLM + +```bash +altimate # Launch the TUI +/connect # Choose your provider and enter your API key +``` + +Or set an environment variable: + +```bash +export ANTHROPIC_API_KEY=your-key-here # Anthropic Claude (recommended) +export OPENAI_API_KEY=your-key-here # OpenAI +``` + +Minimal config file option (`altimate-code.json` in your project root): + +```json +{ + "provider": { + "anthropic": { + "apiKey": "{env:ANTHROPIC_API_KEY}" + } + }, + "model": "anthropic/claude-sonnet-4-6" +} +``` + +### Changing your LLM provider + +Switch providers at any time by updating the `provider` and `model` fields in `altimate-code.json`: + +=== "Anthropic" + + ```json + { + "provider": { + "anthropic": { + "apiKey": "{env:ANTHROPIC_API_KEY}" + } + }, + "model": "anthropic/claude-sonnet-4-6" + } + ``` + +=== "OpenAI" + + ```json + { + "provider": { + "openai": { + "apiKey": "{env:OPENAI_API_KEY}" + } + }, + "model": "openai/gpt-4o" + } + ``` + +=== "Amazon Bedrock" + + ```json + { + "provider": { + "amazon-bedrock": { + "options": { + "region": "us-east-1" + } + } + }, + "model": "amazon-bedrock/anthropic.claude-sonnet-4-6-v1" + } + ``` + + Uses the standard AWS credential chain (`AWS_PROFILE`, `AWS_ACCESS_KEY_ID`/`AWS_SECRET_ACCESS_KEY`, IAM roles, SSO). + For custom API gateways, see [Bedrock Custom Endpoints](../configure/bedrock-custom-endpoints.md). + +=== "Azure OpenAI" + + ```json + { + "provider": { + "azure": { + "apiKey": "{env:AZURE_OPENAI_API_KEY}", + "baseURL": "https://your-resource.openai.azure.com/openai/deployments/your-deployment" + } + }, + "model": "azure/gpt-4o" + } + ``` + +=== "Google Gemini" + + ```json + { + "provider": { + "google": { + "apiKey": "{env:GOOGLE_API_KEY}" + } + }, + "model": "google/gemini-2.5-pro" + } + ``` + +=== "Ollama (Local)" + + ```json + { + "provider": { + "ollama": { + "baseURL": "http://localhost:11434" + } + }, + "model": "ollama/llama3.1" + } + ``` + +=== "LM Studio (Local)" + + ```json + { + "provider": { + "lmstudio": { + "name": "LM Studio", + "npm": "@ai-sdk/openai-compatible", + "options": { + "apiKey": "lm-studio", + "baseURL": "http://localhost:1234/v1" + }, + "models": { + "qwen2.5-7b-instruct": { + "name": "Qwen 2.5 7B Instruct", + "tool_call": true, + "limit": { "context": 131072, "output": 8192 } + } + } + } + }, + "model": "lmstudio/qwen2.5-7b-instruct" + } + ``` + +=== "OpenRouter" + + ```json + { + "provider": { + "openrouter": { + "apiKey": "{env:OPENROUTER_API_KEY}" + } + }, + "model": "openrouter/anthropic/claude-sonnet-4-6" + } + ``` + +You can also set a smaller model for lightweight tasks like summarization: + +```json +{ + "model": "anthropic/claude-sonnet-4-6", + "small_model": "anthropic/claude-haiku-4-5-20251001" +} +``` + +--- + +## Step 3: Connect Your Warehouse + +### Auto-discover with `/discover` + +> Skip this step if you want to work locally. You can always run `/discover` later. + +```bash +altimate /discover +``` + +Auto-detects your dbt projects, warehouse credentials from `profiles.yml` (checks `DBT_PROFILES_DIR`, then your project directory, then the default `/.dbt/profiles.yml`), running Docker containers, and environment variables (`SNOWFLAKE_ACCOUNT`, `PGHOST`, `DATABASE_URL`, etc.). + +### Manual configuration + +Add a warehouse connection to `.altimate-code/connections.json`: + +=== "Snowflake" + + ```json + { + "snowflake": { + "type": "snowflake", + "account": "xy12345.us-east-1", + "user": "dbt_user", + "password": "{env:SNOWFLAKE_PASSWORD}", + "warehouse": "TRANSFORM_WH", + "database": "ANALYTICS", + "schema": "PUBLIC", + "role": "TRANSFORMER" + } + } + ``` + +=== "BigQuery" + + ```json + { + "bigquery": { + "type": "bigquery", + "project": "my-project-id", + "credentials_path": "~/.config/gcloud/application_default_credentials.json" + } + } + ``` + +=== "Databricks" + + ```json + { + "databricks": { + "type": "databricks", + "server_hostname": "dbc-abc123.cloud.databricks.com", + "http_path": "/sql/1.0/warehouses/abcdef", + "access_token": "{env:DATABRICKS_TOKEN}", + "catalog": "main", + "schema": "default" + } + } + ``` + +=== "PostgreSQL" + + ```json + { + "postgres": { + "type": "postgres", + "host": "localhost", + "port": 5432, + "database": "analytics", + "user": "postgres", + "password": "{env:POSTGRES_PASSWORD}" + } + } + ``` + +=== "DuckDB" + + ```json + { + "local": { + "type": "duckdb", + "path": "./data/analytics.duckdb" + } + } + ``` + +=== "Redshift" + + ```json + { + "redshift": { + "type": "redshift", + "host": "my-cluster.abc123.us-east-1.redshift.amazonaws.com", + "port": 5439, + "database": "analytics", + "user": "admin", + "password": "{env:REDSHIFT_PASSWORD}" + } + } + ``` + +All warehouse types support SSH tunneling for bastion hosts. See the [Warehouses reference](../configure/warehouses.md) for full options including key-pair auth, IAM roles, and ADC. + +Verify your connection: + +``` +> warehouse_test snowflake +✓ Connected successfully +``` + +--- + +## Step 4: Choose an Agent Mode + +altimate ships with specialized agent modes, each with its own tool permissions: + +| Mode | Access | Use when you want to... | +|---|---|---| +| **Builder** | Read/Write | Create and modify SQL, dbt models, pipelines. SQL writes prompt for approval. | +| **Analyst** | Read-only | Explore production data safely, run cost analysis. SQL writes denied entirely. | +| **Plan** | Minimal | Plan an approach before switching to builder to execute it | + +Switch modes in the TUI: + +``` +/agent analyst +``` + +Or from the CLI: + +```bash +altimate --agent analyst +``` + +The **Analyst** mode is production-safe — it blocks INSERT, UPDATE, DELETE, and DROP statements at the harness level. The **Builder** mode has full read/write access for creating and editing SQL and dbt files. + +--- + +## Step 5: Select Skills + +Skills are reusable prompt templates for common workflows. Type `/` in the TUI to browse all available skills: + +| Skill | Purpose | +|---|---| +| `/query-optimize` | Optimize slow queries with anti-pattern detection | +| `/sql-review` | SQL quality gate with grading | +| `/sql-translate` | Cross-dialect SQL translation | +| `/cost-report` | Snowflake/Databricks cost analysis | +| `/pii-audit` | Scan for PII exposure | +| `/dbt-develop` | Scaffold new dbt models | +| `/dbt-test` | Generate dbt tests | +| `/dbt-docs` | Generate dbt documentation | +| `/dbt-analyze` | Column-level lineage and impact analysis | +| `/dbt-troubleshoot` | Debug dbt errors | +| `/data-viz` | Interactive dashboards and visualizations | +| `/teach` | Teach patterns from example files | +| `/train` | Load standards from documents | + +You don't need to memorize these — describe what you want in plain English and the agent routes to the right skill automatically. + +### Custom skills + +Add your own skills as Markdown files in `.altimate-code/skill/`: + +```markdown +--- +name: cost-review +description: "Review SQL queries for cost optimization" +--- + +Analyze the SQL query for cost optimization opportunities. +Focus on: $ARGUMENTS +``` + +Skills are loaded from these paths (highest priority first): + +1. `.altimate-code/skill/` (project) +2. `~/.altimate-code/skills/` (global) +3. Custom paths via config: + +```json +{ + "skills": { + "paths": ["./my-skills", "~/shared-skills"] + } +} +``` + +--- + +## Step 6: Configure Permissions + +Governance is enforced at the harness level, not via prompts. Every tool has a permission level: `allow`, `ask`, or `deny`. + +### Per-agent permissions + +Set tool permissions for each agent mode in `altimate-code.json`: + +```json +{ + "agent": { + "analyst": { + "permission": { + "write": "deny", + "edit": "deny", + "bash": { + "dbt docs generate": "allow", + "*": "deny" + } + } + }, + "builder": { + "permission": { + "write": "allow", + "edit": "allow", + "bash": { + "dbt *": "allow", + "rm -rf *": "deny" + } + } + } + } +} +``` + +### Project rules with AGENTS.md + +Define project-wide conventions in an `AGENTS.md` file at your project root. These rules are automatically loaded into every agent's system prompt: + +```markdown +# Project Rules + +- All staging models must be prefixed with `stg_` +- Never run queries without a WHERE clause on production tables +- Use `ref()` instead of hardcoded table names in dbt models +- All new models require at least one unique test and one not_null test +``` + +### Default permissions by agent mode + +| Agent | File writes | SQL writes | Bash | Training | +|---|---|---|---|---| +| Builder | allow | ask (prompts for approval) | ask | allow | +| Analyst | deny | deny (blocked entirely) | deny (safe commands auto-allowed) | allow | +| Plan | deny | deny | deny | deny | + +--- + +## Step 7: Build Your First Artifact + +In the TUI, paste this prompt: + +``` +Build a NYC taxi analytics dashboard using BigQuery public data and dbt +for transformations. Include geographic demand analysis with +pickup/dropoff hotspots, top routes, airport traffic, and borough +comparisons. Add revenue analytics with fare breakdowns, fare +distribution, tip analysis, payment trends, and revenue-per-mile +by route. +``` + +--- + +## What's Next + +- [Agent Modes](../data-engineering/agent-modes.md): Deep dive into each mode's capabilities +- [Warehouses Reference](../configure/warehouses.md): All warehouse types, auth methods, SSH tunneling +- [Config Reference](../configure/config.md): Full config file schema +- [CI & Automation](../usage/ci-headless.md): Run altimate in automated pipelines diff --git a/docs/docs/index.md b/docs/docs/index.md index 19bff65f4f..f1a1fb2ad2 100644 --- a/docs/docs/index.md +++ b/docs/docs/index.md @@ -1,10 +1,108 @@ --- -title: altimate-code +title: Altimate Code +description: "Altimate Code is an open-source data engineering harness with 100+ deterministic tools to build, validate, optimize, and ship data products." hide: - toc - - navigation --- - +
Altimate Code
-Redirecting to [Getting Started](getting-started/index.md)... +# The open-source data engineering harness. + +

+100+ deterministic tools for building, validating, optimizing and shipping data products. Usable from any LLM, across your warehouses. #1 on ADE-Bench  ·  74.4%  ·  32/43 tasks +

+ + + +
+ +
+
+
+ +
+ +### [Quickstart](/getting-started/) + +Install, connect a warehouse and an LLM, and make your first run in under five minutes. + +
+
+ +
+
+
+ +
+ +### [Tools](/configure/tools/) + +SQL, schema, FinOps, lineage, dbt, warehouse and memory tools — every one deterministic. + +
+
+ +
+
+
+ +
+ +### [Interfaces](/usage/tui/) + +TUI, CLI, Web UI, IDE, CI, GitHub, GitLab and dbt PR review. + +
+
+ +
+
+
+ +
+ +### [Configure](/configure/) + +Warehouses, LLM providers and models, MCP and training. + +
+
+ +
+
+
+ +
+ +### [Governance](/configure/governance/) + +Agent modes, rules, permissions, context management and formatters. + +
+
+ +
+
+
+ +
+ +### [Develop & Extend](/develop/sdk/) + +SDK, server API, plugins and the broader ecosystem. + +
+
+ +
+ +## Other Altimate products + +- [Power User for dbt](https://help.altimate.ai/dbt-power-user/) — Best dbt extension for VS Code / Cursor. +- [Altimate MCP](https://help.altimate.ai/datamates/) — A local-first MCP server for your data stack. +- [Altimate Lite for Snowflake](https://help.altimate.ai/snowflake-native-app/) — More out of your Snowflake compute, without your data leaving your account. +- [Altimate Platform](https://altimate.ai/platform?utm_source=help-docs&utm_medium=referral&utm_campaign=docs-inline-link) — Enterprise cost optimization for [Snowflake](https://altimate.ai/use-cases/altimate-for-snowflake?utm_source=help-docs&utm_medium=referral&utm_campaign=docs-inline-link) and [Databricks](https://altimate.ai/use-cases/altimate-for-databricks?utm_source=help-docs&utm_medium=referral&utm_campaign=docs-inline-link). diff --git a/docs/docs/llms.txt b/docs/docs/llms.txt index 63f78b0d5b..e2651cb9de 100644 --- a/docs/docs/llms.txt +++ b/docs/docs/llms.txt @@ -1,19 +1,19 @@ # altimate-code llms.txt # AI-friendly documentation index for altimate-code -# Generated: 2026-03-18 | Version: v0.5.0 -# Source: https://help.altimate.ai/code +# Generated: 2026-08-10 +# Source: https://help.altimate.ai/code/ > altimate-code is an open-source data engineering harness with 100+ tools for building, validating, optimizing, and shipping data products. Use in your terminal, CI pipeline, orchestration DAGs, or as the tool layer for your data agents. Includes a deterministic SQL Intelligence Engine (100% F1 across 1,077 queries), column-level lineage, FinOps analysis, PII detection, and dbt integration. Works with any LLM provider. Local-first, MIT-licensed. ## Get Started - [Quickstart (5 min)](https://help.altimate.ai/code/quickstart/): Install altimate, configure your LLM provider, connect your warehouse, and run your first query in under 5 minutes. -- [Full Setup Guide](https://help.altimate.ai/code/getting-started/): Complete installation, warehouse configuration for all 8 supported warehouses, LLM provider setup, and first-run walkthrough. +- [Full Setup Guide](https://help.altimate.ai/code/getting-started/): Complete installation, warehouse configuration for all 13 supported warehouses, LLM provider setup, and first-run walkthrough. - [Network & Proxy](https://help.altimate.ai/code/reference/network/): Proxy configuration, CA certificate setup, firewall requirements. ## Data Engineering -- [Agent Modes](https://help.altimate.ai/code/data-engineering/agent-modes/): 7 specialized agents (Builder, Analyst, Validator, Migrator, Researcher, Trainer, Executive), each with scoped permissions and purpose-built tool access. Builder has full read/write; Analyst has read-only enforced. +- [Agent Modes](https://help.altimate.ai/code/data-engineering/agent-modes/): 3 specialized agents (Builder, Analyst, Plan), each with scoped permissions and purpose-built tool access. Builder has full read/write; Analyst is read-only; Plan drafts a step-by-step plan before any changes. - [Training Overview](https://help.altimate.ai/code/data-engineering/training/): How to teach altimate project-specific patterns, naming conventions, and corrections that persist across sessions and team members. - [Team Deployment](https://help.altimate.ai/code/data-engineering/training/team-deployment/): How to commit training to git so your entire team inherits SQL conventions automatically. - [SQL Tools](https://help.altimate.ai/code/data-engineering/tools/sql-tools/): 9 SQL analysis tools with 19 anti-pattern rules. 100% F1 accuracy on 1,077 benchmark queries. @@ -25,7 +25,7 @@ - [Memory Tools](https://help.altimate.ai/code/data-engineering/tools/memory-tools/): Session memory, persistent corrections, and team training storage. - [Cost Optimization Guide](https://help.altimate.ai/code/data-engineering/guides/cost-optimization/): Step-by-step warehouse cost reduction with before/after SQL examples and savings estimates. - [Migration Guide](https://help.altimate.ai/code/data-engineering/guides/migration/): Cross-warehouse SQL migration with side-by-side examples. -- [CI & Headless Mode](https://help.altimate.ai/code/data-engineering/guides/ci-headless/): Non-interactive use in GitHub Actions, scheduled jobs, and pre-commit hooks. +- [CI & Headless Mode](https://help.altimate.ai/code/usage/ci-headless/): Non-interactive use in GitHub Actions, scheduled jobs, and pre-commit hooks. ## Configure @@ -33,7 +33,7 @@ - [Providers](https://help.altimate.ai/code/configure/providers/): 17 LLM provider configurations with JSON examples: Anthropic, OpenAI, Google Gemini, Vertex AI, Amazon Bedrock, Azure OpenAI, Mistral, Groq, Ollama, and more. - [Agent Skills](https://help.altimate.ai/code/configure/skills/): How to configure, discover, and add custom skills. - [Permissions](https://help.altimate.ai/code/configure/permissions/): Permission levels, pattern matching, per-agent restrictions, deny rules for destructive SQL. -- [Tracing](https://help.altimate.ai/code/configure/tracing/): Local-first observability covering trace schema, span types, live viewing, remote OTLP exporters, and crash recovery. +- [Tracing](https://help.altimate.ai/code/configure/trace/): Local-first observability covering trace schema, span types, live viewing, remote OTLP exporters, and crash recovery. - [Telemetry](https://help.altimate.ai/code/reference/telemetry/): 25 anonymized event types, privacy guarantees, opt-out instructions. ## Reference diff --git a/docs/docs/quickstart.md b/docs/docs/quickstart.md index 4c8c7950fc..48a95bdaf4 100644 --- a/docs/docs/quickstart.md +++ b/docs/docs/quickstart.md @@ -1,5 +1,6 @@ --- -description: "Install altimate-code and run your first SQL analysis. The open-source data engineering harness with 100+ tools for building, validating, optimizing, and shipping data products." +title: Quickstart — Altimate Code +description: "Install Altimate Code, connect your warehouse and LLM, and run your first SQL analysis in under 5 minutes." --- # Quickstart @@ -113,5 +114,5 @@ Once basics are working, explore these commands: - [Full Setup](getting-started.md): All warehouse configs, LLM providers, advanced setup - [Agent Modes](data-engineering/agent-modes.md): Choose the right agent for your task -- [CI & Automation](data-engineering/guides/ci-headless.md): Run altimate in automated pipelines +- [CI & Automation](usage/ci-headless.md): Run altimate in automated pipelines - Train your AI teammate: Use `/teach` and `/train` to build team-specific knowledge that persists across sessions diff --git a/docs/docs/reference/changelog.md b/docs/docs/reference/changelog.md index 7411303798..454d35c4c8 100644 --- a/docs/docs/reference/changelog.md +++ b/docs/docs/reference/changelog.md @@ -1,3 +1,8 @@ +--- +title: "Changelog — Altimate Code" +description: "Full version history for Altimate Code following Keep a Changelog format with semantic versioning." +--- + # Changelog All notable changes to this project will be documented in this file. @@ -185,7 +190,7 @@ After upgrading, the TUI welcome banner shows what changed since your previous v ### Added - `/feedback` command and `feedback_submit` tool for in-app user feedback (#89) -- Datamate manager — dynamic MCP server management (#99) +- Altimate MCP manager — dynamic MCP server management (#99) - Non-interactive mode for `mcp add` command with input validation - `mcp remove` command - Upstream merge with OpenCode v1.2.20 diff --git a/docs/docs/reference/network.md b/docs/docs/reference/network.md index 8ee02fd8bb..5673f5d1b9 100644 --- a/docs/docs/reference/network.md +++ b/docs/docs/reference/network.md @@ -1,3 +1,8 @@ +--- +title: "Network & Proxy Configuration — Altimate Code" +description: "Configure Altimate Code for proxied or restricted network environments using HTTP_PROXY and related environment variables." +--- + # Network Configure network settings for proxied or restricted environments. diff --git a/docs/docs/reference/security-faq.md b/docs/docs/reference/security-faq.md index 5825730d58..b5e73eb7dd 100644 --- a/docs/docs/reference/security-faq.md +++ b/docs/docs/reference/security-faq.md @@ -1,3 +1,8 @@ +--- +title: "Security FAQ — Altimate Code" +description: "Answers to common security questions about Altimate Code: what data is sent to LLMs, how credentials are stored, and more." +--- + # Security FAQ Answers to the most common security questions about running Altimate Code in your environment. @@ -130,9 +135,8 @@ export ALTIMATE_TELEMETRY_DISABLED=true - **Logged-in users:** Your email is SHA-256 hashed before sending. We never see your raw email. - **Anonymous users:** A random UUID (`crypto.randomUUID()`) is generated on first run and stored at `~/.altimate/machine-id`. This is NOT tied to your hardware, OS, or identity — it's purely random. -- **Both identifiers** are only sent when telemetry is enabled. Disable via `ALTIMATE_TELEMETRY_DISABLED=true` or the `telemetry.disabled` config option. +- **Both identifiers** are only sent when telemetry is enabled. Disable with `ALTIMATE_TELEMETRY_DISABLED=true`. - **No fingerprinting:** We do not use browser fingerprinting, hardware IDs, MAC addresses, or IP-based tracking. -- **CLI auth flow:** When you sign in via `altimate auth login`, the anonymous machine ID is included in the authorization URL and associated with your account in product analytics for funnel analysis. This is suppressed when you disable telemetry — via `ALTIMATE_TELEMETRY_DISABLED=true` or the `telemetry.disabled` config option — and the machine ID is omitted from the URL entirely. ### What happens on first launch? diff --git a/docs/docs/reference/telemetry.md b/docs/docs/reference/telemetry.md index d28a484475..59d751c726 100644 --- a/docs/docs/reference/telemetry.md +++ b/docs/docs/reference/telemetry.md @@ -1,3 +1,7 @@ +--- +title: "Telemetry — Altimate Code" +description: "Altimate Code collects anonymous usage telemetry by default. See what's collected and how to opt out." +--- # Telemetry Altimate Code collects anonymous usage data to help us improve the product. This page describes what we collect, why, and how to opt out. @@ -167,10 +171,6 @@ Altimate Code uses two types of anonymous identifiers for analytics, depending o Both identifiers are only sent when telemetry is enabled. Disable telemetry entirely with `ALTIMATE_TELEMETRY_DISABLED=true` or the config option above. -### CLI Authentication Flow - -When you sign in using the CLI browser auth flow (`altimate auth login`), the anonymous machine ID (a random UUID persisted at `~/.altimate/machine-id` — a device/installation identifier, reused across sessions) is included in the authorization URL and associated with your account in product analytics. This is used solely to correlate CLI install events with authenticated accounts in aggregate funnel analytics — it is not used for advertising or cross-site tracking. Your telemetry opt-out suppresses this: when you disable telemetry — via `ALTIMATE_TELEMETRY_DISABLED=true` **or** the `telemetry.disabled` config option — the machine ID is omitted from the authorization URL entirely. The machine ID is associated with your account in PostHog for this funnel analysis, separate from the Azure Application Insights pipeline used for other CLI telemetry events. - ### Data Retention Telemetry data is sent to Azure Application Insights and retained according to [Microsoft's data retention policies](https://learn.microsoft.com/en-us/azure/azure-monitor/logs/data-retention-configure). We do not maintain a separate data store. To request deletion of your telemetry data, contact privacy@altimate.ai. diff --git a/docs/docs/reference/troubleshooting.md b/docs/docs/reference/troubleshooting.md index 7734b456c7..c55e13fc43 100644 --- a/docs/docs/reference/troubleshooting.md +++ b/docs/docs/reference/troubleshooting.md @@ -1,3 +1,7 @@ +--- +title: "Troubleshooting — Altimate Code" +description: "Fix common Altimate Code installation and runtime issues including binary naming problems and path configuration." +--- # Troubleshooting ## Installation diff --git a/docs/docs/reference/windows-wsl.md b/docs/docs/reference/windows-wsl.md index f2d84cb952..83c63f44a8 100644 --- a/docs/docs/reference/windows-wsl.md +++ b/docs/docs/reference/windows-wsl.md @@ -1,3 +1,7 @@ +--- +title: "Windows & WSL Support — Altimate Code" +description: "Install and run Altimate Code on Windows natively or via WSL (Windows Subsystem for Linux)." +--- # Windows / WSL altimate runs on Windows both natively (via Node.js on Windows) and through WSL (Windows Subsystem for Linux). WSL 2 is recommended for the best experience, but it is not required. diff --git a/docs/docs/usage/check.md b/docs/docs/usage/check.md index d477522734..851bb2c01b 100644 --- a/docs/docs/usage/check.md +++ b/docs/docs/usage/check.md @@ -1,3 +1,8 @@ +--- +title: "SQL Check (Headless) — Altimate Code" +description: "Run deterministic SQL checks without an LLM in Altimate Code. CI/CD-ready with exit codes and JSON output." +--- + # SQL Check (Headless) Run deterministic SQL checks without an LLM. Ideal for CI/CD pipelines, pre-commit hooks, and GitHub Actions. diff --git a/docs/docs/usage/ci-headless.md b/docs/docs/usage/ci-headless.md index 5d622254c3..cf6856298c 100644 --- a/docs/docs/usage/ci-headless.md +++ b/docs/docs/usage/ci-headless.md @@ -1,3 +1,8 @@ +--- +title: "CI & Headless Mode — Altimate Code" +description: "Run Altimate Code prompts non-interactively in CI/CD pipelines. Returns plain text or structured JSON." +--- + # CI & Headless Mode Run any altimate prompt non-interactively from scripts, CI pipelines, or scheduled jobs. No TUI. Output is plain text or JSON. diff --git a/docs/docs/usage/cli.md b/docs/docs/usage/cli.md index d4a4b6737d..303331db9b 100644 --- a/docs/docs/usage/cli.md +++ b/docs/docs/usage/cli.md @@ -1,3 +1,8 @@ +--- +title: "CLI Reference — Altimate Code" +description: "Command-line reference for Altimate Code: subcommands for launching the TUI, running headless prompts, and more." +--- + # CLI altimate provides subcommands for headless operation, automation, and integration. diff --git a/docs/docs/usage/dbt-pr-review-corpus.md b/docs/docs/usage/dbt-pr-review-corpus.md index c925bb015c..ed8ffb385a 100644 --- a/docs/docs/usage/dbt-pr-review-corpus.md +++ b/docs/docs/usage/dbt-pr-review-corpus.md @@ -1,3 +1,8 @@ +--- +title: "dbt PR Review — Real-World Issue Corpus" +description: "Real-world dbt pitfall corpus used to benchmark Altimate Code's PR review: 15/15 issues caught, 0/5 false positives." +--- + # dbt PR Review — real-world issue corpus A living, **sourced** corpus of real dbt/SQL pitfalls practitioners report (dbt diff --git a/docs/docs/usage/dbt-pr-review.md b/docs/docs/usage/dbt-pr-review.md index 4b0b48f59a..2c2a19afe5 100644 --- a/docs/docs/usage/dbt-pr-review.md +++ b/docs/docs/usage/dbt-pr-review.md @@ -1,3 +1,7 @@ +--- +title: "dbt PR Review — Altimate Code" +description: "Live dbt pull request reviews with zero-secret DuckDB, blocking findings backed by Altimate's deterministic SQL engine." +--- # dbt PR Review [**See live review PRs**](https://github.com/AltimateAI/dbt-pr-review-demo/pulls) diff --git a/docs/docs/usage/github.md b/docs/docs/usage/github.md index 826b0a5404..024d0b80b0 100644 --- a/docs/docs/usage/github.md +++ b/docs/docs/usage/github.md @@ -1,3 +1,8 @@ +--- +title: "GitHub Actions Integration — Altimate Code" +description: "Integrate Altimate Code with GitHub Actions for automated PR reviews, issue handling, and CI/CD data workflows." +--- + # GitHub altimate integrates with GitHub for automated code review and issue handling. diff --git a/docs/docs/usage/gitlab.md b/docs/docs/usage/gitlab.md index 09dec2a579..c9cc785fc5 100644 --- a/docs/docs/usage/gitlab.md +++ b/docs/docs/usage/gitlab.md @@ -1,3 +1,8 @@ +--- +title: "GitLab Merge Request Review — Altimate Code" +description: "Set up Altimate Code to review GitLab merge requests automatically using a personal access token." +--- + # GitLab altimate integrates with GitLab for automated merge request review. diff --git a/docs/docs/usage/ide.md b/docs/docs/usage/ide.md index d2fad74a01..b7613f6f8d 100644 --- a/docs/docs/usage/ide.md +++ b/docs/docs/usage/ide.md @@ -1,6 +1,11 @@ +--- +title: "IDE Integration — Altimate Code in VS Code" +description: "Use Altimate Code inside VS Code via the Datamates extension. Requires the altimate-code CLI to be installed." +--- + # IDE Integration -altimate-code integrates with your IDE via the [Datamates extension](https://marketplace.visualstudio.com/items?itemName=altimateai.vscode-altimate-mcp-server), giving you AI-powered chat with 100+ data engineering tools directly in your editor. +altimate-code integrates with your IDE via the [Datamates extension](https://marketplace.visualstudio.com/items?itemName=altimateai.vscode-altimate-mcp-server) — listed as **Datamates** in the Marketplace, its in-editor commands and docs are branded **Altimate MCP** — giving you AI-powered chat with 100+ data engineering tools directly in your editor. --- @@ -27,8 +32,8 @@ Install the Datamates extension for your IDE: After installing the extension: 1. Press `Cmd+Shift+P` (macOS) or `Ctrl+Shift+P` (Windows/Linux) to open the command palette -2. Type `Datamates` -3. Select **Datamates: Open Altimate Code Chat** +2. Type `Altimate MCP` +3. Select **Altimate MCP: Open Altimate Code Chat** This opens the Altimate Code chat panel where you can interact with altimate agents and use all 100+ data engineering tools. @@ -45,6 +50,17 @@ This opens the Altimate Code chat panel where you can interact with altimate age The extension uses your existing `altimate-code.json` config. No additional IDE-specific configuration is required. Warehouse connections, LLM providers, permissions, and agent settings all carry over. +### Extension settings + +The extension contributes these VS Code settings (Settings → search "altimate"): + +| Setting | Default | Description | +|---|---|---| +| `altimate.altimateCodeRequireConsent` | `false` | Ask before downloading and installing the altimate-code CLI. By default the extension installs the CLI automatically the first time chat is opened. When enabled, chat shows an install prompt instead — nothing is downloaded until you confirm, and declining shows manual install instructions. | +| `altimate.codeAutoUpdate` | `true` | Keep the CLI up to date automatically in the background. Checked at most once a day, and only runs when the CLI is already installed. | + +The extension installs the CLI natively: the release archive is fetched over HTTPS from [GitHub releases](https://github.com/AltimateAI/altimate-code/releases), verified against the release's `checksums.txt` (SHA-256), and placed in `~/.altimate/bin` — no shell scripts are executed and nothing outside your home directory is modified. Environments that prefer full control can enable `altimate.altimateCodeRequireConsent` via managed settings, or pre-install the CLI themselves (the extension uses any `altimate` found on `PATH` or in `~/.altimate/bin`). + ## LLM Access You need an LLM to power the chat. Two options: @@ -52,6 +68,6 @@ You need an LLM to power the chat. Two options: - **BYOK (Bring Your Own Key)** — Free and unlimited. Configure any of the [35+ supported providers](../configure/providers.md) (Anthropic, OpenAI, AWS Bedrock, Azure OpenAI, etc.) - **[Altimate LLM Gateway](https://help.altimate.ai/datamates/user-guide/components/llm-gateway/)** — Managed LLM access with dynamic model routing. 10M tokens free to get started — no API keys to manage -## Full Datamates Documentation +## Full Altimate MCP Documentation -The Datamates extension offers additional capabilities beyond Altimate Code Chat, including MCP server integrations, Knowledge Hub, Memory Hub, and Guardrails. See the [Datamates documentation](https://help.altimate.ai/datamates/) for full setup guides, integration configuration, and feature details. +The Datamates extension offers additional capabilities beyond Altimate Code Chat, including MCP server integrations, Knowledge Hub, Memory Hub, and Guardrails. See the [Altimate MCP documentation](https://help.altimate.ai/datamates/) for full setup guides, integration configuration, and feature details. diff --git a/docs/docs/usage/tui.md b/docs/docs/usage/tui.md index bb627e0dd9..e26e487a20 100644 --- a/docs/docs/usage/tui.md +++ b/docs/docs/usage/tui.md @@ -1,3 +1,8 @@ +--- +title: "Terminal UI (TUI) — Altimate Code" +description: "Altimate Code's terminal user interface: message panel, input area, and sidebar for session and context management." +--- + # TUI altimate launches a terminal-based user interface (TUI) by default. diff --git a/docs/docs/usage/web.md b/docs/docs/usage/web.md index bd3125e3a5..22df617b5d 100644 --- a/docs/docs/usage/web.md +++ b/docs/docs/usage/web.md @@ -1,3 +1,8 @@ +--- +title: "Web UI — Altimate Code" +description: "The Altimate Code browser-based interface for teams that prefer a web UI over the terminal. Currently in development." +--- + # Web UI Altimate Web is a browser-based interface for interacting with altimate's data engineering tools without the terminal. It provides the same conversational agent experience as the TUI, accessible from any browser. diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index 17ab2bd56b..e3f77f58a9 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -41,8 +41,9 @@ theme: - content.tooltips extra_css: - - assets/css/extra.css - + - assets/stylesheets/neoteroi-cards.css + - assets/stylesheets/extra.css + - assets/stylesheets/copy-page.css extra: social: - icon: fontawesome/brands/github @@ -73,84 +74,84 @@ markdown_extensions: emoji_generator: !!python/name:material.extensions.emoji.to_svg nav: - - Getting Started: - - Overview: getting-started/index.md - - Quickstart: getting-started/quickstart-new.md - - Setup: getting-started/quickstart.md - - Examples: - - Showcase: examples/index.md - - Use: - - Agents: - - Agent Modes: data-engineering/agent-modes.md - - Agent Config: configure/agents.md - - Tools: - - Overview: configure/tools/index.md - - Built-in Tools: configure/tools/config.md - - Core Tools: configure/tools/core-tools.md - - SQL Tools: data-engineering/tools/sql-tools.md - - Schema Tools: data-engineering/tools/schema-tools.md - - FinOps Tools: data-engineering/tools/finops-tools.md - - Lineage Tools: data-engineering/tools/lineage-tools.md - - dbt Tools: data-engineering/tools/dbt-tools.md - - Warehouse Tools: data-engineering/tools/warehouse-tools.md - - Memory Tools: data-engineering/tools/memory-tools.md - - Custom Tools: configure/tools/custom.md - - Skills: configure/skills.md - - Commands: configure/commands.md - - Validators: data-engineering/validators.md - - Trace: configure/trace.md - - Interfaces: - - TUI: usage/tui.md - - CLI: usage/cli.md - - SQL Check: usage/check.md - - Web UI: usage/web.md - - CI: usage/ci-headless.md - - IDE: usage/ide.md - - GitHub: usage/github.md - - GitLab: usage/gitlab.md - - dbt PR Review: usage/dbt-pr-review.md - - dbt PR Review — Issue Corpus: usage/dbt-pr-review-corpus.md - - Guides: - - Cost Optimization: data-engineering/guides/cost-optimization.md - - Migration: data-engineering/guides/migration.md - - Data Parity: data-engineering/guides/data-parity.md - - Using with Claude Code: data-engineering/guides/using-with-claude-code.md - - Using with Codex: data-engineering/guides/using-with-codex.md - - ClickHouse: data-engineering/guides/clickhouse.md - - Configure: - - Overview: configure/index.md - - Warehouses: configure/warehouses.md - - LLMs: - - Providers: configure/providers.md - - Models: configure/models.md - - Bedrock Custom Endpoints: configure/bedrock-custom-endpoints.md - - MCPs & ACPs: - - MCP Servers: configure/mcp-servers.md - - ACP Support: configure/acp.md - - Appearance: - - Themes: configure/themes.md - - Keybinds: configure/keybinds.md - - Training: - - Overview: data-engineering/training/index.md - - Team Deployment: data-engineering/training/team-deployment.md - - Additional Config: - - LSP Servers: configure/lsp.md - - Network: reference/network.md - - Windows / WSL: reference/windows-wsl.md - - Config File Reference: configure/config.md - - Governance: - - Overview: configure/governance.md - - Rules: configure/rules.md - - Permissions: configure/permissions.md - - Context Management: configure/context-management.md - - Formatters: configure/formatters.md - - Reference: - - Changelog: reference/changelog.md - - Telemetry: reference/telemetry.md - - Security FAQ: reference/security-faq.md - - Troubleshooting: reference/troubleshooting.md - - Extend: - - SDK: develop/sdk.md - - Server API: develop/server.md - - Plugins: develop/plugins.md - - Ecosystem: develop/ecosystem.md +- Overview: index.md +- Getting Started: + - Overview: getting-started/index.md + - Quickstart: getting-started/quickstart.md +- Examples: examples/index.md +- Use: + - Agents: + - Agent Modes: data-engineering/agent-modes.md + - Agent Config: configure/agents.md + - Tools: + - Overview: configure/tools/index.md + - Built-in Tools: configure/tools/config.md + - Core Tools: configure/tools/core-tools.md + - SQL Tools: data-engineering/tools/sql-tools.md + - Schema Tools: data-engineering/tools/schema-tools.md + - FinOps Tools: data-engineering/tools/finops-tools.md + - Lineage Tools: data-engineering/tools/lineage-tools.md + - dbt Tools: data-engineering/tools/dbt-tools.md + - Warehouse Tools: data-engineering/tools/warehouse-tools.md + - Memory Tools: data-engineering/tools/memory-tools.md + - Custom Tools: configure/tools/custom.md + - Skills: configure/skills.md + - Commands: configure/commands.md + - Validators: data-engineering/validators.md + - Trace: configure/trace.md + - Interfaces: + - TUI: usage/tui.md + - CLI: usage/cli.md + - SQL Check: usage/check.md + - Web UI: usage/web.md + - CI: usage/ci-headless.md + - IDE: usage/ide.md + - GitHub: usage/github.md + - GitLab: usage/gitlab.md + - dbt PR Review: usage/dbt-pr-review.md + - dbt PR Review — Issue Corpus: usage/dbt-pr-review-corpus.md + - Guides: + - Cost Optimization: data-engineering/guides/cost-optimization.md + - Migration: data-engineering/guides/migration.md + - Data Parity: data-engineering/guides/data-parity.md + - Using with Claude Code: data-engineering/guides/using-with-claude-code.md + - Using with Codex: data-engineering/guides/using-with-codex.md + - ClickHouse: data-engineering/guides/clickhouse.md +- Configure: + - Overview: configure/index.md + - Warehouses: configure/warehouses.md + - LLMs: + - Providers: configure/providers.md + - Models: configure/models.md + - Bedrock Custom Endpoints: configure/bedrock-custom-endpoints.md + - MCPs & ACPs: + - MCP Servers: configure/mcp-servers.md + - ACP Support: configure/acp.md + - Appearance: + - Themes: configure/themes.md + - Keybinds: configure/keybinds.md + - Training: + - Overview: data-engineering/training/index.md + - Team Deployment: data-engineering/training/team-deployment.md + - Additional Config: + - LSP Servers: configure/lsp.md + - Network: reference/network.md + - Windows / WSL: reference/windows-wsl.md + - Config File Reference: configure/config.md +- Governance: + - Overview: configure/governance.md + - Rules: configure/rules.md + - Permissions: configure/permissions.md + - Context Management: configure/context-management.md + - Formatters: configure/formatters.md +- Reference: + - Changelog: reference/changelog.md + - Telemetry: reference/telemetry.md + - Security FAQ: reference/security-faq.md + - Troubleshooting: reference/troubleshooting.md + - Extend: + - SDK: develop/sdk.md + - Server API: develop/server.md + - Plugins: develop/plugins.md + - Ecosystem: develop/ecosystem.md +- Altimate MCP: https://help.altimate.ai/datamates/