docs: rework homepage and add aaif migration blog post (#8356)
Some checks failed
Canary / Prepare Version (push) Waiting to run
Canary / build-cli (push) Blocked by required conditions
Canary / Upload Install Script (push) Blocked by required conditions
Canary / bundle-desktop (push) Blocked by required conditions
Canary / bundle-desktop-intel (push) Blocked by required conditions
Canary / bundle-desktop-linux (push) Blocked by required conditions
Canary / bundle-desktop-windows (push) Blocked by required conditions
Canary / Release (push) Blocked by required conditions
Unused Dependencies / machete (push) Waiting to run
CI / changes (push) Waiting to run
CI / Check Rust Code Format (push) Blocked by required conditions
CI / Build and Test Rust Project (push) Blocked by required conditions
CI / Build Rust Project on Windows (push) Waiting to run
CI / Lint Rust Code (push) Blocked by required conditions
CI / Check OpenAPI Schema is Up-to-Date (push) Blocked by required conditions
CI / Test and Lint Electron Desktop App (push) Blocked by required conditions
Live Provider Tests / check-fork (push) Waiting to run
Live Provider Tests / changes (push) Blocked by required conditions
Live Provider Tests / Build Binary (push) Blocked by required conditions
Live Provider Tests / Smoke Tests (push) Blocked by required conditions
Live Provider Tests / Smoke Tests (Code Execution) (push) Blocked by required conditions
Live Provider Tests / Compaction Tests (push) Blocked by required conditions
Live Provider Tests / goose server HTTP integration tests (push) Blocked by required conditions
Publish Docker Image / docker (push) Waiting to run
Scorecard supply-chain security / Scorecard analysis (push) Waiting to run
Cargo Deny / deny (push) Has been cancelled
Deploy Documentation / deploy (push) Has been cancelled
Publish Ask AI Bot Docker Image / docker (push) Has been cancelled
Publish to npm / Generate ACP Schema (push) Has been cancelled
Publish to npm / Build goose CLI (darwin-arm64) (push) Has been cancelled
Publish to npm / Build goose CLI (darwin-x64) (push) Has been cancelled
Publish to npm / Build goose CLI (linux-arm64) (push) Has been cancelled
Publish to npm / Build goose CLI (linux-x64) (push) Has been cancelled
Publish to npm / Release to npm (push) Has been cancelled

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
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
15 changed files with 822 additions and 115 deletions

2
.github/CODEOWNERS vendored
View file

@ -1,4 +1,4 @@
# CODEOWNERS file for block/goose repository
# CODEOWNERS file for aaif-goose/goose repository
# See: https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners
# Documentation owned by DevRel

View file

@ -1,8 +1,10 @@
> **🦆 goose has moved!** This project has moved from `block/goose` to the [Agentic AI Foundation (AAIF)](https://aaif.io/) at the Linux Foundation. Some links and references are still being updated — please bear with us during the transition.
<div align="center">
# goose
_a local, extensible, open source AI agent that automates engineering tasks_
_your native open source AI agent — desktop app, CLI, and API — for code, workflows, and everything in between_
<p align="center">
<a href="https://opensource.org/licenses/Apache-2.0"
@ -14,23 +16,33 @@ _a local, extensible, open source AI agent that automates engineering tasks_
</p>
</div>
goose is your on-machine AI agent, capable of automating complex development tasks from start to finish. More than just code suggestions, goose can build entire projects from scratch, write and execute code, debug failures, orchestrate workflows, and interact with external APIs - _autonomously_.
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.
Whether you're prototyping an idea, refining existing code, or managing intricate engineering pipelines, goose adapts to your workflow and executes tasks with precision.
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.
Designed for maximum flexibility, goose works with any LLM and supports multi-model configuration to optimize performance and cost, seamlessly integrates with MCP servers, and is available as both a desktop app as well as CLI - making it the ultimate AI assistant for developers who want to move faster and focus on innovation.
goose 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 [ACP](https://goose-docs.ai/docs/guides/acp-providers). Connect to 70+ extensions via the [Model Context Protocol](https://modelcontextprotocol.io/) open standard.
[![Watch the video](https://github.com/user-attachments/assets/ddc71240-3928-41b5-8210-626dfb28af7a)](https://youtu.be/D-DpDunrbpo)
goose is part of the [Agentic AI Foundation (AAIF)](https://aaif.io/) at the Linux Foundation.
# Quick Links
# Get started
**[Download the desktop app](https://goose-docs.ai/docs/getting-started/installation)** for macOS, Linux, and Windows.
Or install the CLI:
```bash
curl -fsSL https://github.com/aaif-goose/goose/releases/download/stable/download_cli.sh | bash
```
# Quick links
- [Quickstart](https://goose-docs.ai/docs/quickstart)
- [Installation](https://goose-docs.ai/docs/getting-started/installation)
- [Tutorials](https://goose-docs.ai/docs/category/tutorials)
- [Documentation](https://goose-docs.ai/docs/category/getting-started)
- [Governance](https://github.com/aaif-goose/goose/blob/main/GOVERNANCE.md)
- [Custom Distributions](https://github.com/aaif-goose/goose/blob/main/CUSTOM_DISTROS.md) - build your own goose distro with preconfigured providers, extensions, and branding
- [Custom Distributions](https://github.com/aaif-goose/goose/blob/main/CUSTOM_DISTROS.md) build your own goose distro with preconfigured providers, extensions, and branding
## Need Help?
## Need help?
- [Diagnostics & Reporting](https://goose-docs.ai/docs/troubleshooting/diagnostics-and-reporting)
- [Known Issues](https://goose-docs.ai/docs/troubleshooting/known-issues)
@ -40,10 +52,8 @@ Designed for maximum flexibility, goose works with any LLM and supports multi-mo
>
> Because it always helps them "migrate" their code to production! 🚀
# goose around with us
# goose around with us
- [Discord](https://discord.gg/goose-oss)
- [YouTube](https://www.youtube.com/@goose-oss)
- [LinkedIn](https://www.linkedin.com/company/goose-oss)
- [Twitter/X](https://x.com/goose_oss)
- [Bluesky](https://bsky.app/profile/opensource.block.xyz) <!-- TODO: update social handle after transfer -->
- [Nostr](https://njump.me/opensource@block.xyz) <!-- TODO: update social handle after transfer -->

View file

@ -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

View file

@ -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). Wed 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). Wed love to have you.
<head>

View file

@ -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.

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>

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"
}

View file

@ -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();

View file

@ -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>

View file

@ -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"
>

View file

@ -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>

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;
}
}

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>
);

View file

@ -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);
};

View file

@ -61,9 +61,9 @@ function validPayload(overrides = {}) {
iat: now - 10,
exp: now + 300,
jti: `test-jti-${++jtiCounter}`,
repository: "block/goose",
repository: "aaif-goose/goose",
ref: "refs/heads/main",
sub: "repo:block/goose:ref:refs/heads/main",
sub: "repo:aaif-goose/goose:ref:refs/heads/main",
...overrides,
};
}
@ -141,7 +141,7 @@ function testEnv(overrides = {}) {
UPSTREAM_URL: "https://api.anthropic.com",
UPSTREAM_AUTH_HEADER: "x-api-key",
UPSTREAM_API_KEY: "sk-ant-real-key",
ALLOWED_REPOS: "block/goose",
ALLOWED_REPOS: "aaif-goose/goose",
MAX_TOKEN_AGE_SECONDS: "1200",
MAX_REQUESTS_PER_TOKEN: "200",
RATE_LIMIT_PER_SECOND: "2",