Agent skill

Ckeditor5 Plugin Development

by TriliumNext in 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/.

AGPL-3.0Auto-check passedDevelopment

Install Ckeditor5 Plugin Development

skills CLI
$ npx skills add TriliumNext/Trilium --skill ckeditor5-plugin-development -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install TriliumNext/Trilium ckeditor5-plugin-development --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/TriliumNext/Trilium.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/ckeditor5-plugin-development .claude/skills/ckeditor5-plugin-development && rm -rf skills-src

Use ~/.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/

Facts

Skill name
ckeditor5-plugin-development
GitHub stars
38k
Token cost
~4.8k tokens
SKILL.md length
1,751 words
Files
12 (incl. references)
Skills in repo
22
Repo updated
First seen
Licence
AGPL-3.0

At a glance

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 in 3 steps: Core editor architecture (library… → Editing engine (library… → UI library (library ckeditor5-ui) — MVC…
  • Reviewing a Trilium CKEditor 5 feature/plugin
  • SKILL.md covers When to use this skill, The three pillars, Importing CKEditor in Trilium and Plugin anatomy, plus 5 more sections
  • Calls pnpm

What it does

Ckeditor5 Plugin Development is an agent skill from 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/. Use when building or reviewing a Trilium CKEditor 5 feature/plugin, or when working with the editing engine (model, view, schema, conversion/upcast-downcast), commands, the UI library (buttons, dropdowns, dialogs, balloons, toolbars), widgets (block/inline, toWidget, nested editables), keystrokes, localization (t()), registering a plugin…

Its SKILL.md is about 4.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 12 other files, including reference files (for example `references/architecture.md`, `references/commands.md` and `references/conventions.md`).

It sits in Development, covering Hooks and plugins, Monorepo tooling and Internationalization. The repository describes itself as: Build your personal knowledge base with Trilium Notes. The licence is AGPL-3.0.

When your agent uses it

  • Reviewing a Trilium CKEditor 5 feature/plugin
  • Working with the editing engine (model
  • Conversion/upcast-downcast)
  • The UI library (buttons

Example prompts

  • “/ckeditor5-plugin-development”

Workflow steps

3 steps, taken from the first numbered list in SKILL.md.

  1. Core editor architecture (library ckeditor5-core) — glue classes: Editor,
  2. Editing engine (library ckeditor5-engine) — the custom MVC data model, the
  3. UI library (library ckeditor5-ui) — MVC views, templates, and components

What it can do on your machine

Read from SKILL.md and the folder at commit 134a865. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • pnpm

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    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.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Ckeditor5 Plugin Development loads about 4.8k tokens when it runs, and up to ~39k if it reads all its reference files. Until then it costs about 217 tokens; SKILL.md has 1,751 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~217
When it runs · the whole SKILL.md, loaded when a task matches
~4.8k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~39k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from TriliumNext/Trilium at commit 134a865, republished under its AGPL-3.0 licence (© TriliumNext). 1,751 words, ~4,832 tokens.

Download SKILL.mdSave it as .claude/skills/ckeditor5-plugin-development/SKILL.md (or your agent's skills folder). This skill also uses 11 other files; get the full folder from GitHub.
name
ckeditor5-plugin-development
description
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/. Use when building or reviewing a Trilium CKEditor 5 feature/plugin, or when working with the editing engine (model, view, schema, conversion/upcast-downcast), commands, the UI library (buttons, dropdowns, dialogs, balloons, toolbars), widgets (block/inline, toWidget, nested editables), keystrokes, localization (t()), registering a plugin into plugins.ts / the editor classes / toolbar.ts, persisting a `data-trilium-*` attribute through the model→view→data→markdown→share pipeline, or adding a new plugin folder under src/plugins/. Covers the architecture, idiomatic patterns, Trilium packaging/registration, code-style conventions, and a review checklist.

CKEditor 5 plugin development (Trilium monorepo)

CKEditor 5 is plugin-based: every feature — even typing and <p> support — is a plugin. Without plugins the editor is an empty API. This skill is specific to Trilium (TriliumNext Notes), whose rich-text note editor is built from the CKEditor 5 library (external dep, CKEditor 5 48 or later) plus Trilium's own plugins. Both the editor build and the plugins live in packages/ckeditor5 (@triliumnext/ckeditor5): each feature is a folder under src/plugins/ — admonition, collapsible, footnotes, keyboard_marker, math, mermaid, mention, snippets and the rest — with its tests co-located beside it. No CKEditor feature ships as its own workspace package any more. The editor is consumed by apps/client (the text note widget). This skill distills how to write new Trilium plugins and review existing ones idiomatically.

When to use this skill

Use it whenever the task involves a Trilium CKEditor 5 plugin/feature: creating one (a folder under packages/ckeditor5/src/plugins/ — separate packages are not the pattern any more), extending one, debugging editing behavior, registering a plugin so it reaches the editor, or reviewing plugin code for correctness and convention compliance. Trigger concepts include: model/view/schema, conversion (upcast/downcast), Command, editor.model.change(), ButtonView/componentFactory, widgets (toWidget), ContextualBalloon/Dialog, editor.keystrokes, t() localization, the plugins.ts registry / editor classes / toolbar.ts.

The three pillars

These are the library's internal layers (upstream packages ckeditor5-core/-engine/-ui); in Trilium you never import them by those paths — everything comes from the ckeditor5 aggregate (see below). They describe how the engine is organized:

  1. Core editor architecture (library ckeditor5-core) — glue classes: Editor, Plugin, Command, plus the event/observable system.
  2. Editing engine (library ckeditor5-engine) — the custom MVC data model, the view (virtual DOM), schema, and conversion between them. The biggest piece.
  3. UI library (library ckeditor5-ui) — MVC views, templates, and components (buttons, dropdowns, dialogs, toolbars).

Mental model of the engine: there is one model document that is converted into two views — the editing view (what the user sees/edits) and the data view (input/output for getData()/setData()/paste). You almost always change the model; converters render it to the view. Never hand-edit the view to represent model state.

data (HTML) ──upcast──▶ MODEL ──editing downcast──▶ editing view ──render──▶ DOM (contentEditable)
                          │
                          └────data downcast──────▶ data view ──▶ getData()/output HTML

Importing CKEditor in Trilium

Import everything from the single ckeditor5 aggregate package (48 or later; it is a peerDependency + devDependency of every plugin package). There is no premium package: every premium plugin Trilium used has an in-tree GPL replacement, and the editor always runs under the GPL license key:

ts
import { Plugin, ButtonView, Command, _setModelData } from 'ckeditor5';
  • Cross-plugin imports inside packages/ckeditor5 are relative, e.g. import Kbd from './keyboard_marker/keyboard_marker.js';. The only workspace-package import in-tree under src/plugins/, and the aggregate registers them from plugins.ts.
  • Every import includes its file extension (.js/.ts/.json) — enforced by eslint-config-ckeditor5 (require-file-extensions-in-imports), with allow-imports-only-from-main-package-entry-point and no-legacy-imports also active.
  • The @ckeditor/ckeditor5-* deep paths you'll see in the library's own source (and cited in references/core-plugin-patterns.md) resolve to the same symbols, but in Trilium you always import from the ckeditor5 aggregate to avoid duplicate-module-instance problems. The only routine exceptions are dev/debug packages: @ckeditor/ckeditor5-icons and the CKEditor Inspector (import CKEditorInspector from '@ckeditor/ckeditor5-inspector';).

Plugin anatomy

A plugin extends Plugin (from 'ckeditor5'). There is no isOfficialPlugin/isPremiumPlugin flag in Trilium plugins. (License headers are not uniform across packages — some, e.g. admonition, prefix files with a CKSource header; others don't. Match the package you're in; see references/conventions.md.)

ts
import { Plugin } from 'ckeditor5';
import FooEditing from './fooediting.js';
import FooUI from './fooui.js';

export default class Foo extends Plugin {
	// Dependencies — the editor loads these automatically before this plugin.
	static get requires() {
		return [ FooEditing, FooUI ] as const;
	}

	// Stable name (PascalCase = the package/folder) for editor.plugins.get( 'Foo' ).
	static get pluginName() {
		return 'Foo' as const;
	}

	init() {
		const editor = this.editor;   // the editor that loaded this plugin
		// Register schema, converters, commands, UI, keystrokes, listeners…
	}

	afterInit() {
		// Runs after ALL plugins' init(). Use it when you depend on another
		// plugin's runtime state (e.g. registering a widget toolbar).
	}

	// init()/afterInit() may return a Promise. Plugin extends a base that provides
	// destroy() and this.listenTo()/this.stopListening() (auto-cleaned on destroy).
}

Plugin folder layout (e.g. packages/ckeditor5/src/plugins/admonition/), all files flat and snake_case: {feature}.ts glue, {feature}_editing.ts, {feature}_ui.ts, optional {feature}_command.ts. Put the declare module 'ckeditor5' augmentation at the bottom of the glue file: every folded-in plugin dropped its separate augmentation.ts and index.ts barrel that way, so consumers import the specific module they need. (syntax_highlighting still uses the older separate-file shape — leave it, but don't copy it.) Complex plugins add constants.ts (ELEMENTS/ATTRIBUTES/COMMANDS/CLASSES), utils.ts (model-query helpers), and split schema.ts/converters.ts. Tests sit beside the source as *.spec.ts.

Assets live in the package's shared folders, not per plugin: stylesheets in packages/ckeditor5/src/theme/{feature}.css (imported from the glue plugin) and icons in packages/ckeditor5/src/icons/, prefixed where the name would otherwise be generic (mermaid-info.svg). A plugin derived from third-party code also keeps a README.md recording its provenance, and a LICENSE.md where upstream requires one. See references/conventions.md.

Key rules (inherited from the upstream conventions via eslint-config-ckeditor5):

  • Every feature is a plugin; plugins are highly granular and should know as little about other plugins as possible (communicate via commands, events, and the schema).
  • Split editing from UI. The standard pattern is three plugins:
    • Feature — the glue plugin: static get requires() { return [ FeatureEditing, FeatureUI ] as const; }
    • FeatureEditing — schema, conversion, commands (works headless / server-side).
    • FeatureUI — buttons, dropdowns, balloons registered in componentFactory. This enables reuse (someone can take your editing layer and write a different UI). Simple text-attribute features can reuse the built-in AttributeCommand inline (see keyboard-marker).
  • Register UI in editor.ui.componentFactory.add( 'name', locale => view ), then the component 'name' is added to Trilium's toolbar config (apps/client/.../text/toolbar.ts).
  • Make features self-configuring: pre-configure the schema and provide config defaults via editor.config.define( 'feature', { … } ), read with editor.config.get( 'feature.key' ).
  • SVG icons are imported with ?raw straight into the file that uses them (import fooIcon from '../../icons/foo.svg?raw';); there is no icons export any more.
  • Every editor icon, CKEditor's and ours, is also a glyph in the built-in cke icon font that the User Guide uses to name toolbar buttons (cke-table-merge-cell, cke-trilium-kbd). Adding, renaming or removing an SVG, or bumping ckeditor5, means regenerating that font and checking the docs for the old class. See "The cke icon pack" in references/ui-and-localization.md.

Minimal end-to-end example (inline text attribute)

A "highlight" feature = a $text attribute ↔ <mark> element, a command, a button, a keystroke. This is the canonical shape for inline styling features.

js
import { Plugin, Command, ButtonView } from 'ckeditor5';

class HighlightCommand extends Command {
	refresh() {
		const { document, schema } = this.editor.model;
		this.value = document.selection.getAttribute( 'highlight' );
		this.isEnabled = schema.checkAttributeInSelection( document.selection, 'highlight' );
	}
	execute() {
		const model = this.editor.model;
		const selection = model.document.selection;
		const newValue = !this.value;
		model.change( writer => {
			if ( !selection.isCollapsed ) {
				for ( const range of model.schema.getValidRanges( selection.getRanges(), 'highlight' ) ) {
					newValue ? writer.setAttribute( 'highlight', true, range )
					         : writer.removeAttribute( 'highlight', range );
				}
			}
			newValue ? writer.setSelectionAttribute( 'highlight', true )
			         : writer.removeSelectionAttribute( 'highlight' );
		} );
	}
}

export default class Highlight extends Plugin {
	init() {
		const editor = this.editor;

		// 1. Schema: allow the attribute on text.
		editor.model.schema.extend( '$text', { allowAttributes: 'highlight' } );

		// 2. Conversion: model attribute 'highlight' <-> view <mark>.
		editor.conversion.attributeToElement( { model: 'highlight', view: 'mark' } );

		// 3. Command.
		editor.commands.add( 'highlight', new HighlightCommand( editor ) );

		// 4. UI button, reactive to command state.
		editor.ui.componentFactory.add( 'highlight', locale => {
			const button = new ButtonView( locale );
			const command = editor.commands.get( 'highlight' );
			button.set( { label: editor.t( 'Highlight' ), withText: true, isToggleable: true, tooltip: true } );
			button.bind( 'isOn', 'isEnabled' ).to( command, 'value', 'isEnabled' );
			button.on( 'execute', () => { editor.execute( 'highlight' ); editor.editing.view.focus(); } );
			return button;
		} );

		// 5. Keystroke.
		editor.keystrokes.set( 'Ctrl+Alt+H', 'highlight' );
	}
}

The same five steps (schema → conversion → command → UI → keystroke) recur in almost every feature. For elements/objects/widgets you schema.register(...) and use elementToElement converters instead of attributeToElement; see references/widgets.md.

Development workflow

  1. Write the plugin. A folder under packages/ckeditor5/src/plugins/. Separate workspace packages are no longer the pattern — every one that existed has been folded in, since none had consumers outside the aggregate or was ever published. See references/tooling-and-packaging.md ("Where a new plugin goes").
  2. Register it so it reaches the editor (full flow in references/tooling-and-packaging.md):
    • For a new workspace package, add "@triliumnext/ckeditor5-<feature>": "workspace:*" to packages/ckeditor5/package.json.
    • Import it in packages/ckeditor5/src/plugins.ts and add it to the right array — CORE_PLUGINS (minimal/attribute editor), TRILIUM_PLUGINS (in-repo src/plugins/), or EXTERNAL_PLUGINS (the @triliumnext workspace packages). These compose into COMMON_PLUGINS, which the editor classes in packages/ckeditor5/src/index.ts expose as static builtinPlugins.
    • Add the component name to the toolbar in apps/client/src/widgets/type_widgets/text/toolbar.ts.
  • Always reach for the CKEditor 5 Inspector while developing — it shows the live model, view, schema, commands, and selection. import CKEditorInspector from '@ckeditor/ckeditor5-inspector'; CKEditorInspector.attach( editor );
  • Change the model, not the DOM. Wrap all model mutations in editor.model.change( writer => … ) (one block = one undo step). Use editor.editing.view.change() only for view-only state (e.g. focus class) that the model does not represent.
  • Lint & test per package with pnpm workspace filters: pnpm --filter @triliumnext/ckeditor5-<feature> test (also lint, stylelint, test:debug).
  • Verify with editor.getData() / editor.setData() and by exercising selection edge cases (collapsed vs. ranged, inside objects/limits).
  • A changed plugin won't apply to an already-open editor via HMR. A plugin's init() runs only when the editor is built, so do a full page reload (or close/reopen the note) to get a fresh editor instance that picks up your change — otherwise you're testing the old code.
Show full SKILL.md (583 more words)Show less

Reference map

Load the focused reference for the task at hand:

FileUse it for
references/architecture.mdModel, view, schema, positions/ranges/selections, markers, the event/observable system, binding. The conceptual foundation.
references/conversion.mdUpcast/downcast pipelines, conversion helpers, custom (callback) converters, attribute/element/marker conversion, position mapping.
references/commands.mdCommand patterns: refresh()/execute(), state (value/isEnabled), forceDisabled(), affectsData, command events.
references/ui-and-localization.mdViews & templates, component catalog (buttons, inputs, dropdowns, dialogs/modals, balloons, toolbars), icons, componentFactory, focus/keystroke management, and t() localization.
references/widgets.mdBlock & inline widgets: toWidget/toWidgetEditable, nested editables, insertObject, widget toolbars, view↔model position mapping, custom properties, and external/async-rendered widgets (UI-element render callbacks, re-render on change, stale-render guard, lazy-load).
references/conventions.mdTrilium conventions: imports from ckeditor5/@triliumnext + required file extensions, per-package license/headers (not uniform), @triliumnext scope + workspace:*, per-package tsconfig, ?raw icons, localization via editor.t() message ids, declare module 'ckeditor5' augmentation, plus the upstream naming/CSS/BEM/JSDoc/TypeScript rules inherited via eslint-config-ckeditor5. For writing idiomatic code and reviewing.
references/tooling-and-packaging.mdTrilium packaging & wiring: the @triliumnext/ckeditor5-<feature> package layout, workspace:* deps, main: src/index.ts (no per-package dist), tsconfig/eslint/stylelint setup, the full registration flow (plugins.ts arrays → editor classes builtinPlugins → toolbar.ts), the three editor classes, the Vite build, how apps/client creates the editor (config, watchdog, lazy premium), the Inspector, and how to read CKEditor's own source (via bundle sourcemaps) and trace its runtime decisions.
references/persisted-attributes.mdPersisting a data-trilium-* attribute end to end: schema → both conversion directions → the deliberate markdown export/import decision (collapsed is DROPPED, task-state is KEPT) → editing-view-only CSS so read-only and share rendering stay correct. Read it before storing plugin state in the saved note content.
references/review-checklist.mdA structured checklist for reviewing an existing plugin (architecture, schema, conversion, commands, UI, a11y, conventions).
references/recipes.mdTask-oriented how-tos: insert content, find/iterate nodes, custom observers, place caret, extend other plugins' UI, etc.
references/core-plugin-patterns.mdCanonical idioms mined from the actual packages/*/src source: toolbar+menu-bar button factory, plugin flags & augmentation.ts, AttributeCommand/setAttributeProperties, inline-attribute boundary helpers, elementToStructure+slots, reconversion, BalloonToolbar, raw-HTML widgets, sanitizing untrusted HTML (CKEditor ships no sanitizer — the host supplies one per feature namespace), clipboard pipeline, markers, post-fixers, async/upload. Each cites its source file. Includes the reconversion hazard that drops sibling UIElements (to-do checkboxes) from reused child views, and the listener-priority rule a forced reconvertItem() depends on.

For testing a plugin (Vitest setup, test editors, model/view assertions, command/UI test patterns), use the separate ckeditor5-testing skill.

Quick review checklist (summary)

When reviewing a plugin, confirm: editing/UI split with a glue plugin; static get requires() and pluginName present; schema registered/extended and the feature self-configures; symmetric upcast + (data & editing) downcast converters; a Command whose refresh() sets isEnabled correctly (disabled where the schema disallows it); UI bound to command state and refocusing the editing view on execute; keyboard accessibility (keystrokes + accessibility.addKeystrokeInfos); all user-facing strings wrapped in t(); model changes inside model.change(); cleanup of trackers/handlers in destroy(). Full version: references/review-checklist.md. To drive a review (workflow, CKEditor-specific defect patterns, contribution process), use the separate ckeditor5-reviewing skill, which delegates back to this checklist.

Scope & sources

This skill is specific to the Trilium (TriliumNext Notes) monorepo's CKEditor 5 integration. Repository paths it cites — packages/ckeditor5, packages/ckeditor5/src/plugins/<name>/, apps/client/... — are this repository, and examples come from Trilium's own plugins (admonition, collapsible, footnotes, keyboard_marker, math, mermaid). The CKEditor 5 library is an external dependency tracked at 48 or later; its mechanics were distilled from the upstream docs (ckeditor.com/docs) and source (github.com/ckeditor/ckeditor5, commit 9ecca53627). Where a snippet cites an upstream library package (e.g. ckeditor5-basic-styles, -link, -image), that is the library's own source — not a Trilium package.

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.

© 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

Files

SKILL.md and 11 other files (references) in .claude/skills/ckeditor5-plugin-development of TriliumNext/Trilium.

  • SKILL.md
  • references/architecture.md
  • references/commands.md
  • references/conventions.md
  • references/conversion.md
  • references/core-plugin-patterns.md
  • references/persisted-attributes.md
  • references/recipes.md
  • references/review-checklist.md
  • references/tooling-and-packaging.md
  • references/ui-and-localization.md
  • references/widgets.md

Open the folder on GitHubat commit 134a865

Compare with similar skills

Ckeditor5 Plugin Development 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.

Ckeditor5 Plugin Development compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Ckeditor5 Plugin Development this skillTriliumNext/Trilium38k—~4.8kAutomated safety check: PassAGPL-3.0
Tutti Agent Workspace Apptutti-os/tutti3.8k—~1.9kAutomated safety check: PassApache-2.0
Openiap Workflowshyodotdev/openiap154—~766Automated safety check: PassMIT
Wp Plugin Developmentjorgerosal/wordpress-skills100—~12kAutomated safety check: PassMIT
Wp Plugin Developmentjorgerosal/wordpress-skills100—~438Automated safety check: PassMIT
Codebase Contexthomarr-labs/homarr5k—~659Automated safety check: PassApache-2.0

Similar skills

  • Build or evolve a complex agent-enabled Tutti workspace app repository.

    3.8k GitHub stars~1.9k tokensUpdated 1 mo ago
    DevelopmentAuto-check passed
  • Openiap Workflows

    hyodotdev/openiap

    A skill your agent uses for OpenIAP monorepo work that should follow the repository's slash-command workflows when the user asks in natural language instead of typing a slash command, including…

    154 GitHub stars~766 tokensUpdated yesterday
    Agent WorkflowsAuto-check passed
  • Wp Plugin Development

    jorgerosal/wordpress-skills

    WordPress plugin architecture review and WordPress.org submission standards.

    100 GitHub stars~12k tokensUpdated 4 mo ago
    Frontend & DesignAuto-check passed
  • Wp Plugin Development

    jorgerosal/wordpress-skills

    WordPress plugin architecture review for Codex. An agent skill from jorgerosal/wordpress-skills.

    100 GitHub stars~438 tokensUpdated 4 mo ago
    Agent WorkflowsAuto-check passed
  • Codebase Context

    homarr-labs/homarr

    Navigate Homarr's monorepo architecture and reuse shared packages.

    5k GitHub stars~659 tokensUpdated today
    DevelopmentAuto-check passed
  • Fba

    Zhongye1/KnowAgenticRAG

    FastAPI Best Architecture (fba) project development guide. An agent skill from Zhongye1/KnowAgenticRAG.

    143 GitHub stars~758 tokensUpdated 7 days ago
    Backend & APIsAuto-check passed

More from TriliumNext/Trilium

All 22 skills in this repo
  • Cutting A Release

    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.

    38k GitHub stars~3.2k tokensUpdated today
    Auto-check passed
  • Developing Electron Desktop

    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…

    38k GitHub stars~5.7k tokensUpdated today
    Auto-check passed
  • Evolving The Data Model

    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…

    38k GitHub stars~2.1k tokensUpdated today
    Auto-check passed
  • Adding Internal API Route

    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…

    38k GitHub stars~3.3k tokensUpdated today
    Auto-check passed
  • Adding LLM MCP Tools

    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/ —…

    38k GitHub stars~2.5k tokensUpdated today
    Auto-check passed
  • Ckeditor5 Testing

    TriliumNext/Trilium

    Testing CKEditor 5 plugins in the Trilium monorepo. An agent skill from TriliumNext/Trilium.

    38k GitHub stars~3.3k tokensUpdated today
    Auto-check passed

Questions about Ckeditor5 Plugin Development

What does Ckeditor5 Plugin Development do?

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/. Ckeditor5 Plugin Development is an agent skill from 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/.

When should I use Ckeditor5 Plugin Development?

Ckeditor5 Plugin Development fits situations like: reviewing a Trilium CKEditor 5 feature/plugin; working with the editing engine (model; conversion/upcast-downcast); the UI library (buttons.

How do I install Ckeditor5 Plugin Development in Claude Code?

Run `npx skills add TriliumNext/Trilium --skill ckeditor5-plugin-development -a claude-code`. Or copy the skill folder (.claude/skills/ckeditor5-plugin-development in TriliumNext/Trilium) into .claude/skills/ckeditor5-plugin-development in your project. Claude Code loads it when a task matches its description.

How do I install Ckeditor5 Plugin Development in Codex?

Run `npx skills add TriliumNext/Trilium --skill ckeditor5-plugin-development -a codex`. Or copy the skill folder (.claude/skills/ckeditor5-plugin-development in TriliumNext/Trilium) into .agents/skills/ckeditor5-plugin-development in your project. Codex loads it when a task matches its description.

Can I use Ckeditor5 Plugin Development in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add TriliumNext/Trilium --skill ckeditor5-plugin-development -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-plugin-development, .gemini/skills/ckeditor5-plugin-development, .github/skills/ckeditor5-plugin-development and .opencode/skills/ckeditor5-plugin-development in your project.

What does Ckeditor5 Plugin Development need to run?

Going by SKILL.md and its folder, Ckeditor5 Plugin Development needs the command-line tools its instructions call (pnpm).

Does Ckeditor5 Plugin Development access the network?

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.

Is Ckeditor5 Plugin Development safe to install?

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.

What licence does Ckeditor5 Plugin Development use?

Ckeditor5 Plugin Development 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.

How many tokens does Ckeditor5 Plugin Development use?

About 4.8k tokens (SKILL.md is roughly 19k 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 34k tokens, read only when the agent opens those files.

What are the alternatives to Ckeditor5 Plugin Development?

Skills that share tags, products or a category with Ckeditor5 Plugin Development: Tutti Agent Workspace App (tutti-os/tutti, 3.8k stars), Openiap Workflows (hyodotdev/openiap, 154 stars), Wp Plugin Development (jorgerosal/wordpress-skills, 100 stars) and Wp Plugin Development (jorgerosal/wordpress-skills, 100 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Ckeditor5 Plugin Development?

TriliumNext (a GitHub organization) maintains it in TriliumNext/Trilium, which has 38,231 GitHub stars. The repository holds 22 skills in this directory. The repository was last updated on October 7, 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.