Playwright Best Practices
sanity-io/sanity
A skill your agent uses when writing Playwright tests, fixing flaky tests, debugging failures, implementing Page Object Model, configuring CI/CD, optimizing performance, mocking APIs, handling…
Answer a Backend.AI question, or do a Backend.AI task, from this checkout with the bai-agent CLI — the manual, the GraphQL schema, the i18n stores and the live manager.
$ npx skills add lablup/backend.ai-webui --skill bai-agent -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install lablup/backend.ai-webui bai-agent --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/lablup/backend.ai-webui.git skills-src && mkdir -p .claude/skills && cp -r skills-src/packages/backend.ai-agent-cli/skill .claude/skills/bai-agent && 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 "bai-agent" agent skill from https://github.com/lablup/backend.ai-webui/tree/main/packages/backend.ai-agent-cli/skill into .claude/skills/bai-agent/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bai-agent", 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/lablup/backend.ai-webui/tree/main/packages/backend.ai-agent-cli/skillType 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 lablup/backend.ai-webui --skill bai-agent -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install lablup/backend.ai-webui bai-agent --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/lablup/backend.ai-webui.git skills-src && mkdir -p .agents/skills && cp -r skills-src/packages/backend.ai-agent-cli/skill .agents/skills/bai-agent && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "bai-agent" agent skill from https://github.com/lablup/backend.ai-webui/tree/main/packages/backend.ai-agent-cli/skill into .agents/skills/bai-agent/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bai-agent", 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 lablup/backend.ai-webui --skill bai-agent -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install lablup/backend.ai-webui bai-agent --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/lablup/backend.ai-webui.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/packages/backend.ai-agent-cli/skill .cursor/skills/bai-agent && 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 "bai-agent" agent skill from https://github.com/lablup/backend.ai-webui/tree/main/packages/backend.ai-agent-cli/skill into .cursor/skills/bai-agent/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bai-agent", 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/lablup/backend.ai-webui.git --path packages/backend.ai-agent-cli/skill--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 lablup/backend.ai-webui --skill bai-agent -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install lablup/backend.ai-webui bai-agent --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/lablup/backend.ai-webui.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/packages/backend.ai-agent-cli/skill .gemini/skills/bai-agent && 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 "bai-agent" agent skill from https://github.com/lablup/backend.ai-webui/tree/main/packages/backend.ai-agent-cli/skill into .gemini/skills/bai-agent/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bai-agent", 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 lablup/backend.ai-webui bai-agentInstalls 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 lablup/backend.ai-webui --skill bai-agent -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/lablup/backend.ai-webui.git skills-src && mkdir -p .github/skills && cp -r skills-src/packages/backend.ai-agent-cli/skill .github/skills/bai-agent && 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 "bai-agent" agent skill from https://github.com/lablup/backend.ai-webui/tree/main/packages/backend.ai-agent-cli/skill into .github/skills/bai-agent/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bai-agent", 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 lablup/backend.ai-webui --skill bai-agent -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install lablup/backend.ai-webui bai-agent --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/lablup/backend.ai-webui.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/packages/backend.ai-agent-cli/skill .opencode/skills/bai-agent && 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 "bai-agent" agent skill from https://github.com/lablup/backend.ai-webui/tree/main/packages/backend.ai-agent-cli/skill into .opencode/skills/bai-agent/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bai-agent", 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.
bai-agentAnswer a Backend.AI question, or do a Backend.AI task, from this checkout with the bai-agent CLI — the manual, the GraphQL schema, the i18n stores and the live manager.
Bai Agent is an agent skill from lablup/backend.ai-webui. Answer a Backend.AI question, or do a Backend.AI task, from this checkout with the bai-agent CLI — the manual, the GraphQL schema, the i18n stores and the live manager. Trigger on: what a Backend.AI concept, field or status value means ("what does session status PENDING mean", "what is a resource group", "what does this field mean"), "find it in the manual", "search the docs", "query the manager", "run a GraphQL query", "how many sessions are running", "show me my sessions / folders / agents / users", "give me…
Its SKILL.md is about 2.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including reference files (for example `references/query-cookbook.md`).
It sits in Backend & APIs, covering GraphQL and Internationalization. It works with GraphQL. 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.
Read from SKILL.md and the folder at commit 10554dc. 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.
No scripts in the folder and no shell commands in SKILL.md.
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From 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.
Bai Agent loads about 2.1k tokens when it runs, and up to ~4k if it reads all its reference files. Until then it costs about 190 tokens; SKILL.md has 1,125 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 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.
The full file from lablup/backend.ai-webui at commit 10554dc, republished under its LGPL-3.0 licence (© lablup). 1,125 words, ~2,055 tokens.
.claude/skills/bai-agent/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.bai-agent answers Backend.AI questions from a WebUI checkout — the one you
are in, or the data copy bai-agent init synced — and points the user at the
WebUI page for what it found. The workflow contract is the generated
BAI-AGENT block: in a checkout it is in CLAUDE.md, and an installed copy
of this skill carries it as references/agent-block.md. Read it there, it is
not repeated here. This file is the parts the CLI cannot tell you: when to log
in, when to answer versus link, and which neighbour owns what.
Run bai-agent doctor --brief once, from wherever you already are — never
cd first. It is the one-step preflight: checkout-vs-synced-data and
session/auth in one line each. Fall back to bai-agent doctor --json only
when you need a specific field out of it. Run bai-agent whoami only when
the auth check is warn.
The workflow contract is already loaded: in a checkout it is the BAI-AGENT
block in CLAUDE.md; installed, it is references/agent-block.md. Read
whichever applies — don't cat it unless the block is absent — and don't grep
for a CLAUDE.md outside a checkout; there isn't one.
When whoami says auth_required (exit 3):
webui-connection-info skill
in a checkout; elsewhere the endpoint is the one init recorded (doctor
prints it). Never ask the user for a password, and never put one in a
command.bai-agent login --endpoint <url>, then confirm on
the /cli-login page it opens. That page is the WebUI's; in a checkout it
is the dev server, elsewhere the endpoint's own origin — pass
--webui <origin> when the UI lives somewhere else.bai-agent login --paste --endpoint <url> and paste the session id the page reveals.bai-agent logout when you are done with a borrowed session.search, docs show, schema show and explain need no session at all.
A "what does X mean" question never requires logging in — go straight to it.
| The user wants | Do this |
|---|---|
| to understand a status value ("what does status X mean") | Try explain <Type>.<field>=<VALUE> first — e.g. explain ComputeSessionNode.status=PENDING, explain UserNode.status=before-verification. Fall back to explain <Type>.<field> (no value) or docs show for a term or field in general. |
| to understand a term or field | explain (meaning) or docs show (the manual). Answer in the words the UI uses, and cite the deployed-docs url the CLI returned. |
| a count, a list, a value | Start every live query from bai-agent cookbook <root field> (or --list) — never search the filesystem for the cookbook; a schema_mismatch error names the entry to read. Adapt it, never invent a shape. Summarise the rows; do not paste the raw envelope. |
| to see it, or act on it | Give the webui_url (or webui_path) query already annotated onto the row, under data.links, so the user can open it themselves. Say so when the link carries requires — admin / superadmin / projectAdmin is the role that page gates on, so hand it over as "…, which is admin-only" rather than as a link that may bounce them; no requires means any signed-in account can open it. When you post-process the --json envelope yourself, also print data.links — the link must reach the user. Never describe a click path you could report directly. If data.links is empty for a result, say the resource has no addressable page — do not compose a path by hand, not even for a field whose rows are plainly the caller's own (myKeypairs gets no link because the only keypair list is the admin-only credentials tab); but a row carrying webui_link_hint instead means the id you selected cannot build one, so re-run selecting row_id. When several rows share a name, pick the link by id, never by name. |
| something destructive | Give them the hint page from the refusal and stop. A mutation_refused (exit 4) is the answer, not an obstacle to route around. |
explain prints MISSING for a piece nothing curates. Say it is not documented
and offer the SDL entry — never fill the gap from memory. If the answer would be
better as a curated sentence, that is a mappings/<Type>.yaml change, not a
guess at runtime.
| Skill | Owns | Not this |
|---|---|---|
webui-connection-info | Which dev server is up, its URL and port, the API endpoint, the test credentials. | It does not read data — it tells you where to point login. |
backend-ai-guide | Backend.AI architecture and product Q&A with no live data: what Sokovan is, how the agent talks to the manager. | The moment the question is about this deployment's data or a schema field's meaning, it is bai-agent. |
docs-lead | Writing and maintaining the user manual, terminology, translations, screenshots. | Reading the manual to answer a question is bai-agent search / docs show. |
bai-cli (backend repo) | ./bai, the backend's own REST CLI, inside a backend.ai checkout. | In this repo use bai-agent; ./bai does not exist here. |
first+after XOR last+before
XOR limit+offset. The local SDL accepts a mix; the *V2 connections
reject it at runtime (the checkout's .claude/rules/graphql-pagination.md).--allow-mutation is not a bypass. The field must also be on the CLI's
mutation allow-list (src/mutation-allowlist.ts in the package). Widening
that list is a reviewed PR, never an in-session decision./session?sessionDetail=<id> is a
drawer, the only addressable surface — there is no per-row session link to
offer beyond that.The block's RULES apply beyond these (session file, empty data.links, no
React source in a synced copy, never cd before doctor, and more) — read
them there rather than restated here.
bai-agent cookbook --list names every entry; bai-agent cookbook <n> and
bai-agent cookbook <root field> print one, prose and document. That command
is how you read it — it locates the file itself, so never search the
filesystem for a path and never cat one. The entries are 11 documents that
validate against the SDL, one per resource, plus the allow-listed mutation and
the refused destructive one; a test re-validates them, so a stale one fails CI,
not a user. Maintainers edit
packages/backend.ai-agent-cli/skill/references/query-cookbook.md.
Re-run pnpm --filter backend.ai-agent-cli build && pnpm run bai-agent init --features agents --write after any change to the CLI, and re-sync the
BAI-AGENT block in CLAUDE.md. This directory ships in the npm package
as-is, so an installed copy updates on the next bai-agent init; it is not
a repository-level skill — install it with bai-agent init --skill. Rules
are linked from here, never copied: if you find
yourself restating what manifest --json, the block or --help already
says, delete it instead.
© 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
SKILL.md and 1 other file (references) in packages/backend.ai-agent-cli/skill of lablup/backend.ai-webui.
Open the folder on GitHubat commit 10554dc
Bai Agent 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 |
|---|---|---|---|---|---|---|
| Bai Agent this skilllablup/backend.ai-webui | 133 | — | ~2.1k | Automated safety check: Pass | LGPL-3.0 | |
| Playwright Best Practicessanity-io/sanity | 6.4k | 7 repos | ~6.4k | Automated safety check: Pass | MIT | |
| GraphQL Operations with CodegenChrisWiles/claude-code-showcase | 6.1k | 3 repos | ~1.5k | Automated safety check: Pass | None | |
| Relay Best Practiceshackers-pub/hackerspub | 165 | — | ~4.6k | Automated safety check: Pass | AGPL-3.0 | |
| Shopify ExpertJeffallan/claude-skills | 12k | — | ~1.8k | Automated safety check: Pass | MIT | |
| Shopify Developer Referencetech-leads-club/agent-skills | 7k | — | ~1.9k | Automated safety check: Pass | Custom licence |
sanity-io/sanity
A skill your agent uses when writing Playwright tests, fixing flaky tests, debugging failures, implementing Page Object Model, configuring CI/CD, optimizing performance, mocking APIs, handling…
ChrisWiles/claude-code-showcase
Sets the rules for writing GraphQL queries and mutations in .gql files, running codegen, and using generated Apollo hooks with proper error and loading handling.
hackers-pub/hackerspub
Best practices for writing idiomatic Relay code. An agent skill from hackers-pub/hackerspub.
Jeffallan/claude-skills
Builds Shopify themes in Liquid, custom apps, Storefront API storefronts and checkout extensions, using the Shopify CLI to lint, run locally and deploy.
tech-leads-club/agent-skills
Reference for Shopify work: Liquid templates, OS 2.0 themes, Admin and Storefront GraphQL APIs, apps, Functions and Hydrogen, on API version 2026-01.
Jeffallan/claude-skills
Designs REST and GraphQL APIs from resource modeling to an OpenAPI 3.1 contract, with versioning, pagination and RFC 7807 error handling.
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.
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 문서 영향 봐줘", "문서 점검", "용어 통일"…
lablup/backend.ai-webui
Expert guide for Backend.AI distributed computing platform. An agent skill from lablup/backend.ai-webui.
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…
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.
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…
Works with
Categories
Answer a Backend.AI question, or do a Backend.AI task, from this checkout with the bai-agent CLI — the manual, the GraphQL schema, the i18n stores and the live manager. ai-webui.AI task, from this checkout with the bai-agent CLI — the manual, the GraphQL schema, the i18n stores and the live manager.
Bai Agent fits situations like: : what a Backend.AI concept; status value means (what does session status PENDING mean; what is a resource group; what does this field mean).
Run `npx skills add lablup/backend.ai-webui --skill bai-agent -a claude-code`. Or copy the skill folder (packages/backend.ai-agent-cli/skill in lablup/backend.ai-webui) into .claude/skills/bai-agent in your project. Claude Code loads it when a task matches its description.
Run `npx skills add lablup/backend.ai-webui --skill bai-agent -a codex`. Or copy the skill folder (packages/backend.ai-agent-cli/skill in lablup/backend.ai-webui) into .agents/skills/bai-agent 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 lablup/backend.ai-webui --skill bai-agent -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/bai-agent, .gemini/skills/bai-agent, .github/skills/bai-agent and .opencode/skills/bai-agent in your project.
SKILL.md names no scripts, command-line tools or credentials: Bai Agent is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
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.
Bai Agent 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.
About 2.1k tokens (SKILL.md is roughly 8.2k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 2k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Bai Agent: Playwright Best Practices (sanity-io/sanity, 6.4k stars), GraphQL Operations with Codegen (ChrisWiles/claude-code-showcase, 6.1k stars), Relay Best Practices (hackers-pub/hackerspub, 165 stars) and Shopify Expert (Jeffallan/claude-skills, 12k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
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 7, 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.