feat: Add OurDigital custom skills package (10 skills)

Complete implementation of OurDigital skills with dual-platform support
(Claude Desktop + Claude Code) following standardized structure.

Skills created:
- 01-ourdigital-brand-guide: Brand reference & style guidelines
- 02-ourdigital-blog: Korean blog drafts (blog.ourdigital.org)
- 03-ourdigital-journal: English essays (journal.ourdigital.org)
- 04-ourdigital-research: Research prompts & workflows
- 05-ourdigital-document: Notion-to-presentation pipeline
- 06-ourdigital-designer: Visual/image prompt generation
- 07-ourdigital-ad-manager: Ad copywriting & keyword research
- 08-ourdigital-trainer: Training materials & workshop planning
- 09-ourdigital-backoffice: Quotes, proposals, cost analysis
- 10-ourdigital-skill-creator: Meta skill for creating new skills

Features:
- YAML frontmatter with "ourdigital" or "our" prefix triggers
- Standardized directory structure (code/, desktop/, shared/, docs/)
- Shared environment setup (_ourdigital-shared/)
- Comprehensive reference documentation
- Cross-skill integration support

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-31 16:50:17 +07:00
parent 7d20abe811
commit 0bc24d00b9
169 changed files with 9970 additions and 741 deletions

View File

@@ -0,0 +1,215 @@
#!/usr/bin/env python3
"""
Initialize a new OurDigital skill with standard directory structure.
Usage:
python init_skill.py {skill-name} --number XX
python init_skill.py blog --number 02
"""
import argparse
import os
from pathlib import Path
from datetime import datetime
SKILL_TEMPLATE = '''---
name: ourdigital-{name}
description: |
{description}
Activated with "ourdigital" keyword.
Triggers:
- "ourdigital {name}", "ourdigital {trigger}"
Features:
- {feature}
version: "1.0"
author: OurDigital
environment: {environment}
---
# OurDigital {title}
{description}
## Activation
Only activate when user includes "ourdigital" keyword:
- "ourdigital {trigger}"
## Workflow
### Phase 1: Input
Gather requirements from user.
### Phase 2: Process
Execute core functionality.
### Phase 3: Output
Deliver results.
## Quick Commands
| Command | Action |
|---------|--------|
| "ourdigital {name}" | Main action |
'''
CHANGELOG_TEMPLATE = '''# Changelog
All notable changes to this skill will be documented in this file.
## [1.0.0] - {date}
### Added
- Initial skill creation
- Desktop and Code versions
- Basic workflow implementation
### Notion Ref
- (To be added after sync)
'''
README_TEMPLATE = '''# OurDigital {title}
{description}
## Installation
This skill is part of the OurDigital custom skills package.
## Usage
### Claude Desktop
The skill activates when you mention "ourdigital {name}".
### Claude Code
```bash
# The skill activates via SKILL.md directive
```
## Structure
```
{number}-ourdigital-{name}/
├── code/SKILL.md
├── desktop/SKILL.md
├── shared/
│ └── references/
├── docs/
│ └── CHANGELOG.md
└── README.md
```
## Version
- Current: 1.0.0
- Author: OurDigital
'''
def create_skill(name: str, number: str, description: str = "", environment: str = "Both"):
"""Create a new skill directory structure."""
base_path = Path(__file__).parent.parent.parent.parent
skill_dir = base_path / f"{number}-ourdigital-{name}"
if skill_dir.exists():
print(f"Skill directory already exists: {skill_dir}")
return False
# Create directories
dirs = [
skill_dir / "code",
skill_dir / "desktop",
skill_dir / "shared" / "references",
skill_dir / "shared" / "templates",
skill_dir / "shared" / "scripts",
skill_dir / "docs" / "logs",
]
for d in dirs:
d.mkdir(parents=True, exist_ok=True)
print(f"Created: {d}")
# Title case for display
title = name.replace("-", " ").title()
trigger = name.replace("-", " ")
feature = f"Core {title} functionality"
date = datetime.now().strftime("%Y-%m-%d")
if not description:
description = f"OurDigital {title} skill for Claude."
# Create SKILL.md for desktop
desktop_skill = SKILL_TEMPLATE.format(
name=name,
title=title,
description=description,
trigger=trigger,
feature=feature,
environment="Desktop"
)
(skill_dir / "desktop" / "SKILL.md").write_text(desktop_skill)
print(f"Created: desktop/SKILL.md")
# Create SKILL.md for code
code_skill = SKILL_TEMPLATE.format(
name=name,
title=title,
description=description,
trigger=trigger,
feature=feature,
environment="Code"
)
(skill_dir / "code" / "SKILL.md").write_text(code_skill)
print(f"Created: code/SKILL.md")
# Create CHANGELOG.md
changelog = CHANGELOG_TEMPLATE.format(date=date)
(skill_dir / "docs" / "CHANGELOG.md").write_text(changelog)
print(f"Created: docs/CHANGELOG.md")
# Create README.md
readme = README_TEMPLATE.format(
title=title,
name=name,
number=number,
description=description
)
(skill_dir / "README.md").write_text(readme)
print(f"Created: README.md")
print(f"\nSkill created successfully: {skill_dir}")
return True
def main():
parser = argparse.ArgumentParser(description="Initialize a new OurDigital skill")
parser.add_argument("name", help="Skill name (e.g., 'blog', 'designer')")
parser.add_argument("--number", required=True, help="Skill number (e.g., '02', '07')")
parser.add_argument("--description", default="", help="Skill description")
parser.add_argument("--environment", default="Both",
choices=["Desktop", "Code", "Both"],
help="Target environment")
args = parser.parse_args()
success = create_skill(
name=args.name,
number=args.number,
description=args.description,
environment=args.environment
)
return 0 if success else 1
if __name__ == "__main__":
exit(main())