Use this skill when creating or updating skills for the onscreen chat agent.
Skill File Layout
- Onscreen chat-agent skills live inside browser modules under
mod/<author>/<repo>/ext/skills/.... - Repo-owned first-party shared onscreen skills should normally live under
app/L0/_all/mod/_core/skillset/ext/skills/.... - Module-specific skills that describe one module's private contracts may live under that owning module's
ext/skills/...tree. - Group-scoped or admin-only onscreen skills may live under readable customware roots such as
app/L0/_admin/mod/_core/<module>/ext/skills/.... - A skill file is always named
SKILL.md. - The skill id is the path relative to
ext/skills/with the trailing/SKILL.mdremoved.
Examples:
mod/_core/skillset/ext/skills/browser-control/SKILL.md->browser-controlmod/_core/skillset/ext/skills/development/SKILL.md->developmentmod/_core/skillset/ext/skills/development/modules-routing/SKILL.md->development/modules-routing
Catalog Rules
- The onscreen prompt catalog lists only top-level skills from
ext/skills/*/SKILL.md. - Nested skills are not listed by default.
- Both the catalog and explicit
space.skills.load(...)calls evaluate the current document's<x-context>tags before a skill is eligible. metadata.whenmay betrueor a{ tags: [...] }condition;metadata.when.tagsrequires all listed tags before the skill becomes catalog-loadable.metadata.placementacceptssystem,transient, orhistory; ordinary skills default missing or invalid placement tohistory, but auto-loaded skills may not resolve tohistory, so missing or invalid placement and explicithistoryall fall back tosystemunless the skill explicitly setstransient.- Only top-level
ext/skills/*/SKILL.mdskills can auto-load through prompt discovery. Nested skills stay explicit-load-only routing targets even if they definemetadata.loaded. - Auto-loaded skills appear after the catalog in the
auto loadedprompt block when their effective placement issystem, or in the transient channel when they explicitly setmetadata.placement: transient. - Routing skills should tell the agent which deeper skill ids to load next.
space.skills.load("<path>")loads the full skill file on demand and applies the same placement rule.historyplacement keeps the loaded skill body in ordinary execution-output history.systemplacement stores the loaded skill in the current chat's runtime system-skill registry and execution reportsskill loaded to system message.transientplacement stores the loaded skill in the current chat's runtime transient-skill registry and execution reportsskill loaded to transient area.- Auto-loaded skills cannot resolve to
history; if they also setmetadata.loaded, thenmetadata.placement: historyis treated assystem. - A plain top-level
await space.skills.load("<path>")is enough to apply the placement; usereturnonly if you also want the execution result value explicitly.
Conflict Rules
- Skill ids must be unique across readable mods.
- If a skill is visible only to a narrower audience, still give it a top-level id that will not collide with shared
_allskills that those users can also read. - Conflicting ids are omitted from the catalog.
- Loading a conflicting id fails with an ambiguity error.
Skill Content Rules
- Start with frontmatter containing
name,description, and optional runtime-ownedmetadata. - Framework bootstrap already exports exactly one runtime context:
data-runtime="browser"in normal web sessions ordata-runtime="app"in the packaged desktop runtime, plus the derived tagruntime-browserorruntime-app; packaged app routes derive that from the desktop bridge before falling back to launcher runtime info or frontend config. - Import
/mod/_core/framework/js/context.jswhen code needs to read the current live<x-context>set directly; usegetTags(...)for tag collection,getAttributeValues("data-runtime", ...)for raw runtime reads, and the other helpers for broader context inspection. - Use
<x-context>tags in mounted DOM when a module needs to expose additional live skill-filter state such asonscreen,admin,route:spaces, orspace:open. - Use
metadata.when.tagswhen the skill should exist only in those live contexts. - Use
metadata.loadedonly when the skill should be auto-injected without an explicitspace.skills.load(...)call. - Use
metadata.placement: systemwhen the skill body is durable instruction,metadata.placement: transientwhen it should live in the mutable transient block, and let the defaulthistoryplacement stand only for ordinary non-auto-loaded skills that should behave like normal conversation context. - Prompt-facing skill text is token-budgeted. Keep wording terse, avoid unnecessary markdown or filler, and measure before or after changes with the local tokenizer when you edit auto-loaded or catalog-facing skill text.
- When a skill needs reusable browser logic, prefer a small JS helper stored inside that skill's own folder and imported from a stable
/mod/<author>/<repo>/ext/skills/...path instead of pasting a long inline script intoSKILL.md. - Keep the top-level router skill directive and concise.
- Keep nested skills focused on one stable area.
- Prefer exact file paths, runtime names, and examples over vague guidance.
- If a skill subtree becomes complex, add an
AGENTS.mdfile inside that subtree and keep it current.
Maintenance Rules
- When a mirrored source contract changes, update the affected skill files in the same session.
- When a stable feature or workflow changes, update the relevant docs under
/mod/_core/documentation/docs/and the documentation skill at/mod/_core/documentation/ext/skills/documentation/SKILL.mdin the same session. - Do not let skill guidance drift away from the owning
AGENTS.mdfiles. - For the development super-skill specifically, keep
/mod/_core/skillset/ext/skills/development/AGENTS.mdcurrent whenever the framework, router, API, layer, or auth contracts it mirrors change.