admin
Admin - Local Machine Companion (Alpha)
Script path resolution: When Claude Code loads this file, it provides the full
path. All scripts/ references below are relative to this file's directory.
Derive SKILL_DIR from this file's path and prepend it when running scripts
(e.g., if loaded from /path/to/skills/admin/SKILL.md, run /path/to/skills/admin/scripts/test-admin-profile.sh).
Profile Gate — Mandatory First Step
Check for a profile before any operation. No profile means no preferences, no logging path, no state.
Bash (WSL/Linux/macOS):
scripts/test-admin-profile.sh
PowerShell (Windows):
pwsh -NoProfile -File "scripts/Test-AdminProfile.ps1"
Returns JSON: {"exists":true|false,"path":"...","device":"...","platform":"..."}
If exists: false — stop and run the TUI setup interview before proceeding.
Full details: references/profile-gate.md (discovery, TUI interview, create commands, troubleshooting).
CRITICAL: Secrets and .env
- NEVER store live
.envfiles or credentials inside any skill folder. .env.templatefiles belong only inassets/within a skill.- Store live secrets in
~/.admin/.envand reference from there.
Secrets Management
Three backends available, configured via ADMIN_SECRETS_BACKEND in ~/.admin/.env:
| Backend | Storage | Best For |
|---|---|---|
infisical |
Infisical Cloud | Multi-device, audit trail |
vault (default) |
$ADMIN_ROOT/vault.age |
Single device, offline |
env |
$ADMIN_ROOT/.env |
Legacy |
Fallback chain: infisical → vault → env. If the primary backend is unavailable, scripts automatically try the next.
CLI (Bash): secrets KEYNAME | secrets --list | secrets --status | secrets --backend infisical --list
CLI (PowerShell): secrets.ps1 KEY | secrets.ps1 -List | secrets.ps1 -Status | secrets.ps1 -Backend infisical -List
Migration: secrets --migrate-to-infisical pushes vault contents to Infisical Cloud.
Guides: references/vault-guide.md (age vault), references/infisical.md (Infisical Cloud)
Architecture
Ecosystem Map
admin (core)
├── 9 satellite skills: devops, oci, hetzner, contabo, digital-ocean, vultr, linode, coolify, kasm
├── 6 agents: profile-validator, docs-agent, verify-agent, tool-installer, mcp-bot, ops-bot
├── Profile system: ~/.admin/.env (satellite) → $ADMIN_ROOT/profiles/*.json (+ GitHub sync)
├── Secrets: Infisical Cloud (primary) → age vault (fallback) → .env (legacy)
└── SimpleMem: Long-term memory across sessions (graceful degradation)
Data Flow
Satellite .env (bootstrap) → profile.json (device config) → Agent decisions
↓ ↓ ↓
ADMIN_ROOT, DEVICE, tools, servers, prefs, SimpleMem storage
PLATFORM, SECRETS_BACKEND capabilities, history (speaker convention)
↓
Infisical Cloud (primary) → vault.age (fallback) → .env (legacy)
- Satellite
.env(~/.admin/.env): Per-device bootstrap. Points toADMIN_ROOT, configures secrets backend. - Root
.env($ADMIN_ROOT/.env): Manifest (all keys visible, secrets in vault/Infisical). - Profile JSON (
$ADMIN_ROOT/profiles/{DEVICE}.json): Full device config. Optionally synced via GitHub repo. - Secrets: Infisical Cloud (primary) →
$ADMIN_ROOT/vault.age(fallback) →.env(legacy).
Agent Roster
| Agent | Model | Role | Tools |
|---|---|---|---|
| profile-validator | haiku | JSON validation, read-only health check | Read, Bash, Glob |
| docs-agent | haiku | File I/O documentation updates | Read, Write, Glob, Grep |
| verify-agent | sonnet | System health checks, no Write | Read, Bash, Glob, Grep |
| tool-installer | sonnet | Install software per profile prefs | Read, Write, Bash, AskUserQuestion |
| mcp-bot | sonnet | MCP server diagnostics and config | Read, Write, Bash, Glob, Grep |
| ops-bot | sonnet | Multi-step operations (migration, import, bulk config) | Read, Write, Edit, Bash, Glob, Grep, AskUserQuestion |
All agents use SimpleMem graceful degradation and profile gate as first step.
Details: references/agent-teams.md, references/memory-integration.md
Satellite Dependency Graph
admin (core) ─── required by all satellites
│
├── devops ─── required by provider + app skills
│ │
│ ├── oci, hetzner, contabo, digital-ocean, vultr, linode
│ │ (provision servers)
│ │ │
│ └── coolify, kasm
│ (deploy apps TO provisioned servers)
│
└── Profile system provides: server inventory, SSH keys, credentials (via vault)
- admin: Core profile, logging, tool installation. Required by everything.
- devops: Server inventory, SSH, deployment coordination. Required by all infrastructure.
- Provider skills (oci, hetzner, etc.): Provision VMs. Independent of each other.
- App skills (coolify, kasm): Deploy TO servers. Require a provisioned server from a provider skill.
Task Qualification (MANDATORY)
- If the task involves remote servers/VPS/cloud, stop and hand off to devops.
- If the task is local machine administration, continue.
- If ambiguous, ask a clarifying question before proceeding.
Task Routing
| Task | Reference |
|---|---|
| Install tool/package | references/{platform}.md |
| Windows administration | references/windows.md |
| WSL administration | references/wsl.md |
| macOS/Linux admin | references/unix.md |
| MCP server management | references/mcp.md |
| Skill registry | references/skills-registry.md |
| Memory integration | references/memory-integration.md |
| Secrets / Infisical setup | references/infisical.md |
| Vault (age encryption) | references/vault-guide.md |
| Profile sync (GitHub) | references/remote-profile.md |
| Remote servers/cloud | → Use devops skill |
Profile-Aware Adaptation (Always Check Preferences)
- Python:
preferences.python.manager(uv/pip/conda/poetry) - Node:
preferences.node.manager(npm/pnpm/yarn/bun) - Packages:
preferences.packages.manager(scoop/winget/choco/brew/apt)
Never suggest install commands without checking preferences first.
Package Installation Workflow (All Platforms)
- Detect environment (Windows/WSL/Linux/macOS)
- Load profile via profile gate
- Check if tool already installed (
profile.tools) - Use preferred package manager
- Log the operation
Logging (MANDATORY)
Log every operation with the shared helpers.
Bash — params: MESSAGE LEVEL (INFO|WARN|ERROR|OK):
source scripts/log-admin-event.sh
log_admin_event "Installed ripgrep" "OK"
PowerShell — params: -Message -Level (INFO|WARN|ERROR|OK):
pwsh -NoProfile -File "scripts/Log-AdminEvent.ps1" -Message "Installed ripgrep" -Level OK
Note: There are no -Tool, -Action, -Status, or -Details parameters. Use -Message with a descriptive string.
Scripts / References
- Core scripts:
scripts/(profile, logging, issues, AGENTS.md) - MCP scripts:
scripts/mcp-* - Skills registry scripts:
scripts/skills-* - References:
references/*.md
Quick Pointers
- Cross-platform guidance:
references/cross-platform.md - Shell detection:
references/shell-detection.md - Device profiles:
references/device-profiles.md - PowerShell tips:
references/powershell-commands.md - Infisical secrets:
references/infisical.md - Remote profile sync:
references/remote-profile.md