Skip to main content

Local installation

Clone the repository, restore the solution, and build it:

git clone https://github.com/gbaudrit/agentstration.git
cd agentstration
dotnet restore Agentstration.slnx
dotnet build Agentstration.slnx --configuration Release --no-restore

Run the operations Console with the offline deterministic provider:

$env:AI__Provider = "Deterministic"
dotnet run --project src/Agentstration.Web

For the end-user Workplace, use two terminals:

# Terminal 1
$env:AI__Provider = "Deterministic"
dotnet run --project src/Agentstration.Web

# Terminal 2
dotnet run --project src/Agentstration.Workplace.Web

The same Agentstration.Web process is the authoritative server for Console and Workplace APIs. The direct server defaults to the persisted managed provider configuration, which is why the explicit environment override is used in the offline commands above.

Run with Compose​

All Compose definitions live under deploy/compose. The colocated Compose command reference provides copy-ready SQLite, PostgreSQL, model-management, log, and shutdown commands. The base.yml topology retains the canonical deterministic extension launch without inference servers. Choose one provider-specific topology to run its inference service, AEP extension, and Utilities extension with isolated SharedKeyFile credentials.

For a container-owned Ollama instance:

docker compose -f deploy/compose/ollama.yml up --build

The Ollama topology builds the authoritative server plus the Ollama and Utilities AEP extensions. It also starts an Ollama inference server with a persistent ollama-data volume. Only Agentstration is published to the host, at http://localhost:5100 by default; extension and Ollama traffic stay on the Compose network.

For llama.cpp, first place a GGUF model in the ignored .models/llama-cpp directory. Its filename defaults to model.gguf and can be changed through LLAMA_CPP_MODEL:

New-Item -ItemType Directory -Force .models/llama-cpp
Copy-Item C:\path\to\model.gguf .models/llama-cpp/model.gguf
docker compose -f deploy/compose/llama-cpp.yml up --build

For LocalAI:

docker compose -f deploy/compose/localai.yml up --build
docker compose -f deploy/compose/localai.yml exec localai local-ai models install <model>

Both topologies run their inference server inside Docker; neither needs aep-host or host.docker.internal. Run only the topology for the provider being tested. The provider-specific files publish the same Agentstration port and share the same default Compose project data volume.

VariableContainer defaultPurpose
AGENTSTRATION_HTTP_PORT5100Host port bound to the authoritative Agentstration server
OLLAMA_IMAGEollama/ollama:0.33.2Ollama container image
LLAMA_CPP_IMAGEghcr.io/ggml-org/llama.cpp:server-b10830llama.cpp server image
LLAMA_CPP_MODELS_PATH./.models/llama-cppHost directory mounted read-only at /models
LLAMA_CPP_MODELmodel.ggufGGUF filename inside the llama.cpp model directory
LLAMA_CPP_MODEL_ALIASlocal-ggufStable model name exposed by llama-server
LOCALAI_IMAGElocalai/localai:v4.9.0LocalAI server image
LOCALAI_API_KEYunsetOptional LocalAI Bearer credential
AI_PROVIDERManagedAgentstration execution mode; set Deterministic for the offline fallback

Install a model explicitly after startup:

docker compose -f deploy/compose/ollama.yml exec ollama ollama pull qwen3:1.7b
docker compose -f deploy/compose/ollama.yml exec ollama ollama run qwen3:1.7b
docker compose -f deploy/compose/ollama.yml exec ollama ollama ps

The model volume survives container recreation. Remove it only through an explicit Compose volume deletion when the cached models are no longer needed.

The default Ollama container is CPU-capable. Ollama's Linux image can use Vulkan when the Docker host exposes /dev/dri, but that device is not available in every WSL configuration. Do not add a /dev/dri mapping until the device exists on the Docker host; Compose would otherwise fail before Ollama starts. The PROCESSOR column from ollama ps reports whether a loaded model uses CPU, GPU, or both.

The default images are CPU-capable. GPU variants require the corresponding device to be exposed by the Docker host; keep the CPU images until GPU passthrough is verified.

PostgreSQL variants​

The shared postgresql.yml overlay can be combined with the base or any provider-specific topology. Create its ignored environment file once and replace the disposable password:

Copy-Item deploy/compose/.env.postgresql.example deploy/compose/.env.postgresql

Then select the required variant:

# Minimal deterministic + PostgreSQL
docker compose --env-file deploy/compose/.env.postgresql -f deploy/compose/base.yml -f deploy/compose/postgresql.yml up --build

# Ollama + PostgreSQL
docker compose --env-file deploy/compose/.env.postgresql -f deploy/compose/ollama.yml -f deploy/compose/postgresql.yml up --build

# llama.cpp + PostgreSQL
docker compose --env-file deploy/compose/.env.postgresql -f deploy/compose/llama-cpp.yml -f deploy/compose/postgresql.yml up --build

# LocalAI + PostgreSQL
docker compose --env-file deploy/compose/.env.postgresql -f deploy/compose/localai.yml -f deploy/compose/postgresql.yml up --build