A community-driven registry for Claude, Cursor, Windsurf, Cline & more. Not affiliated with Anthropic.
Are you the author? Sign in to claim
ai-rules is a governance framework designed to solve "Architectural Decay" in AI-driven development. It forces AI Agents
AI-RULES is a rule-aware CLI for AI-assisted coding governance. It turns project rules in Markdown into structured rule metadata, lightweight local evidence, and deterministic audit/fix prompts so AI coding agents follow your architecture, design patterns, and UI standards more consistently.
At a broader product level, AI-RULES is evolving toward a practical rules compiler for AI coding workflows: project-authored rules are compiled into Rule IR, validator artifacts, evidence references, and repair hints that richer agent runtimes can consume later.
AI coding agents are powerful, but they often write "generally correct" code instead of code that fits your repository's real architecture. They may call data layers from UI components, bypass service boundaries, ignore project-specific directories, leak secrets in logs, or return audit reports in shapes that downstream repair flows cannot reliably consume.
AI-RULES gives those agents a project-local operating contract before code reaches review, CI, or merge gates. It packages your engineering standards into .ai-rules.md, rules-config.json, and config.json, then turns them into rule-aware audit and fix prompts with enabled rules, severity thresholds, local evidence, path aliases, exceptions, and repair guidance.
The practical benefits are:
config.json path aliases instead of editing every rule.In short: repository governance tools protect the merge boundary; AI-RULES guides the AI while it is still writing and repairing code.
Today AI-RULES is already more than a static prompt pack:
The longer-term direction is to keep moving from "rules as text" toward "rules as compiled execution context" so future agent runtimes can reason over:
That is the practical meaning of the rules compiler direction for this project.
.ai-rules/.ai-rules.md and rules-config.jsonextends chains for rules and configregex and import/include style rulescount rules such as function-lines and params-countthresholds for active parameterized rule behaviorexceptions to suppress known-safe files per rule patternai-rule-report.jsonAI-RULES can now generate a separate business-logic inspection flow with:
ai-law inspect-logic.ai-rules/cache/logic-audit-context.json.ai-rules/cache/ai-logic-report.template.jsonThis mode is designed for logic vulnerabilities that are harder to reduce to framework misuse alone, such as:
For native c-cpp projects, the same command shifts its review model toward:
The CLI does not claim deterministic local detection for all of these. Instead, it compiles the current rule context, validator output, candidate evidence, and high-risk context files into a focused prompt for AI-assisted logic review.
Current templates already cover a first batch of high-priority engineering rules in addition to the original architecture baseline.
innerHTML / dangerouslySetInnerHTML is flagged and can now produce AST-backed local evidenceeval() / Function() is flagged and can now produce AST-backed local evidencekey, with AST-backed local evidence for supported React filescomputed must stay pure.vue files:key, with AST-backed local evidence for supported .vue filesexcept and broad swallowed exceptions are discouragedresponse_modeltime.sleep@Valid should guard @RequestBody inputspermitAll() or global protection disablement is flagged@Transactional should not live on controllersnew/delete and unsafe C string/input APIs are flaggedAI-RULES is not a full static analysis engine yet.
regex and import/include detection can collect local evidencecount detection can collect local evidence for function-lines and params-countast rules can now produce parser-backed local evidenceast rules and semantic rules remain AI-guided and treated as ai-onlyBuilt-in locale files are available for:
zh-CN: Simplified Chinese, completeen: English, completezh-TW: Traditional Chinese, partial, falls back to Englishja: Japanese, partial, falls back to Englishko: Korean, partial, falls back to Englishes: Spanish, partial, falls back to Englishfr: French, partial, falls back to EnglishThe partial locales currently translate the core template names and prompt instructions. Missing rule-level text automatically falls back to English so new languages remain usable while translations are expanded over time.
Requires Node.js >=18.
Install globally:
npm install -g ai-law
Or for local development in this repository:
npm install
npm test
cd your-project
# 1. Initialize rules in the current project
ai-law init
# 2. Check that rules/config are valid
ai-law doctor
# 3. Generate a rule-aware audit prompt
ai-law audit
# 4. `audit` also writes local helper files by default
# - .ai-rules/cache/audit-context.json
# - .ai-rules/cache/rule-ir.json
# - .ai-rules/cache/rule-validator.json
# - .ai-rules/cache/ai-rule-report.template.json
# 5. Or inspect the structured audit context directly
ai-law audit --json
# 6. Optionally force a fresh context dump
ai-law audit --dump-context
# 7. After your AI tool produces ai-rule-report.json, validate it
ai-law validate-report
# 8. Generate a fix prompt for one issue
ai-law fix --issueId ISSUE-001
# 9. Or generate a grouped fix prompt for the whole report
ai-law fix --all --group-by-rule
ai-law init creates a .ai-rules/ directory in your project and materializes the selected template.
Example layout:
.ai-rules/
├── .ai-rules.md
├── rules-config.json
├── config.json
├── base/
│ ├── .ai-rules.md
│ ├── rules-config.json
│ └── config.json
└── cache/
├── audit-context.json
├── rule-ir.json
├── rule-validator.json
└── ai-rule-report.template.json
ai-law doctor validates:
.ai-rules/ existsrules-config.json can be loaded and merged through extendsenabledRuleIds point to real rulesUse ai-law doctor --strict to treat warnings as failures.
ai-law audit now reads the current project rules and builds a prompt from:
Useful variants:
ai-law audit --locale zh-CN
ai-law audit --json
ai-law audit --summary
ai-law audit --dry-run
ai-law audit --dump-context
--json prints the structured audit context instead of a prompt.
By default, ai-law audit writes:
.ai-rules/cache/audit-context.json.ai-rules/cache/rule-ir.json.ai-rules/cache/rule-validator.json.ai-rules/cache/ai-rule-report.template.jsonUse the generated prompt with your AI tool, then save the AI result as ai-rule-report.json in the project root.
The cached audit context now includes stable evidenceId / matchId values so AI reports can reference concrete local evidence records.
The validator cache now includes explicit per-rule validator results plus structured candidate violations for deterministic local evidence.
--dump-context forces a fresh write of .ai-rules/cache/audit-context.json.
--summary prints enabled-rule counts, local-vs-AI coverage, suppressed files, and configured thresholds.
--dry-run prints include/exclude patterns, rule IDs that can run locally, AI-only rule IDs, and active exception patterns.
Audit report example: the AI returns a structured ai-rule-report.json that can be validated and fed into the next repair step.
After your AI tool returns ai-rule-report.json, run:
ai-law validate-report
This command normalizes legacy or drifted report shapes into a stable structure and checks for issues like:
issueIdruleIdissueIdseverityevidenceId / matchId references when .ai-rules/cache/audit-context.json is availableruleId references when .ai-rules/cache/rule-validator.json is availableYou can inspect the normalized report with:
ai-law validate-report --json
ai-law fix now combines:
.ai-rulesWhen you run ai-law fix --all, issues are ordered deterministically:
FATAL before WARN before INFO--group-by-rule keeps grouping while preserving stable ordering between groupsExamples:
ai-law fix --issueId ISSUE-001
ai-law fix --id ARCH-101
ai-law fix --all
ai-law fix --all --group-by-rule
Fix prompt example: ai-law fix turns one or more report entries into a focused, patch-oriented repair prompt with rule context and evidence.
Rules are defined in .ai-rules.md using RULE blocks. The CLI currently parses fields such as:
RULEseverityscopeintentfixdetectpromptcontextextendsExample:
### RULE: ARCH-101
severity: FATAL
scope: ui
intent: UI components must not initiate network requests directly.
detect:
regex: "fetch\\(|axios\\."
where: filePath in src/components/**
fix: Move request logic into a service layer.
prompt:
violation: Detected direct request logic in UI layer.
requirement: UI components must not contain request logic.
solution: Move requests to a service and reuse shared clients.
context:
- src/services/
- src/api/client.ts
Templates can provide an optional .ai-rules/config.json file for user-specific project layout overrides. This file is merged on top of rules-config.json, so users can adjust directory conventions without editing every rule.
Example:
{
"pathAliases": {
"@controller": "app/controllers",
"@service": "app/services",
"@repository": "app/repositories",
"@config": "app/config"
}
}
Rules can reference those aliases in context, detect.where, detect.import, and detect.include:
detect:
include: "@repository/**"
where: filePath in @controller/**
context:
- @service
At audit/fix time, the CLI resolves aliases before collecting evidence or building prompts.
ai-law doctor and ai-law audit warn prominently when a configured alias points to a path that does not exist. If this happens, open .ai-rules/config.json and adjust pathAliases to match your repository layout.
Current support in the CLI:
detect.regex: local evidence collection supporteddetect.import: local evidence collection supporteddetect.include: local evidence collection supporteddetect.ast: first frontend AST-backed rules now support local evidencedetect.semantic: AI-only for nowCurrent AST-backed local evidence focuses on frontend JS/TS projects and covers the first narrow batch of rules:
fetch() / axios.*dangerouslySetInnerHTML / innerHTMLeval() / Function().vue script blocks.vue templatesany usage in TS/TSX filesThis means the CLI can now attach concrete local evidence for regex/import/include/count and a first slice of AST-backed frontend rules across React and Vue, while still allowing AI-guided review for higher-level semantic constraints and unsupported AST rules.
The current templates intentionally mix:
The config model now supports two rule-aware extensions:
astUsed for high-level AST backend orchestration. AI-RULES keeps this config intentionally small and merges it with detected project config at runtime.
Example:
{
"ast": {
"provider": "babel",
"target": "react",
"useProjectConfig": true,
"parserOptions": {
"sourceType": "module",
"plugins": ["jsx", "typescript"]
}
}
}
At runtime, AI-RULES resolves AST settings in this order:
tsconfig.json / .babelrc / package.json#babel.ai-rules/config.json overridesthresholdsUsed for configurable numeric limits that active local count rules can reference.
Example:
{
"thresholds": {
"maxFunctionLines": 80,
"maxParamsCount": 5,
"maxListLimit": 100
}
}
exceptionsUsed to suppress known-safe files for matching rule IDs or rule ID patterns during local evidence collection.
Example:
{
"exceptions": {
"ARCH-101": [
"src/integrations/**"
],
"SEC-*": [
"__mocks__/**",
"**/*.stories.tsx"
]
}
}
These exceptions currently affect local evidence collection for supported local detect modes.
The audit prompt requests strict JSON with a normalized structure like:
{
"version": "1.1",
"generatedAt": "2026-03-30T12:00:00Z",
"project": {
"cwd": ".",
"stack": "react-ts"
},
"summary": {
"total": 1,
"fatal": 0,
"warn": 1,
"info": 0
},
"violations": [
{
"issueId": "ISSUE-001",
"ruleId": "ARCH-101",
"severity": "WARN",
"confidence": 0.82,
"file": "src/pages/Home.tsx",
"line": 12,
"snippet": "const data = fetch('/api')",
"description": "Direct network request found in UI layer.",
"fixSuggestion": "Move request logic into services.",
"repairPrompt": "Provide a minimal patch...",
"evidence": {
"source": "local-regex",
"matchedBy": "detect.regex"
},
"context": [
"src/services/"
]
}
]
}
Current templates:
frontend-base
react-jsreact-tsvueelectronvscode-extensionnodejs-base
expressnestjspython-base
python-fastapijava-base
java-springc-cppBranch templates inherit from base templates through extends.
ai-law init
ai-law audit [--locale <code>] [--json] [--summary] [--dry-run] [--dump-context]
ai-law inspect-logic [--locale <code>] [--profile logic|native|model] [--json] [--dump-context]
ai-law fix --issueId <issue_id>
ai-law fix --id <rule_id>
ai-law fix --all [--group-by-rule]
ai-law doctor [--strict]
ai-law validate-report [--json] [--path <file>]
ai-law setup [--locale <code>] [--provider <name>] [--write]
ai-law -v
ai-law -h
setup --write)ai-law setup --provider <name> --write installs Agent Skills–style layouts where each tool expects them (YAML name / description / argument-hint + SKILL.md). Re-running --write removes legacy paths for that provider (e.g. old .claude/commands/*.md, .cursor/commands/*.md, ~/.codex/prompts/law-*.md, .ai-rules/slash-prompts/*.md) so you do not get duplicate /law-* entries. The same command also writes .ai-rules/cache/skill-manifest.json, which records the generated provider layout, workflows, output files, and cache artifacts that each skill expects.
| Provider | Output paths (project or home) |
|---|---|
| claude-code | .claude/skills/law-audit/SKILL.md, law-fix, law-logic, law-native, law-model |
| cursor | .cursor/skills/law-audit/SKILL.md, law-fix, law-logic, law-native, law-model |
| codex | $CODEX_HOME/skills/.../SKILL.md (default ~/.codex/skills/...) |
| copilot | .github/prompts/law-audit.prompt.md (GitHub Copilot prompts; no shared skills root) |
| custom | .ai-rules/skills/.../SKILL.md (portable copy for other editors) |
Behavior of the five workflows (invoke via /law-audit, /law-fix, /law-logic, /law-native, /law-model where the product supports skills):
ai-law audit, use cache artifacts, produce ai-rule-report.json (Claude Code body uses !`...` injection; Cursor/Codex/custom use prompt-backed steps).ai-law fix --issueId … for one issue.ai-law inspect-logic + ai-logic-report.json.ai-law inspect-logic --profile native + ai-native-report.json.ai-law inspect-logic --profile model + ai-model-report.json.ai-law doctor now validates managed skill installs too:
.ai-rules/cache/skill-manifest.json still exists.claude/settings.local.json does not allow Bash(ai-law:*)Claude Code SKILL.md bodies omit allowed-tools in frontmatter (some builds reject Bash(tool:*) patterns). If /law-* never appears in completion, try an official client build; proxy stacks may not load project skills.
ai-law Bash permissionsSkills use !`ai-law …` dynamic context injection, which is still checked against Bash permissions.
Running ai-law setup --provider claude-code --write merges Bash(ai-law:*) into .claude/settings.local.json → permissions.allow (creates the file if needed; skips if that rule or Bash(ai-law *) is already present).
If you still see Shell command permission check failed, add the same rule to .claude/settings.json, use /permissions in Claude Code, or approve once with always allow. See Claude Code permissions.
See also: Cursor skills, Claude Code slash commands / skills.
Current implementation layers:
cli/src/core/config: config loading and extends mergecli/src/core/rules: rule parsing and validationcli/src/core/evidence: local evidence collectioncli/src/core/prompt: audit prompt assemblycli/src/core/report: report normalization and schemaRun tests:
npm test
Cursor AI 编程规则精选集 | 132+ 规则,覆盖前端/后端/AI/DevOps 等 32 个领域
A practical approach to managing multiple AI agents in Cursor through strict file-tree partitioning and domain boundarie
📄 Configuration files that enhance Cursor AI editor experience with custom rules and behaviors