Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsCommunityBlog
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

Back to skills

Proper

ASecurity

Solve a request strategically and architecturally rather than tactically. Use when the user invokes /proper, asks for "the Proper™ way", wants the long-term design rather than the quickest fix, or wants to refactor / rearchitect first so the requested feature fits naturally. This skill diagnoses why the request feels awkward today, proposes a design change that makes the feature easy, and -- if the strategic path is non-trivial -- hands off to /mikado to execute it in safe incremental steps.

3 stars
0 votes
0 copies
0 views
Added 9/20/2026
businessgorefactoring

Security Analysis

A100/100

Scanned 9/20/2026

Install to Claude Code

$npx -y skills add nvie/skills --skill proper --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Proper?

Add the live security badge to your README — it updates automatically with every re-scan.

Security grade badge for Proper
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/nvie-proper/badge)](https://www.skillsdirectory.com/skills/nvie-proper)

More formats (shields.io, HTML) on the badges page.

Download Zip
Files
SKILL.md
---
name: proper
description: >
  Solve a request strategically and architecturally rather than tactically.
  Use when the user invokes /proper, asks for "the Proper™ way", wants the
  long-term design rather than the quickest fix, or wants to refactor /
  rearchitect first so the requested feature fits naturally. This skill
  diagnoses why the request feels awkward today, proposes a design change
  that makes the feature easy, and -- if the strategic path is non-trivial
  -- hands off to /mikado to execute it in safe incremental steps.
---

# The Proper™ Way

> "Make the change easy, then make the easy change." -- Kent Beck

When the user invokes `/proper`, they are explicitly opting **out** of the
quickest tactical fix and **in** to a strategic design pass. The goal is to
reshape the code first so the requested feature becomes a small, natural
follow-up.

## When to use this skill

- The user typed `/proper` (with or without arguments describing the ask).
- The user says things like "do this properly", "the Proper™ way",
  "solve this strategically", "architecturally", "do it right, not fast".
- A feature feels awkward to fit into the current code shape, and the user
  wants to step back before implementing it.

## What this skill is NOT

- **Not a license to refactor the world.** The strategic proposal must
  stay tied to the requested feature. Gold-plating is off-limits -- but
  if you spot adjacent smells with real leverage, **surface them and ask**
  whether to widen the scope. The user decides; never expand silently.
- **Not an autonomous implementation step.** The output is a diagnosis +
  proposal. The user decides whether to proceed, and non-trivial execution
  goes through `/mikado`.
- **Not a verdict.** Sometimes the tactical fix really is the right call;
  say so honestly when that's true.

## Process

### Step 1 -- Restate the immediate ask

Repeat the user's request back in one sentence. Confirm the surface-level
ask before stepping back. If `/proper` was invoked without an explicit
prompt, ask what the underlying request is.

### Step 2 -- Find the friction

Investigate the code as it exists today and answer:

- Where would the tactical fix go? (find the file/function)
- **Why isn't this feature already easy?** What design choice makes it
  awkward?

Common friction patterns to look for:

| Smell                 | What it looks like                                           |
| --------------------- | ------------------------------------------------------------ |
| Missing abstraction   | The feature requires touching N similar call sites           |
| Leaky boundary        | A module knows things it shouldn't, to make this work        |
| Conflated concerns    | One function would gain a second responsibility              |
| Hard-coded assumption | A value/behaviour is baked in that the feature needs to vary |
| Missing seam          | There is no clean place to plug new behaviour in             |
| Implicit contract     | Callers rely on side effects the new feature would break     |
| Wrong ownership       | The data or logic lives in the wrong layer for this feature  |

Name the friction explicitly. If there is no friction (the feature really
does fit cleanly with a small tactical change), **say so**. `/proper` is
not an excuse to invent refactorings.

### Step 3 -- Propose the strategic shape

Describe, in concrete terms, what the code would need to look like for the
requested feature to be a small, obvious change. Typical moves:

- **Introduce an abstraction** (interface, strategy, registry, adapter)
- **Extract a seam** (split a function, move a boundary, parameterise a
  hard-coded value)
- **Rename / regroup** so the new concept becomes first-class
- **Invert a dependency** so the new feature doesn't have to reach upward
- **Split a module** so the new concern has a natural home
- **Unify duplicated logic** so the feature only has to land in one place

Be specific: name files, types, functions. Sketch before/after when it
helps. Keep the scope tight -- the refactoring exists to serve _this_
feature, not to fix every smell you spotted along the way.

If you notice **adjacent smells** that would be much cheaper to fix while
you're already in this area (or that would compound the friction if left
alone), list them separately as _"Optional scope expansions"_ with a brief
cost/benefit, and ask whether to fold any in. Default to the minimum
scope; only widen if the user agrees.

### Step 4 -- Compare paths

Present a short, honest comparison so the user can decide with eyes open:

|                              | Tactical      | Strategic      |
| ---------------------------- | ------------- | -------------- |
| What it touches              | ...           | ...            |
| Effort                       | small         | medium / large |
| Next similar request         | painful again | easy           |
| Risk of regression           | ...           | ...            |
| What it teaches the codebase | nothing       | a new concept  |

Recommend a path, but make the trade-off real. A throwaway script, a
soon-to-be-deleted module, or a genuinely one-off request can absolutely
deserve the tactical fix.

### Step 5 -- Decide with the user

Wait for the user to choose. Do **not** start implementing until they
pick. Possible outcomes:

- **Go tactical** -- drop `/proper`, do the small fix.
- **Go strategic, small** -- the refactoring fits in one or two commits.
  Implement it directly, then add the feature.
- **Go strategic, non-trivial** -- hand off to `/mikado` (next step).

### Step 6 -- Hand off to /mikado for non-trivial work

If the strategic path is non-trivial (multiple prerequisite changes, risk
of breakage along the way, wants safe incremental steps), use `/mikado`
to manage execution:

1. Frame the Mikado goal as the **end state of the refactoring**, not the
   feature itself. Good:
   _"Extract a `Transport` interface so the WebSocket implementation can
   be swapped."_
   Bad: _"Add SSE support."_
2. Suggest `/mikado goal "<the strategic goal>"` to seed the graph.
3. Let `/mikado` discover prerequisites by attempting the naive change and
   observing what breaks. Do **not** pre-populate the graph with
   speculative steps.
4. Track the original feature request as a Mikado follow-up
   (`/mikado later "<feature>"`) or simply implement it after the
   refactoring goal is reached. It is **not** part of the refactoring
   graph itself.

## Rules

- **Diagnosis before code.** Steps 1-4 produce a proposal, not edits.
- **Stay tied to the requested feature** by default. Prune anything that
  does not serve it. If widening looks worthwhile, **negotiate** -- list
  the option, the cost, the benefit, and let the user pick. Never expand
  scope silently.
- **The user is in control of scope.** Always.
- **Acknowledge when tactical wins.** `/proper` is a thinking tool, not a
  verdict.
- **Defer execution** of non-trivial strategic work to `/mikado`. Do not
  try to do Mikado-style incremental work inside this skill.
- **Never commit autonomously.** The user reviews and commits.

Attribution

nvienvie
View sourceMore from nvie →
SSkills DirectorySkills Directory

Your tool, in front of Claude Code builders.

3 founder slots · $299/mo · GSC-verified traffic · sponsors can never buy grades.

See placements

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments (0)

No comments yet. Be the first to comment!

SSkills DirectorySkills Directory

Your tool, in front of Claude Code builders.

3 founder slots · $299/mo · GSC-verified traffic · sponsors can never buy grades.

See placements

Related Skills

Solution Architect

Designs system architecture, component specifications, and technical integration strategy. Use when: designing solutions, system architecture, technology stack, or integration approaches.

192 votes

Akorchak:Venture Assessment

Generate a comprehensive VC investment assessment report for a company

72 votes

Just Fucking Cancel

Find and cancel unwanted subscriptions by analyzing bank transactions. Detects recurring charges, calculates annual waste, and helps you cancel with direct URLs and browser automation. Use when: 'cancel subscriptions', 'audit subscriptions', 'find recurring charges', 'what am I paying for', 'save money', 'subscription cleanup', 'stop wasting money'. Supports CSV import (Apple Card, Chase, Amex, Citi, Bank of America, Capital One, Mint, Copilot) OR Plaid API for automatic transaction pull. Out...

6511 votes

Stock Analysis

Analyze stocks and cryptocurrencies using Yahoo Finance data. Supports portfolio management (create, add, remove assets), crypto analysis (Top 20 by market cap), and periodic performance reports (daily/weekly/monthly/quarterly/yearly). 8 analysis dimensions for stocks, 3 for crypto. Use for stock analysis, portfolio tracking, earnings reactions, or crypto monitoring.

6511 votes

Telegram Compose

Compose rich, readable Telegram messages using HTML formatting via direct Telegram API. Use when: (1) Sending any Telegram message beyond a simple one-line reply, (2) Creating structured messages with sections, lists, or status updates, (3) Need formatting unavailable via Clawdbot's Markdown conversion (underline, spoilers, expandable blockquotes, user mentions by ID), (4) Sending alerts, reports, summaries, or notifications to Telegram, (5) Want professional, scannable message formatting wit...

6511 votes
View all in business →