Wdio Testing
ansible/vscode-ansible
Write, run, and debug WebDriverIO (WDIO) UI tests for the Ansible VS Code extension.
How to pick the correct uxLog level (action, log, warning, error, success, other), the matching chalk color, the options object (sensitive, alwaysVisible), VS Code UI suppression, and uxLogTable.
$ npx skills add hardisgroupcom/sfdx-hardis --skill uxlog-usage -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install hardisgroupcom/sfdx-hardis uxlog-usage --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/hardisgroupcom/sfdx-hardis.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/uxlog-usage .claude/skills/uxlog-usage && 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 "uxlog-usage" agent skill from https://github.com/hardisgroupcom/sfdx-hardis/tree/main/.claude/skills/uxlog-usage into .claude/skills/uxlog-usage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "uxlog-usage", 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/hardisgroupcom/sfdx-hardis/tree/main/.claude/skills/uxlog-usageType 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 hardisgroupcom/sfdx-hardis --skill uxlog-usage -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install hardisgroupcom/sfdx-hardis uxlog-usage --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/hardisgroupcom/sfdx-hardis.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/uxlog-usage .agents/skills/uxlog-usage && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "uxlog-usage" agent skill from https://github.com/hardisgroupcom/sfdx-hardis/tree/main/.claude/skills/uxlog-usage into .agents/skills/uxlog-usage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "uxlog-usage", 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 hardisgroupcom/sfdx-hardis --skill uxlog-usage -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install hardisgroupcom/sfdx-hardis uxlog-usage --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/hardisgroupcom/sfdx-hardis.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/uxlog-usage .cursor/skills/uxlog-usage && 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 "uxlog-usage" agent skill from https://github.com/hardisgroupcom/sfdx-hardis/tree/main/.claude/skills/uxlog-usage into .cursor/skills/uxlog-usage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "uxlog-usage", 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/hardisgroupcom/sfdx-hardis.git --path .claude/skills/uxlog-usage--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 hardisgroupcom/sfdx-hardis --skill uxlog-usage -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install hardisgroupcom/sfdx-hardis uxlog-usage --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/hardisgroupcom/sfdx-hardis.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/uxlog-usage .gemini/skills/uxlog-usage && 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 "uxlog-usage" agent skill from https://github.com/hardisgroupcom/sfdx-hardis/tree/main/.claude/skills/uxlog-usage into .gemini/skills/uxlog-usage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "uxlog-usage", 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 hardisgroupcom/sfdx-hardis uxlog-usageInstalls 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 hardisgroupcom/sfdx-hardis --skill uxlog-usage -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/hardisgroupcom/sfdx-hardis.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/uxlog-usage .github/skills/uxlog-usage && 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 "uxlog-usage" agent skill from https://github.com/hardisgroupcom/sfdx-hardis/tree/main/.claude/skills/uxlog-usage into .github/skills/uxlog-usage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "uxlog-usage", 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 hardisgroupcom/sfdx-hardis --skill uxlog-usage -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install hardisgroupcom/sfdx-hardis uxlog-usage --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/hardisgroupcom/sfdx-hardis.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/uxlog-usage .opencode/skills/uxlog-usage && 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 "uxlog-usage" agent skill from https://github.com/hardisgroupcom/sfdx-hardis/tree/main/.claude/skills/uxlog-usage into .opencode/skills/uxlog-usage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "uxlog-usage", 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.
uxlog-usageHow to pick the correct uxLog level (action, log, warning, error, success, other), the matching chalk color, the options object (sensitive, alwaysVisible), VS Code UI suppression, and uxLogTable.
Uxlog Usage is an agent skill from hardisgroupcom/sfdx-hardis. How to pick the correct uxLog level (action, log, warning, error, success, other), the matching chalk color, the options object (sensitive, alwaysVisible), VS Code UI suppression, and uxLogTable. Use when adding or modifying any uxLog call.
Its SKILL.md is about 2.7k 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. It works with Visual Studio Code. The repository describes itself as: French-army-knife Toolbox for Salesforce. Orchestrates base commands and assist users with interactive wizards to make much more than native Salesforce CLI + Allows you to define…. The licence is AGPL-3.0.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 971ac89. 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 (its code samples are typescript).
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.
Uxlog Usage loads about 2.7k tokens when it runs. Until then it costs about 63 tokens; SKILL.md has 1,107 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 hardisgroupcom/sfdx-hardis at commit 971ac89, republished under its AGPL-3.0 licence (© hardisgroupcom). 1,107 words, ~2,704 tokens.
.claude/skills/uxlog-usage/SKILL.md (or your agent's skills folder).uxLog writes to three sinks at once:
commandThis.ux.log or console.log).hardisLogFileStream file log.logType === "other", or the line contains the markers [command] or [NotifProvider].The logType argument both labels the line in the UI (drives section grouping, icons, colors) and decides whether the line reaches the UI at all. Pick it deliberately.
import { uxLog, uxLogTable } from "../../../common/utils/index.js";
import c from "chalk";
import { t } from "../../../common/utils/i18n.js";Always pair the level with its chalk color. Mixing them confuses the terminal output and breaks the convention used across ~2000 existing call sites.
| Level | Chalk color | When to use |
|---|---|---|
action | c.cyan | A new major step. Opens a new section / log group in the VS Code LWC UI. One per logical phase (e.g. "Querying", "Generating report", "Deploying metadata"). |
log | c.grey | Sub-detail beneath the current action. Counts, file paths, timings, intermediate state. |
warning | c.yellow | Recoverable issue the user should review. Operation continues. |
error | c.red | Failure or blocking issue. Operation is aborting or the result is unusable. |
success | c.green | Confirmed successful completion of an operation, often the closing line of an action block. |
other | none / c.grey / c.italic | Console + file only. NOT forwarded to the VS Code UI. Use for raw JSON dumps, verbose debug, or chatter that would clutter the UI session log. |
table | (internal) | Used by uxLogTable only. Do not call uxLog("table", ...) directly. |
// New phase - opens a UI section
uxLog("action", this, c.cyan(t("deployingMetadata", { metadata: name })));
// Detail under that action
uxLog("log", this, c.grey(t("foundFiles", { count: files.length })));
uxLog("log", this, c.grey(`- ${reportFile}`));
// Recoverable issue
uxLog("warning", this, c.yellow(t("missingOptionalConfig", { key: "slackWebhook" })));
// Failure
uxLog("error", this, c.red(t("deploymentFailed", { message: e.message })));
// Successful completion
uxLog("success", this, c.green(t("deploymentSucceeded", { org: targetOrg })));
// Debug payload that should NOT pollute the VS Code UI
uxLog("other", this, JSON.stringify(rawApiResponse, null, 2));c.green with error, c.red with success, etc. The level and color must match.action for sub-details - that creates spurious sections in the UI. One action per phase, then log for everything underneath.log (which goes to the UI in grey) for noisy diagnostic output - prefer other.uxLog should be wrapped in the matching color so terminal output stays readable.The optional fourth argument is a UxLogOptions object: { sensitive?: boolean; alwaysVisible?: boolean }.
uxLog("log", this, c.grey(`Authenticating with token ${token}`), { sensitive: true });
uxLog("action", this, c.cyan("Installation summary:"), { alwaysVisible: true });Backward compatibility: the 4th argument also still accepts a bare boolean (the legacy
sensitiveflag), becauseuxLogis called by external plugins.uxLog(..., true)is equivalent touxLog(..., { sensitive: true }). For new code, always use the options object.
sensitiveSet { sensitive: true } when the line contains credentials, tokens, secrets, or any data that must not land in the file log or the VS Code UI. Use it for any line that interpolates an access token, refresh token, client secret, password, or third-party API key.
Behaviour:
hardisLogFileStream): writes the literal string OBFUSCATED LOG LINE.OBFUSCATED LOG LINE. Exception: lines containing SFDX_CLIENT_ID_, SFDX_CLIENT_KEY_, or SFDX_CLIENT_CERT_ are sent as-is even when sensitive is set.alwaysVisibleSet { alwaysVisible: true } to keep the enclosing VS Code UI section expanded by default, instead of auto-collapsing when a later section opens (and staying open in the UI's "simple" mode too). A manual collapse by the user still wins.
action line: keeps the section that line starts expanded.log, warning, error, ...): keeps the section that contains the line expanded.Use it for a summary block the user should keep seeing while they act on the next prompt (e.g. an install summary shown just before a confirmation). No effect outside the VS Code LWC UI.
The VS Code extension only renders lines whose logType !== "other" AND whose text does not include the markers [command] or [NotifProvider].
Practical consequences:
uxLog("other", ...). The terminal and file log still receive it.[command] and [NotifProvider] prefixes are reserved for internal command-execution and notification-provider lines that the UI handles through dedicated events; do not introduce new uses of those markers in unrelated code.[Marker] prefixes (e.g. [DORA], [sfdx-hardis]) are fine and are forwarded to the UI.For tabular output, do not hand-format a table inside uxLog. Use uxLogTable, which renders an aligned text table to the terminal/file log AND emits a structured table payload to the LWC UI.
import { uxLogTable } from "../../../common/utils/index.js";
uxLogTable(this, [
{ name: "Account", recordCount: 42, status: "ok" },
{ name: "Contact", recordCount: 17, status: "ok" },
], ["name", "recordCount", "status"]);bool2emoji.The VS Code UI never displays more than UX_LOG_TABLE_MAX_UI_ROWS (20) rows, and invites the user to open the
associated CSV / XLS report instead. So every table whose row count is data-driven (query results, file lists,
metadata items, users, errors...) must also produce a report file.
Use uxLogTableWithReport from src/common/utils/filesUtils.ts: it displays the table and, when the dataset
exceeds 20 rows, writes the CSV (plus its XLSX twin) and pushes it to the UI as a report.
import { uxLogTableWithReport } from "../../../common/utils/filesUtils.js";
await uxLogTableWithReport(this, rows, ["type", "fullName", "status"], {
fileNamePrefix: "mdapi-read-successes",
fileTitle: "Metadata read successes",
});uxLogTable only for tables whose size is bounded by construction (a fixed summary, a handful of
config keys, a per-status counter). Anything that grows with the org or the project needs the report.generateReports,
generateCsvFile, a generated markdown/XLSX file sent with sendReportFileMessage), keep uxLogTable:
the requirement is that the full list is reachable, not that it is written twice.fileNamePrefix must be unique per table inside a command, otherwise two tables overwrite each other's report.uxLog("action", ...)After the user answers a prompts() call, the VS Code UI needs a new section before it renders anything else:
any output that is not uxLog("action", ...) is hidden. This covers log, warning, error, success,
uxLogTable, and command execution (execCommand / execSfdxJson / wrapSfdxCoreCommand write their own
lines and open sub-command entries in the UI).
So, on every code path leaving a prompt, the first thing that produces output must be an action:
const confirmRes = await prompts({ type: "confirm", name: "value", message: t("confirmDelete") });
if (confirmRes.value !== true) {
// Conclusion of the user's answer: make it the action itself
uxLog("action", this, c.cyan(t("operationCancelledByUser")));
return {};
}
// Real work starts: open the section before anything logs or runs
uxLog("action", this, c.cyan(t("deletingApexLogs", { count: apexLogsNumber })));
await execCommand(deleteCommand, this, { output: true, fail: true });Two ways to fix a case, pick the one that reads best:
action when it concludes the user's answer ("cancelled by user",
"nothing selected", "skipping X"). Remember to switch the chalk color to c.cyan at the same time.action when the next output is a detail line, a table, a loop, or a command
execution: the phase header was simply missing.This also applies to the prompt wrappers (promptOrg, promptProfiles, promptUserEmail,
promptTargetBranch, MetadataUtils.promptMetadataTypes, selectDataWorkspace,
selectFilesWorkspace, the promptText / promptSelect / promptConfirm helpers...), and it crosses
function boundaries: when a helper ends with a prompt, the caller is responsible for the action.
© hardisgroupcom, 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/uxlog-usage of hardisgroupcom/sfdx-hardis.
Open the folder on GitHubat commit 971ac89
Uxlog Usage 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 |
|---|---|---|---|---|---|---|
| Uxlog Usage this skillhardisgroupcom/sfdx-hardis | 400 | — | ~2.7k | Automated safety check: Pass | AGPL-3.0 | |
| Wdio Testingansible/vscode-ansible | 486 | — | ~2.2k | Automated safety check: Pass | MIT | |
| Devsydevsy-org/devsy | 109 | — | ~1.7k | Automated safety check: Pass | MPL-2.0 | |
| Devcontainerjwynia/agent-skills | 165 | — | ~1.2k | Automated safety check: Notes | MIT | |
| Osmo Lerobot Trainingmicrosoft/physical-ai-toolchain | 122 | — | ~3.8k | Automated safety check: Notes | MIT | |
| Tendril ReleaseIvy-Interactive/Ivy-Tendril | 200 | — | ~2k | Automated safety check: Pass | Custom licence |
ansible/vscode-ansible
Write, run, and debug WebDriverIO (WDIO) UI tests for the Ansible VS Code extension.
devsy-org/devsy
Operate Devsy workspaces and providers for end users. An agent skill from devsy-org/devsy.
jwynia/agent-skills
Diagnose devcontainer configuration problems and guide development environment setup.
microsoft/physical-ai-toolchain
Submit, monitor, analyze, and evaluate LeRobot imitation learning training jobs on OSMO with Azure ML MLflow integration and inference evaluation - Brought to you by microsoft/physical-ai-toolchain
Ivy-Interactive/Ivy-Tendril
Updates the used Ivy NuGet packages to the latest stable versions in a branch from development, builds/verifies, merges into development, creates a PR into main, merges it, merges main back to…
FreakStudioCN/mpy-hardware-extension
用本地前端插件连云端后端做端到端测试 / test the local VS Code extension against the deployed cloud backend.
hardisgroupcom/sfdx-hardis
Runs a full end-to-end test of sfdx-hardis promotion branches and backpromote against real Salesforce orgs and a throwaway repository, then writes a report.
hardisgroupcom/sfdx-hardis
Walks the sfdx-hardis training course end to end as a learner would, against a real Developer Edition org and fork, fixing broken steps and screenshots that no longer match.
hardisgroupcom/sfdx-hardis
Explains how the sfdx-hardis Salesforce CLI plugin is built: its TypeScript and Oclif stack, command layout, agent-mode flag and provider classes for git, notifications and AI.
hardisgroupcom/sfdx-hardis
Style rules for adding CHANGELOG.md entries: short, user-facing bullets grouped by command under the beta section, each linking the command's docs page.
hardisgroupcom/sfdx-hardis
Documentation standards for sfdx-hardis commands (description format with Command Behavior and Technical explanations sections, MkDocs site, build:doc).
hardisgroupcom/sfdx-hardis
Decision framework for fixing jscpd (copy-paste detector) errors.
Works with
Categories
How to pick the correct uxLog level (action, log, warning, error, success, other), the matching chalk color, the options object (sensitive, alwaysVisible), VS Code UI suppression, and uxLogTable. Uxlog Usage is an agent skill from hardisgroupcom/sfdx-hardis. How to pick the correct uxLog level (action, log, warning, error, success, other), the matching chalk color, the options object (sensitive, alwaysVisible), VS Code UI suppression, and uxLogTable.
Uxlog Usage fits situations like: modifying any uxLog call.
Run `npx skills add hardisgroupcom/sfdx-hardis --skill uxlog-usage -a claude-code`. Or copy the skill folder (.claude/skills/uxlog-usage in hardisgroupcom/sfdx-hardis) into .claude/skills/uxlog-usage in your project. Claude Code loads it when a task matches its description.
Run `npx skills add hardisgroupcom/sfdx-hardis --skill uxlog-usage -a codex`. Or copy the skill folder (.claude/skills/uxlog-usage in hardisgroupcom/sfdx-hardis) into .agents/skills/uxlog-usage 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 hardisgroupcom/sfdx-hardis --skill uxlog-usage -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/uxlog-usage, .gemini/skills/uxlog-usage, .github/skills/uxlog-usage and .opencode/skills/uxlog-usage in your project.
SKILL.md names no scripts, command-line tools or credentials: Uxlog Usage 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.
Uxlog Usage 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 2.7k tokens (SKILL.md is roughly 11k 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 Uxlog Usage: Wdio Testing (ansible/vscode-ansible, 486 stars), Devsy (devsy-org/devsy, 109 stars), Devcontainer (jwynia/agent-skills, 165 stars) and Osmo Lerobot Training (microsoft/physical-ai-toolchain, 122 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
hardisgroupcom (a GitHub organization) maintains it in hardisgroupcom/sfdx-hardis, which has 400 GitHub stars. The repository holds 21 skills in this directory. The repository was last updated on October 7, 2026.
Source: hardisgroupcom/sfdx-hardis on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.