Catalog
mattpocock/improve-codebase-architecture

mattpocock

improve-codebase-architecture

Find deepening opportunities in a codebase, informed by the domain language in CONTEXT.md and the decisions in docs/adr/. Use when the user wants to improve architecture, find refactoring opportunities, consolidate tightly-coupled modules, or make a codebase more testable and AI-navigable.

global
0installs0uses~1.3k
v1.0Saved May 2, 2026

Improve Codebase Architecture

Surface architectural friction and propose deepening opportunities — refactors that turn shallow modules into deep ones. The aim is testability and AI-navigability.

Glossary

Use these terms exactly in every suggestion. Consistent language is the point — don't drift into "component," "service," "API," or "boundary." Full definitions in LANGUAGE.md.

  • Module — anything with an interface and an implementation (function, class, package, slice).
  • Interface — everything a caller must know to use the module: types, invariants, error modes, ordering, config. Not just the type signature.
  • Implementation — the code inside.
  • Depth — leverage at the interface: a lot of behaviour behind a small interface. Deep = high leverage. Shallow = interface nearly as complex as the implementation.
  • Seam — where an interface lives; a place behaviour can be altered without editing in place. (Use this, not "boundary.")
  • Adapter — a concrete thing satisfying an interface at a seam.
  • Leverage — what callers get from depth.
  • Locality — what maintainers get from depth: change, bugs, knowledge concentrated in one place.

Key principles (see LANGUAGE.md for the full list):

  • Deletion test: imagine deleting the module. If complexity vanishes, it was a pass-through. If complexity reappears across N callers, it was earning its keep.
  • The interface is the test surface.
  • One adapter = hypothetical seam. Two adapters = real seam.

This skill is informed by the project's domain model. The domain language gives names to good seams; ADRs record decisions the skill should not re-litigate.

Process

1. Explore

Read the project's domain glossary and any ADRs in the area you're touching first.

Then use the Agent tool with subagent_type=Explore to walk the codebase. Don't follow rigid heuristics — explore organically and note where you experience friction:

  • Where does understanding one concept require bouncing between many small modules?
  • Where are modules shallow — interface nearly as complex as the implementation?
  • Where have pure functions been extracted just for testability, but the real bugs hide in how they're called (no locality)?
  • Where do tightly-coupled modules leak across their seams?
  • Which parts of the codebase are untested, or hard to test through their current interface?

Apply the deletion test to anything you suspect is shallow: would deleting it concentrate complexity, or just move it? A "yes, concentrates" is the signal you want.

2. Present candidates

Present a numbered list of deepening opportunities. For each candidate:

  • Files — which files/modules are involved
  • Problem — why the current architecture is causing friction
  • Solution — plain English description of what would change
  • Benefits — explained in terms of locality and leverage, and also in how tests would improve

Use CONTEXT.md vocabulary for the domain, and LANGUAGE.md vocabulary for the architecture. If CONTEXT.md defines "Order," talk about "the Order intake module" — not "the FooBarHandler," and not "the Order service."

ADR conflicts: if a candidate contradicts an existing ADR, only surface it when the friction is real enough to warrant revisiting the ADR. Mark it clearly (e.g. "contradicts ADR-0007 — but worth reopening because…"). Don't list every theoretical refactor an ADR forbids.

Do NOT propose interfaces yet. Ask the user: "Which of these would you like to explore?"

3. Grilling loop

Once the user picks a candidate, drop into a grilling conversation. Walk the design tree with them — constraints, dependencies, the shape of the deepened module, what sits behind the seam, what tests survive.

Side effects happen inline as decisions crystallize:

  • Naming a deepened module after a concept not in CONTEXT.md? Add the term to CONTEXT.md — same discipline as /grill-with-docs (see CONTEXT-FORMAT.md). Create the file lazily if it doesn't exist.
  • Sharpening a fuzzy term during the conversation? Update CONTEXT.md right there.
  • User rejects the candidate with a load-bearing reason? Offer an ADR, framed as: "Want me to record this as an ADR so future architecture reviews don't re-suggest it?" Only offer when the reason would actually be needed by a future explorer to avoid re-suggesting the same thing — skip ephemeral reasons ("not worth it right now") and self-evident ones. See ADR-FORMAT.md.
  • Want to explore alternative interfaces for the deepened module? See INTERFACE-DESIGN.md.
