Skip to main content

Licensing

AgentVisor is a licensed product. Released binaries and official container images require a valid Manetu license key to start.

Obtaining a License

Visit https://manetu.com/agentvisor to obtain a license key, or contact sales@manetu.com.

Activating Your License

Interactive Activation (CLI)

When you run agentvisor serve, agentvisor run, or agentvisor exec on a terminal without a license key configured, AgentVisor prompts you interactively:

AgentVisor license key: ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
(Enter to submit, Ctrl+C to cancel)
Get a license: https://manetu.com/agentvisor

Enter your key and press Enter. AgentVisor validates it online and stores it in the OS-native keyring (macOS Keychain, Linux Secret Service / pass / KWallet, Windows Credential Manager). Subsequent runs on the same machine use the stored key automatically — you are not prompted again unless the keyring entry is deleted.

Environment Variable

Set AGENTVISOR_LICENSE_KEY before starting AgentVisor. This is the recommended approach for automated environments, CI/CD pipelines, and containers:

export AGENTVISOR_LICENSE_KEY="XXXXX-XXXXX-XXXXX-XXXXX-XXXXX"
agentvisor serve .

When this variable is set, the key is also persisted to the keyring for future runs on that machine.

Key in environment only

AGENTVISOR_LICENSE_KEY must be set as an environment variable. Setting it in agentvisor.yaml is intentionally rejected to prevent accidental exposure through config management systems.

Key Resolution Chain

On each startup, AgentVisor resolves the license key through this chain (first match wins):

StepSourceAction
1Keyring activation cache is freshSkip key lookup entirely — use the cached validated license directly, without reading AGENTVISOR_LICENSE_KEY or the keyring key
2AGENTVISOR_LICENSE_KEY env varUse key and persist it to the keyring for future runs
3Keyring (stored from a previous run)Use persisted key
4Stdin is a TTYPrompt operator interactively
5None of the aboveFail with license key required (get a license at https://manetu.com/agentvisor)

Verifying Activation

Confirm the license was accepted by checking the startup log:

level=INFO msg="license validated" build_type=release source=online provider=cryptolens

source=online indicates a fresh activation. Subsequent starts with a warm keyring cache show source=cache.


Container Deployments

OS-native keyring backends are generally not available inside OCI containers. Always inject the license key via the environment:

docker run --security-opt seccomp=unconfined \
--security-opt apparmor=unconfined \
-p 8090:8090 \
-e AGENTVISOR_LICENSE_KEY="XXXXX-XXXXX-XXXXX-XXXXX-XXXXX" \
my-agent:v1

Docker Compose

Pass the key from the host environment (never hard-code it in the compose file):

services:
agentvisor:
image: my-agent:v1
environment:
AGENTVISOR_LICENSE_KEY: "${AGENTVISOR_LICENSE_KEY}"

Then on the host:

export AGENTVISOR_LICENSE_KEY="XXXXX-XXXXX-XXXXX-XXXXX-XXXXX"
docker compose up

Kubernetes

Store the key in a Secret and reference it via secretKeyRef:

apiVersion: v1
kind: Secret
metadata:
name: agentvisor-license
type: Opaque
stringData:
license-key: "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX"

Then reference it in the Deployment:

env:
- name: AGENTVISOR_LICENSE_KEY
valueFrom:
secretKeyRef:
name: agentvisor-license
key: license-key
Network access

The license is validated online on every container start when no keyring is available. Ensure the container can reach app.cryptolens.io:443 (outbound HTTPS). See Air-gap / Offline if your environment lacks external network access.


Machine Code and Node-Locking

Licenses are node-locked to a machine code. By default, AgentVisor reads /etc/machine-id (Linux systemd), falling back to the system hostname (os.Hostname()) if that file is absent or empty. In containers these values change across restarts and image rebuilds, quickly exhausting activation slots.

Set a stable, deployment-specific identifier instead:

AGENTVISOR_LICENSE_MACHINE_CODE=prod-cluster-east-1

Choose a value that is:

  • Stable across container restarts and image rebuilds
  • Unique per deployment unit (cluster, namespace, or node)
  • Not reused across geographically separated deployments that require independent activation

Alternatively, configure the id section in agentvisor.yaml — AgentVisor uses this as the machine code when AGENTVISOR_LICENSE_MACHINE_CODE is not set:

id:
type: string
value: "prod-cluster-east-1"

Resolution order:

  1. AGENTVISOR_LICENSE_MACHINE_CODE (explicit, highest priority)
  2. AgentVisor ID from id config section
  3. /etc/machine-id (Linux systemd; avoid in containers)
  4. System hostname (os.Hostname()), if /etc/machine-id is absent or empty

Air-Gap / Offline

Once activated, AgentVisor can run without network access for the duration of the built-in grace period (default: 30 days):

  • Cache fresh (< 7-day refresh interval): No network call, instant startup.
  • Cache stale (≥ 7 days): Refresh is attempted. On failure the grace period is checked.
  • Within grace period: A warning is logged and the cached license is accepted.
  • Grace period expired: Startup fails. Restore network access to re-activate.

To pre-populate the cache before going offline, run AgentVisor once with network access and confirm the source=online log line. The cache remains valid for the full 30-day grace period.

The refresh interval and grace period are fixed at build time and cannot be overridden at runtime. Contact sales@manetu.com if your scenario requires a longer grace period.


Renewal and Deactivation


Troubleshooting

ErrorCauseFix
license key required (get a license at https://manetu.com/agentvisor)No key in env, keyring, or cache; stdin not a TTYSet AGENTVISOR_LICENSE_KEY
open license keyring: keyring: no native keyring backend availableContainer or environment without a native keyringSet AGENTVISOR_LICENSE_KEY env var
cannot contact license server and no cached licenseNo network on first run, no cacheRestore network access and restart
license has not been refreshed online for NdCache older than the grace periodRestore network access to re-activate
license cache in keyring is corruptedKeyring entry malformedDelete the keyring entry and restart
license <key> is blocked or expiredKey revoked or subscription lapsedContact sales@manetu.com
license <key> has reached its activation limitToo many simultaneous activationsDeactivate unused machines in the Cryptolens dashboard

See Also