Explain Claude Code features, capabilities, and tools. Use for questions like "how do skills work?", "what can you do?", "what's the difference between X and Y?", "should I use a skill or slash command?". Also handles recording observations about undocumented behaviors. Invoke with /self-documentation or ask naturally.
Install with Tessl CLI
npx tessl i github:ddehart/claude-code-plugins --skill self-documentationOverall
score
18%
Does it follow best practices?
If you maintain this skill, you can automatically optimize it using the tessl CLI to improve its score:
npx tessl skill review --optimize ./path/to/skillValidation for skill structure
Enable Claude Code to explain its own features, guide capability decisions, and track undocumented observations discovered through usage.
This skill activates for:
The skill uses thematic reference files for token-efficient progressive disclosure:
| File | Content |
|---|---|
topic-index.md | Keyword-to-file mapping (load first) |
decision-guide.md | Feature comparisons and decision trees |
core-features.md | Skills, agents, MCP, plugins, hooks, slash commands |
configuration.md | Settings, permissions, CLAUDE.md, sandboxing |
integrations.md | VS Code, IDE extensions, plugin marketplace |
workflows.md | Keyboard shortcuts, checkpointing, git automation |
undocumented.md | Features from release notes without official docs |
sdk-behavioral-bridges.md | Behavioral constraints from Agent SDK docs |
best-practices.md | Meta-guidance: effective usage, failure patterns, prompt crafting |
Read references/topic-index.md to identify which reference file(s) contain relevant information.
Match the user's question keywords to the topic index. For cross-theme questions (e.g., "How do skills work with MCP servers?"), identify multiple relevant files.
Read the identified reference file(s). Only load what's needed - avoid loading all files.
If the reference file includes a documentation URL and more detail is needed:
For behavioral constraints: Check sdk-behavioral-bridges.md for authoritative information from the Agent SDK docs (e.g., tool limitations, permission flow, subagent constraints).
Provide a conversational response that:
If WebFetch revealed new information, update the reference file's "Key concepts" section with today's date.
For questions about choosing between features ("Should I use X or Y?"):
references/decision-guide.mdResponse pattern:
"For your use case, I recommend [specific choice]. Here's why:
[Reasoning based on user's context]
Next step: [Concrete action to take]"
When a user discovers undocumented behavior (e.g., "I found that AskUserQuestion can't be delegated to subagents"):
Verify this is a new observation worth recording:
Before creating an issue, check if this observation already exists:
List existing observations:
python3 "${CLAUDE_PLUGIN_ROOT}/skills/self-documentation/scripts/observations.py" listSearch the output for similar observations by description keywords or feature_area
If empty output: This is the first observation - proceed to Step 3.
If a similar observation exists:
If no duplicate found: Proceed to Step 3.
Ask the user:
"This seems like a valuable observation. Would you like me to create a GitHub issue in the plugin repo to track it?"
Wait for user confirmation.
Use gh CLI to create an issue in ddehart/claude-code-plugins:
gh issue create --repo ddehart/claude-code-plugins \
--title "[Observation] <brief description>" \
--body "<formatted body>" \
--label "observation"Issue format:
## Observation
<description of the behavior>
## Reproduction Context
- Discovered: <date>
- Context: <what the user was trying to do>
- Version: <Claude Code version if known>
## Related
- Feature area: <e.g., tools, subagents, skills>If gh is unavailable or authentication fails:
"I couldn't create the issue automatically. Here's the formatted content you can paste into a new issue at: https://github.com/ddehart/claude-code-plugins/issues/new"
After issue creation (or if user declined), save the observation locally using the helper script:
python3 "${CLAUDE_PLUGIN_ROOT}/skills/self-documentation/scripts/observations.py" add \
--description "The observed behavior" \
--feature-area "tools" \
--context "How it was discovered" \
--issue-url "https://github.com/..." # if issue was createdThe script handles:
~/.local/share/claude-plugins/self-documentation/)Observations are stored in $XDG_DATA_HOME/claude-plugins/self-documentation/observations.json (defaults to ~/.local/share/...):
{
"version": 1,
"observations": [
{
"id": "obs-20260111-001",
"description": "...",
"context": "...",
"discovered": "YYYY-MM-DD",
"feature_area": "tools|skills|agents|mcp|config|other",
"issue_url": "https://github.com/...",
"status": "new|submitted"
}
],
"last_updated": "YYYY-MM-DD"
}When referencing stored observations (e.g., to help answer a question):
List observations:
python3 "${CLAUDE_PLUGIN_ROOT}/skills/self-documentation/scripts/observations.py" listFor each relevant observation, check if it's now documented:
If now documented → remove it:
python3 "${CLAUDE_PLUGIN_ROOT}/skills/self-documentation/scripts/observations.py" remove <obs-id>Inform user: "Observation [id] is now documented. Removing from local cache."
| Scenario | Action |
|---|---|
| Reference file not found | Fall back to topic-index, report which file is missing |
| WebFetch fails | Use cached key concepts from reference file |
| gh CLI unavailable | Provide formatted issue for manual creation |
| Cross-theme question unclear | Load topic-index, ask user to clarify if needed |
| Similar observation exists | Use observations.py list to check, inform user, ask if they want to add anyway |
Issues and PRs go to: ddehart/claude-code-plugins
This skill is part of the meta-claude plugin in that marketplace.
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.