Skip to main content
Run the whole agent — model calls, loop and tools — inside a local Docker container you own.

Quick Start

1

Minimal

One line moves the whole agent into a container.
2

With a prebuilt image

Supply your own image with praisonaiagents baked in to skip the ~1 min first-run install.
3

Extra environment and packages

Pass extra environment variables and packages, and disable container reuse.

How It Works

The agent on your machine ships its serialisable config into the container, which rebuilds the agent, calls the LLM and runs the tools — then returns the answer. The model API key travels into the container via -e KEY — the value is read from your host environment, never placed on the command line, so it never shows up in docker inspect or a process listing.

run_on="docker" vs tools_run_on="docker"

Both spellings name the same place. What differs is what crosses the boundary — the parameter name carries the scope. The object reports which scope you chose:
Which one do you want?

Configuration Options

Pass these to HostedAgent(provider="docker", ...).

Model keys forwarded automatically

These variables are forwarded into the container when set in your host environment, passed with -e KEY (value read from your env), so they never appear in docker inspect or a process listing: OPENAI_API_KEY, ANTHROPIC_API_KEY, GEMINI_API_KEY, GOOGLE_API_KEY, GROQ_API_KEY, MISTRAL_API_KEY, COHERE_API_KEY, OPENROUTER_API_KEY, DEEPSEEK_API_KEY, XAI_API_KEY, OPENAI_BASE_URL, OPENAI_API_BASE.

Limitations

These are real. Hit them with eyes open.
  • Python callables in tools= do not cross into the container. A function defined in your process cannot be reconstructed remotely; the container rebuilds the agent from its serialisable config only. This is the same limitation the hosted runtimes have.
  • The container needs the model API key. Moving the loop is the point, so the key is forwarded from your host environment.
  • First run installs praisonaiagents (~1 min) unless image= supplies one that already has it.

Troubleshooting

When Docker is not running, run_on="docker" fails fast and points you at the daemon-free alternative:

Best Practices

Bake praisonaiagents into a custom image and pass it as image=. The first-run install (~1 min) disappears and start-up becomes predictable.
One container is reused across calls, so a follow-up turn does not pay start-up again. The default is already True.
When you want the loop on your machine — cheaper, and no API key inside the container — move only the tools with tools_run_on="docker".
With keep_alive=False, tear the container down with .shutdown() or use the backend as a context manager (with HostedAgent(...) as hosted:).

Hosted Agent

run_on="anthropic" — the vendor-hosted sibling.

Placement

One vocabulary for where the whole agent and its tools run.

Where It Runs

Ask the object where the model thinks and the tools run.

Shared Sandbox

For the tools_run_on="docker" case across a flow.