diff --git a/assets/css/main.css b/assets/css/main.css index 01bee26..838a966 100644 --- a/assets/css/main.css +++ b/assets/css/main.css @@ -58,3 +58,97 @@ no longer lined up with the nav). The reuse-image rules were also dead — the extras `reuse-image` shortcode toggles `.toggle-dark`/`.toggle-light`, not `.reuse-image-wrapper`. The theme aligns the navbar and sidebar itself. */ + +/* --------------------------------------------------------------------------- + Landing page (layouts/index.html) — Solo.io design system. + Namespaced `ar-*` so nothing collides with Hextra / docs-theme-extras. + + Theme-aware tokens are plain CSS variables flipped by the `.dark` class that + Hextra's theme toggle already puts on , and exposed to Tailwind via + `@theme inline` so `bg-ar-bg`, `text-ar-fg-2`, `border-ar-line` … follow the + active theme at runtime. Terminal tokens (`ar-term-*`) are fixed: terminals + stay dark in both themes. + --------------------------------------------------------------------------- */ +@custom-variant dark (&:where(.dark, .dark *)); + +@layer base { + :root { + --ar-bg: #FFFFFF; + --ar-bg-alt: #F6F7FB; + --ar-footer: #EDEEF7; + --ar-fg: #151927; + --ar-fg-2: #3B4258; + --ar-fg-3: #6B7289; + --ar-fg-4: #9AA0B5; + --ar-line: rgba(21, 25, 39, .08); + --ar-line-2: rgba(21, 25, 39, .14); + --ar-fill: rgba(21, 25, 39, .04); + --ar-fill-2: rgba(21, 25, 39, .08); + --ar-nav: rgba(255, 255, 255, .80); + --ar-btn: #151927; + --ar-btn-fg: #FFFFFF; + --ar-glow: rgba(138, 63, 252, .16); + --ar-hero-glow: rgba(138, 63, 252, .18); + --ar-ui-gradient: linear-gradient(180deg, #FFFFFF, #F3EEFC 55%, #FFFFFF); + } + .dark { + --ar-bg: #0B0E18; + --ar-bg-alt: #0A0D17; + --ar-footer: #090C14; + --ar-fg: #FFFFFF; + --ar-fg-2: #C8CCDB; + --ar-fg-3: #8289A3; + --ar-fg-4: #5A6078; + --ar-line: rgba(255, 255, 255, .08); + --ar-line-2: rgba(255, 255, 255, .12); + --ar-fill: rgba(255, 255, 255, .04); + --ar-fill-2: rgba(255, 255, 255, .08); + --ar-nav: rgba(11, 14, 24, .72); + --ar-btn: #FFFFFF; + --ar-btn-fg: #0B0E18; + --ar-glow: rgba(138, 63, 252, .12); + --ar-hero-glow: rgba(138, 63, 252, .30); + --ar-ui-gradient: linear-gradient(180deg, #0B0E18, #110B20 55%, #0B0E18); + } +} + +@theme inline { + --color-ar-bg: var(--ar-bg); + --color-ar-bg-alt: var(--ar-bg-alt); + --color-ar-footer: var(--ar-footer); + --color-ar-fg: var(--ar-fg); + --color-ar-fg-2: var(--ar-fg-2); + --color-ar-fg-3: var(--ar-fg-3); + --color-ar-fg-4: var(--ar-fg-4); + --color-ar-line: var(--ar-line); + --color-ar-line-2: var(--ar-line-2); + --color-ar-fill: var(--ar-fill); + --color-ar-fill-2: var(--ar-fill-2); + --color-ar-nav: var(--ar-nav); + --color-ar-btn: var(--ar-btn); + --color-ar-btn-fg: var(--ar-btn-fg); +} + +@theme { + /* Fixed palette */ + --color-ar-purple: #8A3FFC; + --color-ar-purple-hover: #9C55FF; + --color-ar-lilac: #C4A6FF; + --color-ar-success: #22C55E; + --color-ar-warning: #F59E0B; + --color-ar-danger: #EF4444; + /* Terminal (always dark) */ + --color-ar-term: #0A0D17; + --color-ar-term-fg: #E6E8F0; + --color-ar-term-2: #C8CCDB; + --color-ar-term-3: #8289A3; + --color-ar-term-4: #5A6078; + --color-ar-dot: #2A3044; + --font-ar-sans: 'Figtree', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif; + --font-ar-mono: 'DM Mono', ui-monospace, 'SF Mono', Menlo, Consolas, monospace; + --ease-ar: cubic-bezier(.16, 1, .3, 1); + --animate-ar-blink: ar-blink 1.1s steps(1) infinite; + --animate-ar-breathe: ar-breathe 6s cubic-bezier(.2, .6, .2, 1) infinite; + @keyframes ar-blink { 0%, 49% { opacity: 1 } 50%, 100% { opacity: 0 } } + @keyframes ar-breathe { 0%, 100% { opacity: .5 } 50% { opacity: .85 } } +} diff --git a/hugo.yaml b/hugo.yaml index 3920b17..9e74bed 100644 --- a/hugo.yaml +++ b/hugo.yaml @@ -39,7 +39,7 @@ params: prodHost: "https://aregistry.ai" theme: - default: dark + default: system displayToggle: true navbar: diff --git a/hugo_stats.json b/hugo_stats.json index dcf7711..1bad3cb 100644 --- a/hugo_stats.json +++ b/hugo_stats.json @@ -11,7 +11,6 @@ "code", "dialog", "div", - "em", "figcaption", "figure", "footer", @@ -20,7 +19,6 @@ "h2", "h3", "h4", - "h5", "head", "html", "iframe", @@ -28,7 +26,6 @@ "input", "kbd", "li", - "line", "link", "main", "meta", @@ -38,7 +35,6 @@ "p", "path", "polygon", - "polyline", "pre", "rect", "script", @@ -57,38 +53,62 @@ "ul" ], "classes": [ + "-mb-[2px]", + "-translate-x-1/2", + "[&>div]:whitespace-pre", + "[&>svg]:h-4", + "[&>svg]:h-[15px]", + "[&>svg]:h-[22px]", + "[&>svg]:opacity-70", + "[&>svg]:w-4", + "[&>svg]:w-[15px]", + "[&>svg]:w-[22px]", + "[scrollbar-color:var(--ar-fg-4)_transparent]", + "[scrollbar-width:thin]", "[word-break:break-word]", - "accent", - "active", - "ar", - "ar-orbit", - "ar-orbit-center", - "ar-orbit-dot", - "ar-orbit-node", - "ar-orbit-ring", - "arg", - "badge", - "bb-panel", - "bb-panel-desc", - "bb-panel-link", - "bb-panel-title", - "bb-split", - "bottom", - "btn", - "btn-dark", - "btn-primary", - "btn-secondary", - "btns", - "by-solo", - "chev", + "absolute", + "animate-ar-blink", + "animate-ar-breathe", + "antialiased", + "ar-term", + "aria-selected:[&>svg]:opacity-100", + "aria-selected:[&>svg]:text-ar-purple", + "aria-selected:bg-ar-purple/10", + "aria-selected:border-ar-purple", + "aria-selected:border-ar-purple/40", + "aria-selected:text-ar-fg", + "aspect-[1440/900]", + "backdrop-blur-[18px]", + "bg-(image:--ar-ui-gradient)", + "bg-[#28C840]/80", + "bg-[#FEBC2E]/80", + "bg-[#FF5F57]/80", + "bg-[radial-gradient(120%_80%_at_50%_-10%,var(--ar-hero-glow),transparent_60%)]", + "bg-ar-bg", + "bg-ar-bg-alt", + "bg-ar-btn", + "bg-ar-fill", + "bg-ar-footer", + "bg-ar-nav", + "bg-ar-purple", + "bg-ar-purple/10", + "bg-ar-term", + "bg-linear-to-r", + "bg-white/3", + "block", + "border", + "border-ar-line", + "border-ar-line-2", + "border-ar-purple/25", + "border-b", + "border-b-2", + "border-t", + "border-transparent", + "border-white/10", + "border-white/8", "chroma", - "cmd", - "code-block", - "comment", - "container", - "container-narrow", + "col-start-1", "content", - "copy", "copy-md-btn", "copy-md-chevron", "copy-md-dialog", @@ -109,48 +129,67 @@ "copy-md-split", "copy-md-toggle", "copy-md-wrapper", - "cta-banner", - "cta-banner-inner", - "cta-snippet", - "dots", - "eyebrow", - "faq-a", - "faq-item", - "faq-list", - "faq-q", - "flow", - "flow-arrow", - "flow-block", - "flow-block-icon", - "flow-blocks", - "flow-card", - "flow-card-head", - "flow-card-sub", - "flow-gateway", - "flow-gateway-logo", - "flow-gateway-sub", - "flow-gateway-title", - "flow-infra", - "flow-link", - "flow-logo", - "flow-muted", - "flow-pair", - "flow-pill", - "flow-registry", - "flow-row", - "footer", - "footer-bottom", - "footer-brand", - "footer-col", - "footer-grid", - "hero", - "hero-bg", - "hero-ctas", - "hero-grid", - "hero-inner", - "hero-lockup", - "hero-sub", - "hero-tagline", + "cursor-pointer", + "dark:block", + "dark:hidden", + "duration-[400ms]", + "ease-ar", + "fixed", + "flex", + "flex-1", + "flex-col", + "flex-none", + "flex-wrap", + "focus-visible:ring-2", + "focus-visible:ring-ar-purple", + "font-ar-mono", + "font-ar-sans", + "font-medium", + "from-transparent", + "gap-1", + "gap-1.5", + "gap-10", + "gap-11", + "gap-12", + "gap-16", + "gap-2", + "gap-2.5", + "gap-3", + "gap-3.5", + "gap-4", + "gap-5", + "gap-6", + "gap-7", + "gap-8", + "gap-[18px]", + "gap-[22px]", + "gap-[26px]", + "gap-[3px]", + "gap-[7px]", + "gap-[9px]", + "gap-x-[22px]", + "gap-y-3", + "grid", + "grid-cols-[minmax(0,1fr)]", + "group", + "h-10", + "h-11", + "h-16", + "h-3.5", + "h-4", + "h-6", + "h-7", + "h-9", + "h-[1000px]", + "h-[1400px]", + "h-[15px]", + "h-[17px]", + "h-[18px]", + "h-[660px]", + "h-[9px]", + "h-auto", + "h-full", + "h-px", "hextra-code-block", "hextra-code-copy-btn", "hextra-code-copy-btn-container", @@ -173,7 +212,19 @@ "hextra-theme-toggle", "hextra-theme-toggle-options", "hextra-toc", + "hidden", "highlight", + "hover:bg-ar-fill", + "hover:bg-ar-fill-2", + "hover:bg-ar-purple-hover", + "hover:bg-ar-purple/10", + "hover:bg-white/6", + "hover:opacity-90", + "hover:ring-1", + "hover:ring-ar-purple/40", + "hover:text-ar-fg", + "hover:text-white", + "hover:underline", "hx:-mb-0.5", "hx:-ml-2", "hx:-mr-2", @@ -442,46 +493,116 @@ "hx:z-20", "hx:z-50", "hx:z-[-1]", - "icon-moon", - "icon-sun", - "left", - "link-arrow", - "mf-label", - "mf-num", - "mf-step", - "mini-flow", - "nav", - "nav-brand", - "nav-inner", - "nav-link", - "nav-link-kbd", - "nav-links", + "inline-block", + "inline-flex", + "inset-0", + "inset-x-0", + "items-center", + "items-start", + "justify-center", + "leading-[1.02]", + "leading-[1.12]", + "leading-[1.15]", + "leading-[1.1]", + "leading-[1.55]", + "leading-[1.6]", + "leading-[1.75]", + "leading-[1.9]", + "left-1/2", + "lg:gap-0", + "lg:gap-16", + "lg:grid", + "lg:grid-cols-[minmax(0,.92fr)_minmax(0,1.08fr)]", + "lg:grid-cols-[minmax(0,.9fr)_minmax(0,1.1fr)]", + "lg:hidden", + "lg:justify-center", + "lg:min-h-[80vh]", + "lg:py-10", + "list-none", + "m-0", + "max-w-[1200px]", + "max-w-[600px]", + "max-w-[660px]", + "max-w-[680px]", + "max-w-[720px]", + "max-w-[820px]", + "max-w-[900px]", + "max-w-[960px]", + "max-w-full", + "md:flex", + "md:grid-cols-3", + "md:ml-0", + "min-w-0", + "ml-2", + "ml-auto", + "mr-1", + "mt-1", + "mt-2", + "mt-6", + "mx-auto", + "opacity-0", + "opacity-100", + "opacity-80", "openapi-container", + "overflow-hidden", + "overflow-x-auto", + "overflow-x-hidden", + "overflow-y-auto", + "p-0", + "p-5", + "p-[22px]", "page-description", + "pb-18", + "pb-2.5", + "pb-20", + "pb-28", + "pb-5", + "pb-[104px]", + "pl-5", "pnf-code", - "preview-appbar", - "preview-appbar-brand", - "preview-appbar-right", - "preview-appbar-tab", - "preview-appbar-tabs", - "preview-scroll", - "preview-window-chrome", - "product-preview", - "prompt", - "qs-step", - "qs-step-num", - "quickstart", - "quickstart-steps", + "pointer-events-none", + "pr-2", + "pt-1.5", + "pt-2", + "pt-24", + "pt-4", + "pt-[120px]", + "pt-[3px]", + "px-2", + "px-3", + "px-3.5", + "px-4", + "px-5", + "px-6", + "px-[18px]", + "px-[22px]", + "py-1", + "py-1.5", + "py-11", + "py-2", + "py-24", + "py-3", + "py-6", + "py-[5px]", + "py-[9px]", + "relative", "reuse-image-nodark", - "right", - "section", + "rounded-[14px]", + "rounded-full", + "rounded-md", + "rounded-xl", + "row-start-1", + "scroll-smooth", "section-card", "section-card-body", "section-card-desc", "section-card-title", "section-cards", - "section-head", - "section-pad-sm", + "shadow-[0_24px_80px_-20px_rgba(11,14,24,.55),0_0_80px_var(--ar-glow)]", + "shadow-[0_24px_80px_-20px_rgba(11,14,24,.55)]", + "shadow-[0_30px_100px_-30px_rgba(11,14,24,.45),0_0_120px_var(--ar-glow)]", + "shadow-[0_8px_30px_-12px_rgba(11,14,24,.25)]", + "shrink-0", "sidebar-active-item", "sidebar-children", "sidebar-container", @@ -497,7 +618,12 @@ "sidebar-nav", "sidebar-nav-wrapper", "sidebar-toggle", - "socials", + "sm:h-[92px]", + "sm:inline", + "sm:inline-flex", + "sm:ml-auto", + "sm:text-[38px]", + "sm:text-[44px]", "solo-breadcrumb", "solo-breadcrumb-back", "solo-breadcrumb-home", @@ -516,25 +642,73 @@ "solo-toc-item", "solo-toc-link", "solo-toc-sublist", - "split", - "split-card", - "split-card-eyebrow", + "sticky", "subheading-anchor", "table-capped", "table-wrapper", - "terminal", - "terminal-badges", - "terminal-body", - "terminal-chrome", - "terminal-dots", - "terminal-stage", - "terminal-title", - "theme-toggle", - "tick", + "text-[11px]", + "text-[13.5px]", + "text-[13px]", + "text-[15px]", + "text-[17px]", + "text-[19px]", + "text-[32px]", + "text-[36px]", + "text-[clamp(28px,3.4vw,46px)]", + "text-[clamp(32px,3.6vw,46px)]", + "text-[clamp(34px,4.2vw,58px)]", + "text-[clamp(34px,4vw,52px)]", + "text-ar-btn-fg", + "text-ar-fg", + "text-ar-fg-2", + "text-ar-fg-3", + "text-ar-fg-4", + "text-ar-purple", + "text-ar-success", + "text-ar-term-2", + "text-ar-term-3", + "text-ar-term-4", + "text-ar-term-fg", + "text-balance", + "text-base", + "text-center", + "text-left", + "text-lg", + "text-pretty", + "text-sm", + "text-white", + "text-xs", + "to-transparent", "toggle-dark", "toggle-light", - "top", - "url" + "top-5", + "top-[-190px]", + "top-[-300px]", + "top-[-420px]", + "top-[112px]", + "tracking-[-.025em]", + "tracking-[-.02em]", + "tracking-[-.03em]", + "transition-colors", + "transition-opacity", + "truncate", + "via-ar-line-2", + "w-11", + "w-2", + "w-3.5", + "w-4", + "w-9", + "w-[1000px]", + "w-[1400px]", + "w-[15px]", + "w-[17px]", + "w-[18px]", + "w-[660px]", + "w-[9px]", + "w-auto", + "w-full", + "whitespace-nowrap", + "z-50" ], "ids": [ "about-prompts", @@ -544,21 +718,16 @@ "add-a-tool", "add-an-mcp-server-to-the-agent", "agents", - "ar-orbit", + "ar-stack", "arctl-cli", "artifact-registry-infrastructure", "artifacts", "backToTop", - "bb-panel", - "bb-panel-desc", - "bb-panel-link", - "bb-panel-title", "before-you-begin", "build-package-and-deploy", "build-the-agent-image", "build-the-image", "catalog", - "catalog-preview", "centralized-governance-and-curation", "challenges-with-ai-artifacts", "cleanup", @@ -578,10 +747,7 @@ "discovery-across-environments", "evaluation", "explore-the-ui", - "faqs", "favicon-svg", - "features", - "gateway", "get-started", "global-flags", "how-agentregistry-fills-the-gaps", @@ -603,7 +769,6 @@ "pnf-suggestion-list", "pnf-suggestions", "postgresql", - "preview-appbar", "prompts", "public-disclosure", "publish-the-agent", @@ -611,6 +776,8 @@ "publish-the-server", "publish-the-skill", "pull-a-skill-from-the-registry", + "qs-copy", + "qs-term", "quickstart", "register-the-remote-mcp-server", "registry-server", @@ -645,11 +812,14 @@ "tabs-tab-tabs-01-1", "tabs-tab-tabs-02-0", "tabs-tab-tabs-02-1", - "terminal", - "terminal-body", "test-the-deployed-server", "theme-toggle", + "top", "tribal-knowledge-and-informal-sharing", + "ui", + "ui-preview", + "ui-scroll", + "ui-url", "updates-and-questions", "usage", "verify-the-agent", diff --git a/layouts/index.html b/layouts/index.html index 7d9b65b..36a32b7 100644 --- a/layouts/index.html +++ b/layouts/index.html @@ -1,17 +1,16 @@ - + agentregistry — Build. Deploy. Discover. -{{- /* This is a standalone landing template that does NOT call the theme's - head.html, so the SEO metadata head.html normally emits is added here by - hand: description (from front matter), canonical, robots, OpenGraph, - schema.org JSON-LD, and the Twitter/X card. opengraph.html ships with - Hextra and works today; schema.html and twitter_cards.html are provided by - docs-theme-extras and start emitting once the extras pin is bumped (before - that they resolve to Hextra's empty stubs and emit nothing). Without this, - sharing the site root produced no social card despite the OG image. */ -}} +{{- /* Standalone landing template (does NOT go through the theme's head.html), + so the SEO metadata head.html normally emits is added here by hand: + description (from front matter), canonical, robots, OpenGraph, schema.org + JSON-LD and the Twitter/X card. Styling is Tailwind utilities compiled by + the same css.html pipeline the docs use; the `ar-*` design tokens (light + and dark palettes) live in assets/css/main.css. Layout follows the Solo.io + design-system landing ("Agentregistry Landing" in Claude Design). */ -}} {{- with .Params.canonical }} @@ -22,610 +21,738 @@ {{- partial "opengraph.html" . -}} {{- partial "schema.html" . -}} {{- partial "twitter_cards.html" . -}} - - + + + + +{{ with (templates.Defer (dict "key" "global")) }} + {{ partial "css.html" . }} +{{ end }} + - + +{{- /* ------------------------------------------------------------------ + Content data for the four scroll-driven "areas". Each area renders a + text block on the left and a terminal pane on the right (sticky on + desktop, inline on mobile) from this single source. Commands mirror + the real arctl CLI (`arctl get|init|apply|pull|build|wait`) and the + resource names are from the sample catalog. + ------------------------------------------------------------------ */ -}} +{{- $P := ` ` -}} +{{- $OK := ` ` -}} +{{- $cursor := `` -}} +{{- $muted := `%s` -}} +{{- $cmd := `%s` -}} +{{- $areas := slice + (dict + "id" "servers" + "icon" `` + "title" "MCP Tools & Servers" + "desc" "Pull servers from npm, PyPI, OCI, or a remote URL into a catalog your platform team controls, then deploy them as Kubernetes workloads." + "bullets" (slice + "Search the registry by name, publisher, or tool" + "Enrichment scores and verified-publisher signals on every entry" + "Deployed through kagent as native Kubernetes resources") + "termTitle" "~/registry — arctl" + "termMeta" "registry: registry.acme.dev" + "lines" (slice + (printf `%s%s` $P (printf $cmd "arctl get mcps")) + (printf $muted "NAME TAG DESCRIPTION") + `k8s-cluster-inspector latest Query live cluster state — pods, deployments...` + `k8s-helm-release-mgr latest List, diff, rollback, and explain Helm releases...` + ` ` + (printf `%s%s` $P (printf $cmd "arctl apply -f k8s-cluster-inspector/deployment.yaml")) + (printf `%sDeployment/k8s-cluster-inspector created` $OK) + ` ` + (printf `%s%s` $P (printf $cmd "arctl wait deployment k8s-cluster-inspector")) + (printf `%sdeployment k8s-cluster-inspector reached deployed on kubernetes-default` $OK) + ` ` + (printf `%s%s` $P $cursor))) + (dict + "id" "skills" + "icon" `` + "title" "Skills" + "desc" "Skills are versioned artifacts in the same catalog as everything else. Scaffold one, publish it, and anyone can pull it by name." + "bullets" (slice + `Scaffold with arctl init skill` + `Publish with a single arctl apply` + "Pull into a repo, or bundle into an agent blueprint") + "termTitle" "~/team-skills — arctl" + "termMeta" "registry: registry.acme.dev" + "lines" (slice + (printf `%s%s` $P (printf $cmd "arctl init skill k8s-runbook")) + (printf `%sCreated skill: k8s-runbook` $OK) + ` ` + (printf `%s%s` $P (printf $cmd "arctl apply -f k8s-runbook/skill.yaml")) + (printf `%sSkill/k8s-runbook (latest) created` $OK) + ` ` + (printf `%s%s` $P (printf $cmd "arctl get skills")) + (printf $muted "NAME TAG DESCRIPTION") + `k8s-runbook latest Playbook for CrashLoopBackOff, ImagePullBackOff...` + `k8s-yaml-review latest Review Deployments, HPA, PDB, and NetworkPolicy...` + ` ` + (printf `%s%s` $P (printf $cmd "arctl pull skill k8s-yaml-review ./.claude/skills")) + (printf `%spulled skill/k8s-yaml-review (latest) into ./.claude/skills` $OK) + ` ` + (printf `%s%s` $P $cursor))) + (dict + "id" "agents" + "icon" `` + "title" "Agents" + "desc" "A blueprint records what an agent is — its identity, model, servers, skills, and prompts. Deploy it and kagent materialises it as native Kubernetes resources." + "bullets" (slice + `Build, push, and version blueprints with arctl` + "One registry, many connected clusters" + "Approve before deploy, with publisher and trust signals") + "termTitle" "~/agents — arctl" + "termMeta" "runtime: kubernetes-default" + "lines" (slice + (printf `%s%s` $P (printf $cmd "arctl init agent k8sops --framework adk --language python")) + (printf `%sCreated agent: k8sops (framework: adk, language: python)` $OK) + ` ` + (printf `%s%s` $P (printf $cmd "arctl build ./k8sops --push")) + (printf `%spushed ghcr.io/acme/k8sops:latest` $OK) + ` ` + (printf `%s%s` $P (printf $cmd "arctl apply -f k8sops/agent.yaml -f k8sops/deployment.yaml")) + (printf `%sAgent/k8sops (latest) created` $OK) + (printf `%sDeployment/k8sops-agent created` $OK) + ` ` + (printf `%s%s` $P (printf $cmd "arctl get deployments")) + (printf $muted "NAME TARGET VERSION TYPE RUNTIME STATUS") + `default/k8sops-agent k8sops latest agent kubernetes-default deployed` + ` ` + (printf `%s%s` $P $cursor))) + (dict + "id" "prompts" + "icon" `` + "title" "Prompts" + "desc" "Publish a prompt once and every agent referencing it picks up the pinned tag. Review the change before it ships." + "bullets" (slice + "Tagged versions, pinned per agent" + "See which agents consume each version" + "Served to clients through the registry MCP server") + "termTitle" "~/prompts — arctl" + "termMeta" "registry: registry.acme.dev" + "lines" (slice + (printf `%s%s` $P (printf $cmd `arctl init prompt k8s-sre-operator --description "Careful Kubernetes operator"`)) + (printf `%sCreated prompt: k8s-sre-operator` $OK) + ` ` + (printf `%s%s` $P (printf $cmd "arctl apply -f k8s-sre-operator.yaml")) + (printf `%sPrompt/k8s-sre-operator (latest) created` $OK) + ` ` + (printf `%s%s` $P (printf $cmd "arctl get prompts")) + (printf $muted "NAME TAG DESCRIPTION") + `k8s-sre-operator latest System prompt for a careful Kubernetes operator...` + `k8s-platform-engineer latest System prompt for Helm, GitOps, and golden-path...` + ` ` + (printf `%s%s` $P (printf $cmd "arctl get prompt k8s-sre-operator -o yaml")) + (printf $muted "apiVersion: ar.dev/v1alpha1") + (printf $muted "kind: Prompt") + ` ` + (printf `%s%s` $P $cursor))) +-}} + +{{- /* Terminal pane: chrome bar + monospace body. `.` is an area dict. */ -}} +{{- define "partials/ar-terminal.html" }} +
+
+ + + + {{ .termTitle }} + +
+
+ {{- range .lines -}}
{{ . | safeHTML }}
{{- end }} +
+
+{{- end }} + + - + + +
-
-
-
-
-
- agentregistry -

Build. Deploy. Discover.

-

- One registry for MCP servers, agents, skills, and prompts. Curate the AI building blocks your team trusts, deploy them with one command, and wire them into every IDE. -

- +
+
+
+
+
+ +
+ agentregistry + +

Build. Deploy. Discover.

+

One Kubernetes-native registry for MCP servers, agents, skills, and prompts. Curate the AI building blocks your team trusts, then deploy them into your cluster through kagent with one command.

+
+ $ + helm install agentregistry oci://ghcr.io/agentregistry-dev/agentregistry/charts/agentregistry +
- - -
-
-
-
- ~/registry — arctl -
- Open source -
-
-
-
+ +
- -
-
-
-

One source for every AI building block.

-

Agents, MCP tools, skills, and prompts — all curated in one registry your team can search, version, and deploy with a single command.

-
- -
- -
- - agentregistry - - - - -
- - -
-

Agents

-

Identity, servers, skills, and prompts bundled into one deployable unit. Build, push, and version with arctl.

- - Read the docs - - + +
+
+ {{- range $i, $a := $areas }} +
+
+

+ + {{ $a.title | safeHTML }} +

+

{{ $a.desc }}

+
    + {{- range $a.bullets }} +
  • + + {{ . | safeHTML }} +
  • + {{- end }} +
+
+ {{- /* Inline pane for narrow screens; the sticky stack takes over on lg+. */}} +
{{ partial "ar-terminal.html" $a }}
+ {{- end }} +
+ {{- /* Sticky terminal stack. Panes share one grid cell so the stack is as + tall as the tallest pane — no fixed height, no empty space. */}} +
- -
-
-
-

A catalog your developers want to browse.

-

A built-in web UI to build, deploy, and create agents, servers, skills, and prompts — search the registry, kick off deployments, and track what's running, all without leaving the browser.

+ +
+
+
+

A catalog your developers want to browse.

+

Browse and search the catalog, manage artifacts, and deploy agents and MCP servers into a connected cluster — without leaving the browser.

-
-
-
-
localhost:12121 / catalog
-
+ {{- /* Web UI demo: every view is a live capture of the registry UI (both + themes) with clickable regions over the UI's own controls, measured + from the running app. List views are full-page captures and scroll + inside the frame; panels and dialogs are viewport captures. */ -}} + {{- $views := slice + (dict "id" "servers" "label" "Servers" "h" 1473 "icon" (index $areas 0).icon) + (dict "id" "skills" "label" "Skills" "h" 1473 "icon" (index $areas 1).icon) + (dict "id" "agents" "label" "Agents" "h" 1473 "icon" (index $areas 2).icon) + (dict "id" "prompts" "label" "Prompts" "h" 1473 "icon" (index $areas 3).icon) + (dict "id" "deployed" "label" "Deployed" "h" 2236 "icon" ``) + (dict "id" "servers-detail-overview" "label" "Server details — Overview" "h" 900 "hidden" true) + (dict "id" "servers-detail-package" "label" "Server details — Package" "h" 900 "hidden" true) + (dict "id" "servers-detail-raw" "label" "Server details — Raw" "h" 900 "hidden" true) + (dict "id" "deploy-servers" "label" "Deploy server" "h" 900 "hidden" true) + (dict "id" "deploy-servers-target" "label" "Deploy server — choose target" "h" 900 "hidden" true) + (dict "id" "skills-detail-overview" "label" "Skill details — Overview" "h" 900 "hidden" true) + (dict "id" "skills-detail-raw" "label" "Skill details — Raw" "h" 900 "hidden" true) + (dict "id" "agents-detail-overview" "label" "Agent details — Overview" "h" 900 "hidden" true) + (dict "id" "agents-detail-technical" "label" "Agent details — Technical" "h" 900 "hidden" true) + (dict "id" "agents-detail-raw" "label" "Agent details — Raw" "h" 900 "hidden" true) + (dict "id" "deploy-agents" "label" "Deploy agent" "h" 900 "hidden" true) + (dict "id" "deploy-agents-target" "label" "Deploy agent — choose target" "h" 900 "hidden" true) + (dict "id" "prompts-detail-overview" "label" "Prompt details — Overview" "h" 900 "hidden" true) + (dict "id" "prompts-detail-raw" "label" "Prompt details — Raw" "h" 900 "hidden" true) + (dict "id" "add-menu" "label" "Add menu" "h" 900 "hidden" true) + (dict "id" "add-server" "label" "Add server" "h" 900 "hidden" true) + (dict "id" "add-server-package" "label" "Add a server — package" "h" 900 "hidden" true) + (dict "id" "add-skill" "label" "Add skill" "h" 900 "hidden" true) + (dict "id" "add-agent" "label" "Add agent" "h" 900 "hidden" true) + (dict "id" "add-prompt" "label" "Add prompt" "h" 900 "hidden" true) + -}} + {{- $hot := dict + "servers" (slice + (dict "go" "servers" "label" "Servers tab" "l" 3.06 "t" 4.96 "w" 10.12 "h" 3.22) + (dict "go" "skills" "label" "Skills tab" "l" 13.45 "t" 4.96 "w" 8.89 "h" 3.22) + (dict "go" "agents" "label" "Agents tab" "l" 22.62 "t" 4.96 "w" 9.92 "h" 3.22) + (dict "go" "prompts" "label" "Prompts tab" "l" 32.81 "t" 4.96 "w" 10.66 "h" 3.22) + (dict "go" "deployed" "label" "Deployed" "l" 25.7 "t" 0.73 "w" 6.59 "h" 2.34) + (dict "go" "add-menu" "label" "Add" "l" 87.93 "t" 5.21 "w" 6.24 "h" 2.17) + (dict "go" "servers-detail-overview" "label" "Open doKnowledge SearchSemantic search across" "l" 3 "t" 17.99 "w" 86 "h" 5.77) + (dict "go" "deploy-servers" "label" "Deploy doKnowledge SearchSemantic search across" "l" 91.29 "t" 14.22 "w" 5.66 "h" 1.9) + ) + "skills" (slice + (dict "go" "servers" "label" "Servers tab" "l" 3.06 "t" 4.96 "w" 10.12 "h" 3.22) + (dict "go" "skills" "label" "Skills tab" "l" 13.45 "t" 4.96 "w" 8.89 "h" 3.22) + (dict "go" "agents" "label" "Agents tab" "l" 22.62 "t" 4.96 "w" 9.92 "h" 3.22) + (dict "go" "prompts" "label" "Prompts tab" "l" 32.81 "t" 4.96 "w" 10.66 "h" 3.22) + (dict "go" "deployed" "label" "Deployed" "l" 25.7 "t" 0.73 "w" 6.59 "h" 2.34) + (dict "go" "add-menu" "label" "Add" "l" 87.93 "t" 5.21 "w" 6.24 "h" 2.17) + (dict "go" "skills-detail-overview" "label" "Open RFC WriterTurn a design discussion into " "l" 3 "t" 17.99 "w" 90 "h" 5.77) + ) + "agents" (slice + (dict "go" "servers" "label" "Servers tab" "l" 3.06 "t" 4.96 "w" 10.12 "h" 3.22) + (dict "go" "skills" "label" "Skills tab" "l" 13.45 "t" 4.96 "w" 8.89 "h" 3.22) + (dict "go" "agents" "label" "Agents tab" "l" 22.62 "t" 4.96 "w" 9.92 "h" 3.22) + (dict "go" "prompts" "label" "Prompts tab" "l" 32.81 "t" 4.96 "w" 10.66 "h" 3.22) + (dict "go" "deployed" "label" "Deployed" "l" 25.7 "t" 0.73 "w" 6.59 "h" 2.34) + (dict "go" "add-menu" "label" "Add" "l" 87.93 "t" 5.21 "w" 6.24 "h" 2.17) + (dict "go" "agents-detail-overview" "label" "Open costopsShows spend by team and namespace" "l" 3 "t" 17.99 "w" 86 "h" 5.77) + (dict "go" "deploy-agents" "label" "Deploy costopsShows spend by team and namespace" "l" 91.29 "t" 14.22 "w" 5.66 "h" 1.9) + ) + "prompts" (slice + (dict "go" "servers" "label" "Servers tab" "l" 3.06 "t" 4.96 "w" 10.12 "h" 3.22) + (dict "go" "skills" "label" "Skills tab" "l" 13.45 "t" 4.96 "w" 8.89 "h" 3.22) + (dict "go" "agents" "label" "Agents tab" "l" 22.62 "t" 4.96 "w" 9.92 "h" 3.22) + (dict "go" "prompts" "label" "Prompts tab" "l" 32.81 "t" 4.96 "w" 10.66 "h" 3.22) + (dict "go" "deployed" "label" "Deployed" "l" 25.7 "t" 0.73 "w" 6.59 "h" 2.34) + (dict "go" "add-menu" "label" "Add" "l" 87.93 "t" 5.21 "w" 6.24 "h" 2.17) + (dict "go" "prompts-detail-overview" "label" "Open docs-technical-writerSystem prompt for p" "l" 3 "t" 17.99 "w" 90 "h" 5.77) + ) + "deployed" (slice + (dict "go" "servers" "label" "Catalog" "l" 19.75 "t" 0.48 "w" 5.67 "h" 1.54) + ) + "servers-detail-overview" (slice + (dict "go" "servers" "label" "Close" "l" 97.78 "t" 1.78 "w" 1.11 "h" 1.78) + (dict "go" "servers-detail-overview" "label" "Overview tab" "l" 55.35 "t" 18.06 "w" 6.12 "h" 3.56) + (dict "go" "servers-detail-package" "label" "Package tab" "l" 61.74 "t" 18.06 "w" 5.74 "h" 3.56) + (dict "go" "servers-detail-raw" "label" "Raw tab" "l" 67.76 "t" 18.06 "w" 3.66 "h" 3.56) + ) + "servers-detail-package" (slice + (dict "go" "servers" "label" "Close" "l" 97.78 "t" 1.78 "w" 1.11 "h" 1.78) + (dict "go" "servers-detail-overview" "label" "Overview tab" "l" 55.35 "t" 18.06 "w" 6.12 "h" 3.56) + (dict "go" "servers-detail-package" "label" "Package tab" "l" 61.74 "t" 18.06 "w" 5.74 "h" 3.56) + (dict "go" "servers-detail-raw" "label" "Raw tab" "l" 67.76 "t" 18.06 "w" 3.66 "h" 3.56) + ) + "servers-detail-raw" (slice + (dict "go" "servers" "label" "Close" "l" 97.78 "t" 1.78 "w" 1.11 "h" 1.78) + (dict "go" "servers-detail-overview" "label" "Overview tab" "l" 55.35 "t" 18.06 "w" 6.12 "h" 3.56) + (dict "go" "servers-detail-package" "label" "Package tab" "l" 61.74 "t" 18.06 "w" 5.74 "h" 3.56) + (dict "go" "servers-detail-raw" "label" "Raw tab" "l" 67.76 "t" 18.06 "w" 3.66 "h" 3.56) + ) + "deploy-servers" (slice + (dict "go" "deploy-servers-target" "label" "Select target" "l" 36.81 "t" 43.56 "w" 26.38 "h" 4) + (dict "go" "servers" "label" "Cancel" "l" 46.98 "t" 63.33 "w" 5.51 "h" 4.44) + ) + "deploy-servers-target" (slice + (dict "go" "deploy-servers" "label" "Kubernetes" "l" 37.15 "t" 48.56 "w" 25.83 "h" 3.56) + (dict "go" "servers" "label" "Cancel" "l" 46.98 "t" 63.33 "w" 5.51 "h" 4.44) + ) + "skills-detail-overview" (slice + (dict "go" "skills" "label" "Close" "l" 97.78 "t" 1.78 "w" 1.11 "h" 1.78) + (dict "go" "skills-detail-overview" "label" "Overview tab" "l" 55.35 "t" 18.06 "w" 6.12 "h" 3.56) + (dict "go" "skills-detail-raw" "label" "Raw tab" "l" 61.74 "t" 18.06 "w" 3.66 "h" 3.56) + ) + "skills-detail-raw" (slice + (dict "go" "skills" "label" "Close" "l" 97.78 "t" 1.78 "w" 1.11 "h" 1.78) + (dict "go" "skills-detail-overview" "label" "Overview tab" "l" 55.35 "t" 18.06 "w" 6.12 "h" 3.56) + (dict "go" "skills-detail-raw" "label" "Raw tab" "l" 61.74 "t" 18.06 "w" 3.66 "h" 3.56) + ) + "agents-detail-overview" (slice + (dict "go" "agents" "label" "Close" "l" 97.78 "t" 1.78 "w" 1.11 "h" 1.78) + (dict "go" "agents-detail-overview" "label" "Overview tab" "l" 55.35 "t" 18.06 "w" 6.12 "h" 3.56) + (dict "go" "agents-detail-technical" "label" "Technical tab" "l" 61.74 "t" 18.06 "w" 6.01 "h" 3.56) + (dict "go" "agents-detail-raw" "label" "Raw tab" "l" 68.03 "t" 18.06 "w" 3.66 "h" 3.56) + ) + "agents-detail-technical" (slice + (dict "go" "agents" "label" "Close" "l" 97.78 "t" 1.78 "w" 1.11 "h" 1.78) + (dict "go" "agents-detail-overview" "label" "Overview tab" "l" 55.35 "t" 18.06 "w" 6.12 "h" 3.56) + (dict "go" "agents-detail-technical" "label" "Technical tab" "l" 61.74 "t" 18.06 "w" 6.01 "h" 3.56) + (dict "go" "agents-detail-raw" "label" "Raw tab" "l" 68.03 "t" 18.06 "w" 3.66 "h" 3.56) + ) + "agents-detail-raw" (slice + (dict "go" "agents" "label" "Close" "l" 97.78 "t" 1.78 "w" 1.11 "h" 1.78) + (dict "go" "agents-detail-overview" "label" "Overview tab" "l" 55.35 "t" 18.06 "w" 6.12 "h" 3.56) + (dict "go" "agents-detail-technical" "label" "Technical tab" "l" 61.74 "t" 18.06 "w" 6.01 "h" 3.56) + (dict "go" "agents-detail-raw" "label" "Raw tab" "l" 68.03 "t" 18.06 "w" 3.66 "h" 3.56) + ) + "deploy-agents" (slice + (dict "go" "deploy-agents-target" "label" "Select target" "l" 37.78 "t" 43.56 "w" 24.44 "h" 4) + (dict "go" "agents" "label" "Cancel" "l" 46.2 "t" 63.33 "w" 5.51 "h" 4.44) + ) + "deploy-agents-target" (slice + (dict "go" "deploy-agents" "label" "Kubernetes" "l" 38.13 "t" 48.56 "w" 23.89 "h" 3.56) + (dict "go" "agents" "label" "Cancel" "l" 46.2 "t" 63.33 "w" 5.51 "h" 4.44) + ) + "prompts-detail-overview" (slice + (dict "go" "prompts" "label" "Close" "l" 97.78 "t" 1.78 "w" 1.11 "h" 1.78) + (dict "go" "prompts-detail-overview" "label" "Overview tab" "l" 55.35 "t" 18.06 "w" 6.12 "h" 3.56) + (dict "go" "prompts-detail-raw" "label" "Raw tab" "l" 61.74 "t" 18.06 "w" 3.66 "h" 3.56) + ) + "prompts-detail-raw" (slice + (dict "go" "prompts" "label" "Close" "l" 97.78 "t" 1.78 "w" 1.11 "h" 1.78) + (dict "go" "prompts-detail-overview" "label" "Overview tab" "l" 55.35 "t" 18.06 "w" 6.12 "h" 3.56) + (dict "go" "prompts-detail-raw" "label" "Raw tab" "l" 61.74 "t" 18.06 "w" 3.66 "h" 3.56) + ) + "add-menu" (slice + (dict "go" "servers" "label" "Close menu" "l" 87.93 "t" 8.53 "w" 6.24 "h" 3.56) + (dict "go" "add-server" "label" "Add server" "l" 85.63 "t" 13.11 "w" 8.19 "h" 3.56) + (dict "go" "add-skill" "label" "Add skill" "l" 85.63 "t" 16.67 "w" 8.19 "h" 3.56) + (dict "go" "add-agent" "label" "Add agent" "l" 85.63 "t" 20.22 "w" 8.19 "h" 3.56) + (dict "go" "add-prompt" "label" "Add prompt" "l" 85.63 "t" 23.78 "w" 8.19 "h" 3.56) + ) + "add-server" (slice + (dict "go" "servers" "label" "Cancel" "l" 72.9 "t" 78.89 "w" 5.64 "h" 4.44) + (dict "go" "add-server-package" "label" "Add package" "l" 77.16 "t" 65.44 "w" 9.37 "h" 4) + ) + "add-server-package" (slice + (dict "go" "servers" "label" "Cancel" "l" 72.9 "t" 87.28 "w" 5.64 "h" 4.44) + ) + "add-skill" (slice + (dict "go" "servers" "label" "Cancel" "l" 59.21 "t" 77.89 "w" 5.64 "h" 4.44) + ) + "add-agent" (slice + (dict "go" "servers" "label" "Cancel" "l" 48.04 "t" 74.78 "w" 5.64 "h" 4.44) + ) + "add-prompt" (slice + (dict "go" "servers" "label" "Cancel" "l" 57.56 "t" 83 "w" 5.64 "h" 4.44) + ) + -}} + +
+
+ {{- range $i, $v := $views }}{{ if not $v.hidden }} + + {{- end }}{{ end }}
- -
-
- agentregistry -
-
- - +
+
+ + + +
registry.acme.dev / catalog / servers
-
- + {{- /* The frame keeps the app's 1440x900 aspect; taller captures scroll inside it. */}} +
+ {{- range $i, $v := $views }} +
+ The agentregistry web UI — {{ $v.label }} + + {{- range (index $hot $v.id) }} + + {{- end }} +
+ {{- end }}
- -
-
-
-
- - -
-
-
-

Curate centrally. Ship locally.

-

Platform teams stay in control of what's approved; developers get one place to discover and deploy. The same registry powers both.

+

Click around the window — tabs, rows, detail tabs, Deploy, and Add all work like the real UI, and the lists scroll.

-
-
-
FOR ORGANIZATIONS
-

Curate & deploy.

-

Package, collect, and enrich AI artifacts from any source — into a single registry your whole company can trust.

-
    -
  • Approve agents, servers, and skills before company-wide deployment
  • -
  • Add metadata that helps assess trustworthiness and security
  • -
  • Same source of truth across local dev and Kubernetes
  • -
  • Verified-org and verified-publisher signals built in
  • -
-
-
1Import
-
2Enrich
-
3Curate
-
4Publish
-
5Deploy
-
- Read the platform guide → +
+
+ Registry UI + Browse the catalog, manage artifacts, deploy agents and MCP servers.
- -
-
FOR DEVELOPERS
-

Build & publish.

-

Scaffold, test, publish, and deploy AI artifacts with minimal dependencies and no manual IDE wiring.

-
    -
  • Scaffold with arctl init agent or arctl init skill
  • -
  • Publish with a single arctl apply
  • -
  • Pull and run anywhere — laptop, kind cluster, or prod
  • -
  • Auto-configure Claude Desktop, Cursor, and VS Code
  • -
-
-
1Build
-
2Push
-
3Pull
-
4Run
-
- Read the developer guide → -
-
-
-
- - -
-
-
-
-
-
1
-
-

Install the CLI

-

One-line install. arctl drops into your $PATH and starts the local daemon on first run.

-
-
-
-
2
-
-

Start the daemon

-

Any arctl command boots the registry. The web UI is exposed automatically.

-
-
-
-
3
-
-

Open the UI & deploy

-

Visit localhost:12121 and deploy any approved server or agent. Your IDE picks it up through the gateway.

-
-
-
-
-
-

Configure your IDE

-

Run arctl configure cursor (or vscode, claude) and you're done. New deployments are picked up automatically.

-
-
+
+ arctl CLI + Scaffold, build, publish, pull, deploy — and script it all in CI/CD.
- -
-
- - # 1. Install the CLI
- curl -fsSL https://raw.githubusercontent.com/agentregistry-dev/agentregistry/main/scripts/get-arctl | bash
-
- # 2. Start the daemon
- arctl daemon start
- ✓ daemon running · http://localhost:12121
-
- # 3. Verify it's up
- arctl version
-
- # 4. Open the UI
- open http://localhost:12121
-
- # 5. Wire it into your IDE
- arctl configure cursor
- ✓ Cursor configured · 7 servers, 3 agents available -
+
+ REST API + The same capabilities as the UI and CLI, for your own portals.
- -
-
-
-

One secure endpoint for every approved server.

-

Instead of exposing each MCP server, agentregistry routes everything through agentgateway — an AI-native reverse proxy. Your clients connect to one URL, gateway enforces auth, and new deployments are picked up automatically.

-
- -
- -
- - - Cursor - - - - VS Code - - - - Claude Code - - - - OpenCode - - - - arctl CLI - - - - Any MCP client - -
- -
- - -
- -
Secure AI endpoint
-
Single MCP endpoint · LLM Gateway · Tool routing · Auth
-
- -
- - -
-
-
- - agentregistry -
-
Registry server · Web UI
Enrichment · Governance
-
- -
-
-
- -
- Agents + +
+
+
+

Ship your first agent in five minutes.

+

Install the control plane with Helm, connect kagent as a runtime, then deploy an approved MCP server from the UI. Your IDE picks it up through the registry MCP server.

+
    +
  1. + 01 +
    + Install on Kubernetes + Helm installs the registry server and PostgreSQL into the agentregistry namespace.
    -
    -
    - -
    - Skills +
  2. +
  3. + 02 +
    + Connect a runtime + Install kagent in the cluster. The built-in kubernetes-default runtime deploys agents and MCP servers through it.
    -
    -
    - -
    - MCP servers +
  4. +
  5. + 03 +
    + Open the UI and deploy + Port-forward 12121, browse the catalog, deploy anything approved.
    -
    -
    - -
    - Prompts +
  6. +
  7. + 04 +
    + Configure your IDE + Run arctl configure cursor --port 31313 — or vscode, claude-code, kiro.
    -
-
- -
- - -
- Docker - Kubernetes - Any cloud -
+ + + Read the full quickstart
- -
-
- - -
-
-
-

Frequently asked questions

-
- -
-
- -

An open-source platform that gives your team one place to find, manage, and run MCP servers, AI agents, skills, and prompts. You import or publish artifacts once, and anyone on the team can discover them, deploy them with one command, and have their IDE configured automatically.

-
- -
- -

agentregistry doesn't replace those — it sits on top of them. It pulls MCP servers from npm, PyPI, OCI, or remote endpoints into a single curated catalog with versioning, enrichment scores, verified publishers, and a one-command deploy path. Plus it ships with the agentgateway integration that makes those artifacts actually usable from Claude, Cursor, and VS Code.

+
+
+ + + + ~ — arctl +
- -
- -

Both — the workflow is identical. Locally, arctl brings up the daemon, web UI, and gateway via Docker Compose. For shared environments, deploy the same components into Kubernetes with the Helm chart. The same registry data and deployment YAML work in both places.

-
- -
- -

A blueprint is the versioned record of what an agent is — its identity, the MCP servers it needs, the skills it uses, and how it should be configured. A deployment is a running instance of that blueprint, scheduled into a specific environment with credentials and gateway routing wired up.

-
- -
- -

Yes. You can register servers from any internal OCI registry, npm proxy, private repo, or HTTP endpoint. The same governance and gateway flow applies — no public publishing required.

-
- -
- -

Yes — Apache 2.0. The CLI, daemon, web UI, and Helm chart are all in the agentregistry-dev/agentregistry repo. Contributions, issues, and feature requests are welcome.

+
+
# 1. Install the control plane
+
{{ $P | safeHTML }}helm install agentregistry \
+
oci://ghcr.io/agentregistry-dev/agentregistry/charts/agentregistry \
+
--namespace agentregistry --create-namespace
+
{{ $OK | safeHTML }}registry server ready · postgres ready
+
+
# 2. Verify the kagent-backed runtime
+
{{ $P | safeHTML }}arctl get runtimes
+
NAME TYPE
+
kubernetes-default Kubernetes
+
+
# 3. Open the UI and the registry MCP server
+
{{ $P | safeHTML }}kubectl port-forward -n agentregistry svc/agentregistry 12121 31313
+
ui: http://localhost:12121
+
mcp: http://localhost:31313
+
+
# 4. Wire it into your IDE
+
{{ $P | safeHTML }}arctl configure cursor --port 31313
+
{{ $OK | safeHTML }}cursor configured for http://localhost:31313/mcp
+
+
{{ $P | safeHTML }}{{ $cursor | safeHTML }}
- -
-
-
-
-
- Get started -

Ship your first agent in five minutes.

-

Install the CLI, open the web UI, deploy an approved MCP server. Your IDE is wired up automatically through the gateway.

- -
-
- curl -fsSL aregistry.ai/install | bash
- arctl version
- agentregistry v0.9.0 · daemon running
- web ui: http://localhost:12121
- arctl configure cursor
- ✓ 7 servers, 3 agents available -
-
+ +
+
+

One control plane for every AI building block.

+

Install once, connect your clusters, and give every developer one place to discover and deploy.

+
+
-