FI

file-justification

Enforces a strict protocol requiring justification before creating or modifying any file.

Install

mkdir -p .claude/skills/file-justification && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/12246" && unzip -o skill.zip -d .claude/skills/file-justification && rm skill.zip

Installs to .claude/skills/file-justification

Activation

This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.

**Purpose**: Before creating or modifying ANY file, you MUST document the justification to prevent unnecessary file creation and ensure changes are well-reasoned.
162 chars · catalog descriptionno explicit “when” trigger
Beginner

Key capabilities

  • Document justification for creating a new file.
  • Document justification for modifying an existing file.
  • Search for similar functionality in existing files.
  • Identify integration targets for new code.
  • Document why integration into existing files failed.

How it works

The skill enforces a protocol requiring documentation of justification for every file creation or modification, prioritizing integration into existing files over new file creation.

Inputs & outputs

You give it
A request to create or modify a file.
You get back
A documented justification for the file change, adhering to the specified template.

When to use file-justification

  • Modifying existing files
  • Creating new modules
  • PR documentation

About this skill

File Justification Protocol

Purpose: Before creating or modifying ANY file, you MUST document the justification to prevent unnecessary file creation and ensure changes are well-reasoned.

When This Protocol Applies

  • Creating a NEW file (highest scrutiny)
  • Modifying an EXISTING file
  • All PR changes (each file touched needs justification)

Justification Template

For EACH file you touch, document:

### File: <filename>

**GOAL**: What are you trying to achieve?
**MODIFICATION**: What specific change are you making?
**NECESSITY**: Why is this change required? Why can't it be done differently?
**INTEGRATION PROOF**: How does this integrate with existing code?

New File Creation - Extreme Scrutiny

Default: NO NEW FILES - You must prove why integration into existing files is impossible.

Pre-Write Checklist (MANDATORY before creating any new file)

  1. Assume existing files can handle it - Search for similar functionality
  2. Identify integration targets - Which existing files could contain this code?
  3. Attempt integration first - Try adding to existing file before creating new
  4. Document why integration failed - Concrete reason, not "cleaner this way"

Integration Hierarchy (try in order)

  1. Existing file with similar functionality
  2. Existing utility/helper file
  3. Existing __init__.py
  4. Existing test file (for test code)
  5. Existing class as a method
  6. Config file
  7. LAST RESORT: New file (with full justification)

Examples

Good Justification (Modifying Existing)

### File: $PROJECT_ROOT/llm_response.py

**GOAL**: Add backward compatibility for outcome_resolution field
**MODIFICATION**: Add property that falls back to outcome_resolution when action_resolution is missing
**NECESSITY**: API clients already use action_resolution; changing the field name would break them
**INTEGRATION PROOF**: Property pattern matches existing properties in this class (lines 45-67)

Good Justification (New File - Justified)

### File: $PROJECT_ROOT/action_resolution_utils.py (NEW)

**GOAL**: Centralize action_resolution/outcome_resolution fallback logic
**MODIFICATION**: Create helper module with get_action_resolution() function
**NECESSITY**: Same logic duplicated in llm_response.py (22 lines) and world_logic.py (13 lines)
**INTEGRATION PROOF**:
- Could not add to llm_response.py - world_logic.py would create circular import
- Could not add to world_logic.py - llm_response.py would create circular import
- New utils file breaks the dependency cycle

Bad Justification (Rejected)

### File: $PROJECT_ROOT/new_helper.py (NEW)

**GOAL**: Add helper function
**MODIFICATION**: Create new file with helper
**NECESSITY**: Cleaner to have it separate  <-- NOT VALID
**INTEGRATION PROOF**: None attempted  <-- MUST ATTEMPT

File Placement Rules

If a new file is justified, place it correctly:

Code TypeLocation
Python module$PROJECT_ROOT/ or appropriate submodule
Scriptsscripts/
Tests$PROJECT_ROOT/tests/
Commands.claude/commands/
Skills.claude/skills/

NEVER create new files in project root.

Banned Patterns

  • *_v2.py - Edit existing file
  • *_new.py - Edit existing file
  • *_backup.py - Use git
  • *_old.py - Delete and replace

Quick Reference

Before ANY file operation:

  1. What existing file could contain this? (Search first)
  2. Why can't I add this to that file? (Valid reason required)
  3. Have I documented GOAL/MODIFICATION/NECESSITY/INTEGRATION PROOF?

If you cannot answer these questions, do not create the file.

When not to use it

  • When the user does not want to document the justification for file changes.
  • When the user wants to create new files without proving why integration into existing files is impossible.
  • When the user wants to use banned patterns like `*_v2.py` or `*_backup.py`.

Limitations

  • New file creation is under extreme scrutiny and requires proof why integration into existing files is impossible.
  • The protocol applies to all PR changes.
  • Banned patterns like `*_v2.py` or `*_backup.py` are not allowed.

How it compares

This skill mandates a formal justification process for every file change, including a pre-write checklist and integration hierarchy, which is a more rigorous approach than simply making changes.

Compared to similar skills

file-justification side by side with the closest alternatives in the catalog.

SkillInstallsUpdatedSafetyDifficulty
file-justification (this skill)03moNo flagsBeginner
wrap06moReviewIntermediate
session-wrap17moReviewIntermediate
windsurf-custom-prompts12moNo flagsBeginner

Try saying

Example prompts that trigger this skill in your AI assistant.

Search skills

Search the agent skills registry