Skip to content
Agentmart
Submit a tool

clean-code

clean-code, the rules for readable code.

Skill by renefatuaki

IndexedMIT
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/renefatuaki-clean-code

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

clean-code, the rules for readable code. Use when writing code, editing or refactoring code, or when the user names the clean-code skill. Covers names, functions, control flow, classes and vertical layout, and delegates comments to code-comments and documentation to project-docs.

Use cases: writing

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/clean-code

What's inside

Skill name
clean-code
Description
clean-code, the rules for readable code. Use when writing code, editing or refactoring code, or when the user names the clean-code skill. Covers names, functions, control flow, classes and vertical layout, and delegates comments to code-comments and documentation to project-docs.
License
MIT
Instructions
26 lines in SKILL.md · view on GitHub

Files (20)

  • SKILL.md
  • coverage.md · formatting/
  • formatting.md · formatting/
  • checkstyle.xml · formatting/java/
  • .editorconfig · formatting/kotlin/
  • detekt.yml · formatting/kotlin/
  • ruff.toml · formatting/python/
  • .swift-format · formatting/swift/
  • .swiftlint.yml · formatting/swift/
  • .oxfmtrc.jsonc · formatting/typescript/
  • .oxlintrc.jsonc · formatting/typescript/
  • java.md · languages/
  • kotlin.md · languages/
  • python.md · languages/
  • swift.md · languages/
  • typescript.md · languages/
  • classes.md · references/
  • control-flow.md · references/
  • functions.md · references/
  • naming.md · references/

SKILL.md (first lines)

Rules for every symbol you write or touch. Names carry the meaning, functions do one thing at one level of abstraction, control flow stays flat, classes stay focused, and a comment appears only where the code cannot speak.

## Steps

1. **Pick the language guide.** Map the file extension and read the guide before writing: `.swift` [languages/swift.md](languages/swift.md), `.kt` `.kts` [languages/kotlin.md](languages/kotlin.md), `.java` [languages/java.md](languages/java.md), `.ts` `.tsx` `.js` `.jsx` [languages/typescript.md](languages/typescript.md), `.py` [languages/python.md](languages/python.md). For any other language apply the rules below with that language's own idioms. Where a language guide and a reference under `references/` differ, the language guide wins.
2. **Read the neighbouring code.** Before naming anything, read the file and its siblings and adopt their verbs, nouns and error idiom. Consistency beats preference: when the project says `fetch`, the new function says `fetch`. A misleading or domain-wrong existing name is the one exception, see [Renaming](#renaming).
3. **Name every touched symbol.** Nouns for variables, properties and classes. Verbs for functions and methods. A yes or no question for booleans. Specific over generic, so `createUser` instead of `create` and `product` instead of `item`. Full words, no slang, no abbreviation the reader must decode, no adjective the context already supplies. Details in [references/naming.md](references/naming.md).
4. **Shape every touched function.** One thing: every statement one level of abstraction below what the name promises, none mixed with lower detail. Few parameters, related ones grouped in one container. Every side effect implied by the name or the calling context. Each piece of logic in one place. Extract when a block is a coherent sub-task or needs more interpretation than its surroundings, and stop extracting when the split only renames, forces scrolling, or has no free name. Explicit over compact: the longer form wins the moment the reader has to decode the shorter one, the language guide lists the constructs that tempt. Details in [references/functions.md](references/functions.md), [laziness-protocol](../../principles/laziness-protocol/SKILL.md) and [minimize-reader-load](../../principles/minimize-reader-load/SKILL.md).
5. **Flatten control flow.** Guards at the top, failing fast. Positive checks, except where one negative check replaces a growing list of positives. Extract a nested control structure into its own function. Replace repeated type checks with polymorphism behind a factory. Signal failure through a structured error contract the language or the project enforces, never through a code, a flag or a message object returned beside a normal value. Details in [references/control-flow.md](references/control-flow.md) and [model-the-domain](../../principles/model-the-domain/SKILL.md).
6. **Keep classes focused.** Each class is a real object (private data, public behaviour) or a data container (public data, no behaviour beyond read-only derived values), never both. One responsibility, high cohesion. Real objects follow the Law of Demeter and are told, not asked. Extension by adding a subclass or implementation, not by editing a growing switch. Details in [references/classes.md](references/classes.md), [boundary-discipline](../../principles/boundary-discipline/SKILL.md) and [type-system-discipline](../../principles/type-system-discipline/SKILL.md).
7. **Order the file.** Callers above callees, public API above private helpers. A file that holds unrelated things is split. Line length and indentation belong to the project formatter. Details in [formatting/formatting.md](formatting/formatting.md).
8. **Keep tests honest.** Every test the change writes or touches calls the code the way its users do and asserts the result they observe against a literal expected value. Details in [test-behavior-not-implementation](../../principles/test-behavior-not-implementation/SKILL.md).
9. **Apply code-comments.** Every comment in the touched symbol follows the code-comments skill. Nothing else about comments lives here.
10. **Apply project-docs.** When the change alters a behaviour, a command, an option or a path that the project's documentation describes, bring that documentation in line with the project-docs skill. Nothing else about documentation lives here.

Done when every touched symbol has a descriptive name consistent with the project, every touched function does one thing at one level of abstraction with no unexpected side effect and no expression the reader must decode, no nested control structure remains that a guard or an extraction would flatten, every touched class is a real object or a data container with one responsibility, the file reads top down, every touched test calls the code the way its users do and asserts the result they observe against a literal expected value, the comments pass code-comments, and the documentation still matches the code.

## Renaming

Read the existing names with the domain in mind. A name that describes something other than what the symbol does or holds, or uses the wrong domain term, is not adopted. Rename it when you have checked every dependency and the change is safe: all call sites, overrides, serialized keys, reflection and string references. For a rename that spans many files or touches a public API, dispatch a sub-agent to trace the dependencies first. When the risk stays unclear, keep the name, and name the better one and the reason in your reply. Never block on a question for a rename.

## Scope

The rules apply to the symbols you write or change. Surrounding code stays as it is, so the diff shows the intended change. A file you touch only to add a call keeps its shape.

From renefatuaki/skills, MIT.

More from renefatuaki/skills

Signals

Stars
0
Forks
0
Open issues
0
Last commit (this folder)
Sep 22, 2026 (1 month ago)
Last release
Oct 24, 2026 (4 days ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from renefatuaki

Cite this page

clean-code skill. Agent Mart. https://agentmart.dev/skills/renefatuaki-clean-code (last updated 2026-10-24)