Monstermq Broker Config
vogler75/monster-mq
Guide for configuring, deploying, and operating the MonsterMQ broker.
Drive the AR.IO Node release process end-to-end — preflight checks, prepare commit, finalize with image SHAs, test docker compose profiles, tag & publish, and post-release cleanup.
$ npx skills add ar-io/ar-io-node --skill release -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install ar-io/ar-io-node release --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/ar-io/ar-io-node.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/release .claude/skills/release && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "release" agent skill from https://github.com/ar-io/ar-io-node/tree/develop/.claude/skills/release into .claude/skills/release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/ar-io/ar-io-node/tree/develop/.claude/skills/releaseType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add ar-io/ar-io-node --skill release -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install ar-io/ar-io-node release --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ar-io/ar-io-node.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/release .agents/skills/release && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "release" agent skill from https://github.com/ar-io/ar-io-node/tree/develop/.claude/skills/release into .agents/skills/release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add ar-io/ar-io-node --skill release -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install ar-io/ar-io-node release --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ar-io/ar-io-node.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/release .cursor/skills/release && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "release" agent skill from https://github.com/ar-io/ar-io-node/tree/develop/.claude/skills/release into .cursor/skills/release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/ar-io/ar-io-node.git --path .claude/skills/release--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add ar-io/ar-io-node --skill release -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install ar-io/ar-io-node release --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ar-io/ar-io-node.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/release .gemini/skills/release && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "release" agent skill from https://github.com/ar-io/ar-io-node/tree/develop/.claude/skills/release into .gemini/skills/release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install ar-io/ar-io-node releaseInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add ar-io/ar-io-node --skill release -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/ar-io/ar-io-node.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/release .github/skills/release && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "release" agent skill from https://github.com/ar-io/ar-io-node/tree/develop/.claude/skills/release into .github/skills/release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add ar-io/ar-io-node --skill release -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install ar-io/ar-io-node release --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ar-io/ar-io-node.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/release .opencode/skills/release && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "release" agent skill from https://github.com/ar-io/ar-io-node/tree/develop/.claude/skills/release into .opencode/skills/release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
releaseDrive the AR.IO Node release process end-to-end — preflight checks, prepare commit, finalize with image SHAs, test docker compose profiles, tag & publish, and post-release cleanup.
Release is an agent skill from ar-io/ar-io-node. Drive the AR.IO Node release process end-to-end — preflight checks, prepare commit, finalize with image SHAs, test docker compose profiles, tag & publish, and post-release cleanup. Use when the user says "cut a release", "prepare release N", "finalize the release", or similar.
Its SKILL.md is about 4.2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in DevOps & Cloud, covering Containers and Deployment. It works with Docker, Git, SQLite and GraphQL. The repository describes itself as: A scalable and modular gateway built for the permaweb atop the Arweave permanent data storage network. The licence is AGPL-3.0.
7 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 9decdeb. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gitdockerghyarnnvmFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
github.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Release loads about 4.2k tokens when it runs. Until then it costs about 71 tokens; SKILL.md has 1,512 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
`.env`, then recreate with its own `-f` files), and check health, logs andAutomated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from ar-io/ar-io-node at commit 9decdeb, republished under its AGPL-3.0 licence (© ar-io). 1,512 words, ~4,166 tokens.
.claude/skills/release/SKILL.md (or your agent's skills folder).You are driving a multi-phase release process. Each phase ends in a git commit.
The narrow tools under tools/ handle file mutations; you handle orchestration,
commits, and interpretation.
N, set release date in CHANGELOG, commit.develop into main through a PR.N+1-pre, reset image tags to latest, add new
[Unreleased] changelog section, commit.Work one phase at a time. Stop and confirm with the user before phases with external side effects: tag push, GitHub release creation, merge to main.
Run the release from a dedicated worktree with develop checked out (for
example git worktree add ../node-wt-release develop), never from a directory
a live gateway runs its compose stack from: Phase 4 runs docker compose down,
and the release tools edit docker-compose.yaml. The tools need Node 20
(nvm use); under Node 16 they fail with bad option: --import.
Run: ./tools/release-info --json
Also check:
git rev-parse --abbrev-ref HEAD — must be developgit status --porcelain — must be empty (clean working tree)yarn audit — review output. For each high or critical advisory, check
whether it is reachable at runtime (trace the dependency path with
yarn audit --json) and whether it is new since the last release. Stop for
the user only on one that is reachable or new; report the rest.From release-info output, verify:
versionIsPre === true (e.g., "53-pre")arIoNodeRelease matches versionchangelogUnreleasedHasContent === trueRELEASE_MANAGED_IMAGE_VARS (ENVOY, CORE, CLICKHOUSE_AUTO_IMPORT,
LITESTREAM) are "latest"OBSERVER_IMAGE_TAG is a pinned 40-char SHA (not "latest")changelogUnreleasedHasContent only confirms the [Unreleased] section is
non-empty. Before proceeding, also verify that user-visible changes merged
since the last release are actually reflected in that section.
Identify the previous release tag (e.g., r75):
git describe --tags --abbrev=0 --match 'r*'List commits merged to develop since that tag:
git log --no-merges --pretty='%h %s' r<N-1>..developRead the [Unreleased] section of CHANGELOG.md and compare. Flag any
commit that looks user-visible (feat, fix affecting users, behavior
change, new/changed env var, API change, perf) but is not represented
by an entry.
Do not flag:
feat: and a follow-up fix: for the same feature
within r<N-1>..develop). The net user-visible change is one entry for
the feature; intermediate fixes are implementation churn.chore:, refactor:, test:, docs:, CI/tooling, or dependency
bumps with no user-visible effect.Report any gaps to the user and pause for them to either add entries or confirm the omission is intentional before continuing.
The release number to use is version.replace('-pre', ''). Confirm with the
user before proceeding.
Mutations (run in order):
./tools/changelog-release <N> # defaults --date to today
./tools/set-version <N>
./tools/set-ar-io-node-release <N>changelog-release renames the section heading but does not add a summary
paragraph. Immediately under the new ## [Release N] - <date> heading, write
a 1-paragraph summary in the style of prior releases (see [Release 74] and
[Release 75]): open with "This is a recommended release focused on
<2–3 themes>." and then enumerate "Key highlights include…" across the
most impactful entries in Added/Changed/Fixed. Verify the paragraph is
present before committing.
Commit:
git add CHANGELOG.md src/version.ts docker-compose.yaml
git commit -m "chore: prepare release <N>"
git push origin developThis push triggers image builds on GitHub Actions. Move on once pushed.
Wait for builds to complete:
gh api repos/ar-io/ar-io-node/actions/runs \
--jq '.workflow_runs[] | select(.status == "in_progress" or .status == "queued") | .id' \
| wc -lWhen the count is 0, proceed. (Poll at ~2 minute intervals if needed; don't
tight-loop.)
Fetch and apply SHAs for each release-managed image:
for image in ar-io-envoy ar-io-core ar-io-clickhouse-auto-import ar-io-litestream; do
sha=$(gh api "/orgs/ar-io/packages/container/${image}/versions" \
--jq '.[0].metadata.container.tags[] | select(. != "latest")' | head -1)
echo "${image}: ${sha}"
git rev-parse --verify "$sha" || { echo "SHA not in git history!"; exit 1; }
doneThe packages API needs the read:packages scope (gh auth refresh -s read:packages). Without it, take each SHA from the image workflow's last
successful run on develop. Each workflow tags its image with the commit
that triggered the run (github.sha), so that run's head SHA is the newest
published tag, and a failed or skipped build cannot yield a SHA with no image:
for wf in build-envoy build-clickhouse-auto-import build-litestream; do
echo "$wf: $(gh run list --workflow "$wf.yml" --branch develop --status success \
--limit 1 --json headSha -q '.[0].headSha')"
doneRun history expires. A workflow that has not built for a long time lists no
runs (litestream's image dates from 2024). Then keep the previous release's
pin, after checking nothing under that workflow's paths: changed since:
git show r<N-1>:docker-compose.yaml | grep 'ar-io-litestream:'
git log --oneline r<N-1>..develop -- litestream/ # must print nothingThe paths each workflow builds on, for that check:
| Workflow | Paths |
|---|---|
build-envoy | envoy/ |
build-litestream | litestream/ |
build-clickhouse-auto-import | Dockerfile.clickhouse-auto-import scripts/clickhouse-auto-import scripts/clickhouse-import scripts/parquet-export scripts/lib/common.sh src/database/clickhouse/ src/database/duckdb/ src/workers/parquet-exporter.ts src/database/composite-clickhouse.ts |
So a ClickHouse schema change moves ar-io-clickhouse-auto-import as well as
core.
A newer build that failed leaves the last successful run pointing at an older image, so check that nothing under the workflow's paths changed after the SHA you picked. This must print nothing; if it prints a commit, fix or rerun that build rather than pin the older image:
git log --oneline --first-parent <sha>..develop -- <paths from the table>
``` `ar-io-core` is the commit being released (the head of `develop`, after
any last merges). Whatever the source, confirm every SHA is published before
pinning it:
```bash
docker manifest inspect ghcr.io/ar-io/<image>:<sha> >/dev/null && echo okIf a change lands on develop after the prepare commit and belongs in the
release, merge it, wait for its build, and pin that core image instead; the
prepare commit does not need redoing.
Map image name → env var:
| Image | Env var |
|---|---|
ar-io-envoy | ENVOY_IMAGE_TAG |
ar-io-core | CORE_IMAGE_TAG |
ar-io-clickhouse-auto-import | CLICKHOUSE_AUTO_IMPORT_IMAGE_TAG |
ar-io-litestream | LITESTREAM_IMAGE_TAG |
Then for each pair:
./tools/set-image-tag <ENV_VAR> <sha>The observer image stays pinned — do not touch it.
Commit:
git add docker-compose.yaml
git commit -m "chore: finalize release <N> with image SHAs"
git push origin developEnsure Docker is available: docker info >/dev/null.
Test each profile. Between profiles, always run the down-all cleanup:
docker compose --profile clickhouse --profile litestream --profile otel downCore containers expected to stay running across every profile: envoy, core,
redis, observer. Check with:
docker ps --format '{{.Names}}'| Profile | Up command | Expected running | Expected present (may exit) | Stabilization |
|---|---|---|---|---|
| default | docker compose up -d | core | — | 30s + 15s recheck |
| clickhouse | docker compose --profile clickhouse up -d | core + clickhouse, clickhouse-auto-import | — | 45s |
| litestream | docker compose --profile litestream up -d | core | litestream (may exit if no S3) | 30s |
| otel | docker compose --profile otel up -d | core | otel-collector (may exit if no endpoint) | 30s |
For the default profile: after 30s, confirm core containers are up; after another 15s, confirm they're still up (catches restart loops).
Use docker ps -a --format '{{.Names}}' to check "present but exited"
containers. Report each profile's outcome back to the user before moving on.
Final cleanup: run the down-all cleanup above.
On a host that runs a live gateway, never run these from that gateway's
compose directory: down there stops production. Either:
test the default and clickhouse profiles by moving the live gateway onto the
release image (CORE_IMAGE_TAG and, if it changed, ENVOY_IMAGE_TAG in its
.env, then recreate with its own -f files), and check health, logs and
requests through every layer; and
start the remaining profiles' services in an isolated project from the release worktree, which cannot touch the live containers:
docker compose -p r<N>-profile-test --profile litestream --profile otel \
up -d --no-deps litestream otel-collector
docker compose -p r<N>-profile-test --profile litestream --profile otel downPause and confirm with user before this phase.
git tag r<N>
git push origin r<N>Draft release notes from the [Release N] section of CHANGELOG.md plus the
image SHA list from release-info. Unwrap the hard-wrapped lines before
publishing — the CHANGELOG hard-wraps at ~70 chars, which GitHub Markdown
renders as visual line breaks in the release UI's narrow column. Join lines
within each block (paragraph or bullet) into a single logical line; preserve
blank lines between blocks and heading lines as-is.
Link each image SHA to its GHCR package version page so readers can
inspect the exact image (without read:packages, link the package page,
https://github.com/orgs/ar-io/packages/container/package/<image>, as r83 and
r84 did). Resolve the HTML URL via:
gh api "/orgs/ar-io/packages/container/<image>/versions" \
--jq '.[] | select(.metadata.container.tags[] | contains("<sha>")) | .html_url' | head -1Then format the entry as:
- `CORE_IMAGE_TAG`: [`<sha>`](https://github.com/orgs/ar-io/packages/container/ar-io-core/<version-id>)Include OBSERVER_IMAGE_TAG (resolve via the ar-io-observer package) even
though it's not release-managed — operators still want the link.
Example reformatter (run against the extracted Release N section). It joins the wrapped lines of each paragraph or list item, keeps every list item (bulleted or numbered, nested ones included) on its own line, and copies fenced code blocks verbatim, blank lines included:
import re, sys
out, current, fence = [], None, None # fence: the opening marker while inside a block
def flush():
global current
if current is not None:
out.append(current)
current = None
for line in sys.stdin.read().rstrip().splitlines():
marker = re.match(r'^\s*(`{3,}|~{3,})', line)
if fence is None and marker:
flush()
fence = marker.group(1)
out.append(line.rstrip())
elif fence is not None:
out.append(line.rstrip())
# A block closes only on a bare fence of the same character, at least as long.
close = re.match(r'^\s*(`{3,}|~{3,})\s*$', line)
if close and close.group(1)[0] == fence[0] and len(close.group(1)) >= len(fence):
fence = None
elif not line.strip():
flush()
out.append('')
elif line.lstrip().startswith('#') or re.match(r'^\s*(?:[-*+]|\d+[.)])\s+', line):
flush()
current = line.rstrip()
elif current is None:
current = line.rstrip()
else:
current += ' ' + line.strip()
flush()
print('\n'.join(out))Then:
gh release create r<N> \
--title "Release <N>" \
--notes-file <path-to-notes>Pushing the r<N> tag triggers another round of image builds that publish
the r<N>-tagged container images. Wait for those builds to finish
before moving to Phase 6 — operators pulling r<N> need the tagged images
available. Poll with the same gh api .../actions/runs query as Phase 3 at
~2 minute intervals.
Pause and confirm with user before this phase. main carries the merge
commits of earlier promotions, so it cannot fast-forward to develop. Promote
through a PR titled Release <N> → main (see #877 and #960 for the body: tag,
pinned images, what was tested), check it has no conflicts, and merge it with
a merge commit:
gh pr create --base main --head develop --title "Release <N> → main" --body-file <notes>
gh pr merge <PR> --merge
git fetch origin && git diff --quiet r<N> origin/main && echo "main matches r<N>"./tools/set-version <N+1>-pre
./tools/set-ar-io-node-release <N+1>-pre
for var in ENVOY_IMAGE_TAG CORE_IMAGE_TAG CLICKHOUSE_AUTO_IMPORT_IMAGE_TAG LITESTREAM_IMAGE_TAG; do
./tools/set-image-tag "$var" latest
done
./tools/changelog-add-unreleasedThe observer image stays pinned — don't reset it.
Commit:
git add src/version.ts docker-compose.yaml CHANGELOG.md
git commit -m "chore: begin development of release <N+1>"
git push origin develop| Env var | Release-managed? | Behavior |
|---|---|---|
ENVOY_IMAGE_TAG | yes | SHA at finalize → latest at post |
CORE_IMAGE_TAG | yes | SHA at finalize → latest at post |
CLICKHOUSE_AUTO_IMPORT_IMAGE_TAG | yes | SHA at finalize → latest at post |
LITESTREAM_IMAGE_TAG | yes | SHA at finalize → latest at post |
OBSERVER_IMAGE_TAG | no | stays pinned; only bump intentionally |
Before a phase's commit, mutations are local. To undo:
git checkout -- CHANGELOG.md src/version.ts docker-compose.yamlIf you've committed but not pushed, reset:
git reset --hard HEAD~1 # ask user firstNever force-push develop or main. If a pushed commit needs to be
undone, ask the user how to proceed (likely a forward-fixing commit).
chore: <phase summary>. The project no longer uses
Jira; do not add PE-#### references.develop requires a review for PRs but not for admins, so the release
commits pushed directly bypass it. Say so to the user../tools/release-info --json for programmatic state checks.© ar-io, AGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/release of ar-io/ar-io-node.
Open the folder on GitHubat commit 9decdeb
Release next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Release this skillar-io/ar-io-node | 127 | — | ~4.2k | Automated safety check: Notes | AGPL-3.0 | |
| Monstermq Broker Configvogler75/monster-mq | 142 | — | ~2.2k | Automated safety check: Pass | GPL-3.0 | |
| Deploy To Tempsgotempsh/temps | 822 | — | ~1.3k | Automated safety check: Notes | Apache-2.0 | |
| Medusa Cloud Local Buildmedusajs/medusa-agent-skills | 225 | — | ~1k | Automated safety check: Notes | None | |
| Reflexo ReleaseMyriad-Dreamin/typst.ts | 1.2k | — | ~1.5k | Automated safety check: Pass | Apache-2.0 | |
| Demo Local Rolloutcarverauto/serviceradar | 921 | — | ~4.2k | Automated safety check: Pass | Apache-2.0 |
vogler75/monster-mq
Guide for configuring, deploying, and operating the MonsterMQ broker.
gotempsh/temps
Deploy applications to the Temps platform with automatic framework detection, Dockerfile generation, and container orchestration.
medusajs/medusa-agent-skills
Reproduces a Medusa Cloud build on your machine with mcloud local build, to debug build-failed deployments without pushing or waiting on Cloud.
Myriad-Dreamin/typst.ts
Guide Reflexo/typst.ts release preparation and operator handoffs.
carverauto/serviceradar
Build unpublished sha-... An agent skill from carverauto/serviceradar.
tonbistudio/buzz-skills
A skill your agent uses when helping a user set up, debug, or operate a self-hosted Buzz relay through Docker Compose.
ar-io/ar-io-node
Operate any AR.IO node deployment — architecture, daily ops, diagnostics, and recurring pitfalls that apply to every operator.
ar-io/ar-io-node
Decision guide for testing in the ar-io-node repo — which test layer to use, how to run it, and which helpers to reach for.
Categories
Drive the AR.IO Node release process end-to-end — preflight checks, prepare commit, finalize with image SHAs, test docker compose profiles, tag & publish, and post-release cleanup. Release is an agent skill from ar-io/ar-io-node.IO Node release process end-to-end — preflight checks, prepare commit, finalize with image SHAs, test docker compose profiles, tag & publish, and post-release cleanup.
Release fits situations like: the user says cut a release; prepare release N; finalize the release.
Run `npx skills add ar-io/ar-io-node --skill release -a claude-code`. Or copy the skill folder (.claude/skills/release in ar-io/ar-io-node) into .claude/skills/release in your project. Claude Code loads it when a task matches its description.
Run `npx skills add ar-io/ar-io-node --skill release -a codex`. Or copy the skill folder (.claude/skills/release in ar-io/ar-io-node) into .agents/skills/release in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add ar-io/ar-io-node --skill release -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/release, .gemini/skills/release, .github/skills/release and .opencode/skills/release in your project.
Going by SKILL.md and its folder, Release needs the command-line tools its instructions call (git, docker, gh, yarn and nvm). Our summary lists: Docker.
SKILL.md names 1 domain. In commands or code: github.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Release is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.2k tokens (SKILL.md is roughly 17k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Release: Monstermq Broker Config (vogler75/monster-mq, 142 stars), Deploy To Temps (gotempsh/temps, 822 stars), Medusa Cloud Local Build (medusajs/medusa-agent-skills, 225 stars) and Reflexo Release (Myriad-Dreamin/typst.ts, 1.2k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
ar-io (a GitHub organization) maintains it in ar-io/ar-io-node, which has 127 GitHub stars. The repository holds 3 skills in this directory. The repository was last updated on October 7, 2026.
Source: ar-io/ar-io-node on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.