Documentation BETA

Animus Guide

Deploy and operate Animus as a self-hosted, product-mode-first agent runtime with bounded execution, UMA memory integration, explicit permissions, and operator visibility.

Start Here

Introduction

Animus is a hardened fork of OpenClaw built for self-hosted, controlled AI agent deployment. It keeps the useful runtime and orchestration foundations, but changes the product direction toward bounded execution, explicit permissions, fail-closed behavior, and auditable operator control.

This guide documents the checked-in beta deployment path. It is written for operators, builders, and security-conscious teams who want a controlled agent runtime on infrastructure they own.

Animus is currently in Beta. The beta path is Docker Compose with the checked-in hardened configuration baseline. Some broader provider, plugin, and production-topology options may exist elsewhere in the repository, but this page focuses on the supported beta path for real testing.

Start Here

What Animus Is

Animus is a practical runtime base for building product-safe assistants. It is not a hosted SaaS platform, not an unrestricted desktop assistant, and not a memory database. The runtime owns bounded orchestration and policy enforcement. UMA owns memory and persistence. Operators own deployment, configuration, allowlists, secrets, and exposure decisions.

Primary audiences

  • Security-conscious platform and SecOps teams that need self-hosted, auditable agent runtimes.
  • Enterprises that want controlled AI agents on their own infrastructure with strict boundaries and sane defaults.
  • Builders who want OpenClaw-style agent capabilities without broad default trust assumptions.

How Animus differs from OpenClaw

OpenClaw-style assumption Animus posture
Flexible experimentation and orchestration Product-mode-first bounded execution
Developer convenience defaults Explicit permissions, workspace roots, and allowlists
Implicit local trust shortcuts Fail-closed behavior on hardened product-mode paths
General runtime extensibility Controlled provider selection through runtime seams
Broad assistant positioning Operator-visible, security-conscious deployment posture
Start Here

Deployment Posture

Production Animus is intended to run with product.mode=true. Product mode is the hardened posture used for bounded execution, explicit approvals, network and workspace allowlists, and auditable operator control.

When product.mode !== true, Animus preserves compatibility behavior for engineering use: local development, debugging, diagnostics, legacy compatibility, and migration workflows. Non-product mode remains supported, but it is not the intended production deployment posture.

Do not treat non-product mode as a production-safe control boundary. Use it only for engineering, debugging, and compatibility workflows.

Start Here

Beta Contract

The beta documentation describes what the checked-in deployment path is designed to support today. It avoids future-facing package names, image names, and configuration schemas unless they are part of the current beta path.

Current beta guarantees

  • product.mode=true is the intended deployment posture for production-like testing.
  • The Docker Compose path uses checked-in hardened config and environment templates.
  • The default beta baseline is loopback-only.
  • Gateway access uses an explicit shared token with rate-limit posture.
  • Workspace, browser, and network behavior are governed by explicit allowlists.
  • UMA memory integration is available through the non-default UMA HTTP provider path.
  • Ollama model integration is available through the non-default runtime provider path.
  • Operator logs expose actions, failures, seam selection, and policy-relevant runtime events.

Current beta limits

  • This is not a full high-availability production deployment guide.
  • This page does not document a published npm package or published Docker image.
  • Kubernetes, external log sinks, and advanced approval integrations should be treated as production design work unless separately documented in the repository.
  • Non-default providers must be enabled explicitly. Default runtime behavior remains compatibility-oriented unless configured otherwise.
First Run

Local Development

Use the local development path when you are working from source, validating builds, or changing runtime code. This path is not the preferred beta deployment path for operator testing.

Prerequisites

  • Node.js 22 or later
  • pnpm
Terminal
git clone <your-fork-url>
cd animus

pnpm install
pnpm build

For production-like testing, use the Docker beta path and enable product.mode=true through the checked-in hardened configuration baseline.

First Run

Docker Beta Quick Start

For beta users, the preferred path is Docker Compose with the checked-in hardened config baseline. The environment file owns secrets and runtime endpoints. The config file owns policy defaults and allowlists.

  1. Copy the beta config and environment templates

    Terminal
    mkdir -p .animus-config workspace
    cp config/animus.beta.json .animus-config/openclaw.json
    cp .env.animus.example .env.animus
  2. Replace required placeholders in .env.animus

    OPENCLAW_GATEWAY_TOKEN OPENCLAW_RUNTIME_UMA_HTTP_ENDPOINT
  3. Review policy defaults and allowlists

    Open .animus-config/openclaw.json and review:

    product.workspaceRoots
    product.networkAllowedDomains
    product.browserAllowedDomains
    gateway.controlUi.allowedOrigins
  4. Start the beta stack

    Terminal
    docker compose up --build -d animus-gateway ollama
  5. Verify readiness

    Terminal
    docker compose ps
    curl http://127.0.0.1:18789/healthz
    docker compose logs --tail=200 animus-gateway
  6. Open the Control UI

    Open http://127.0.0.1:18789/. On loopback, the browser connection is local and does not require remote-device pairing. Paste the shared token from .env.animus into the Control UI settings when prompted.

