Official agent skill

Code Simplification

by sanity-io in sanity-io/sanity

Simplifies code for clarity. An agent skill from sanity-io/sanity.

OfficialMITAuto-check passedDevelopment

Install Code Simplification

skills CLI
$ npx skills add sanity-io/sanity --skill code-simplification -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install sanity-io/sanity code-simplification --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/sanity-io/sanity.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/code-simplification .claude/skills/code-simplification && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
code-simplification
GitHub stars
6.4k
Used in
11 other repos
Token cost
~3.8k tokens
SKILL.md length
1,162 words
Files
1
Skills in repo
34
Repo updated
First seen
Licence
MIT

At a glance

Simplifies code for clarity. An agent skill from sanity-io/sanity.

  • Works in 9 steps: Preserve Behavior Exactly → Follow Project Conventions → Prefer Clarity Over Cleverness → …
  • Refactoring code for clarity without changing behavior
  • SKILL.md covers Overview, When to Use, The Five Principles and The Simplification Process, plus 4 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Code Simplification is an agent skill from sanity-io/sanity, published by the product's own GitHub organization. Simplifies code for clarity. Use when refactoring code for clarity without changing behavior. Use when code works but is harder to read, maintain, or extend than it should be. Use when reviewing code that has accumulated unnecessary complexity.

Its SKILL.md is about 3.8k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Development, covering Code simplification and Refactoring. The repository describes itself as: Sanity Studio – Rapidly configure content workspaces powered by structured content. The licence is MIT.

When your agent uses it

  • Refactoring code for clarity without changing behavior
  • Code works but is harder to read
  • Extend than it should be
  • Reviewing code that has accumulated unnecessary complexity

Example prompts

  • “Use the code-simplification skill to simplify code for clarity. An agent skill from sanity-io/sanity”
  • “/code-simplification”

Requirements

  • Python 3

Workflow steps

9 steps, taken from the step headings in SKILL.md.

  1. Preserve Behavior Exactly
  2. Follow Project Conventions
  3. Prefer Clarity Over Cleverness
  4. Maintain Balance
  5. Scope to What Changed
  6. Understand Before Touching (Chesterton's Fence)
  7. Identify Simplification Opportunities
  8. Apply Changes Incrementally
  9. Verify the Result

What it can do on your machine

Read from SKILL.md and the folder at commit 982525c. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are typescript and python).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • github.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Code Simplification loads about 3.8k tokens when it runs. Until then it costs about 66 tokens; SKILL.md has 1,162 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~66
When it runs · the whole SKILL.md, loaded when a task matches
~3.8k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from sanity-io/sanity at commit 982525c, republished under its MIT licence (© sanity-io). 1,162 words, ~3,808 tokens.

