imperatives
Original:🇺🇸 English
Translated
1 scriptsChecked / no sensitive code detected
Use when extracting imperatives from agent instruction files, analyzing rule coverage, or preparing input for /policy-algebra and /distill.
7installs
Sourcecamacho/ai-skills
Added on
NPX Install
npx skill4agent add camacho/ai-skills imperativesTags
Translated version includes tags in frontmatterSKILL.md Content
View Translation Comparison →/imperatives
Extract atomic imperatives (MUST/SHOULD/MAY) from markdown instruction files into JSONL.
Usage
/imperatives # default: ai-workspace/rules/*.md + AGENTS.md
/imperatives .claude/rules/*.md # specific globs
/imperatives --output imperatives.jsonl # write to fileSteps
-
Resolve files. Default:and
ai-workspace/rules/*.md. Expand globs to absolute paths. Zero matches → error, stop.AGENTS.md -
Pass 1 — Script extraction (fast, deterministic).bash
node --import tsx scripts/extract-imperatives.ts <files...> --output /tmp/imperatives-pass1.jsonlKeyword-based: catches RFC 2119 terms + imperative verbs. ~80% coverage, <1s. -
Pass 2 — Subagent reasoning (catches implicit imperatives). For each file, dispatch a subagent to identify imperatives the regex missed — contextual rules, implicit constraints, prose-embedded obligations.Subagent prompt:Read. Here are the imperatives already extracted by the script for this file:
<file><pass 1 JSONL lines where source.file matches>Identify additional imperative statements the regex missed. Look for:- Implicit obligations hidden in prose (e.g., "The workflow is a menu, not a pipeline" implies MUST NOT enforce order)
- Contextual constraints (e.g., section context that makes a statement imperative)
- Conditional rules not triggered by keyword patterns
For each new imperative found, output one JSON line (same schema — id, level, polarity, subject, predicate, when, source, tool_scope, tags, raw). Do NOT duplicate entries already in pass 1. If none found, output nothing.Use(Haiku) for most files. If a file had zero pass-1 imperatives OR contains dense prose (>50 lines without a keyword match), escalate that file to Sonnet for deeper reasoning.subagent_type: "explorer" -
Merge passes. Concatenate pass 1 + pass 2 outputs. Deduplicate bytext. Write final output to
rawor present inline.--output <path> -
Present summary. Report in a table:
- Total count (pass 1 baseline + pass 2 additions)
- Breakdown by and
leveltool_scope - Files with zero imperatives after both passes
- Pass 2 additions highlighted separately
-
Downstream callers. If invoked byor
/policy-algebra, return the JSONL path directly — skip the summary./distill
Failure modes
| Condition | Behavior |
|---|---|
| No files matched | Error message. Stop. |
| File not found | Script warns on stderr, continues with remaining files. |
| Zero imperatives | Report zero. Not an error. |
| Script exits non-zero | Surface stderr to user. |
Cross-tool notes
- Codex / Cursor: run the script directly — it's tool-agnostic.