First Run

First-Run Verification

After startup, verify the runtime before trusting the environment with meaningful tasks or data.

Check Expected result
docker compose ps The animus-gateway service is running and healthy.
curl http://127.0.0.1:18789/healthz The gateway health endpoint responds successfully.
Gateway logs Logs show configuration loaded, product-mode posture, provider seam initialization on first use, and no fail-open warnings.
Control UI The UI is reachable on loopback and requires the configured shared token.
Policy review Workspace roots and allowlists are narrow, intentional, and operator-owned.
Runtime

Architecture

Animus is organized around three runtime planes. Each plane has a separate responsibility so the system remains controlled, inspectable, and replaceable.

Plane Responsibility
Bounded runtime and orchestration layer Session lifecycle, execution flow, centralized policy enforcement points, and product-mode fail-closed behavior.
UMA memory plane Context assembly before a turn, durable turn persistence after a turn, and external memory service access through uma.memory.v1.
Pluggable model runtime providers Generation/runtime provider abstraction, default compatibility adapter, and explicit non-default provider selection including Ollama.
Runtime

Bounded Execution

Bounded execution is the core safety posture in Animus. In product mode, risky actions are reduced, gated, sandboxed, or denied unless an operator has explicitly enabled the required path, domain, capability, or approval flow.

The checked-in beta path uses product configuration rather than a generic bounds block. Review the following keys in .animus-config/openclaw.json before first use.

Setting Purpose Default posture
product.mode Enables the hardened product-mode posture. Must be true for production-like operation.
product.workspaceRoots Defines allowed workspace roots for runtime file access. Narrow, explicit roots only.
product.networkAllowedDomains Defines allowed outbound network destinations. Deny unless explicitly allowed.
product.browserAllowedDomains Defines allowed browser-control destinations. Deny unless explicitly allowed.
gateway.controlUi.allowedOrigins Restricts browser origins allowed to use the Control UI. Loopback-only beta baseline.

Current hardened V1 posture includes blocked dangerous raw exec/process paths, sandbox-required execution on hardened product-mode paths, workspace-root fail-closed enforcement, browser/network allowlist enforcement, and browser-control startup fail-closed without explicit auth in product mode.

Runtime

Approvals and Denials

Animus treats approval, pairing, and admission decisions as part of the product security model. Sensitive paths should be visible, reviewable, and denied safely when required configuration or authorization is missing.

Examples of sensitive paths

  • Raw process or shell execution.
  • File access outside configured workspace roots.
  • Browser startup or browser-control flows without explicit auth.
  • Network access outside configured allowlists.
  • Remote Control UI access after widening the loopback-only default.
  • Connector actions that expose or mutate external state.

If an action is denied, the expected operator behavior is simple: inspect the logs, confirm whether the request should be allowed, and update the narrowest relevant policy only if the access is intentional. Do not broaden workspace roots, network domains, or UI origins as a generic workaround.

Runtime

Operator Visibility

Animus is designed so operators can see what the runtime is doing, what was blocked, and which runtime seams were selected. During beta testing, Docker logs are the primary operator visibility surface.

Terminal
docker compose logs --tail=200 animus-gateway

What to look for

  • Product-mode configuration loaded successfully.
  • Workspace roots and allowlists loaded without fail-open warnings.
  • UMA memory provider seam initialized when first used.
  • Model runtime provider seam initialized when first used.
  • Denied or blocked actions include enough context for operator review.
  • Debug logging is not enabled during production-like operation unless actively troubleshooting.

Debug logs may include tool inputs, outputs, paths, prompts, retrieved context, provider metadata, connector responses, and potentially sensitive payloads. Use debug logging only for controlled diagnostics.

Memory and Providers

UMA Integration

UMA is integrated into Animus through the local blueprint bridge. Animus no longer requires users to run UMA as a separate HTTP memory API for the standard beta path. Instead, the TypeScript runtime starts a local Python UMA worker and exchanges structured JSON-lines messages with it over standard input and standard output.

This makes memory integration seamless for users: Animus owns the runtime session and calls UMA directly through the blueprint contract, while UMA still owns memory behavior, retrieval, ingestion, profiles, diary bootstrap, context assembly, and persistence.

How the integrated blueprint works

