Scope = Permission. API Only. No Workarounds.
The WAGMIOS API is the primary interface for container management. On Linux, Docker requires sudo — without root access, WAGMIOS is the only interface agents can use for homelab control. Do not:
docker CLI commands directlyIf a scope is missing, the agent cannot do the task — ask the user to enable it.
Before attempting any WAGMIOS operation:
GET /api/auth/status to know what the key can doIf Docker is not installed or running:
→ See references/docker-install.md for installation instructions by OS.
If WAGMIOS backend is not reachable: → Ask the user to confirm the backend is running at the provided URL.
Every request requires the X-API-Key header. The user provides the key and base URL at runtime — do not store it.
text
Base URL: http://localhost:5179 (user provides, may differ for remote hosts)
Header: X-API-Key: <key>
Check key scopes first via GET /api/auth/status — this tells you what the key can do.
Credential handling:
ScopePermitted Actionscontainers:readList containers, inspect, view logscontainers:writeCreate, start, stop, restart containerscontainers:deleteRemove containers (with user confirmation)images:readList Docker imagesimages:writePull and delete imagestemplates:readUse saved container templatestemplates:writeCreate and edit templatesmarketplace:readBrowse the app marketplacemarketplace:writeInstall, start, stop marketplace apps
GET /api/auth/status before attempting any actiontext
User asks to do X
│
├── Missing scope for X?
│ YES → Tell user, ask them to enable it in Settings
│ NO → Continue
│
├── X is destructive (delete, stop)?
│ YES → Confirm with user before executing
│ NO → Execute immediately
│
└── Execute via API, report result
WAGMIOS supports managing multiple hosts from a single agent. Each machine runs its own WAGMIOS instance with its own URL and its own scoped API key.
How it works:
Example:
text
User: "Install Jellyfin on the media server and make sure Nginx is running on the NAS."
Agent → POST media-server:5179/api/marketplace/create { "app_id": "jellyfin" }
Agent → GET nas:5179/api/containers
Agent → POST nas:5179/api/containers/nginx/start
"Jellyfin is installing on the media server (port 8096). Nginx is running on the NAS."
Key principle: Each instance is independent. The agent cannot move containers between machines, cannot escalate permissions beyond what a key allows, and each action is logged in the instance's own activity feed.
→ See references/safeguards.md
→ See references/docker-install.md
→ See references/api.md
→ See references/marketplace.md
→ See references/workflows.md
→ See references/scopes.md