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.
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.
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 |
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.
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=trueis 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.
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
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.
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.
-
Copy the beta config and environment templates
Terminalmkdir -p .animus-config workspace cp config/animus.beta.json .animus-config/openclaw.json cp .env.animus.example .env.animus
-
Replace required placeholders in
.env.animusOPENCLAW_GATEWAY_TOKENOPENCLAW_RUNTIME_UMA_HTTP_ENDPOINT -
Review policy defaults and allowlists
Open
.animus-config/openclaw.jsonand review:product.workspaceRoots
product.networkAllowedDomains
product.browserAllowedDomains
gateway.controlUi.allowedOrigins
-
Start the beta stack
Terminaldocker compose up --build -d animus-gateway ollama
-
Verify readiness
Terminaldocker compose ps curl http://127.0.0.1:18789/healthz docker compose logs --tail=200 animus-gateway
-
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.animusinto the Control UI settings when prompted.
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. |
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. |
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.
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.
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.
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.
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.
{
"apiVersion": "uma.blueprint.v1",
"id": "uma-1",
"method": "retrieve_context",
"params": {
"query": "current task context"
}
}
Supported UMA methods
set_contextload_userprofileload_agentprofileload_memory_bootstrapload_daily_diary_bootstrapingest_documentretrieve_contextretrieve_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.
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.
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
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_PROVIDERselects the runtime model adapter, such asollamaoropenai.OPENCLAW_RUNTIME_MODEL_PROVIDER_ENDPOINTprovides an explicit runtime endpoint override for that adapter.OPENCLAW_RUNTIME_MODEL_PROVIDER_MODELaffects 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.
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 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.
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. |
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.
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-gatewayfor gateway and Control UI access.ollamawhen using the non-default Ollama model provider path.- External UMA service endpoint when using the UMA HTTP memory provider path.
.env.animusfor secrets and runtime endpoints..animus-config/openclaw.jsonfor hardened product policy.
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.
Production Checklist
Use this checklist before treating a beta deployment as production-like.
product.mode=trueis set in.animus-config/openclaw.json.- All placeholders in
.env.animusare replaced with operator-owned values. OPENCLAW_GATEWAY_TOKENis strong, private, and not committed.- Control UI remains loopback-only unless remote exposure was intentionally approved.
- If Control UI exposure was widened,
gateway.controlUi.allowedOriginsis explicit and narrow. product.workspaceRootscontains only the workspace roots required for the deployment.product.networkAllowedDomainsandproduct.browserAllowedDomainsare 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.
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=truefor 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.animuswith 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.
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. |