To add a toolkit, in your code (which doesn't necessarily need to be in the Goose package thanks to [plugin metadata][plugin]!), create a class that derives from the `Toolkit` class.
## Example toolkit class
Below is an example of a simple toolkit called `Demo` that derives from the `Toolkit` class. This toolkit provides an `authenticate` tool that outputs an authentication code for a user. It also provides system instructions for the model.
```python
importos
importplatform
fromgoose.toolkit.baseimportToolkit,tool
classDemo(Toolkit):
def__init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)
# Provide any additional tools as needed!
# The docstring of the tool provides instructions to the LLM, so they are important to tune
# you do not have to provide any tools, but any function decorated with @tool will be available
@tool
defauthenticate(self,user:str):
"""Output an authentication code for this user
Args:
user (str): The username to authenticate for
"""
# notifier supports any rich renderable https://rich.readthedocs.io/en/stable/introduction.html#quick-start
# This can be generated dynamically, and is run at startup time
defsystem(self)->str:
print("new")
returnf"""**You must preceed your first message by using the authenticate tool for the current user**
```
platform: {platform.system()}
cwd: {os.getcwd()}
user: {os.environ.get('USER')}
```
"""
```
## Exposing the New Toolkit to Goose
To make the toolkit available, add it to the `pyproject.toml` file and then update your `profiles.yaml` file.
### Update the `pyproject.toml` file
If you're adding the new toolkit to Goose or the Goose Plugins repo, simply find the `[project.entry-points."goose.toolkit"]` section in `pyproject.toml` and add a line like this:
```toml
[project.entry-points."goose.toolkit"]
developer="goose.toolkit.developer:Developer"
github="goose.toolkit.github:Github"
# Add a line like this - the key becomes the name used in profiles
demo="goose.toolkit.demo:Demo"
```
If you are adding the toolkit to a different package, see the docs for `goose-plugins` for more information on how to create a plugins repository that can be used by Goose.
### Update the `profiles.yaml` file
And then to set up a profile that uses it, add something to ~/.config/goose/profiles.yaml
```yaml
default:
provider:openai
processor:gpt-4o
accelerator:gpt-4o-mini
moderator:passive
toolkits:
- name:developer
requires:{}
demo-profile:
provider:openai
processor:gpt-4o
accelerator:gpt-4o-mini
moderator:passive
toolkits:
- developer
- demo
```
And now you can run goose with this new profile to use the new toolkit!
```sh
goose session start --profile demo-profile
```
> [!NOTE]
> If you're using a plugin from `goose-plugins`, make sure `goose-plugins` is installed in your environment. You can install it via pip: