four-elements skill
Provides 24 engineering principles categorized into four elements to guide decision-making during refactoring, debugging, and architectural design.
- GitHub stars
- 113
- Files
- 25
- Last commit
- Nov 1, 2026
- License
- MIT
- Allowed tools
- —
What does the four-elements skill do?
four-elements provides 24 engineering principles categorized into four elements to guide decision-making during refactoring, debugging, and architectural design.
Summary generated from the skill's SKILL.md.
About the four-elements skill
Guiding engineering decisions through structured principles is what this skill enables for developers and AI agents. It provides twenty-four distinct principles organized into four elemental categories: Air, Water, Earth, and Fire. An agent should load this skill when it needs to refactor code, debug complex systems, design new architectures, or manage technical debt.
By using specific principle lookups, an agent can determine whether to subtract complexity, adapt to new requirements, hold stability through discipline, or drive progress through execution. The skill relies on a set of markdown references that define each principle in detail. When an agent applies a principle to a task, it produces a reasoned decision that names the specific principle used and explains how that principle changed the technical choice. This approach helps prevent common pitfalls like adding unnecessary abstractions, failing to find root causes during debugging, or bloating the context window during long sessions.
What an agent can do with it
- 1Refactoring and reducing complexityAn agent can use the Air principles to decide whether to add a new abstraction or simply delete dead code.
- 2Debugging and root cause analysisWhen multiple fixes fail, the agent can apply the principle of attacking the underlying premise.
- 3Designing robust data structuresDevelopers can use Earth principles to ensure that illegal states are impossible within their type systems.
Written from the skill's SKILL.md. Every use case is checked against a quote from it.
How to install the four-elements skill
Each command copies the skill folder into the client's skills directory. Restart the client or start a new session to load it.Install the four-elements skill in Plugin
/plugin marketplace add tmcfarlane/team-avatar /plugin install team-avatar@team-avatar
Install the four-elements skill in Claude Code
~/.claude/skills/four-elements/SKILL.md
$ npx degit tmcfarlane/team-avatar/plugins/team-avatar/skills/four-elements ~/.claude/skills/four-elementsInstall the four-elements skill in Claude Code (project)
.claude/skills/four-elements/SKILL.md
$ npx degit tmcfarlane/team-avatar/plugins/team-avatar/skills/four-elements .claude/skills/four-elementsInstall the four-elements skill in Codex
~/.agents/skills/four-elements/SKILL.md
$ npx degit tmcfarlane/team-avatar/plugins/team-avatar/skills/four-elements ~/.agents/skills/four-elementsInstall the four-elements skill in Gemini CLI
~/.gemini/skills/four-elements/SKILL.md
$ npx degit tmcfarlane/team-avatar/plugins/team-avatar/skills/four-elements ~/.gemini/skills/four-elementsInstall the four-elements skill in Claude.ai
npx degit tmcfarlane/team-avatar/plugins/team-avatar/skills/four-elements four-elements && zip -r four-elements.zip four-elements # claude.ai → Customize → Skills → + → Create skill → Upload a skill → four-elements.zip
SKILL.md
View on GitHubThe four elements
Each element is a stance. Read the element the moment calls for. Each bullet names when its principle applies and links the principle in full.
Read the linked reference in full before you apply a principle. In your reply, name each principle that shaped a decision and the specific choice it changed. Cite only principles whose reference you read this session.
Air: subtract
The Air Nomads carry nothing they do not need. Lightness is the discipline.
- Laziness Protocol. Refactoring, sizing a diff, or tempted to add abstractions, layers, or signal threading. Make the smallest change that solves it, and give a repeated decision one source of truth.
- Subtract Before You Add. Sequencing an addition, refactor, or rewrite. Delete dead code, stale flags, and speculative guards first. Design for observed usage. Then build on the simpler base.
- Minimize Reader Load. Reviewing or shaping code that is hard to trace. Count layers and hidden state, inline one-caller wrappers, and shrink mutable scope.
- Attack the Premise. Two or more fixes that share one premise have failed the same gate. Write the premise down and test it directly before another fix. Aang found a third option when everyone said there were two.
- Experience First. Product, UX, or feature-scope tradeoffs. Choose user delight over implementation convenience. Ship fewer, polished features.
- Exhaust the Design Space. A novel interaction or architectural decision with no precedent. Build two or three competing prototypes with
scouting-flightand compare before committing.
Water: adapt
Water takes the shape of what holds it and still finds the lowest point.
- Foundational Thinking. Before writing logic. Get the core types and data structures right, do scaffold before features, and ask what concurrent actors share.
- Model the Domain. Stateful logic, or code that branches a lot or repeats a shape assumption across files. Encode the domain in a state machine, typed model, table, reducer, or the right collection instead of scattered conditionals.
- Redesign from First Principles. A new requirement arrives for an existing design. Design as if it had been there from day one. Do not bolt it onto the side.
- Fix Root Causes. Debugging. Trace each symptom back to the first place the system went wrong and fix it there. A guard is a fix only when the state it handles is legitimate.
- Make Operations Idempotent. Commands, lifecycle steps, or loops that run amid crashes and retries. Converge to the same end state when run twice or resumed after a crash.
- Migrate Callers Then Delete Legacy APIs. A new internal API while old callers exist. Move every caller and delete the old path in the same wave.
Earth: hold
Earthbenders wait and listen, then strike once. Stability comes from what you have verified.
- Boundary Discipline. Wiring validation, error handling, or framework adapters. Validate and parse at the edges (CLI, config, network, external APIs). Inside, trust the types and keep business logic pure.
- Type System Discipline. Designing types or a signature in a typed language. Make illegal states unrepresentable, brand primitives that mean different things, and derive types from the schema that owns the shape.
- Separate Before Serializing Shared State. Concurrent actors might write the same file, branch, key, or object. Give each its own write target first. Lock only when one shared writer is a real invariant.
- Prove It Works. After a task, before declaring done. Check the real artifact directly. A proxy, a cached screenshot, and an agent's report are not proof.
- Test Behavior, Not Implementation. Writing, changing, or keeping a test. Assert what a caller can observe, so the test fails when behavior breaks and passes when only internals change.
- Explain the Number. Before you trust, report, or act on a measured speedup, regression, latency, or eval score. Find what limits it and rule out that it measured something else.
Fire: drive
Iroh taught that fire is life, not destruction. Its source is breath, not rage.
- Outcome-Oriented Execution. Planned rewrites and migrations with explicit phase boundaries. Converge on the target architecture. Do not preserve throwaway compatibility states.
- Never Block on the Human. Tempted to ask "should I do X?" on reversible work. Do it, show the result, and let them correct course. Save questions for product and preference calls.
- Build the Lever. Any non-trivial work. Write the script, codemod, generator, or shared brief that does or proves it. The tool is the artifact a reviewer can rerun.
- Sequence Work into Verifiable Units. Multi-step work and how you stack commits and PRs. Each step ends in a check, verified before the next. Land a failing test before its fix.
- Encode Lessons in Structure. You catch yourself writing the same instruction a second time. Turn it into a lint, a flag, a runtime check, or a script instead of more text.
- Guard the Context Window. Context fills with large outputs, long files, repeated reads, or fan-out planning. Route bulk reading to a dispatched character. Keep summaries, not dumps, in the main thread.
Files in this skill
25four-elements skill questions
How do I install the four-elements skill in Claude Code?
Run npx degit tmcfarlane/team-avatar/plugins/team-avatar/skills/four-elements ~/.claude/skills/four-elements. Claude Code loads skills from ~/.claude/skills (all projects) or .claude/skills (one project) and uses a skill when its description matches the task.
Which clients can use the four-elements skill?
Any client that reads the Agent Skills format: Claude Code, Codex, Gemini CLI and claude.ai (upload as a ZIP). Scripts in the skill run only where the client allows code execution.