Server Access
Resolve a named server, SSH in, and run the smallest command that answers the question.
Workflow
1. Resolve the server
Credentials file: ~/.systemcraft/ssh/creds.yml
servers:
- name: Server 1
host: 203.0.113.10
user: root # optional; default: current user or ssh config default
key: ~/.ssh/id_ed25519 # optional; omit to use default SSH key selection
Required: name, host. Optional: user, key. Unknown server? Ask for the correct name or file.
2. Use the helper script
python3 <skill-dir>/scripts/server_access.py --config ~/.systemcraft/ssh/creds.yml inspect --server "Server 1" -- "hostname"
# Docker stopped-container check
python3 <skill-dir>/scripts/server_access.py --config ~/.systemcraft/ssh/creds.yml docker-stopped --server "Server 1"
3. Delegate and stay read-only
Async requests ("check Server 1", "report back") get a sub-agent: resolve, run the helper script, summarize.
Safe defaults: hostname, uptime, docker ps, docker ps -a --filter status=exited, systemctl status <service>, df -h, free -h. No restarts/prunes/edits unless asked.
Output format
Report server, host, and any stopped containers found.
Server: Server 1 (203.0.113.10)
Stopped containers: 2
- api: Exited (1) 3 hours ago
- worker: Exited (137) 25 minutes ago
Server: Server 1 (203.0.113.10)
Stopped containers: 0
All containers currently look running or absent.
Guardrails
- Treat creds as sensitive; never echo private keys.
- Prefer
BatchMode=yes+ bounded timeouts; report DNS/timeout/auth/Docker failures plainly. - No YAML libs? Use JSON only if the file is JSON — never guess at malformed YAML.
References
references/creds-example.yml— example credentials layout.scripts/server_access.py— helper for config loading and SSH execution.