Agent skill

Justify

by athola in athola/claude-night-market

Audits changes for additive bias and Iron Law compliance. An agent skill from athola/claude-night-market.

MITAuto-check passedDevelopment

Install Justify

skills CLI
$ npx skills add athola/claude-night-market --skill justify -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install athola/claude-night-market justify --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/athola/claude-night-market.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/imbue/skills/justify .claude/skills/justify && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
justify
GitHub stars
342
Token cost
~3.4k tokens
SKILL.md length
1,309 words
Files
1
Skills in repo
159
Repo updated
First seen
Licence
MIT

At a glance

Audits changes for additive bias and Iron Law compliance. An agent skill from athola/claude-night-market.

  • Works in 12 steps: Gather the Delta → Compute Additive Bias Score → Iron Law Compliance Check → …
  • Reviewing completed work before merging
  • SKILL.md covers The Additive Bias Problem, When To Use, When NOT To Use and Audit Protocol, plus 8 more sections
  • Calls git and rg

What it does

Justify is an agent skill from athola/claude-night-market. Audits changes for additive bias and Iron Law compliance. Use when reviewing completed work before merging or after AI-assisted implementation.

Its SKILL.md is about 3.4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Development. The repository describes itself as: 23 Claude Code plugins: TDD enforcement hooks, git/PR workflows, spec-driven development, code review, project lifecycle, fix-from-error, maintenance automation, context… The licence is MIT.

When your agent uses it

  • Reviewing completed work before merging
  • After AI-assisted implementation

Example prompts

  • “Use the justify skill to audit changes for additive bias and Iron Law compliance. An agent skill from athola/claude-night-market”
  • “/justify”

Workflow steps

12 steps, taken from the step headings in SKILL.md.

  1. Gather the Delta
  2. Compute Additive Bias Score
  3. Iron Law Compliance Check
  4. Minimal Intervention Analysis
  5. 5: Invariant Impact Analysis
  6. Generate Justification Report
  7. Test Mutation
  8. Shotgun Addition
  9. Defensive Overengineering
  10. Premature Abstraction
  11. Compatibility Shim
  12. Silent Invariant Revision

What it can do on your machine

Read from SKILL.md and the folder at commit 9f3eb00. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • git
    • rg

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Justify loads about 3.4k tokens when it runs. Until then it costs about 38 tokens; SKILL.md has 1,309 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~38
When it runs · the whole SKILL.md, loaded when a task matches
~3.4k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from athola/claude-night-market at commit 9f3eb00, republished under its MIT licence (© athola). 1,309 words, ~3,367 tokens.