Download SKILL.mdSave it as .claude/skills/code-simplification/SKILL.md (or your agent's skills folder).
name
code-simplification
description
Simplifies code for clarity. Use when refactoring code for clarity without changing behavior. Use when code works but is harder to read, maintain, or extend than it should be. Use when reviewing code that has accumulated unnecessary complexity.

Code Simplification

Inspired by the Claude Code Simplifier plugin. Adapted here as a model-agnostic, process-driven skill for any AI coding agent.

Overview

Simplify code by reducing complexity while preserving exact behavior. The goal is not fewer lines — it's code that is easier to read, understand, modify, and debug. Every simplification must pass a simple test: "Would a new team member understand this faster than the original?"

When to Use

  • After a feature is working and tests pass, but the implementation feels heavier than it needs to be
  • During code review when readability or complexity issues are flagged
  • When you encounter deeply nested logic, long functions, or unclear names
  • When refactoring code written under time pressure
  • When consolidating related logic scattered across files
  • After merging changes that introduced duplication or inconsistency

When NOT to use:

  • Code is already clean and readable — don't simplify for the sake of it
  • You don't understand what the code does yet — comprehend before you simplify
  • The code is performance-critical and the "simpler" version would be measurably slower
  • You're about to rewrite the module entirely — simplifying throwaway code wastes effort

The Five Principles

1. Preserve Behavior Exactly

Don't change what the code does — only how it expresses it. All inputs, outputs, side effects, error behavior, and edge cases must remain identical. If you're not sure a simplification preserves behavior, don't make it.

ASK BEFORE EVERY CHANGE:
→ Does this produce the same output for every input?
→ Does this maintain the same error behavior?
→ Does this preserve the same side effects and ordering?
→ Do all existing tests still pass without modification?
2. Follow Project Conventions

Simplification means making code more consistent with the codebase, not imposing external preferences. Before simplifying:

1. Read CLAUDE.md / project conventions
2. Study how neighboring code handles similar patterns
3. Match the project's style for:
   - Import ordering and module system
   - Function declaration style
   - Naming conventions
   - Error handling patterns
   - Type annotation depth

Simplification that breaks project consistency is not simplification — it's churn.

3. Prefer Clarity Over Cleverness

Explicit code is better than compact code when the compact version requires a mental pause to parse.

typescript
// UNCLEAR: Dense ternary chain
const label = isNew ? 'New' : isUpdated ? 'Updated' : isArchived ? 'Archived' : 'Active'

// CLEAR: Readable mapping
function getStatusLabel(item: Item): string {
  if (item.isNew) return 'New'
  if (item.isUpdated) return 'Updated'
  if (item.isArchived) return 'Archived'
  return 'Active'
}
typescript
// UNCLEAR: Chained reduces with inline logic
const result = items.reduce(
  (acc, item) => ({
    ...acc,
    [item.id]: {...acc[item.id], count: (acc[item.id]?.count ?? 0) + 1},
  }),
  {},
)

// CLEAR: Named intermediate step
const countById = new Map<string, number>()
for (const item of items) {
  countById.set(item.id, (countById.get(item.id) ?? 0) + 1)
}
4. Maintain Balance

Simplification has a failure mode: over-simplification. Watch for these traps:

  • Inlining too aggressively — removing a helper that gave a concept a name makes the call site harder to read
  • Combining unrelated logic — two simple functions merged into one complex function is not simpler
  • Removing "unnecessary" abstraction — some abstractions exist for extensibility or testability, not complexity
  • Optimizing for line count — fewer lines is not the goal; easier comprehension is
5. Scope to What Changed

Default to simplifying recently modified code. Avoid drive-by refactors of unrelated code unless explicitly asked to broaden scope. Unscoped simplification creates noise in diffs and risks unintended regressions.

The Simplification Process

Step 1: Understand Before Touching (Chesterton's Fence)

Before changing or removing anything, understand why it exists. This is Chesterton's Fence: if you see a fence across a road and don't understand why it's there, don't tear it down. First understand the reason, then decide if the reason still applies.

BEFORE SIMPLIFYING, ANSWER:
- What is this code's responsibility?
- What calls it? What does it call?
- What are the edge cases and error paths?
- Are there tests that define the expected behavior?
- Why might it have been written this way? (Performance? Platform constraint? Historical reason?)
- Check git blame: what was the original context for this code?

If you can't answer these, you're not ready to simplify. Read more context first.

Step 2: Identify Simplification Opportunities

Scan for these patterns — each one is a concrete signal, not a vague smell:

Structural complexity:

PatternSignalSimplification
Deep nesting (3+ levels)Hard to follow control flowExtract conditions into guard clauses or helper functions
Long functions (50+ lines)Multiple responsibilitiesSplit into focused functions with descriptive names
Nested ternariesRequires mental stack to parseReplace with if/else chains, switch, or lookup objects
Boolean parameter flagsdoThing(true, false, true)Replace with options objects or separate functions
Repeated conditionalsSame if check in multiple placesExtract to a well-named predicate function

Naming and readability:

PatternSignalSimplification
Generic namesdata, result, temp, val, itemRename to describe the content: userProfile, validationErrors
Abbreviated namesusr, cfg, btn, evtUse full words unless the abbreviation is universal (id, url, api)
Misleading namesFunction named get that also mutates stateRename to reflect actual behavior
Comments explaining "what"// increment counter above count++Delete the comment — the code is clear enough
Comments explaining "why"// Retry because the API is flaky under loadKeep these — they carry intent the code can't express

Redundancy:

PatternSignalSimplification
Duplicated logicSame 5+ lines in multiple placesExtract to a shared function
Dead codeUnreachable branches, unused variables, commented-out blocksRemove (after confirming it's truly dead)
Unnecessary abstractionsWrapper that adds no valueInline the wrapper, call the underlying function directly
Over-engineered patternsFactory-for-a-factory, strategy-with-one-strategyReplace with the simple direct approach
Redundant type assertionsCasting to a type that's already inferredRemove the assertion
Show full SKILL.md (465 more words)Show less
Step 3: Apply Changes Incrementally

Make one simplification at a time. Run tests after each change. Submit refactoring changes separately from feature or bug fix changes. A PR that refactors and adds a feature is two PRs — split them.

FOR EACH SIMPLIFICATION:
1. Make the change
2. Run the test suite
3. If tests pass → commit (or continue to next simplification)
4. If tests fail → revert and reconsider

Avoid batching multiple simplifications into a single untested change. If something breaks, you need to know which simplification caused it.

The Rule of 500: If a refactoring would touch more than 500 lines, invest in automation (codemods, sed scripts, AST transforms) rather than making the changes by hand. Manual edits at that scale are error-prone and exhausting to review.

Step 4: Verify the Result

After all simplifications, step back and evaluate the whole:

COMPARE BEFORE AND AFTER:
- Is the simplified version genuinely easier to understand?
- Did you introduce any new patterns inconsistent with the codebase?
- Is the diff clean and reviewable?
- Would a teammate approve this change?

If the "simplified" version is harder to understand or review, revert. Not every simplification attempt succeeds.

Language-Specific Guidance

TypeScript / JavaScript
typescript
// SIMPLIFY: Unnecessary async wrapper
// Before
async function getUser(id: string): Promise<User> {
  return await userService.findById(id)
}
// After
function getUser(id: string): Promise<User> {
  return userService.findById(id)
}

// SIMPLIFY: Verbose conditional assignment
// Before
let displayName: string
if (user.nickname) {
  displayName = user.nickname
} else {
  displayName = user.fullName
}
// After
const displayName = user.nickname || user.fullName

// SIMPLIFY: Manual array building
// Before
const activeUsers: User[] = []
for (const user of users) {
  if (user.isActive) {
    activeUsers.push(user)
  }
}
// After
const activeUsers = users.filter((user) => user.isActive)

// SIMPLIFY: Redundant boolean return
// Before
function isValid(input: string): boolean {
  if (input.length > 0 && input.length < 100) {
    return true
  }
  return false
}
// After
function isValid(input: string): boolean {
  return input.length > 0 && input.length < 100
}
Python
python
# SIMPLIFY: Verbose dictionary building
# Before
result = {}
for item in items:
    result[item.id] = item.name
# After
result = {item.id: item.name for item in items}

# SIMPLIFY: Nested conditionals with early return
# Before
def process(data):
    if data is not None:
        if data.is_valid():
            if data.has_permission():
                return do_work(data)
            else:
                raise PermissionError("No permission")
        else:
            raise ValueError("Invalid data")
    else:
        raise TypeError("Data is None")
# After
def process(data):
    if data is None:
        raise TypeError("Data is None")
    if not data.is_valid():
        raise ValueError("Invalid data")
    if not data.has_permission():
        raise PermissionError("No permission")
    return do_work(data)
React / JSX
tsx
// SIMPLIFY: Verbose conditional rendering
// Before
function UserBadge({user}: Props) {
  if (user.isAdmin) {
    return <Badge variant="admin">Admin</Badge>
  } else {
    return <Badge variant="default">User</Badge>
  }
}
// After
function UserBadge({user}: Props) {
  const variant = user.isAdmin ? 'admin' : 'default'
  const label = user.isAdmin ? 'Admin' : 'User'
  return <Badge variant={variant}>{label}</Badge>
}

// SIMPLIFY: Prop drilling through intermediate components
// Before — consider whether context or composition solves this better.
// This is a judgment call — flag it, don't auto-refactor.

Common Rationalizations

RationalizationReality
"It's working, no need to touch it"Working code that's hard to read will be hard to fix when it breaks. Simplifying now saves time on every future change.
"Fewer lines is always simpler"A 1-line nested ternary is not simpler than a 5-line if/else. Simplicity is about comprehension speed, not line count.
"I'll just quickly simplify this unrelated code too"Unscoped simplification creates noisy diffs and risks regressions in code you didn't intend to change. Stay focused.
"The types make it self-documenting"Types document structure, not intent. A well-named function explains why better than a type signature explains what.
"This abstraction might be useful later"Don't preserve speculative abstractions. If it's not used now, it's complexity without value. Remove it and re-add when needed.
"The original author must have had a reason"Maybe. Check git blame — apply Chesterton's Fence. But accumulated complexity often has no reason; it's just the residue of iteration under pressure.
"I'll refactor while adding this feature"Separate refactoring from feature work. Mixed changes are harder to review, revert, and understand in history.

Red Flags

  • Simplification that requires modifying tests to pass (you likely changed behavior)
  • "Simplified" code that is longer and harder to follow than the original
  • Renaming things to match your preferences rather than project conventions
  • Removing error handling because "it makes the code cleaner"
  • Simplifying code you don't fully understand
  • Batching many simplifications into one large, hard-to-review commit
  • Refactoring code outside the scope of the current task without being asked

Verification

After completing a simplification pass:

  • All existing tests pass without modification
  • Build succeeds with no new warnings
  • Linter/formatter passes (no style regressions)
  • Each simplification is a reviewable, incremental change
  • The diff is clean — no unrelated changes mixed in
  • Simplified code follows project conventions (checked against CLAUDE.md or equivalent)
  • No error handling was removed or weakened
  • No dead code was left behind (unused imports, unreachable branches)
  • A teammate or review agent would approve the change as a net improvement

© sanity-io, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .agents/skills/code-simplification of sanity-io/sanity.

Open the folder on GitHubat commit 982525c

Used in 11 other repositories

We found 16 copies of this SKILL.md (exact, near-identical or edited) in other folders, from 11 other GitHub owners. This page covers the copy in sanity-io/sanity, which our catalogue first saw on October 7, 2026.

Compare with similar skills

Code Simplification next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Code Simplification compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Code Simplification this skillsanity-io/sanity6.4k11 repos~3.8kAutomated safety check: PassMIT
PonytailDavidObando/gsharp5648 repos~1.7kAutomated safety check: PassMIT
Code Simplification for ego-litecitrolabs/ego-lite17k—~1.2kAutomated safety check: PassMIT
Refactor Pass for Simplicitystar-history/star-history9.6k1 repos~168Automated safety check: PassMIT
RTK Rust Code Simplifierrtk-ai/rtk83k—~1.1kAutomated safety check: PassApache-2.0
Deslopmillionco/react-doctor15k—~1.2kAutomated safety check: PassCustom licence

Similar skills

  • Ponytail

    DavidObando/gsharp

    Forces the laziest solution that actually works, simplest, shortest, most minimal.

    564 GitHub starsUsed in 8 repos~1.7k tokens
    DevelopmentAuto-check passed
  • Finds and implements evidence-backed simplifications in the ego-lite repository, such as dead code, duplicated state and speculative abstractions, without hiding behavior changes.

    17k GitHub stars~1.2k tokensUpdated 14 days ago
    DevelopmentAuto-check passed
  • Refactor Pass for Simplicity

    star-history/star-history

    Perform a refactor pass focused on simplicity after recent changes. Use when the user asks for a refactor/cleanup pass, simplification, or dead-code removal…

    9.6k GitHub starsUsed in 1 repo~168 tokens
    DevelopmentAuto-check passed
  • Reviews RTK's Rust code for over-engineering and verbose patterns, applying idioms like iterator chains and early returns while protecting a specific list of constraints from being simplified away.

    83k GitHub stars~1.1k tokensUpdated today
    DevelopmentAuto-check passed
  • Deslop

    millionco/react-doctor

    Simplify and refine recently modified code while preserving functionality.

    15k GitHub stars~1.2k tokensUpdated today
    DevelopmentAuto-check passed
  • Simplify Codebase

    tt-a1i/simplify-codebase

    Simplification audit or authorized codebase simplification whose stated objective is to remove accidental complexity.

    504 GitHub stars~2.2k tokensUpdated 1 mo ago
    DevelopmentAuto-check passed

More from sanity-io/sanity

All 34 skills in this repo
  • Playwright CLI

    sanity-io/sanity

    Official

    Automates browser interactions for web testing, form filling, screenshots, and data extraction.

    6.4k GitHub starsUsed in 18 repos~1.9k tokens
    Auto-check passed
  • Find Skills

    sanity-io/sanity

    Official

    Helps users discover and install agent skills when they ask questions like "how do I do X", "find a skill for X", "is there a skill that can...", or express interest in extending capabilities.

    6.4k GitHub starsUsed in 67 repos~1.2k tokens
    Auto-check passed
  • Official

    React and Next.js performance optimization guidelines from Vercel Engineering.

    6.4k GitHub starsUsed in 130 repos~1.6k tokens
    Auto-check passed
  • Before And After

    sanity-io/sanity

    Official

    Add existing screenshots or screen recordings to a GitHub pull request as a before/after or preview block.

    6.4k GitHub starsUsed in 1 repo~2.1k tokens
    Auto-check passed
  • React Devtools

    sanity-io/sanity

    Official

    React DevTools CLI for AI agents. An agent skill from sanity-io/sanity.

    6.4k GitHub starsUsed in 3 repos~2.1k tokens
    Auto-check passed
  • TDD

    sanity-io/sanity

    Official

    Test-driven development with red-green-refactor loop. An agent skill from sanity-io/sanity.

    6.4k GitHub starsUsed in 20 repos~1k tokens
    Auto-check passed

Categories

Questions about Code Simplification

What does Code Simplification do?

Simplifies code for clarity. An agent skill from sanity-io/sanity. Code Simplification is an agent skill from sanity-io/sanity, published by the product's own GitHub organization. Simplifies code for clarity.

When should I use Code Simplification?

Code Simplification fits situations like: refactoring code for clarity without changing behavior; code works but is harder to read; extend than it should be; reviewing code that has accumulated unnecessary complexity.

How do I install Code Simplification in Claude Code?

Run `npx skills add sanity-io/sanity --skill code-simplification -a claude-code`. Or copy the skill folder (.agents/skills/code-simplification in sanity-io/sanity) into .claude/skills/code-simplification in your project. Claude Code loads it when a task matches its description.

How do I install Code Simplification in Codex?

Run `npx skills add sanity-io/sanity --skill code-simplification -a codex`. Or copy the skill folder (.agents/skills/code-simplification in sanity-io/sanity) into .agents/skills/code-simplification in your project. Codex loads it when a task matches its description.

Can I use Code Simplification in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add sanity-io/sanity --skill code-simplification -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/code-simplification, .gemini/skills/code-simplification, .github/skills/code-simplification and .opencode/skills/code-simplification in your project.

What does Code Simplification need to run?

SKILL.md names no scripts, command-line tools or credentials: Code Simplification is instructions for the agent only. Our summary lists: Python 3.

Does Code Simplification access the network?

SKILL.md names 1 domain. As links in the text: github.com. This is read from the text; nothing was executed.

Is Code Simplification safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Code Simplification use?

Code Simplification is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Code Simplification use?

About 3.8k tokens (SKILL.md is roughly 15k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Code Simplification?

Skills that share tags, products or a category with Code Simplification: Ponytail (DavidObando/gsharp, 564 stars), Code Simplification for ego-lite (citrolabs/ego-lite, 17k stars), Refactor Pass for Simplicity (star-history/star-history, 9.6k stars) and RTK Rust Code Simplifier (rtk-ai/rtk, 83k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Code Simplification?

sanity-io (a GitHub organization, an official publisher) maintains it in sanity-io/sanity, which has 6,352 GitHub stars. The repository holds 34 skills in this directory. The repository was last updated on October 7, 2026.

Source: sanity-io/sanity on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.