Scans new/modified code against multi-mono shared libraries (@metasaver/core-utils, @metasaver/core-service-utils, @metasaver/core-components) to detect DRY violations. Use when auditing code for duplicate functions, types, or components that already exist in shared packages. Returns violation reports with suggested import replacements.
Inherits all available tools
Additional assets for this skill
This skill inherits all available tools. When active, it can use any tool Claude has access to.
templates/extraction-patterns.txttemplates/scan-script.sh.templatetemplates/violation-report.txtPurpose: Prevent code duplication by scanning new/modified code against multi-mono shared libraries.
Use when:
Target libraries (packages/):
@metasaver/core-utils - String helpers (capitalize, toKebabCase, toCamelCase), color helpers, style helpers (cn)@metasaver/core-service-utils - Service factory, middleware, auth, health checks@metasaver/core-database - Database client utilities@metasaver/core-agent-utils - Agent factory patterns@metasaver/core-mcp-utils - MCP server utilities@metasaver/core-workflow-utils - Workflow with HITLTarget components (components/):
@metasaver/core-components - Core UI: ZButton, ZCard, ZDataTable, ZErrorBoundary, ZLoading@metasaver/core-layouts - Layouts: ZAdminLayout, ZUserDropdown, useImpersonation| Violation Type | Library | Examples |
|---|---|---|
| String utilities | @metasaver/core-utils | capitalize(), toKebabCase(), toCamelCase() |
| Style utilities | @metasaver/core-utils | cn(), getColorClasses() |
| Service patterns | @metasaver/core-service-utils | createService(), authMiddleware(), healthCheck() |
| Database clients | @metasaver/core-database | createClient(), database types |
| Core UI components | @metasaver/core-components | ZButton, ZCard, ZDataTable, ZErrorBoundary |
| Layout components | @metasaver/core-layouts | ZAdminLayout, ZUserDropdown, useImpersonation |
Get list of new/modified files from git:
# Staged files
git diff --cached --name-only --diff-filter=AM
# Uncommitted changes
git diff --name-only --diff-filter=AM
# Specific branch vs main
git diff main...HEAD --name-only --diff-filter=AM
Filter to code files only: .ts, .tsx, .js, .jsx
For each modified file, extract:
export function functionName(), export const functionName = ()export type TypeName, export interface InterfaceNameexport function ComponentName(), export const ComponentName: React.FCexport const schemaName = z.object()Use Grep tool with patterns from templates/extraction-patterns.txt
For each extracted signature, check if similar exists in shared packages:
Scan multi-mono packages/:
# Search utils for function
grep -r "export.*functionName" packages/utils/src/
# Search service-utils for middleware/factory
grep -r "export.*functionName" packages/service-utils/src/
# Search database for client utilities
grep -r "export.*functionName" packages/database/src/
Scan multi-mono components/:
# Search core components
grep -r "export.*ZComponentName" components/core/src/
# Search layouts
grep -r "export.*ZLayoutName" components/layouts/src/
Use fuzzy matching for similar names (e.g., capitalize matches toCapitalize, capitalizeFirst)
If potential match found:
Comparison heuristics:
For each violation, output using format from templates/violation-report.txt:
ā VIOLATION: [file]:[line] [signature]
Duplicates: @metasaver/[package]/[module].[export]
Similarity: [score]%
FIX: import { [export] } from '@metasaver/[package]/[module]'
[Brief comparison of implementations]
For clean scans:
ā
DRY CHECK PASSED
Files scanned: [count]
Signatures checked: [count]
No duplications found
See templates/violation-report.txt for complete format specification.
Console output example:
š DRY CHECK: Scanning 3 modified files...
ā VIOLATION: src/utils/text.ts:5 capitalize()
Duplicates: @metasaver/core-utils.capitalize()
Similarity: 95%
FIX: import { capitalize } from '@metasaver/core-utils'
Both implementations capitalize first letter using same algorithm.
ā VIOLATION: src/components/Button.tsx:10 Button
Duplicates: @metasaver/core-components.ZButton
Similarity: 85%
FIX: import { ZButton } from '@metasaver/core-components'
Local Button component has same props and styling as ZButton.
š SUMMARY:
Files scanned: 3
Signatures checked: 12
Violations: 2
Clean signatures: 10
Input:
// src/utils/text.ts
export function capitalize(str: string): string {
return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
}
Output:
ā VIOLATION: src/utils/text.ts:2 capitalize()
Duplicates: @metasaver/core-utils.capitalize()
Similarity: 100%
FIX: import { capitalize } from '@metasaver/core-utils'
Input:
// src/components/Button.tsx
export function Button({ children, variant, onClick }) {
return (
<button className={buttonVariants({ variant })} onClick={onClick}>
{children}
</button>
);
}
Output:
ā VIOLATION: src/components/Button.tsx:2 Button
Duplicates: @metasaver/core-components.ZButton
Similarity: 90%
FIX: import { ZButton } from '@metasaver/core-components'
Input: 3 modified files with unique implementations
Output:
ā
DRY CHECK PASSED
Files scanned: 3
Signatures checked: 8
No duplications found
templates/extraction-patterns.txt - Regex patterns for extracting signaturestemplates/violation-report.txt - Output format specificationtemplates/scan-script.sh.template - Shell script for batch scanning| Step | Tool | Purpose |
|---|---|---|
| 1 | Bash | Run git diff to get modified files |
| 2 | Grep | Extract function/type signatures |
| 3 | Bash/Grep | Search shared library packages |
| 4 | Read | Compare implementations |
| 5 | Direct output | Format and display results |
/skill cross-cutting/coding-standards - DRY principle reference/skill cross-cutting/serena-code-reading - Code analysis workflow/skill domain/monorepo-audit - Monorepo structure validation