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.
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):
| Step | Source | Action |
|---|---|---|
| 1 | Keyring activation cache is fresh | Skip key lookup entirely — use the cached validated license directly, without reading AGENTVISOR_LICENSE_KEY or the keyring key |
| 2 | AGENTVISOR_LICENSE_KEY env var | Use key and persist it to the keyring for future runs |
| 3 | Keyring (stored from a previous run) | Use persisted key |
| 4 | Stdin is a TTY | Prompt operator interactively |
| 5 | None of the above | Fail 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
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:
AGENTVISOR_LICENSE_MACHINE_CODE(explicit, highest priority)- AgentVisor ID from
idconfig section /etc/machine-id(Linux systemd; avoid in containers)- System hostname (
os.Hostname()), if/etc/machine-idis 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
- Renewal — Contact sales@manetu.com or visit https://manetu.com/agentvisor.
- Deactivation — Log in to the Cryptolens dashboard, navigate to your product, find the license key, and click Deactivate next to the machine code you want to free. The freed seat is immediately available for activation elsewhere.
Troubleshooting
| Error | Cause | Fix |
|---|---|---|
license key required (get a license at https://manetu.com/agentvisor) | No key in env, keyring, or cache; stdin not a TTY | Set AGENTVISOR_LICENSE_KEY |
open license keyring: keyring: no native keyring backend available | Container or environment without a native keyring | Set AGENTVISOR_LICENSE_KEY env var |
cannot contact license server and no cached license | No network on first run, no cache | Restore network access and restart |
license has not been refreshed online for Nd | Cache older than the grace period | Restore network access to re-activate |
license cache in keyring is corrupted | Keyring entry malformed | Delete the keyring entry and restart |
license <key> is blocked or expired | Key revoked or subscription lapsed | Contact sales@manetu.com |
license <key> has reached its activation limit | Too many simultaneous activations | Deactivate unused machines in the Cryptolens dashboard |
See Also
- Configuration Reference — License — environment variable table