| name | share-skill |
| description | Automatically share skills, migrate local skills to code repositories, open source skills, skill version management, configure git remote |
Share Skill
Migrate user's locally created temporary skills to a project repository via symlinks, and initialize Git for version tracking.
Usage
| Command | Description |
|---|
/share-skill <skill-name> | Migrate specified skill to code repository and initialize git |
/share-skill config | Configure code_root and other settings |
/share-skill <skill-name> --remote <url> | Migrate and configure remote URL |
/share-skill list | List all local skills available for migration |
/share-skill remote <alias> <endpoint> | Configure Git remote alias |
/share-skill remote list | List configured remote aliases |
/share-skill docs | Generate documentation website for the repository |
/share-skill docs --style <name> | Generate docs with specified design style |
/share-skill docs --skill <ui-skill> | Use specified UI skill to design docs |
/share-skill docs config | Configure default design style or UI skill |
/share-skill allow | One-time authorization for this skill's permissions |
| Natural language | e.g., "Help me open source port-allocator and push to github" |
Configuration File
All settings are stored in ~/.claude/share-skill-config.json:
{
"code_root": "~/Codes",
"skills_repo": "skills",
"github_username": "guo-yu",
"remotes": {
"github": "git@github.com:guo-yu/skills",
"gitlab": "git@gitlab.com:guo-yu/skills"
},
"default_remote": "github",
"auto_detected": true,
"docs": {
"style": "botanical",
"custom_skill": null,
"custom_domain": null
}
}
Configuration Fields:
| Field | Description | Default |
|---|
code_root | Base directory for code repositories | ~/Codes |
skills_repo | Name of skills repository folder | skills |
github_username | GitHub username for URLs | Auto-detected |
remotes | Git remote aliases | Auto-configured |
docs.custom_domain | Custom domain for docs site | null (use GitHub Pages) |
Path Variables:
Throughout this document, the following variables are used:
{code_root} → Value of code_root config (e.g., ~/Codes)
{skills_repo} → Value of skills_repo config (e.g., skills)
{skills_path} → {code_root}/{skills_repo} (e.g., ~/Codes/skills)
{username} → Value of github_username config
Auto-detection on First Run
On first invocation of share-skill, it automatically detects settings:
Auto-detection Logic:
-
Check if config file exists
if [ ! -f ~/.claude/share-skill-config.json ]; then
fi
-
Detect code_root directory
for dir in ~/Codes ~/Code ~/Projects ~/Dev ~/Development ~/repos; do
if [ -d "$dir" ]; then
CODE_ROOT="$dir"
break
fi
done
CODE_ROOT="${CODE_ROOT:-~/Codes}"
-
Read Git global config for username
USERNAME=$(git config --global user.name)
if [[ "$USERNAME" == *" "* ]]; then
EMAIL=$(git config --global user.email)
USERNAME=$(echo "$EMAIL" | grep -oP '^\d+-?\K[^@]+(?=@users\.noreply\.github\.com)')
fi
if [ -z "$USERNAME" ]; then
USERNAME=$(git config --global --get-regexp "url.*github.com" | grep -oP | -1)
Command: /share-skill config
Interactive configuration for share-skill settings:
TUI Interface (AskUserQuestion):
Configure share-skill settings:
Code root directory:
Current: ~/Codes
[ ] ~/Codes
[ ] ~/Code
[ ] ~/Projects
[ ] Other... (enter custom path)
Custom domain for documentation:
Current: (none - using GitHub Pages)
[ ] No custom domain (use {username}.github.io/{repo})
[ ] Enter custom domain...
Implementation:
CONFIG=$(cat ~/.claude/share-skill-config.json 2>/dev/null || echo '{}')
jq --arg root "$NEW_CODE_ROOT" '.code_root = $root' <<< "$CONFIG" > ~/.claude/share-skill-config.json
Handling Detection Failure
If settings cannot be auto-detected, prompt user to configure:
Unable to auto-detect settings
Please configure manually:
/share-skill config
Or specify when migrating:
/share-skill <skill-name> --remote git@github.com:your-username/skills.git
Natural Language Invocation
When user invokes via natural language, intelligent analysis is needed:
1. Identify User's Referenced Skill
User might say:
- "Help me open source xxx skill" -> Extract skill name
xxx
- "Share the skill I just created" -> Find most recently modified skill
- "Migrate this skill to repository" -> Determine from current context
- "Open source port-allocator" -> Use name directly
2. Identify Remote Address
Default behavior: Use auto-detected username + default repository name skills
User might say:
- "Help me open source xxx" -> Use default:
git@github.com:<username>/skills/<skill-name>.git
- "push to github" -> Use default github config
- "Push to git@github.com:other-user/repo.git" -> Must explicitly specify full address
- "Open source to my my-tools repository" -> Must explicitly specify repository name
Important rule: Modifying remote path requires explicit specification
If user wants to use non-default remote path, must explicitly specify via:
-
Explicit command-line specification
/share-skill <skill-name> --remote git@github.com:other-user/other-repo.git
-
Explicit path in natural language
OK: "Help me push port-allocator to git@github.com:my-org/tools.git"
OK: "Open source to gitlab, address is git@gitlab.com:team/shared-skills.git"
NOT OK: "Help me push to somewhere else" (unclear, will ask for specific address)
NOT OK: "Use another repository" (unclear, will ask for specific address)
Address Resolution Rules:
"Help me open source xxx"
-> Use default config: git@github.com:<auto-detected-user>/skills
-> Final address: git@github.com:<user>/skills/<skill-name>.git
"Push to git@github.com:other-user/repo.git"
-> Detected full address, use directly
"Open source to gitlab" (gitlab not configured)
-> Prompt: Please specify full GitLab address
3. Auto-search Skill Location
Skills may exist at the following locations, searched by priority:
~/.claude/skills/<skill-name>/SKILL.md
~/.claude/skills/*/<skill-name>/SKILL.md
~/.claude/skills/<skill-name>.md
.claude/skills/<skill-name>/SKILL.md
Search command:
find ~/.claude -name "SKILL.md" -type f 2>/dev/null | while read f; do
dir=$(dirname "$f")
name=$(basename "$dir")
echo "$name: $dir"
done
find ~/.claude -type d -name "<skill-name>" 2>/dev/null
4. Post-confirmation Actions
After finding skill:
- Display found location, ask user to confirm
- If multiple matches found, list options for user to choose
- Execute migration after confirmation
- If user didn't specify remote, ask whether to configure after migration completes
Execution Steps
Command: /share-skill remote <alias> <endpoint>
Configure Git remote alias:
-
Read existing config
cat ~/.claude/share-skill-config.json 2>/dev/null || echo '{"remotes":{}}'
-
Update config
{
"remotes": {
"<alias>": "<endpoint>"
}
}
-
Write config file (preserve existing config)
-
Output confirmation
Remote alias configured
Alias: github
Address: git@github.com:guo-yu/skills
Usage:
/share-skill <skill-name> --remote github
or: "Help me open source xxx to github"
Command: /share-skill remote list
List configured remote aliases:
cat ~/.claude/share-skill-config.json | jq '.remotes'
Output format:
Configured remote aliases:
github -> git@github.com:guo-yu/skills
gitlab -> git@gitlab.com:guo-yu/skills
gitee -> git@gitee.com:guo-yu/skills
Default: github
Command: /share-skill <skill-name> [--remote <url|alias>]
Migrate specified skill from ~/.claude/ directory to {skills_path}/:
-
Search skill location
if [ -d ~/.claude/skills/<skill-name> ]; then
SKILL_PATH=~/.claude/skills/<skill-name>
else
SKILL_PATH=$(find ~/.claude -type d -name "<skill-name>" 2>/dev/null | head -1)
fi
- If not found, error and exit
- If already a symlink, prompt already migrated and show link target
- If multiple found, list for user to choose
-
Check target directory
ls {skills_path}/<skill-name> 2>/dev/null
- If target exists, error and exit (avoid overwriting)
-
Execute migration
mkdir -p {skills_path}
mv ~/.claude/skills/<skill-name> {skills_path}/
ln -s {skills_path}/<skill-name> ~/.claude/skills/<skill-name>
-
Create .gitignore
cat > {skills_path}/<skill-name>/.gitignore << 'EOF'
.DS_Store
Thumbs.db
.vscode/
.idea/
*.swp
*.swo
*.log
tmp/
temp/
EOF
-
Initialize Git
cd {skills_path}/<skill-name>
git init
git add .
git commit -m "Initial commit: <skill-name> skill"
-
Configure remote (if specified)
If user specified --remote:
Command: /share-skill list
List all local skills available for migration (excluding symlinks):
echo "Discovered skills:"
find ~/.claude -name "SKILL.md" -type f 2>/dev/null | while read f; do
dir=$(dirname "$f")
name=$(basename "$dir")
if [ -L "$dir" ]; then
target=$(readlink "$dir")
echo " $name -> $target (migrated)"
else
echo " $name: $dir (available)"
fi
done
Output Format
Migration Success (with remote)
Skill migration successful
skill: <skill-name>
New location: {skills_path}/<skill-name>
Symlink: ~/.claude/skills/<skill-name> -> {skills_path}/<skill-name>
Git: Initialized and committed
Remote: git@github.com:guo-yu/skills/<skill-name>.git
Post-migration updates:
✓ Updated docs/js/main.js (SKILLS + SKILL_MARKETING)
✓ Updated README.md, README.zh-CN.md, README.ja.md
✓ Generated SKILL.zh-CN.md, SKILL.ja.md
✓ Updated cache version in docs/index.html
✓ Committed and pushed changes
Repository URL: https://github.com/guo-yu/skills
Migration Success (without remote)
Skill migration successful
skill: <skill-name>
New location: {skills_path}/<skill-name>
Symlink: ~/.claude/skills/<skill-name> -> {skills_path}/<skill-name>
Git: Initialized and committed
Post-migration updates:
✓ Updated docs/js/main.js (SKILLS + SKILL_MARKETING)
✓ Updated README.md, README.zh-CN.md, README.ja.md
✓ Generated SKILL.zh-CN.md, SKILL.ja.md
✓ Updated cache version in docs/index.html
✓ Committed changes (not pushed - no remote configured)
Do you want to configure remote address?
Already Migrated
Skill already migrated
<skill-name> is already a symlink:
~/.claude/skills/<skill-name> -> {skills_path}/<skill-name>
List
Local skills available for migration (N):
- art-master
- design-master
- prompt-generator
Migrated skills (M):
- port-allocator -> {skills_path}/port-allocator
- share-skill -> {skills_path}/share-skill
Directory Structure
Hybrid Git Management Mode
share-skill supports two Git management modes:
| Mode | Trigger | Git Structure | Remote |
|---|
| Monorepo | Default endpoint | Parent repo managed | guo-yu/skills |
| Standalone | Custom endpoint | Independent .git | User specified |
Monorepo Mode (Default)
When using default endpoint, all skills are managed by parent repo {skills_path}/.git:
{skills_path}/
├── .git/ # Parent repo -> guo-yu/skills
├── .gitignore
├── README.md
├── port-allocator/ # No independent .git, managed by parent
│ ├── .gitignore
│ └── SKILL.md
├── share-skill/
│ ├── .gitignore
│ └── SKILL.md
└── skill-permissions/
├── .gitignore
└── SKILL.md
Operations:
cd {skills_path}
git add <new-skill>/
git commit -m "Add <new-skill>"
git push
Standalone Mode (Custom Endpoint)
When user specifies custom endpoint, that skill has independent .git:
{skills_path}/
├── .git/ # Parent repo
├── .gitignore # Contains: /custom-skill/
├── custom-skill/ # Independent repo -> user specified address
│ ├── .git/
│ └── SKILL.md
└── port-allocator/ # Managed by parent repo
Parent repo .gitignore auto-updates:
# Skills with custom endpoints
/custom-skill/
Symlinks
Regardless of mode, ~/.claude/skills/ uses symlinks:
~/.claude/skills/
├── port-allocator -> {skills_path}/port-allocator
├── share-skill -> {skills_path}/share-skill
└── skill-permissions -> {skills_path}/skill-permissions
First Use
If you encounter permission prompts, first run:
/share-skill allow
Command: /share-skill allow
Execute one-time authorization, adding permissions required by this skill to Claude Code config:
- Read
~/.claude/settings.json
- Merge following permissions to
permissions.allow:
{
"permissions": {
"allow": [
"Bash(cat ~/.claude/*)",
"Bash(find ~/.claude *)",
"Bash(ls {skills_path}/*)",
"Bash(mkdir -p {skills_path}*)",
"Bash(mv ~/.claude/skills/* *)",
"Bash(ln -s {skills_path}/* *)",
"Bash(git *)",
"Bash(dirname *)",
"Bash(basename *)",
"Bash(readlink *)"
]
}
}
- Write config file (preserve existing permissions)
- Output authorization result
Output format:
Claude Code permissions configured
Added allowed command patterns:
- Bash(cat ~/.claude/*)
- Bash(find ~/.claude *)
- Bash(ls {skills_path}/*)
- Bash(mkdir -p {skills_path}*)
- Bash(mv ~/.claude/skills/* *)
- Bash(ln -s {skills_path}/* *)
- Bash(git *)
- Bash(dirname *)
- Bash(basename *)
- Bash(readlink *)
Config file: ~/.claude/settings.json
Notes
- No overwrite - If target directory exists, error instead of overwrite
- Maintain compatibility - Symlinks ensure Claude Code can still read skills normally
- Git tracking - Automatically initialize git and create initial commit
- Alias priority - When using alias, automatically append skill name as repository name
- Ask about remote - When remote not specified, proactively ask user after migration
- First authorization - Recommend running
/share-skill allow to configure permissions first
Documentation Website Generation
share-skill supports automatically generating elegant documentation websites to showcase skill usage instructions.
Command: /share-skill docs
Generate GitHub Pages documentation website for skills repository.
Parameters:
--style <name>: Use preset design style (default: botanical)
--skill <ui-skill>: Use specified UI skill for design
--domain <domain>: Configure custom domain
--i18n: Enable i18n language selection for SKILL.md and README files
i18n Language Selection
Since generating multi-language documentation is time-consuming and token-intensive, users can select which languages to generate via an interactive TUI checkbox.
Trigger: When running /share-skill docs with --i18n flag, or when the command detects SKILL.md files need translation.
TUI Interface:
Select languages for documentation (Space to toggle, Enter to confirm):
[x] English (en) - Always generated
[ ] 简体中文 (zh-CN) - Simplified Chinese
[ ] 日本語 (ja) - Japanese
[ ] Other... - Enter custom language code
Selected: English
Default Selection:
- English: checked (required, always generated)
- Chinese (zh-CN): unchecked
- Japanese (ja): unchecked
- Other: unchecked (allows custom language code input)
Custom Language Input:
When user selects "Other...", prompt for language code:
Enter language code (e.g., 'ko' for Korean, 'de' for German):
> ko
Language added: 한국어 (ko)
AskUserQuestion Implementation:
{
"questions": [
{
"question": "Which languages should be generated for documentation?",
"header": "Languages",
"multiSelect": true,
"options": [
{ "label": "English (en)", "description": "Required, always generated" },
{ "label": "简体中文 (zh-CN)", "description": "Simplified Chinese translation" },
{ "label": "日本語 (ja)", "description": "Japanese translation" },
{ "label": "Other...",
Generated Files Based on Selection:
| Selection | SKILL Files | README Files |
|---|
| English only | SKILL.md | README.md |
| +Chinese | SKILL.md, SKILL.zh-CN.md | README.md, README.zh-CN.md |
| +Japanese | SKILL.md, SKILL.ja.md | README.md, README.ja.md |
| +Korean | SKILL.md, SKILL.ko.md | README.md, README.ko.md |
Execution steps:
-
Check repository structure
if [ ! -d {skills_path}/.git ]; then
echo "Please run this command in skills repository first"
exit 1
fi
-
Read config
cat ~/.claude/share-skill-config.json | jq '.docs'
-
Select design method
- If
--skill specified: call corresponding UI skill (e.g., ui-ux-pro-max)
- Otherwise use preset style specified by
--style (default botanical)
-
Generate documentation website
mkdir -p {skills_path}/docs
mkdir -p {skills_path}/docs/css
mkdir -p {skills_path}/docs/js
-
Configure local development server
Handle based on endpoint config and existing package.json:
Scenario A: Monorepo mode (default endpoint)
Check if {skills_path}/package.json exists:
if [ -f {skills_path}/package.json ]; then
else
fi
Documentation Site Features
The generated documentation site includes the following features:
1. Dynamic Navbar Brand
The navbar brand (avatar + title) links to the repository URL and is dynamically populated from GitHub API:
<a class="navbar-brand" id="repoLink" href="https://github.com/{username}/{repo}" target="_blank">
<img class="brand-avatar" id="userAvatar" src="" alt="Avatar">
<span class="brand-text" id="brandTitle">Skills</span>
</a>
const repoLink = document.getElementById('repoLink');
if (repoLink) {
repoLink.href = `https://github.com/${REPO_OWNER}/${REPO_NAME}`;
}
2. Dynamic Favicon
The favicon uses the GitHub user's avatar image:
<link rel="icon" id="favicon" type="image/png" href="">
const favicon = document.getElementById('favicon');
if (favicon) {
favicon.href = user.avatar_url;
}
3. Footer Attribution
Footer links to the documentation site, dynamically choosing between custom domain and GitHub Pages:
<footer class="footer">
<div class="footer-content">
<p>Made with <span class="heart">♥</span> by <a id="footerLink" href="">Yu's skills</a></p>
</div>
</footer>
const CUSTOM_DOMAIN = null;
function getDocsUrl() {
if (CUSTOM_DOMAIN) {
return `https://${CUSTOM_DOMAIN}/`;
}
return `https://${REPO_OWNER}.github.io/${REPO_NAME}/`;
}
const footerLink = document.getElementById('footerLink');
if (footerLink) {
footerLink.href = getDocsUrl();
}
URL Selection Logic:
custom_domain config | Footer URL |
|---|
null | https://{username}.github.io/{repo}/ |
"docs.example.com" | https://docs.example.com/ |
4. i18n Cache Busting for SKILL.md
When loading language-specific SKILL.md files, add cache busting to ensure fresh content:
const CACHE_VERSION = Date.now();
function getBasePath(skillName, lang = 'en') {
const fileName = lang === 'en' ? 'SKILL.md' : `SKILL.${lang}.md`;
if (isGitHubPages) {
return `https://raw.githubusercontent.com/${REPO_OWNER}/${REPO_NAME}/${BRANCH}/${skillName}/${fileName}?v=${CACHE_VERSION}`;
} else {
return `../${skillName}/${fileName}?v=${CACHE_VERSION}`;
}
}
5. main.js Configuration
The main.js file should include repository configuration at the top:
const REPO_OWNER = '{github-username}';
const REPO_NAME = '{repo-name}';
const BRANCH = 'master';
const CACHE_VERSION = Date.now();
6. Marketing Section (Why Use This Skill?)
Each skill displays a compelling marketing section above the documentation content, highlighting:
- Headline: A catchy one-liner explaining the value proposition
- Why: A paragraph explaining why users should use this skill
- Pain Points: Three cards showing problems the skill solves
SKILL_MARKETING Data Structure in main.js:
const SKILL_MARKETING = {
'skill-name': {
en: {
headline: 'Compelling one-liner value proposition',
why: 'Detailed explanation of why this skill exists and how it helps users...',
painPoints: [
{
icon: '🔥',
title: 'Problem Title',
desc: 'Description of the problem this skill solves.'
},
{
icon: '🧠',
title: 'Another Problem',
desc: 'Description of another pain point.'
},
{
icon: '💥',
title: 'Third Problem',
desc: 'Description of the third issue addressed.'
}
]
},
'zh-CN': {
headline: '中文标题',
why: '中文说明...',
painPoints: []
},
ja: {
headline: '日本語タイトル',
why: '日本語説明...',
painPoints: []
}
}
};
Render Function:
function renderMarketingSection(skillName) {
const marketing = SKILL_MARKETING[skillName];
if (!marketing) return '';
const content = marketing[currentLang] || marketing['en'];
}
CSS Classes:
.marketing-section - Container with gradient background
.marketing-title - Gradient text headline
.marketing-why - Value proposition paragraph
.pain-points-grid - 3-column responsive grid
.pain-point-card - Glass card with icon, title, description
Guidelines for Writing Marketing Content:
- Write from the user's perspective ("You" not "This skill")
- Lead with the pain point, then show the solution
- Use specific, relatable examples (e.g., "Port 3000 is already in use")
- Keep headlines under 10 words
- Pain point titles should be the problem, not the solution
7. Three-Column Layout
The documentation site uses a three-column responsive layout:
<div class="main-container three-column">
<aside class="sidebar glass">
<div class="sidebar-content">
<div class="sidebar-section">
<h4 class="sidebar-heading" data-i18n="skills">Skills</h4>
<nav class="sidebar-nav">
<a class="sidebar-link" href="?skill=port-allocator">port-allocator</a>
<a class="sidebar-link" href="?skill=share-skill">share-skill</a>
</nav>
</div>
<div class="sidebar-section">
<h4 class="sidebar-heading" =>On This Page
Responsive Behavior:
- Desktop: Three columns visible
- Tablet: Right sidebar hidden
- Mobile: Both sidebars hidden, mobile menu available
8. Right Sidebar - Installation Section
The right sidebar provides quick installation instructions:
<aside class="sidebar-right glass">
<div class="sidebar-content">
<div class="sidebar-section">
<h4 class="sidebar-heading" data-i18n="installation">Installation</h4>
<p class="install-desc" data-i18n="installDesc">The easiest way to install:</p>
<div class="install-code">
<pre><code><span class="comment"># <span data-i18n="addMarketplace">Add marketplace</span></span>
<span class="cmd">/plugin marketplace add {username}/{repo}</span>
<span class="comment"># <span data-i18n=>Install skills
/plugin install {skill-name}@{username}-{repo}
More installation options
i18n Support for Installation:
const I18N = {
en: {
installation: 'Installation',
installDesc: 'The easiest way to install:',
addMarketplace: 'Add marketplace',
installSkills: 'Install skills',
moreOptions: 'More installation options'
},
'zh-CN': {
installation: '安装方法',
installDesc: '最简单的安装方式:',
addMarketplace: '添加技能市场',
installSkills: '安装技能',
moreOptions: '更多安装选项'
},
ja: {
installation: 'インストール',
installDesc: '最も簡単なインストール方法:',
addMarketplace: 'マーケットプレイスを追加',
installSkills: 'スキルをインストール',
moreOptions: 'その他のインストールオプション'
}
};
9. Table of Contents (Tocbot)
Use Tocbot library to auto-generate table of contents from headings:
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/tocbot/4.32.2/tocbot.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/tocbot/4.32.2/tocbot.min.js"></script>
tocbot.init({
tocSelector: '.js-toc',
contentSelector: '.js-toc-content',
headingSelector: 'h1, h2, h3',
scrollSmooth: true,
scrollSmoothDuration: 300,
headingsOffset: 100,
scrollSmoothOffset: -100
});
10. Code Syntax Highlighting (highlight.js)
Use highlight.js for code block syntax highlighting:
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/github-dark.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js"></script>
document.querySelectorAll('pre code').forEach((block) => {
hljs.highlightElement(block);
});
Command: /share-skill docs config
Configure documentation generation default settings.
Interactive options:
Configure documentation website design
Design method:
1. Use preset style
2. Use UI skill
Preset styles:
- botanical (default): Natural botanical style, elegant and soft
- minimal: Minimalist black and white
- tech: Modern tech-forward style
UI skills:
- ui-ux-pro-max: Professional UI/UX design skill
- (other UI skills user has installed)
Custom domain: (optional)
Design Style Presets
botanical - Natural Botanical Style (default)
Design Philosophy:
A digital tribute to nature—breathing, flowing, rooted in organic beauty. Soft, refined, and thoughtful, rejecting the rigid technocratic coldness and hyper-digital sharpness of modern tech aesthetic in favor of warmth, tactility, and the imperfections of the natural world.
Core Elements:
- Organic softness: Rounded corners everywhere, shapes flow like terrazzo
- Elegant typography: Playfair Display high-contrast serif + Source Sans 3 humanist sans-serif
- Earth tones: Forest green (#2D3A31), sage green (#8C9A84), terracotta (#C27B66), rice paper white (#F9F8F4)
- Paper texture: Essential SVG noise overlay, transforming cold digital pixels into warm tactile feel
- Breathing space: Generous whitespace, section spacing py-32, card spacing gap-16
- Slow motion: Like plants swaying in breeze, duration-500 to duration-700
Color System:
| Usage | Color | Value |
|---|
| Background | Warm white/Rice paper | #F9F8F4 |
| Foreground | Deep forest green | #2D3A31 |
| Primary | Sage green | #8C9A84 |
| Secondary | Soft clay/Mushroom | #DCCFC2 |
| Border | Stone | #E6E2DA |
| Interactive | Terracotta | #C27B66 |
Font Pairing:
- Headings: Playfair Display (Google Font) - Transitional serif, high-contrast strokes
- Body: Source Sans 3 (Google Font) - Clear, readable humanist sans-serif
Border Radius Rules:
- Cards:
rounded-3xl (24px)
- Buttons:
rounded-full (pill shape)
- Images:
rounded-t-full (arch) or rounded-[40px]
Paper Texture Overlay (Critical):
<div
className="pointer-events-none fixed inset-0 z-50 opacity-[0.015]"
style={{
backgroundImage: `url("data:image/svg+xml,%3Csvg viewBox='0 0 400 400' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E")`,
backgroundRepeat: "repeat",
}}
/>
Shadow System:
box-shadow: 0 4px 6px -1px rgba(45, 58, 49, 0.05);
box-shadow: 0 10px 15px -3px rgba(45, 58, 49, 0.05);
box-shadow: 0 20px 40px -10px rgba(45, 58, 49, 0.05);
Motion Guidelines:
- Fast interaction:
duration-300 (button hover, link color)
- Standard:
duration-500 (card lift, transforms)
- Slow dramatic:
duration-700 to duration-1000 (image zoom)
- Hover behavior:
-translate-y-1 with enhanced shadow
Responsive Strategy:
- Mobile: Hide sidebar, title from text-8xl down to text-5xl
- Touch targets: Maintain minimum 44px height
- Grid breakpoints:
grid-cols-1 -> md:grid-cols-3
Using External UI Skills
If user has installed ui-ux-pro-max or other UI skills, can call it to design docs:
/share-skill docs --skill ui-ux-pro-max
Execution flow:
-
Detect if skill exists
if [ -d ~/.claude/skills/ui-ux-pro-max ] || [ -L ~/.claude/skills/ui-ux-pro-max ]; then
echo "Detected ui-ux-pro-max skill"
fi
-
Call skill to generate design
- Pass current skills list and structure info to UI skill
- UI skill generates complete HTML/CSS/JS
- Output to
{skills_path}/docs/ directory
-
Ask design preference (if UI skill supports)
Using ui-ux-pro-max to design documentation website
Please select design style:
1. glassmorphism
2. claymorphism
3. minimalism
4. brutalism
5. neumorphism
6. bento-grid
Output Format
Generation success:
Documentation website generated
Location: {skills_path}/docs/
Design style: botanical (Natural Botanical Style)
Custom domain: skill.guoyu.me
File structure:
docs/
├── index.html
├── CNAME
├── css/
│ └── custom.css
└── js/
└── main.js
Pushed to GitHub
Visit: https://skill.guoyu.me
GitHub Pages setup:
1. Repository Settings -> Pages
2. Source: Deploy from a branch
3. Branch: master, /docs
Using UI skill:
Documentation website generated
Location: {skills_path}/docs/
Design: ui-ux-pro-max (glassmorphism style)
Custom domain: skill.guoyu.me
Visit: https://skill.guoyu.me
README Auto-generation
share-skill automatically generates/updates multi-language README files when creating or updating repositories.
Supported Languages
| Language | Filename | Language Code |
|---|
| English (default) | README.md | en |
| Simplified Chinese | README.zh-CN.md | zh-CN |
| Japanese | README.ja.md | ja |
File Structure
skills/
├── README.md # English (default)
├── README.zh-CN.md # Simplified Chinese
├── README.ja.md # Japanese
└── ...
Language Switch Navigation
Each README file contains language switch links at the top:
<p align="center">
<a href="README.md">English</a> |
<a href="README.zh-CN.md">简体中文</a> |
<a href="README.ja.md">日本語</a>
</p>
README Title Rules
| Repository Type | English | Simplified Chinese | Japanese |
|---|
| Skill Set | {username}'s Skills | {username} 的技能集 | {username} のスキル |
| Single Skill | {username}'s Skill: {name} | {username} 的技能: {name} | {username} のスキル: {name} |
README Template - English (README.md)
<p align="center">
<a href="README.md">English</a> |
<a href="README.zh-CN.md">简体中文</a> |
<a href="README.ja.md">日本語</a>
</p>
# {username}'s Skills
My collection of custom Claude Code skills for productivity and automation.
## Skills
| Skill | Description |
|-------|-------------|
| [port-allocator](./port-allocator/) | Automatically allocate development server ports |
| [share-skill](./share-skill/) | Migrate skills to repositories with Git support |
## Documentation
This skill set has an online documentation site generated by [share-skill](https://github.com/guo-yu/skills/tree/master/share-skill).
**With Custom Domain:**
https://{custom_domain}/
**GitHub Pages:**
https://{username}.github.io/{repo-name}/
### Setup GitHub Pages
1. Go to repository **Settings** -> **Pages**
2. Under "Source", select **Deploy from a branch**
3. Choose branch: `master` (or `main`), folder: `/docs`
4. (Optional) Add custom domain
## License
MIT
---
Made with ♥ by [Yu's skills](https://skill.guoyu.me/)
README Template - Simplified Chinese (README.zh-CN.md)
<p align="center">
<a href="README.md">English</a> |
<a href="README.zh-CN.md">简体中文</a> |
<a href="README.ja.md">日本語</a>
</p>
# {username} 的技能集
我的 Claude Code 自定义技能集合,用于提高生产力和自动化。
## 技能列表
| 技能 | 说明 |
|------|------|
| [port-allocator](./port-allocator/) | 自动分配开发服务器端口 |
| [share-skill](./share-skill/) | 将技能迁移到仓库并支持 Git 版本管理 |
## 在线文档
本技能集有一个由 [share-skill](https://github.com/guo-yu/skills/tree/master/share-skill) 生成的在线文档网站。
**自定义域名访问:**
https://{custom_domain}/
**GitHub Pages 访问:**
https://{username}.github.io/{repo-name}/
### 配置 GitHub Pages
1. 进入仓库 **Settings** -> **Pages**
2. 在 "Source" 下选择 **Deploy from a branch**
3. 选择分支: `master` (或 `main`),文件夹: `/docs`
4. (可选) 在 "Custom domain" 中添加自定义域名
## 许可证
MIT
---
Made with ♥ by [Yu's skills](https://skill.guoyu.me/)
README Template - Japanese (README.ja.md)
<p align="center">
<a href="README.md">English</a> |
<a href="README.zh-CN.md">简体中文</a> |
<a href="README.ja.md">日本語</a>
</p>
# {username} のスキル
生産性と自動化のための Claude Code カスタムスキルコレクション。
## スキル一覧
| スキル | 説明 |
|--------|------|
| [port-allocator](./port-allocator/) | 開発サーバーポートの自動割り当て |
| [share-skill](./share-skill/) | Git サポート付きでスキルをリポジトリに移行 |
## ドキュメント
このスキルセットには [share-skill](https://github.com/guo-yu/skills/tree/master/share-skill) で生成されたオンラインドキュメントサイトがあります。
**カスタムドメイン:**
https://{custom_domain}/
**GitHub Pages:**
https://{username}.github.io/{repo-name}/
### GitHub Pages の設定
1. リポジトリの **Settings** -> **Pages** に移動
2. "Source" で **Deploy from a branch** を選択
3. ブランチ: `master` (または `main`)、フォルダ: `/docs` を選択
4. (オプション) "Custom domain" にカスタムドメインを追加
## ライセンス
MIT
---
Made with ♥ by [Yu's skills](https://skill.guoyu.me/)
Execution Steps
When executing /share-skill docs or /share-skill <skill-name>:
-
Read config
CONFIG=$(cat ~/.claude/share-skill-config.json)
GITHUB_URL=$(echo "$CONFIG" | jq -r '.remotes.github')
GITHUB_USERNAME=$(echo "$GITHUB_URL" | grep -oP 'github\.com[:/]\K[^/]+')
CUSTOM_DOMAIN=$(echo "$CONFIG" | jq -r '.docs.custom_domain // empty')
REPO_NAME=$(basename "$(git rev-parse --show-toplevel)")
-
Generate language switch navigation
LANG_NAV='<p align="center">
<a href="README.md">English</a> |
<a href="README.zh-CN.md">简体中文</a> |
<a href="README.ja.md">日本語</a>
</p>'
-
Generate README for all languages
declare -A LANG_CONFIG
LANG_CONFIG[en]="README.md"
LANG_CONFIG[zh-CN]="README.zh-CN.md"
LANG_CONFIG[ja]="README.ja.md"
for lang in en zh-CN ja; do
FILE="${LANG_CONFIG[$lang]}"
generate_readme "$lang" "$FILE"
done
-
Write README files
generate_readme() {
local lang=$1
local file=
en)
TITLE=
;;
zh-CN)
TITLE=
;;
ja)
TITLE=
;;
> <<
}
Output Format
README multi-language files updated
Generated files:
- README.md (English)
- README.zh-CN.md (Simplified Chinese)
- README.ja.md (Japanese)
Documentation link: https://skill.guoyu.me/
Included sections:
- Language switch navigation
- Skills list
- Documentation (online docs instructions)
- License
- Attribution (Made with ♥)
Local Testing
share-skill provides a verification script to ensure generated documentation matches the SKILL.md specifications.
Verification Script
Location: share-skill/test/verify-docs.sh
Usage:
./share-skill/test/verify-docs.sh .
./share-skill/test/verify-docs.sh ~/Codes/skills
Checks performed:
| Category | Checks |
|---|
| Directory Structure | docs/index.html, docs/js/main.js, docs/css/custom.css, docs/CNAME |
| index.html | Favicon, navbar brand, three-column layout, language switcher, installation section, tocbot, highlight.js, footer, version numbers |
| main.js | REPO_OWNER, REPO_NAME, BRANCH, CACHE_VERSION, I18N object, getBasePath, dynamic favicon/repoLink, tocbot.init, hljs |
| README Files | README.md, README.zh-CN.md, README.ja.md, language navigation links, footer attribution |
| Skill Files | SKILL.md, SKILL.zh-CN.md, SKILL.ja.md for each skill |
| Skills Config | Each skill configured in main.js SKILLS object |
Sample Output:
╔════════════════════════════════════════════════════════════╗
║ share-skill Documentation Verification Script ║
╚════════════════════════════════════════════════════════════╝
Repository: /Users/username/Codes/skills
── 1. Directory Structure ──
✓ docs/index.html exists
✓ docs/js/main.js exists
✓ docs/css/custom.css exists
✓ docs/CNAME exists (custom domain configured)
── 2. index.html Structure ──
✓ Favicon element with id='favicon'
✓ Navbar brand with id='repoLink'
...
════════════════════════════════════════════════════════════
Summary
════════════════════════════════════════════════════════════
Passed: 71
Failed: 0
Warnings: 0
✓ All required checks passed!
Exit Codes:
0: All checks passed
1: One or more checks failed
When to Run
Run the verification script:
- After generating documentation with
/share-skill docs
- Before committing documentation changes
- When troubleshooting documentation issues
- As part of CI/CD pipeline for documentation