From ctx
Create, improve, and test SKILL.md files to extend Claude Code with project-specific knowledge and reusable workflows.
npx claudepluginhub activememory/ctx --plugin ctxThis skill uses the workspace's default tool permissions.
Create or improve skills that extend the agent with
Guides creation, refinement, and best practices for Claude Code Skills including SKILL.md structure, router patterns, workflows, references, XML formatting, and progressive disclosure.
Guides development of Claude Code SKILL.md files with best practices, structure, YAML frontmatter rules, categories, patterns, references, and testing.
Guides creation of new Claude Code skills from scratch, listing existing user/project skills, samples, current directory, and providing metadata templates for descriptions/tags.
Share bugs, ideas, or general feedback.
Create or improve skills that extend the agent with project-specific knowledge the platform does not already provide.
The agent is already smart. Only add context it does not have. Tag each paragraph as Expert (agent does not know this: keep), Activation (agent knows but a brief reminder helps: keep if short), or Redundant (agent definitely knows: delete). Target: >70% Expert, <10% Redundant.
Description is the trigger. The description field in
frontmatter determines when a skill activates. All "when to
use" context belongs there, not in the body. Claude tends to
undertrigger: make descriptions a little "pushy" by listing
concrete situations and synonyms the user might say:
# Weak: too vague, will undertrigger
description: "Use when starting any conversation"
# Strong: specific triggers, covers synonyms
description: >-
Use after writing code, before commits, or when CI might
fail. Also use when the user says 'run checks', 'lint this',
or 'does this pass tests?'
Match freedom to fragility. Narrow bridge with cliffs needs guardrails (exact commands). Open field allows many routes (principles and heuristics).
Explain the why, not heavy-handed MUSTs. Today's LLMs are smart. They have good theory of mind and respond better to reasoning than rigid directives. If you find yourself writing ALWAYS or NEVER in all caps, reframe: explain why the thing matters so the model understands and generalizes, rather than memorizing a rule it might misapply.
Match communication to user skill level. Pay attention to context cues. Some users are experienced developers; others are new to terminals entirely. Briefly explain terms ("assertions: automated checks that verify the output") when in doubt.
| Section | Purpose |
|---|---|
| Frontmatter | Name, description (trigger), allowed-tools |
| Before X-ing | Pre-flight checks before execution |
| When to Use | Positive triggers |
| When NOT to Use | Negative triggers (prevent misuse) |
| Usage Examples | Invocation patterns |
| Process/Execution | What to do (commands, steps) |
| Good/Bad Examples | Show desired vs undesired output |
| Quality Checklist | Verify before reporting completion |
Not every skill needs all sections. Short skills (< 30 lines) can skip the checklist. Complex skills should have all of them.
skill-name/
├── SKILL.md (required: frontmatter + instructions)
├── scripts/ (optional: deterministic, reusable code)
├── references/ (optional: loaded into context on demand)
└── assets/ (optional: used in output, not loaded)
Skills use a three-level loading system:
Keep SKILL.md under 500 lines. If approaching that limit, move
detail to references/ with clear pointers about when to read
each file. For large reference files (>300 lines), include a
table of contents.
For multi-domain skills, organize by variant so the agent reads only the relevant reference:
cloud-deploy/
├── SKILL.md (workflow + selection logic)
└── references/
├── aws.md
├── gcp.md
└── azure.md
Read references/anthropic-best-practices.md from this skill's
directory before creating or evaluating a skill. It contains
condensed Anthropic prompting best practices covering clarity,
positive framing, examples, XML structure, and common pitfalls.
Provide structure when consistency matters:
After running checks, report:
1. **Result**: Pass or fail
2. **Failures**: What failed and how to fix
3. **Files touched**: List of modified files
Show input/output pairs when style matters. Good/bad pairs set boundaries without being prescriptive:
## Commit message format
**Example 1:**
Input: Added user authentication with JWT tokens
Output: feat(auth): implement JWT-based authentication
**Bad:** "Should pass now" (without running anything)
**Good:** ran `make audit` -> "All checks pass"
Sequential: overview the steps upfront:
1. Check formatting (`gofmt -l .`)
2. Run linter (`golangci-lint run`)
3. Run tests (`go test ./...`)
4. Report results
Conditional: guide through decision points:
1. Determine the change type:
**New feature?** -> Run full audit
**Docs only?** -> Skip checks
Start by understanding what the user wants. Two paths:
From conversation: The user says "turn this into a skill." Extract answers from the conversation history: the tools used, the sequence of steps, corrections made, input/output formats observed. Confirm your understanding before proceeding.
From scratch: Ask these questions:
Proactively ask about edge cases, dependencies, and success criteria before writing. Don't wait for the user to think of everything: come prepared with questions based on what you know about the domain.
Check for existing skills in .claude/skills/ to avoid
duplicates or find one to extend.
Write the skill following the anatomy above. As you write:
Propose 2-3 realistic test prompts: the kind of thing a real user would actually say. Share them: "Here are a few test cases I'd like to try. Do these look right, or do you want to add more?"
Run each test by spawning a subagent with the skill loaded. For new skills, also run a baseline (same prompt, no skill) so the user can compare. For skill improvements, baseline against the previous version.
Present the results. Let the user evaluate quality. Their feedback drives the next iteration. Empty feedback means "looks good."
Apply feedback, but think carefully about how:
Generalize from feedback. The skill will be used across many prompts. Don't overfit to test examples. If a fix only helps one test case, find the underlying principle and encode that instead.
Keep the prompt lean. Read the test transcripts, not just final outputs. If the skill is making the agent waste time on unproductive steps, remove those instructions.
Bundle repeated work. If all test runs independently
wrote similar helper scripts or took the same multi-step
approach, bundle that script into scripts/ and tell the
skill to use it. This saves every future invocation from
reinventing the wheel.
Explain the why. When adding a new instruction, include the reasoning. "Sort results by date because users typically want the most recent first" beats "ALWAYS sort by date."
Repeat steps 4-6 until:
After the skill content is stable, revisit the description field. A great skill with a vague description will never trigger. Consider:
If the skill should ship with ctx init, also create the
version in internal/assets/claude/skills/ so it deploys to
new projects.
Before finalizing a skill: