uncle-bob

Apply Robert C. Martin (Uncle Bob) principles for clean code, SOLID design, and clean architecture. Use when: (1) reviewing or refactoring code for quality, (2) designing modules, classes, or functions, (3) asked to "clean up" or improve code structure, (4) evaluating architectural boundaries, (5) naming things, (6) reducing coupling or increasing cohesion. Triggers on phrases like "clean code", "SOLID", "uncle bob", "clean architecture", "refactor for quality", "code smells", "single responsibility", "dependency inversion".

3,891 stars

Best use case

uncle-bob is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Apply Robert C. Martin (Uncle Bob) principles for clean code, SOLID design, and clean architecture. Use when: (1) reviewing or refactoring code for quality, (2) designing modules, classes, or functions, (3) asked to "clean up" or improve code structure, (4) evaluating architectural boundaries, (5) naming things, (6) reducing coupling or increasing cohesion. Triggers on phrases like "clean code", "SOLID", "uncle bob", "clean architecture", "refactor for quality", "code smells", "single responsibility", "dependency inversion".

Teams using uncle-bob should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/uncle-bob/SKILL.md --create-dirs "https://raw.githubusercontent.com/openclaw/skills/main/skills/agentsleader/uncle-bob/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/uncle-bob/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How uncle-bob Compares

Feature / Agentuncle-bobStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Apply Robert C. Martin (Uncle Bob) principles for clean code, SOLID design, and clean architecture. Use when: (1) reviewing or refactoring code for quality, (2) designing modules, classes, or functions, (3) asked to "clean up" or improve code structure, (4) evaluating architectural boundaries, (5) naming things, (6) reducing coupling or increasing cohesion. Triggers on phrases like "clean code", "SOLID", "uncle bob", "clean architecture", "refactor for quality", "code smells", "single responsibility", "dependency inversion".

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

Related Guides

SKILL.md Source

# Uncle Bob — Clean Code & Architecture Principles

Apply these principles when writing, reviewing, or refactoring code. They are not rules to follow blindly — use judgment, but default to clean.

## The Boy Scout Rule

Leave the code cleaner than you found it. Every commit should improve the codebase, even if slightly.

## Clean Code Fundamentals

### Naming

- Names reveal intent. If a name requires a comment, the name is wrong.
- Use pronounceable, searchable names. Avoid abbreviations, single letters (except loop counters), and prefixes.
- Classes/types: noun or noun phrase (`AccountManager`, `OrderRepository`).
- Functions/methods: verb or verb phrase (`calculateTotal`, `fetchUser`, `isValid`).
- Booleans: read as a question (`isActive`, `hasPermission`, `canExecute`).
- Avoid mental mapping. `r` is not a URL. Say `url`.

### Functions

- Small. Then smaller. A function does **one thing**.
- Ideally 0-2 arguments. 3+ is a smell — extract an options object or rethink the design.
- No side effects. A function named `checkPassword` must not also initialize a session.
- Command-Query Separation: a function either does something (command) or answers something (query), never both.
- Don't Repeat Yourself (DRY) — but don't abstract prematurely. Three instances of duplication is the threshold.
- Extract till you drop: if you can extract a meaningful sub-function, do it.

### Comments

- Good code is self-documenting. Comments compensate for failure to express in code.
- Legal, informative, clarifying intent, warning of consequences, and TODO comments are acceptable.
- Delete commented-out code. Version control remembers.
- Never write comments that restate what the code does (`// increment i` before `i++`).

### Formatting

- Vertical: newspaper metaphor — high-level summary at top, details below.
- Related functions stay close. Caller above callee.
- Horizontal: avoid scrolling. Keep lines short.
- Consistent formatting across the team trumps personal preference.

### Error Handling

- Prefer exceptions/Result types over error codes.
- Don't return null. Don't pass null.
- Write try-catch at the top level of a function, not scattered throughout.
- Error handling is **one thing** — a function that handles errors should do little else.
- Define exception classes in terms of the caller's needs, not the thrower's implementation.

### Objects vs. Data Structures

- Objects hide data, expose behavior. Data structures expose data, have no behavior.
- Don't mix them. A class with public fields AND business methods is the worst of both worlds.
- Law of Demeter: a method should only call methods on its own object, its parameters, objects it creates, or its direct dependencies. No `a.getB().getC().doThing()`.

## SOLID Principles

For detailed explanations and examples, see [references/solid.md](references/solid.md).

- **S — Single Responsibility**: A class has one reason to change. One actor, one responsibility.
- **O — Open/Closed**: Open for extension, closed for modification. Use polymorphism, not conditionals.
- **L — Liskov Substitution**: Subtypes must be substitutable for their base types without breaking behavior.
- **I — Interface Segregation**: Many specific interfaces beat one general-purpose interface. Clients should not depend on methods they don't use.
- **D — Dependency Inversion**: Depend on abstractions, not concretions. High-level modules must not depend on low-level modules.

## Clean Architecture

For the full architecture guide, see [references/clean-architecture.md](references/clean-architecture.md).

### The Dependency Rule

Source code dependencies must point **inward** — toward higher-level policies.

```
Frameworks & Drivers → Interface Adapters → Use Cases → Entities
(outer)                                                  (inner)
```

