Host-Aware Frontmatter Contract¶
BaseCoat authoring contract v1.0 is maintained in the distributed instruction
instructions/basecoat-10-core-host-frontmatter.instructions.md. Its version
is independent of the BaseCoat library and individual asset versions.
Boundaries¶
| Concern | Contract |
|---|---|
| Agent tools | Optional native tools; omitted/all and empty/none are distinct; legacy agent allowed-tools does not override it |
| Skill tools | Native allowed-tools is an experimental string; BaseCoat's list is source metadata, not proven host restriction |
| Skill compatibility | BaseCoat uses a canonical host list; native Agent Skills uses an optional environment string; neither is a dependency list |
| Dependencies | Body references and BaseCoat allowed_skills policy; no implied native catalog filtering |
| Visibility | Discovery/classification, never authorization or access control |
| Naming | Bare filename or prefixed short-name suffix; skill name matches directory |
| Examples | Lifecycle skeleton has allowed_skills: [] and an empty Allowed Skills body |
Evidence and Migration¶
GitHub documents agent tool defaults and aliases in its configuration reference. The Agent Skills specification defines the portable fields below. Checked 2026-10-07; these are documented host contracts, not measured loader results for every installed version.
Keep existing source assets, model assignments, and names. Convert only at a supported host projection boundary. Before asserting enforcement, record host/version, exact projected file, available tools, positive/negative invocations, and failure behavior. Unsupported required restrictions must fail closed in the adapter; this documentation installs no adapter.
Portable Agent Skills Format¶
The specification applies to SKILL.md, not .agent.md host profiles. A skill
directory contains YAML frontmatter and a Markdown body in SKILL.md; companion
directories are optional. BaseCoat source requirements are a separate profile,
not additional requirements imposed by the portable specification.
| Field | Portable contract |
|---|---|
name |
Required string, 1-64 characters; only lowercase ASCII letters (a-z), digits (0-9) and single hyphens; no leading, trailing or consecutive hyphen; matches the directory name |
description |
Required non-empty string, 1-1024 characters; should explain what the skill does and when to use it |
license |
Optional string naming a license or referencing a bundled license file |
compatibility |
Optional string, 1-500 characters when present; describes environment requirements, not a host-selector list |
metadata |
Optional map of string keys to string values; nested policy objects and lists are not portable metadata values |
allowed-tools |
Optional, experimental space-separated string; support and enforcement vary by host |
Omission of optional fields is not a portable-format violation. Conversely, passing BaseCoat source checks does not validate native field types or prove that a host enforces tool policy. Preserve rich source metadata and perform any conversion at an explicit export boundary; do not delete source contracts or stringify policy objects merely to produce superficially valid YAML.
Current Alignment and Open Gaps¶
Inventory baseline: ea407f976502617f8b85f592338e740be28c9b7a, reviewed
2026-10-07. A YAML-based scan of all 143 source skills found valid required
names, directory matches and description lengths; every SKILL.md is below
500 lines. This scan is not a full reference-library validation or a measured
host activation test.
Of those source files, 142 use compatibility lists, 142 use allowed-tools lists, and all 143 contain nonstring metadata values. These are BaseCoat source extensions, not strict portable field shapes. Current installation and sync copy source assets; projection alone does not prove portable conversion. Do not describe the source catalog as fully portable or its policy as universally enforced.
| Gap | Follow-up |
|---|---|
| Portable export and host verification, preserving source contracts and companion files | #3654 |
| Validator conflates skill/agent schemas, treats optional fields as specification expectations and uses incomplete name extraction | #3655 |
Legacy fix-skill-frontmatter.ps1 classified supported fields as unsupported and could remove source contracts with -Fix; retired to a non-mutating guard |
#3656 |
The legacy cleanup helper is retired. Without flags it prints a deprecation
notice and reads or writes no files; -Fix is refused with exit code 2 before
any file access. Callers relying on -Fix must handle that failure explicitly
and must not treat it as a completed migration. These
follow-ups do not approve an asset migration or install an enforcement adapter.
Authoring and Evaluation Guidance¶
Keep a skill a coherent, task-grounded unit. Its description should include realistic trigger language and distinguish neighboring skills, not just list generic verbs. Load resources conditionally instead of repeating material the model already knows.
The specification recommends progressive disclosure: name/description in the
catalog, the body on activation, and companion resources only when needed.
Keep SKILL.md below 500 lines and its instructions below approximately 5,000
tokens where practical. These are authoring recommendations, not universal
hard schema limits. Use relative references from the skill root, keep links
shallow and verify them in the installed package. scripts, references and
assets are conventional directories, not the only permitted directory names.
Document script prerequisites, pinned dependencies where applicable, inputs, outputs and meaningful failure behavior. Compatibility text does not install dependencies or establish credentials, entitlement or network access.
Evaluate activation separately from execution. Include realistic paraphrases
and near-miss negatives for description tests; use fresh contexts and compare
with/without the skill or old/new versions for output tests. Record assertions,
failures, timing and token use, then refine from execution traces. The upstream
evals/evals.json examples do not invalidate BaseCoat's existing eval.yaml
coverage or require replacing its format.
For a portable export, validate the emitted artifact with the reference
library's skills-ref validate <skill-directory> as well as relevant BaseCoat
checks. Record the reference-tool version. Then verify discovery, activation,
relative resources and required restrictions on the target host/version;
source lint and reference validation are not substitutes for loader evidence.
.agents/skills is a widely adopted cross-client discovery location, not a
directory mandated by the portable specification. Preserve host-specific
locations and explicitly test precedence and project trust.
Before an exporter exists, preview the field projection for explicitly named
source skills with
pwsh scripts/preview-portable-skill-export.ps1 -Skill <name>[,<name>...].
It validates the source profile, projects only name and description,
re-validates the projection with the portable profile, proves the Markdown body
bytes are unchanged and lists each omitted source field with its reason. It
writes no files and reports companions as not-evaluated, reference
validation as not-run and the host as unverified; a projectable result is
not a published or supported export (#3654).
Upstream References¶
- Specification
- Authoring best practices
- Evaluating skills
- Optimizing descriptions
- Using scripts
- Client integration
- Documentation index
Tracking: #3336; parent: #3324; standards review: #3653.