Layer Responsibility
Animus TypeScript runtime Starts the local UMA worker process, sends blueprint requests, tracks pending calls, applies timeouts, and receives responses.
UMA blueprint worker Loads UMA from local configuration, validates the blueprint API version, dispatches supported UMA methods, and returns structured results.
UMA memory engine Executes memory operations such as profile loading, bootstrap loading, document ingestion, context retrieval, and memory retrieval.

Blueprint contract

The current integrated contract is uma.blueprint.v1. Requests are JSON objects with an apiVersion, request id, method name, and method parameters. Responses return the same API version and request ID with either ok: true and a result, or ok: false and an error message.

Blueprint request shape
{
  "apiVersion": "uma.blueprint.v1",
  "id": "uma-1",
  "method": "retrieve_context",
  "params": {
    "query": "current task context"
  }
}

Supported UMA methods

  • set_context
  • load_userprofile
  • load_agentprofile
  • load_memory_bootstrap
  • load_daily_diary_bootstrap
  • ingest_document
  • retrieve_context
  • retrieve_memory

Configuration

The integrated worker loads UMA from a local YAML configuration file. By default, Animus resolves the UMA config at packages/uma/config/uma.yaml relative to the repository root. Override the path with ANIMUS_UMA_CONFIG when using a different local UMA configuration.

.env.animus
ANIMUS_UMA_CONFIG=/absolute/path/to/uma.yaml
ANIMUS_LOG_LEVEL=INFO

The Python environment running the worker must have UMA installed and must be able to load the configured UMA YAML file. If the config is missing or UMA is unavailable, the local worker fails closed and returns a structured error to Animus.

Operational behavior

  • Animus starts the UMA worker on first use of the bridge.
  • Each call has a generated request ID and a timeout.
  • Worker stderr is surfaced through Animus logs for operator visibility.
  • If the worker exits, pending calls are rejected and the bridge can be restarted on the next call.
  • Unsupported API versions or unsupported methods are rejected by the worker.
Memory and Providers

Provider Selection

Default runtime behavior remains unchanged unless you explicitly opt in to a non-default provider. The live runtime path currently reads the legacy OPENCLAW_RUNTIME_* environment variables.

Enable Ollama runtime provider

.env.animus
OPENCLAW_RUNTIME_MODEL_PROVIDER=ollama
OPENCLAW_RUNTIME_MODEL_PROVIDER_ENDPOINT=http://127.0.0.1:11434/v1
OPENCLAW_RUNTIME_MODEL_PROVIDER_MODEL=glm-4.7-flash

Selection details

  • OPENCLAW_RUNTIME_MODEL_PROVIDER selects the runtime model adapter, such as ollama or openai.
  • OPENCLAW_RUNTIME_MODEL_PROVIDER_ENDPOINT provides an explicit runtime endpoint override for that adapter.
  • OPENCLAW_RUNTIME_MODEL_PROVIDER_MODEL affects the default provider/model selected by the agent runtime. It does not select the adapter by itself.

If the runtime model provider endpoint is invalid, the runtime falls back to the default model adapter path and logs the invalid selection. Seam selection logs are emitted when the runtime seam is initialized on first use; they are not guaranteed to appear immediately at process startup.

Memory and Providers

Connectors

Connector availability depends on the beta deployment path and repository configuration. The Docker beta path uses a narrow integration inventory by default. Broader channel, provider, and plugin code may exist elsewhere in the repository, but should not be assumed enabled for the beta runtime unless explicitly configured and documented.

Treat connector enablement as a security decision. Each connector can introduce data exposure, mutation, identity, rate-limit, and audit requirements. Enable only the connectors needed for the deployment and keep their credentials out of committed files.

Configuration

Configuration Model

The beta path has two primary configuration surfaces. Keep the distinction clear.

File Owns Examples
.env.animus Secrets and runtime endpoints OPENCLAW_GATEWAY_TOKEN, OPENCLAW_RUNTIME_UMA_HTTP_ENDPOINT, provider endpoint variables
.animus-config/openclaw.json Hardened policy defaults and allowlists product.mode, product.workspaceRoots, product.networkAllowedDomains, gateway.controlUi.allowedOrigins

The checked-in environment template is intentionally fail-closed until operator-owned values are replaced. Do not commit real tokens, provider credentials, or private endpoints.

Configuration

Environment Reference

