Agent skill

Serve Release

by lablup in lablup/backend.ai-webui

Download a released backend.ai-webui bundle from GitHub Releases and serve it locally via Portless so the URL carries the version name (e.g.

LGPL-3.0Auto-check passedBackend & APIs

Install Serve Release

skills CLI
$ npx skills add lablup/backend.ai-webui --skill serve-release -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install lablup/backend.ai-webui serve-release --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/lablup/backend.ai-webui.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/serve-release .claude/skills/serve-release && rm -rf skills-src

Use ~/.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/

Facts

Skill name
serve-release
GitHub stars
133
Token cost
~1.9k tokens
SKILL.md length
913 words
Files
1
Skills in repo
13
Repo updated
First seen
Licence
LGPL-3.0

At a glance

Download a released backend.ai-webui bundle from GitHub Releases and serve it locally via Portless so the URL carries the version name (e.g.

  • Works in 9 steps: Resolve the version → Pre-flight checks → Decide ports → …
  • Released bundle 띄워줘
  • SKILL.md covers 1. Resolve the version, 2. Pre-flight checks, 3. Decide ports and 4. Compute the Portless URL, plus 5 more sections
  • Calls gh, npm and pnpm

What it does

Serve Release is an agent skill from lablup/backend.ai-webui. Download a released backend.ai-webui bundle from GitHub Releases and serve it locally via Portless so the URL carries the version name (e.g. https://v26-4-8-rc-3.localhost:1355). Uses scripts/serve-release.sh under the hood, which fetches the bundle, copies the local config.toml / plugins into the extracted folder, and runs serve behind Portless. Trigger on: "릴리즈 띄워", "릴리즈 버전 실행", "serve release", "run release", "release 띄워줘", "특정 버전 띄워줘", "released bundle 띄워줘", "stage release", or any request that names a…

Its SKILL.md is about 1.9k 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 Backend & APIs. It works with GitHub. The repository describes itself as: Backend.AI Web UI for web / desktop app (Windows/Linux/macOS). Backend.AI Web UI provides a convenient environment for users, while allowing various commands to be executed… The licence is LGPL-3.0.

When your agent uses it

  • Released bundle 띄워줘
  • Any request that names a specific webui release version (e.g

Example prompts

  • “serve release”
  • “run release”
  • “release 띄워줘”
  • “/serve-release”

Requirements

  • Node.js

Workflow steps

9 steps, taken from the step headings in SKILL.md.

  1. Resolve the version
  2. Pre-flight checks
  3. Decide ports
  4. Compute the Portless URL
  5. Run the script
  6. Wait for the ready signal
  7. Announce both URLs
  8. Common follow-ups
  9. Out of scope

What it can do on your machine

Read from SKILL.md and the folder at commit d6afd57. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • gh
    • npm
    • pnpm

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use gh, npm and pnpm, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Serve Release loads about 1.9k tokens when it runs. Until then it costs about 152 tokens; SKILL.md has 913 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~152
When it runs · the whole SKILL.md, loaded when a task matches
~1.9k

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.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated 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.

SKILL.md

The full file from lablup/backend.ai-webui at commit d6afd57, republished under its LGPL-3.0 licence (© lablup). 913 words, ~1,932 tokens.

Download SKILL.mdSave it as .claude/skills/serve-release/SKILL.md (or your agent's skills folder).
name
serve-release
description
Download a released backend.ai-webui bundle from GitHub Releases and serve it locally via Portless so the URL carries the version name (e.g. `https://v26-4-8-rc-3.localhost:1355`). Uses `scripts/serve-release.sh` under the hood, which fetches the bundle, copies the local `config.toml` / plugins into the extracted folder, and runs `serve` behind Portless. Trigger on: "릴리즈 띄워", "릴리즈 버전 실행", "serve release", "run release", "release 띄워줘", "특정 버전 띄워줘", "released bundle 띄워줘", "stage release", or any request that names a specific webui release version (e.g. "v26.4.8-rc.3 실행해줘", "26.4.7 띄워줘").

Serve Release

Serves an already-published backend.ai-webui release bundle locally so it can be tested under a stable, version-named Portless URL. Wraps scripts/serve-release.sh — do not reinvent the download/extract logic.

1. Resolve the version

Pick a version with this priority:

  1. User-provided version in the prompt — accept 26.4.8-rc.3, v26.4.8-rc.3, or a release URL (.../releases/tag/v26.4.8-rc.3). Strip the leading v if present; everything downstream uses the bare semver.
  2. Most recent release — if the user said "릴리즈 띄워줘" without a version, fetch the latest tag with:
    bash
    gh release list --repo lablup/backend.ai-webui --limit 10
    Show the top 5–10 entries with AskUserQuestion so the user can pick (include stable and prerelease releases; mark prereleases). Do not silently default to the absolute latest — the user usually wants a specific one.
  3. Tag exists check — before running the script, confirm the tag exists:
    bash
    gh release view v<VERSION> --repo lablup/backend.ai-webui --json tagName -q .tagName
    If the tag does not exist, surface the error and offer the gh release list output so the user can correct the version. Do not try fuzzy matching.

The bundle asset must exist on the release. The script downloads backend.ai-webui-bundle-<VERSION>.zip from https://github.com/lablup/backend.ai-webui/releases/download/v<VERSION>/.... If the user picked a release where this asset is missing (rare, mostly for hotfix-only tags), the curl step will fail with 404 — surface the failure and suggest a different version rather than retrying.

2. Pre-flight checks

Before invoking the script, verify:

  • config.toml exists in the project root. The script copies it into the extracted folder so the served bundle points at your local backend. If missing, copy config.toml.sample to config.toml first and remind the user to edit endpoints if needed.
  • serve is on PATH (command -v serve). If absent, tell the user to run npm install -g serve — the script also errors with the same hint.
  • portless is on PATH (command -v portless). If absent, the script silently falls back to plain serve on http://localhost:<SERVE_PORT>; tell the user the URL will be HTTP-only without Portless and suggest npm install -g portless (or pnpm add -g portless) if they want the named-subdomain experience.

3. Decide ports

The script reads two optional env vars:

  • SERVE_PORT — the HTTP port serve listens on (default 9091). Pin only if the user asked for a specific port, or 9091 is occupied.
  • PORTLESS_PORT — the Portless daemon port (default 1355, same as scripts/dev.mjs). Do not change unless the user explicitly asks.

Quick check for port conflict on the default:

bash
lsof -nP -iTCP:9091 -sTCP:LISTEN 2>/dev/null | head -1

If something's already on 9091, pick the next free port in the 9091–9099 range and pass SERVE_PORT=<port>.

4. Compute the Portless URL

The script derives the Portless app slug from the version. Replicate the same sanitization so you can announce the URL before the server is fully up:

v<VERSION> -> lowercased
            -> [^a-z0-9-] replaced with -
            -> repeated - collapsed
            -> leading/trailing - trimmed
            -> capped at 40 chars

Examples:

  • 26.4.8-rc.3 -> app v26-4-8-rc-3 -> https://v26-4-8-rc-3.localhost:1355
  • 26.4.7 -> app v26-4-7 -> https://v26-4-7.localhost:1355
  • 25.7.1 -> app v25-7-1 -> https://v25-7-1.localhost:1355

Use the standard daemon port (1355) unless the user pinned PORTLESS_PORT.

5. Run the script

Always run in the background — serve-release.sh blocks on serve/portless and the user will need their shell back to interact with the served instance. Run from the project root so the config.toml and dist/plugins lookup paths resolve correctly.

Default invocation:

bash
./scripts/serve-release.sh <VERSION>

With a custom serve port:

bash
SERVE_PORT=9092 ./scripts/serve-release.sh <VERSION>

Use run_in_background: true and announce in one short sentence what's happening (e.g. "Downloading v26.4.8-rc.3 bundle and serving via Portless at https://v26-4-8-rc-3.localhost:1355.").

Show full SKILL.md (390 more words)Show less

6. Wait for the ready signal

The script prints a few stages — download, extract, copy config.toml, then finally Portless + serve startup. The script's own Press Ctrl+C to stop the server line is printed before exec portless ... -- serve, so it tells you the script is about to hand off, not that the port is bound.

Poll the background task's output with a short until-loop (cap ~30s for first download, ~5s if the bundle is cached) for the line serve itself emits once it's actually listening — typically Accepting connections at (the "INFO" banner from the serve npm package). That's the earliest moment HTTP requests will succeed. If you also see Portless's → https://<app>.localhost… banner, that's confirmation Portless registered the subdomain — but serve's own readiness line is the reliable one.

If curl fails (404 / network error), the script exits non-zero — surface the last ~20 lines of output to the user and don't pretend it's running.

7. Announce both URLs

After the server is up, present two URLs on separate lines so the user can pick whichever they prefer — Portless (HTTPS, named) and direct (HTTP, port). Format exactly like this, no preamble:

Portless: https://v26-4-8-rc-3.localhost:1355
Direct:   http://localhost:9091

If Portless wasn't available and the script fell back to plain serve, show only the Direct line and call out the fallback once.

8. Common follow-ups

  • "Stop the server" — kill the background task. Don't portless proxy stop unless asked; that kills all portless apps including any running dev server.
  • "Serve a different version" — stop the current background task first (port collision otherwise), then invoke the script with the new version.
  • "Switch the backend endpoint" — the served bundle uses the project-root config.toml that was copied at script-start. To change endpoints, edit config.toml, then restart the script (the in-place copy is one-shot).
  • Cached extraction — the script reuses scripts/temp-releases/webui-<VERSION>/ if it exists, skipping download. If the user reports stale content, delete that directory and rerun.

9. Out of scope

  • Do not modify scripts/serve-release.sh for one-off behaviour changes — prefer driving via env vars (SERVE_PORT, PORTLESS_PORT).
  • Do not try to install serve or portless for the user; surface the missing binary and let them choose.
  • Do not run alongside pnpm dev on the same Portless daemon if you suspect a port conflict between serve (9091) and the React dev server (Portless picks free port, but pinned PORT=9081/etc. from the user could collide). When in doubt, check lsof first.

© lablup, LGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .claude/skills/serve-release of lablup/backend.ai-webui.

Open the folder on GitHubat commit d6afd57

Compare with similar skills

Serve 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.

Serve Release compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Serve Release this skilllablup/backend.ai-webui133—~1.9kAutomated safety check: PassLGPL-3.0
Summarize Activityalpinejs/alpine32k—~1.6kAutomated safety check: NotesMIT
Plugin Release CheckVoidenHQ/voiden1.9k—~857Automated safety check: PassApache-2.0
Repo2skillzhangyanxs/repo2skill246—~3.6kAutomated safety check: PassNone
Ccb DiagnoseSeemSeam/claude_codex_bridge3.6k—~2.1kAutomated safety check: PassCustom licence
Cuga GitHub Issuescuga-project/cuga-agent895—~1.2kAutomated safety check: PassCustom licence

Similar skills

  • Summarize Activity

    alpinejs/alpine

    Summarize recent GitHub activity — discussions, PRs, issues, events, traffic — into an actionable report so you can stay on top of the project without reading everything.

    32k GitHub stars~1.6k tokensUpdated 2 days ago
    Backend & APIsAuto-check: notes
  • Plugin Release Check

    VoidenHQ/voiden

    A skill your agent uses whenever a plugin under plugins/<name is updated/pushed, or whenever asked to write a changelog/release for the app or a plugin.

    1.9k GitHub stars~857 tokensUpdated today
    Backend & APIsAuto-check passed
  • Repo2skill

    zhangyanxs/repo2skill

    Convert GitHub/GitLab/Gitee repositories into comprehensive OpenCode Skills using embedded LLM calls with multiple mirrors and rate limit handling

    246 GitHub stars~3.6k tokensUpdated 7 mo ago
    Backend & APIsAuto-check passed
  • Ccb Diagnose

    SeemSeam/claude_codex_bridge

    Diagnose a named CCB agent by combining authoritative runtime and job lineage with deep read-only pane inspection, apply bounded recovery when evidence supports it, verify the result, and request…

    3.6k GitHub stars~2.1k tokensUpdated today
    Backend & APIsAuto-check passed
  • Cuga GitHub Issues

    cuga-project/cuga-agent

    Create GitHub issues for cuga-agent (bugs, features, epics, designs, and related work) against origin using gh, with epic → feature → issue hierarchy and GraphQL sub-issue linking.

    895 GitHub stars~1.2k tokensUpdated today
    Backend & APIsAuto-check passed
  • Jwx Guide V4

    lestrrat-go/jwx

    Guide for developing Go applications with github.com/lestrrat-go/jwx v4 — parse/sign JWTs, work with JWS/JWE/JWK, pick algorithms, and avoid the common footguns.

    2.4k GitHub stars~5.3k tokensUpdated yesterday
    Backend & APIsAuto-check passed

More from lablup/backend.ai-webui

All 13 skills in this repo
  • Walkthrough

    lablup/backend.ai-webui

    Mint a walkthrough for the PR this session just implemented: a set of numbered stops a reviewer opens in the live dev server, each one marking an element on screen with what changed and what to check.

    133 GitHub stars~4.9k tokensUpdated today
    Auto-check: notes
  • Docs Lead

    lablup/backend.ai-webui

    A skill your agent uses whenever the user mentions docs, the manual, documentation, terminology, translations, or screenshots — including indirect mentions like "이 PR 문서 영향 봐줘", "문서 점검", "용어 통일"…

    133 GitHub stars~2.9k tokensUpdated today
    Auto-check passed
  • Backend AI Guide

    lablup/backend.ai-webui

    Expert guide for Backend.AI distributed computing platform. An agent skill from lablup/backend.ai-webui.

    133 GitHub starsUsed in 1 repo~1.8k tokens
    Auto-check passed
  • Dev Server

    lablup/backend.ai-webui

    Start the project's development server (pnpm dev for backend.ai-webui; discovered from README/package.json elsewhere), deriving the header color, app name, default backend endpoint and login…

    133 GitHub stars~6.9k tokensUpdated today
    Auto-check: notes
  • Record E2E Gif

    lablup/backend.ai-webui

    Record Playwright e2e tests as one GIF per test case (video → ffmpeg palette GIF) and return a markdown table for a PR description.

    133 GitHub stars~907 tokensUpdated today
    Auto-check: notes
  • Relay Mutation Store Updates

    lablup/backend.ai-webui

    A skill your agent uses when writing if (success) updateFetchKey(), an onRequestClose handler, or any refetch after a mutation; when a setting modal handles both create and update behind one…

    133 GitHub stars~2.8k tokensUpdated today
    Auto-check passed

Works with

Categories

Questions about Serve Release

What does Serve Release do?

Download a released backend.ai-webui bundle from GitHub Releases and serve it locally via Portless so the URL carries the version name (e.g. ai-webui.g.

When should I use Serve Release?

Serve Release fits situations like: released bundle 띄워줘; any request that names a specific webui release version (e.g.

How do I install Serve Release in Claude Code?

Run `npx skills add lablup/backend.ai-webui --skill serve-release -a claude-code`. Or copy the skill folder (.claude/skills/serve-release in lablup/backend.ai-webui) into .claude/skills/serve-release in your project. Claude Code loads it when a task matches its description.

How do I install Serve Release in Codex?

Run `npx skills add lablup/backend.ai-webui --skill serve-release -a codex`. Or copy the skill folder (.claude/skills/serve-release in lablup/backend.ai-webui) into .agents/skills/serve-release in your project. Codex loads it when a task matches its description.

Can I use Serve Release in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add lablup/backend.ai-webui --skill serve-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/serve-release, .gemini/skills/serve-release, .github/skills/serve-release and .opencode/skills/serve-release in your project.

What does Serve Release need to run?

Going by SKILL.md and its folder, Serve Release needs the command-line tools its instructions call (gh, npm and pnpm). Our summary lists: Node.js.

Does Serve Release access the network?

SKILL.md contains no URLs. Its commands use gh and npm, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Serve Release safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Serve Release use?

Serve Release is published under the LGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Serve Release use?

About 1.9k tokens (SKILL.md is roughly 7.7k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Serve Release?

Skills that share tags, products or a category with Serve Release: Summarize Activity (alpinejs/alpine, 32k stars), Plugin Release Check (VoidenHQ/voiden, 1.9k stars), Repo2skill (zhangyanxs/repo2skill, 246 stars) and Ccb Diagnose (SeemSeam/claude_codex_bridge, 3.6k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Serve Release?

lablup (a GitHub organization) maintains it in lablup/backend.ai-webui, which has 133 GitHub stars. The repository holds 13 skills in this directory. The repository was last updated on October 8, 2026.

Source: lablup/backend.ai-webui on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.