Playwright
EliasOulkadi/shokunin
Browser automation, web scraping, E2E testing, and visual regression with Playwright.
A skill your agent uses when measuring what the Trilium client loads at startup — "what loads at boot?", "did this change reduce the startup bundle?", "is <dependency lazy?", or any before/after…
$ npx skills add TriliumNext/Trilium --skill measure-startup-requests -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install TriliumNext/Trilium measure-startup-requests --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/measure-startup-requests .claude/skills/measure-startup-requests && 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 "measure-startup-requests" agent skill from https://github.com/TriliumNext/Trilium/tree/main/.claude/skills/measure-startup-requests into .claude/skills/measure-startup-requests/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "measure-startup-requests", 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/measure-startup-requestsType 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 measure-startup-requests -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install TriliumNext/Trilium measure-startup-requests --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/measure-startup-requests .agents/skills/measure-startup-requests && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "measure-startup-requests" agent skill from https://github.com/TriliumNext/Trilium/tree/main/.claude/skills/measure-startup-requests into .agents/skills/measure-startup-requests/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "measure-startup-requests", 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 measure-startup-requests -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install TriliumNext/Trilium measure-startup-requests --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/measure-startup-requests .cursor/skills/measure-startup-requests && 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 "measure-startup-requests" agent skill from https://github.com/TriliumNext/Trilium/tree/main/.claude/skills/measure-startup-requests into .cursor/skills/measure-startup-requests/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "measure-startup-requests", 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/measure-startup-requests--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 measure-startup-requests -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install TriliumNext/Trilium measure-startup-requests --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/measure-startup-requests .gemini/skills/measure-startup-requests && 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 "measure-startup-requests" agent skill from https://github.com/TriliumNext/Trilium/tree/main/.claude/skills/measure-startup-requests into .gemini/skills/measure-startup-requests/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "measure-startup-requests", 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 measure-startup-requestsInstalls 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 measure-startup-requests -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/measure-startup-requests .github/skills/measure-startup-requests && 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 "measure-startup-requests" agent skill from https://github.com/TriliumNext/Trilium/tree/main/.claude/skills/measure-startup-requests into .github/skills/measure-startup-requests/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "measure-startup-requests", 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 measure-startup-requests -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 measure-startup-requests --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/measure-startup-requests .opencode/skills/measure-startup-requests && 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 "measure-startup-requests" agent skill from https://github.com/TriliumNext/Trilium/tree/main/.claude/skills/measure-startup-requests into .opencode/skills/measure-startup-requests/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "measure-startup-requests", 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.
measure-startup-requestsA skill your agent uses when measuring what the Trilium client loads at startup — "what loads at boot?", "did this change reduce the startup bundle?", "is <dependency lazy?", or any before/after…
Measure Startup Requests is an agent skill from TriliumNext/Trilium. Use when measuring what the Trilium client loads at startup — "what loads at boot?", "did this change reduce the startup bundle?", "is <dependency lazy?", or any before/after comparison for lazy-loading / code-splitting work. Drives a headless browser through login against the running dev server, records every request, and analyzes captures (summary, heavy-dependency probe, before/after diff). Don't write a new throwaway Playwright script or inline node analyzers — both already live here.
Its SKILL.md is about 1.5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files.
It sits in Testing & QA, covering Web performance, Browser automation and Browser testing. It works with Playwright. The repository describes itself as: Build your personal knowledge base with Trilium Notes. The licence is AGPL-3.0.
4 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 4d9cb6d. 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.
Ships script files (JavaScript), which the agent can run.
Shell commands in SKILL.md call:
nodepnpmplaywrightFrom 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 these keys or tokens, usually read from environment variables:
TRILIUM_PASSWORDFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Measure Startup Requests loads about 1.5k tokens when it runs. Until then it costs about 130 tokens; SKILL.md has 687 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 4d9cb6d, republished under its AGPL-3.0 licence (© TriliumNext). 687 words, ~1,522 tokens.
.claude/skills/measure-startup-requests/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.Two scripts in this folder do everything; don't reinvent them:
# 1. Capture a full startup (login → network quiet) into a JSON file:
TRILIUM_PASSWORD=<password> node .claude/skills/measure-startup-requests/capture-requests.mjs <out.json> [baseUrl]
# 2. Analyze captures:
node .claude/skills/measure-startup-requests/analyze-requests.mjs summary <capture.json> [--top N]
node .claude/skills/measure-startup-requests/analyze-requests.mjs probe <capture.json> [name ...]
node .claude/skills/measure-startup-requests/analyze-requests.mjs diff <before.json> <after.json> [--filter <regex>]pnpm server:start, http://localhost:8080 by default).
Note which checkout it serves: the capture reflects the tree the server runs from, not your cwd
(verify with curl on a file that only exists in one tree if unsure).TRILIUM_PASSWORD env var if the instance has a password. Without it the capture still
"succeeds" — it just never gets past the login page, yielding a plausible-looking ~178-request
file that measures nothing. Validate every capture before drawing conclusions: a real one
contains /api/ requests (/api/tree, /api/options, ...). Zero /api/ hits means you
captured the login screen.packages/trilium-e2e; the script prefers system Edge/Chrome, so no
playwright install is needed.capture-requests.mjs baseline.json.analyze-requests.mjs diff baseline.json after.json.probe confirms specific heavy deps stayed off the boot path.The capture above needs a session. To weigh a single entry point instead — "what does reaching CKEditor actually cost?" — skip the login entirely: Vite serves module URLs unauthenticated.
http://localhost:8080/assets/v<version>/@fs/<absolute repo path>/…/file.ts.setContent("<html><body>"), then take performance.now()
around await import(url).catch(() => {})..catch is what makes this work. An ES module graph is fully fetched and instantiated
before any of it is evaluated, so a module whose evaluation throws without a session ("Logged in
session not found") still yields a valid download-and-instantiate measurement.{ licenseKey: "GPL" }, or create() throws
license-key-missing.This is how the "first text note is slow" delay was attributed to the module graph rather than to
the editor (dev server, 2026-08): packages/ckeditor5/src/index.ts ~290 ms / 216 modules and
EditableText.tsx ~355 ms / 328 modules, against PopupEditor.create() at 83 ms first and ~25 ms
after. That is why the idle preload (preloadCommonNoteTypes in note_types.tsx) is the lever —
and why the 428 KB emoji definitionsUrl fetch is not a suspect: EmojiRepository.init() fires it
without returning the promise, so it never blocks create().
seq of the first module of that package and at the /src/... modules requested just before it,
then confirm the chain by grepping for static importers.diff of targeted module sets, and treat full-MB totals as indicative./@fs/..., so a
worktree named e.g. lazy-ribbon makes every request match /ribbon/. The analyzer normalizes
paths (strips host, ?v=/?t= params, /assets/vX.Y.Z, and the /@fs/<checkout> prefix) —
rely on that.dist-XXXX.js) are identified by their .js.map in
.cache/vite-<port>/deps/ (each dev instance has its own): grep -o '"[^"]*node_modules/[^"]*"' <chunk>.js.map | ... and count by
package. (The 800 KB es-toolkit+mdast/hast chunk is CKEditor's internals, for example.)The default probe list is the set of heavy deps that were deliberately made lazy (CKEditor,
highlight.js, KaTeX, codemirror-vim, snapdom, force-graph, the LLM chat graph, ...) — if one of
them reports LOADED on a plain board/empty note startup, a regression sneaked in. After the
2026-06 lazy-loading work the new-layout baseline was ~557 requests / 3.75 MB / 500 scripts
(down from 810 / 8.02 MB / 745).
Both eager-load offenders this file used to list have since been fixed (re-verified 2026-08):
applyModals in layout_commons.tsx now wraps every dialog in LazyDialog (a dynamic import()
on first summons), keeping only PopupEditor, CallToAction, Toast and ShortcutHintsPanel
eager — each with a comment saying why. The Inter font is served as woff2. Don't re-report either
as a finding; measure first.
© 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 2 other files in .claude/skills/measure-startup-requests of TriliumNext/Trilium.
Open the folder on GitHubat commit 4d9cb6d
Measure Startup Requests 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 |
|---|---|---|---|---|---|---|
| Measure Startup Requests this skillTriliumNext/Trilium | 38k | — | ~1.5k | Automated safety check: Pass | AGPL-3.0 | |
| PlaywrightEliasOulkadi/shokunin | 114 | — | ~3.6k | Automated safety check: Notes | MIT | |
| playwright-cli Browser Automationgithub/gh-aw | 5.4k | 25 repos | ~2.8k | Automated safety check: Pass | MIT | |
| Playwright Skilllackeyjb/playwright-skill | 3.2k | — | ~1.9k | Automated safety check: Pass | MIT | |
| TabbitTabbit-Browser/dsh-tabbit | 104 | — | ~780 | Automated safety check: Pass | MIT | |
| Agenttinyfish-io/tinyfish-cookbook | 2.2k | — | ~1.1k | Automated safety check: Pass | MIT |
EliasOulkadi/shokunin
Browser automation, web scraping, E2E testing, and visual regression with Playwright.
github/gh-aw
Drives a real browser from the command line with playwright-cli to open pages, interact, mock requests, save state and work with Playwright tests.
lackeyjb/playwright-skill
Complete browser automation with Playwright. An agent skill from lackeyjb/playwright-skill.
Tabbit-Browser/dsh-tabbit
Control Tabbit Browser in a task-isolated Playwright workspace; never switch browser backends.
tinyfish-io/tinyfish-cookbook
Default browser automation agent — click, fill forms, navigate, log in, and extract structured data from any website using a natural-language goal, or run the same task across multiple sites in…
Hainrixz/editor-pro-max
Drives a live browser through the Playwright MCP server to navigate, inspect, fill forms and screenshot pages, with snapshot-first habits and output-size care.
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
A skill your agent uses when measuring what the Trilium client loads at startup — "what loads at boot?", "did this change reduce the startup bundle?", "is <dependency lazy?", or any before/after…. Measure Startup Requests is an agent skill from TriliumNext/Trilium.", or any before/after comparison for lazy-loading / code-splitting work.
Measure Startup Requests fits situations like: measuring what the Trilium client loads at startup — what loads at boot?; did this change reduce the startup bundle?; is <dependency lazy?; any before/after comparison for lazy-loading / code-splitting work.
Run `npx skills add TriliumNext/Trilium --skill measure-startup-requests -a claude-code`. Or copy the skill folder (.claude/skills/measure-startup-requests in TriliumNext/Trilium) into .claude/skills/measure-startup-requests in your project. Claude Code loads it when a task matches its description.
Run `npx skills add TriliumNext/Trilium --skill measure-startup-requests -a codex`. Or copy the skill folder (.claude/skills/measure-startup-requests in TriliumNext/Trilium) into .agents/skills/measure-startup-requests 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 measure-startup-requests -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/measure-startup-requests, .gemini/skills/measure-startup-requests, .github/skills/measure-startup-requests and .opencode/skills/measure-startup-requests in your project.
Going by SKILL.md and its folder, Measure Startup Requests needs JavaScript for the scripts in its folder, the command-line tools its instructions call (node, pnpm and playwright) and credentials named TRILIUM_PASSWORD. Our summary lists: Node.js.
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.
Measure Startup Requests 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 1.5k tokens (SKILL.md is roughly 6.1k 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 Measure Startup Requests: Playwright (EliasOulkadi/shokunin, 114 stars), playwright-cli Browser Automation (github/gh-aw, 5.4k stars), Playwright Skill (lackeyjb/playwright-skill, 3.2k stars) and Tabbit (Tabbit-Browser/dsh-tabbit, 104 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,274 GitHub stars. The repository holds 23 skills in this directory. The repository was last updated on October 11, 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.