0.17.0¶
2026-07-21 · View on GitHub
What's New¶
New rules¶
- Hidden-content security rules (auto-enabled) catch content that is invisible in rendered markdown but fully visible to the agent:
security-invisible-unicode(zero-width, bidi and tag codepoints, with RTL and emoji-sequence exemptions),security-hidden-instructions(directive-bearing HTML comments, exempting linter and doc-tool comment channels), andsecurity-encoded-payload(long high-entropy base64/base64url/hex runs). (#404) - Lean-prompt content rules derived from frontier-model prompting guidance:
content-repeated-directive(auto) flags the same instruction stated twice or restated in different words,content-emphasis-density(auto) flags IMPORTANT/MUST/NEVER inflation past a configurable line ratio, andcontent-missing-stop-condition(opt-in) flags open-ended loop instructions with no stopping condition. (#429) content-unclosed-fenceflags a top-level code fence that never closes — which previously left every content rule blind to the rest of the file — with a SUGGEST-confidence autofix that appends the matching closer. (#410)content-instruction-drift(auto, INFO) reports sections copied between instruction files such as CLAUDE.md and AGENTS.md that were later edited in only one place. Identical copies never fire;similarity-threshold,min-section-wordsandignore-generatedare configurable. (#399)
New features¶
skillsaw lintnow marks which violations are fixable —[*]forskillsaw fix,[?]forskillsaw fix --suggest— with a summary line counting each, additivefixable/fix_confidencefields in JSON output, and a marker in HTML.skillsaw fixprints repo-relative paths for single-root runs plus a closing re-lint hint. (#409)- TTY-aware terminal output: new
--color/--no-colorflags onlint,fix,explainandbadge, withFORCE_COLOR/NO_COLOR/isatty()precedence so ANSI escapes no longer leak into pipes and redirects. Real terminals get clickable OSC 8 hyperlinks on rule IDs and file paths. (#418) skillsaw badge --largerenders a self-contained SVG report card (.skillsaw-card.svg) with the letter grade, weighted violation density, content-token count, plugin and skill counts, and the top three offending rules. Supports--theme dark|light, and prints ready-to-paste README markdown. (#400)openclaw-metadatanow matches OpenClaw's own frontmatter parser: acceptstypeas an alias forkindand lowercases it, enforces per-kind required install fields (brew→formula|cask, node→package, go→module, uv→package), type-checks cask/package/module, validatesapiKey/skillKey/hidden, and suggests corrections for near-missmetadata.openclawkey typos. (#423)- New
skillsaw-lintskill ships in the Claude Code plugin: when an agent authors or edits agentic context (skill, slash command, agent, hook, plugin, marketplace, or CLAUDE.md/AGENTS.md/GEMINI.md/Cursor/Copilot/Cline/Kiro rules), it lints that file, applies autofixes, resolves the rest viaskillsaw explain, and re-lints until clean. (#405)
Fixes¶
- Pre-release hardening sweep:
security-invisible-unicodeandopenclaw-metadatano longer abort a run withrule-execution-erroron legal YAML (non-string keys, anchor cycles, merge keys); false-positive and false-negative tuning across the new security and content rules;agentskill-name,marketplace-registrationandcontent-unclosed-fencestop advertising[*] fixablefor violationsskillsaw fixrefuses to touch; badge/card SVG writing andTERM=dumbcolor detection corrected. (#432) instruction-imports-validnow validates mid-line@pathreferences rather than only line-start ones, resolves imports relative to the file containing them, and follows nested imports up to four hops — while still exempting@org/teamGitHub mentions and@~/home-directory memory imports. (#406)content-inconsistent-terminologyno longer flags terminology used in headings, reports the specific line using the minority term instead of the whole file, and correctly attributes matches in files holding multiple content fragments (.coderabbit.yamlinstructions, promptfoo prompts). (#428)content-embedded-secretsnow splits lines on\nonly, so a planted U+2028/NEL/VT character can no longer shift a secret finding onto the wrong reported line. (#404)
Other¶
skillsaw explain openclaw-metadatanow notes that OpenClaw silently ignores unrecognized fields, tabulates allowed values for the kind/os/archive/requires enums, and gives concrete fixes. "OpenClaw" is also capitalized correctly throughout the rule description, generated.skillsaw.yaml.exampleand docs. (#422)- README rewritten as a focused product overview, with the builtin-rules reference, repository types, inline suppression, installation, configuration, baseline and CI sections moved to the docs site. (#431, #389)
- Shipped skills hardened:
skillsaw-onboardno longer pipes curl output into python3 for its PyPI version lookup, andskillsaw-create-plugin,skillsaw-fixandskillsaw-onboardnow declarelicense: Apache-2.0. CI gained a prompt-injection and malicious-pattern scan over the repo's own agent context. (#370) - Supply-chain hardening: all GitHub Actions are SHA-pinned, unnecessary
id-token: writedropped from LLM agent jobs, plus CODEOWNERS and grouped monthly Dependabot updates. (#393)