Playwright E2E
forcedotcom/salesforcedx-vscode
writing, running, and debugging Playwright tests; creating and recreating scratch orgs (Dreamhouse, minimal, non-tracking); working with their output from github actions
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.
$ npx skills add hardisgroupcom/sfdx-hardis --skill training-e2e -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install hardisgroupcom/sfdx-hardis training-e2e --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/training-e2e .claude/skills/training-e2e && 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 "training-e2e" agent skill from https://github.com/hardisgroupcom/sfdx-hardis/tree/main/.claude/skills/training-e2e into .claude/skills/training-e2e/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "training-e2e", 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/training-e2eType 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 training-e2e -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install hardisgroupcom/sfdx-hardis training-e2e --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/training-e2e .agents/skills/training-e2e && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "training-e2e" agent skill from https://github.com/hardisgroupcom/sfdx-hardis/tree/main/.claude/skills/training-e2e into .agents/skills/training-e2e/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "training-e2e", 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 training-e2e -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install hardisgroupcom/sfdx-hardis training-e2e --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/training-e2e .cursor/skills/training-e2e && 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 "training-e2e" agent skill from https://github.com/hardisgroupcom/sfdx-hardis/tree/main/.claude/skills/training-e2e into .cursor/skills/training-e2e/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "training-e2e", 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/training-e2e--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 training-e2e -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install hardisgroupcom/sfdx-hardis training-e2e --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/training-e2e .gemini/skills/training-e2e && 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 "training-e2e" agent skill from https://github.com/hardisgroupcom/sfdx-hardis/tree/main/.claude/skills/training-e2e into .gemini/skills/training-e2e/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "training-e2e", 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 training-e2eInstalls 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 training-e2e -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/training-e2e .github/skills/training-e2e && 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 "training-e2e" agent skill from https://github.com/hardisgroupcom/sfdx-hardis/tree/main/.claude/skills/training-e2e into .github/skills/training-e2e/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "training-e2e", 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 training-e2e -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 training-e2e --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/training-e2e .opencode/skills/training-e2e && 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 "training-e2e" agent skill from https://github.com/hardisgroupcom/sfdx-hardis/tree/main/.claude/skills/training-e2e into .opencode/skills/training-e2e/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "training-e2e", 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.
training-e2eWalks 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.
The point is to do the course rather than read it: in a real fork and real orgs, one lab at a time, fixing what breaks, so that every step works, every screenshot shows what the text says and no lab assumes something an earlier one did not deliver. Three sibling skills decide whether a change breaks a lab, perform the edits and handle Trailhead and badges, and this one is the only one that finds defects nobody predicted. It is used when asked to walk the labs, verify a level or check the course is current, or after a change large enough that reading the labs is not enough.
reference/runbook.md is the full procedure and is read first, covering fidelity levels, three passes per lab, notes per level and common traps. Scripts handle preflight checks, path settings, resetting the fork to what a new learner gets, a headless stand-in for the VS Code panel, per-lab image review, waiting on and merging pull requests, promotion between major branches and org authentication for lab 3.1. A reports folder holds earlier run reports.
7 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 these tools, so the agent can use them without asking each time:
BashReadGrepGlobEditWriteWebFetchAskUserQuestionFrom allowed-tools in the SKILL.md frontmatter.
Ships 4 files in scripts/ (JavaScript and Shell, from the files we listed), which the agent can run.
Shell commands in SKILL.md call:
nodeyarnbashpythonFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
developer.salesforce.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.
sfdx-hardis Training End-to-End Test loads about 2.6k tokens when it runs. Until then it costs about 123 tokens; SKILL.md has 1,163 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.
allowed-tools: Bash, Read, Grep, Glob, Edit, Write, WebFetch, AskUserQuestionAutomated 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); the scripts in this folder are not scanned.
The full file from hardisgroupcom/sfdx-hardis at commit 971ac89, republished under its AGPL-3.0 licence (© hardisgroupcom). 1,163 words, ~2,592 tokens.
.claude/skills/training-e2e/SKILL.md (or your agent's skills folder). This skill also uses 27 other files; get the full folder from GitHub.Do the course. Not read it: do it, in a real fork, against real orgs, one lab at a time, and fix what breaks. The goal is that when a learner arrives, every step works, every screenshot shows what the text describes, and nothing assumes something an earlier lab did not deliver.
Three skills already cover the course and none of them does this: [[training-impact]] decides whether a change breaks a lab, [[training-update]] performs the edits, [[training-publish]] handles Trailhead and the badges. This one is the only one that finds the defects nobody predicted.
| File | Use |
|---|---|
reference/runbook.md | The full procedure: fidelity levels, the three passes per lab, per level notes, the traps. Read it first. |
scripts/preflight.sh | Every prerequisite in one screen, and what to ask the user for. |
scripts/env.sh, env.mjs | The paths, all derived from this skill's own location, all overridable. |
scripts/reset-fork.sh | Puts the fork and the clone back to what a brand new fork gives a learner. |
scripts/panel.mjs | The headless stand-in for the VS Code panel: real command, real org, prompts answered from rules. |
scripts/review-lab.mjs | Per lab, every image with its pills, the text around it, and the file to open. |
scripts/prflow.sh | Waits for a Pull Request's checks, merges when green, watches the deployment job. |
scripts/promo.sh, tick.mjs | The same for a Pull Request between two major branches, ticking its pending manual step first when asked. |
scripts/auth.mjs | Lab 3.1: Add/Configure Org for one branch, then its two secrets on the fork. |
scripts/mon.mjs | Lab 3.8: Install Org Monitoring in the monitoring repository, then its secrets. |
scripts/setsecrets.mjs, setsecrets-mon.mjs | Read the secret values out of a command's log and store them. |
scripts/sync.sh | Mid-walk only: brings a course fix into the fork's major branches. |
reports/ | One report per run. |
bash .claude/skills/training-e2e/scripts/preflight.shIt prints OK, WARN or MISSING per item. A MISSING is something to ask the user for, because the run cannot do it itself:
helios-prod (production in the fiction, and the Dev Hub) and helios-preprod.
Prefer the orgfarm-* Developer Edition orgs already authenticated; a full walk needs a fresh
daily scratch org allowance and a fresh API budget on the Dev Hub, both of which preflight prints;gh signed in, with the repo and workflow scopes;--remote-debugging-port=9222, for the labs that
end on a GitHub or Salesforce page. Never automate a sign-in, and never send keystrokes to a window
found by its title.Decide with the user, if they have not said: which levels to walk (Level 1 alone is the quick pass; Level 3 is the long one), and whether to reset the fork first, which the answer should almost always be yes to.
Read reference/runbook.md in full. It holds the fidelity levels, the traps of the five
previous runs, and the role split of Level 3 that is easy to break by being helpful.
Run the cheap checks first, in $COURSE. There is no point walking 26 labs to find a dead
link:
node scripts/build/universe.mjs --check # the generated files match what the sources say
node scripts/build/lab-crossrefs.mjs --check # pages.yml refuses to publish without these two
node scripts/build/lab-command-links.mjs --check
node scripts/verify/check-commands.mjs # every command a lab needs still exists
node scripts/verify/check-links.mjs # every URL
node scripts/verify/check-pills.mjs # drawn pills versus referenced pills
node scripts/i18n/check-i18n.mjs # every locale answers every key of the generated pages
node scripts/build/site.mjs && python -m zensical build -f course-site.yml
node scripts/verify/check-site.mjs # every page resolves every asset and every link
node scripts/verify/check-nav.mjs # one language per menu, and every picker comes back
node scripts/verify/check-language-switch.mjs # the picker after an instant navigation, and the cookieThe last two open a browser, so they need playwright-core and a Chrome, which
preflight.sh reports.
Reset the fork: bash scripts/reset-fork.sh, and put the orgs back with
node scripts/training.mjs teardown. Never delete and recreate the scratch orgs: the daily
allowance does not come back.
Walk each lab with the three passes (runbook section 4), one lab at a time, in order:
read the published page as a learner, do every step at the highest fidelity that can do
it, look at every image with review-lab.mjs and the Read tool. Then the lab's own
Check my work.
For the "do" pass, prefer the lab driver, which is the real UI over the real CLI:
cd ../vscode-sfdx-hardis && yarn compile && yarn dev
SFDX_HARDIS_LAB_WORKSPACE="$RUN" SFDX_HARDIS_LAB_ONLY=1.3 yarn test:ui:labsFall back to scripts/panel.mjs for a lab labs/_assets/lab-drivers.json does not cover, and
record which fidelity each lab got.
Fix what you find, inside the run, in the repository that owns the defect (runbook section 8),
then re-do the step. labs/en/ first, the other locales after.
Write the report into reports/training-e2e-report-<yyyy-mm-dd>.md (runbook section 10),
including the "what this run did not cover" section.
Open one Pull Request per repository, cross-linked, in the order CLI, extension, training,
each with an entry in that repository's CHANGELOG.md (## [beta] (main) in sfdx-hardis,
## Unreleased in the extension, the ## YYYY-MM-DD heading of the day in the course). Later
fixes of the same run go on the same branch and Pull Request, never a new one. Then run the
code-review skill at high on each and fix what it raises.
panel.mjs stops when a prompt matches no rule,
because a learner would be stuck on the same question. Decide which is wrong, the product or the
lab, and say so.State them again in the report unless you close them:
yarn test:ui:labs in
../vscode-sfdx-hardis) runs the real panel and the real command together, which is what catches a
webview-only defect. It still answers the question the panel received rather than clicking a pixel,
and it only drives the labs labs/_assets/lab-drivers.json covers. Runbook section 9.labs/en/ is the reference and gets the walk;
labs/fr/ is checked for structure by scripts/i18n/check-structure.mjs and its generated
pages for completeness by scripts/i18n/check-i18n.mjs, neither of which is doing it.$ARGUMENTS
© 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
SKILL.md and 27 other files (scripts) in .claude/skills/training-e2e of hardisgroupcom/sfdx-hardis.
Open the folder on GitHubat commit 971ac89
sfdx-hardis Training End-to-End Test 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 |
|---|---|---|---|---|---|---|
| sfdx-hardis Training End-to-End Test this skillhardisgroupcom/sfdx-hardis | 400 | — | ~2.6k | Automated safety check: Notes | AGPL-3.0 | |
| Playwright E2Eforcedotcom/salesforcedx-vscode | 1k | — | ~3k | Automated safety check: Pass | BSD-3-Clause | |
| CodexBar Live QAsteipete/CodexBar | 22k | — | ~1.2k | Automated safety check: Pass | MIT | |
| Acceptance Evidence for Deliverieslobehub/lobehub | 83k | — | ~9.7k | Automated safety check: Pass | Apache-2.0 | |
| Senior QAnicepkg/auto-company | 192 | 3 repos | ~1.1k | Automated safety check: Notes | None | |
| Senpi Agent QA Harnesscode-yeongyu/senpi | 470 | — | ~2.7k | Automated safety check: Notes | MIT |
forcedotcom/salesforcedx-vscode
writing, running, and debugging Playwright tests; creating and recreating scratch orgs (Dreamhouse, minimal, non-tracking); working with their output from github actions
steipete/CodexBar
Runs live QA for the CodexBar app: provider usage matrix checks through its packaged CLI, config validation and menu checks, with 1Password-backed credentials handled safely.
lobehub/lobehub
Verifies a delivery end to end by driving the real product on a CLI, web, desktop or iOS Simulator surface, capturing evidence and publishing a round with the lh CLI.
nicepkg/auto-company
Comprehensive QA and testing skill for quality assurance, test automation, and testing strategies for ReactJS, NextJS, NodeJS applications.
code-yeongyu/senpi
Checks changes to the senpi coding agent by driving the real CLI from source in an isolated sandbox, over RPC, terminal UI, mock model and CLI smoke channels.
QwenLM/qwen-code
Drives Qwen Code in a real tmux session the way a user would and saves a readable step-by-step transcript of each screen for maintainers to review.
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
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.
hardisgroupcom/sfdx-hardis
Code examples and patterns for using i18n translations in sfdx-hardis source code (uxLog, uxLogTable, prompts, markers).
Works with
Categories
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. The point is to do the course rather than read it: in a real fork and real orgs, one lab at a time, fixing what breaks, so that every step works, every screenshot shows what the text says and no lab assumes something an earlier one did not deliver. Three sibling skills decide whether a change breaks a lab, perform the edits and handle Trailhead and badges, and this one is the only one that finds defects nobody predicted.
sfdx-hardis Training End-to-End Test fits situations like: verifying that every lab in the training course still works as written; checking that screenshots in a level still match the surrounding text; re-running the course after a large change to sfdx-hardis or its VS Code extension.
Run `npx skills add hardisgroupcom/sfdx-hardis --skill training-e2e -a claude-code`. Or copy the skill folder (.claude/skills/training-e2e in hardisgroupcom/sfdx-hardis) into .claude/skills/training-e2e in your project. Claude Code loads it when a task matches its description.
Run `npx skills add hardisgroupcom/sfdx-hardis --skill training-e2e -a codex`. Or copy the skill folder (.claude/skills/training-e2e in hardisgroupcom/sfdx-hardis) into .agents/skills/training-e2e 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 training-e2e -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/training-e2e, .gemini/skills/training-e2e, .github/skills/training-e2e and .opencode/skills/training-e2e in your project.
Going by SKILL.md and its folder, sfdx-hardis Training End-to-End Test needs JavaScript and a shell for the scripts in its folder and the command-line tools its instructions call (node, yarn, bash and python). Our summary lists: A Salesforce Developer Edition org; A fork of the training repository to run the labs against. Its frontmatter pre-approves these tools: Bash, Read, Grep, Glob, Edit, Write, WebFetch, AskUserQuestion.
SKILL.md names 1 domain. As links in the text: developer.salesforce.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
sfdx-hardis Training End-to-End Test 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.6k tokens (SKILL.md is roughly 10k 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 sfdx-hardis Training End-to-End Test: Playwright E2E (forcedotcom/salesforcedx-vscode, 1k stars), CodexBar Live QA (steipete/CodexBar, 22k stars), Acceptance Evidence for Deliveries (lobehub/lobehub, 83k stars) and Senior QA (nicepkg/auto-company, 192 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.