add-new-file
Guide for adding new files to this codebase while respecting architectural principles including Separation of Concerns, Common Closure Principle, small composable functions (max 20 lines), and externalizing constants. Use when creating new modules, utilities, or any new source files in the project.
Best use case
add-new-file is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Guide for adding new files to this codebase while respecting architectural principles including Separation of Concerns, Common Closure Principle, small composable functions (max 20 lines), and externalizing constants. Use when creating new modules, utilities, or any new source files in the project.
Teams using add-new-file should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/add-new-file/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How add-new-file Compares
| Feature / Agent | add-new-file | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Guide for adding new files to this codebase while respecting architectural principles including Separation of Concerns, Common Closure Principle, small composable functions (max 20 lines), and externalizing constants. Use when creating new modules, utilities, or any new source files in the project.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Add New File
This skill guides you through adding new files to the codebase while maintaining architectural consistency and code quality standards.
## Quick Reference
When adding a new file to this project:
1. **Determine the scope** - What domain/concern does this file address?
2. **Follow module pattern** - Create types.ts, constants.ts, main logic file
3. **Externalize constants** - All magic strings/numbers go in constants.ts
4. **Keep functions small** - Max 20 lines of logic per function
5. **Use proper imports** - `node:` prefix, `import type`, `.ts` extensions
6. **Write co-located tests** - Create `.test.ts` alongside source
See [references/architecture-principles.md](references/architecture-principles.md) for comprehensive guidelines.
## Adding a New Module
When creating a new module (e.g., `cache/`, `auth/`, `logger/`):
### Step 1: Create Module Directory
```
module-name/
├── types.ts # Type definitions only
├── constants.ts # Externalized constants
├── module-name.ts # Core logic
└── module-name.test.ts # Tests
```
### Step 2: Define Types First
Create `types.ts`:
```typescript
export interface ModuleConfig {
enabled: boolean;
timeout: number;
}
export type ModuleState = "idle" | "active" | "error";
```
### Step 3: Externalize Constants
Create `constants.ts`:
```typescript
export const DEFAULT_TIMEOUT_MS = 5000;
export const MODULE_CONFIG_FILE = "module-config.json";
export const ERROR_INVALID_CONFIG = "Invalid module configuration";
```
### Step 4: Implement Core Logic
Create `module-name.ts`:
```typescript
import { existsSync, readFileSync } from "node:fs";
import { join } from "node:path";
import type { ModuleConfig } from "./types.ts";
import { DEFAULT_TIMEOUT_MS, MODULE_CONFIG_FILE } from "./constants.ts";
export const loadModuleConfig = (dir: string): ModuleConfig => {
const configPath = join(dir, MODULE_CONFIG_FILE);
if (!existsSync(configPath)) {
return { enabled: true, timeout: DEFAULT_TIMEOUT_MS };
}
return JSON.parse(readFileSync(configPath, "utf-8"));
};
```
### Step 5: Write Tests
Create `module-name.test.ts` following Vitest patterns in the reference doc.
## Adding a Utility File
For standalone utilities that don't need a full module:
1. Place in appropriate existing module or create `utils/` if needed
2. Create `utils/helper.ts` and `utils/helper.test.ts`
3. Extract any constants to the parent module's `constants.ts`
4. Keep functions small and composable
## Pre-Flight Checklist
Before creating files, verify:
- ✅ **Correct location** - File belongs in right module/directory
- ✅ **Constants identified** - Know what values need externalizing
- ✅ **Types defined** - Clear interfaces for inputs/outputs
- ✅ **Single responsibility** - File has one clear purpose
- ✅ **Dependencies mapped** - Know what to import
## Post-Creation Checklist
After creating files, verify:
- ✅ **All imports use `node:` prefix** for built-ins
- ✅ **Type imports use `import type`**
- ✅ **Relative imports include `.ts` extension**
- ✅ **All exports have explicit return types**
- ✅ **Constants externalized to `constants.ts`**
- ✅ **Functions under 20 lines of logic**
- ✅ **Tests created and passing**
- ✅ **Code follows style guide** (see reference doc)
- ✅ **No `console.log` statements** (use `client.tui`)
## Common Patterns
### Configuration Module
```
config/
├── types.ts # ConfigOptions, ConfigSchema
├── constants.ts # CONFIG_FILE_NAME, DEFAULT_VALUES
├── config.ts # loadConfig(), saveConfig()
└── config.test.ts
```
### Business Logic Module
```
processor/
├── types.ts # ProcessorInput, ProcessorOutput
├── constants.ts # MAX_RETRIES, TIMEOUT_MS
├── processor.ts # process(), validate()
└── processor.test.ts
```
### Utility Module
```
utils/
├── string-utils.ts # String manipulation helpers
├── string-utils.test.ts
├── path-utils.ts # Path manipulation helpers
└── path-utils.test.ts
```
## Detailed Guidelines
For comprehensive information on:
- Complete constants externalization rules with examples
- Full code style guide (imports, functions, naming, formatting)
- Error handling patterns
- Testing patterns with Vitest
- File system operation patterns
**Read:** [references/architecture-principles.md](references/architecture-principles.md)
## Verification Commands
After creating new files:
```bash
bun run typecheck # Verify TypeScript types
bun run lint # Check code style
bun run test # Run tests
bun run build # Ensure it builds
```Related Skills
advanced-file-management
Advanced file management tools. Includes batch folder creation, batch file moving, file listing, and HTML author extraction.
planning-with-files
Transforms workflow to use Manus-style persistent markdown files for planning, progress tracking, and knowledge storage. Use when starting complex tasks, multi-step projects, research tasks, or when the user mentions planning, organizing work, tracking progress, or wants structured output.
file-organizer
Intelligently organizes your files and folders across your computer by understanding context, finding duplicates, suggesting better structures, and automating cleanup tasks. Reduces cognitive load and keeps your digital workspace tidy without manual effort.
global-methylation-profile
This skill performs genome-wide DNA methylation profiling. It supports single-sample and multi-sample workflows to compute methylation density distributions, genomic feature distribution of the methylation profile, and sample-level clustering/PCA. Use it when you want to systematically characterize global methylation patterns from WGBS or similar per-CpG methylation call files.
local-methylation-profile
This skill analyzes the local DNA methylation profiles around target genomic regions provide by user. Use this skill when you want to vasulize the average methylation profile around target regions (e.g. TSS, CTCF peak or other target regions).
2-categorize-files
Second step in building instruction context for codebase
add-mouse-profile
Create a new mouse profile for a mouse model not yet supported
lets-go-rss
A lightweight, full-platform RSS subscription manager that aggregates content from YouTube, Vimeo, Behance, Twitter/X, and Chinese platforms like Bilibili, Weibo, and Douyin, featuring deduplication and AI smart classification.
vly-money
Generate crypto payment links for supported tokens and networks, manage access to X402 payment-protected content, and provide direct access to the vly.money wallet interface.
whisper-transcribe
Transcribes audio and video files to text using OpenAI's Whisper CLI, enhanced with contextual grounding from local markdown files for improved accuracy.
thor-skills
An entry point and router for AI agents to manage various THOR-related cybersecurity tasks, including running scans, analyzing logs, troubleshooting, and maintenance.
astro
This skill provides essential Astro framework patterns, focusing on server-side rendering (SSR), static site generation (SSG), middleware, and TypeScript best practices. It helps AI agents implement secure authentication, manage API routes, and debug rendering behaviors within Astro projects.