| name | armorer |
| description | Operate applications through Armorer rather than ad hoc shell commands. Use when installing, uninstalling, running, configuring, or inspecting Armorer-managed apps; checking Armorer jobs, queue state, logs, or Core behavior; and verifying deployment or runtime health through Armorer commands and observed evidence. |
Use Armorer As The Operator Surface
Use this skill to operate applications through Armorer rather than by hand.
Workflow
- Inspect current state first.
Use commands like:
uv run armorer list
uv run armorer run <agent> status
- Prefer Armorer commands over raw shell.
Examples:
uv run armorer install <agent> --yes --skip-scan
uv run armorer run <agent>
uv run armorer uninstall <agent> --force
uv run armorer app configure <agent>
- Treat long-running work as job-aware work.
Background job state is stored in:
If a chat/Core flow starts a job, track it through track_job.
Do not fire a long-running command and stop there. Monitor until it reaches a terminal state.
Minimum monitoring loop:
- start the install/run/uninstall action
- inspect job state, process state, or service/container state while it is active
- distinguish slow progress from a stuck or stale operation
- report success only after terminal verification
Examples:
- Start setup work with a short Q&A.
Do not assume configuration choices that belong to the user.
Before applying setup for an app:
- inspect current Armorer or app config
- tell the user what is already set
- ask only for the missing or unclear values
- ask one concrete question at a time
- apply the config and verify it
Typical questions:
- which model provider to use
- exact model id
- API key or base URL
- which channels to enable
- which skills or tools to enable
- any required app-specific credentials
For channel setup, once the required credential has been collected:
- ask whether Armorer should bind and verify that channel now
- if the user defers, apply config but report channel verification as deferred
- if the user confirms, bind and verify before reporting success
- if the channel uses DM pairing, ask the user to send a message to the bot/app
- ask the user to paste the pairing code they receive
- approve that pairing through Armorer/OpenClaw before reporting the channel ready
If an existing value is already configured, say so and ask whether to keep it or replace it.
For model setup, preserve this order:
- ask for the provider
- ask for the exact model id
- check whether a credential already exists for that provider
- ask whether to keep or replace the existing credential
- if replacement is needed, ask for the new API key or base URL
Do not ask about credential reuse before the model id is known.
For selected app-native skills, continue past selection:
- inspect the skill requirements
- filter out skills that are not feasible in the actual runtime
- install any missing binaries in the app runtime context
- if the app runs in Docker, install them where the container can actually access them
- verify the binaries from the same runtime context
- if a skill requires auth, login, bootstrap, or pairing, kick off that process too
- verify the auth or bootstrap state from the runtime context
- enable the skills in config
- test the enabled skills with a minimal safe check
Do not assume a host-only install is sufficient for a containerized app.
Do not expose infeasible skills as selectable options for the current runtime.
Examples of infeasible skills:
- host-only installer for a containerized runtime
- unsupported package manager for the target runtime
- dependency on a local desktop app the runtime cannot reach
- Verify before reporting success.
Check at least one of:
uv run armorer list
- runtime status command
- container or service state
- health endpoint
- resulting config files
Troubleshooting
If chat or Core looks wrong, inspect:
tail -n 120 ~/.armorer/chat_tui.log
docker logs --tail 120 armorer-core
If jobs look stuck:
uv run armorer core clear-queue
uv run armorer core clear-jobs
Use care before clearing jobs if you have reason to believe real work is still running.
If an operation appears hung, keep monitoring before declaring failure:
- inspect the active Armorer job record
- inspect relevant container or process state
- confirm whether there is live progress, a stale heartbeat, or a hard failure
- decide only then whether to retry, repair, or clear stale jobs
Source Files To Inspect
When behavior needs to change, start here:
src/armorer/core.py
src/armorer/tools/orchestrator.py
src/armorer/main.py
src/armorer/registry.py
src/armorer/installers/dynamic.py
Guardrails
- Do not claim an install or setup succeeded without verification.
- Do not replace Armorer-managed flows with manual Docker commands unless Armorer lacks the capability.
- Preserve the training trace pipeline in
~/.armorer/training_data.