Install
openclaw skills install @psyb0t/supervisor-config-genBash tool that generates a Supervisor (supervisord) [program:*] config file from zero CLI flags — it derives everything from the current directory (program name = dirname, command=<dir>/run.sh, directory=<dir>, user=$(whoami), logs under $HOME/logs/supervisord/) and writes <dirname>-supervisor.conf into that same directory, overwriting silently if present. Use when the user wants to generate a Supervisor program config for an app directory that has a run.sh entrypoint.
openclaw skills install @psyb0t/supervisor-config-gensupervisor-config-gen is a single bash script with no flags, no args, no env vars. Run it from inside an app directory and it emits a Supervisor [program:x] config for that app, inferring everything from the directory itself.
<dirname>-supervisor.conf in the current directory without prompting if one already exists. Don't run it in a directory where that file has manual edits you want to keep.run.sh — it just references its path. Make sure run.sh is what you expect before Supervisor runs it.run.sh entrypoint (a startup script Supervisor should manage).run.sh — the generated command= will point at a script that doesn't exist. Add/rename a run.sh entrypoint first, or hand-write the config.numprocs, environment vars, non-TERM stop signal, different log paths/rotation, etc.) — this tool has no flags to control those. Generate the base config, then hand-edit it.There is nothing to pass in. The script derives every field from ambient state at run time:
| Field | Source |
|---|---|
program_name (used in filename + [program:x]) | basename $(pwd) — the current directory's name |
command | $(pwd)/run.sh — a run.sh is REQUIRED to exist in the current directory (the script doesn't check, it just hardcodes the path) |
directory | $(pwd) |
user | $(whoami) — the user invoking the script |
stdout_logfile / stderr_logfile | $HOME/logs/supervisord/<program_name>-{out,err}.log |
| output path | ./<program_name>-supervisor.conf (written in the current directory, overwritten if it exists) |
Everything else (numprocs=1, stopsignal=TERM, stopwaitsecs=10, stopasgroup=true, killasgroup=true, autostart=true, autorestart=true, redirect_stderr=true, redirect_stdout=true, 50MB log rotation with 10 backups on stdout) is fixed/hardcoded — not configurable via flags.
Given an app directory shitty-app/ containing main.py and run.sh:
cd shitty-app
supervisor-config-gen
# Generated shitty-app-supervisor.conf
Resulting shitty-app-supervisor.conf (paths reflect the actual invoking user/home/cwd):
[program:shitty-app]
command=/home/not-root/shitty-app/run.sh
directory=/home/not-root/shitty-app
process_name=%(program_name)s
numprocs=1
user=not-root
stopsignal=TERM
stopwaitsecs=10
stopasgroup=true
killasgroup=true
autostart=true
autorestart=true
redirect_stderr=true
redirect_stdout=true
stdout_logfile=/home/not-root/logs/supervisord/%(program_name)s-out.log
stdout_logfile_maxbytes=50MB
stdout_logfile_backups=10
stderr_logfile=/home/not-root/logs/supervisord/%(program_name)s-err.log
stderr_logfile_maxbytes=50MB
For install steps and the full field reference, see references/setup.md.