Skip to content
Back to skills

Skill Preflight

ASecurity

Deliver a pre-flight duplicate check before creating new skills or agents. Use when the user requests a pre-flight duplicate check before creating new skills or agents.

  • 144 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 23, 2026
ai-agentsgodockerdocumentation

Works with

  • mcp

Security analysis

A100/100

Scanned September 23, 2026

npx -y skills add flonat/flonat-research --skill skill-preflight --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Skill Preflight?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Skill Preflight
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/flonat-skill-preflight/badge)](https://www.skillsdirectory.com/skills/flonat-skill-preflight)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: skill-preflight
description: "Deliver a pre-flight duplicate check before creating new skills or agents. Use when the user requests a pre-flight duplicate check before creating new skills or agents."
allowed-tools:
  - Read
  - Glob
  - Grep
  - AskUserQuestion
---

# Creation Guard: Pre-Flight Duplicate Check

Prevent duplicate functionality by analysing existing skills, agents, and rules before creating new ones. Intercepts creation intent, searches for overlap, and recommends one of 5 actions.

## When to Use

Invoke **before** creating ANY new:
- Skill (`skills/*/SKILL.md`)
- Agent (`.claude/agents/*.md`)
- Rule (`rules/*.md`)

Trigger phrases:
- "Create a skill for..."
- "I want a new skill that..."
- "Let's add an agent for..."
- "We need a rule for..." / "add a rule that..."
- Any intent to create new automation/tooling

**Rules need this most, not least.** A duplicate skill is visible — it shows up
in the catalogue and the slash menu. A duplicate rule is invisible: both copies
load silently as system instructions, and the first sign of trouble is two
subtly different versions of the same policy competing. Rules are also
`break-the-glass` infrastructure, so an unnecessary one is a standing cost on
every session. Check for an existing rule to **amend** before writing a new one
— amendment is the usual correct outcome for rules, where PROCEED is the usual
outcome for skills.

## Process

### Step 1: Identify the Proposal

Extract from the request:
- **Name**: Proposed name (kebab-case)
- **Type**: skill | agent | rule
- **Purpose**: What it does (one sentence)
- **Key Functions**: 3-5 main capabilities
- **Keywords**: Searchable terms related to functionality

### Step 2: Search Existing Artifacts

Run these searches in parallel:

1. **Read [`skills/shared/skill-index.md`](../shared/skill-index.md)** — scan the categorised table for potential duplicates by name and purpose
2. **Keyword search** — grep skills, agents, and rules for each keyword:

```
Grep for each keyword across:
  - skills/*/SKILL.md (frontmatter + body)
  - .claude/agents/*.md (frontmatter + body)
  - rules/*.md (frontmatter + body)
```

3. **Agent scan** — read frontmatter of each agent to check purpose overlap:

```
Glob: .claude/agents/*.md
Read first 20 lines of each match
```

4. **Rule scan** — list every rule and read its Principle:

```
Glob: rules/*.md
Read the frontmatter + "## Principle" section of each candidate
```

A rule's filename often understates its reach: the policy you want may live
inside a broader rule under a different name. Check `docs/components/rules.md`
for the full table, and read the Principle rather than matching on the title —
`bibliography-routing.md` owns paper-lookup routing, which its name does not
advertise. Also check the `paths:` frontmatter: a rule that exists but is
path-scoped away from where you need it is a **scoping** fix, not a new rule.

### Step 3: Analyse Overlap

For each potentially related artifact, assess:

| Criterion | Question |
|-----------|----------|
| Functional overlap | Does it do the same thing? (0-100%) |
| Naming confusion | Could names be confused? |
| Extension potential | Could the proposal extend this instead? |
| Composition | Could existing artifacts compose to achieve this? |

### Step 4: Generate Recommendation

Based on analysis, recommend ONE of:

| Recommendation | Criteria | Action |
|----------------|----------|--------|
| **PROCEED** | <20% overlap, genuinely new capability | Create new artifact |
| **EXTEND** | 50%+ overlap with single existing artifact | Modify existing instead |
| **COMPOSE** | Multiple artifacts cover 80%+ combined | Create thin wrapper or document workflow |
| **ITERATE** | 20-50% overlap, proposal needs refinement | Refine proposal to differentiate |
| **BLOCK** | Would create problematic duplication | Do not create |

### Step 5: Present and Confirm

Display the analysis and wait for explicit user approval before proceeding.

## Output Format

```
════════════════════════════════════════════════════════════════
CREATION GUARD ANALYSIS
════════════════════════════════════════════════════════════════

PROPOSAL:
  Type: [skill|agent]
  Name: [proposed-name]
  Purpose: [one sentence]

EXISTING ARTIFACTS ANALYSED: [count]

RELATED ARTIFACTS FOUND:

1. [artifact-name] ([type])
   Purpose: [what it does]
   Overlap: [X]% - [explanation]

2. [artifact-name] ([type])
   Purpose: [what it does]
   Overlap: [X]% - [explanation]

RECOMMENDATION: [PROCEED|EXTEND|COMPOSE|ITERATE|BLOCK]

RATIONALE:
[2-3 sentences explaining the recommendation]

SUGGESTED ACTION:
[Specific next step based on recommendation]

════════════════════════════════════════════════════════════════
```

## Recommendation Details

### PROCEED
- Artifact is genuinely new
- No significant overlap found
- Clear differentiation from existing tools
- Go ahead and create

### EXTEND
Present extension proposal:
```
Instead of creating [new-name], extend [existing-name]:

Current capabilities:
- [existing feature 1]
- [existing feature 2]

Proposed additions:
- [new feature 1]
- [new feature 2]
```

### COMPOSE
Present composition approach:
```
The proposed functionality can be achieved by combining:

1. [artifact-1] — handles [aspect]
2. [artifact-2] — handles [aspect]

Options:
A) Document this workflow (no new code)
B) Create thin orchestration skill
C) Add to existing skill's integration section
```

### ITERATE
Present refinement questions:
```
Overlap detected with [existing-artifact].

Differentiation needed:
1. [question about scope]
2. [question about use case]
3. [question about implementation]

Please clarify to proceed.
```

### BLOCK
Explain why creation should not proceed:
```
BLOCKED: Would create problematic duplication.

Existing artifact: [name]
- Already does: [capabilities]
- Your request: [same capabilities]

Alternatives:
1. Use existing: /[skill-name]
2. If missing features, extend the existing artifact
3. If different use case, explain how this differs
```

## Post-Match Action Table

When overlap IS found, use this table to decide the specific action:

| Situation | Action |
|-----------|--------|
| Nothing related found | Create new artifact |
| Same trigger + same fix as existing | Update existing (bump version, improve docs) |
| Same trigger, different root cause | Create new + add cross-links in both |
| Partial overlap (same domain, different trigger) | Add variant subsection to existing |
| Same domain, different problem | Create new + add "See also" references |
| Existing is stale or wrong | Mark deprecated + create replacement |

This complements the PROCEED/EXTEND/COMPOSE/ITERATE/BLOCK recommendation above. The recommendation decides *whether* to create; this table decides *how* to handle the relationship with existing artifacts.

## Self-Check Questions

Before creating ANY new artifact, ask:

1. Does something similar already exist?
2. Could this be added to an existing artifact?
3. Would a user know to look for this vs the existing one?
4. Am I creating this because it's needed or because it's easier than finding what exists?

## Naming Convention Enforcement

When creating a new skill, **always** name the definition file `SKILL.md` (uppercase). Never `skill.md`, `Skill.md`, or any other casing.

- The MCP server's skill discovery scans for `SKILL.md` explicitly
- Documentation generators and `system-audit` use `find -name 'SKILL.md'`
- On case-insensitive filesystems (macOS APFS), lowercase files appear to work locally but fail in case-sensitive contexts (Linux CI, Docker, MCP server pattern matching)

**Check before writing:** If the target directory already contains a `skill.md` (lowercase), rename it to `SKILL.md` first.

## Anti-Patterns

| Anti-Pattern | Problem | Instead |
|--------------|---------|---------|
| Skip the check | "It's obviously new" — famous last words | Always run the analysis |
| Name-only matching | Names differ but functions overlap | Search by purpose and keywords |
| Create then merge | Merge debt accumulates fast | Check first, create once |
| Over-splitting | Two skills that always run together | Consider a single skill with phases |
| Lowercase `skill.md` | Invisible to MCP server, audit tools, and case-sensitive systems | Always use `SKILL.md` (uppercase) |

## Integration

This skill is invoked by `skill-extract` in Phase 2 to replace the old subset/partial/no-overlap check. When called from `skill-extract`, return the recommendation label (PROCEED/EXTEND/COMPOSE/ITERATE/BLOCK) so `skill-extract` can branch accordingly.

Attribution

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

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.