pip install -U agronaut
agronaut setupThen agronaut and start talking to it. That last part is what this release is about.
The first run now ends somewhere
1.0.0 could leave you stranded. Pick WhatsApp in agronaut setup and you got two lines pointing at the README, and nothing you could actually run. The closing "Try it" only ever offered the sizing calculator, which needs no model at all, plus the Telegram bot if you had chosen Telegram. So unless you picked Telegram, setup configured a model and then never gave you a single command that used it. Choosing "Terminal only" did not help either.
That was found by installing the package and using it, one day after 1.0.0 shipped.
- The terminal is offered first, and it is named.
agronautwith no arguments is the chat, it needs no token and no account, and it works the moment setup exits. - Setup always ends with a command you can run. However the channel step goes, including when it goes badly.
- WhatsApp is guided instead of deferred. It now prompts for the token, phone number id, app secret and allowed numbers, generates the verify token rather than sending you to hunt the dashboard for a value you are supposed to invent, and runs the WhatsApp doctor on what you entered.
- And it tells you the thing that actually blocks people. Telegram long-polls, so a laptop works. WhatsApp needs Meta to POST to a public HTTPS address, which means a tunnel running beside it. The wizard prints the
cloudflaredandngrokone-liners and says plainly that a laptop is the wrong host for anything lasting.
A dead model provider no longer kills the session
The terminal chat used to raise an httpx traceback and exit if the provider was unreachable, which is easy to hit because setup will save LLM_PROVIDER=ollama right after telling you Ollama is not running. Now:
agronaut> I could not reach ollama at http://localhost:11434, so I cannot answer that right now.
Start it with `ollama serve`, then try again.
Run `agronaut setup` to switch provider. The sizing engine needs no model and still works: `agronaut size --help`
Rejected API keys and missing models get their own message, because "start the server" and "retype your key" are different instructions. Every one of them ends by naming the sizing engine, which needs no model and therefore always works.
Two new commands
agronaut --version prints where the code came from, not just a number:
agronaut 1.1.0
code /usr/local/lib/python3.12/site-packages/agronaut_agent
python /usr/local/bin/python3
config /home/you/.config/agronaut/.env
If you have both a checkout and a pip install, that path is the only way to tell which one you are running. It also flags an editable install and says that git pull is what updates it.
agronaut update checks PyPI and installs. It refuses to overwrite an editable install, because pip would silently detach the command from the checkout you are editing, and it will not offer you a downgrade when your build is ahead of the release.
Also in this release
- The PNG schematic rendered every label at the same size on macOS, because no font candidate matched and Pillow's fallback is pinned at 10px. Titles, box labels and arrows are distinct again.
- The database now stamps its schema version, so the first migration after 1.0.0 will not fail mid-conversation on somebody's only copy of their system history.
- CI runs Python 3.11 through 3.14. 3.13 was advertised and never tested; 3.14 was installable and tested by nobody.
- Water spinach (kangkong) joins the crop database. The crop table is at 32.
- One version number, in one place.
aqua_model.__version__had been sitting at "0.1.0" since before 1.0.0 because nothing read it.
What this does not change
The engineering core is the same as 1.0.0, and so is what it is willing to claim.
The production twin was scored against 7 real ponds on held-out data. It tracked the direction of change on 5 of 7, median correlation 0.30, and it beat both a flat and a linear-trend baseline on 0 of 7. So it is a tool for comparing options, not for predicting a level, and it says so in every projection it prints. The record is data/twin_validation.json and you can regenerate it with scripts/validate_twin.py.
Still not modelled: dissolved oxygen, pH and alkalinity, solids handling as anything but a fixed fraction, staggered cohorts, and micronutrient chemistry. Every design output lists its own gaps. Issues #108, #137, #138 and #107 are where that work is happening, and contributions are welcome.
Verified for this release: 1279 tests, the advice-safety golden set at 43 probes and 395 checks with no failures, and the built wheel installed into a clean environment and run from outside the checkout, with all 7 reference tables, 22 knowledge documents and the validation record present.
Thank you
Agronaut is a one-maintainer project, and it keeps getting better because people who have no obligation to help show up and help anyway. Everyone who has landed a change:
- @Mr-Neutr0n expanded the cited fish-species database (#81), which is why the model can answer "when do I harvest?" for more than a couple of species.
- @TrueFurina wrote the winter and cold-season operation knowledge document (#100). Written knowledge from someone who has actually run a system through a cold season is the kind of thing no amount of code produces.
- @kr1xh built the headless CLI for design and optimize (#93). That is the
agronaut sizecommand in the quick start above, and it is the reason the whole engine is usable with no browser and no model. - @visheshbpatel added the India regional price book (#122), so cost estimates are true somewhere else too. This is the contribution the project most wants more of, one country at a time.
- @sOuL2000s added water spinach (kangkong) to the crop database (#127), a staple across South and Southeast Asia that the crop table could not grow.
- @jordansilly77-stack collapsed a duplicated filter in the retrieval layer (#31).
If you want to be on this list, #27 is the front door. The most valuable contributions here are usually not code: a price book for your country, a knowledge document, a photograph of a sick plant, or a published system the model can be tested against. No API key or ML experience needed for any of it.