Skills are the most extensible surface in ECC. Any pattern you find yourself repeating — a deployment checklist, a domain-specific review workflow, a team coding convention — can be encoded as a skill and shared across every session, every project, and every team member. This page covers how skills are structured, the placement policy that governs where they live, how to create and test them, and how to contribute them back to the library.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/affaan-m/ECC/llms.txt
Use this file to discover all available pages before exploring further.
What Is a Skill?
A skill is a knowledge module that the harness loads based on context. It provides domain expertise, workflow definitions, reference material, and code patterns that the model applies when the task matches. Unlike rules (always active) or agents (explicitly delegated), skills are passive knowledge loaded on demand. The key distinction:| Component | Purpose | When it activates |
|---|---|---|
| Skill | Knowledge repository | Context-based (automatic or named) |
| Agent | Task executor | Explicit delegation |
| Command | User-triggered action | User runs /command |
| Hook | Event automation | Tool-use lifecycle events |
| Rule | Persistent constraint | Always active |
Skill Architecture
Single-file skill
The simplest form: a single.md file dropped into the skills directory.
Multi-file skill
A directory with aSKILL.md at its root plus optional supporting files:
SKILL.md structure
EverySKILL.md begins with YAML frontmatter:
| Field | Required | Description |
|---|---|---|
name | Yes | Lowercase, hyphenated identifier — e.g. react-hook-patterns |
description | Yes | One sentence. Used for auto-activation matching and npx ecc catalog display |
origin | No | Source identifier: ECC, community, or your project name |
tags | No | Array of tags for categorisation |
version | No | Version string for tracking updates |
argument-hint | No | Hint shown when invoking the skill with an argument, e.g. <path/to/*.plan.md> |
Creating Your First Skill
Choose a focused scope
Good skills are specific and actionable. One skill equals one domain or workflow.
If you find yourself writing “and also…” in the skill title, split it into two skills.
| Good scope | Too broad |
|---|---|
react-hook-patterns | react |
postgresql-indexing | databases |
pytest-fixtures | python-testing |
nextjs-app-router | nextjs |
Add actionable content
The most important principle: show, don’t tell.Every claim should be backed by a copy-pasteable example. Every pattern should have a corresponding anti-pattern. Every workflow should include a verification checklist.Guidelines:
- Length: 200–500 lines typical; 800 lines maximum
- Code blocks: always include a language identifier (
```typescript,```python, etc.) - Headers: use
##and###hierarchy — no#after the title - Lists:
-for unordered,1.for ordered steps - Tables: for comparisons, reference matrices, and checklists
When to Activate section is critical for auto-activation. Be specific — list the concrete scenarios in which the model should pull this skill.Test locally
Copy the skill to your skills directory and test it in a Claude Code session:In your harness session, ask about the skill’s domain and verify the model is referencing your patterns, examples, and guidelines.Validation checklist before submitting:
- YAML frontmatter is valid (no syntax errors)
-
namefollowslowercase-with-hyphensconvention -
descriptionclearly states when to use the skill - All code examples compile and run
- No sensitive data (API keys, tokens, personal paths)
-
Related Skillsreferences exist -
When to Activatesection is specific
Skill Placement Policy
ECC has four types of skills with distinct placement rules:Curated skills — shipped with ECC
Curated skills — shipped with ECC
Location:
Installed by:
Provenance:
skills/<skill-name>/ in the ECC repositoryInstalled by:
npx ecc install manifestsProvenance:
origin field in SKILL.md frontmatter (no .provenance.json required)These are the skills you contribute via pull request. They are validated by scripts/ci/validate-skills.js and must have a non-empty SKILL.md.Learned skills — generated by continuous-learning
Learned skills — generated by continuous-learning
Location:
Created by:
Required:
~/.claude/skills/learned/<skill-name>/Created by:
continuous-learning and continuous-learning-v2 at session endRequired:
.provenance.json sibling to SKILL.mdNever committed to the repo. Loaded at runtime when the directory exists.Imported skills — from external sources
Imported skills — from external sources
Location:
Created by: manual copy or future importer tooling
Required:
~/.claude/skills/imported/<skill-name>/Created by: manual copy or future importer tooling
Required:
.provenance.json sibling to SKILL.mdSkills from community repos, personal configs, or team-internal libraries that you don’t want to ship in the ECC repo.Evolved skills — from instinct clustering
Evolved skills — from instinct clustering
Location:
Created by:
~/.claude/homunculus/evolved/skills/ (global) or ~/.claude/homunculus/projects/<hash>/evolved/skills/ (per-project)Created by:
instinct-cli evolveGenerated by clustering instincts into higher-level skills. Provenance is inherited from source instincts; no separate .provenance.json required.Only curated skills (in
skills/ in the repo) appear in install manifests and are copied during npx ecc install. Learned, imported, and evolved skills live exclusively in the user’s home directory and are never shipped.Skill Naming Conventions
From the skill placement policy: Keep the original name when:- The contribution is close to a direct port from an upstream source
- The name is descriptive and neutral (e.g.
nestjs-patterns,fastapi-patterns) - The surface still behaves like the upstream concept
- ECC meaningfully expands or repackages the original work
- The original name is vendor-forward rather than workflow-forward
- The contribution overlaps an existing ECC surface and needs a clearer boundary
- Keep
nestjs-patterns(framework name, neutral, workflow-forward) - Rename a broad planning import to
product-capabilityorlead-intelligenceif ECC restructured the scope - Prefer
social-graph-rankerover an upstream-branded name for a graph primitive
Skill vs. Other Surfaces
Before creating a skill, verify it’s the right surface:| Use a skill when… | Use something else when… |
|---|---|
| It’s reusable domain knowledge | It’s a one-time project setup → use a rule |
| It activates by context | It’s always active → use a rule |
| It defines a workflow | It’s a single user action → use a command |
| It provides patterns | It executes a task autonomously → use an agent |
| It’s on-demand reference | It fires on tool-use events → use a hook |
Skill Adaptation Policy
When adapting an existing skill from another open-source repo or personal config:- Copy the idea, not the branding. Adapt to ECC’s install surfaces and conventions.
- Remove external runtime assumptions. ECC is harness-native; don’t encode assumptions about a specific third-party runtime.
- Ask the review questions:
- Is this a real reusable surface in ECC, or documentation for another tool?
- Does the name match the ECC-shaped surface?
- Is there already an ECC skill that owns most of this behaviour?
- Would an ECC user understand this skill without knowing the upstream repo?
SKILL.md Template
Here is a complete template covering all major sections:Contributing a Skill to ECC
Skill Evolution via Continuous Learning
ECC’scontinuous-learning-v2 skill automatically extracts patterns from your sessions and writes them as learned skills to ~/.claude/skills/learned/. Over time, patterns that prove consistently useful can be promoted:
- Review learned skills periodically with
/skill-stocktake - Identify patterns that have become stable and generalisable
- Promote them to curated skills by moving and cleaning them up for the ECC repo
- Submit a PR following the contribution workflow above