All notable changes to Quaere are documented in this file. The format follows Keep a Changelog and the project uses Semantic Versioning.
quaere-prospectextension — a 0→1 origination skill for deciding what to build next before any problem is chosen: survey the terrain and its stated non-goals, inventory gaps each tied to a named beneficiary and job, run a mandatory reality gate (the capability may already exist or be a deliberate non-goal), and design a validation probe before any build — classifying each opportunity asverified gap/assumed gap/already covered/wishlistso origination does not collapse into a generic feature wishlist. Sits beforequaere-inventionin the pipeline (prospect → invention → grounding/evidence → execution). Opt-in:quaere install --skill prospect.quaere-crucibleextension — a Quaere-style "Grill Me": an evidence-gated adversarial interrogation that pressure-tests a plan, claim, design, PR, or the agent's own proposed plan at the commitment boundary. It decomposes the target into load-bearing claims, grills the most decisive one with a mandatory falsifier and alternative-hypothesis question, and refuses to bless it until each claim survived on new evidence or a defended rebuttal — never on confident-but-unverified pushback — or is logged as an explicit unresolved gap. Returns a terminal verdict (blessed/blessed-narrowed/blocked/unresolved gap), never "looks fine"; intensity is calibrated to stakes. Opt-in:quaere install --skill crucible.
0.6.0 — 2026-06-13
Adds the quaere-naming extension and tightens the existing skills: every prescriptive gate now sits within Codex CLI's ~220-line SKILL.md read cap, the certainty labels (confirmed / confident / locally novel) can no longer be claimed without the probe that earns them, and the eval harness gains an outcome-axis judge on every scenario plus a not_regex assertion type. The CLI interface is unchanged; the published headline numbers still come from the v0.3.1 sweep and predate these skill-body changes.
quaere-namingextension — a metaphor-driven naming skill: naming brief before any name, conceptual territories instead of thesaurus synonyms, anti-pattern filtering, and a mandatory tool-verified availability gate (never from memory). Opt-in:quaere install --skill naming.- Two semantic eval fixtures —
no-corroborator(no tests, comments, history, or spec available; the honest output isplausible/UNKNOWN, not invented intent) andcomprehension-quality(grades the depth of per-unit analysis, not just its shape). --isolate-skillseval flag — relocates installed skills for the duration of a sweep so a baseline run cannot silently read them; without it, "baseline" numbers are contaminated by whatever is already installed.- Outcome-axis judge on every scenario — all 22 eval scenarios now carry at least one
llm_judgeassertion taggedaxis: outcome(was 5/22), so the paired baseline-vs-skill comparison has an outcome signal everywhere, not just form checks. not_regexassertion type — negative regex matching for the eval harness; four previously vacuous safety assertions (regex strings passed to the literalnot_contains) were converted and now actually fire.
quaere-semanticdistilled to its measured active core — 256 → 148 lines vs v0.3.1, keeping only the content that ablation showed carries the outcome.confident/locally novelcertainty labels now require a probe.quaere-semanticgrantsconfidentonly when a named corroborator (test, caller,git blame, spec, ADR) was actually consulted, andquaere-inventiongrantslocally novelonly when the candidate carries a falsifiable kill-probe — neither label can be earned by self-assessment.- All prescriptive content now sits within the Codex read cap.
quaere-evidencecompressed 322 → 260 lines (workflow steps 5–9, including the patch-authorization gate and Decision labels, previously sat past line 220 and were structurally unread on the Codex path);quaere-auditgained an in-cap 7-condition Confirmation Rule summary (conditions 2–7 previously truncated mid-list);quaere-groundinggained an in-cap no-network-fallback compact form and a deliverable-template pointer. Only the sanctioned full Handoff/Stop sections and reference pointers remain past the cap. - Certainty-label loopholes closed.
quaere-evidence's lightweight pass now uses the canonical Decision labels (confirmed | rejected | inconclusive | deferred, wasaccept | reject) and forbidsconfirmedwhile the disconfirming probe is"not yet run";quaere-auditTriage condition 3 requires naming what was actually consulted, else the finding caps atpotential;quaere-grounding's Decision label set is unified across all sites (addsdocumented/local-only, retires the phantomsingle-sourcelabel);quaere-semantic's module-hypothesis verdict renamedheld(wasconfirmed— that word is reserved for probe-gated claims) and its handoffConfirmed inputsare scoped to corroborator-backed fields;quaere-naminggained anunverified (checks blocked)branch so blocked availability checks are never presented asfree. quaere-inventioncandidate IDs renamedK-N(wasC-N, which collided withquaere-evidence's Review ClaimC-Nacross an explicit handoff);locally novelis emitted aslocally novel (unprobed)until its kill-probe has run downstream.- Validator hardened — the
.agent-statecheck is git-aware (no more false positives on local gitignored state), broken relative references in skill bodies are detected,README.ja.mdcoverage is enforced, andquaere-naming/ the audit Confirmation Rule joined the required-blocks list.
check-availability.shdefault platform expansion — with no platform arguments the script checked nothing and exited 0; it now expands todomain github npmand exits non-zero on unknown platforms.
0.5.0 — 2026-05-30
Quaere splits into a core set plus opt-in extensions, adds a new quaere-invention extension, and reorganizes every skill body so the prescriptive content survives Codex CLI's ~220-line SKILL.md read cap. The install default changed and the skill bodies changed.
quaere-inventionextension — a divergence skill for non-obvious approaches: name the default basin, break the assumptions that make it feel inevitable, label each candidate's novelty honestly, and design a kill-probe before promoting any idea. Opt-in:quaere install --skill invention.
installinstalls the core set only by default —quaere-evidence,quaere-execution,quaere-grounding,quaere-semantic. Extensions are opt-in viaquaere install --extensions(all) orquaere install --skill <name>(repeatable, e.g.--skill audit).quaere-auditmoved from the default set to an extension.updatestays conservative: it refreshes whatever is already installed and does not remove a previously-installed extension or silently pull in new ones.listgroups core vs. extensions and shows how to install each uninstalled extension.- Skill bodies reorganized for the Codex read cap. Codex CLI reads only ~the first 220 lines of a SKILL.md; content past that is structurally unread. Handoff sections were front-loaded, worked examples and long detail moved into each skill's
references/,quaere-evidencewas trimmed 376 → 316 lines, and a compact "Stop now" guardrail reminder was added within the first 200 lines ofquaere-evidence,quaere-grounding,quaere-execution, andquaere-audit(the full Stop condition stays at the end for full-read agents like Claude Code and OpenCode). The decision discipline is unchanged — only where it sits in the file.
- Layout: skills now live under
skills/core/andskills/extensions/; installed skill names are unchanged. - Eval harness:
--runs N(default 5; forced to 1 under--dry-run) with per-cell pass-rates, an outcome-vs-form assertion axis split, and an exact-binomial McNemar paired baseline-vs-skill comparison. Fixedordered_sectionsmatching for bold markdown headers and added a Japaneserequires_pairalternate. validate_skills.py: enforces reachability anchors (Iron Law / Handoff triggers / a stop reminder) within a 200-line cap,description≤ 1024 chars with no angle brackets, a compact stop reminder strictly shorter than its full section, and a table-of-contents on anyreferences/*.mdover 100 lines.- CI gates pull requests that touch
cli/onpnpm check(lint + typecheck + vitest).
0.4.1 — 2026-05-24
Maintenance release. No user-facing CLI or skill changes — the bundled skills are byte-identical to v0.4.0. The release exists to retire the temporary NPM_TOKEN secret used for the first npm publish and to refresh several CI pins that were two majors behind at v0.4.0 ship.
- Trusted Publishers (OIDC) replaces
NPM_TOKENon the npm-publish step. The Granular Access Token used for the first publish (configured against the broad "All packages" scope becausequaere-clidid not yet exist on npm) is revoked, and theNPM_TOKENrepo secret is deleted. Authentication now flows through GitHub Actions OIDC against the trusted-publisher binding on https://www.npmjs.com/package/quaere-cli/access. - CI toolchain catch-up: pnpm 9 → 11, pnpm/action-setup v4 → v6, actions/setup-node v4 → v6, Node runtime in CI 22 → 24 (active LTS).
cli/package.jsonengines.nodestays at>=22so users on the maintenance LTS line can still install.sigstore/cosign-installerstays at@v3because the upstream repo does not ship av4major-version alias tag yet. cli/pnpm-workspace.yamladded. pnpm 11 retired thepnpmfield inpackage.jsonand reads per-project settings from this file; it carries theallowBuildspolicy required to opt in toesbuild's native-binary postinstall (a transitive dep of tsdown / rolldown / vitest).docs/cli-contracts.mdandREADME.ja.mdaligned with the TypeScript port: the Rust CLI had--target/--skill/--repoflags that the TS port does not. Contract entries pinned to flags that no longer exist were removed.- Landing page install commands switched to
npx quaere-cli install/bunx/npm install -gto match the README.
0.4.0 — 2026-05-24
Distribution switches from the Rust binary chain (Homebrew + cargo + curl|sh) to a single npm package, quaere-cli. The skill bodies are unchanged — the in-tree eval numbers carry over.
brew install,cargo install quaere-cli, andcurl ... install.sh | shno longer ship new releases. v0.3.2 binaries remain downloadable from GitHub Releases for users on the old install paths, but no further versions follow them. The replacement isnpx quaere-cli install.scripts/install.shis deleted. TheQUAERE_REPO/QUAERE_VERSION/QUAERE_INSTALL_DIR/QUAERE_SKILLSenvironment overrides go with it.
- npm package
quaere-cli(TypeScript, citty-based CLI, ~12 KB bundled). Same surface as before:install [claude|codex|all],list,doctor,update. The package also exposesquaereas a binary alias for users with a global install. - npm provenance attestation (Sigstore OIDC) on every release.
npm audit signaturesverifies that the published tarball was built by the release workflow at the exact tag, replacing the cosign signature that previously covered the binary.
cli/Rust source (cli/src/,Cargo.toml,build.rs). The directory now holds the npm package.scripts/install.sh(curl|sh installer) andtests/test_validator_parity.py(Python ↔ Rust validator parity test).release.yml: cross-compile matrix (buildjob),bump-homebrew,cargo-publish.ci.yml:cli(rust toolchain) andparityjobs.pages.yml:install.shsync into the static site.
npx quaere-cli install # replaces every old install methodUsers on the old Homebrew tap can brew uninstall haru0416-dev/quaere/quaere to clean up.
0.3.2 — 2026-05-22
Security release. Addresses the four findings from the v0.3.1 audit (F-001 — F-004) and adds recurrence prevention for an agent-write incident discovered during the audit cycle.
- Release
SHA256SUMSis now signed with cosign keyless OIDC.install.shrequirescosignand verifies the signature against the release workflow's certificate identity (refs/tags/vX.Y.Z) before computing the archive checksum. Agithub.comwrite compromise can no longer impersonate a signed release without also running the workflow. (F-004, CWE-345.) v0.3.2 is the first signed release; older tags must be installed viacargo install quaere-cli --version <X.Y.Z>. - Terminal-Bench adapter gates credential forwarding on a dataset allowlist. Host
~/.codex/auth.json,OPENAI_API_KEY, andANTHROPIC_API_KEYare forwarded into per-task containers only whentb run --datasetnamesterminal-bench-core(currently the sole curated entry) or the operator setsQUAERE_TB_ALLOW_CRED_FWD=1. Anything else fails closed and emits a single stderr line so the operator can see why the run aborted. (F-001, CWE-200.) quaere evalno longer walks up from CWD.--repoor$QUAERE_REPOis now required; running the binary from inside an attacker-controlled directory can no longer execute a plantedevals/run_skill_evals.py. (F-002, CWE-426/CWE-427.)
- Homebrew tap bump regex pairs
urllines with theirsha256lines by target instead of substituting positionally; the four release SHAs no longer risk being bound to the wrong artifact URL if the formula is ever reordered. (F-003, CWE-665.) - cosign install link in
install.sh,README.md, andREADME.ja.mdcorrected (/cosign/system_config/installation/; the prior path 404'd). evals/terminal_bench/install_scripts/install-with-skill.shnow bootstraps cosign before invoking the curl|sh installer so the new signature verification works inside the Debian Bookworm task container (apt has no cosign). Pinned to v3.0.6 with SHA256 verification of the downloaded binary on both amd64 and arm64.
- Roadmap moved from inline README to
docs/roadmap.md; CLI behavior contracts moved todocs/cli-contracts.md. README gains a short## Docssection linking the three reference documents.
evals/run_skill_evals.pysetsGIT_CEILING_DIRECTORIESto the scenario workspace's parent before spawning the agent so agit commitinside the workspace cannot walk up and land changes in the parent Quaere repo. (One incident during the v0.3.1 in-tree sweep had to be removed viagit filter-repobefore this push.)eval-manual.ymlartifact upload now dropseval-results/**/workspace/**and**/.git/**.eval-terminal-bench.ymldrops.castrecordings andsessions/**so a task that printedenvorcat $HOME/.codex/auth.jsoncannot embed credentials in a public artifact.
Terminal-Bench (terminal-bench-core==0.1.1, 80 tasks, --global-agent-timeout-sec 1800):
| mode | resolved | accuracy |
|---|---|---|
| Baseline | 41 / 80 | 51.25% |
| With skill | 42 / 80 | 52.50% |
| Δ | — | +1.25 pp |
Narrow positive, well inside run-to-run variance. The honest reading is "Quaere does not regress Terminal-Bench performance"; do not market this as a measurable improvement. The v0.3.1 Δ of −17.5 pp on the same dataset is superseded — that number was dominated by install-pipeline / agent_timeout failures (76 timeouts in the worst rerun), not by skill quality. With the v0.3.2 install pipeline (cosign-verified, container bootstrap) and the raised agent timeout, agent_timeout count drops from 76 to 7. See docs/evaluation.md for the per-task breakdown.
0.3.1 — 2026-05-21
Patch release: rebuild the Linux release binaries against musl libc so they no longer require a specific GLIBC version. v0.3.0's x86_64-unknown-linux-gnu artifact was built against GLIBC 2.39 (Ubuntu 24.04 builder) and refused to run on Debian Bookworm (2.36), Ubuntu 22.04 (2.35), and older. The musl static binaries are GLIBC-independent and run unchanged on Alpine through RHEL 7 class systems.
- Linux release artifacts are now
x86_64-unknown-linux-muslandaarch64-unknown-linux-musl. The host-facing tarball name pattern changes accordingly (quaere-vX.Y.Z-<target>.tar.gz). The curl one-liner picks the right artifact viauname -mand continues to work transparently. release.ymlswitches the linux x86_64 builder to native ubuntu-latest withmusl-toolsand the linux aarch64 builder tocross(viataiki-e/install-action) so that ring's C bits cross-compile with a musl-aware toolchain.
evals/terminal_bench/README.md'stb runsmoke examples used flags that no longer exist in the current terminal-bench CLI (--task,--output-dir,TB_AGENT_REGISTRY). Replaced with the canonical form (--agent-import-path,--task-id,--output-path,--dataset 'terminal-bench-core==0.1.1') that the v0.3.0-era smoke run actually used.
In-tree sweep (18 scenarios / 106 assertions, OAuth Codex single-run):
| mode | assertion pass rate | scenarios |
|---|---|---|
| Baseline | 53% (56 / 106) | 0 / 18 |
| With skill | 91% (96 / 106) | 10 / 18 |
| Δ | +37.7 pp | +10 |
This is the first sweep where the v0.3 line was measured directly; v0.2.1 reported +27 pp on 97 assertions.
Terminal-Bench (terminal-bench-core==0.1.1, 80 tasks, both modes via evals/terminal_bench/):
| mode | resolved | accuracy |
|---|---|---|
| Baseline | 45 / 80 | 56.25% |
| With skill | 31 / 80 | 38.75% |
| Δ | — | −17.5 pp |
Of 20 regressions, 17 hit agent_timeout; the agent_timeout count jumped from 9 (baseline) to 33 (with-skill). Quaere's deliberation pass widens wall time on time-boxed tasks past the grader's budget. The in-tree number is the load-bearing measurement; the Terminal-Bench number is reported for honesty, not as a quality verdict. See docs/evaluation.md.
0.3.0 — 2026-05-20
Minor release: introduces an agent-aware install pipeline (quaere install claude / codex / all) so the same CLI deploys to both Claude Code (~/.claude/skills/) and Codex CLI (~/.agents/skills/). The curl one-liner now ends with an explicit quaere install all step and a Commands: block, and quaere install --force swaps skills atomically so a mid-extract failure no longer leaves dest half-written.
quaere installaccepts anagentpositional (claude/codex/all).claudetargets~/.claude/skills/,codextargets~/.agents/skills/, andallwrites both, deduplicating by canonical real path so symlinked targets do not produce double-writes.--targetis preserved as a hidden escape hatch for advanced relocation.- The curl installer (
scripts/install.sh) runsquaere install allas an explicit post-download step instead of leaving deployment implicit. TheQUAERE_SKILLS=0env var skips this step for binary-only installs. - Install output ends with a
Commands:block listing every deployed skill, so users see the slash commands immediately aftercurl ... | sh.
quaere install --forcenow swaps a skill atomically. The new content is staged at<target>/.<name>.staging, the previous dest is renamed to<target>/.<name>.backup, staging is renamed into place, and only then is the backup removed. A mid-extract I/O failure leaves dest at the previous complete content; previously aremove_dir_all -> extractsequence could half-write the dest while the manifest still claimed it as installed. Crash residue (.staging,.backup) is silently skipped byquaere doctor's orphan policy (dot-prefixed) and reclaimed on the next install.Agent::targetsandpaths::resolve_targetshare a single source for the default install paths viapaths::claude_default/paths::codex_default, eliminating the previous duplicate hardcodes.
quaere doctorflags frontmatter values that contain:when not quoted, matchingscripts/validate_skills.py.tests/test_validator_parity.pypins the cross-validator agreement so future drift fails CI.validate_skills.pyMAX_SKILL_LINESaligned with the Rust doctor at 500 (was 600).evals/run_skill_evals.pybuilds the runner prompt withprintfinstead of heredoc, preventing shell-injection when scenario prompts containEOF-like delimiters.scripts/install.shpasses--strip-components=1totarso the extracted binary lands at the expected path on all release tarball layouts.release.ymlworkflow_dispatchchecks out the requested tag ref instead of HEAD, so manual re-runs build the tag the user asked for, not the currentmain.
.gitignoreexcludesevals/results/so per-run eval output does not accidentally land in commits.
0.2.1 — 2026-05-20
Infrastructure release: lands the eval-harness graders and Terminal-Bench adapter that v0.3 will use to publish external-benchmark numbers, plus a Skill content pass addressing post-v0.2.0 review feedback. Treated as a PATCH bump because the Skill changes are additive structural improvements — no Iron Laws changed, no existing gates weakened.
behaviorassertion type — per-run resource thresholds against runtime metadata (max_tool_calls/min_tool_calls/max_duration_seconds/max_tokens_output/max_tokens_input). Recordsstatus: "manual"when the runner has not emitted the relevant metric, so adoption can land before runner-side metadata extraction does.llm_judgeassertion type — LLM grades output against a free-formrubric. Default-off via--enable-llm-judge(per-PR CI cost stays at zero). Three transport backends share the same grading contract:anthropic(default): Anthropic SDK +ANTHROPIC_API_KEY.openai-compat: openai SDK +--llm-judge-base-url(or$QUAERE_LLM_JUDGE_BASE_URL) for Ollama, vLLM, LM Studio, LocalAI, LiteLLM, etc. Enables fully local eval flows.codex: shells out tocodex exec --output-last-message, reusing Codex CLI's existing auth and endpoint. No extra Python SDK required.
- Responses cached at
evals/.llm_judge_cache/<sha>.jsonkeyed bysha256(backend:model + rubric + output). The backend prefix in the key prevents cross-backend cache hits. - Sample assertions added to
evals/scenarios.jsonfor both new types (twobehavior, onellm_judge) so the schema is exercised end-to-end.
-
evals/terminal_bench/package with twoAbstractInstalledAgentsubclasses:quaere-tb-codex-baseline— Codex CLI only.quaere-tb-codex-with-skill— Codex CLI +quaere install.
Both share env, model selection, and command shape; the only difference is whether
~/.claude/skills/quaere-*is present inside the per-task container. Lazy-imports the optionalterminal-benchdependency so the package can be inspected without it installed. -
evals/terminal_bench/install_scripts/install-baseline.shandinstall-with-skill.sh— pin Codex CLI to0.128.0by default; the baseline script refuses to run when~/.claude/skills/quaere-*exists (treats a leaked treatment as a void run); the with-skill script verifies the five expected skills landed before exiting. -
.github/workflows/eval-terminal-bench.yml— manual-trigger (workflow_dispatch) workflow that runstb runagainst the registered agents. Inputs chooseagent(baseline / with-skill / both),scope(smoke / full / task_id), andcodex_version. 4h timeout cap. Never PR-triggered.
- quaere-evidence: Added
## Output contractsection (冒頭契約) with the 8 required output sections in canonical order, plus a### Lightweight evidence passtemplate — same gate run with fewer words for small-scope investigations. - quaere-audit: Added
Tier companion decisionsandTier promotion probeas required output blocks in every Standard/Deep report. These make explicit which companion skills were invoked and whether bulk/cross-tenant exposure was checked before tier promotion. - quaere-semantic: Added
## Meaningful unit selectionsection — 6 criteria for which units to analyze in depth; pure local helpers not meeting any criterion can be collapsed into their caller. - quaere-grounding: Added
## Claim result matrixtable andlocally observedas a new decision label between "confirmed" and "inconclusive". Clarified that sources derived from the same dependency graph (package.json + lockfile + installed types) are not independent corroborators. - quaere-execution: Added
Verification contractblock with labeledBefore check / After checkforms. Clarified that generated files, lockfiles, snapshots, and build output require justification or must be reverted. - All 5 skills: Standardized the
## Handoff to other skillssection with a common 6-field block template (From skill/Blocking question/Confirmed inputs/Inconclusive inputs/Required next skill/Stop condition). - evals: Added 4 adversarial scenarios to
scenarios.json— urgency pressure (pressure-to-skip-evidence-gate), baseless assertion (baseless-security-assertion), skip-test pressure (skip-tests-pressure), and docs blind-trust (blind-trust-external-docs) — each asserting that the relevant skill's Iron Law gate holds under pressure. - validator:
scripts/validate_skills.pychecks for required structural blocks per skill (Output contract, Lightweight evidence pass, Tier companion decisions, Tier promotion probe, Meaningful unit selection, Claim result matrix, Verification contract). Line budget raised from 500 to 600 to accommodate the additions.
scripts/validate_skills.pyaccepts the two new assertion types in its allowlist.README.md/README.ja.mdgain the new grader rows in the assertion-type table, three subsections covering allllm_judgebackends, and aRoadmapupgrade for Terminal-Bench from "v0.3 target" to "v0.3 in progress" with a pointer to the new adapter.tests/test_run_skill_evals.pycovers the new graders end-to-end (6 behavior tests, 11 llm_judge tests including codex backend dispatch and a backend-specific cache-key regression).tests/test_terminal_bench_adapter.pycovers the package's lazy-import discipline and missing-dependency error path.
Single-run via Codex CLI against 18 scenarios / 97 deterministic assertions (14 original + 4 new adversarial):
| mode | assertion pass rate | scenario-level |
|---|---|---|
| Baseline (no skill) | 60% (58 / 97) | 0 / 18 pass |
| With skill | 87% (84 / 97) | 8 pass · 4 inconclusive · 6 fail |
| Δ | +27 pp |
4 inconclusive runs have zero failed assertions; they contain not_in_baseline assertions that require a paired baseline run to resolve. 4 with-skill timeouts account for most failures (complex multi-step skill prompts). The 4 adversarial scenarios score 92% with-skill vs ~46% baseline.
behaviorassertions in the in-tree eval all resolve tostatus: "manual"because the Codex CLI runner does not yet parse outtool_calls/tokens_*metadata. The grader is ready; the runner-side metric extraction lands separately.- Terminal-Bench smoke / full sweep / leaderboard runs have not executed; the adapter is wired but the numbers are pending.
0.2.0 — 2026-05-20
Eval-driven quality pass on the v0.1.0 skill set and harness. The 9 with-skill residual failures from the v0.1.0 evaluation are addressed across two work streams without adding new skills.
Two independent baseline + with-skill sweeps via Codex CLI 0.128.0 against the 14 scenarios with 90 deterministic assertions, --scenarios-extra evals/scenarios.ja.json enabled:
| mode | range (2 runs) |
|---|---|
| Baseline (no skill) | 63.9 – 65.1% |
| With skill | 91.1 – 94.4% |
| Δ | +27 to +29 pp |
Compared to v0.1.0 (with-skill 89.8% / Δ +28 pp), v0.2.0 lifts the upper bound of with-skill by ~+4.6 pp and leaves Δ in the same band. Run-to-run variance is real for stochastic LLM output; numbers are a range, not a point estimate.
All four Stream A targeted assertion flips confirmed across the runs (regex disconfirm/falsify in ci-failure-evidence-before-patch; requires_pair Backing→source-type in weak-review-claim-rejection; ordered_sections in authorized-implementation-loop; ordered_sections in no-web-local-grounding). Both post-measurement residuals also closed at the assertion level: markdown-tolerant tier regex now matches **Tier:** Standard / **Tier:**\nStandard, and 攻撃者 / 主体 / 攻撃元 alternates landed in the spec-grounded-security-audit ordered_sections position 4.
skills/quaere-evidence/SKILL.md— Hypothesis blocks now require six labeled lines (H-id/Based on/Prediction/Falsifier/Disconfirming probe/Alternative); Review Claim blocks grow from 8 to 10 fields withFalsifier:andDisconfirming probe:appended afterSuggested probe:.Backing:value must name a source type from{spec | invariant | test | policy | contract | RFC | ADR}. Worked example updated to the new shape.skills/quaere-grounding/SKILL.md—No-network fallback strategyis now a fixed### 10.heading inside## Workflow, replacing the loose## No-network fallbackH2. Output format carries a labeledNo-network fallback strategy: applied | not neededblock with the three numbered steps (cached/dated → stale-data notice → canonical URLs).skills/quaere-execution/SKILL.md—Final gate:is now a mandatory labeled line at the end of the Study section, including the explicit skip formFinal gate: skipped because <reason>; best next command: <cmd>.
evals/run_skill_evals.py—requires_pairassertions accept an optionalskip_whenregex; when the antecedent is present but the consequent is missing, a matchingskip_whentreats the unconditional pair as vacuously satisfied. Used by the targeted-verification and diff-review assertions inauthorized-implementation-loop.evals/scenarios.json— Tightenedspec-grounded-security-audit:audit tier declarednow requires the canonicalTier: Triage|Standard|Deeplabeled line, not prose mentions.findings classifiednow requiresConfirmed:/Potential:/Rejected:/Inconclusive:as labeled lines.- Added
confirmed finding references a derived security property or spec clauseso confirmed findings must point to a named Property, spec clause, RFC, or invariant.
evals/run_skill_evals.py— new--scenarios-extra PATHflag merges a sibling JSON file at load time. Regex/string fields get|-alternation appended;ordered_sections.patterns/not_in_baseline.patternsget per-position alternation;contains_any.textsget array concatenation. Unknown scenario ids or assertion names error out so stale extras cannot silently drop alternates.
eval-fixtures/no-web-local-grounding/— new workspace fixture: a pinnedslimsync0.7.3 POSIX shell stand-in with--version/--help, a dated vendored manual mirroring an unreachable canonical URL, plussrc/sync.shand.syncignore. Designed to make baseline and with-skill outputs diverge by colliding withrsync --exclude-from=FILEmodel memory.evals/scenarios.ja.json— Japanese-locale alternates for the eight assertions whose tokens had previously been embedded directly intoscenarios.json. The main file is now English-only; locale tokens are merged in only when the user passes--scenarios-extra evals/scenarios.ja.json. This keeps the public surface single-language while preserving the language-bias-removal goal from ADR-0006 Stream B-1.tests/test_run_skill_evals.py— new unit tests covering theskip_whenclause and the--scenarios-extramerge semantics (regex alternation, per-position alternation with empty-slot pass-through, array concatenation, type mismatch and length mismatch errors).
- Homebrew tap
haru0416-dev/homebrew-quaereis live with a working formula. Install viabrew install haru0416-dev/quaere/quaere. The in-treeFormula/quaere.rbstub is removed; the tap repository is the canonical source going forward. - First publish to crates.io as
quaere-cli. Install viacargo install quaere-cli && quaere install. The v0.1.0 CHANGELOG previously claimed a crates.io publish in error; v0.2.0 is the first version actually on the registry. cli/Cargo.tomlbumped to0.2.0so the release binary self-identifies correctly. The v0.1.0 binary embedded version was correctly0.1.0, but a missed bump at tag time would have caused v0.2.0 binaries to reportquaere 0.1.0— caught and fixed before the release artifacts were finalized.
web/index.html— added explicit:focus-visibleoutline, wrapped main content in<main>, and grouped the bottom resources into<nav aria-label="Project resources">to address WCAG 2.4.7 (Focus Visible) and 1.3.1 (Info and Relationships) findings.web/CNAME— removed. The Pages publishing source is a custom Actions workflow, and the current GitHub docs state that any existing CNAME file in workflow-source Pages is ignored and is not required. The custom domain is held in Pages settings only.- GitHub Pages
https_enforcedtoggled totruevia REST API.http://quaere.dev/now 301-redirects tohttps://quaere.dev/.
The v0.2 Codex sweep left these residual failure modes that this release does not address. All belong to the same axis — skills/quaere-*.md Output format does not push the model strongly enough toward canonical section headers and tier-companion sub-decisions:
ci-failure-evidence-before-patchledger sections appear in canonical order—Defensesection header position drift.weak-review-claim-rejectionclaim, defense, decision in order— content is right, but the model paraphrases rather than emitting labeled sections.triage-tier-confirmation-ruleTriage tier vocabulary absent in baseline— with-skill output is missing the canonical phrasepromote to Standard/tier promotion.spec-grounded-security-auditStandard tier requires grounding and evidence-gated review— newly exposed by the v0.2 markdown-tolerant tier regex; when the audit declares Standard tier, the model does not consistently emit the External grounding + Evidence-gated review sub-decision pair.
v0.3 targets template-strengthening across these axes.
- Stream B-5 of the internal v0.2 plan (language-tagged assertion sets) is intentionally not implemented. The alternation approach (English-only
scenarios.json+ opt-inscenarios.ja.jsonvia--scenarios-extra) already covers the dual-language need without scenario-level duplication; revisit only if a third language or significantly larger token sets are added.
0.1.0 — 2026-05-19
Initial release. Quaere is a process-correction skill set for coding agents, relaunched from the archived agent-skills project.
skills/quaere-semantic— semantic review of unfamiliar code withWhat / Why / Invariants / Failure / Connectionsper unit, mutation-invariance test.skills/quaere-grounding— external-fact grounding for SDKs/APIs/CLIs with dual-axis (source + claim-credibility) gate and executable probes.skills/quaere-evidence— evidence-gated review for unclear bugs, CI failures, and risky PR claims; Toulmin claim/data/warrant structure.skills/quaere-execution— authorized multi-step implementation with Plan/Do/Study/Act units and explicit commit authorization.skills/quaere-audit— security-property-driven audit with attack-surface mapping, exploitability gates, and tier-based confirmation rules.
quaere install— extract the embedded skill set to~/.claude/skills/(or any--target). Additive across runs; merges with existing manifest. Validates--skillnames early and rejects unknown ones.quaere list— show installed skills and the recorded CLI version.quaere doctor— verify SKILL.md frontmatter, names, line budget, and orphans.quaere-*orphans are errors; other directories are informational.quaere update— check GitHub Releases for a newer version using semver comparison; handles 404/403/429/5xx with specific guidance.quaere eval— wrapper forevals/run_skill_evals.pywith auto-detected Quaere checkout.quaere version— print the CLI version.
scripts/install.sh— POSIXcurl | shinstaller with SHA256 verification, four-target detection, and PATH hint..github/workflows/release.yml— tag-triggered cross-platform build (x86_64 + aarch64 for Linux and macOS), skill tarball, SHA256SUMS, andgh release create.Formula/quaere.rb— Homebrew formula stub (tap repo planned for v0.2).
evals/scenarios.json— 14 portable scenarios across the five skills with 88 deterministic assertions (contains,not_contains,regex,ordered_sections,requires_pair,min_section_count,not_in_baseline).evals/run_skill_evals.py— runner that drives any local agent CLI through baseline/with-skill modes and writes isolated prompts, outputs, and grades.eval-fixtures/— six workspace fixtures pinned for the relevant scenarios.
scripts/validate_skills.pyplus 34 Python unit tests covering frontmatter, naming, line budget, and scenarios.json structure.tests/golden/quaere-*.jsonplus a 6-test runner enforcing per-skill required H2 sections, forbidden patterns, and line budgets.tests/test_validator_parity.pyplus a CI parity job that runs both validators against the same eight SKILL.md mutations and asserts they agree.- Matrix CI: Python 3.11/3.12/3.13 + Rust stable/beta + parity job.
- Manual
eval-manual.ymlworkflow for real-LLM evaluation, gated behindworkflow_dispatch.
Old skill names are renamed wholesale; there are no compatibility shims.
| Old | New |
|---|---|
semantic-review |
quaere-semantic |
external-grounding |
quaere-grounding |
evidence-gated-review |
quaere-evidence |
execution-loop |
quaere-execution |
security-audit-loop |
quaere-audit |
To migrate from a prior agent-skills install:
rm -rf ~/.claude/skills/{semantic-review,external-grounding,evidence-gated-review,execution-loop,security-audit-loop}
curl -fsSL https://raw.githubusercontent.com/haru0416-dev/quaere/main/scripts/install.sh | sh