jutul-agent
A scientific AI agent for differentiable simulators built on the Jutul framework. Ask for a simulation in plain language. The agent sets it up, runs it, analyses and plots the results, and iterates: fixing mistakes and refining the next run.
The browser UI (jutul-agent web): chat on the left; interactive plots and reports pinned in a canvas on the right. On the left, a Fimbul geothermal doublet showing the 3D temperature field around the wells over time. On the right, a BattMo C-rate study with voltage curves, an attempts map, and a written report.
Quickstart
Install uv and Julia (via juliaup). Then:
uv tool install jutul-agent
jutul-agent key openai # save a provider key (Anthropic and Google work too)
mkdir my-study && cd my-study
jutul-agent init --sim battmo # jutuldarcy | battmo | fimbul | mocca
jutul-agent web # browser UI, or: tui, or run "<prompt>"
Local models through Ollama need no key. init
precompiles the Julia and plotting stacks once (a few minutes), so sessions
then start in seconds, and jutul-agent doctor checks the setup if anything
looks wrong. Keep it current with jutul-agent upgrade.
One folder is bound to one simulator and its Julia environment, so use a separate folder for each. The browser UI opens at http://127.0.0.1:8742 and runs locally for a single trusted user. The full installation and usage guide covers workspaces, interfaces, and models; to work on jutul-agent itself, clone the repo (see Development).
Supported simulators
--sim |
Package | Domain |
|---|---|---|
jutuldarcy |
JutulDarcy.jl | Reservoir / multi-phase flow |
battmo |
BattMo.jl | Lithium-ion (and other) battery cells |
fimbul |
Fimbul.jl | Geothermal (ATES, BTES, doublet, EGS) |
mocca |
Mocca.jl | Adsorption-based CO₂ capture (PSA / VSA / TSA) |
What makes it work for scientific computing
- A persistent Julia REPL per session. State, loaded packages, and compiled methods carry across turns, and a first solve is fast because each simulator ships a precompiled warm package.
- The agent reads real source. Every package in the environment is on disk at
its real
pkgdirpath (read-only in the shared depot), so answers come from the installed version, not from memory. - Everything is recorded. Each session writes a trace of every message, tool call, and artifact. Transcripts and the benchmark grade against it.
- Models are interchangeable: OpenAI, Anthropic, Google, or local models via Ollama, switchable mid-session.
- Where the packages are fixed, such as a demo or a shared machine,
init --sysimagebakes the whole Julia environment into a system image and sessions start with it already loaded. It is checked against the environment before every session, so an image that has fallen behind refuses to run instead of quietly using the old code.
Documentation
The full documentation lives at sintef-agentlab.github.io/jutul-agent (source in docs/): using the agent, how it works (architecture, the Julia kernel, the trace), and extending it (adding a simulator, improving the agent, evaluation).
Development
Work from a clone instead of a tool install. uv run resolves the
jutul-agent command from the checkout, so run every command through it
(uv run jutul-agent ...); upgrade with git pull && uv sync.
git clone https://github.com/SINTEF-agentlab/jutul-agent
cd jutul-agent
uv sync --extra eval
uv run pre-commit install
uv run ruff check . # lint
uv run pytest # unit tests (integration and live skipped)
uv run pytest -m integration # adds the Julia-requiring tests
uv run jutul-agent eval canary # bench canary
Developed at SINTEF.
Metadata
Release files for jutul-agent 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| jutul_agent-0.2.0.tar.gz | 2.3 MB | Without provenance | Details for jutul_agent-0.2.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| jutul_agent-0.2.0-py3-none-any.whl | Python 3 | none | any | Details for jutul_agent-0.2.0-py3-none-any.whl |
Total release size: 2.9 MB
Release files / jutul_agent-0.2.0.tar.gz
| Download URL | jutul_agent-0.2.0.tar.gz |
|---|---|
| Size | 2.3 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2a78c47d53bf3684a1eef8a26f8841edebb4675beb64e57c230e378bb0aea8a2
|
|
BLAKE2b-256 checksum How to use checksums |
d753f4b140f58cf7d55081a40c6cc735e2e51678e1f022342776cc06a26328e0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.18 {"installer":{"name":"uv","version":"0.12.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / jutul_agent-0.2.0-py3-none-any.whl
| Download URL | jutul_agent-0.2.0-py3-none-any.whl |
|---|---|
| Size | 653.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
03af09f7ae41a197055ca1d3f41173f1f06072241e3e2ff9d61ea148625e72cd
|
|
BLAKE2b-256 checksum How to use checksums |
c2835819fdf2950fa748f5e1758da637149cb6ddfb751102a391d1fc0c6101f4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.18 {"installer":{"name":"uv","version":"0.12.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for jutul-agent 0.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.