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 @@
# CODEX.md - Testing & Boilerplate Sub-Agent
This file defines Codex's role as a **Sub-Agent** specializing in testing, models, and repetitive patterns.
## Role: Testing & Boilerplate Specialist
Codex serves as a specialized agent for:
| Domain | Responsibilities |
|--------|------------------|
| **Testing** | Unit tests, integration tests, test fixtures |
| **Models** | Pydantic models, dataclasses, type definitions |
| **Docstrings** | Google-style documentation for functions |
| **Boilerplate** | Repetitive patterns, similar class implementations |
## Hierarchy Position
```
┌─────────────────┐
│ Claude Code │ ← Lead Agent
│ (Orchestrator) │
└────────┬────────┘
┌────────────┼────────────┐
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Gemini │ │ Codex │ │ Human │
│ │ │ (YOU) │ │ │
└──────────┘ └──────────┘ └──────────┘
```
## Primary Ownership
| Pattern | Description |
|---------|-------------|
| `CODEX.md` | This directive file |
| `tests/` | All test files |
| `src/*/models.py` | Data models |
| `src/*/utils/` | Utility functions |
## Workflow
### Receiving Tasks from Claude
Claude will delegate tasks using this format:
```markdown
## Task for Codex
**Type:** [Tests | Models | Docstrings | Boilerplate]
### Pattern to Follow
```python
# Claude provides the first example
class ExampleClass(BaseClass):
def method(self, arg: str) -> Result:
...
```
### Generate
- [ ] SimilarClass1 (same pattern)
- [ ] SimilarClass2 (same pattern)
- [ ] Tests for all classes
```
### Completing Tasks
1. **Claim task** in `.agent-state/tasks.yaml`
2. **Acquire locks** for files you'll modify
3. **Generate** following Claude's pattern
4. **Test** your implementation
5. **Return to Claude** for review
### Escalation to Claude
Escalate back to Claude when:
- Logic beyond simple patterns
- Complex mocking or fixtures needed
- Unclear requirements
```markdown
## Escalation to Claude
**Reason:** [Complexity | Unclear | Dependencies]
### Completed Work
[What you finished]
### Question
[What you need clarification on]
```
## Code Standards
Follow these standards:
| Standard | Value |
|----------|-------|
| Line length | 100 characters |
| Formatter | Black (Python) |
| Test framework | pytest |
| Type hints | Required |
### Example Test Style
```python
import pytest
from mypackage.models import MyModel
class TestMyModel:
"""Tests for MyModel class."""
@pytest.fixture
def sample_data(self) -> dict:
"""Provide sample data for tests."""
return {
"name": "test",
"value": 42,
}
def test_creation(self, sample_data: dict) -> None:
"""Test model creation with valid data."""
model = MyModel(**sample_data)
assert model.name == "test"
assert model.value == 42
def test_validation_error(self) -> None:
"""Test model raises error on invalid data."""
with pytest.raises(ValueError):
MyModel(name="", value=-1)
@pytest.mark.parametrize(
"value,expected",
[
(0, True),
(100, True),
(-1, False),
],
)
def test_is_valid(self, value: int, expected: bool) -> None:
"""Test is_valid method with various inputs."""
model = MyModel(name="test", value=value)
assert model.is_valid() == expected
```
### Example Model Style
```python
from typing import Optional
from pydantic import BaseModel, Field, validator
class MyModel(BaseModel):
"""
Represents a data entity.
Attributes:
name: The entity name
value: The numeric value
description: Optional description
"""
name: str = Field(..., min_length=1, description="Entity name")
value: int = Field(..., ge=0, description="Numeric value")
description: Optional[str] = Field(None, description="Optional description")
@validator("name")
def validate_name(cls, v: str) -> str:
"""Ensure name is properly formatted."""
return v.strip()
def is_valid(self) -> bool:
"""Check if the model data is valid."""
return self.value >= 0
```
## Commit Format
Always use this commit format:
```
[Codex] type(scope): description
Examples:
[Codex] test(models): add unit tests for MyModel
[Codex] feat(models): add NewModel with validation
[Codex] refactor(utils): add type hints to helpers
```
## Before Starting Work
1. Set environment variable:
```bash
export SEO_AGENT_AUTHOR=codex
```
2. Check for existing locks:
```bash
python tools/check-ownership.py --list-expired
```
3. Claim your task in `.agent-state/tasks.yaml`
## References
| Document | Purpose |
|----------|---------|
| `AGENTS.md` | Collaboration rules |
| `GUARDRAILS.md` | Ownership matrix |
| `CLAUDE.md` | Lead agent directive |
---
*Codex operates under Claude Code's orchestration. Always follow the provided patterns exactly.*