ed3d House Style
This repository contains coding standards, patterns, and skills for ed3d projects.
Purpose
This repository defines:
- Coding patterns - FCIS (Functional Core, Imperative Shell) and other architectural patterns
- Skills - Reusable techniques and reference guides for Claude instances
- Standards - Style guides, conventions, and best practices
Repository Structure
ed3d-house-style/
├── skills/ # Skills for Claude instances
├── agents/ # (Reserved for future use)
└── CLAUDE.md # This file
Working with Skills
Using Skills in This Repository
When working in this repository to create or modify skills, YOU MUST use the writing-skills skill:
@skill:writing-skills
This skill applies Test-Driven Development principles to documentation and ensures skills are effective and bulletproof.
What Makes a Good Skill
Core requirements:
YAML frontmatter with exactly two fields:
--- name: skill-name-with-hyphens description: Use when [triggering conditions] - [what it does, third person] ---Valid UTF-8 encoding - No fancy Unicode characters that break file parsing
- Use ASCII arrows:
->not→ - Use ASCII quotes:
"not" - Use ASCII apostrophes:
'not' - Use standard ASCII characters throughout
- Use ASCII arrows:
Description optimization:
- Start with "Use when..."
- Include specific triggers and symptoms
- Write in third person (injected into system prompt)
- Keep under 500 characters if possible
Concise content:
- Target < 500 words for most skills
- Context window is a public good
- Every token competes with conversation history
Clear structure:
## Overview Core principle in 1-2 sentences ## When to Use Bullet list with symptoms and use cases ## Core Pattern Before/after examples ## Common Mistakes Rationalization table with corrections ## Red Flags List of stop-and-refactor signalsOne excellent code example (not five mediocre ones in different languages)
Common Pitfalls
Encoding issues:
- Test with
file -i SKILL.mdto verify UTF-8 - If you see charset errors, check for non-ASCII characters
- Common culprits: smart quotes, em dashes, Unicode arrows
Overly verbose:
- Don't explain what Claude already knows
- Don't write narratives about specific sessions
- Keep it reference-focused, not story-focused
Weak descriptions:
- ❌ "Helps with testing" (too vague)
- ✅ "Use when tests have race conditions or timing dependencies - replaces arbitrary timeouts with condition polling"
Missing persuasion elements for discipline skills:
- No rationalization table
- No red flags section
- Weak authority language (use "YOU MUST", "NEVER", "No exceptions")
Testing Skills (Optional but Recommended)
The writing-skills skill emphasizes TDD for documentation:
- Run baseline scenario WITHOUT skill (document failures)
- Write skill addressing those failures
- Run scenario WITH skill (verify compliance)
- Iterate to close loopholes
For this repository's skills, rigorous testing is optional but encouraged for discipline-enforcing skills.
Core Patterns
FCIS (Functional Core, Imperative Shell)
See skills/howto-functional-vs-imperative/SKILL.md for complete details.
Summary:
- Functional Core: Pure functions only. No I/O except logging. Easy to test.
- Imperative Shell: I/O coordination only. Minimal logic. Calls Core.
- Mandatory: Add pattern classification comment to every application code file.
Logger exception: Loggers are explicitly permitted in Functional Core files.
Contributing
When adding new skills:
- Use
@skill:writing-skillsfor guidance - Follow the structure and requirements above
- Verify UTF-8 encoding
- Keep descriptions concrete and trigger-focused
- Test the skill if enforcing discipline
Questions?
Refer to @skill:writing-skills for comprehensive guidance on skill creation.