ai-codebase-deep-modules
Designs and refactors software codebases to be AI-friendly by aligning the filesystem with domain/feature boundaries, creating deep (greybox) modules with small public interfaces, enforcing import boundaries, and tightening tests/feedback loops. Use when the user asks to "make the codebase AI-ready", "reduce coupling", "introduce deep modules", "create module boundaries", "restructure folders by feature", "define service interfaces", or "plan a refactor + tests so AI agents can work safely".
What this skill does
# AI Codebase Deep Modules Turn “a web of shallow, cross-importing files” into a codebase that is **easy for AI (and humans) to navigate, change, and test**. This skill is built around four ideas: 1. **The codebase matters more than the prompt.** AI struggles when feedback is slow, structure is unclear, and dependencies are tangled. 2. **Match the filesystem to the mental model.** Group code the way you *think* about it (features/domains/services), not as a grab-bag of utilities. 3. **Prefer deep modules.** Lots of implementation behind a small, well-designed public interface. 4. **Treat deep modules as greyboxes.** Lock behaviour with tests at the boundary; internal code becomes replaceable. ## When to use this skill Use this skill when the user wants any of the following: - Refactor an existing repo to be **more navigable** and **safer for AI-assisted coding** - Introduce/strengthen **module boundaries**, reduce coupling, or eliminate “spaghetti imports” - Restructure the repo **by feature/domain** (a “map you hold in your head” reflected on disk) - Define **service/module interfaces**, public APIs, and “only import from here” rules - Build **fast feedback loops** (tests, typecheck, lint) so AI can verify changes quickly - Plan a refactor with **incremental steps**, acceptance criteria, and tests Do **not** use this skill for: - One-off debugging of an isolated error (use normal debugging / code review) - Purely stylistic refactors with no boundary or testing implications - Writing greenfield code where the user already has a clear modular architecture (unless they want a module template) ## Inputs this skill expects (minimal) If available, ask for or infer: - Language/runtime (TS/JS, Python, Go, Java/Kotlin, etc.) - How to run **the fastest meaningful check** (unit tests, typecheck, lint, build) - The top 3–7 “chunks” of product behaviour (domains/features/services) - Any hard constraints (monorepo tooling, existing packages, deployment boundaries) If the user hasn’t provided this, **do not stall**. Make best-effort guesses by inspecting: - `package.json`, `pyproject.toml`, `go.mod`, `pom.xml`, `build.gradle`, `Makefile`, `justfile` - `src/`, `app/`, `packages/`, `services/`, `modules/` - existing test folders and CI configs --- # Workflow ## Step 0 — Establish the feedback loop (non-negotiable) Goal: ensure there is a **fast “did it work?” loop** before and during refactors. 1. Identify the quickest command that provides signal: - Typecheck: `tsc -p tsconfig.json` - Unit tests: `npm test`, `pytest -q`, `go test ./...` - Lint: `eslint .`, `ruff check`, `golangci-lint run` 2. Prefer a **single “verify” entrypoint**: - `make verify`, `just verify`, `npm run verify`, `./scripts/verify.sh` 3. If tests are missing, propose the smallest viable starting point: - Smoke tests for core flows - Contract tests for the boundaries you’re about to introduce 4. If the loop is slow, propose speed-ups *before* large refactors: - Run only impacted packages - Split unit vs integration tests - Cache dependencies in CI Deliverable: a short “Feedback loop” section with the exact commands and expected outputs. ## Step 1 — Reconstruct the mental map of the codebase Goal: identify the natural groupings that already exist in the product. 1. List the product domains/features (aim for 3–10): - e.g. `auth`, `billing`, `thumbnail-editor`, `video-editor`, `cms-forms` 2. For each domain, identify: - entrypoints (routes/controllers/handlers) - data boundaries (models/schemas) - external dependencies (APIs, DB, queues) 3. Capture the current pain: - “Where do people get lost?” - “What breaks when we change X?” - “Where are imports crossing domains?” Deliverable: a **Module Map** (table) with: domain, responsibilities, key files, current coupling risks. ## Step 2 — Design deep modules (few, chunky, stable interfaces) Goal: reduce the number of things the agent must keep in working memory. For each domain/module candidate: 1. Define the **public interface** (small surface area): - functions/classes/commands exposed - public types/data contracts - error/edge-case semantics 2. Define what is **explicitly internal**: - helper functions, adapters, DB queries, parsing, etc. 3. Decide the dependency direction: - Prefer: `domain → shared primitives` - Avoid: `domain ↔ domain` cross-imports 4. Keep the interface boring and predictable: - stable names - minimal parameters - explicit return types / result objects Deliverable: an **Interface Spec** for each deep module: - Public API (signatures) - Invariants (pre/post conditions) - Examples (happy path + one edge case) See: [references/module-templates.md](references/module-templates.md) ## Step 3 — Align the filesystem to the map (progressive disclosure) Goal: make it obvious where to look. Default rule: **outside code imports only from a module’s public entrypoint**. Recommended structure (adapt per language): - `src/<module>/` - `index.*` (public exports) - `types.*` (public types) - `internal/` (implementation details; not imported from outside) - `__tests__/` or `tests/` (contract tests for the public API) If the repo uses packages, prefer `packages/<module>/` with explicit exports. Deliverable: a “Move plan” listing: - directories to create - files to move - import paths to update - temporary compatibility shims (if needed) ## Step 4 — Make modules greyboxes with boundary tests Goal: you shouldn’t need to understand internals to trust behaviour. 1. Write/identify **contract tests** for each module’s public API: - behavioural checks - key error cases - side effects (DB writes, events emitted) via fakes/spies 2. Keep tests close to the interface: - treat internals as replaceable 3. Only add internal unit tests where: - performance-critical logic needs tight coverage - tricky algorithms deserve direct tests Deliverable: test plan + initial contract test skeletons. See: [references/testing-and-feedback.md](references/testing-and-feedback.md) ## Step 5 — Enforce boundaries (so the architecture stays true) Goal: prevent the codebase from drifting back into a web. Pick the lightest viable enforcement: - **Conventions + code review** (baseline) - **Lint rules** (TS/JS: `no-restricted-imports`, ESLint boundary plugins) - **Architecture tests** (assert “module A cannot import module B”) - **Language-level boundaries** (Go `internal/`, Rust `pub(crate)`, Java modules) Deliverable: an “Enforcement” section with the exact rules and where to configure them. See: [references/boundary-enforcement.md](references/boundary-enforcement.md) ## Step 6 — Refactor incrementally (strangler pattern) Goal: avoid giant-bang rewrites. Suggested sequence: 1. Create the new module folder and **public interface** (empty implementation). 2. Add contract tests (they will fail). 3. Add a thin adapter that wraps existing code (tests pass). 4. Move internals gradually behind the interface: - keep exports stable - delete old entrypoints only once usage is migrated 5. Repeat module-by-module. Deliverable: a stepwise refactor plan with checkpoints and rollback options. --- # Output format (what to produce) When this skill is activated, produce a structured plan using this outline: 1. **Current state summary** (1–2 paragraphs) 2. **Fast feedback loop** (exact commands) 3. **Module Map** (table) 4. **Proposed deep modules** (list + responsibilities) 5. **Interface specs** (per module) 6. **Filesystem changes** (move plan) 7. **Boundary enforcement** (rules + tooling) 8. **Testing strategy** (contract tests first) 9. **Incremental migration steps** (with checkpoints) Optional: copy the template from `assets/architecture-plan-template.md`. --- # Examples ## Example 1 — Broad request User says: “Make our TypeScript monorepo more AI-friendly. It’s hard to find things and tests are slow.” Actions: 1. Identify `verify`
Related in Code Review
gstack
IncludedFast headless browser for QA testing and site dogfooding. Navigate pages, interact with elements, verify state, diff before/after, take annotated screenshots, test responsive layouts, forms, uploads, dialogs, and capture bug evidence. Use when asked to open or test a site, verify a deployment, dogfood a user flow, or file a bug with screenshots. (gstack)
startup-due-diligence
IncludedLegal due diligence review for seed-stage and Series A startups (US, Delaware C-Corp focus). Supports both investor and founder perspectives. Capabilities include: (1) Interactive document review and issue spotting; (2) Document request list generation; (3) Cap table and SAFE/convertible note analysis; (4) Red flag identification with severity ratings; (5) Diligence report generation. TRIGGERS: due diligence, DD, startup investment, cap table review, Series A, seed round, investor diligence, legal review startup, SAFE analysis, convertible note, 409A, founder vesting.
interview-master
IncludedThis skill should be used when the user asks to "generate interview questions", "prepare for interview", "optimize resume", "conduct mock interview", "analyze git commits for resume", "generate resume from code", "review my resume", or mentions interview preparation, career assistance, or extracting project experience from git history. Provides comprehensive interview and career development guidance for both job seekers and interviewers.
fix-issue
IncludedFixes GitHub issues using parallel analysis agents for root cause investigation, code exploration, and regression detection. Reads issue context from gh CLI, searches codebase and memory for related patterns, generates a fix with tests, and links the resolution back to the issue via PR. Includes prevention analysis to avoid recurrence. Use when debugging errors, resolving regressions, fixing bugs, or triaging issues.
sf-apex
IncludedGenerates and reviews Salesforce Apex code with 150-point scoring. TRIGGER when: user writes, reviews, or fixes Apex classes, triggers, test classes, batch/queueable/schedulable jobs, or touches .cls/.trigger files. DO NOT TRIGGER when: LWC JavaScript (use sf-lwc), Flow XML (use sf-flow), SOQL-only queries (use sf-soql), or non-Salesforce code.
swift-development
IncludedComprehensive Swift development for building, testing, and deploying iOS/macOS applications. Use when Claude needs to: (1) Build Swift packages or Xcode projects from command line, (2) Run tests with XCTest or Swift Testing framework, (3) Manage iOS simulators with simctl, (4) Handle code signing, provisioning profiles, and app distribution, (5) Format or lint Swift code with SwiftFormat/SwiftLint, (6) Work with Swift Package Manager (SPM), (7) Implement Swift 6 concurrency patterns (async/await, actors, Sendable), (8) Create SwiftUI views with MVVM architecture, (9) Set up Core Data or SwiftData persistence, or any other Swift/iOS/macOS development tasks.