skills/designing-skills/SKILL.md
Guides the design and structuring of AI agent skills for the SCT repository with multi-step phases, progressive disclosure, and dual-platform compatibility (GitHub Copilot and Claude Code). Use when creating new skills, reviewing existing skills, restructuring AI guidance into modular skill directories, editing SKILL.md files, or improving agent instructions.
npx skillsauth add scylladb/scylla-cluster-tests designing-skillsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Build modular, task-specific AI agent skills that work across both GitHub Copilot and Claude Code.
Interview first, write second.
Before drafting any skill files, gather concrete information about the task domain:
This front-loads the hardest design decisions. A skill written without intent capture produces generic guidance that doesn't match real usage patterns.
The description field controls when Claude Code activates the skill.
Claude decides whether to load a skill based solely on its frontmatter description. The body of SKILL.md — including "When to Use" and "When NOT to Use" sections — is only read AFTER the skill is already active. Put trigger keywords, use cases, and exclusions in the description. A bad description means wrong activations or missed activations regardless of what the body says.
GitHub Copilot discovers skills through explicit references in AGENTS.md — the description field still helps Copilot agents understand the skill's purpose.
Description constraints:
<, >) — they break YAML parsing in some toolsWrite trigger eval queries and verify activation.
A description you haven't tested is a description that doesn't work. For every skill, write 5-10 test queries:
Read the description in isolation (without the skill body) and ask: would each query activate this skill correctly? If not, revise the description before writing the rest of the skill.
Every instruction must explain WHY, not just WHAT.
LLMs follow instructions better when they understand the reasoning. "Use numbered phases" is weaker than "Use numbered phases because unnumbered prose produces unreliable execution order." The WHY gives the LLM judgment to handle cases the instruction didn't explicitly cover.
Phases must be numbered with entry and exit criteria.
Unnumbered prose instructions produce unreliable execution order. Every phase needs:
Progressive disclosure is structural, not optional.
SKILL.md stays under 500 lines. It contains only what the LLM needs for every invocation: principles, routing, quick references, and links. Detailed patterns go in references/. Step-by-step processes go in workflows/. One level deep — no reference chains.
Skills must work for both GitHub Copilot and Claude Code.
Skills live in a common skills/ directory at the repository root. Discovery mechanisms differ by platform:
AGENTS.md references and .github/skills/ symlink. Skills are listed in the "Skills" section of root AGENTS.md.@skills/<name>/SKILL.md in CLAUDE.md and .claude/skills/ symlink. Frontmatter description triggers automatic activation.Skill content must be platform-agnostic — no Claude-only or Copilot-only instructions in the skill body.
Skills must follow SCT repository conventions.
All skills should be consistent with conventions in AGENTS.md and .github/copilot-instructions.md:
unit_tests/, use @pytest.fixture and @pytest.mark.parametrizeuv run sct.py unit-tests, uv run sct.py pre-commitsdcm/sct_config.py, test-cases/, defaults/Remove instructions that don't improve outcomes.
After testing a skill, review every instruction. If removing an instruction doesn't degrade the output quality, delete it. Bloated skills dilute LLM attention — every line competes for context. Prefer 10 precise instructions over 30 vague ones.
skills/AGENTS.md or .github/copilot-instructions.md without creating a skillThe full process is in create-a-skill.md. Summary:
references/, step-by-step processes to workflows/AGENTS.md table and CLAUDE.md importstessl skill review, run unit tests (test_skills_structure.py), verify all links resolveEvery skill follows this structure:
skills/
└── <skill-name>/ # kebab-case directory name
├── SKILL.md # Main skill definition with YAML frontmatter
├── references/ # Deep-dive reference documents
│ ├── <topic>.md # Detailed guidance on a specific topic
│ └── ...
└── workflows/ # Step-by-step processes
├── <process>.md # Numbered phases with entry/exit criteria
└── ...
---
name: <skill-name>
description: >-
<Third-person description with trigger keywords.
Use when <specific scenarios>. Applies to <specific domains>.>
---
# <Skill Title>
<One-line purpose statement.>
## Essential Principles
<3-5 non-negotiable rules, each explaining WHY>
## When to Use
<4-6 specific scenarios>
## When NOT to Use
<3-5 scenarios naming alternatives>
## <Domain-Specific Sections>
<Quick references, routing tables, decision trees>
## Reference Index
<Links to all supporting files in references/ and workflows/>
## Success Criteria
<Checklist for output validation>
When adding a new skill, the skill is automatically discoverable via symlinks:
.github/skills → skills/ (Copilot native discovery).claude/skills → skills/ (Claude Code native discovery)Additionally, update both platform reference files:
Add an entry to the "Skills" section in AGENTS.md:
## Skills
| Skill | Description | Path |
|-------|-------------|------|
| designing-skills | Meta-skill for creating new AI agent skills | `skills/designing-skills/SKILL.md` |
| <new-skill> | <description> | `skills/<new-skill>/SKILL.md` |
Add an import to CLAUDE.md:
@skills/<new-skill>/SKILL.md
The most common mistakes. Full catalog in anti-patterns.md.
| ID | Anti-Pattern | One-Line Fix |
|----|-------------|-------------|
| AP-1 | Vague description / missing scope | Add trigger keywords to description; add When to Use / When NOT to Use |
| AP-2 | Monolithic SKILL.md (>500 lines) | Split into references/ and workflows/ |
| AP-3 | Reference chains (A → B → C) | All files one hop from SKILL.md |
| AP-4 | Unnumbered phases | Number every phase with entry/exit criteria |
| AP-5 | Missing exit criteria | Define what "done" means for every phase |
| AP-6 | No verification step | Add validation at the end of every workflow |
| AP-7 | Broken file references | Verify every path resolves before submitting |
| AP-8 | Platform-specific content in skill body | Keep skill content platform-agnostic |
| AP-9 | Missing discovery configuration | Update both AGENTS.md and CLAUDE.md |
| AP-10 | No concrete examples | Show input → output for key instructions |
| AP-11 | Description summarizes workflow | Description = triggering conditions only, not workflow steps |
| AP-12 | SCT convention violations in examples | Verify examples use pytest, Google docstrings, silence, no inline imports |
| AP-13 | Reference dump instead of guidance | Teach decision criteria, not raw documentation |
| AP-14 | No trigger test queries | Write 5-10 should-trigger and should-NOT-trigger queries |
| AP-15 | Description exceeds constraints | Max 1024 chars, no angle brackets, third-person voice |
| AP-16 | No intent capture | Interview the user for example prompts and expected outputs before writing |
| AP-17 | Instructions without reasoning | Every rule must explain WHY, not just WHAT |
| File | Content | |------|---------| | skill-structure.md | SCT-specific skill structure with file organization and frontmatter rules | | anti-patterns.md | Common mistakes when creating skills with before/after fixes |
| Workflow | Purpose | |----------|---------| | create-a-skill.md | 6-phase process for creating a new skill from scratch | | test-and-iterate.md | Test trigger accuracy and iteratively improve a skill |
A well-designed SCT skill:
name and description fieldsAGENTS.md (Copilot) and CLAUDE.md (Claude Code)AGENTS.mddevelopment
Guides writing and debugging unit tests for the SCT framework using pytest conventions. Use when creating new test files in unit_tests/, adding test cases, mocking external services, setting up fixtures, or reviewing test coverage. Covers network-blocking patterns, FakeRemoter, moto for AWS mocking, monkeypatch, and common pitfalls.
development
Use when asked to generate an implementation plan, draft a plan, save a plan, or design a feature rollout for the SCT repository. Supports two formats: full 7-section plans for multi-phase work (1K+ LOC, tracked in MASTER.md) and lightweight mini-plans for single-PR changes (under 1K LOC, stored in docs/plans/mini-plans/). Routes automatically based on PR plans label, user input, or task size estimate.
development
Guides writing new nemesis (chaos engineering disruptions) for the SCT framework. Use when creating a new NemesisBaseClass subclass, adding disruption logic, setting nemesis flags, or configuring target node pools. Covers the sdcm/nemesis/ package structure, auto-discovery, flag filtering, CI configuration, and unit testing patterns.
development
Guides writing and debugging integration tests for the SCT framework that interact with real external services. Use when creating tests requiring Docker, AWS, GCE, Azure, OCI, or Kubernetes backends. Covers service labeling, credential skip patterns, Docker Scylla fixtures, resource cleanup, and common pitfalls.