Swap Agent or environment with plugins
Install a plugin, flip one line in profiles, run the same dataset.
Swapping the Agent or the environment does not rewrite the dataset: install the
plugin and switch it in profiles.yaml.
ACP is the default path (pi / Codex / Claude Code / OpenCode). dsh, nooa,
miniswe, terminus-2, and openhands are the same kind of plugin. Switching environment: docker to e2b,
ssh, or daytona changes that one line in the ACP profiles — not ACP code.
Install
ageval plugin install plugins/nooa
# or: ageval plugin install plugins/dsh
# or: ageval plugin install plugins/miniswe # model on the host; bash via environment.exec
# or: ageval plugin install plugins/terminus-2 # model on the host; tmux via environment.exec
# or: ageval plugin install plugins/openhands # pinned SDK inside the attempt environment
# or: ageval plugin install plugins/acp-oneshot # one-shot ACP pair in the environment; exec only
ageval plugin listInstall updates $AGEVAL_HOME/plugins (default ~/.ageval/plugins) only. It never
rewrites profiles.yaml, ageval.yaml, or task.yaml.
plugin.yaml may include description: one paragraph Hub shows above Install (CLI). Markdown links ([text](https://…)) render there.
Uninstall:
ageval plugin uninstall nooaSwitch in config
format: ageval.profiles/1
environment: local
agent_profiles:
solver:
executor: nooa
extensions:
- plugin: nooa
options:
agent: "lib.agents:JsonlAggAgent"
method: "run"executor: selects the Agent for this profiles file. Plugin options live on that
plugin's extensions row. Docker image layers are written when the environment
starts. ACP entry lives on - plugin: acp / options.entry and is written
into the image; switching model does not rebuild.
ageval run examples/datasets/minimal-demo --task terminal-jsonl-agg \
--profiles examples/datasets/minimal-demo/profiles.nooa.yamlageval lock writes the resolved graph as extension_bindings. If capabilities
or credentials do not match, the check fails and the run does not start.
ageval run examples/datasets/minimal-demo --task terminal-jsonl-agg \
--profiles examples/datasets/minimal-demo/profiles.dsh.yaml --probe--probe checks whether this environment can open here: host_requires, Docker daemon (docker), locator names. If something is missing, the command exits non-zero and the run does not start.
Installed is not the same as runnable
| What you see | Meaning |
|---|---|
| install / list | This machine recognizes the plugin |
| host can run | Declared host_requires satisfied |
| profiles bind | This profiles file selected that executor / environment |
| image layers | docker: image_layers present and written |
ageval executors.host_ready is not “installed” and not “layers are in the image”. Installed plugins that are not listed in extensions stay off this run's image.
Relation to ACP
The default coding-agent path remains executor: acp + options.entry (parent JSON-RPC, needs attach_stdio). acp-oneshot is the other path: a one-shot client+server inside the environment, over exec only. Plugins are optional; the same dataset switches only via profiles. miniswe keeps the model on the host and sends bash through environment.exec. terminus-2 does the same with a tmux pane: the plugin installs tmux in the attempt environment when it is missing. Missing exec fails at lock. openhands runs the pinned SDK on the attempt workspace (exec, upload, download). The instruction is a file in that environment.
PASS still comes only from evaluator.py.
Writing your own?
npx skills add ZJU-REAL/ageval --skill ageval-pluginEverything above uses an existing plugin. To author your own ageval.plugin/1 (plugin.yaml, plus capability and parameter tables in the README), install ageval-plugin and describe the capabilities and parameters to your coding agent. Hand-writing works too — the skill documents the format.