Skip to content
Back to skills

Rule Extraction

ASecurity

Extract a structured list of rules from all markdown files at the top level of a skill directory. Use this skill whenever you need to parse rules out of a skill for conflict checking, merging, or diffing.

  • 41 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added May 27, 2026
data-aipythongo

Security analysis

A100/100

Scanned May 27, 2026

npx -y skills add KnowledgeXLab/skill-git --skill rule-extraction --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Rule Extraction?

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

Security grade badge for Rule Extraction
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/knowledgexlab-rule-extraction/badge)](https://www.skillsdirectory.com/skills/knowledgexlab-rule-extraction)

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: Rule Extraction
description: Extract a structured list of rules from all markdown files at the top level of a skill directory. Use this skill whenever you need to parse rules out of a skill for conflict checking, merging, or diffing.
version: 1.1.0
---

# Rule Extraction

This skill teaches you how to extract a structured, line-numbered list of rules from a skill directory.

## What Counts as a Rule

A **rule** is any statement that prescribes or constrains agent behavior. Recognize rules by their form:

- **Imperative directives**: "Always add type annotations", "Never use `var`"
- **Prohibition patterns**: "Do not X", "Avoid X", "禁止 X"
- **Requirement patterns**: "Must X", "Should X", "需要 X", "必须 X"
- **Conditional behavior**: "If X, then Y", "When X, do Y"
- **Style/format mandates**: "Use camelCase", "Limit lines to 80 characters"
- **Preference statements**: "Prefer X over Y", "优先使用 X"

Rules can appear as:
- Bullet list items (`-` or `*` or `+`)
- Numbered list items (`1.`, `2.`)
- Bold or emphasized sentences (`**Always do X**`)
- Plain sentences within a paragraph that contain directive language
- Section headers that are themselves imperatives ("Never commit secrets")

## What Does NOT Count as a Rule

Exclude the following from extraction:

- **Descriptive text**: Explanations of why a rule exists, background context
- **Examples**: Code blocks, sample outputs, "for example..." passages
- **Metadata**: YAML frontmatter, version info, author notes
- **Headings that introduce a section** (unless the heading itself is an imperative rule)
- **Vague non-actionable statements**: "Do good work", "Be helpful" — extract these but flag them as `vague: true`

## Output Format

Return a JSON array. Each rule is an object:

```json
[
  {
    "id": 1,
    "file": "SKILL.md",
    "line": 12,
    "text": "Always add type annotations to function parameters",
    "source_text": "- Always add type annotations to function parameters",
    "vague": false
  },
  {
    "id": 2,
    "file": "SKILL.md",
    "line": 15,
    "text": "Do not use var, prefer const or let",
    "source_text": "**Do not use `var`** — prefer `const` or `let`",
    "vague": false
  },
  {
    "id": 3,
    "file": "examples.md",
    "line": 4,
    "text": "Do good work",
    "source_text": "- Do good work",
    "vague": true
  }
]
```

Field definitions:
- `id`: Sequential integer starting from 1, across all files combined
- `file`: Filename (basename only, e.g. `SKILL.md`, `examples.md`) where the rule appears
- `line`: Line number within that file where the rule appears (1-indexed)
- `text`: Cleaned rule text, stripped of markdown formatting
- `source_text`: Original raw line as it appears in the file
- `vague`: `true` if the rule is too broad to be actionable

## Input Scope

The input is a **skill directory path** (e.g. `~/.claude/skills/humanizer/`).

**Files to read:** all `*.md` files directly inside the skill directory — `SKILL.md` first, then any other `*.md` files in alphabetical order.

**Files to skip:**
- Subdirectories and any files inside them (no recursive scan)
- Non-markdown files (`.sh`, `.py`, `.js`, `.json`, etc.)

## Extraction Process

1. **List** all `*.md` files at the top level of the skill directory (non-recursive). Read `SKILL.md` first if present; read remaining `*.md` files in alphabetical order.
2. **For each file**, read it line by line, tracking line numbers within that file.
3. **Skip frontmatter** (everything between `---` delimiters at the top of each file)
4. **Skip code blocks** (between ` ``` ` fences) — these are examples, not rules
5. **For each line**, determine if it contains a rule using the criteria above
6. **For paragraph text**: split into sentences, check each sentence independently
7. **Clean the extracted text**: remove markdown syntax (`-`, `*`, `**`, backticks) but preserve the meaning
8. **Assign line numbers** based on where the rule text starts within its file
9. **Record the source filename** for every rule

## Handling Ambiguous Cases

- **Compound bullet**: "Use camelCase and limit lines to 80 chars" → split into two rules, both on the same line number
- **Nested bullets**: Treat each nested item as an independent rule
- **Conditional rules**: Keep the full conditional ("If Python, use type hints") as one rule — do not split on the condition
- **Negated rules**: "Don't use X" and "Never use X" are equivalent — normalize to a consistent form in `text`, preserve original in `source_text`

## Example

Input skill directory: `~/.claude/skills/code-style/`
Files found at top level: `SKILL.md`, `extra-rules.md`
(Any subdirectory contents are ignored.)

**SKILL.md:**
```
---
name: Code Style
---

# Code Style Guidelines

Keep code clean and maintainable.

## Naming
- Use camelCase for variables and functions
- Use PascalCase for classes and types
- Never use single-letter variable names except for loop indices

## Comments
Always write comments in English.
Do not write comments explaining what the code does — only explain why.

## Example
\`\`\`python
# good
def calculate_total(items):
    return sum(items)
\`\`\`
```

**extra-rules.md:**
```
- Prefer explicit returns over implicit ones
```

Output:
```json
[
  {
    "id": 1,
    "file": "SKILL.md",
    "line": 10,
    "text": "Use camelCase for variables and functions",
    "source_text": "- Use camelCase for variables and functions",
    "vague": false
  },
  {
    "id": 2,
    "file": "SKILL.md",
    "line": 11,
    "text": "Use PascalCase for classes and types",
    "source_text": "- Use PascalCase for classes and types",
    "vague": false
  },
  {
    "id": 3,
    "file": "SKILL.md",
    "line": 12,
    "text": "Never use single-letter variable names except for loop indices",
    "source_text": "- Never use single-letter variable names except for loop indices",
    "vague": false
  },
  {
    "id": 4,
    "file": "SKILL.md",
    "line": 15,
    "text": "Always write comments in English",
    "source_text": "Always write comments in English.",
    "vague": false
  },
  {
    "id": 5,
    "file": "SKILL.md",
    "line": 16,
    "text": "Do not write comments explaining what the code does — only explain why",
    "source_text": "Do not write comments explaining what the code does — only explain why.",
    "vague": false
  },
  {
    "id": 6,
    "file": "extra-rules.md",
    "line": 1,
    "text": "Prefer explicit returns over implicit ones",
    "source_text": "- Prefer explicit returns over implicit ones",
    "vague": false
  }
]
```

Notes:
- SKILL.md lines 18–23 (the code block) are skipped entirely
- `id` is sequential across all files; `line` resets to 1 for each new file
- Any subdirectories inside `~/.claude/skills/code-style/` are not scanned

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.