NAVIGATION
ELOWEN DOCUMENTATION

Last updated: 10 October 2026

Browse documentation · skills implementation
Developer reference

skills implementation

Skill files and catalog ownership

The implementation keeps these boundaries in lib/skillFiles.mjs: personal ownership and canonical paths, name collisions, frontmatter parsing, content versions, revision checks and writes. lib/skillRoutes.mjs and lib/skillTools.mjs use that same owner, as does the store given to lib/reviewer.mjs. lib/skillLoadTool.mjs resolves the current host catalog and pages skill instructions; its argument parsing and placeholder substitution are private. lib/skillInput.mjs expands explicit invocations against the same grant-filtered catalog. index.mjs registers contributions and replaces the complete skill set through the host reload control. The reviewer uses elowen-plugin-shared/atomicJson for strict JSON reads and compact atomic counter writes, with no additional model calls or per-load disk scan.

Management and invocation contracts

Skills management resolves personal CreateSkill and DeleteSkill targets through currentAccountUserId, including an inherited delegated contribution account. An unlinked turn has no personal target. Instance creation remains instance-owner-only; instance deletion remains admin-session-only. Personal management is used by delegated runs that save reusable procedures.

SkillLoad and explicit /skill:name invocation read the current visible catalog entry through one file reader. The file must remain inside its registered canonical directory; a local personal directory must also remain inside that account's own skills store. Missing or redirected files are refused. SkillLoad retains full-source paging and argument substitution; explicit invocation supplies the markdown body and trailing user arguments. No second catalog or cached body is introduced, and the existing visibleSkills host control remains available to installed consumers.

PATCH and ownership transfer prepare revisions and partial edits through one file owner before writing or renaming. A supplied expectedRevision must be a non-negative integer matching the current file, including for transfers without an edit. A stale revision returns HTTP 409 with error only. An edited transfer preserves unknown frontmatter and support files and attempts to restore the original location if its destination write fails. Reload remains caller-owned. The Skills settings editor is the consumer of transfer-with-edit.

GET /plugins/skills/list exposes catalogSource and effective as the sole scope and invocation-state fields; scope and active are removed. The web and CLI pickers consume those canonical fields. The Skills bundle requires host UI API 55 and uses api(path, { method, json: payload }) and utils.interpolate(text, values), while explicit invocation uses elowen-plugin-shared/xml. With no explicit invocation, input remains unchanged. A denied or missing skill produces the existing unavailable-skill result. XML attributes escape entities and both quotes and replace forbidden C0 characters; skill body text is not XML-escaped.