docs: rework homepage and add aaif migration blog post (#8356)

Signed-off-by: Michael Neale <michael.neale@gmail.com>
This commit is contained in:
Michael Neale
2026-04-07 17:18:04 +10:00
committed by GitHub
parent 583acd4335
commit 7449a96664
15 changed files with 822 additions and 115 deletions
@@ -31,7 +31,7 @@ For cases when it's a large pull request, or I don't understand what is going on
E.g
```
Hey Goose, this pull request https://github.com/block/goose/pull/1949, has a lot of changes. Can you summarize into a changelog for me?
Hey Goose, this pull request https://github.com/aaif-goose/goose/pull/1949, has a lot of changes. Can you summarize into a changelog for me?
```
## Knowledge Graph Memory: Context on Steroids
@@ -329,7 +329,7 @@ Wanna see it in action?
Download [goose](/docs/quickstart#install-goose), give an MCP server a UI facelift of your own, and see the magic for yourself. Boring text prompts will never hit the same again.
*Got questions?* Explore our [docs](/docs/category/guides), browse the [blog](/blog), or join the conversation in our [Discord](https://discord.gg/goose-oss) and [GitHub Discussions](https://github.com/block/goose/discussions). We’d love to have you.
*Got questions?* Explore our [docs](/docs/category/guides), browse the [blog](/blog), or join the conversation in our [Discord](https://discord.gg/goose-oss) and [GitHub Discussions](https://github.com/aaif-goose/goose/discussions). We’d love to have you.
<head>
@@ -0,0 +1,38 @@
---
title: "goose repo and site migrating to aaif"
description: "goose has moved to the Agentic AI Foundation (aaif) at the Linux Foundation"
authors:
- mic
---
goose has moved! The project now lives under the [Agentic AI Foundation (AAIF)](https://aaif.io/) at the Linux Foundation.
There is also a new docs site [https://goose-docs.ai/](https://goose-docs.ai/) with a nice .ai TLD!
<!-- truncate -->
## What's changed
The GitHub repository and related projects have moved from `block/goose` to a new org:
**[https://github.com/aaif-goose/goose](https://github.com/aaif-goose/goose)**
This includes related repositories in the [aaif-goose](https://github.com/aaif-goose) organization.
Everything else — the project, the community, the mission — remains the same. goose is still open source, still actively developed, and still the same agent you know.
## Migration in progress
We're still working through some migration issues (broken links, redirects, CI, etc). If you hit anything that seems off, please reach out on [Discord](https://discord.gg/goose-oss) and let us know.
## Update your remotes
If you have a local clone, update your git remote:
```bash
git remote set-url origin git@github.com:aaif-goose/goose.git
```
## Learn more
Visit [aaif.io](https://aaif.io/) to learn more about the foundation and its mission.
+1 -1
View File
@@ -44,7 +44,7 @@ import styles from '@site/src/components/Card/styles.module.css';
<Card
title="GitHub Issues"
description="Browse existing issues, contribute to discussions, or create new bug reports and feature requests on our GitHub repository."
link="https://github.com/block/goose/issues"
link="https://github.com/aaif-goose/goose/issues"
/>
</div>
</div>
+32 -2
View File
@@ -250,6 +250,7 @@
"resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.42.0.tgz",
"integrity": "sha512-NZR7yyHj2WzK6D5X8gn+/KOxPdzYEXOqVdSaK/biU8QfYUpUuEA0sCWg/XlO05tPVEcJelF/oLrrNY3UjRbOww==",
"license": "MIT",
"peer": true,
"dependencies": {
"@algolia/client-common": "5.42.0",
"@algolia/requester-browser-xhr": "5.42.0",
@@ -387,6 +388,7 @@
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz",
"integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==",
"license": "MIT",
"peer": true,
"dependencies": {
"@babel/code-frame": "^7.27.1",
"@babel/generator": "^7.28.5",
@@ -2176,6 +2178,7 @@
}
],
"license": "MIT",
"peer": true,
"engines": {
"node": ">=18"
},
@@ -2198,6 +2201,7 @@
}
],
"license": "MIT",
"peer": true,
"engines": {
"node": ">=18"
}
@@ -2307,6 +2311,7 @@
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz",
"integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==",
"license": "MIT",
"peer": true,
"dependencies": {
"cssesc": "^3.0.0",
"util-deprecate": "^1.0.2"
@@ -2728,6 +2733,7 @@
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz",
"integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==",
"license": "MIT",
"peer": true,
"dependencies": {
"cssesc": "^3.0.0",
"util-deprecate": "^1.0.2"
@@ -3688,6 +3694,7 @@
"resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.9.2.tgz",
"integrity": "sha512-C5wZsGuKTY8jEYsqdxhhFOe1ZDjH0uIYJ9T/jebHwkyxqnr4wW0jTkB72OMqNjsoQRcb0JN3PcSeTwFlVgzCZg==",
"license": "MIT",
"peer": true,
"dependencies": {
"@docusaurus/core": "3.9.2",
"@docusaurus/logger": "3.9.2",
@@ -5032,6 +5039,7 @@
"resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.1.tgz",
"integrity": "sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==",
"license": "MIT",
"peer": true,
"dependencies": {
"@types/mdx": "^2.0.0"
},
@@ -5366,6 +5374,7 @@
"resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz",
"integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==",
"license": "MIT",
"peer": true,
"dependencies": {
"@babel/core": "^7.21.3",
"@svgr/babel-preset": "8.1.0",
@@ -5728,6 +5737,7 @@
"resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.2.tgz",
"integrity": "sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==",
"license": "MIT",
"peer": true,
"dependencies": {
"csstype": "^3.0.2"
}
@@ -6078,6 +6088,7 @@
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
"license": "MIT",
"peer": true,
"bin": {
"acorn": "bin/acorn"
},
@@ -6163,6 +6174,7 @@
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz",
"integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==",
"license": "MIT",
"peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1",
@@ -6208,6 +6220,7 @@
"resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.42.0.tgz",
"integrity": "sha512-X5+PtWc9EJIPafT/cj8ZG+6IU3cjRRnlHGtqMHK/9gsiupQbAyYlH5y7qt/FtsAhfX5AICHffZy69ZAsVrxWkQ==",
"license": "MIT",
"peer": true,
"dependencies": {
"@algolia/abtesting": "1.8.0",
"@algolia/client-abtesting": "5.42.0",
@@ -6706,6 +6719,7 @@
}
],
"license": "MIT",
"peer": true,
"dependencies": {
"baseline-browser-mapping": "^2.8.19",
"caniuse-lite": "^1.0.30001751",
@@ -7634,6 +7648,7 @@
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz",
"integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==",
"license": "MIT",
"peer": true,
"dependencies": {
"cssesc": "^3.0.0",
"util-deprecate": "^1.0.2"
@@ -7946,7 +7961,8 @@
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
"license": "MIT"
"license": "MIT",
"peer": true
},
"node_modules/debounce": {
"version": "1.2.1",
@@ -9031,6 +9047,7 @@
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz",
"integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==",
"license": "MIT",
"peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
@@ -13681,6 +13698,7 @@
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz",
"integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==",
"license": "MIT",
"peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
@@ -14251,6 +14269,7 @@
}
],
"license": "MIT",
"peer": true,
"dependencies": {
"nanoid": "^3.3.11",
"picocolors": "^1.1.1",
@@ -15263,6 +15282,7 @@
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz",
"integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==",
"license": "MIT",
"peer": true,
"dependencies": {
"cssesc": "^3.0.0",
"util-deprecate": "^1.0.2"
@@ -16080,6 +16100,7 @@
"resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz",
"integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==",
"license": "MIT",
"peer": true,
"engines": {
"node": ">=0.10.0"
}
@@ -16089,6 +16110,7 @@
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz",
"integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==",
"license": "MIT",
"peer": true,
"dependencies": {
"scheduler": "^0.27.0"
},
@@ -16161,6 +16183,7 @@
"resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz",
"integrity": "sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ==",
"license": "MIT",
"peer": true,
"dependencies": {
"@types/react": "*"
},
@@ -16216,6 +16239,7 @@
"resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz",
"integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==",
"license": "MIT",
"peer": true,
"dependencies": {
"@babel/runtime": "^7.12.13",
"history": "^4.9.0",
@@ -18190,7 +18214,8 @@
"version": "2.8.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
"integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
"license": "0BSD"
"license": "0BSD",
"peer": true
},
"node_modules/turndown": {
"version": "7.2.2",
@@ -18262,6 +18287,7 @@
"integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
"devOptional": true,
"license": "Apache-2.0",
"peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -18603,6 +18629,7 @@
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz",
"integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==",
"license": "MIT",
"peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
@@ -18810,6 +18837,7 @@
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.102.1.tgz",
"integrity": "sha512-7h/weGm9d/ywQ6qzJ+Xy+r9n/3qgp/thalBbpOi5i223dPXKi04IBtqPN9nTd+jBc7QKfvDbaBnFipYp4sJAUQ==",
"license": "MIT",
"peer": true,
"dependencies": {
"@types/eslint-scope": "^3.7.7",
"@types/estree": "^1.0.8",
@@ -19423,6 +19451,7 @@
"integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==",
"devOptional": true,
"license": "ISC",
"peer": true,
"bin": {
"yaml": "bin.mjs"
},
@@ -19462,6 +19491,7 @@
"resolved": "https://registry.npmjs.org/zod/-/zod-4.1.12.tgz",
"integrity": "sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==",
"license": "MIT",
"peer": true,
"funding": {
"url": "https://github.com/sponsors/colinhacks"
}
@@ -2,7 +2,7 @@ import Link from "@docusaurus/Link";
import { IconDownload } from "@site/src/components/icons/download";
import { useState, useEffect } from "react";
const FALLBACK_URL = "https://github.com/block/goose/releases/latest";
const FALLBACK_URL = "https://github.com/aaif-goose/goose/releases/latest";
const LinuxDesktopInstallButtons = () => {
const [downloadUrls, setDownloadUrls] = useState({
@@ -26,7 +26,7 @@ const LinuxDesktopInstallButtons = () => {
}
// Fetch latest release from GitHub API
const response = await fetch('https://api.github.com/repos/block/goose/releases/latest');
const response = await fetch('https://api.github.com/repos/aaif-goose/goose/releases/latest');
if (!response.ok) throw new Error('API request failed');
const release = await response.json();
@@ -8,13 +8,13 @@ const DesktopInstallButtons = () => {
<div className="pill-button" style={{ display: 'flex', gap: '0.5rem', flexWrap: 'wrap' }}>
<Link
className="button button--primary button--lg"
to="https://github.com/block/goose/releases/download/stable/Goose.zip"
to="https://github.com/aaif-goose/goose/releases/download/stable/Goose.zip"
>
<IconDownload /> macOS Silicon
</Link>
<Link
className="button button--primary button--lg"
to="https://github.com/block/goose/releases/download/stable/Goose_intel_mac.zip"
to="https://github.com/aaif-goose/goose/releases/download/stable/Goose_intel_mac.zip"
>
<IconDownload /> macOS Intel
</Link>
@@ -7,7 +7,7 @@ const SupportedEnvironments = () => {
The goose CLI currently works on <strong>macOS</strong> and <strong>Linux</strong> systems and supports both <strong>ARM</strong> and <strong>x86</strong> architectures.
On <strong>Windows</strong>, goose CLI can run via WSL, and goose Desktop is natively supported. If you'd like to request support for additional operating systems, please{" "}
<a
href="https://github.com/block/goose/discussions/867"
href="https://github.com/aaif-goose/goose/discussions/867"
target="_blank"
rel="noopener noreferrer"
>
@@ -8,7 +8,7 @@ const WindowsDesktopInstallButtons = () => {
<div className="pill-button">
<Link
className="button button--primary button--lg"
to="https://github.com/block/goose/releases/download/stable/Goose-win32-x64.zip"
to="https://github.com/aaif-goose/goose/releases/download/stable/Goose-win32-x64.zip"
>
<IconDownload /> Windows
</Link>
+377 -64
View File
@@ -1,98 +1,411 @@
/**
* CSS files with the .module.css suffix will be treated as CSS modules
* and scoped locally.
*/
* Homepage styles
*/
.header {
padding: 4rem 2rem;
}
.wrapper {
max-width: 1200px;
margin: 0 auto;
display: flex;
flex-wrap: wrap;
gap: 3rem;
justify-content: center;
align-items: center;
min-height: 400px;
}
.textColumn {
flex: 1 1 300px;
max-width: 500px;
/* Hero */
.hero {
padding: 5rem 2rem 3rem;
text-align: center;
}
.heroInner {
max-width: 800px;
margin: 0 auto;
display: flex;
flex-direction: column;
align-items: center;
margin-top: -40px;
}
.logo {
.heroBadge {
display: inline-block;
padding: 0.35rem 1rem;
border-radius: 999px;
border: 1px solid var(--border-subtle);
font-size: 0.8rem;
color: var(--text-subtle);
margin-bottom: 2rem;
letter-spacing: 0.02em;
}
.heroLogo {
max-width: 300px;
margin-bottom: 1.5rem;
}
.heroSubtitle {
font-size: 1.35rem;
line-height: 1.6;
color: var(--text-standard);
max-width: 600px;
margin-bottom: 2rem;
}
.heroActions {
display: flex;
gap: 1rem;
margin-bottom: 3rem;
flex-wrap: wrap;
justify-content: center;
}
.secondaryButton {
border-color: var(--border-standard);
color: var(--text-standard);
}
.heroStats {
display: flex;
gap: 2rem;
align-items: center;
flex-wrap: wrap;
justify-content: center;
}
.stat {
display: flex;
flex-direction: column;
align-items: center;
}
.subtitle {
.statNumber {
font-size: 1.5rem;
font-weight: 700;
color: var(--text-prominent);
}
.statLabel {
font-size: 0.85rem;
color: var(--text-subtle);
}
.statDivider {
width: 1px;
height: 2.5rem;
background: var(--border-subtle);
}
/* Sections */
.section {
padding: 4rem 2rem;
}
.sectionAlt {
background: var(--background-subtle);
}
.container {
max-width: 1100px;
margin: 0 auto;
}
.sectionTitle {
font-size: 1.75rem;
font-weight: 600;
text-align: center;
margin-bottom: 0.75rem;
color: var(--text-prominent);
}
.sectionSubtitle {
text-align: center;
max-width: 700px;
margin: 0 auto 2.5rem;
color: var(--text-subtle);
font-size: 1.05rem;
line-height: 1.6;
}
/* Features — top row (3 big cards) */
.featuresGridTop {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 2rem;
margin-bottom: 2rem;
}
.featureCard {
padding: 1.75rem;
border-radius: 12px;
border: 1px solid var(--border-subtle);
background: var(--background-app);
transition: border-color 0.2s ease;
}
.featureCard:hover {
border-color: var(--border-standard);
}
.featureIcon {
font-size: 1.5rem;
margin-bottom: 0.75rem;
}
.featureTitle {
font-size: 1.1rem;
font-weight: 600;
margin-bottom: 0.5rem;
color: var(--text-prominent);
}
.featureDescription {
font-size: 0.9rem;
color: var(--text-subtle);
line-height: 1.6;
}
.featureDescription p {
margin: 0;
}
.featureDescription a {
font-weight: 500;
}
/* Features — bottom row (4 smaller cards) */
.featuresGridBottom {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 1.5rem;
}
.smallCard {
padding: 1.25rem;
border-radius: 12px;
border: 1px solid var(--border-subtle);
background: var(--background-app);
transition: border-color 0.2s ease;
}
.smallCard:hover {
border-color: var(--border-standard);
}
.smallCardIcon {
font-size: 1.25rem;
margin-bottom: 0.5rem;
}
.smallCardTitle {
font-size: 0.95rem;
font-weight: 600;
margin-bottom: 0.4rem;
color: var(--text-prominent);
}
.smallCardDescription {
font-size: 0.85rem;
color: var(--text-subtle);
line-height: 1.55;
}
.smallCardDescription p {
margin: 0;
}
.smallCardDescription a {
font-weight: 500;
}
/* Standards Grid */
.standardsGrid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 2rem;
margin-top: 2rem;
}
.standardCard {
padding: 1.5rem;
border-radius: 12px;
border: 1px solid var(--border-subtle);
background: var(--background-app);
}
.standardCard h3 {
font-size: 1.1rem;
font-weight: 600;
margin-bottom: 0.75rem;
color: var(--text-prominent);
}
.standardCard p {
font-size: 0.9rem;
color: var(--text-subtle);
line-height: 1.6;
margin-bottom: 0.75rem;
}
.standardCard a {
font-size: 0.9rem;
font-weight: 500;
}
/* Community Grid */
.communityGrid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 1.5rem;
}
.communityCard {
padding: 1.5rem;
border-radius: 12px;
border: 1px solid var(--border-subtle);
background: var(--background-app);
text-decoration: none;
color: inherit;
transition: border-color 0.2s ease, transform 0.2s ease;
}
.communityCard:hover {
border-color: var(--border-standard);
transform: translateY(-2px);
text-decoration: none;
color: inherit;
}
.communityCard h3 {
font-size: 1rem;
font-weight: 600;
margin-bottom: 0.5rem;
color: var(--text-prominent);
}
.communityCard p {
font-size: 0.85rem;
color: var(--text-subtle);
line-height: 1.5;
margin: 0;
}
/* Install */
.installBlock {
max-width: 700px;
margin: 0 auto;
}
.installDesktop {
text-align: center;
margin-bottom: 1.5rem;
max-width: 30ch;
}
.videoColumn {
flex: 1 1 400px;
.installPlatforms {
margin-top: 0.75rem;
font-size: 0.9rem;
color: var(--text-subtle);
}
.installDivider {
text-align: center;
margin-bottom: 1.5rem;
font-size: 0.85rem;
color: var(--text-subtle);
}
.installTerminal {
border-radius: 12px;
overflow: hidden;
border: 1px solid var(--border-subtle);
background: var(--grey-10);
}
.terminalBar {
display: flex;
gap: 6px;
padding: 12px 16px;
background: var(--grey-20);
}
.terminalDot {
width: 10px;
height: 10px;
border-radius: 50%;
background: var(--grey-50);
}
.terminalBody {
padding: 1.25rem 1.5rem;
margin: 0;
font-size: 0.85rem;
line-height: 1.7;
color: #e0e0e0;
overflow-x: auto;
}
.installNote {
text-align: center;
margin-top: 1.25rem;
font-size: 0.9rem;
color: var(--text-subtle);
}
/* Video */
.videoWrapper {
max-width: 800px;
margin: 0 auto;
aspect-ratio: 16 / 9;
}
.video {
width: 100%;
max-width: 640px;
height: 100%;
border: none;
border-radius: 12px;
}
.aspect-ratio{
aspect-ratio: 16 / 9;
width: 100%;
}
/* Responsive */
@media (max-width: 996px) {
.featuresGridTop {
grid-template-columns: repeat(2, 1fr);
}
.featuresGridBottom {
grid-template-columns: repeat(2, 1fr);
}
@media screen and (max-width: 996px) {
.heroBanner {
padding: 2rem;
.standardsGrid {
grid-template-columns: repeat(2, 1fr);
}
.communityGrid {
grid-template-columns: repeat(2, 1fr);
}
}
@media screen and (max-width: 768px) {
.header {
padding: 1rem 1rem;
@media (max-width: 640px) {
.hero {
padding: 3rem 1.5rem 2rem;
}
.wrapper {
flex-direction: column;
text-align: center;
gap: 1rem;
padding: 1rem 1rem;
}
.textColumn {
text-align: center;
max-width: 100%;
flex: 1 1 400px;
margin-top: 0;
}
.subtitle {
.heroSubtitle {
font-size: 1.1rem;
line-height: 1.5;
margin: 0 auto 1.5rem;
}
.ctaButton {
font-size: 1rem;
width: auto;
.heroStats {
gap: 1.5rem;
}
.videoColumn {
flex: 1 1 180px;
aspect-ratio: 16 / 9;
width: 100%;
.statDivider {
display: none;
}
.featuresGridTop {
grid-template-columns: 1fr;
}
.featuresGridBottom {
grid-template-columns: 1fr;
}
.standardsGrid {
grid-template-columns: 1fr;
}
.communityGrid {
grid-template-columns: 1fr;
}
.section {
padding: 3rem 1.5rem;
}
}
+340 -24
View File
@@ -2,47 +2,363 @@ import type { ReactNode } from "react";
import Link from "@docusaurus/Link";
import useDocusaurusContext from "@docusaurus/useDocusaurusContext";
import Layout from "@theme/Layout";
import HomepageFeatures from "@site/src/components/HomepageFeatures";
import styles from "./index.module.css";
import { GooseLogo } from "../components/GooseLogo";
function HomepageHeader() {
const { siteConfig } = useDocusaurusContext();
function HeroSection() {
return (
<header className={styles.header}>
<div className={styles.wrapper}>
<div className={styles.textColumn}>
<div className="hero--logo">
<GooseLogo />
</div>
<p className={styles.subtitle}>{siteConfig.tagline}</p>
<Link className="button button--primary button--lg" to="docs/getting-started/installation">
install goose
<header className={styles.hero}>
<div className={styles.heroInner}>
<div className={styles.heroBadge}>
Open Source · Apache 2.0 · Linux Foundation
</div>
<div className={styles.heroLogo}>
<GooseLogo />
</div>
<p className={styles.heroSubtitle}>
Your native open source AI agent. Desktop app, CLI, and API — for code,
workflows, and everything in between.
</p>
<div className={styles.heroActions}>
<Link
className="button button--primary button--lg"
to="docs/getting-started/installation"
>
Install goose
</Link>
<Link
className={`button button--outline button--lg ${styles.secondaryButton}`}
to="docs/quickstart"
>
Quickstart
</Link>
</div>
<div className={styles.videoColumn}>
<iframe
src="https://www.youtube.com/embed/D-DpDunrbpo"
className="aspect-ratio"
title="vibe coding with goose"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
allowFullScreen
></iframe>
<div className={styles.heroStats}>
<div className={styles.stat}>
<span className={styles.statNumber}>38k+</span>
<span className={styles.statLabel}>GitHub stars</span>
</div>
<div className={styles.statDivider} />
<div className={styles.stat}>
<span className={styles.statNumber}>400+</span>
<span className={styles.statLabel}>Contributors</span>
</div>
<div className={styles.statDivider} />
<div className={styles.stat}>
<span className={styles.statNumber}>70+</span>
<span className={styles.statLabel}>MCP extensions</span>
</div>
</div>
</div>
</header>
);
}
type FeatureCardProps = {
title: string;
description: ReactNode;
icon: string;
};
function FeatureCard({ title, description, icon }: FeatureCardProps) {
return (
<div className={styles.featureCard}>
<div className={styles.featureIcon}>{icon}</div>
<h3 className={styles.featureTitle}>{title}</h3>
<div className={styles.featureDescription}>{description}</div>
</div>
);
}
type SmallCardProps = {
title: string;
description: ReactNode;
icon: string;
};
function SmallCard({ title, description, icon }: SmallCardProps) {
return (
<div className={styles.smallCard}>
<div className={styles.smallCardIcon}>{icon}</div>
<h3 className={styles.smallCardTitle}>{title}</h3>
<div className={styles.smallCardDescription}>{description}</div>
</div>
);
}
function FeaturesSection() {
return (
<section className={styles.section}>
<div className={styles.container}>
<h2 className={styles.sectionTitle}>What goose does</h2>
<p className={styles.sectionSubtitle}>
goose is a general-purpose AI agent that runs on your machine. Not
just for code — use it for research, writing, automation, data
analysis, or anything you need to get done.
</p>
<div className={styles.featuresGridTop}>
<FeatureCard
icon="🖥️"
title="Desktop app, CLI, and API"
description={
<p>
A native desktop app for macOS, Linux, and Windows. A full CLI
for terminal workflows. An API to embed it anywhere. Built
in Rust for performance and portability.
</p>
}
/>
<FeatureCard
icon="🔌"
title="Extensible"
description={
<p>
Connect to 70+ extensions — databases, APIs, browsers, GitHub,
Google Drive, and more — via the{" "}
<a href="https://modelcontextprotocol.io/" target="_blank" rel="noopener">
Model Context Protocol
</a>{" "}
open standard. Add community{" "}
<Link to="/skills">skills</Link>, or{" "}
<Link to="/docs/tutorials/custom-extensions">build your own</Link>.
</p>
}
/>
<FeatureCard
icon="🤖"
title="Any LLM, including your subscriptions"
description={
<p>
Works with 15+ providers — Anthropic, OpenAI, Google, Ollama,
OpenRouter, Azure, Bedrock, and more. Use API keys or your
existing Claude, ChatGPT, or Gemini subscriptions via{" "}
<Link to="/docs/guides/acp-providers">ACP</Link>.
</p>
}
/>
</div>
<div className={styles.featuresGridBottom}>
<SmallCard
icon="📋"
title="Recipes"
description={
<p>
Capture workflows as portable YAML configs. Share with your
team, run in CI, include instructions, extensions, parameters,
and{" "}
<Link to="/docs/guides/recipes/session-recipes">subrecipes</Link>.
</p>
}
/>
<SmallCard
icon="🧩"
title="MCP Apps"
description={
<p>
Extensions can render interactive UIs directly inside goose
Desktop — buttons, forms, visualizations. A new way to build{" "}
<Link to="/docs/tutorials/building-mcp-apps">
agent-powered tools
</Link>.
</p>
}
/>
<SmallCard
icon="🔀"
title="Subagents"
description={
<p>
Spawn independent{" "}
<Link to="/docs/guides/subagents">subagents</Link> to handle
tasks in parallel — code review, research, file processing —
keeping the main conversation clean.
</p>
}
/>
<SmallCard
icon="🔒"
title="Security"
description={
<p>
Prompt injection detection, tool permission controls, sandbox
mode, and an{" "}
<Link to="/docs/guides/security/adversary-mode">
adversary reviewer
</Link>{" "}
that watches for unsafe actions.
</p>
}
/>
</div>
</div>
</section>
);
}
function StandardsSection() {
return (
<section className={`${styles.section} ${styles.sectionAlt}`}>
<div className={styles.container}>
<h2 className={styles.sectionTitle}>Built on open standards</h2>
<div className={styles.standardsGrid}>
<div className={styles.standardCard}>
<h3>Model Context Protocol</h3>
<p>
<a href="https://modelcontextprotocol.io/" target="_blank" rel="noopener">MCP</a>{" "}
is the open standard for connecting AI agents to tools and data
sources. goose was one of the earliest adopters and has one of the
deepest integrations in the ecosystem — with 70+ documented
extensions and growing.
</p>
<Link to="/docs/category/mcp-servers">Browse MCP extensions →</Link>
</div>
<div className={styles.standardCard}>
<h3>Agent Client Protocol</h3>
<p>
<a href="https://agentclientprotocol.com/" target="_blank" rel="noopener">ACP</a>{" "}
is a standard for communicating with coding agents. goose works as
an ACP server — connect from Zed, JetBrains, or VS Code — and can
use ACP agents like Claude Code and Codex as providers.
</p>
<Link to="/docs/guides/acp-clients">goose as ACP server →</Link>
</div>
<div className={styles.standardCard}>
<h3>Agentic AI Foundation</h3>
<p>
goose is part of the{" "}
<a href="https://aaif.io/" target="_blank" rel="noopener">
Agentic AI Foundation
</a>{" "}
at the Linux Foundation — ensuring the project remains
vendor-neutral, community-governed, and open for the long term.
</p>
<a href="https://aaif.io/" target="_blank" rel="noopener">
Learn about AAIF →
</a>
</div>
</div>
</div>
</section>
);
}
function CommunitySection() {
return (
<section className={styles.section}>
<div className={styles.container}>
<h2 className={styles.sectionTitle}>Community</h2>
<p className={styles.sectionSubtitle}>
An active community of developers, contributors, and users building
extensions, sharing recipes, and pushing the boundaries of what local
AI agents can do.
</p>
<div className={styles.communityGrid}>
<a
href="https://discord.gg/goose-oss"
target="_blank"
rel="noopener"
className={styles.communityCard}
>
<h3>💬 Discord</h3>
<p>
Ask questions, share what you've built, get help from the
community.
</p>
</a>
<a
href="https://github.com/aaif-goose/goose"
target="_blank"
rel="noopener"
className={styles.communityCard}
>
<h3>🐙 GitHub</h3>
<p>
Star, fork, file issues, contribute code. goose is built in the
open.
</p>
</a>
<Link to="/extensions" className={styles.communityCard}>
<h3>🧩 Extensions</h3>
<p>Browse community-built MCP extensions and add your own.</p>
</Link>
<Link to="/blog" className={styles.communityCard}>
<h3>📝 Blog</h3>
<p>Tutorials, deep dives, release notes, and community spotlights.</p>
</Link>
</div>
</div>
</section>
);
}
function InstallSection() {
return (
<section className={`${styles.section} ${styles.sectionAlt}`}>
<div className={styles.container}>
<h2 className={styles.sectionTitle}>Get started</h2>
<div className={styles.installBlock}>
<div className={styles.installDesktop}>
<Link
className="button button--primary button--lg"
to="docs/getting-started/installation"
>
Download the desktop app
</Link>
<p className={styles.installPlatforms}>
Available for macOS, Linux, and Windows
</p>
</div>
<div className={styles.installDivider}>
<span>or install the CLI</span>
</div>
<div className={styles.installTerminal}>
<div className={styles.terminalBar}>
<span className={styles.terminalDot} />
<span className={styles.terminalDot} />
<span className={styles.terminalDot} />
</div>
<pre className={styles.terminalBody}>
<code>
{`curl -fsSL https://github.com/aaif-goose/goose/releases/download/stable/download_cli.sh | bash`}
</code>
</pre>
</div>
</div>
</div>
</section>
);
}
function VideoSection() {
return (
<section className={styles.section}>
<div className={styles.container}>
<h2 className={styles.sectionTitle}>See goose in action</h2>
<div className={styles.videoWrapper}>
<iframe
src="https://www.youtube.com/embed/D-DpDunrbpo"
className={styles.video}
title="vibe coding with goose"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
allowFullScreen
/>
</div>
</div>
</section>
);
}
export default function Home(): ReactNode {
return (
<Layout description="your open source AI agent, automating engineering tasks seamlessly">
<HomepageHeader />
<Layout description="Your native open source AI agent. Desktop app, CLI, and API — for code, workflows, and everything in between.">
<HeroSection />
<main>
<HomepageFeatures />
<FeaturesSection />
<StandardsSection />
<CommunitySection />
<InstallSection />
<VideoSection />
</main>
</Layout>
);
@@ -393,7 +393,7 @@ function PageActionsMenu(): ReactNode {
const handleViewMarkdown = () => {
const source = metadata?.source?.replace('@site/', '') || '';
window.open(`https://raw.githubusercontent.com/block/goose/refs/heads/main/documentation/${source}`, '_blank');
window.open(`https://raw.githubusercontent.com/aaif-goose/goose/refs/heads/main/documentation/${source}`, '_blank');
setDropdownOpen(false);
};