---
title: "§5 Skill"
description: "Normative requirements for HARNESS.md: presence, content constraints, the copy on activate, and drift with the manifest."
canonical: https://harnesscontextprotocol.io/docs/specification/skill
---

# §5 Skill

> Normative requirements for HARNESS.md: presence, content constraints, the copy on activate, and drift with the manifest.

The Skill is `HARNESS.md` at the pack root.

## 5.1 Presence

1. A pack MUST contain `HARNESS.md`. Runtimes MUST fail lint otherwise
   (`missing_harness`).
2. `HARNESS.md` MUST be UTF-8 Markdown.
3. The manifest field `harness` (inline Skill text) is deprecated. When both are
   present, `HARNESS.md` takes precedence.

## 5.2 Content

1. The Skill MUST NOT contain credential material of any kind, including
   placeholders formatted as credentials.
2. The Skill MUST NOT contain host-absolute filesystem paths as normative steps.
3. The Skill MUST NOT present an MCP tool list as the way to invoke the pack.
4. Every command the Skill teaches MUST be a `verb_key` declared in the manifest.
5. The Skill MUST NOT describe triggers the manifest does not declare.
6. The Skill SHOULD fit on one screen and SHOULD follow this order: title, lead,
   hot-path table, examples, setup (if Binding is not `public`), anti-patterns,
   pointers.
7. The title SHOULD be `# HCP — <Name>`.
8. Examples SHOULD use the CLI face with `--json` and SHOULD show `--confirm` /
   `--apply` on gated writes.

## 5.3 Lead

1. The **lead** is the text between the title and the first `##` heading.
2. Runtimes and hosts MAY truncate the lead for stable context. The reference
   default is 480 characters.
3. Authors SHOULD write the lead so that, truncated, it still states what the
   pack does, whether it needs login, and the first command to run.

## 5.4 Copy on activate

1. On activate, a runtime SHOULD copy `HARNESS.md` to a Skill location hosts
   discover. The reference location is `$HCP_HOME/skills/<pack_id>/SKILL.md`.
2. The copy MUST be byte-identical to `HARNESS.md` or a faithful rendering; a
   runtime MUST NOT inject credentials, host paths, or policy into it.
3. Host adoption (`hcp adopt`) MAY copy the Skill again into a host-specific
   location.

## 5.5 Drift

*Informative.* Skill ↔ manifest ↔ Policy drift is a lint concern under the
four-faces rule (§12.4). Runtimes SHOULD warn when a Skill's hot-path table names
a command the manifest lacks or omits one it declares.

## 5.6 Relationship to Agent Skills

*Informative.* `HARNESS.md` follows the Agent Skills principles of progressive
disclosure, examples, and anti-patterns. It is intentionally scoped to invocation.
When copied to `SKILL.md` it is a valid Agent Skill body; frontmatter, if a host
requires it, is added by the runtime at copy time from manifest fields.

## Sitemap

- [Documentation](https://harnesscontextprotocol.io/docs)
- [Packs](https://harnesscontextprotocol.io/packs)
- [Glossary](https://harnesscontextprotocol.io/docs/reference/glossary)
- [llms.txt](https://harnesscontextprotocol.io/llms.txt)
- [llms-full.txt](https://harnesscontextprotocol.io/llms-full.txt)
- [OpenAPI](https://harnesscontextprotocol.io/openapi.json)
- [MCP](https://harnesscontextprotocol.io/mcp)
