cometweb-io/cometweb-agent-skills
CometWeb Labs specialist skills for research, quality workflows, adversarial review, product operations, QA, release readiness, and evidence-based decisions.
Changelog
All notable changes to the CometWeb Agent Skills bundle are documented here.
The format follows Keep a Changelog; repository
tags use vMAJOR.MINOR.PATCH.
[Unreleased]
-
Add opt-in three-arm evaluation plans with distinct native/tools/skill payloads, counterbalanced order and retained partial/error receipts. Preserve legacy two-arm plans; full-host helper execution still requires its own evidence.
-
Add read-only candidate-bound GitHub change reports using trusted base tooling; missing model evidence remains NOT_RUN rather than behavioral PASS.
-
Separate pinned task outcomes from structural grading. Add a synthetic 102-case, 51-family cohort with frozen splits and output-free review packets; independent validation and comparative task qualification remain unestablished.
-
Add privacy-filtered OTLP receipt exports, identity-bound resource drift and a canary-probed, bounded macOS Python-helper backend; no automatic promotion.
-
Resolve four diagnostic routing gaps without tuning the frozen holdout; retain native activation as a separate measurement.
-
Record source freshness findings and affected dependencies, with a separate read-only scheduled report rather than blocking unrelated pull requests.
-
Extend the disposable QA example with durable SQLite readback, access checks, browser reload/cleanup and checkpoint/retry/cancellation failure tests.
-
Reject nonportable/colliding archive paths and malformed alias metadata; bind installation acceptance receipts to actual archive bytes and staged source.
-
Consolidate content review under
content-reviewer1.8.0; retaincontent-roaster7.0.0 as its adversarial-profile and legacy-v6 adapter. Preserve both wire contracts and validators; do not auto-convert verdicts. Keep the shared reviewer optional; comparative task-success advantage remains unestablished. -
Generate alias-specific routing text and dependency edges. Selective and pinned installs include canonical dependencies within their transaction;
skill-orchestrator-multiagent1.2.5 gains the same dependency metadata. -
Shorten
science-roaster6.2.0 to a methodology/evidence checklist; make reviewer roles, ledgers and v6 reporting conditional. Correct the research-program handoff while preserving scripts, schemas and shared procedures. -
Shorten
repo-roaster6.2.0 to evidence, counterevidence and repair checks; make role-based procedures and full v6 reporting conditional. Keep it optional and preserve wire contracts and shared roaster procedures. -
Fix quadratic control-pattern matching in all three source scanners without changing detection semantics, credential redaction or checked file reads. Add long-input and detection regression tests; retain the fix in
content-roaster7.0.0 and thescience-roaster6.2.0 update.
Catalog, optional workflows and local examples
-
Retire
cometweb-contextas a discoverable skill while retaining its source map, helper scripts, tests and formal ContextEnvelope contract inresources/context. Preserve semantic CW-AIP validation and archive the original routing holdout before the roster-only rebase. -
Shorten
web-app-auditor1.6.0,content-roaster6.2.0,quality-loop-operator1.8.0,ai-humanize2.7.0,release-readiness1.4.0 andbrief-architect1.9.0. Keep formal contracts available for their consumers and avoid routine extra review stages. -
Correct short-profile stage selection in the quality-loop kernel. Retain native-model-first selection and optional workflow/contract adapters without claiming task qualification or changing host invocation policy.
-
Add a synthetic QA/repair/retest example with a Node test gate in the shared runner. Prepare Node in both validation and package-attestation workflows; keep browser interaction and deployment evidence separate from policy tests.
-
Carry standalone resources in host-smoke staging and continue excluding ignored private bindings from those staged plugin payloads.
-
Distinguish knowledge basis and consumer purpose; rerun controlled local fact checks at the research/Council receiver, compiler and completion gate. Keep nonfact premises, inference caveats and explicit trial safeguards intact through typed handoffs, structural grading and unreviewed WhyKit drafts. Legacy scope remains unassessed; no current-world, model-quality or execution proof is implied.
-
Refuse READY evidence envelopes with unverified material facts or unassessed material inferences; retain nonready reports and unknown supporting claims without claiming independent fact checks or inference dependency assessment.
-
Mark all current packages as experimental DEVELOPMENT in self-contained maturity metadata, registry/catalog projections, ZIP manifests and CLI output. New scaffolds remain SCAFFOLD and development-only; supplied QUALIFIED labels cannot grant task qualification. Preserve unclassified historical ZIP inspection.
-
Recheck clean Git source and release archive provenance before cache reuse, including a concurrent winner; a cached development ZIP cannot gain a clean versioned release receipt.
-
Add the existing catalog owner/result/consumer map, task decision tree and task-specific installation selections; keep profiles and framework overlays opt-in.
-
Correct bundled competitor-profiling handoff classification in Competitive Intelligence and Product Teardown.
-
Validate canonical and legacy contradiction states without letting a resolved alias erase an explicit unresolved material state. Require typed records for the same claim as accepted contradictory evidence in full envelope admission, including the output grader; preserve declared resolved and nonready controls.
-
Reject known generated skill author prompts at plugin admission and versioned packaging, including wrapped text and existing archive reuse. Development archives remain unassessed; scaffold detection does not establish task quality.
Security and correctness
-
Refuse malformed judge/execution flags, uncalibrated performed model grades, empty case identities and nonfinite promotion bounds. Validate planned policy without claiming execution; equal pass rates cannot be called improvement.
-
Distinguish missing task-relevant evidence from unauthorized access in rubric design and judge calibration. Agreement and valid metadata are not source truth.
-
Separate public-example, private-workspace and single-project context scopes. Skip local overlays and repository inspection for public examples, bind project source references, and reject declared source/fact/wrapper sensitivity downgrades. Public context wrappers now require explicit public-example scope; legacy payloads with omitted scope remain private. Labels do not establish semantic privacy, tenant authorization or permission to publish.
-
Mark unassessed host outputs explicitly instead of passing them by default; resolve the multiagent alias to its canonical output rubric and retain canary failures when no rubric exists. Check joined tokens consistently without treating schema-less canary JSON as legacy text lines.
-
Distinguish missing, matching and different reported effort observations in scorecards without claiming cross-model effort equivalence.
-
Validate loaded real-host plans and generate run paths independently of task IDs. Capture host streams with a live quota, private output permissions and POSIX process-group cleanup; unsupported cleanup platforms explicitly return NOT_RUN.
-
Separate native-cap USD admission from estimated budgets. Unknown costs remain unknown, and usage-based estimates cannot release native budget reservations.
-
Add body-only word-range checks to prose writing and rewriting, and exact-rational displayed-calculation checks to ebook preparation. Checks cover supplied inputs, not semantic fidelity or source truth.
-
Reject special files before ebook manifest reads and fingerprinting; require revalidation of unresolved changed specialist stages before quality-loop completion.
-
Reject malformed repair and quality-loop enum fields with structured validation errors.
-
Redact detected credentials across all source scanner output categories and diagnostics; distinguish truncated, skipped and complete eligible-file scans.
-
Fail
real_host_eval --executewhen no host ran. Forward host-native effort explicitly and report missing observations instead of claiming controlled A/B. -
Require section evidence mappings in complete competitor profiles, consistent research stage/target handoffs, and validated full envelopes for typed workflows.
-
Classify receipt-only, schema-validated and domain-accepted completions without treating any of them as external-write authority.
Distribution and qualification
- Add selective
--skillinstallation and clean-source--refverification; document and test rollback through a detached reviewed commit. - Prepare draft GitHub Releases from fully gated, attested tag artifacts, with versioned ZIP names, a checksum manifest, source commit and SBOM.
- Add required Python 3.14 runtime lanes and experimental Python 3.15 lanes. Local results and hosted CI remain separate evidence surfaces.
- Reject scaffold markers in skill-local JSON evals during the existing release maturity gate and clarify package/contract tests versus live task success.
Added
-
Shared error envelope for skill kernels.
tooling/kernel_error_envelope.py(run under pytest astooling/tests/test_kernel_error_envelope.py) holds every payload-taking kernel to one refusal shape: any JSON value gets an object back, a non-object payload is refused with exactly one<name>:not-objecterror and a non-passing status, every refusal carries the keys the skill's other refusals carry, and each script with a behaviour suite refusesnull, a list or a string without a traceback. CONTRIBUTING.md documents the envelope; 17 skills were brought into line with it. -
Multi-format output grading. A rubric can declare
formats, each detected from the output's first line and graded with its own sections, checks and IDs. Competitive Intelligence grades its seven report formats and Customer Ops its eleven plus the machine-readable record.tooling/grade_output.py --explainpoints each issue at the rubric line that defines it and the excerpt that triggered it, andKERNEL_MISMATCHcross-checks compare the prose against what the skill's kernel computes for an accepted payload.check_codedefaults and null IDs are handled consistently. -
Real-host evaluation kit.
tooling/real_host_eval.pyplans tasks from the repository's own eval cases (never the frozen holdout), runs them through a host CLI in headless mode with the plugin staged or absent, grades routing and output from the transcripts and reports pass rates with Wilson 95% intervals.runis a dry run that prints commands and an estimated cost; it starts nothing without--executeand explicit task and spend caps. Seedocs/REAL-HOST-EVALS.md. It is never part ofcheck_all.py. -
Vocabulary reference.
docs/VOCABULARY.mdlists every verdict, status and severity enum by owning skill and protocol schema, with the boundary mappings between them;tooling/tests/test_vocabulary_doc.pyfails when the document and the contracts disagree or a line mixes the Council and release spellings. -
Tooling inventory.
docs/TOOLING.mddescribes every script undertooling/, the gate that runs it and what it reads and writes;tooling/tests/test_tooling_inventory.pyfails on a missing row or a gate column that disagrees withcheck_all.py. -
Council phrasings. Polish and English explicit requests to the Council ("Rada niech oceni", "let the council decide", hand-over and agenda forms) route to
ai-council, and denied patterns keep look-alikes out. -
Dismissed clauses in routing. A new
dismissedblock inregistry/routing-policy.jsondemotes a skill whose every signal sits in a clause saying the activity is done or not wanted ("the audit is already done", "nie jest potrzebny"), in Polish and English;docs/ROUTING.mddocuments it and--explainshows the dismissed spans. Remaining limits are recorded inevals/routing/known-gaps.json. -
CW-AIP v2 conformance:
valid/decision-council-no-go.jsonandinvalid/decision-council-hyphen-verdict.json. -
Lexical routing fallback.
tooling/route_skill.pyranks skills with a deterministic, standard-library BM25 ranker over each skill's description ("Do not use" sentences count against a skill),owns, trigger examples and a per-skill lexicon, configured by thelexicalblock inregistry/routing-policy.json. It decides only when the routing signals are silent or near-tied, never after an explicit invocation, and abstains unless one skill leads clearly.--explainshows each term's contribution;--lexical/--no-lexicaloverride the policy switch for one call. On the frozen 144-prompt holdout, read once after tuning, routing reached 132/144 (91.7%), up from 112/144; the tuned suites still pass at 100%. -
Output grading for 29 skills.
evals/output/now holds 671 golden good and broken outputs covering 29 skills, and every one of the 632 rubric rules is pinned by a broken case. A sidecar canrecomputethe verdict with the skill's own kernel, so prose that disagrees with what the kernel computes fails. Skills without a rubric are listed inNOT_GRADEDwith a reason. -
Behavior suites. 31 skills ship an offline behavior suite (
evals/behavior/<skill>/suite.json,cometweb.behavior-suite/v1) that runs each script and pins its exit code and output; thebehavior_evalsgate requires a suite for every skill that ships scripts, andtooling/new_skill.pywrites a placeholder one. -
skill_package_testsgate: the per-skill package tests (eval harnesses, front-door rules, script CLIs, manifests) run on their own in the fast gate set, bringingcheck_all.pyto 33 gates. -
The Cursor plugin ships a generated rule,
rules/cometweb-agent-skills.mdc, that routes requests to the bundled skills. -
tooling/plugin_release.py --bump patch|minor|majorraises the plugin version from the merge base's, writes it to every manifest,pyproject.tomlanduv.lock, and records the shipped set. -
One contract per skill. Every skill ships
references/contract.json(cometweb.skill-contract/v1) listing each payload field and enum once, bound to the script constant that enforces it and the reference that documents it. Theskill_contractsgate fails when a script reads an undeclared key, an enum drifts from its constant, a reference names a field the contract lacks or spells a value differently, or an eval case that must conform (conform: always) expects a pass on off-contract input.tooling/new_skill.pywrites a contract for new skills, andtooling/skill_contracts.py --draft <skill>starts one for an existing skill. -
Frozen routing holdout.
evals/routing/holdout.jsonholds 144 prompts (100 positive, 26 near-miss, 18 no-skill; 100 English, 44 Polish) written before the routing signals were read, pinned by sha256 inholdout.lock.json. Therouting_holdoutgate fails on any edit and on any holdout prompt that also appears in a set used for tuning, andtooling/routing_holdout.pyreports aggregates only. Measured on it, routing went from 93/144 (64.6%) to 112/144 (77.8%) this release; the tuned suites pass at 100%, so expect unseen prompts to land nearer the holdout figure. -
Output grading.
tooling/grade_output.pygrades a skill's actual output against its output contract offline.evals/output/holds golden good and deliberately broken outputs for eight skills (ai-council, content-roaster, evidence-researcher, product-operator, release-readiness, repo-roaster, seo-geo-aeo-maxxing, web-app-auditor); theoutput_gradinggate requires the good ones to pass and each broken one to fail with its exact codes. Seedocs/OUTPUT-GRADING.md. -
Host smoke test.
tooling/host_smoke.pyloads the plugin in the real Claude Code and Codex CLIs against a staged copy with an isolated home directory, without calling a model: manifest validation, install, the model-visible skill list, and whether a host shortens descriptions. Cursor is checked statically against its documented plugin format. -
sastgate: repository semgrep rules for Python and shell undertooling/sast/, run offline with an exactly pinned engine installed from the lock's hashes into its own environment; each rule is tested against positive and negative cases on every run. -
runtime_deps_lockedgate (tooling/audit_deps.py): every dependency a skill declares inRUNTIME.jsonorrequirements.txtmust be locked at a version inside its declared range, sopip-audit --require-hashescovers it. -
sbomgate (tooling/sbom.py): a CycloneDX 1.6 SBOM of the plugin, with each skill's package digest and the optional libraries skills declare. Theattest-packagesworkflow builds it, attests it against the packages and uploads it with them. -
docs/ROUTING.mdexplains how a prompt is matched to a skill, the routing policy blocks, the known gaps and how to add a case; a test keeps its policy block names in step withregistry/routing-policy.json. -
tooling/check_all.pyruns every repository gate (33 of them) from one list, in parallel, with a summary table. CI callscheck_all.py --ci, which fails on a missing tool instead of skipping it;--fastruns the quick gates,--fixreruns the generators first and never records a baseline. An optional.pre-commit-config.yamlruns the fast gates on every commit. -
Plugin version gate:
tooling/plugin_release.pyandregistry/plugin-release.jsonrequire a new plugin version whenever a shipped skill is added, removed or changes itsVERSION, because Claude Code and Codex refresh an installed plugin only when its version changes. The plugin version is now 2.2.0 in every manifest. -
tooling/new_skill.pyregisters the new skill by default: registry entry, README catalog row, placeholder routing cases and this skill's baseline rows. The scaffold ships a small output-contract validator whose eval harness holds every guard, socheck_all.py --fastpasses straight away; it prints each file it wrote and what is still placeholder.--no-registerwrites the package only. -
Multi-step requests ("audit the signup flow, then gate the release", Polish "a po nim", "na tej podstawie") route to
skill-orchestrator, and the route result lists the specialist for each step undersequence. -
extras/cursor-routing.mdcandextras/AGENTS.snippet.mdare generated from the registry, as is the package list in the host plugin manifests. -
SECURITY.mddescribes the threat model for skills that read untrusted content, andevals/routing/adversarial-suite.jsonholds 20 injection-style routing cases, run by therouting_adversarialgate. -
Routing coverage enforces Polish floors per skill through each case's
lang. -
Every host installer accepts
--dry-run(run all checks, print the plan, write nothing) and--uninstall(remove only links into this checkout'sskills/). All six hosts share one code path inscripts/lib/install.sh; rerunning an install prunes links to retired skills, andinstall-all.shpreviews every host before changing any of them. -
tooling/routing_coverage.py --checkreports positive and negative routing cases per skill, enforces a per-skill floor, and rejects duplicate IDs, near-identical prompts and prompts copied from registry examples.evals/routing/known-gaps.jsonrecords prompts the router still misroutes; a gap that starts passing fails the check until it is promoted to the suite. -
CW-AIP v1 and v2 conformance fixtures (valid and invalid) under
fixtures/cwaip-v{1,2}/conformance/, run against the validators in the test suite. The multiagent envelope gate now accepts v2 envelopes. -
The README skill catalog is generated from
registry/skills.jsonandregistry/readme-catalog.jsonbygenerate_adapters.py, and repository Markdown links are checked by the test suite. -
tooling/new_skill.py --rootscaffolds into another checkout. -
Public safety scanning flags personal email addresses (RFC 2606 domains and the project contact are allowed), any home-directory path with a real account name, signed JWTs, and Stripe, npm, PyPI, GitLab, Hugging Face, Slack app and Azure storage credentials.
-
The router ignores routing signals inside a refused clause ("do not review the codebase, just fix the test", "nie rób przeglądu repo, tylko…"), in English and Polish. Scope ends at the clause, so "don't hold back: roast this repo" still routes. Rules live in
registry/routing-policy.jsonundernegation. -
tooling/routing_coverage.py --confusionreports misroutes and false positives over every labelled prompt in the repository, split into stable tune and holdout halves. -
Per-skill
tests/front-door-rules.jsoninventories, checked bytooling/tests/test_front_door_rules.py: every must-keep rule has to stay in the file it is listed under, a rule moved to a reference needs a pointer with a load trigger inSKILL.md, and every normative sentence in a front door has to be inventoried. The three roasters, Product Operator, Release Readiness, Customer Ops, Product Teardown and Competitive Intelligence use it. -
Every bundled skill script answers
--helpwith exit 0 and rejects unknown arguments;tooling/tests/test_skill_script_cli_contract.pychecks all of them and that each script imports only the standard library, its siblings or dependencies declared inRUNTIME.json. A runtime-matrix workflow runs the skills that declare dependencies against those dependencies alone. -
Draft CW-AIP v2 schemas for the reserved
artifact,snapshotandspecialist-handoffkinds, with fixtures. -
Tests that the paths in
registry/hosts.jsonexist and that an installer rerun over an older install upgrades it cleanly.
Changed
-
Plugin 2.4.0. A minor release: 20 skills change version, with
feedback-integrator1.8.0 gaining behaviour and the rest receiving fixes (ai-council5.2.4,longform-publisher1.1.4,portfolio-operator1.2.4,quality-loop-operator1.7.4,seo-geo-aeo-maxxing1.3.4 and the other skills aligned with the shared error envelope). -
Faster
check_all.py.installation_acceptancebuilds and installs every package in parallel from one clean copy of the checkout,eval_strengthruns the mutants of a package side by side, behaviour suites run in parallel, a deferred gate stops the per-skill tests from running twice in a full run, andsastreuses a clean result while its inputs are unchanged (--cialways rescans). A full--cirun took 69 s of wall time on the reference machine. -
behavior_evalsruns with--require-runtimeunder--ci: a case whose script needs an uninstalledRUNTIME.jsonpackage fails there instead of being skipped. -
Longform Publisher 1.1.4 freeze exception. The description is 539 characters with the "Do not use" boundary kept, each reference is loaded only when its stage needs it instead of all seven on every run, and twelve front door rules are pinned by
tests/test_longform_front_door.py. -
Routing: the
content-roasterstrength floor is 17, and--checkfails a floor that sits far below the measured value. -
Removed the disabled
tooling/publish_public_dry_run.pyand its emptyregistry/public-allowlist.json; publishing is a reviewed pull request. -
The eval-strength baseline for
content-revieweris 42 of 42 guards (was 43 of 43): the entry point no longer branches on whether the payload holdsfindings, so that guard is gone, not unpinned. -
Plugin 2.3.0. A minor release: skills gain behavior suites, sharper front doors and fixes below. Each changed skill's
VERSIONmoves by one patch release with one changelog entry; the shipped set is recorded inregistry/plugin-release.json. -
Codex installs to
~/.agents/skills, the user skills directory Codex documents.scripts/install-codex.shmoves the links an earlier install made in~/.codex/skillsand leaves other entries there alone;CODEX_SKILLS_DIRstill selects another directory. -
The Cursor plugin manifest keeps only documented keys, and
tooling/host_smoke.pychecks manifests against those key sets. -
Front doors of 19 skills were corrected where they disagreed with the kernels (for example
content-writerusesEVIDENCE_REQUIRED,feedback-integratorrecords runtime drift asHOST,release-readinessspells N/A asna,content-reviewerlists unverifiable claims underverify[],skill-evaluatorreportsSPEC_ONLYwhen nothing ran), and reference tables say when to read each file. Six descriptions were shortened to at most 540 characters so the "Do not use" clause survives the Codex skill list. -
Skill contracts give a reason for every
internalkey, supportlistsand parent-qualified enums, and the eval-strength default floor is 0.92. -
A release tag must match
VERSION; CONTRIBUTING documents the release steps and the README covers plugin installation. Gate errors say what to run. -
tooling/new_skill.pywrites an untrusted-content section andtests/front-door-rules.jsonfor a new skill. -
seo-geo-aeo-maxxing1.3.2 (plugin 2.2.1): live source registry re-verified against first-party sources on 2026-10-03, including the new Search Console "Search generative AI features" control; freshness tests derive their dates from the registry so a refresh no longer breaks them. -
Plugin 2.2.0. Every skill's
VERSIONmoves by one patch release for the contract, documentation and kernel fixes below; the shipped set is recorded inregistry/plugin-release.json. -
Routing suite grew from 284 to 690 cases; about 25 skills gained Polish routing signals, and signals were tuned on fresh prompts written before each change. Two prompts the router still misroutes are recorded in
evals/routing/known-gaps.json. -
Each skill description states its "Do not use" boundary right after the opening sentence. Codex shortens descriptions to fit a shared skill-list budget, and the boundary used to sit at the end, where it was cut first.
-
Every
agents/openai.yamlis regenerated: Codex'sdefault_promptnames the skill as$skill-idand stays within 160 characters, and a test routes each prompt to its own skill. -
registry/hosts.jsonrecords each host's frontmatter limits, and the compatibility gate checks every skill against all nine host profiles. Claude Code's description limit is 1,536 characters. -
README counts, the skill-count badge and the documentation index are generated or checked against the tree.
-
Ten more front doors were cut, and every
SKILL.mdis now at most 12,000 bytes. Together the front doors are about 6 KB smaller than before this release even with the untrusted-content block added to 31 of them; every must-keep rule is listed in the skill'stests/front-door-rules.json. -
Eval strength: 835 of 889 reachable guards are held (was 765). Cases pin exact error lists rather than only a verdict, and a harness below its floor (0.85 by default, higher for some skills) fails the gate.
eval_strength.pyrefuses a harness that holds no guard at all. -
Codex
short_descriptionvalues are generated to fit the 25-64 characters Codex shows. -
CONTRIBUTING describes the single
check_all.pyflow. -
Broadened deterministic routing evaluation to 284 cases, including natural Polish requests and positive coverage for every catalog skill. The proxy is not a substitute for model or host-level routing acceptance.
-
Roaster routing signals now pair adversarial verbs (roast, tear apart, red-team, stress-test, brutal critique, Polish
zroastuj/upiecz/rozjedź) with each roaster's own objects. Deterministic-proxy recall on the skills' trigger evals rose from 5, 3 and 9 of 18 to 15, 16 and 15 of 18 for content-, repo- and science-roaster, with no new false positives;routing_coverage.py --checknow enforces those floors, and a scope guard keeps live-UX roasts with web-app-auditor. -
The three roasters now verify all ten shared scripts and protocol references for byte-level drift, not only two scripts.
-
Expanded Product Operator and Longform Publisher golden cases around evidence freshness, readiness, derived-artifact lineage, and manuscript placeholders.
-
CI now extracts every skill ZIP and executes available offline eval/smoke entrypoints outside the checkout, including positive and negative multiagent validator checks. Local validation also gates all shared roaster resources.
-
Package attestation now requires the full local gate, tree/history safety scans and extracted-package helper checks before building release artifacts.
-
Skill descriptions for evidence-researcher, longform-publisher, competitive-intelligence, design-partner-finder, ebook-publisher, product-operator, release-readiness, science-roaster and web-app-auditor are host-neutral, state when not to use the skill, and no longer route to packages this catalog does not ship. Customer Ops replaces its restated per-mode procedures with one table that points at the existing references.
-
Unit tests run in parallel (
pytest -n auto). Workflow permissions are scoped to the job that needs them, third-party actions are pinned by commit, and matrix values reach shell steps through environment variables. -
Routing signals for 18 skills are narrower: bare nouns such as "ebook", "canonical", "blocker" or "orchestrate" no longer claim a prompt without the skill's verb or object, so a file conversion, a single canonical-tag edit or a Docker compose request reaches no skill.
parse_descriptionreadsSKILL.mdwith a YAML parser, as hosts do. -
The roaster front doors (6.1.0) are 35–42% smaller; the step procedure moved to
references/workflow.mdper roaster and review setup to a sharedreferences/review-operations.md. Product Operator 2.4.0, Release Readiness 1.3.0, Customer Ops 2.2.0, Product Teardown 1.2.0 and Competitive Intelligence 1.1.0 moved detail behind their front doors the same way. -
tooling/eval_strength.pyfinds guards the AST way and measures 888 guards (was 359); 765 are held by the skills' own harnesses after new eval cases for benchmark-curator, content-writer, feedback-integrator, rubric-designer, product-operator and longform-publisher. -
The multiagent CW-AIP gate checks v1 envelopes against their kind schemas, requires a v1 payload, and rejects a
GO/GO_WITH_CONTROLSverdict that lists blockers. CW-AIP spec revisions 1.0.1 and 2.0.1. -
YAML frontmatter and host metadata are read with
yaml.safe_loadplus a duplicate-key pass; nonosecsuppression remains. -
The OpenAI marketplace manifest declares its install policy and category.
-
Ruff 0.16.10 and four development dependency patch updates.
Fixed
-
ai-councilwritesNO-GOwhile the CW-AIP v2DecisionEnvelopeschema accepts onlyNO_GO, so a Council verdict copied into a v2 envelope failed validation. The kernel'sgatenow also printsenvelope_verdictin the schema spelling,envelope_verdict()performs the mapping and refuses anything that is not a Council verdict, and the output contract states the rule. -
Release Readiness verdicts were written in the Council's spelling (
NO-GO,GO-NO_GO) inportfolio-operator,quality-loop-operatorandseo-geo-aeo-maxxingreferences; they now readNO_GO. -
Kernels that died with a traceback on a non-object payload or a wrong-typed field (among them
portfolio-operator,quality-loop-operator,feedback-integrator,content-writer,repair-operatorandrubric-designer) now return the shared error envelope. -
skill-orchestrator: a goal of only whitespace raised a traceback; it is now a usage error. -
rubric-designer: a rubric withoutmodehashed differently from the same rubric with the explicitSTANDARDdefault; an omitted mode now hashes asSTANDARD. Recorded hashes all used an explicit mode and are unchanged. -
release-readiness:bootstrap_manifest.pyrejected an unrecognized scope key with a message saying the key "was ignored"; it now says the key is not accepted. -
The three roasters'
select_review_packs.pyaccepted any--profile; it now refuses profiles the package's validator rejects. -
The
sastgate no longer fails on a file deleted in the working tree, and the test harness no longer reuses a module cached from another skill. -
Removed
tooling/integration_preview.py, its test and the stale document describing it. -
Many skill kernels and validators failed open on values outside their documented lists: an unknown or lower-case enum (a risk surface, a tier, a finding severity, a commitment state, a reconciliation status) was silently treated as a default instead of rejected. They now return a field-specific error, and eval cases pin each one. Among them: AI Council read a caller-supplied
reversibility: "irreversible"as reversible and routedrisk_surfaces: ["Legal"]to no legal gatekeeper; competitive intelligence scored an unknowncompetitor_tieras tier 1 or tier 3; SEO+GEO+AEO let a check row override registry fields such asweight. -
References now name every key each kernel reads and every value it accepts; more than a hundred keys were read by kernels but documented nowhere, and several references used names or values the scripts never accepted.
-
The roaster report schemas no longer require fields their validators treat as optional, so a report the validator passed cannot fail the schema.
-
Release Readiness rejects
GO/GO_WITH_CONTROLSnext to aBLOCKorCOUNSEL_REQUIREDgate in any letter case, defers on pending, denied, expired or incomplete risk acceptances, and reports unreadscopekeys asscope_warnings. The multiagent envelope gate rejects the same Council and release verdicts. CW-AIP spec 2.0.2. -
AI Council's freshness gate no longer clears evidence in which no row is material.
-
generate_adapters.pyrendered a new skill's compatibility row as unsupported on the first run and only fixed it on a second. -
Longform Publisher names
DERIVED_QA_FAILEDwhen optional QA ran and failed (frozen-release exception 1.1.2, which also covers its untrusted-content block). -
The shared orchestrator reference ran two scripts that ship only with
skill-orchestrator-multiagentfrom the wrong package; each command now changes into that package first. -
Skill docs no longer name nine tooling scripts that do not exist.
-
Customer Ops loads its trigger-specific references only when the trigger applies.
-
Product Operator's report validator accepted an action confidence outside 0–1; its kernel rejects a non-object
coverageand a stringdepends_on(which was read letter by letter as dependencies) instead of crashing. -
Release Readiness documented
commercial_modelwhile the engine readscope.commercial, so a paid release lost its billing gate; the engine now accepts the alias and rejects the two keys disagreeing. -
Longform Publisher reports a wrongly typed nested report field as
FIELD_TYPE_INVALID:<field>instead of a traceback (frozen-release exception 1.1.2).score_maxx.pyandcompare_scores.pyreject malformed score files with a message instead of a traceback, and Web App Auditor'svalidate_report.py --helpworks withoutjsonschema. -
Installers skip a skill directory that holds only
__pycache__residue (whatgit pullleaves after a skill is retired) instead of failing, and a Cursor routing rule linked to the legacyextras/cursor-routing.mdcis re-pointed to the generated rule. -
Validators no longer pass malformed input: the coverage ledger rejects non-object rows, blank evidence references and unknown check IDs with a specific message; the decision validator rejects GO while human approval is required, pending or denied, and duplicate
gate_idrows. Envelope and ledger CLIs printFAIL:with a reason instead of a traceback, andvalidate_evidence_envelope.py/validate_decision_envelope.py --helpprint usage instead of treating the flag as a file name. -
doctor.pyreports skills that are missing from the registry, missing from disk or not installed instead of returning a clean result. -
The standard-library fallback in
tooling/validate_envelope.pyrefuses schemas that use keywords it cannot enforce rather than ignoring them. -
sync_skill_registry.py --applyno longer reverts routing signals and descriptions that had been edited only inregistry/skills.json; a test now requires the command to be a no-op on the committed registry. -
Per-skill
INSTALL.mdfiles namedscripts/package-releases.sh, which does not exist; they now give thetooling/package_skill.pycommand, and a test checks that every repository path they name exists. -
The shared roaster handoff contract no longer cites a nonexistent
integration/validate_handoff.py. -
Behavior evals and the orchestrator drift-guard tests no longer depend on the contributor's git configuration or mutate the checkout while other tests read it. The blind eval report carries a fixture fingerprint that ignores the run timestamp.
-
Install targets that contain a
..path component are rejected in the shared helper, includingCURSOR_RULES_DIR. Absolute directories without..still install. -
A near-tie between incompatible specialists returns
ambiguousinstead of silently picking one skill.use <skill-id>counts as an explicit invoke. -
Product Operator's install note uses
~/.codex/skills, the same Codex path as the root installer. -
Host installers reject conflicting directories, files, and foreign symlinks by default before linking any skill. With
SKILLS_REPLACE_CONFLICTS=1, conflicting entries are moved to a dated backup and canonical links are recreated idempotently across supported hosts. -
Installers reject incomplete skill packages before changing any host target.
-
The multiagent envelope validator bundles its schema and fails closed when the schema or
jsonschemais missing; its alias dependency is explicit. -
The canonical orchestrator ZIP no longer contains an unresolved repository-only documentation link.
-
Installers reject targets overlapping their source skill tree, including symlink aliases, before moving a package. The multiagent install guide now states its sibling-skill and Python dependency requirements.
-
Product Operator golden evals now pin snapshot hash and state fingerprint tampering. Skill Auditor routing covers additional Polish paraphrases with adjacent negative controls.
-
Product Operator no longer promotes actions whose prerequisites are missing; its golden suite now covers 60 cases, including dependency chains, cycles, STOP/LATER exclusions, plan caps, and malformed candidate records.
-
Product Operator 2.3.1 preserves DECISION NOW through report generation and bilingual rendering; inferred action types no longer crash the brief bridge.
Security
-
Canary files for prompt-injection checks:
grade_output.py --new-canarywrites a token split into parts,--plantappends the planted instruction to a copy of a test input, and--canary-filefails a report that joins the token anywhere, so a report that only quotes the instruction is not flagged. -
Workspace JSON written by the competitive-intelligence kernel goes through
tempfile.mkstempin the target directory (unpredictable name,O_EXCL, mode 0600) andos.replace, not a predictable<file>.tmpthat a planted symlink could redirect. The install scripts create temporary files withmktemp. -
The roasters'
scan_source_risks.pywalks with directory descriptors (os.fwalk), opens each file withO_NOFOLLOW | O_NONBLOCKand checks type and size on the open descriptor, so a file swapped for a symlink or FIFO after listing is skipped rather than followed or blocked on. -
SECURITY.mdlists the supported versions and a disclosure timeline with target response and fix times. -
Every skill's front door carries the same short untrusted-content block: inspected content is data, not instructions; no commands, installs or links because that content asks; no secrets, credentials or unnecessary personal data in outputs, and no entering credentials the user did not supply; user confirmation before any external side effect. Tests pin the wording and each rule.
-
The router ignores text after an override phrase ("ignore previous instructions", "zignoruj poprzednie instrukcje") and inside quotes, fences and blockquotes when deciding invocations, signals and multi-step sequences, strips zero-width characters, and reports
override_suspected. -
Repo Roaster's
inventory_repo.pyruns git with hooks, fsmonitor, external diff and textconv disabled, refuses option-shaped refs, and reads manifests only as regular files under 1 MB, never through a symlink.
2.0.1 - 2026-09-22
Added
- Integrated the quality workflow package set: artifact acceptance, briefing, content writing/review, repair, benchmark and rubric design, feedback integration, quality-loop operations, skill auditing, and skill evaluation.
- Added dedicated
content-roaster,science-roaster, andrepo-roasterpackages from Roaster Suite 6.0.0, with the quality bundle's duplicate copies intentionally excluded so each skill ID has one canonical version. - Expanded the canonical marketplace bundle from 18 to 32 skills and refreshed registry metadata, host adapters, routing docs, package manifests, and context budget baselines.
Verification
- The imported packages retain their own references, deterministic helpers, eval fixtures, and tests; the source bundles' root CI and release tooling are not copied into this repository.
- Static package integrity, public-tree safety, registry consistency, and the full local validation suite remain release gates; static checks do not claim live-host behavioral lift.
2.0.0 - 2026-09-19
Added
ebook-publisher,longform-publisher,portfolio-operator, andcometweb-context, bringing the canonical bundle to 18 skills.- Cross-runtime installation and generated adapters for Cursor, Claude Code, Codex, Qwen, Qoder, and Lingma.
- CW-AIP v2 schemas and validators for evidence, decisions, releases, reviews, and multi-skill handoffs, while retaining the documented v1 compatibility surface.
- Approval-gated deterministic skill packages, reviewer bundles, public-tree safety scanning, and history scanning with no bypass flag.
- A 12-gate local validator covering repository integrity, generated adapters, routing, behavior, context budgets, eval strength, security, compilation, and the full test suite.
- Context-budget baselines that fail on unreviewed front-door growth without pretending there is one universal token ceiling.
- Mutation-style eval-strength baselines that measure whether each deterministic rule is actually held by a failing case rather than counting green examples.
tooling/new_skill.py, package-layout contracts, registry consistency checks, executable-bit checks, documentation indexes, issue forms, contributor and security policies.- A deterministic
tooling/whykit_draft.pyboundary that validates finalized CW-AIP v2 evidence and decision envelopes and emits explicit, unreviewed WhyKit drafts without mutating a vault or allocating ledger IDs.
Changed
CometWeb-io/agent-skillsis the single public canonical source. The former private-source/public-mirror workflow and its sync tooling are retired.- Tracked context bindings use public placeholders; local paths belong only in
ignored
*.local.jsonand*.local.txtoverlays. registry/skills.jsonremains the metadata source of truth; marketplace manifests, host adapters, compatibility tables, and generated documentation are checked against it.- Large skill front doors were deduplicated against their own references while preserving binding safety rules and execution order.
- CI remains one Python 3.12 validation job. The duplicate PR-only workflow and recurring dependency bots are removed to avoid repeated runner cost.
- GitHub Actions are pinned to reviewed commit SHAs; full history safety remains a local pre-release gate rather than an every-push workflow.
Fixed
- Local validation now passes under the declared pytest import mode; shared test fixtures no longer depend on importing sibling test modules.
- Routing metadata and examples no longer send long-form publishing work to release readiness or point the orchestrator at a script in another package.
- Context scoring and freshness defaults use UTC rather than the runner's local timezone, and Council recency no longer uses naive UTC datetimes.
- All documented contributor commands now map to tools that actually exist.
- Qwen, Qoder, and Lingma installers retain executable file modes in Git.
- The Codex installer no longer deletes an existing real skill directory; all host installers fail safely until the user moves a collision aside.
- Missing package icons, dead readiness locals, incomplete exception chaining, and low-visibility subprocess coverage were corrected.
- Package case-collision checks run on case-insensitive macOS filesystems instead of skipping the risk they exist to detect.
- The retired
ai-antipattern-writingpackage cannot reappear through registry, adapter, or legacy-package synchronization. - CW-AIP v2 validation remains complete without the optional
jsonschemapackage, loads typed validators without module-name collisions, and rejects ambiguous JSON before rendering a WhyKit draft. - WhyKit draft output treats producer prose as inert data, preserves decision approval metadata in provenance, and refuses to overwrite existing files.
Verification
- The full deterministic test suite passes with zero failures, errors, or skips.
- All 12 local validation gates pass.
- Current-tree and full-history public-safety scans pass.
- Deterministic routing, package, adapter, context-budget, and eval-strength checks are part of the release candidate.
1.0.6 - 2026-08-26
Added
- Envelope validator for multiagent handoffs (
validate_envelope.py). - Multiagent smoke walkthrough and demo Evidence Pack.
Changed
- Multiagent documentation now covers cloud subagents and step validation.
1.0.5 - 2026-08-26
Added
scripts/install-codex.shinstalls all skills into Codex.
1.0.4 - 2026-08-26
Added
skill-orchestrator-multiagentfor isolated specialist execution.
Changed
- Routing distinguishes single-thread and multiagent orchestration.
1.0.3 - 2026-08-26
Added
skill-orchestratorfor multi-skill CW-AIP workflows.
1.0.2 - 2026-08-26
Added
scripts/install-claude.shinstalls all skills into Claude Code.
Changed
- Installation and architecture documentation covers Cursor, Claude Code, and ChatGPT-compatible hosts.
1.0.1 - 2026-08-26
Added
- Branded demo, root installation guide, issue/PR templates, and release-bundle support files.
1.0.0 - 2026-08-25
Added
- Twelve public skills with deterministic kernels and CI.
- CW-AIP v1 interchange protocol and JSON Schemas.
- Routing evaluation suite, validators, installers, safety checks, and release packages.