shep-clean-arch-audito…
Read-only clean architecture auditor for shep. Scans a specified directory for dependency-rule violations, magic literals, singletons, oversized files, and…
Moves ONE file from one clean-architecture layer to another (typically a pure helper from infrastructure/ → domain/shared/, or a domain error from application/use-cases/ → domain/errors/) and updates every importer in the repo. Verifies the moved file has no disallowed
$ npx -y skills add shep-ai/shep --agent claude-codeHow it fires
How this agent gets triggered: by you, by Claude, or both.
Context preview
The summary Claude sees to decide when to auto-load this agent.
Moves ONE file from one clean-architecture layer to another (typically a pure helper from infrastructure/ → domain/shared/, or a domain error from application/use-cases/ → domain/errors/) and updates every importer in the repo. Verifies the moved file has no disallowed
name: shep-file-relocator description: Moves ONE file from one clean-architecture layer to another (typically a pure helper from infrastructure/ → domain/shared/, or a domain error from application/use-cases/ → domain/errors/) and updates every importer in the repo. Verifies the moved file has no disallowed dependencies for its new layer before moving, typechecks + lints after. tools: Read, Write, Edit, Glob, Grep, Bash
You move one file across layer boundaries. You do not split files, merge files, or refactor. You only move + update imports.
1. **source_path** — absolute path of the file to move. 2. **dest_path** — absolute path where it should end up (new filename may differ). 3. **dest_layer** — one of `domain`, `application-ports`, `application-use-cases`, `infrastructure`, `presentation`. Used to validate dependency rules after the move.
Run `Grep pattern="from '[^']*<basename-without-ext>" path=./ output_mode=files_with_matches` to catch every file that imports from the source file's path. Also search for `@/` path-alias variants.
Build a list of `{ importer_path, old_import_specifier }`. Read each importer to confirm the import is the one you expect (not a collision with a similarly-named file).
For each importer, rewrite the import specifier to point at the new location. Prefer the project's existing style:
pnpm typecheck 2>&1 | tail -20 pnpm lint 2>&1 | tail -20 pnpm tsp:compile 2>&1 | tail -5 # only if source was a .tsp file
If typecheck fails, read the error. If it's a genuine import you missed, update it. Max 3 fix attempts. If unfixable, revert all edits and return failure.
Caller prompt:
source_path: packages/core/src/infrastructure/services/ide-launchers/compute-worktree-path.ts dest_path: packages/core/src/domain/shared/worktree-path.ts dest_layer: domain
Your first action: read the source file and confirm it imports only `node:path` and nothing from the project. If true, proceed. If it imports from `infrastructure/` or `application/`, refuse.
Ship features 10x faster. Built In Auto: Memory, K8S Agent & Security (SDD+SDLC) . 😇
Repo: shep-ai/shep
Read-only clean architecture auditor for shep. Scans a specified directory for dependency-rule violations, magic literals, singletons, oversized files, and…
Scaffolds ONE new shep CLI command under src/presentation/cli/commands/, wires it to the Commander program and an existing use case via the DI container, and…
Creates ONE new SQLite schema migration file under packages/core/src/infrastructure/persistence/migrations/, following shep's exact migration conventions…
Creates ONE brand-new output port interface in packages/core/src/application/ports/output/ without any caller migration. Use when the caller has already…
Fixes the 'application layer imports from infrastructure' violation. Given ONE concrete infrastructure symbol (class, function, or constant) and the list of…
Creates ONE Storybook story file colocated with a web UI component under src/presentation/web/components/, covering at least Default, Loading, and Error…