Files4
4 files · 9.9 KB

Select a file to preview

Overall Score

82/100

Grade

B

Good

Safety

92

Quality

85

Clarity

78

Completeness

72

Summary

A skill that guides AI agents through systematic architectural improvement of codebases by identifying shallow modules and proposing deepening opportunities. It combines domain-aware exploration (using CONTEXT.md vocabulary), structured architectural vocabulary (LANGUAGE.md), and decision capture (ADRs) to surface refactoring candidates that improve testability, maintainability, and AI-navigability.

Detected Capabilities

Codebase exploration and analysis using Agent tool with Explore subagentArchitectural pattern detection (shallow vs deep modules, seam identification)Domain language-aware terminology (uses CONTEXT.md vocabulary)ADR creation and conflict detectionCONTEXT.md maintenance and updates during design conversationsParallel sub-agent orchestration for interface design explorationDesign trade-off analysis and recommendations

Trigger Keywords

Phrases that MCP clients use to match this skill to user intent.

improve architectureidentify shallow modulesdeepening opportunitiesrefactor for testabilitymake codebase navigabledesign module interfacesexplore seamsreduce coupling

Risk Signals

WARNING

Skill references CONTEXT.md, ADRs, CONTEXT-FORMAT.md, ADR-FORMAT.md, and INTERFACE-DESIGN.md but does not include these files in the manifest

SKILL.md lines 33-34, 75-80, 85-87, and throughout supporting files
INFO

Skill instructs agent to create or update CONTEXT.md lazily during grilling conversations without explicit validation of file location or format

SKILL.md lines 75-77
INFO

References to external skills (/grill-with-docs) and assumed supporting documentation without clear dependency declaration

SKILL.md line 76

Use Cases

  • Identify shallow modules and tightly-coupled clusters in legacy codebases
  • Plan refactors that improve testability and reduce maintenance burden
  • Design deeper module interfaces to increase leverage and locality
  • Document architectural decisions and constraints as ADRs
  • Explore alternative interface designs for complex modules
  • Make codebases more navigable for AI agents through better abstraction

Quality Notes

  • Excellent glossary with precise, internally consistent architectural vocabulary — LANGUAGE.md is thorough and the skill enforces consistent terminology throughout
  • Well-structured three-phase process (Explore, Present, Grilling) with clear decision points and user agency
  • Deletion test and depth-vs-leverage framing are sophisticated heuristics that go beyond surface-level refactoring suggestions
  • Strong coupling to domain modeling — assumes CONTEXT.md exists and requires agent to maintain it, which is domain-aware but creates a dependency
  • DEEPENING.md provides pragmatic taxonomy of dependency categories with seam discipline rules, reducing guesswork in testing strategy
  • INTERFACE-DESIGN.md shows mature design thinking (Design It Twice pattern, sub-agent parallelization) but is somewhat aspirational — assumes agent can spawn multiple sub-agents reliably
  • ADR conflict handling is nuanced: only surface contradictions when 'friction is real enough to warrant revisiting' — delegates judgment call to agent rather than hard rules
  • No explicit guardrails on when NOT to deepen (e.g., when module churn is high, team stability is low) — assumes agent has good judgment about domain context
  • Vocabulary discipline enforced but may feel rigid to teams with existing architectural terminology — no guidance on migrating from old to new language
  • Supporting files are dense and reference-heavy; an agent would need to internalize all four files before making first suggestion
Model: claude-haiku-4-5-20251001Analyzed: May 2, 2026

Reviews

Add this skill to your library to leave a review.

No reviews yet

Be the first to share your experience.

Add mattpocock/improve-codebase-architecture to your library

Command Palette

Search for a command to run...