- **Entities**: enterprise business rules, pure domain objects.
- **Use Cases**: application-specific business rules (orchestrate entities).
- **Interface Adapters**: convert between use case format and external format (controllers, presenters, gateways).
- **Frameworks & Drivers**: the outermost layer (DB, web framework, UI). Details. Replaceable.

### Key Rules

- Nothing in an inner circle knows about anything in an outer circle.
- Data crossing boundaries is simple DTOs or value objects — never framework-specific types.
- The database is a detail. The web is a detail. Frameworks are details.

## Component Principles

- **Common Closure Principle (CCP)**: classes that change together belong together.
- **Common Reuse Principle (CRP)**: don't force users to depend on things they don't use.
- **Stable Dependencies Principle**: depend in the direction of stability.
- **Stable Abstractions Principle**: stable components should be abstract.

## Code Smells (Red Flags)

- Rigidity: small change causes cascade of changes elsewhere.
- Fragility: change in one place breaks unrelated code.
- Immobility: can't reuse a module without dragging its dependencies.
- Needless complexity: speculative generality, premature abstraction.
- Needless repetition: copy-paste code (DRY violation).
- Opacity: code is hard to understand.
- Long functions, large classes, long parameter lists, boolean flags, switch/case on type.

## Testing (TDD)

- **Three Laws of TDD**: (1) Write a failing test first. (2) Write only enough test to fail. (3) Write only enough production code to pass.
- Tests are first-class code. Keep them clean, readable, fast.
- One assert per test (guideline, not dogma). One concept per test.
- F.I.R.S.T.: Fast, Independent, Repeatable, Self-validating, Timely.
- Test boundaries, not implementations. Test behavior, not methods.

## Applying These Principles

When reviewing or writing code, check in this order:

1. **Readability**: Can someone understand this in 30 seconds?
2. **Naming**: Do names reveal intent?
3. **Function size**: Can anything be extracted?
4. **Single Responsibility**: Does each unit have one reason to change?
5. **Dependencies**: Do they point toward stability/abstraction?
6. **Coupling**: Is anything unnecessarily coupled?
7. **Error handling**: Is it clean and consistent?
8. **Tests**: Are they present, clean, and testing behavior?

Related Skills

---

3891
from openclaw/skills

name: article-factory-wechat

Content & Documentation

humanizer

3891
from openclaw/skills

Remove signs of AI-generated writing from text. Use when editing or reviewing text to make it sound more natural and human-written. Based on Wikipedia's comprehensive "Signs of AI writing" guide. Detects and fixes patterns including: inflated symbolism, promotional language, superficial -ing analyses, vague attributions, em dash overuse, rule of three, AI vocabulary words, negative parallelisms, and excessive conjunctive phrases.

Content & Documentation

find-skills

3891
from openclaw/skills

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. This skill should be used when the user is looking for functionality that might exist as an installable skill.

General Utilities

tavily-search

3891
from openclaw/skills

Use Tavily API for real-time web search and content extraction. Use when: user needs real-time web search results, research, or current information from the web. Requires Tavily API key.

Data & Research

baidu-search

3891
from openclaw/skills

Search the web using Baidu AI Search Engine (BDSE). Use for live information, documentation, or research topics.

Data & Research

agent-autonomy-kit

3891
from openclaw/skills

Stop waiting for prompts. Keep working.

Workflow & Productivity

Meeting Prep

3891
from openclaw/skills

Never walk into a meeting unprepared again. Your agent researches all attendees before calendar events—pulling LinkedIn profiles, recent company news, mutual connections, and conversation starters. Generates a briefing doc with talking points, icebreakers, and context so you show up informed and confident. Triggered automatically before meetings or on-demand. Configure research depth, advance timing, and output format. Walking into meetings blind is amateur hour—missed connections, generic small talk, zero leverage. Use when setting up meeting intelligence, researching specific attendees, generating pre-meeting briefs, or automating your prep workflow.

Workflow & Productivity

self-improvement

3891
from openclaw/skills

Captures learnings, errors, and corrections to enable continuous improvement. Use when: (1) A command or operation fails unexpectedly, (2) User corrects Claude ('No, that's wrong...', 'Actually...'), (3) User requests a capability that doesn't exist, (4) An external API or tool fails, (5) Claude realizes its knowledge is outdated or incorrect, (6) A better approach is discovered for a recurring task. Also review learnings before major tasks.

Agent Intelligence & Learning

botlearn-healthcheck

3891
from openclaw/skills

botlearn-healthcheck — BotLearn autonomous health inspector for OpenClaw instances across 5 domains (hardware, config, security, skills, autonomy); triggers on system check, health report, diagnostics, or scheduled heartbeat inspection.

DevOps & Infrastructure

linkedin-cli

3891
from openclaw/skills

A bird-like LinkedIn CLI for searching profiles, checking messages, and summarizing your feed using session cookies.

Content & Documentation

notebooklm

3891
from openclaw/skills

Google NotebookLM 非官方 Python API 的 OpenClaw Skill。支持内容生成(播客、视频、幻灯片、测验、思维导图等)、文档管理和研究自动化。当用户需要使用 NotebookLM 生成音频概述、视频、学习材料或管理知识库时触发。

Data & Research

小红书长图文发布 Skill

3891
from openclaw/skills

## 概述

Content & Documentation