Playwright Testing
chongdashu/vibejam-starter-pack
Plan, implement, and debug frontend tests: unit/integration/E2E/visual/a11y.
Testing CKEditor 5 plugins in the Trilium monorepo. An agent skill from TriliumNext/Trilium.
$ npx skills add TriliumNext/Trilium --skill ckeditor5-testing -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install TriliumNext/Trilium ckeditor5-testing --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/TriliumNext/Trilium.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/ckeditor5-testing .claude/skills/ckeditor5-testing && 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 "ckeditor5-testing" agent skill from https://github.com/TriliumNext/Trilium/tree/main/.claude/skills/ckeditor5-testing into .claude/skills/ckeditor5-testing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ckeditor5-testing", 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/TriliumNext/Trilium/tree/main/.claude/skills/ckeditor5-testingType 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 TriliumNext/Trilium --skill ckeditor5-testing -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install TriliumNext/Trilium ckeditor5-testing --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/TriliumNext/Trilium.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/ckeditor5-testing .agents/skills/ckeditor5-testing && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "ckeditor5-testing" agent skill from https://github.com/TriliumNext/Trilium/tree/main/.claude/skills/ckeditor5-testing into .agents/skills/ckeditor5-testing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ckeditor5-testing", 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 TriliumNext/Trilium --skill ckeditor5-testing -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install TriliumNext/Trilium ckeditor5-testing --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/TriliumNext/Trilium.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/ckeditor5-testing .cursor/skills/ckeditor5-testing && 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 "ckeditor5-testing" agent skill from https://github.com/TriliumNext/Trilium/tree/main/.claude/skills/ckeditor5-testing into .cursor/skills/ckeditor5-testing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ckeditor5-testing", 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/TriliumNext/Trilium.git --path .claude/skills/ckeditor5-testing--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 TriliumNext/Trilium --skill ckeditor5-testing -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install TriliumNext/Trilium ckeditor5-testing --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/TriliumNext/Trilium.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/ckeditor5-testing .gemini/skills/ckeditor5-testing && 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 "ckeditor5-testing" agent skill from https://github.com/TriliumNext/Trilium/tree/main/.claude/skills/ckeditor5-testing into .gemini/skills/ckeditor5-testing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ckeditor5-testing", 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 TriliumNext/Trilium ckeditor5-testingInstalls 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 TriliumNext/Trilium --skill ckeditor5-testing -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/TriliumNext/Trilium.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/ckeditor5-testing .github/skills/ckeditor5-testing && 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 "ckeditor5-testing" agent skill from https://github.com/TriliumNext/Trilium/tree/main/.claude/skills/ckeditor5-testing into .github/skills/ckeditor5-testing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ckeditor5-testing", 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 TriliumNext/Trilium --skill ckeditor5-testing -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install TriliumNext/Trilium ckeditor5-testing --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/TriliumNext/Trilium.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/ckeditor5-testing .opencode/skills/ckeditor5-testing && 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 "ckeditor5-testing" agent skill from https://github.com/TriliumNext/Trilium/tree/main/.claude/skills/ckeditor5-testing into .opencode/skills/ckeditor5-testing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ckeditor5-testing", 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.
ckeditor5-testingTesting CKEditor 5 plugins in the Trilium monorepo. An agent skill from TriliumNext/Trilium.
Ckeditor5 Testing is an agent skill from TriliumNext/Trilium. Testing CKEditor 5 plugins in the Trilium monorepo. Use when adding or reviewing unit tests for the packages/ckeditor5 aggregate (including its in-tree plugins under src/plugins/), debugging a failing test, or setting up a package's test runner. Covers the Playwright browser-mode Vitest setup, the vitest.config.ts, testing against a real ClassicEditor, the model/view helpers imported from 'ckeditor5' (setModelData / getModelData / getViewData and their {}/[] selection syntax), vi spies/mocks, idiomatic patterns…
Its SKILL.md is about 3.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files, including reference files (for example `references/patterns.md`, `references/running-and-config.md` and `references/test-conventions.md`).
It sits in Testing & QA, covering Unit testing, Monorepo tooling and Failing and flaky tests. It works with Vitest, Playwright and pnpm. The repository describes itself as: Build your personal knowledge base with Trilium Notes. The licence is AGPL-3.0.
Read from SKILL.md and the folder at commit cac2b4f. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
pnpmvitestnixFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use pnpm, which can reach the network depending on how they are called.
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.
Ckeditor5 Testing loads about 3.3k tokens when it runs, and up to ~9.8k if it reads all its reference files. Until then it costs about 181 tokens; SKILL.md has 1,313 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 TriliumNext/Trilium at commit cac2b4f, republished under its AGPL-3.0 licence (© TriliumNext). 1,313 words, ~3,252 tokens.
.claude/skills/ckeditor5-testing/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.Testing CKEditor 5 plugins in the Trilium (TriliumNext Notes) monorepo. Nearly everything lives
in one package, packages/ckeditor5, with tests co-located as *.spec.ts next to the source —
including every plugin under src/plugins/. It gates src/** at 100% coverage on all four
metrics, so every code change must ship with a test.
This skill covers testing CKEditor 5 plugins in the Trilium (TriliumNext Notes) monorepo
(packages/ckeditor5). The CKEditor 5 library is 48 or later.
For general (non-CKEditor) Trilium testing, see the writing-unit-tests skill.
On versions: these skills name major versions only ("48 or later"). Trilium tracks CKEditor
5 closely, so an exact pin written here would be stale within weeks — read the current one from
packages/ckeditor5/package.json.
Adding/reviewing unit tests for a plugin, debugging a failing test, or configuring a package's
runner. For writing the feature itself, use the ckeditor5-plugin-development skill. For general
Trilium testing (Preact components, jQuery widgets, server routes), use writing-unit-tests.
vitest.config.ts built with defineConfig directly.@vitest/browser-playwright, headless Chromium),
used by ckeditor5. Real DOM and real layout, so
getBoundingClientRect(), elementFromPoint() and pointer events behave as in a browser. Gates
src/** coverage at 100% (lines/functions/branches/statements).<details> fires toggle on a later task, for one.
Synthetic events also need cancelable: true before preventDefault() means anything.ClassicEditor against a real
DOM element (see below). There is no ModelTestEditor/VirtualTestEditor/ClassicTestEditor
in Trilium — those live only in the upstream ckeditor5 monorepo's tests/_utils.'ckeditor5': _setModelData, _getModelData, _getViewData are imported
from the ckeditor5 package.*.spec.ts next to the source, including inside plugin
folders (src/plugins/<name>/<name>.spec.ts), with vitest include: ['src/**/*.spec.ts'].
globals: true. Coverage provider v8,
include: src/** (test files themselves excluded from coverage). The aggregate keeps
allowExternal: false so an imported sibling package cannot bleed into its report (see
references/running-and-config.md).'ckeditor5'; in-package source imports use a file extension.licenseKey: 'GPL' in the editor config.references/test-conventions.md for how Trilium handles it.pnpm --filter @triliumnext/ckeditor5 test # the whole suite (from anywhere)
# or, from the package dir:
vitest runDebug a browser-mode package with a visible browser:
vitest --inspect-brk --no-file-parallelism --browser.headless=falseRoot orchestration — what CI runs, not what you run. pnpm test:parallel runs the light
packages in parallel; pnpm test:sequential runs ckeditor5 sequentially (browser resource
limits), alongside the server. pnpm test:all runs both. All three take minutes; during development
run a filtered package suite instead (pnpm --filter @triliumnext/ckeditor5 test <pattern>), and
leave the aggregates to CI. Each package exposes "test": "vitest" and
"test:debug": "vitest --inspect-brk --no-file-parallelism --browser.headless=false".
Playwright downloads its own Chromium on demand; install it once with pnpm exec playwright install chromium from the repo root.
When that build cannot run — on NixOS it is linked against libraries no store path provides and
dies on a missing libxcb.so.1 — point the suite at a system browser instead:
CHROME_BIN=/path/to/chromium pnpm --filter @triliumnext/ckeditor5 testCHROME_BIN is read by the package's vitest.config.ts and passed to the provider as
launchOptions.executablePath. nix develop sets it from pkgs.chromium, so inside the dev shell
the plain command works — don't write a local override config.
Failed browser tests dump PNGs into a gitignored __screenshots__ beside the spec; delete them
afterwards.
In the aggregate (packages/ckeditor5), use the shared editor kit —
createTestEditor() from test/editor-kit.ts builds a real ClassicEditor (licenseKey: 'GPL',
auto-tracked) and the global afterEach in test/setup.ts (wired via setupFiles) destroys every
tracked editor, so specs don't write their own editor-teardown afterEach:
import { ClassicEditor, Essentials, Paragraph, _setModelData } from 'ckeditor5';
import { describe, it, expect, beforeEach } from 'vitest';
import { createTestEditor } from '../../test/editor-kit.js';
import MyPlugin from './myplugin.js';
describe( 'MyPlugin', () => {
let editor: ClassicEditor;
beforeEach( async () => {
editor = await createTestEditor( [ Essentials, Paragraph, MyPlugin ] );
} );
it( 'loads the plugin', () => {
expect( editor.plugins.get( MyPlugin ) ).toBeInstanceOf( MyPlugin );
} );
it( 'keeps the selection in a paragraph', () => {
_setModelData( editor.model, '<paragraph>foo[]bar</paragraph>' );
expect( editor.model.document.getRoot().getChild( 0 ).name ).toBe( 'paragraph' );
} );
} );Need the host element? It's editor.sourceElement (or getEditorElement( editor ) from the kit).
Some legacy specs still hand-roll the create/destroy scaffold (document.createElement('div') +
ClassicEditor.create(...) + a teardown afterEach) — those are being migrated to createTestEditor.
Conventions visible here and across the suite:
describe named after the unit, nested describes for areas (isEnabled,
execute(), …), small focused its.beforeEach (return the Promise or use async/await — Vitest awaits it).licenseKey: 'GPL' (the kit does this for you). List only the plugins the test needs
(commands can also be instantiated directly, e.g. new InsertMermaidCommand( editor )).Trilium passes the English text itself as the message id (see the ckeditor5-plugin-development
skill), so a test editor with no dictionary renders the English text — assert that literal:
expect( button.label ).toBe( 'Collapsible block' );Never assert a text-editor.… key: that shape belonged to the retired host bridge, and a spec
expecting one is testing a mechanism that no longer exists.
To prove a string really is translatable rather than hardcoded, configure a dictionary. The entry
must be keyed by language, and the leading {} is load-bearing — CKEditor merges translations
with reduce(merge) and no initial value, so without the seed it mutates the first entry:
editor = await createTestEditor( [ Essentials, Paragraph, Collapsible ], {
translations: [ {}, { en: { dictionary: { 'Collapsible block': 'Bloc pliabil' } } } ]
} );
expect( createButton( editor ).label ).toBe( 'Bloc pliabil' );en because that is the language the editor resolves under when none is configured. Getting the
shape wrong (omitting the language key) throws inside Locale.t and fails every spec in the file,
not just the one.
For a helper that takes a translator parameter rather than an editor, pass
( message: string ) => message — the same English-fallback behaviour, no editor needed. To observe
which messages a plugin asked for, spy with vi.spyOn( editor, 't' ): t is an own property the
editor assigns in its constructor, so the spy intercepts as long as the code reads this.editor.t
per call. Install it before whatever triggers the render.
_setModelData() / _getModelData() (and _getViewData()) stringify and parse the engine
structures, with a special selection syntax:
[] — collapsed selection, or brackets around a range, anchored in an element.{} — selection anchored inside a text node (e.g. foo{}bar / f{oo}bar).<$text bold="true">word</$text>; elements as <paragraph>…</paragraph>._setModelData( model, '<paragraph>foo[]bar</paragraph>' );
expect( _getModelData( model ) ).toEqual( '<paragraph>foo[]bar</paragraph>' );
expect( _getViewData( editor.editing.view ) ).toEqual( '<p>foo{}bar</p>' );These are dev/test utilities only — never ship them in production code.
expect(x).toBe(y), .toEqual(), .toBeInstanceOf(),
.toHaveBeenCalledWith()) and Chai-style (expect(x).to.equal(y), .to.be.false,
.to.instanceOf()) matchers work in Vitest. The existing Trilium tests mix both. There are
no custom matchers — compare stringified model/view directly.vi: vi.spyOn( editor, 'execute' ), vi.fn(), vi.useFakeTimers().const spy = vi.spyOn( editor, 'execute' );
button.fire( 'execute' );
expect( spy ).toHaveBeenCalledWith( 'insertMermaid' );glob / clipboard / jQuery $)Many in-aggregate plugins reference a global glob (the Trilium bridge typed in
src/augmentation.ts), some hit navigator.clipboard, and some converters call jQuery $(...).
Use the globals kit (test/globals-test-kit.ts): installGlobMock({…}) and mockClipboard({…})
install the stub and register their own teardown (run by the global afterEach in
test/setup.ts), and $ is a global passthrough from setup.ts — so specs don't hand-roll
globalThis.glob or delete anything. (Browser mode shares one page, so a leaked global would bleed
into later specs.) See references/patterns.md for the recipe.
| File | Use it for |
|---|---|
references/test-utilities.md | Testing against a real ClassicEditor (lifecycle, licenseKey: 'GPL'), and the _setModelData/_getModelData/_getViewData helpers from 'ckeditor5' + the []/{} selection syntax. |
references/patterns.md | Idiomatic recipes per concern (schema, conversion round-trips, commands, UI, keystrokes, events, async), all against a real editor; the glob/clipboard/jQuery-$ stubbing recipe (via the globals kit's installGlobMock/mockClipboard); note on the 100% coverage gate for browser-mode packages. |
references/running-and-config.md | The WebdriverIO vitest.config.ts shape, pnpm --filter commands, the debug command, pnpm test:parallel/test:sequential (ckeditor5 + math sequential), coverage thresholds, and troubleshooting a session that never starts (a missing Playwright browser build, the worktree dep-optimizer hang, orphaned headless Chromium). |
references/test-conventions.md | Trilium test conventions & gotchas: real-browser event timing, real-editor teardown, the both-assertion-styles note, unreachable code vs. the 100% gate, and the pointer to writing-unit-tests. |
When reviewing tests: editor created in beforeEach with licenseKey: 'GPL' and destroyed
in afterEach (plus editorElement.remove()); model/view asserted via
_getModelData/_getViewData with correct []/{} selection syntax; spies via vi; behavior
covered for collapsed and ranged selections and schema-disallowed contexts; new src/ lines
covered (100% gate), with any /* v8 ignore */ carrying a comment that justifies why the code is
unreachable.
© TriliumNext, 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 4 other files (references) in .claude/skills/ckeditor5-testing of TriliumNext/Trilium.
Open the folder on GitHubat commit cac2b4f
Ckeditor5 Testing 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 |
|---|---|---|---|---|---|---|
| Ckeditor5 Testing this skillTriliumNext/Trilium | 38k | — | ~3.3k | Automated safety check: Pass | AGPL-3.0 | |
| Playwright Testingchongdashu/vibejam-starter-pack | 149 | — | ~2.1k | Automated safety check: Pass | None | |
| Ha Frontend Testinghome-assistant/frontend | 5.7k | — | ~1.7k | Automated safety check: Pass | Apache-2.0 | |
| Playwright Testingchongdashu/vibejam-starter-pack | 149 | — | ~2.2k | Automated safety check: Pass | None | |
| Testingradix-ng/primitives | 274 | — | ~3.3k | Automated safety check: Pass | MIT | |
| Ever Worksever-works/ever-works | 158 | — | ~2.2k | Automated safety check: Pass | AGPL-3.0 |
chongdashu/vibejam-starter-pack
Plan, implement, and debug frontend tests: unit/integration/E2E/visual/a11y.
home-assistant/frontend
Home Assistant frontend testing and validation workflow. An agent skill from home-assistant/frontend.
chongdashu/vibejam-starter-pack
Plan, implement, and debug frontend tests: unit/integration/E2E/visual/a11y.
radix-ng/primitives
Test Radix NG primitives across every layer and pick the RIGHT one for a change: Vitest unit (zoneless), jest-axe a11y, Playwright browser regression (apps/visual-regression), SSR…
ever-works/ever-works
Repo-specific guide to the Ever Works monorepo (ever-works/ever-works) — its pnpm + Turborepo layout, the per-workspace test runners (Jest vs Vitest vs Playwright), file-naming and import-alias…
withkynam/vibecode-pro-max-kit
Covers web testing from unit to E2E, load, visual, accessibility and security checks, with Playwright, Vitest and k6 guides plus a Playwright setup script.
TriliumNext/Trilium
A skill your agent uses when cutting, preparing, or debugging a Trilium release — bumping the monorepo version, tagging, or diagnosing a failed "Release" workflow run.
TriliumNext/Trilium
A skill your agent uses when working on the Trilium Electron desktop app (apps/desktop) — adding or changing an electronApi method / IPC channel, touching preload.ts, main.ts, services/window.ts or…
TriliumNext/Trilium
A skill your agent uses when adding a DB migration or a new column/field to a Becca entity in Trilium ("add a migration", "new column on notes/attributes", "ALTER TABLE", "add a field to…
TriliumNext/Trilium
A skill your agent uses when adding, moving, or wiring an internal REST endpoint in Trilium (a new /api/ route) — choosing between a core-shared handler (packages/trilium-core/src/routes/index.ts…
TriliumNext/Trilium
A skill your agent uses when adding, changing, or reviewing an LLM/MCP tool in Trilium (the defineTools definitions under packages/trilium-core/src/services/llm/tools/ —…
TriliumNext/Trilium
Write, extend, and review CKEditor 5 plugins in the Trilium (TriliumNext Notes) monorepo — the rich-text-note editor under packages/ckeditor5, whose plugins live in src/plugins/.
Works with
Categories
Testing CKEditor 5 plugins in the Trilium monorepo. An agent skill from TriliumNext/Trilium. Ckeditor5 Testing is an agent skill from TriliumNext/Trilium. Testing CKEditor 5 plugins in the Trilium monorepo.
Ckeditor5 Testing fits situations like: reviewing unit tests for the packages/ckeditor5 aggregate (including its in-tree plugins under src/plugins/); debugging a failing test; setting up a packages test runner.
Run `npx skills add TriliumNext/Trilium --skill ckeditor5-testing -a claude-code`. Or copy the skill folder (.claude/skills/ckeditor5-testing in TriliumNext/Trilium) into .claude/skills/ckeditor5-testing in your project. Claude Code loads it when a task matches its description.
Run `npx skills add TriliumNext/Trilium --skill ckeditor5-testing -a codex`. Or copy the skill folder (.claude/skills/ckeditor5-testing in TriliumNext/Trilium) into .agents/skills/ckeditor5-testing 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 TriliumNext/Trilium --skill ckeditor5-testing -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/ckeditor5-testing, .gemini/skills/ckeditor5-testing, .github/skills/ckeditor5-testing and .opencode/skills/ckeditor5-testing in your project.
Going by SKILL.md and its folder, Ckeditor5 Testing needs the command-line tools its instructions call (pnpm, vitest and nix).
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.
Ckeditor5 Testing 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 3.3k tokens (SKILL.md is roughly 13k 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 6.5k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Ckeditor5 Testing: Playwright Testing (chongdashu/vibejam-starter-pack, 149 stars), Ha Frontend Testing (home-assistant/frontend, 5.7k stars), Playwright Testing (chongdashu/vibejam-starter-pack, 149 stars) and Testing (radix-ng/primitives, 274 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
TriliumNext (a GitHub organization) maintains it in TriliumNext/Trilium, which has 38,248 GitHub stars. The repository holds 22 skills in this directory. The repository was last updated on October 8, 2026.
Source: TriliumNext/Trilium on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.