diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 29afce9c..d95ef3c4 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -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
diff --git a/README.md b/README.md
index c3b2a950..fed529b2 100644
--- a/README.md
+++ b/README.md
@@ -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.
+
# 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_
-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.
-[](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)
-- [Nostr](https://njump.me/opensource@block.xyz)
diff --git a/documentation/blog/2025-04-01-top-5-mcp-servers/index.mdx b/documentation/blog/2025-04-01-top-5-mcp-servers/index.mdx
index 728af074..52a899c6 100644
--- a/documentation/blog/2025-04-01-top-5-mcp-servers/index.mdx
+++ b/documentation/blog/2025-04-01-top-5-mcp-servers/index.mdx
@@ -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
diff --git a/documentation/blog/2025-09-08-turn-any-mcp-server-mcp-ui-compatible/index.mdx b/documentation/blog/2025-09-08-turn-any-mcp-server-mcp-ui-compatible/index.mdx
index d0f883e1..66a7d73f 100644
--- a/documentation/blog/2025-09-08-turn-any-mcp-server-mcp-ui-compatible/index.mdx
+++ b/documentation/blog/2025-09-08-turn-any-mcp-server-mcp-ui-compatible/index.mdx
@@ -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.
diff --git a/documentation/blog/2026-04-07-goose-moves-to-aaif/index.md b/documentation/blog/2026-04-07-goose-moves-to-aaif/index.md
new file mode 100644
index 00000000..4906ecd4
--- /dev/null
+++ b/documentation/blog/2026-04-07-goose-moves-to-aaif/index.md
@@ -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!
+
+
+
+## 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.
diff --git a/documentation/docs/troubleshooting/index.mdx b/documentation/docs/troubleshooting/index.mdx
index 533defbe..e5113f55 100644
--- a/documentation/docs/troubleshooting/index.mdx
+++ b/documentation/docs/troubleshooting/index.mdx
@@ -44,7 +44,7 @@ import styles from '@site/src/components/Card/styles.module.css';
diff --git a/documentation/package-lock.json b/documentation/package-lock.json
index 894b749f..2c4b1d9d 100644
--- a/documentation/package-lock.json
+++ b/documentation/package-lock.json
@@ -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"
}
diff --git a/documentation/src/components/LinuxDesktopInstallButtons.js b/documentation/src/components/LinuxDesktopInstallButtons.js
index f0fba117..d5cd8217 100644
--- a/documentation/src/components/LinuxDesktopInstallButtons.js
+++ b/documentation/src/components/LinuxDesktopInstallButtons.js
@@ -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();
diff --git a/documentation/src/components/MacDesktopInstallButtons.js b/documentation/src/components/MacDesktopInstallButtons.js
index 8bdd6d5e..82347a7b 100644
--- a/documentation/src/components/MacDesktopInstallButtons.js
+++ b/documentation/src/components/MacDesktopInstallButtons.js
@@ -8,13 +8,13 @@ const DesktopInstallButtons = () => {
+ MCP{" "}
+ 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.
+
+ Browse MCP extensions โ
+
+
+
Agent Client Protocol
+
+ ACP{" "}
+ 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.
+
+ goose as ACP server โ
+
+
+
Agentic AI Foundation
+
+ goose is part of the{" "}
+
+ Agentic AI Foundation
+ {" "}
+ at the Linux Foundation โ ensuring the project remains
+ vendor-neutral, community-governed, and open for the long term.
+
+ An active community of developers, contributors, and users building
+ extensions, sharing recipes, and pushing the boundaries of what local
+ AI agents can do.
+