Download SKILL.mdSave it as .claude/skills/justify/SKILL.md (or your agent's skills folder).
name
justify
description
Audits changes for additive bias and Iron Law compliance. Use when reviewing completed work before merging or after AI-assisted implementation.
alwaysApply
false
category
workflow-methodology
tags
justification, proof-of-work, anti-additive-bias, code-review, iron-law
dependencies
imbue:proof-of-work, leyline:additive-bias-defense
usage_patterns
post-implementation-review, pre-commit-audit, change-justification
complexity
intermediate
model_hint
standard
estimated_tokens
2800
role
entrypoint

The simplest change that fixes the problem is the safest change to merge. Adding code is easy. Removing the need for code is engineering.

Justify

The Additive Bias Problem

AI models are trained to be helpful, which creates a systematic bias toward adding code rather than fixing root causes:

AI Default BehaviorCorrect Behavior
Add a workaroundFix the root cause
Modify test expectationsFix the implementation
Create a new helperUse an existing one
Add error handlingPrevent the error
Add a compatibility shimRemove the old code
Wrap in try/catchFix the exception source

This skill audits changes for these patterns and requires explicit justification for each.

When To Use

  • After completing implementation work
  • Before committing or creating PRs
  • When reviewing your own changes for quality
  • When scope-guard flags RED/YELLOW zone

When NOT To Use

  • Before writing the code, because this audits work already done (use imbue:karpathy-principles)
  • Deciding whether a feature belongs in scope (use imbue:scope-guard)

Audit Protocol

Step 1: Gather the Delta
bash
# Determine base branch
base=$(git merge-base master HEAD 2>/dev/null \
  || git merge-base main HEAD 2>/dev/null)

# Get change statistics
git diff "$base" --stat
git diff "$base" --shortstat
git diff "$base" --diff-filter=A --name-only  # new files
git diff "$base" --diff-filter=M --name-only  # modified files
git diff "$base" --diff-filter=D --name-only  # deleted files
Step 2: Compute Additive Bias Score

Score each dimension 0-3 (0 = clean, 3 = high bias):

SignalWeightHow to Measure
Line ratio2xadditions / max(deletions, 1)
New files2xCount of --diff-filter=A
Test logic changes3xTest assertion/expectation diffs
New abstractions1xNew classes, functions, modules
Workaround patterns2xTry/catch, if/else guards added

Line Ratio Scoring:

RatioScoreInterpretation
< 2:10Balanced change
2:1 to 5:11Mildly additive
5:1 to 10:12Additive bias likely
> 10:13Strong additive bias

Aggregate Score:

bias_score = sum(signal_score * weight) / sum(weights)
AggregateZoneAction
0.0 - 0.5GREENProceed
0.5 - 1.5YELLOWJustify each signal
1.5 - 2.5REDRethink approach
2.5+STOPLikely wrong approach
Step 3: Iron Law Compliance Check

The Iron Law states: tests drive implementation, not the other way around. Check for violations:

bash
# Find test files that were modified
git diff "$base" --name-only | rg "test_|_test\.|spec\." \
  || git diff "$base" --name-only | grep -E "test_|_test\.|spec\."

# For each modified test file, check what changed
git diff "$base" -- <test_file> | rg "^[-+].*assert|^[-+].*expect|^[-+].*should"

Violation patterns (test logic was tampered):

  • Assertion values changed (expected output modified)
  • Test cases removed or commented out
  • @skip or @pytest.mark.skip added
  • Error expectations weakened (broad exception types)
  • Mock return values changed to match new behavior
  • Test renamed to no longer describe original behavior

Each violation requires explicit justification:

"I changed this test assertion because the requirement changed, not because my implementation couldn't meet the original requirement."

If the requirement didn't change, the test should not change. Fix the implementation instead.

Step 4: Minimal Intervention Analysis

For each changed file, answer:

  1. Was this change necessary? Could the goal be achieved without touching this file?

  2. Was this the minimal change? Could fewer lines achieve the same result?

  3. Did this change add or remove complexity? New functions, classes, or control flow = added complexity that needs justification.

  4. Is there a subtraction-first alternative? Could removing code fix the problem instead of adding code?

Step 4.5: Invariant Impact Analysis

Changes can be minimal and still catastrophically wrong if they silently revise a load-bearing design decision. For each changed file, check whether it touches a design invariant:

What counts as an invariant:

  • Architectural patterns (module boundaries, layer separation, data flow direction)
  • Data structure choices (why a map vs list, why normalized vs denormalized)
  • API contracts (public interfaces, protocol formats)
  • Error handling strategies (fail-fast vs recovery)
  • Concurrency models (single-threaded assumption, actor model, shared-nothing)

Detection heuristic:

bash
# Check for structural changes (new modules, moved
# boundaries, changed interfaces)
git diff "$base" --name-only | rg "(interface|abstract|base|core|types|schema|model)" \
  || git diff "$base" --name-only | grep -E "(interface|abstract|base|core|types|schema|model)"

# Check for pattern-breaking changes
git diff "$base" -U5 | rg "(TODO.*refactor|HACK|WORKAROUND|XXX)" \
  || git diff "$base" -U5 | grep -E "(TODO.*refactor|HACK|WORKAROUND|XXX)"

When an invariant conflict is detected:

Do NOT silently pick a resolution. Present the three options to the human:

OptionDescriptionWhen Right
PreserveDon't add the feature; the invariant pays dividendsInvariant simplifies many things; feature is marginal
LayerAdd feature inelegantly on topFeature is needed; invariant is still valuable; imperfection is acceptable
ReviseChange the invariant itselfGenuine new learning invalidates the original decision

Add to Justification Report:

markdown
### Invariant Impact: NONE / DETECTED

[If DETECTED:]
- **Invariant**: [name the design decision]
- **Conflict**: [what change clashes with it]
- **Option chosen**: Preserve / Layer / Revise
- **Justification**: [why this option, not the others]
- **Human reviewed**: YES / NO — if NO, flag as
  requiring review before merge

Compounding risk warning: Bad invariant decisions accumulate. If this branch has multiple invariant revisions, flag the entire branch for architectural review. Each silent invariant change multiplies the probability of an unsalvageable codebase.

Step 5: Generate Justification Report

Output a structured report:

markdown
## Justification Report

**Branch**: feature/xyz
**Base**: master
**Delta**: +N/-M lines, X files changed

### Additive Bias Score: X.X (ZONE)

| Signal | Score | Detail |
|--------|-------|--------|
| Line ratio | N | +A/-D = R:1 |
| New files | N | [list] |
| Test changes | N | [list] |
| New abstractions | N | [list] |
| Workarounds | N | [list] |

### Iron Law Compliance: PASS/FAIL

[List any test logic modifications with justification]

### Change-by-Change Justification

#### file.py (+N/-M)
- **What**: [description]
- **Why**: [root cause this addresses]
- **Alternatives considered**: [what else could work]
- **Why this is minimal**: [why fewer changes won't work]

#### test_file.py (+N/-M)
- **What**: [description]
- **Justification**: [why test logic changed, if it did]
- **Iron Law status**: PASS/VIOLATION

### Risk Assessment

| Factor | Rating |
|--------|--------|
| Lines changed | LOW/MED/HIGH |
| Files touched | LOW/MED/HIGH |
| Test modifications | NONE/JUSTIFIED/VIOLATION |
| New abstractions | NONE/JUSTIFIED/UNNECESSARY |
| Overall merge risk | LOW/MED/HIGH |

### Recommendations

[List any changes that should be reconsidered,
simpler alternatives, or unnecessary additions]

Decision Weights

When evaluating competing approaches, weight these factors:

FactorWeightRationale
Fewer lines changedHIGHLess risk, easier review
No new filesHIGHNo new maintenance burden
No test logic changesHIGHIron Law compliance
Root cause fixHIGHPrevents recurrence
Removes codeBONUSReduces maintenance surface
Adds abstractionPENALTYOnly justified at 3rd use
Adds error handlingNEUTRALOnly at system boundaries

The Subtraction Test: Before accepting any change, ask: "Could I achieve this by removing code instead of adding it?" If yes, prefer the subtractive approach.

Integration with Proof of Work

Justify extends proof-of-work with change-level accountability:

  • proof-of-work: "Did it work?" (evidence)
  • justify: "Was this the right way?" (reasoning)

Both are required before claiming work is complete. Run proof-of-work first, then justify.

Anti-Patterns to Flag

1. Test Mutation

Changing test expectations to match broken code. Fix: Revert the test change, fix the implementation.

Show full SKILL.md (527 more words)Show less
2. Shotgun Addition

Adding code in many files for a single-concern fix. Fix: Find the single point of change.

3. Defensive Overengineering

Adding try/catch, null checks, or validation for scenarios that can't happen in practice. Fix: Trust internal code. Only validate at boundaries.

4. Premature Abstraction

Creating a helper/utility/base class for one use case. Fix: Inline the code. Abstract at the 3rd use.

5. Compatibility Shim

Adding backward-compatibility code instead of updating callers. Fix: Update callers directly. Delete dead paths.

6. Silent Invariant Revision

Changing an architectural pattern, data structure choice, or API contract without acknowledging that a design invariant is being revised. Fix: Name the invariant. Present the 3 options (preserve, layer, revise) to a human. Do not make the judgment call yourself: models default to the "average" of training data, and wrong invariant decisions compound into unsalvageable codebases.

Scrutiny Questions (from leyline:additive-bias-defense)

Before justifying any change, apply these questions. If the answer to questions 4 and 5 is not concrete evidence, the change is unjustified.

  1. Priority alignment: Is this a deviation from the current priority?
  2. Criticality: Is it critical to implement at this juncture?
  3. Simplicity: Does a simpler or more elegant solution exist?
  4. Evidence: What evidence proves this is needed (not assumed)?
  5. Consequence: What breaks if we do not add this?

Burden of Proof Inversion

The default stance is: this addition should not exist. The change must prove its necessity, not the reviewer must prove it unnecessary.

When generating the Justification Report (Step 5), add a Burden of Proof section:

ChangeScrutiny Q4 AnswerScrutiny Q5 AnswerVerdict
file.py[evidence][consequence]justified/needs_evidence/unjustified

Changes with unjustified verdict MUST be removed or reworked before the report passes.

Record the Tradeoff (decision journal)

When this step settles a decision with real alternatives, record it to docs/tradeoffs.md while the reasoning is live (draft and confirm):

  • If leyline is installed, invoke Skill(leyline:decision-journal) and append a tradeoff entry (the decision, the options weighed, and what was sacrificed; set phase to review). Show the draft; append on confirmation.
  • Fallback (leyline absent): append to docs/tradeoffs.md using the in-file ENTRY TEMPLATE; assign the next TR-NNN id.

The Wise Counsel

Is what you are doing a deviation of your priority? Is it critical to implement at this juncture? Rely less on AI and initial lines of thinking. Challenge yourself to be better, to think of a more elegant implementation or a simpler solution.

Exit Criteria

  • An additive bias score is computed and its zone (GREEN/YELLOW/RED/STOP) is reported.
  • Iron Law compliance is marked PASS or FAIL, with justification for any modified test logic.
  • Every change carries a verdict (justified, needs_evidence, or unjustified); no unjustified verdict survives in the final report.
  • Any detected invariant conflict is surfaced with the chosen option and a human-review flag.
  • A justified non-trivial addition is recorded to docs/tradeoffs.md (or the in-file template) before the report passes.
  • imbue:karpathy-principles - "Surgical Changes" and "Goal-Driven Execution" principles invoke this audit from a higher-level synthesis
  • leyline:additive-bias-defense - the contract this audit enforces in detail
  • imbue:proof-of-work - the validation layer this audit complements (proof-of-work asks "did it work?", justify asks "did it need to exist?")
  • See docs/quality-gates.md#skill-level-quality-gate-composition for the full gate-skill federation graph

© athola, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in plugins/imbue/skills/justify of athola/claude-night-market.

Open the folder on GitHubat commit 9f3eb00

Compare with similar skills

Justify next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Justify compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Justify this skillathola/claude-night-market342—~3.4kAutomated safety check: PassMIT
Vercel Composition Patternssupabase/supabase111k59 repos~726Automated safety check: PassMIT
Finishing a Development Branchobra/superpowers296k5 repos~1.9kAutomated safety check: PassMIT
Typescript Advanced Typesrolling-scopes/rsschool-app10k25 repos~4.2kAutomated safety check: PassMPL-2.0
PR Babysitteropeninterpreter/openinterpreter69k3 repos~4.2kAutomated safety check: PassApache-2.0
Code Review ChecklistshareAI-lab/learn-claude-code78k5 repos~1.1kAutomated safety check: PassMIT

Similar skills

  • Official

    React composition patterns that scale. An agent skill from supabase/supabase.

    111k GitHub starsUsed in 59 repos~726 tokens
    DevelopmentAuto-check passed
  • Walks the last step of a branch: confirm tests pass, detect the git environment, ask how to integrate, carry out your choice and clean up the worktree.

    296k GitHub starsUsed in 5 repos~1.9k tokens
    DevelopmentAuto-check passed
  • Typescript Advanced Types

    rolling-scopes/rsschool-app

    Master TypeScript's advanced type system including generics, conditional types, mapped types, template literals, and utility types for building type-safe applications.

    10k GitHub starsUsed in 25 repos~4.2k tokens
    DevelopmentAuto-check passed
  • PR Babysitter

    openinterpreter/openinterpreter

    Watches an open GitHub pull request until it merges, handling review comments, diagnosing CI failures and retrying flaky checks along the way.

    69k GitHub starsUsed in 3 repos~4.2k tokens
    DevelopmentAuto-check passed
  • Code Review Checklist

    shareAI-lab/learn-claude-code

    Reviews code against a five-part checklist covering security, correctness, performance, maintainability and testing, and reports findings in a fixed format.

    78k GitHub starsUsed in 5 repos~1.1k tokens
    DevelopmentAuto-check passed
  • Greploop

    onyx-dot-app/onyx

    Iteratively improves a PR (GitHub), MR (GitLab), or shelved changelist (Perforce) until Greptile gives it a 5/5 confidence score with zero unresolved comments.

    32k GitHub starsUsed in 4 repos~3.3k tokens
    DevelopmentAuto-check passed

More from athola/claude-night-market

All 159 skills in this repo
  • Night Market Diagnostics Toolkit

    athola/claude-night-market

    Run and interpret repo diagnostic scripts (ratchets, validators, token stats).

    342 GitHub stars~3.4k tokensUpdated 2 days ago
    Auto-check passed
  • Skills Eval

    athola/claude-night-market

    Evaluate Claude skill quality through auditing. An agent skill from athola/claude-night-market.

    342 GitHub stars~1.6k tokensUpdated 2 days ago
    Auto-check passed
  • Agent Teams

    athola/claude-night-market

    Coordinates Claude agent teams via filesystem protocol. An agent skill from athola/claude-night-market.

    342 GitHub stars~2.5k tokensUpdated 2 days ago
    Auto-check passed
  • Delegation Core

    athola/claude-night-market

    Delegates execution to eight CLIs (Gemini, Qwen, MiniMax, GLM, Muse, Codex, OpenCode, Glimmer).

    342 GitHub stars~2.5k tokensUpdated 2 days ago
    Auto-check passed
  • Elegant Code

    athola/claude-night-market

    Guide minimal code via a decision ladder with full safety, edge, and negative-case coverage.

    342 GitHub stars~2.1k tokensUpdated 2 days ago
    Auto-check passed
  • Skill Library Mission

    athola/claude-night-market

    Build a project skill library in .claude/skills/ via discovery, parallel authoring, and review.

    342 GitHub stars~1.6k tokensUpdated 2 days ago
    Auto-check passed

Categories

Questions about Justify

What does Justify do?

Audits changes for additive bias and Iron Law compliance. An agent skill from athola/claude-night-market. Justify is an agent skill from athola/claude-night-market. Audits changes for additive bias and Iron Law compliance.

When should I use Justify?

Justify fits situations like: reviewing completed work before merging; after AI-assisted implementation.

How do I install Justify in Claude Code?

Run `npx skills add athola/claude-night-market --skill justify -a claude-code`. Or copy the skill folder (plugins/imbue/skills/justify in athola/claude-night-market) into .claude/skills/justify in your project. Claude Code loads it when a task matches its description.

How do I install Justify in Codex?

Run `npx skills add athola/claude-night-market --skill justify -a codex`. Or copy the skill folder (plugins/imbue/skills/justify in athola/claude-night-market) into .agents/skills/justify in your project. Codex loads it when a task matches its description.

Can I use Justify in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add athola/claude-night-market --skill justify -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/justify, .gemini/skills/justify, .github/skills/justify and .opencode/skills/justify in your project.

What does Justify need to run?

Going by SKILL.md and its folder, Justify needs the command-line tools its instructions call (git and rg).

Does Justify access the network?

SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Justify safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Justify use?

Justify is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Justify use?

About 3.4k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Justify?

Skills that share tags, products or a category with Justify: Vercel Composition Patterns (supabase/supabase, 111k stars), Finishing a Development Branch (obra/superpowers, 296k stars), Typescript Advanced Types (rolling-scopes/rsschool-app, 10k stars) and PR Babysitter (openinterpreter/openinterpreter, 69k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Justify?

athola (a GitHub user) maintains it in athola/claude-night-market, which has 342 GitHub stars. The repository holds 159 skills in this directory. The repository was last updated on October 6, 2026.

Source: athola/claude-night-market on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.