doing-a-simple-two-sta…
Use when analyzing a large corpus of text, code, or data that exceeds a single agent's effective context - orchestrates parallel…
ALWAYS use this skill when writing or refactoring code. Includes context-dependent sub-skills to empower different coding styles across languages and runtimes.
Claude Code
$ npx -y skills add ed3dai/ed3d-plugins --skill coding-effectively --agent claude-code
Codex
$ npx skills add ed3dai/ed3d-plugins --skill coding-effectively -a codex -y
Cursor
$ npx skills add ed3dai/ed3d-plugins --skill coding-effectively -a cursor -y
Gemini CLI
$ npx skills add ed3dai/ed3d-plugins --skill coding-effectively -a gemini-cli -y
GitHub Copilot
$ npx skills add ed3dai/ed3d-plugins --skill coding-effectively -a github-copilot -y
OpenCode
$ npx skills add ed3dai/ed3d-plugins --skill coding-effectively -a opencode -y
Windsurf
$ npx skills add ed3dai/ed3d-plugins --skill coding-effectively -a windsurf -y
name: coding-effectively description: ALWAYS use this skill when writing or refactoring code. Includes context-dependent sub-skills to empower different coding styles across languages and runtimes. user-invocable: false
**ALWAYS REQUIRED:**
**CONDITIONAL:** Use these sub-skills when applicable:
When designing features, think about properties upfront. This surfaces design gaps early.
**Discovery questions:**
| Question | Property Type | Example | |----------|---------------|---------| | Does it have an inverse operation? | Roundtrip | `decode(encode(x)) == x` | | Is applying it twice the same as once? | Idempotence | `f(f(x)) == f(x)` | | What quantities are preserved? | Invariants | Length, sum, count unchanged | | Is order of arguments irrelevant? | Commutativity | `f(a, b) == f(b, a)` | | Can operations be regrouped? | Associativity | `f(f(a,b), c) == f(a, f(b,c))` | | Is there a neutral element? | Identity | `f(x, 0) == x` | | Is there a reference implementation? | Oracle | `new(x) == old(x)` | | Can output be easily verified? | Easy to verify | `is_sorted(sort(x))` |
**Common design questions these reveal:**
Surface these during design, not during debugging.
Model the full error space. No shortcuts.
**Don't:**
**Two-tier model:**
1. **User-facing errors**: Semantic exit codes, rich diagnostics, actionable messages 2. **Internal errors**: Programming errors that may panic or use internal types
**Error message format:** Lowercase sentence fragments for "failed to {message}".
Good: failed to connect to database: connection refused Bad: Failed to Connect to Database: Connection Refused Good: invalid configuration: missing required field 'apiKey' Bad: Invalid Configuration: Missing Required Field 'apiKey'
Lowercase fragments compose naturally: `"operation failed: " + error.message` reads correctly.
**The rule of three applies to abstraction:** Don't abstract until you've seen the pattern three times. Three similar lines of code is better than a premature abstraction.
Name files by what they contain, not by generic categories.
**Don't create:**
**Do create:**
**Why this matters:**
**When you're tempted to create utils.ts:** Stop. Ask what the functions have in common. Name the file after that commonality.
Don't emulate Unix on Windows or vice versa. Use each platform's native patterns.
**Bad:** Trying to make Windows paths behave like Unix paths everywhere.
**Good:** Accept platform differences, handle them explicitly.
// Platform-specific behavior
if (process.platform === 'win32') {
// Windows-native approach
} else {
// POSIX approach
}When platform differences are significant, use separate files:
process-spawn.ts // Shared interface and logic process-spawn-unix.ts // Unix-specific implementation process-spawn-windows.ts // Windows-specific implementation
When behavior differs by platform, document it in comments:
// On Windows, this returns CRLF line endings.
// On Unix, this returns LF line endings.
// Callers should normalize if consistent output is needed.
function readTextFile(path: string): string { ... }Don't assume Unix behavior works on Windows. Test explicitly:
Ed's repo of Claude Code plugins, centered around a research-plan-implement workflow. Only a tiny bit cursed. If you're lucky.
Use when analyzing a large corpus of text, code, or data that exceeds a single agent's effective context - orchestrates parallel…
Use when creating a new Claude Code plugin or setting up plugin structure - provides complete file organization, manifest format,…
Use when creating specialized subagents for Claude Code plugins or the Task tool - covers description writing for…
Use when creating, releasing, or maintaining a Claude Code Plugin Marketplace - covers marketplace.json schema, version…
Use when completing development phases or branches to identify and update CLAUDE.md or AGENTS.md files that may have become stale…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.