# Skill Authoring

> Author or update onscreen agent skills under ext/skills

- Skill: `agent0ai/skill-authoring` (Agent Skill)
- Install (CLI): `npx skillmds@latest add agent0ai/skill-authoring`
- Raw SKILL.md: https://api.skillmd.com/api/skills/agent0ai/skill-authoring/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: agent0ai (https://skillmd.com/u/agent0ai)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/agent0ai/skill-authoring

---


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.md` removed.

Examples:

- `mod/_core/skillset/ext/skills/browser-control/SKILL.md` -> `browser-control`
- `mod/_core/skillset/ext/skills/development/SKILL.md` -> `development`
- `mod/_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.when` may be `true` or a `{ tags: [...] }` condition; `metadata.when.tags` requires all listed tags before the skill becomes catalog-loadable.
- `metadata.placement` accepts `system`, `transient`, or `history`; ordinary skills default missing or invalid placement to `history`, but auto-loaded skills may not resolve to `history`, so missing or invalid placement and explicit `history` all fall back to `system` unless the skill explicitly sets `transient`.
- Only top-level `ext/skills/*/SKILL.md` skills can auto-load through prompt discovery. Nested skills stay explicit-load-only routing targets even if they define `metadata.loaded`.
- Auto-loaded skills appear after the catalog in the `auto loaded` prompt block when their effective placement is `system`, or in the transient channel when they explicitly set `metadata.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.
- `history` placement keeps the loaded skill body in ordinary execution-output history.
- `system` placement stores the loaded skill in the current chat's runtime system-skill registry and execution reports `skill loaded to system message`.
- `transient` placement stores the loaded skill in the current chat's runtime transient-skill registry and execution reports `skill loaded to transient area`.
- Auto-loaded skills cannot resolve to `history`; if they also set `metadata.loaded`, then `metadata.placement: history` is treated as `system`.
- A plain top-level `await space.skills.load("<path>")` is enough to apply the placement; use `return` only 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 `_all` skills 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-owned `metadata`.
- Framework bootstrap already exports exactly one runtime context: `data-runtime="browser"` in normal web sessions or `data-runtime="app"` in the packaged desktop runtime, plus the derived tag `runtime-browser` or `runtime-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.js` when code needs to read the current live `<x-context>` set directly; use `getTags(...)` 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 as `onscreen`, `admin`, `route:spaces`, or `space:open`.
- Use `metadata.when.tags` when the skill should exist only in those live contexts.
- Use `metadata.loaded` only when the skill should be auto-injected without an explicit `space.skills.load(...)` call.
- Use `metadata.placement: system` when the skill body is durable instruction, `metadata.placement: transient` when it should live in the mutable transient block, and let the default `history` placement 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 into `SKILL.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.md` file 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.md` in the same session.
- Do not let skill guidance drift away from the owning `AGENTS.md` files.
- For the development super-skill specifically, keep `/mod/_core/skillset/ext/skills/development/AGENTS.md` current whenever the framework, router, API, layer, or auth contracts it mirrors change.

