Code Complexity logo

Code Complexity

Community
AnastasiyaW
code-complexity

Keep each unit comprehensible while the code grows: deep modules over shallow ones, information hiding, honest names, small functions with one job, error handling that does not lose the error, DRY and orthogonality, design by contract, and not leaving broken windows. Merges module-complexity management with naming/function/error-handling discipline and the pragmatic meta-rules. Use when writing or reviewing a function, class or module; when an interface feels wide, a class feels shallow, or a change in one place forces edits in three; when the user says "this is hard to follow", "clean this up", "review this code", "is this a good abstraction", "too many parameters", "pass-through method", "duplicated logic", or asks about naming, comments, error handling or unit tests. Do NOT use to decide where a new module LIVES or which modules exist (use architecture-first), to plan capacity or storage (use system-and-data-design), to execute a named transformation on a file that is already too large (use refactoring-safely), or to strip over-engineering on request (use lean-code). This makes a unit comprehensible; it does not draw the system's boundaries.

Overview

PublisherAnastasiyaW
Repositorycodex-claude-code-config
Skill namecode-complexity
Stars
212
Forks
32
Bundled files
21
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 21 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by AnastasiyaW on GitHub. Read the source before you install it.

Installation

Install the Code Complexity AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/AnastasiyaW/codex-claude-code-config/tree/main/skills/development/code-complexity
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/AnastasiyaW/codex-claude-code-config.git /tmp/codex-claude-code-config
mkdir -p .claude/skills
cp -r /tmp/codex-claude-code-config/skills/development/code-complexity .claude/skills/code-complexity
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Code Complexity in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Code Complexity on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Code Complexity is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Code complexity — keeping a unit comprehensible

Complexity is not how clever the code is. It is how much you must hold in your head to change one line safely. It accumulates by increments that each look acceptable, which is why it is never one bad commit's fault and always everyone's problem.

The two symptoms worth memorising

Change amplification — one decision, many edits. If changing a timeout means editing five files, that decision was not encapsulated anywhere.

Cognitive load — how much you must know to be safe. A function that is correct only if you know that the caller already took a lock has exported its complexity to everyone who reads it.

Both are properties of the interface, not the implementation. Which gives the rule:

Deep over shallow

A module's value is functionality it provides ÷ interface you must learn. Deep = small interface, substantial behaviour behind it. Shallow = large interface, little behind it.

  • A pass-through method that only calls one other method with the same arguments is negative value: it adds an interface without adding behaviour.
  • "One class per concept, many tiny classes" is not automatically good. Many shallow classes cost more total interface than a few deep ones.
  • The right question is never "is this class small?" but "how much do I need to know to use it?"

Information hiding — and its inverse

Every design decision that might change should be known to exactly one module. The inverse — information leakage — is when a decision shows up in two places: a file format known to both the reader and the writer, a status string parsed by three modules, a lock the caller has to remember.

Test: if this decision changed, how many files would I edit? More than one is leakage.

Names, functions, errors — the unit level

  • Names: a name that needs a comment to explain it is the wrong name. If you cannot name it, you do not yet know what it does — that is information, not a naming problem.
  • Functions: one job, one level of abstraction, few parameters. Three or more booleans in a signature is a sign that several functions are hiding in one.
  • Comments: comment the why and the constraint, never the what. A comment that restates the code rots the moment the code changes. A comment that records a ceiling or a reason is the most durable thing in the file.
  • Errors: define them out of existence where you can (an operation that cannot fail needs no error path); where you cannot, fail loudly and early. Silently swallowing is the failure that looks like success — the most expensive kind.
  • Tests: one assertion of behaviour per test, named for the behaviour. A test that needs a comment to say what it proves is not proving it clearly.

The pragmatic meta-rules

  • DRY is about knowledge, not text. Two identical lines expressing two unrelated decisions are not duplication. One decision expressed in two places is, even if the code looks different.
  • Orthogonality: changing one thing should not move another. If it does, they are coupled through something you have not named.
  • Design by contract: state preconditions and invariants, and assert them. An assertion is executable documentation that cannot rot.
  • Broken windows: one tolerated mess licenses the next. Fix it while it is one.
  • Tracer bullets: build one thin end-to-end path first, then widen. It proves the seams; a stack of half-built layers proves nothing.
  • Reversibility: prefer decisions that can be undone. There are fewer final answers than the design meeting suggests.

Review pass — in this order

  1. Does any interface require knowledge it did not give you? (leakage)
  2. Would a change to one decision edit more than one file? (amplification)
  3. Any pass-through methods, or classes whose interface is most of their content?
  4. Any name that needs its comment?
  5. Any error path that continues on failure without saying so?
  6. Any duplicated decision — not duplicated text?

References — load on demand

  • references/software-design-philosophy/deep-modules.md, information-hiding.md, complexity-symptoms.md, general-vs-special.md, strategic-programming.md, comments-as-design.md
  • references/clean-code/naming-conventions.md, functions-and-methods.md, error-handling.md, testing-principles.md, comments-formatting.md, code-smells.md
  • references/pragmatic-programmer/dry-orthogonality.md, contracts-assertions.md, tracer-bullets.md, reversibility.md, broken-windows.md, estimation-portfolio.md
  • *-original.md — the source skills' own framework prose, kept verbatim

Gotchas

  • Small is not simple. Splitting a deep module into six shallow ones raises total interface and lowers comprehensibility while looking like progress.
  • Abstraction without a second caller. An interface with one implementation and no test double is a guess about the future priced as complexity today.
  • DRY applied to text. Merging two coincidentally-identical blocks couples two things that had no reason to change together, and the next change breaks one of them.
  • "Clean" as a rewrite. Restructuring without a behaviour test is not cleaning, it is gambling — see refactoring-safely for the transformation with a net.

Troubleshooting

SymptomCauseFix
Everyone keeps re-reading the same function to use itShallow interface, deep obligationsMove the obligation inside; make the caller's job smaller
A bug fix in one module breaks anotherLeaked decision or hidden couplingFind the shared knowledge, give it one owner
Tests pass and production failsAn error path that continues silentlyMake it loud; assert the precondition
Signature grew a fourth booleanSeveral functions in a trench coatSplit by behaviour, not by parameter

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Code Complexity AI skill do?

Keep each unit comprehensible while the code grows: deep modules over shallow ones, information hiding, honest names, small functions with one job, error handling that does not lose the error, DRY and orthogonality, design by contract, and not leaving broken windows. Merges module-complexity management with naming/function/error-handling discipline and the pragmatic meta-rules. Use when writing or reviewing a function, class or module; when an interface feels wide, a class feels shallow, or a change in one place forces edits in three; when the user says "this is hard to follow", "clean this...

Why use Code Complexity on TypingMind?

Because you install it once and use it with any model. Code Complexity is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Code Complexity in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/AnastasiyaW/codex-claude-code-config/tree/main/skills/development/code-complexity. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Code Complexity?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Code Complexity?

As many as you like. As long as a model supports skills, you can use Code Complexity with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Code Complexity AI skill free?

Yes. It is published on GitHub by AnastasiyaW under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