Upgrading to 2.0¶
aia 2.0 is a rebuild, not a drop-in replacement for 1.x. This page lists what changes for you between 1.1.1, the last 1.x release, and 2.0.0 — work through it before upgrading — followed by a short tour of what's new.
Requirements¶
| 1.1.1 | 2.0.0 | |
|---|---|---|
| Ruby | 3.2 or newer | 4.0.9 or newer |
Install or upgrade with:
The ruby_llm-mcp gem is no longer used, and it cannot be loaded alongside the version of ruby_llm that aia 2.0 needs. If you have it in a --require list or a Gemfile next to aia, remove it.
Removed command-line options¶
Passing one of these now stops aia with an error and exit status 1:
| Removed option | What to do instead |
|---|---|
--terse |
Nothing. It had no effect in 1.x. |
--regex PATTERN |
Nothing. Parameters are ERB (<%= name %>), so a custom placeholder pattern no longer means anything. |
--skills-prefix PREFIX |
Point --skills-dir at the directory that holds your skill subdirectories. |
--md, --[no-]markdown |
Nothing. Responses are written as the model returns them. |
Check shell aliases, scripts, cron jobs and executable prompts' #! lines for these.
Configuration file¶
Removed keys¶
These are ignored if they are still in your config file, as are their AIA_* environment variables. They don't appear in aia --dump either:
| Removed key | Notes |
|---|---|
flags.terse |
See --terse. |
prompts.parameter_regex |
See --regex. |
prompts.skills_prefix |
See --skills-prefix. |
output.markdown |
See --md. |
prompts.roles_dir, roles.dir |
Roles are always found in prompts.dir/prompts.roles_prefix. |
prompts.tool, prompts.tools_prefix, tools.dir |
Load tools with --tools or tools.paths. |
embedding.model |
Nothing used it. |
flags.clear |
Use the /clear directive. |
paths.config_file |
aia finds your config file in its standard place (~/.config/aia/aia.yml, or $XDG_CONFIG_HOME/aia/aia.yml when that is set); use -c for another one. |
Changed defaults¶
If you relied on an old default, set it in your config file.
| Key | 1.1.1 default | 2.0.0 default |
|---|---|---|
llm.max_tokens |
2048 |
32767 |
llm.top_p |
1.0 |
unset (the provider's default) |
audio.speak_command |
afplay |
say |
audio.voice |
alloy |
unset |
audio.speech_model |
tts-1 |
unset |
audio.transcription_model |
whisper-1 |
unset |
afplay plays audio files, not text, so --speak didn't work with the old default. The old voice and audio-model defaults only made sense for OpenAI. To keep OpenAI text-to-speech, use a script as your speak command — see Images & Speech.
To restore the old response-length cap, for example:
Chat directives¶
/terseis gone./rubyis off by default. It runs any Ruby with aia's full privileges. Start aia with--allow-ruby-evalto use it. See Security./modelkeeps the conversation. Switching models now hands the new model a summary of the conversation so far; in 1.x the new model started fresh. Setmodel_switch_history: cleanto start fresh as 1.x did, orreplayto re-send your messages. See Chat Sessions.
Every other 1.x directive and alias still works.
Custom tools¶
Tool files loaded with --tools must use the ruby_llm 2 style of declaring parameters. param … desc: is now parameter … description::
A tool still written the 1.x way fails with NoMethodError when aia loads it. See Tools.
MCP servers¶
Servers listed under mcp_servers: keep working, with three exceptions:
- The
sseandwstransports are gone. Use the server's Streamable HTTP endpoint (url:) or run it locally over stdio (command:). A server still set tosseorwsis reported as failed at startup. - Two servers can't offer a tool with the same name. The second one fails to connect. Give one of them a
prefix:so its tool names are distinct. - Server classes loaded with
--requiremust beRubyLLM::MCPsubclasses, and they are no longer picked up automatically. List them by class name undermcp_servers:(see Naming a server class).
See MCP Servers.
Files no longer in the gem¶
The installed gem contains only what aia needs to run. The documentation, the examples/ directory, the mcp_servers/ samples and the bin/migrate_prompts script are in the GitHub repository only.
If you used a 2.0 pre-release¶
These existed in the 2.0 alpha and beta releases and were removed before 2.0.0:
- The KBS rule engine, the
/rulesdirective, user-defined rule hooks and--tool-filter-kbs. -
The zvec, sqlite-vec and LSI tool filters. TF-IDF is the only tool filter; it is on by default and switched with
-A/--[no-]auto-tool-filter. This replaces thetool_filter_asetting. -
--expert-routing(flags.expert_routing),--loadand--save(flags.tool_filter_load,flags.tool_filter_save),concurrency.independent_servers, the MCP server keyindependent:, and switching models by typing "switch to claude". Passing one of these options is now an invalid-option error, and the keys are ignored. Use/modelto switch models.
-A used to mean --tool-filter-kbs; it now means --auto-tool-filter.
What's new in 2.0¶
A quick tour, with where to read more:
- Any provider ruby_llm supports, local or hosted.
--providersets the default for model names without a prefix,--list-providersshows what's available, and--list-modelsasks a provider what it is serving. Choosing Models, Local Models - Crews. Every chat is a team of robots. Add members with
/add_recruit, address them with@nameor@crew, and spawn one-shot specialists with/spawn. Crews - Multi-robot modes:
/verify,/debate,/decompose,/delegate,/orchestrate. Advanced Modes - Multi-model turns run in parallel, with
--consensusto merge the answers. Multi-Model & Consensus - MCP: servers connect once, in parallel, and are shared by every robot; Streamable HTTP servers (
url:); per-serverprefix:,only:,except:andrequires_approval:; and--tool-approval. MCP Servers, Security /modelmid-session, carrying the conversation over.- Skills with
-s/--skill. Roles & Skills --[no-]thinkinghides or shows the<think>reasoning that some local models stream.- Speech:
--speak-command,--speech-model,--transcription-modeland--voiceall take effect. Images & Speech --history-file/--no-history-filecontrol chat input history.
Upgrade checklist¶
- Ruby 4.0.9 or newer:
ruby -v - Remove
--terse,--regexand--skills-prefixfrom scripts and aliases. - Remove
flags.terse,prompts.parameter_regexandprompts.skills_prefixfrom your config file (optional; they are ignored). - Set
llm.max_tokensor theaudio.*keys if you relied on the old defaults. - Update custom tools from
param … desc:toparameter … description:. - Switch MCP servers off
sse/ws; addprefix:where two servers share a tool name. - Add
--allow-ruby-evalwhere you really use/ruby. - Still on prompt_manager's old
.txt+.jsonprompt format? See Migrating Prompts. - Run
aia --dump /tmp/check.ymland look it over.