Use when migrating, restructuring, publishing, or auditing an existing Claude skill into a Tessl tile; converting flat .md files or SKILL.md bundles; fixing Tessl Quality, Impact, Uplift, frontmatter, metadata, tile.json summary, README, markdown reference links, registry-vs-local Quality gaps, artifact anchors, auto-eval wait discipline, or pushing tile scores from 88-99% to 100%.
100
100%
Does it follow best practices?
Impact
100%
1.11xAverage score across 4 eval scenarios
Advisory
Suggest reviewing before use
Move the source skill's body into the scaffolded SKILL.md. If the body exceeds the recommended size, split into references/ files.
Tessl's tessl skill review warns when SKILL.md exceeds ~5000 tokens (typically ~500 lines or ~20 KB of markdown). When triggered, the agent loading the skill pays the full content cost on every activation, even if it only needs one section.
Decide based on source size:
| Source body size | Strategy |
|---|---|
| < 5000 tokens (~20 KB) | Copy verbatim into the scaffolded SKILL.md |
| 5000-15000 tokens | Split into references/ files; keep SKILL.md as a slim entry point + phase index |
| > 15000 tokens | Same split, plus consider organizing references into thematic groups (one file per major section, plus cross-cutting refs like guardrails.md, decision-flowcharts.md, success-criteria.md) |
When splitting, the SKILL.md becomes a navigator. Target ~1500 tokens. It should contain:
This is the layout that the agentic-harness-architect tile used to drop front-loaded tokens from ~7500 to ~213.
Before first publish, the root SKILL.md must be a minimal executable
slice, not just a table of contents. Progressive disclosure keeps detail in
references, but registry Quality still judges whether the entrypoint itself is
actionable.
The root SKILL.md should satisfy all four Implementation dimensions without
opening a reference file:
| Dimension | Root SKILL.md requirement |
|---|---|
| Conciseness | Short purpose, compact phase map, no duplicated reference detail |
| Actionability | At least one copy-pasteable command block, concrete checklist, template, or first-action sequence |
| Workflow clarity | Ordered phases, triage branches, checkpoints, done/stop criteria |
| Progressive disclosure | Markdown links to deeper references, with enough anchors to choose the right one |
References may deepen execution, but they cannot be the only place executable
guidance lives. If every command, template, and concrete action is hidden in
references/, expect a Quality dock on Implementation/Actionability even when
lint and local review pass.
When you reference a file in SKILL.md from the slim-SKILL pattern, use real markdown links, not backticked paths:
| ❌ Backticked path | ✅ Markdown link |
|---|---|
references/foo.md | [foo.md](references/foo.md) or [Foo phase](references/foo.md) |
Why: Tessl's lint extracts the skill bundle's reachable files by parsing markdown links. Backticked paths get flagged as orphaned files ("Found N orphaned file(s) not linked from manifest entrypoints"). Orphans don't get installed when a user runs tessl install — they're effectively missing, even though they exist in the repo.
If the source skill already used backticked paths, rewrite each reference as a markdown link during migration.
If the source skill is already a folder with references/ and/or scripts/:
references/ into <tile-path>/skills/<tile-name>/references/ verbatim. Rewrite any references/foo.md mentions in SKILL.md as markdown links.scripts/ into <tile-path>/skills/<tile-name>/scripts/ verbatim. These already work as bundled executables.assets/ similarly if present.Do not move bundled resources up to the tile root — they must live under skills/<tile-name>/ to be reachable from SKILL.md via relative paths.
Each reference file should be self-contained enough to read solo. The agent reading a reference doesn't necessarily have SKILL.md's context. Start each reference with:
End with exit criteria if the reference describes a phase the agent should complete — explicit "this phase is done when X, Y, Z" statements help the agent know when to stop and move on.
tessl tile lint <tile-path>Watch for:
⚠ SKILL.md is approximately N tokens (recommended maximum: 5000) — exceeded budget, split further⚠ Found N orphaned file(s) — references not reachable via markdown links; fix the SKILL.md links✘ anything: stop and fix; Tessl won't publish an invalid tilePhase 3 is complete when:
SKILL.md contains the migrated content (slim entry point if split, full body if under 5K tokens)SKILL.md satisfies the Quality 100 entrypoint contract: concise, independently actionable, workflow-clear, and linked to deeper referencesSKILL.mdtessl tile lint shows 0 errors, 0 warnings (other than possibly token-cost info, which is fine)