-
-
Notifications
You must be signed in to change notification settings - Fork 3
Releases: reporails/cli
v0.5.10
852c3ef Capability targeting + lint scope correctness.
Highlights
ails check <capability>/ails check <capability> <name>— focused scorecards per skill / rule / agent / memory. Listing mode renders one health bar per item, sorted worst-first, with(N: Xe/Yw/Zi)finding-count breakdowns. Vocabulary read from the detected agent's config.Level: L# <Label>read-out in the scorecard, re-aligned to the canonical ladder indocs/capability-levels.md: System / Primer / Composite / Scoped / Delegated / Abstracted / Governed / Adaptive (L0–L7). Read-out only; rule applicability unchanged.- New rule
CORE:S:0056 broken-markdown-link— mechanical validator for[text](path)and[ref]: pathreferences. Code-span aware (backtick syntax examples don't false-positive). Severityhigh. - Per-agent memory locators —
ails check memoryenumerates Claude auto-memory (~/.claude/projects/*/memory/), Gemini private memory (~/.gemini/tmp/*/memory/), and project-local agent-memory dirs. Codex declared as tombstone (/memoriesslash command surface, no rule pressure). genericfile class via link-reachability (opt-ingeneric_scanning: true) — classifier BFS-walks outgoing links and tags reached in-tree.mdfiles. Cycle-safe, depth-bounded.
Fixes
- Mechanical-check glob targets honor
.ails/config.yml: exclude_dirs. - Project-wide attribution no longer points at user-scope
~/.claude/CLAUDE.md; user-scope rendering gated on classifierprecedence: user(read from agent config), not path-prefix heuristics. - Mapper daemon stays attached across runs (socket-existence gate, FIFO-only FD close, SIGPIPE ignored). Warm
ails check~5.6s. walk_globfollows symlinked dirs with cycle protection.- Gemini memory locator updated to current upstream surface; legacy
## Gemini Added Memoriesremoved.
Full changelog: CHANGELOG.md
Assets 2
v0.5.9
3282271 Reporails CLI v0.5.9
Self-contained install: the spaCy English pipeline and the ONNX embedder now ship inside the wheel, so pip install reporails-cli, uv pip install, or npx @reporails/cli deliver everything in one step — no separate model download, no post-install surprise under uv virtualenvs.
Install
npx @reporails/cli check # zero-install via npm uvx --from reporails-cli ails check # zero-install via uv pip install --upgrade reporails-cli # permanent install
What's new
Build & install
- Bundled spaCy pipeline (
en_core_web_sm, ~15 MB) ships inside the wheel underbundled/spacy/, alongside the existing bundled ONNX MiniLM-L6-v2 (~80 MB). Removes
the separatepython -m spacy downloadstep that silently failed underuvvirtualenvs. - Python version pin:
requires-python = >=3.12,<3.14. Python 3.14 ships apydantic.v1introspection regression that breaksimport spacy; the pin keeps the
classifier reliable underuv sync.
User-visible polish
- API client sends a stable
User-Agent: reporails-cli/<version>header on every diagnostic request, replacing the genericpython-httpx/<version>default. - Rate-limit CTA surfaces a
Try again in ~N min.hint when the server returnsreset_in, between the limit blurb and the upgrade prompt. - Bug-report URLs render as OSC 8 terminal hyperlinks with a short clickable label (
github.com/reporails/cli/issues/new) instead of dumping the full percent-encoded
prefilled URL; falls back gracefully on terminals without hyperlink support. - Error wording for unrecognized server responses now reads
Diagnostics server returned HTTP <code>. Noisy stderr warnings demoted to debug logging. - Duplicate-file annotations: file rows show
(+alias)labels for files surfaced under multiple paths —mintlify (+.claude)for symlinked surfaces,AGENTS.md (+CLAUDE.md)for same-directory content-identical pairs.
Fixes
frontmatter_valid_globno longer crashes on comma-separatedpaths:values; each entry is split and validated individually, and invalid glob syntax surfaces as a
structured check failure.- Skill and rule files surfaced under multiple agent paths via symlinks (e.g.
.claude/skills/→.agents/skills/) are now collapsed to one canonical entry, eliminating
duplicate findings and inflated scoring.
Removed
ails mapcommand.
Full Changelog: 0.5.8...0.5.9
Assets 2
v0.5.8
2567dfe Bandwidth and lifecycle improvements on large projects, the daemon adjustments and a lot of rule updates
Highlights
- Compact wire format. via msgpack, anon users are much less frequent to rate limit
- Local byte preflight. New
WIRE_MAX_BYTES_BY_TIERtable andpreflight_byte_size()incore/funnel. Local rejection returns apayload_too_largeFunnelError
before transmission instead of an opaque server-side 4xx. - Mapper daemon adjustment. The 1-hour idle timeout is now opt-in via
AILS_DAEMON_IDLE_Sinstead of applied by default. Without the override the daemon runs until
ails daemon stopor an explicit kill. - Four rule-ID mappings repointed.
ails explainondescription-mismatch,orphan,overall-strength, andnamed-coveragereturned unrelated rules. The bug is now fixed, it resolves accurately —CORE:C:0055 description-coherence(new),CORE:C:0053 ideal-instruction,CORE:C:0042 specificity-gaprespectively. Two deadRULE_ID_MAP
entries (cross-conflict,cross-repetition) pruned. - Four cross-agent rule promotions.
skill-name-matches-directory→CORE:S:0036,skill-no-readme→CORE:S:0035,skill-description-length→CORE:S:0040,
import-depth-within-limit→CORE:S:0033. The last follows thepath-scope-declaredsupersede pattern: CLAUDE supersedes with the documented 5-hop limit, CURSOR with
max: 1, Codex/Copilot exclude (no@<path>syntax), Gemini inherits. - Cross-agent rule matching fixed. Rules with
match: {type: scoped_rule}andmatch: {type: skill}were silently never matching any file because agent configs use
plural keys (rules:,skills:) while rule-side match expressions use the singular concept names. A_FILE_TYPE_MATCH_ALIASESmap normalizes this. Bandage — full
vocabulary alignment is tracked as a follow-up. - GitHub-issues deep-link on unknown errors. When the diagnostic API returns an unrecognized error, the "Did you see an error?" exit ramp now opens
/issues/newwith
the title and a triage-ready body (environment + reproduce skeleton) prefilled, plus abuglabel. Known funnel errors keep the plain/issuesindex.
Full Changelog: 0.5.7...0.5.8
Assets 2
v0.5.7
22c02b6 Bugfix release. Discovery and classification rebuild — ails check no longer false-positives on per-package CLAUDE.md / AGENTS.md / GEMINI.md files in monorepos.
Highlights
- Monorepo fix. Per-package nested instruction files are now classified as
nested_context, notmain. Size and othermatch: {type: main}rules stop firing on
them. Bug surfaced against activepieces/activepieces. - Project root = your target.
ails check <path>treats<path>as the project root. No walking up to find.gitor.ails/. What you point at is what gets
scanned. - Per-project surface tuning.
.ails/config.ymlgainssurfaces.<agent>.<file_type>.include/.excludeandagents.<id>.fallback_filenames(mirrors Codex
project_doc_fallback_filenames)..ails/config.local.yml(gitignored) layers on top for personal / CI-only overrides. scope: nestedenum. New schema value for surfaces whose subtree applicability comes from file location rather than frontmatter — replaces the prior overload of
scope: path_scoped.- Case-sensitive AGENTS.md matching. Aligns with Codex's source (
DEFAULT_AGENTS_MD_FILENAME = "AGENTS.md").agents.md(lowercase) is no longer mis-surfaced. depends_onresolves through supersession. Rules that depend on a base rule now match its superseding agent rule too — no more spurious "dependency not loaded"
warnings.
Full Changelog: 0.5.6...0.5.7
Assets 2
v0.5.6
ec3adfb Public docs, a clearer tier model, better error messaging, and a few CI quality-of-life wins.
Highlights
Public documentation at cli/docs/
Seven pages covering installation, agent support, tier limits, configuration, score interpretation, and FAQ. Browse on reporails.com/docs or in-repo under docs/. Each page has prev/next navigation footers and YAML frontmatter.
Anonymous vs signed-in mode
Replaces the prior Free/Pro framing with a cleaner two-mode model that matches what you actually experience:
- Anonymous — no account, summary findings, cross-file conflict counts
- Signed in — full per-finding fix text and exact cross-file conflict locations
See Tiers and Limits for the side-by-side breakdown.
ails auth token
New subcommand prints the stored API key to stdout for CI export. Pipes cleanly into your CI provider's secret store:
AILS_API_KEY=$(ails auth token)Exits non-zero when not authenticated, so scripts can detect missing credentials.
Rich error messages
When the diagnostic backend returns a 4xx (rate-limited, oversized payload, atom-cap hit), the CLI now renders a tier-aware CTA in the assessment box instead of silently swallowing the error. Anonymous mode points at ails auth login; signed-in mode points at the GitHub issues page for use-case escalation. A secondary "Did you see an error?
Let us know" line ensures failures always carry an exit ramp.
GitHub Action wrapper inputs
Two new inputs on the composite action:
- uses: reporails/cli/action with: api-key: ${{ secrets.REPORAILS_API_KEY }} # authenticated CI runs strict: "true" min-score: "7.0"
Hook regex tightening (vendor-docs audit)
- Claude — Setup event added to the valid-events regex (29 events total). New scheduled_tasks file_type covering ~/.claude/scheduled-tasks/**/SKILL.md.
- Copilot — hook-handler-has-type restricted to command only; hook-valid-event-types reduced to the 8 PascalCase events documented by VS Code Copilot.
- Cursor — narrative corrected to 20 events (regex already covered the full set).
- Gemini — hook-handler-has-type restricted to command only.
- Codex — hook regexes audited against the vendor docs; no changes needed.
Small wins
- README trimmed to elevator-pitch length with a runnable showcase block; CONTRIBUTING.md added as a recognized GitHub community-health file.
- Empty-files short-circuit in _lint_remote skips the HTTP round-trip when the mapper returns no instruction files.
- Universal-cap preflight (atom / file / cluster counts) saves a multi-MB upload when the payload would be hard-rejected regardless of tier.
- 4xx response bodies are now parsed and surfaced via a new LintResponse envelope (.result or .funnel_error).
- Credential storage corrected in docs/: actual location is ~/.reporails/credentials.yml (chmod 0600 on POSIX), not the OS keyring as previously documented.
- Pre-release Branch ↔ version alignment gate catches the "branch cut but never bumped" class of drift.
- Fixed pyproject.Documentation URL (was pointing at a 404).
Assets 2
v0.5.5
73d2f9f What's new
-
Full Windows support —
ails checknow runs reliably on Windows 10/11. Cross-platform regex timeout via theregexlibrary replaces POSIX-onlysignal.SIGALRM.
POSIX-only APIs (os.fork,socket.AF_UNIX,chmod,ITIMER_REAL) properly guarded so Windows surfaces clear errors instead of crashes. Path serialization uses
as_posix()everywhere so generatedbackbone.yml, violation locations, and SARIF file URIs use forward slashes regardless of platform.windows-latestadded to the CI
matrix;mypy --platform=win32runs on every release. -
Pydantic-native schemas —
Check,Rule,FileMatch,FileTypeDeclaration, andClassifiedFilemigrated from dataclasses to Pydantic. The model is the schema —
Rule.model_json_schema()exports it. No more hand-maintained YAML schema artifact. -
Rule layering — new
inheritedfield lets a child rule accumulate parent checks without replacing them, anddepends_ondeclares execution ordering between rules with
cycle detection. Check-levelreplaces,severity, andmessageoverrides expand the per-check escape hatches. -
sourcefield on rules — rules can now declare an authoritative documentation URL. When present,sourcesupersedesbacked_byfor verification — the rule points at
the official spec it enforces, not at a research bibliography. 22 rules already usesourceURLs. -
Hook rules overhaul — 5 new CORE base rules with a
depends_onchain, plus agent-specific overrides for Claude (5), Codex (3), Copilot (3), Cursor (5), and Gemini (3).
Recognized event names, handler types, and shell-variable references like$CLAUDE_PROJECT_DIRare now properly checked. Double-negation patterns fixed (expect: absent
pattern-not-regex→expect: present+pattern-regex).
- New CORE rules —
CORE:S:0026 import-references-used(verify@pathimports resolve),CORE:G:0003 permissions-ordered(permission configuration must be present in
settings),CORE:C:0037 static-before-dynamic(separate stable from dynamic content with headings),CORE:S:0031 skill-file-length(500-line ceiling onSKILL.md
files).
Fixes
- Windows crash —
AttributeError: module 'signal' has no attribute 'SIGALRM'in_scan_fileno longer occurs; the entire deterministic checks phase now runs on Windows.
(#17) - Match scope leaks — 12 project-level CORE rules narrowed from
format: freeformtotype: main, fixing false positives that previously fired on agent and skill files. - Copilot scope detection —
frontmatter_valid_globnow reads theapplyTokey for Copilot scope validation. - CLAUDE:S:0003 — broken
byte_sizecheck replaced withdescriptionfield presence check. - Severity tuning —
CORE:S:0017 self-contained-skillsandCORE:S:0022 local-override-filedowngraded to low;local-override-filenow correctly treated as optional. - Hook rule slugs — 3 Claude skill rules and 2 Codex rules renamed from sentence-fragment slugs to clean kebab-case names.
Full Changelog: 0.5.4...0.5.5
Assets 2
v0.5.4
e4ae322 What's new
-
Per-surface health scores — the scorecard now breaks down quality by surface (Main, Rules, Skills, Agents, Memory) with individual scores, file counts, and finding totals. No more hiding a weak surface behind an aggregate number.
-
Rule inheritance — agent-specific rules can now supersede CORE rules, inheriting their checks while optionally replacing individual ones. CLAUDE:S:0012, CURSOR:S:0001, and COPILOT:S:0001 all supersede the generic CORE:S:0038 path-scope check with agent-specific validation.
-
Claude Code frontmatter detection — new rule CLAUDE:S:0012 catches two common mistakes: using globs: instead of paths: (Claude Code reads paths: only), and adding unrecognized frontmatter keys that are silently ignored.
Fixes
- Charge classifier accuracy — added 8 missing verbs (append, stage, compose, etc.), rescued ambiguous verbs at position 0, and fixed spaCy nsubj misparses that demoted
real imperatives to neutral - Sentence splitting — no longer splits inside quoted strings or parenthetical spans, preventing example fragments from becoming standalone atoms
- Backtick filter — fixed false positives where a position-0 verb like "Build" was incorrectly filtered because the same word appeared in a later backtick span (uv build)
- Mixed-type rule dispatch — mechanical rules containing deterministic checks now have both check types executed; file targeting uses full property-based matching (scope,
format, not just type) - Silent hang on startup — progress output now shows during mapper initialization; default directory excludes prevent walking node_modules, .git, etc.
Full Changelog: 0.5.3...0.5.4
Assets 2
v0.5.3
cad94c0 What's New
Global daemon — one mapper process serves all projects. No more per-project daemons eating 1GB RAM each. Runtime artifacts moved out of your project directory —
.ails/ is now config-only.
Install to PATH — ails install puts the CLI on your PATH permanently. No more npx prefix for daily use. MCP config now uses the direct binary (faster startup,
works offline).
ails update — one command to upgrade to the latest version.
Classifier Fixes
Charge classification validated against 2,850 labeled atoms:
- Charge inversions eliminated — compound instructions ("Use X. Do not Y") now marked AMBIGUOUS instead of assigned (0.30% → 0.03% inversion rate)
- Colon-label rescue — "Label: Use X" / "Label: Never Y" patterns no longer neutralized as headings
- Late-constraint guard — negation after sentence boundaries in imperative atoms now detected
Upgrade
npx @reporails/cli install # first time ails update # if already installed Full changelog: https://github.com/reporails/cli/blob/main/CHANGELOG.md
Assets 2
v0.5.2
26c5b53 What's new
Performance fix — Pre-compiled regex eliminates ~26,500 re.compile() calls per run. The check_specificity() hot loop was compiling 53 patterns on every atom — now a single
alternation regex compiled once at module load.
Display extraction — Rendering logic extracted from main.py (1118 → 315 lines) into formatters/text/display.py, display_constants.py, and scorecard.py. No user-visible
output changes.
Free tier redesign — Inline Pro diagnostic counts per file card (⊕ N Pro diagnostics), cross-file coordinate section, and integrated upgrade CTA replace the disconnected
Hints section.
Daemon reliability — Closes inherited file descriptors before forking (fixes npx/CI hangs on pipe EOF). Detects orphaned state (PPID=1) and shuts down within 30s.
Bug fixes
- Fix ails map crash when ~/.claude/settings.json exists outside project directory
- Add scikit-learn to runtime dependencies (was dev-only, masked by uv sync)
- Fix uvx reporails-cli — add script alias so uvx resolves the executable
- Log warning when mapper fails instead of silent degradation
Install
pip install reporails-cli
npx @reporails/cli check .
uvx --from reporails-cli ails check .
See https://github.com/reporails/cli/blob/main/CHANGELOG.md for the complete list.
Full Changelog: 0.5.1...0.5.2
Assets 2
v0.5.1
c70f991 Full Changelog: 0.5.0...0.5.1