Variable Required Purpose
OPENCLAW_GATEWAY_TOKEN Yes Shared token used by the Control UI and gateway access flow.
OPENCLAW_RUNTIME_UMA_HTTP_ENDPOINT Required for UMA HTTP path External UMA memory service endpoint using the uma.memory.v1 contract.
OPENCLAW_RUNTIME_MEMORY_PROVIDER Required for non-default UMA path Selects the memory provider. Use uma-http for the UMA HTTP provider.
OPENCLAW_RUNTIME_MODEL_PROVIDER Required for non-default model path Selects the runtime model adapter, such as ollama or openai.
OPENCLAW_RUNTIME_MODEL_PROVIDER_ENDPOINT Optional Overrides the endpoint for the selected runtime model adapter.
OPENCLAW_RUNTIME_MODEL_PROVIDER_MODEL Optional Sets the default provider/model selected by the agent runtime. It does not select the adapter.
Configuration

Policy Reference

Review these policy settings in .animus-config/openclaw.json before first run and after any exposure change.

Setting Required Purpose
product.mode Yes for production-like use Enables hardened product-mode behavior.
product.workspaceRoots Yes Defines file workspace roots available to runtime actions.
product.networkAllowedDomains As needed Defines outbound network destinations allowed by product policy.
product.browserAllowedDomains As needed Defines browser-control destinations allowed by product policy.
gateway.controlUi.allowedOrigins Yes Defines browser origins allowed to interact with the Control UI.

Avoid wildcard-style policy grants in production-like environments. Use the narrowest workspace roots, domains, and UI origins that support the task.

Operations

Self-Hosted Setup

Animus is designed for self-hosted deployment. The beta baseline binds locally by default and requires operator action before exposure is widened. This keeps initial testing safer and makes network exposure an explicit decision rather than an accident.

Beta stack

  • animus-gateway for gateway and Control UI access.
  • ollama when using the non-default Ollama model provider path.
  • External UMA service endpoint when using the UMA HTTP memory provider path.
  • .env.animus for secrets and runtime endpoints.
  • .animus-config/openclaw.json for hardened product policy.
Terminal
docker compose up --build -d animus-gateway ollama

Keep the Control UI loopback-only unless remote access is intentionally required and protected by appropriate network, origin, token, and logging controls.

Operations

Production Checklist

Use this checklist before treating a beta deployment as production-like.

  • product.mode=true is set in .animus-config/openclaw.json.
  • All placeholders in .env.animus are replaced with operator-owned values.
  • OPENCLAW_GATEWAY_TOKEN is strong, private, and not committed.
  • Control UI remains loopback-only unless remote exposure was intentionally approved.
  • If Control UI exposure was widened, gateway.controlUi.allowedOrigins is explicit and narrow.
  • product.workspaceRoots contains only the workspace roots required for the deployment.
  • product.networkAllowedDomains and product.browserAllowedDomains are explicit and narrow.
  • UMA endpoint is reachable only through intended internal paths and is protected appropriately.
  • Ollama or other model provider endpoints are local or access-controlled.
  • Gateway logs are reviewed after first run and after every policy change.
  • Debug logging is disabled unless actively troubleshooting.
  • Non-product mode is not used for production operation.
Operations

Security Hardening

Animus security depends on both runtime controls and operator-owned deployment controls. Product mode provides the hardened runtime posture, but operators still need to manage secrets, network exposure, persistence, identity, and logging.

Runtime hardening

  • Use product.mode=true for production-like deployments.
  • Keep dangerous raw exec/process paths blocked on product-mode paths.
  • Require sandboxed execution on hardened product-mode paths.
  • Use fail-closed workspace-root, browser, and network allowlist enforcement.
  • Keep browser-control startup fail-closed without explicit auth.

Deployment hardening

  • Use strong gateway tokens and rotate them when exposure changes.
  • Do not commit .env.animus with real secrets or endpoints.
  • Keep the Control UI on loopback unless remote access is required.
  • Protect UMA and model provider endpoints as internal service boundaries.
  • Restrict container privileges and mounted volumes to the minimum required.
  • Send runtime logs to an operator-owned retention system before broad deployment.
Operations

Troubleshooting

Problem Check Likely fix
Gateway does not start docker compose logs --tail=200 animus-gateway Confirm required placeholders in .env.animus were replaced and config JSON is valid.
Control UI is unreachable curl http://127.0.0.1:18789/healthz Confirm the gateway is running and that you are using the loopback URL.
Control UI rejects access Shared token value in .env.animus Paste the configured gateway token into the Control UI settings.
UMA calls fail OPENCLAW_RUNTIME_UMA_HTTP_ENDPOINT Confirm the UMA endpoint is reachable from the runtime and uses the expected uma.memory.v1 path.
Ollama provider is not selected OPENCLAW_RUNTIME_MODEL_PROVIDER and runtime logs Set the provider to ollama, verify the endpoint, and check seam selection logs after first use.
Action is denied Workspace, browser, or network allowlist Confirm the action is intentional, then add the narrowest required policy entry. Do not use broad wildcard grants.