Addons¶
An addon gives the agent more skills, tools, MCP servers, or system prompt text. It can also need more python packages and more jobflow-remote workers. The core of atomatic stays the same.
Use an addon¶
List the installed addons. [x] marks the enabled ones:
$: atomatic addon
On the agent computer, install the packages of an addon and enable it:
$: atomatic addon --enable reactca
On the runner computer, install the packages for the runner and add the workers of the addon to your jobflow-remote config:
$: atomatic addon --enable reactca --runner
Disable an addon. Its packages stay. On the runner, --runner takes its
workers out of the config:
$: atomatic addon --disable reactca
Note
Restart the agent (for example, the GUI) after you enable or disable an addon. After a change to the workers on the runner, copy the jobflow-remote config to the agent computer again.
Specification¶
All addons¶
Name: one lowercase word, with no - or _, for example reactca. Use
this name everywhere.
The addon dict: its keys are arguments of create_atomatic_agent. Each
key is optional:
from pathlib import Path
addon = dict(
skills=[str(Path(__file__).parent / "skills")],
tools=[list_reactca_runs],
mcp_servers=["http://127.0.0.1:8000/mcp"],
system_prompt="\n\nDo not use the atomate2 tools for ReactCA grids.\n",
)
skills: skill directories.tools: python functions or langchain tools.mcp_servers: MCP servers, asmcp.Clienttakes them.system_prompt: text after the atomatic system prompt.
The values of the enabled addons come before the values of the host. An unknown key stops the agent with an error.
Enabled addons: the .env holds their names, comma separated, with no
spaces. atomatic addon writes this line, and atomatic configure keeps it:
ATOMATIC_ADDONS="reactca,mylab"
Workers: an addon can give jobflow-remote workers for each hpc site, in
jfr_addenda/<site>.yaml next to its __init__.py. The site names are those
of atomatic configure, for example hpc-nersc or local_remote. The file
holds only the workers, as one mapping:
cpu_batch_reactca_1n:
type: local
scheduler_type: slurm
work_dir: CHANGEME_PATH_TO_WORK_DIR/run
pre_run: &reactca_env |
source CHANGEME_PATH_TO_VENV
export OMP_NUM_THREADS=1
resources:
account: CHANGEME_ACCOUNT
cpu_batch_reactca_1n_debug:
pre_run: *reactca_env
- Use the
CHANGEMEvalues of the site template, for exampleCHANGEME_ACCOUNT. - Do not use the anchors of the site template. Start your own anchors with the addon name.
The workers go at the end of workers: in the config, between two marker
lines. The other lines of the config stay. atomatic configure adds the
workers of an addon when this env has its runner extra, or when atomatic has
no runner extra for it. atomatic addon --enable <name> --runner adds them to
a config which is there already. It reads the site and the CHANGEME values
from metadata: atomatic: in the config, and asks for any which are not there.
Built-in addons: a built-in addon is a subpackage of atomatic/addons.
atomatic finds it there:
atomatic/addons/reactca/
├── __init__.py # addon = dict(...)
├── jfr_addenda/hpc-nersc.yaml
└── skills/wf-reactca/
├── SKILL.md
└── references/
Its packages are two extras of atomatic, in the addons section of
pyproject.toml. <name> is for the agent computer, and runner-<name> is
for the runner:
[project.optional-dependencies]
# addons
reactca = ["rxn-ca[workflow] @ git+https://github.com/mcgalcode/rxn-ca@4c1b9be"]
runner-reactca = ["rxn-ca[workflow] @ git+https://github.com/mcgalcode/rxn-ca@4c1b9be"]
Warning
Write each requirement in full. Do not refer to atomatic[<name>] in an
extra: this installs atomatic from PyPI.
External addons¶
An external addon is a python package of its own. atomatic finds it by its
entry point in the group atomatic.addons. The entry point name is the addon
name, and its value is the addon dict. The package ships its skill files and
worker files as package data:
atomatic-mylab/
├── pyproject.toml
└── atomatic_mylab/
├── __init__.py # addon = dict(...)
├── jfr_addenda/hpc-nersc.yaml
└── skills/wf-mylab/SKILL.md
[project]
name = "atomatic-mylab"
dependencies = ["mylab-code"]
[project.optional-dependencies]
runner = ["mylab-code"]
[project.entry-points."atomatic.addons"]
mylab = "atomatic_mylab:addon"
Install and enable it:
$: uv pip install atomatic-mylab # agent computer
$: atomatic addon --enable mylab
$: uv pip install "atomatic-mylab[runner]" # runner computer
$: atomatic addon --enable mylab --runner
For your own addon, install it from its directory with uv pip install -e .
A built-in addon wins over an external addon of the same name.
Caution
An enabled addon runs its code in the agent and adds to its system prompt. Enable only addons which you trust.