skills/app-deployer/SKILL.md
Deploy and manage user applications as managed systemd services
npx skillsauth add bolivian-peru/os-moda app-deployerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Deploy and manage user applications (Node.js apps, Python scripts, Go binaries, Docker-less containers, etc.) as first-class managed processes on the OS.
app_deploy with appropriate parameters. Default isolation uses DynamicUser=yes (ephemeral UID, no root).app_list to confirm the app is running. Check app_logs for startup output.memory_store to remember what was deployed and why.User: "Deploy my Node.js API at /home/user/api"
1. app_deploy({
name: "user-api",
command: "/usr/bin/node",
args: ["server.js"],
working_dir: "/home/user/api",
env: { NODE_ENV: "production", PORT: "3000" },
port: 3000,
memory_max: "256M",
user: "user"
})
2. app_list() → confirm running, check PID
3. app_logs({ name: "user-api", lines: 20 }) → verify startup
4. memory_store({ summary: "Deployed user-api Node.js app", ... })
app_list shows all apps with live systemd state, PID, memory, CPU usageapp_logs pulls from journald — supports --since, --priority, line limitsapp_restart — if the unit is active, calls systemctl restart. If inactive, re-deploys from registryapp_stop — stops the unit, marks as stopped in registry (preserved for restart)app_remove — stops and permanently deletes from registryApps run under systemd cgroups. Available limits:
| Parameter | Example | Effect |
|-----------|---------|--------|
| memory_max | "256M", "1G" | Hard memory cap via MemoryMax= |
| cpu_quota | "50%", "200%" | CPU time limit (200% = 2 cores) |
DynamicUser=yes): App runs as an ephemeral system user. No root, no access to other users' files. Best for self-contained binaries and services.user: "username"): App runs as the specified user. Use when the app needs to read/write files owned by that user (e.g., /home/user/data).Apps are registered in /var/lib/osmoda/apps/registry.json. The osmoda-app-restore service re-creates all running apps as transient systemd units on boot. Apps marked as stopped are not restored.
memory_max for production apps to prevent OOM issuesport parameter for discovery — system_discover will find the appuser when the app needs filesystem access beyond its own binaryapp_logs after deploy to catch startup errors immediatelyapp_restart (not stop + deploy) to preserve the same configurationdevops
Multi-perspective risk analysis using structured persona debate before deploying changes
development
Build software via spec-driven development (github/spec-kit). Whenever the user asks for a feature larger than a one-line tweak, scaffold a spec-kit project, capture WHAT + WHY, declare tech stack, break into tasks, then iterate the implementation until tests pass.
development
Manage NixOS packages declaratively. Search, install (via configuration.nix rebuild), remove, rollback, and list generations. Understands the NixOS declarative model.
data-ai
Monitor system health: CPU, memory, disk, network, processes, services, and logs. Present data naturally. Correlate issues across subsystems. Alert on thresholds. Diagnose root causes.