Guides AI agents working on Community Scripts / Proxmox VE Helper Scripts contributions. Use when creating, updating, testing, or opening PRs for community-scripts/ProxmoxVED or community-scripts/ProxmoxVE, or when the user mentions Community Scripts, ProxmoxVED, ProxmoxVE helper scripts, ct scripts, install scripts, json metadata, dev_mode, or the official PR template.
List every extension enabled by app schema. Non-trusted extensions need pre-creating. Grant superuser only if strictly needed.
setup_mariadb + setup_mariadb_db
setup_mysql + setup_mysql_db
setup_mongodb
setup_clickhouse
setup_meilisearch
Tools & Infrastructure
setup_composer
setup_ffmpeg
setup_imagemagick
setup_gs
setup_yq
setup_adminer
setup_hwaccel
setup_nltk
Repositories, Services, Dependencies & TLS
setup_deb822_repo "name" "<gpg_url>" "<repo_url>" "<suite>" ["component"] ["archs"] for 3rd-party APT repositories (never hand-roll GPG keys or sources.list files).
safe_service_restart <svc>
ensure_dependencies <pkg...> (installs jq, openssl, etc. on demand).
install_packages_with_retry <pkg...>
create_self_signed_cert "<app>" -> /etc/ssl/<app>/<app>.{crt,key} (SAN covers hostname + container IP + localhost; never hand-roll openssl).
Data Persistence & Updates (Critical)
CLEAN_INSTALL=1 fetch_and_deploy_* wipes /opt/<app> before re-extracting. Any user state or secrets stored inside /opt/<app> will be permanently lost during updates.
Follow these strict rules:
Standard Pattern (Preferred):
Store all persistent state and data outside the app directory in /opt/<app>_data (NOT /opt/<app>/data).
Point the application there via its data directory configuration or environment variables (e.g. DATA_DIR, *_DATA_DIR).
Place non-regenerable configuration and secrets (signing keys, generated .env, .toml) in /opt/<app>_data as well.
Updates keep everything with no backup or restore step required.
Exception Pattern (Manifest Backup Helpers):
Only when data genuinely cannot be relocated outside /opt/<app>, back it up in update_script() using the manifest helpers (never use manual cp or /tmp):
create_backup copies paths into /opt/<NSAPP>.backup with a manifest, is idempotent, and aborts update on failure.
restore_backup restores every manifest path and removes the backup store.
Override default backup store location with BACKUP_DIR if /opt/<NSAPP>.backup clashes.
Never back up to /tmp (temporary directories can be cleared by the system).
Secure-Context Web Apps (HTTPS)
Modern browser APIs such as crypto.subtle (Web Crypto / PKCE), navigator.storage.getDirectory (OPFS), service workers, and SharedArrayBuffer require a secure context (HTTPS or localhost). Applications using them break over plain http://<IP> with errors like crypto.subtle is unavailable in insecure contexts.
When an application requires a secure context:
Terminate TLS with create_self_signed_cert "<app>" behind an Nginx reverse proxy listening on port 443 with SSL enabled.
Redirect port 80 to port 443.
Proxy requests to the application on its internal port (or serve static files directly).
If the application source uses SharedArrayBuffer, configure cross-origin isolation headers on the HTTPS server:
No top-level config_path:config_path belongs under individual install methods in install_methods (a script can have multiple methods with different paths).
date_created: Today's date in YYYY-MM-DD format.
install_methods.resources: Must match CT script variables (var_cpu, var_ram, var_disk, var_os, var_version).
repository: Upstream repository as a full URL (e.g., https://github.com/owner/repo, https://gitlab.com/owner/repo, https://codeberg.org/owner/repo). Never bare owner/repo.
logo: Use CDN pattern: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/<slug>.webp.
architectures: Replaced the deprecated has_arm boolean. It must match var_arm64 in the CT script (arch_check aborts with exit code 106 on arm64 hosts when CT script says no):
var_arm64
architectures
yes
["amd64", "arm64"]
no
["amd64"]
unset
omit field
platforms (optional):["pve"], ["incus"] or both. Defaults to Proxmox VE if omitted. Only claim incus if script exists in the Incus repository.
logs for persistent logs under /var/log/community-scripts/.
keep to preserve failed containers.
motd for early SSH access.
pause for step-by-step inspection.
breakpoint for an interactive shell on failure.
trace only in isolated environments because it can expose secrets.
dryrun for simulation only.
Validate install, update path, service health, logs, credentials handling, exposed ports, and absence of hardcoded secrets.
PR Template Rules
Use the official ProxmoxVED PR template verbatim. Do not replace it with a custom body.
For new scripts, the PR must include:
🆕 New script checked.
One arm64 option checked.
All prerequisites checked only if true.
Code and security review checkboxes checked only after self-review.
Exactly one AI assistance option checked:
No AI used, or
AI was used.
All Application Requirements checked only if true:
application is at least 6 months old;
actively maintained;
600+ GitHub stars;
official release tarballs are published;
contributor understands not all scripts are accepted.
Source links filled.
The automated check closes PRs missing required template sections or required checkbox selections.
Work Sequence
Fetch current official rules from the sources above.
Decide the correct repo: ProxmoxVED for new scripts, ProxmoxVE for existing promoted scripts.
Inspect similar existing scripts before coding.
Implement with official helpers and standard structure (CT, install, JSON).
Test with dev_mode="keep,logs" and real Proxmox evidence.
Run the local checklist from this skill.
Open PR only after checks pass.
If the bot closes the PR, read the bot comment exactly and fix the missing rule before opening a replacement PR.
Local Checklist
Official sources checked this session.
Correct target repository selected (ProxmoxVED for new, ProxmoxVE for fixes/updates).
Exactly three files created: ct/<slug>.sh, install/<slug>-install.sh, json/<slug>.json.
Script structure matches current templates (CT declarations, install flow, footers).
Required helper functions used (fetch and deploy, runtimes, databases, tools).
No wrapper msg_* calls around helpers with built-in logging.
No anti-patterns present (no Docker, no sudo, no apt-get, $STD prefix on apt/build).
Persistent data and configuration reside in /opt/<app>_data (or managed via create_backup / restore_backup manifest helpers).
Backups go to /opt, never /tmp.
Multi-arch asset patterns use arch_resolve (no hardcoded architecture tokens).
3rd-party APT repos use setup_deb822_repo; TLS certs use create_self_signed_cert.
GitLab sources use fetch_and_deploy_gl_release / check_for_gl_release with GITLAB_URL.
Secure-context web applications configured with HTTPS reverse proxy (and COOP/COEP headers if using SharedArrayBuffer).
CT var_arm64 accurately reflects arm64 support.
JSON metadata present and consistent with CT script resources.
JSON architectures agrees with CT var_arm64 (yes -> ["amd64", "arm64"], no -> ["amd64"], unset -> omitted).
JSON repository is a full URL (https://...), not bare owner/repo.
No top-level config_path in JSON (configured on install methods).
JSON platforms claims incus only if script exists in the Incus repository.
Every read in install script is guarded by -z "${var_x:-}", exported in ct/<app>.sh, and declared in JSON app_vars.
Real install test completed or limitation documented.
update_script() reviewed or tested.
PR body uses official template verbatim.
AI assistance checkbox is selected when AI was used.
Bot comment reviewed if PR was closed.
1---2name: community-scripts-rules3description: Guides AI agents working on Community Scripts / Proxmox VE Helper Scripts contributions. Use when creating, updating, testing, or opening PRs for community-scripts/ProxmoxVED or community-scripts/ProxmoxVE, or when the user mentions Community Scripts, ProxmoxVED, ProxmoxVE helper scripts, ct scripts, install scripts, json metadata, dev_mode, or the official PR template.4---56# Community Scripts Rules78Use this skill before changing, testing, or submitting Community Scripts work.910## Official Sources1112Always verify current rules from official sources before coding or opening a PR:1314- `https://community-scripts.org/docs`15- `https://community-scripts.org/docs/contribution`16- `https://community-scripts.org/docs/dev_mode`17- `https://github.com/community-scripts/ProxmoxVED`18- `https://github.com/community-scripts/ProxmoxVED/blob/main/.github/pull_request_template.md`19- `https://github.com/community-scripts/ProxmoxVED/blob/main/AGENTS.md`20- `https://github.com/community-scripts/ProxmoxVED/blob/main/.github/agents/pve-script-creator.agent.md`21- `https://github.com/community-scripts/ProxmoxVE/blob/main/CONTRIBUTING.md`2223Prefer raw GitHub URLs when fetching markdown:2425- `https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/.github/pull_request_template.md`26- `https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/AGENTS.md`27- `https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/.github/agents/pve-script-creator.agent.md`28- `https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/CONTRIBUTING.md`2930If official sources conflict, use `ProxmoxVED` rules for new scripts and `ProxmoxVE` rules for fixes to existing promoted scripts.3132## Repository Routing3334- New scripts go to `community-scripts/ProxmoxVED`.35- Existing script fixes, improvements, and features go to `community-scripts/ProxmoxVE`.36- Do not open new-script PRs directly against `ProxmoxVE`; they are closed without review.37- Keep PRs small and focused.3839## Mandatory ProxmoxVED Rules4041For new ProxmoxVED application scripts:4243- Create exactly three files: `ct/<app>.sh`, `install/<app>-install.sh`, and `json/<app>.json`.44- CT scripts source `misc/build.func` (or `build.func`).45- Install scripts source `$FUNCTIONS_FILE_PATH`.46- CT scripts declare all required `var_*` values, including `var_arm64`.47- CT scripts implement `update_script()`.48- CT scripts end with `start`, `build_container`, `description`, and the standard access footer.49- Install scripts call `color`, `verb_ip6`, `catch_errors`, `setting_up_container`, `network_check`, and `update_os`.50- Install scripts end with `motd_ssh`, `customize`, and `cleanup_lxc`.51- Prefer bare-metal installation; never use Docker for installation scripts.52- Use helper functions instead of custom implementations.5354## Required Helpers5556Always use project helpers instead of custom implementations:5758### Source Deploy & Release Fetchers59- `fetch_and_deploy_gh_release "<app>" "owner/repo" "<mode>" ["latest"] ["/opt/<app>"] ["<asset-pattern>"]`60 - GitHub releases. Modes: `tarball` (source), `binary` (.deb), `prebuild` (prebuilt archive), `singlefile` (single binary).61 - The resolved version is written to `~/.<app>` (read back with `cat ~/.<app>` when needed at build/runtime).62- `fetch_and_deploy_gl_release` / `fetch_and_deploy_gl_tag`63 - GitLab (self-hosted or gitlab.com).64 - Set `GITLAB_URL="https://gitlab.example.org"` (default `https://gitlab.com`) and optional `GITLAB_TOKEN`.65 - Same modes as GitHub helper. Do not use GitHub helper for GitLab repositories.66- `fetch_and_deploy_codeberg_release`67 - Codeberg releases.68- `fetch_and_deploy_from_url`69 - Fallback for fixed URLs when no release API fits (avoids hand-rolled curl/tar).70- Multi-arch asset resolution:71 - Build asset patterns with `arch_resolve "x86_64" "arm64"` instead of hardcoding architecture strings.7273### Update Checks74- `check_for_gh_release "<app>" "owner/repo"` (returns 0 when newer release exists).75- `check_for_gl_release` (with `GITLAB_URL`).76- `get_latest_github_release "owner/repo"` (returns latest release version string).7778### Runtimes79- `NODE_VERSION="22" NODE_MODULE="pnpm@x" setup_nodejs`80- `setup_go` (no argument = latest; never pin a bare `1.23` — requires full `1.23.x`)81- `RUST_CRATES="..." setup_rust`82- `UV_PYTHON="3.12" setup_uv`83- `RUBY_VERSION setup_ruby`84- `JAVA_VERSION setup_java`85- `PHP_VERSION="8.3" PHP_MODULE="gd,intl,mysql" PHP_FPM="YES" setup_php` (note singular `PHP_MODULE`)8687### Databases88- `setup_postgresql` + `PG_DB_NAME PG_DB_USER PG_DB_EXTENSIONS="vector,pg_stat_statements" [PG_DB_GRANT_SUPERUSER="true"] setup_postgresql_db`89 - List every extension enabled by app schema. Non-trusted extensions need pre-creating. Grant superuser only if strictly needed.90- `setup_mariadb` + `setup_mariadb_db`91- `setup_mysql` + `setup_mysql_db`92- `setup_mongodb`93- `setup_clickhouse`94- `setup_meilisearch`9596### Tools & Infrastructure97- `setup_composer`98- `setup_ffmpeg`99- `setup_imagemagick`100- `setup_gs`101- `setup_yq`102- `setup_adminer`103- `setup_hwaccel`104- `setup_nltk`105106### Repositories, Services, Dependencies & TLS107- `setup_deb822_repo "name" "<gpg_url>" "<repo_url>" "<suite>" ["component"] ["archs"]` for 3rd-party APT repositories (never hand-roll GPG keys or sources.list files).108- `safe_service_restart <svc>`109- `ensure_dependencies <pkg...>` (installs jq, openssl, etc. on demand).110- `install_packages_with_retry <pkg...>`111- `create_self_signed_cert "<app>"` -> `/etc/ssl/<app>/<app>.{crt,key}` (SAN covers hostname + container IP + localhost; never hand-roll openssl).112113## Data Persistence & Updates (Critical)114115`CLEAN_INSTALL=1 fetch_and_deploy_*` wipes `/opt/<app>` before re-extracting. Any user state or secrets stored inside `/opt/<app>` will be permanently lost during updates.116117Follow these strict rules:1181191. **Standard Pattern (Preferred):**120 - Store all persistent state and data outside the app directory in `/opt/<app>_data` (NOT `/opt/<app>/data`).121 - Point the application there via its data directory configuration or environment variables (e.g. `DATA_DIR`, `*_DATA_DIR`).122 - Place non-regenerable configuration and secrets (signing keys, generated `.env`, `.toml`) in `/opt/<app>_data` as well.123 - Updates keep everything with **no backup or restore step required**.1241252. **Exception Pattern (Manifest Backup Helpers):**126 - Only when data genuinely cannot be relocated outside `/opt/<app>`, back it up in `update_script()` using the manifest helpers (never use manual `cp` or `/tmp`):127 ```bash128 create_backup /opt/<app>/data /opt/<app>/.env129 CLEAN_INSTALL=1 fetch_and_deploy_gh_release ...130 restore_backup131 ```132 - `create_backup` copies paths into `/opt/<NSAPP>.backup` with a manifest, is idempotent, and aborts update on failure.133 - `restore_backup` restores every manifest path and removes the backup store.134 - Override default backup store location with `BACKUP_DIR` if `/opt/<NSAPP>.backup` clashes.1351363. **Never back up to `/tmp`** (temporary directories can be cleared by the system).137138## Secure-Context Web Apps (HTTPS)139140Modern browser APIs such as `crypto.subtle` (Web Crypto / PKCE), `navigator.storage.getDirectory` (OPFS), service workers, and `SharedArrayBuffer` require a **secure context** (HTTPS or localhost). Applications using them break over plain `http://<IP>` with errors like `crypto.subtle is unavailable in insecure contexts`.141142When an application requires a secure context:143- Terminate TLS with `create_self_signed_cert "<app>"` behind an Nginx reverse proxy listening on port 443 with SSL enabled.144- Redirect port 80 to port 443.145- Proxy requests to the application on its internal port (or serve static files directly).146- If the application source uses `SharedArrayBuffer`, configure cross-origin isolation headers on the HTTPS server:147 - `add_header Cross-Origin-Opener-Policy same-origin always;`148 - `add_header Cross-Origin-Embedder-Policy require-corp always;`149- In `json/<app>.json` `notes`, instruct users to accept the self-signed certificate in their browser and access the application via `https://`.150151## Anti-Patterns152153Never do these unless official rules explicitly change:154155- Do not wrap `setup_*`, `fetch_and_deploy_*`, or `check_for_*` in `msg_info` / `msg_ok` blocks (they have built-in logging).156- Do not use Docker for ProxmoxVED install scripts.157- Do not implement custom download logic when a helper exists.158- Do not implement custom version checks when `check_for_*` helpers apply.159- Do not create pointless variables such as `APP_DIR`, `APP_USER`, or `APP_PORT`.160- Do not use `sudo`.161- Do not use `apt-get`; use `apt`.162- Do not list pre-installed core packages as dependencies: `curl`, `sudo`, `wget`, `gnupg`, `ca-certificates`, `jq`, `mc`.163- Do not hardcode credentials, secrets, or versions for external tools.164- Do not back up to `/tmp`; use `/opt`.165- Do not use `echo`, `printf`, or `tee` for file creation; use heredocs.166- Do not create external shell scripts, custom credentials files, or unnecessary system users.167- Do not use `export` in `.env` files.168- Do not add `systemctl daemon-reload` for new services unless current rules require it.169- Do not add `(Patience)` in message labels.170- Prefix package (`apt`), `npm`, and build commands with `$STD`.171172## JSON Metadata173174For `json/<app>.json`, include all required fields:175176- Required fields:177 - `name`, `slug`, `categories`, `date_created`, `type`, `updateable`, `privileged`, `architectures`, `interface_port`178 - `documentation`, `website`, `repository`, `logo`, `description`179 - `install_methods`, `default_credentials`, `notes`180- Optional fields:181 - `platforms`, `app_vars`182183### Metadata Rules184185- **No top-level `config_path`:** `config_path` belongs under individual install methods in `install_methods` (a script can have multiple methods with different paths).186- **`date_created`:** Today's date in `YYYY-MM-DD` format.187- **`install_methods.resources`:** Must match CT script variables (`var_cpu`, `var_ram`, `var_disk`, `var_os`, `var_version`).188- **`repository`:** Upstream repository as a full URL (e.g., `https://github.com/owner/repo`, `https://gitlab.com/owner/repo`, `https://codeberg.org/owner/repo`). Never bare `owner/repo`.189- **`logo`:** Use CDN pattern: `https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/<slug>.webp`.190- **`architectures`:** Replaced the deprecated `has_arm` boolean. It must match `var_arm64` in the CT script (`arch_check` aborts with exit code 106 on arm64 hosts when CT script says `no`):191192| `var_arm64` | `architectures` |193| ----------- | ---------------------- |194| `yes` | `["amd64", "arm64"]` |195| `no` | `["amd64"]` |196| unset | omit field |197198- **`platforms` (optional):** `["pve"]`, `["incus"]` or both. Defaults to Proxmox VE if omitted. Only claim `incus` if script exists in the Incus repository.199- **`app_vars` (optional):** Declares variables for unattended installs. Requires matching 3-part implementation:200 1. `install/<app>-install.sh` (prompts only when unset):201 ```bash202 if [[ -z "${var_admin_user:-}" ]]; then203 read -rp "${TAB3}Admin username: " var_admin_user204 fi205 var_admin_user="${var_admin_user:-admin}"206 ```207 2. `ct/<app>.sh` (exports variable to container environment):208 ```bash209 export var_admin_user="${var_admin_user:-}"210 ```211 3. `json/<app>.json` (declares parameter metadata):212 ```json213 "app_vars": [214 { "name": "var_admin_user", "label": "Admin Username", "type": "text", "default": "admin" },215 { "name": "var_admin_token", "label": "API Token", "type": "password", "secret": true, "required": true, "help": "The script exits when this is empty" }216 ]217 ```218 - Supported `type` values: `text`, `password`, `number`, `boolean` (emits `yes`/`no`), `select` (with `options`).219 - Mark credentials and sensitive fields with `"secret": true`.220221## Testing222223Test on a real Proxmox host before PR when possible.224225Useful development modes:226227```bash228export dev_mode="keep,logs"229export var_verbose="yes"230bash -c "$(curl -fsSL https://raw.githubusercontent.com/<fork>/<repo>/<branch>/ct/<app>.sh)"231```232233Use:234235- `logs` for persistent logs under `/var/log/community-scripts/`.236- `keep` to preserve failed containers.237- `motd` for early SSH access.238- `pause` for step-by-step inspection.239- `breakpoint` for an interactive shell on failure.240- `trace` only in isolated environments because it can expose secrets.241- `dryrun` for simulation only.242243Validate install, update path, service health, logs, credentials handling, exposed ports, and absence of hardcoded secrets.244245## PR Template Rules246247Use the official ProxmoxVED PR template verbatim. Do not replace it with a custom body.248249For new scripts, the PR must include:250251- `🆕 New script` checked.252- One arm64 option checked.253- All prerequisites checked only if true.254- Code and security review checkboxes checked only after self-review.255- Exactly one AI assistance option checked:256 - `No AI used`, or257 - `AI was used`.258- All Application Requirements checked only if true:259 - application is at least 6 months old;260 - actively maintained;261 - 600+ GitHub stars;262 - official release tarballs are published;263 - contributor understands not all scripts are accepted.264- Source links filled.265266The automated check closes PRs missing required template sections or required checkbox selections.267268## Work Sequence2692701. Fetch current official rules from the sources above.2712. Decide the correct repo: `ProxmoxVED` for new scripts, `ProxmoxVE` for existing promoted scripts.2723. Inspect similar existing scripts before coding.2734. Implement with official helpers and standard structure (CT, install, JSON).2745. Test with `dev_mode="keep,logs"` and real Proxmox evidence.2756. Run the local checklist from this skill.2767. Open PR only after checks pass.2778. If the bot closes the PR, read the bot comment exactly and fix the missing rule before opening a replacement PR.278279## Local Checklist280281- [ ] Official sources checked this session.282- [ ] Correct target repository selected (`ProxmoxVED` for new, `ProxmoxVE` for fixes/updates).283- [ ] Exactly three files created: `ct/<slug>.sh`, `install/<slug>-install.sh`, `json/<slug>.json`.284- [ ] Script structure matches current templates (CT declarations, install flow, footers).285- [ ] Required helper functions used (fetch and deploy, runtimes, databases, tools).286- [ ] No wrapper `msg_*` calls around helpers with built-in logging.287- [ ] No anti-patterns present (no Docker, no `sudo`, no `apt-get`, `$STD` prefix on apt/build).288- [ ] Persistent data and configuration reside in `/opt/<app>_data` (or managed via `create_backup` / `restore_backup` manifest helpers).289- [ ] Backups go to `/opt`, never `/tmp`.290- [ ] Multi-arch asset patterns use `arch_resolve` (no hardcoded architecture tokens).291- [ ] 3rd-party APT repos use `setup_deb822_repo`; TLS certs use `create_self_signed_cert`.292- [ ] GitLab sources use `fetch_and_deploy_gl_release` / `check_for_gl_release` with `GITLAB_URL`.293- [ ] Secure-context web applications configured with HTTPS reverse proxy (and COOP/COEP headers if using `SharedArrayBuffer`).294- [ ] CT `var_arm64` accurately reflects arm64 support.295- [ ] JSON metadata present and consistent with CT script resources.296- [ ] JSON `architectures` agrees with CT `var_arm64` (`yes` -> `["amd64", "arm64"]`, `no` -> `["amd64"]`, unset -> omitted).297- [ ] JSON `repository` is a full URL (`https://...`), not bare `owner/repo`.298- [ ] No top-level `config_path` in JSON (configured on install methods).299- [ ] JSON `platforms` claims `incus` only if script exists in the Incus repository.300- [ ] Every `read` in install script is guarded by `-z "${var_x:-}"`, exported in `ct/<app>.sh`, and declared in JSON `app_vars`.301- [ ] Real install test completed or limitation documented.302- [ ] `update_script()` reviewed or tested.303- [ ] PR body uses official template verbatim.304- [ ] AI assistance checkbox is selected when AI was used.305- [ ] Bot comment reviewed if PR was closed.
Run npx skillmds@latest add aroldobossoni/community-scripts-rules in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
Guides AI agents working on Community Scripts / Proxmox VE Helper Scripts contributions. Use when creating, updating, testing, or opening PRs for community-scripts/ProxmoxVED or community-scripts/ProxmoxVE, or when the user mentions Community Scripts, ProxmoxVED, ProxmoxVE helper scripts, ct scripts, install scripts, json metadata, dev_mode, or the official PR template. It is listed under Coding & Dev Tools on SkillMD.
This skill has not completed SkillMD's automated safety review yet. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Yes. Installing skills from SkillMD is free, and the skill stays under its author's original license.
aroldobossoni (@aroldobossoni) published this skill. Their other Agent Skills are listed on their SkillMD profile.