Taskless v0.13.5: Freshness Checks and Fixture Feedback

0.13.5 is a patch release with six changesets. The main one changes taskless agent ok, the first command your agent runs in a session, so it now says whether Taskless itself is out of date. A local check reports the same thing. verify --json also lists every fixture case, and the bundled Vale moves to 3.26.0, which can change what your Vale rules find.
npx @taskless/cliagent ok says when Taskless is out of date
agent ok used to print one line proving the CLI could run. A project could be several releases behind, carry a skill from another version, or owe a rules reconcile, and nothing said so until a later command refused.
Now it checks three things:
- Whether a newer CLI is published
- Whether the installed skill matches this CLI
- Whether the rules owe a reconcile
When all three are current, it says "Your Taskless environment is up to date and you can proceed." Otherwise it lists numbered steps with the commands that fix each one:
Your Taskless environment is out of date, the following steps are needed in order for commands to work reliably:
1. This project's rules are not reconciled to this CLI (the ledger has entries from 0.13.4 to 0.13.5; Vale moved from 3.24.0 to 3.26.0), so `check` and `verify` will refuse to run them until it is recorded. Run `npx @taskless/cli@0.13.5 update` and follow it to its last step, `npx @taskless/cli@0.13.5 update --rules`. npx @taskless/cli@0.13.5 updateYour agent hands those steps to you. A harness that blocks Taskless commands usually blocks these too, so the skill tells the agent to give them to you once, to run with ! in Claude Code or in another terminal, and then carry on with what you asked for. When you say you've run them, it runs agent ok again to confirm.
The check itself ships in this release, so 0.13.4 and earlier can't tell you about it. From here on, your agent finds out the next time it runs agent ok.
A local check gets the same report
Outside CI, taskless check adds that report as a single Notice: line, or as an entry in notices under --json. Your results and exit code stay the same. The measurement runs alongside the scan, so a pre-commit hook usually gains no time, and at most a second.
The newer-CLI check is one request to the npm registry with a one-second timeout. The answer has to be a strict semantic version, since it ends up in a command you're told to run, and a failed lookup prints nothing. agent ok reads .taskless/ and never writes to it.
CI skips the lookup and the notice. Setting NO_UPDATE_NOTIFIER skips the lookup too, and turns off the notice on a local check. agent ok still reports the skill and rules under it, since those are local checks.
verify --json lists every fixture case
Each rule in verify --json now has a cases array, for sg, vale, and runtime rules alike. A consumer no longer has to parse errors to learn which case failed:
{ "ok": false, "errors": [ "fail case did not fire: .taskless/rules/vale/ai-tell-phrases/tests/fail/bad/ (the rule did not match it)" ], "cases": [ { "name": "fail/bad", "expected": "fail", "ok": false, "message": "fail case did not fire: .taskless/rules/vale/ai-tell-phrases/tests/fail/bad/ (the rule did not match it)", "files": [ { "path": ".taskless/rules/vale/ai-tell-phrases/tests/fail/bad/notes/bad.md", "content": "A plain sentence.\n" } ] }, { "name": "pass/ok", "expected": "pass", "ok": true } ]}name is the case's path under tests/. A failing case carries the same line errors prints, plus its files, leaving out any file over 64 KiB or that isn't text. errors is unchanged, and cases is always present, empty when no case ran. The field is declared in the schema @taskless/cli/schemas publishes.
Vale moves to 3.26.0
The bundled Vale goes from 3.24.0 to 3.26.0. Nothing needs work by hand, but three changes affect what an existing rule reports:
.mjs,.cjs,.mts, and.ctsfiles are read as code, so a rule sees their comments only, the same as.jsand.ts. Findings in code disappear, and findings in comments stay.- A phrase now matches across a line wrap. A rule with the token
click hereused to missclickat the end of one line andhereat the start of the next, so a wrapped Markdown paragraph can produce findings it didn't before. - Vale's built-in dictionary knows common technical words. A
spellingrule stops flaggingOAuthandnpm, and a vocabulary entry you added only for a word like that is now redundant but harmless.
The engine change means your rules owe a reconcile after you upgrade. check and verify refuse until it's recorded, and that's exactly what the agent ok output above is telling you.
Reconcile reports whether it's running in CI
Every call to the Taskless reconcile endpoint now sends environment: { ci, provider? }. provider is a name like github-actions when the CLI recognizes it, and a local run sends ci: false. It uses the CI detection telemetry already performs.
The service only uses this to record when a repository last reconciled from CI, which drives the dashboard's "CI set up" indicator. Verdicts, entitlements, and output don't change.
Two reference rules match their prompts
Two entries in @taskless/cli/reference.json were narrower than their prompts, so a rule generated correctly from the prompt got graded against a reference that didn't fire on those cases.
no-eval-callnow flagsevalwith any number of arguments, includingeval()andeval(a, b).prefer-use-over-utilizenow flagsutilizedandutilization.
Each carries new fail cases, and each prompt now names the forms it expects. The corpus version is unchanged, since the shape stayed the same.
The full changelog is on taskless/cli#594.
Getting it
npx @taskless/cli