
Security News
Rust 1.100 Will Add Dependency Cooldowns to Cargo
Rust 1.100 will add opt-in dependency cooldowns to Cargo, giving security scanners and maintainers time to catch malicious crate releases.
@aihq/catalog
Advanced tools
@aihq/catalog is AIH Catalog, the public Catalog V2 producer and verifier for
AI Development Assurance. It binds exact tool, skill, agent, MCP, package, and profile
sources to byte-addressed evidence, explicit capabilities, an administrator
Ed25519 signature, continuity, and bounded validity.
Core governs. Scan produces evidence. Catalog provides AIH qualification. The organization provides authority.
The package is @aihq/catalog; the command remains aih-supported. It is
Apache-2.0 licensed. Package and GitHub Release availability are live state:
verify the exact version and tag with the commands below rather than inferring a
registry effect from source text. The release workflow uses the
protected npm-publish environment and the exact Trusted Publisher tuple
documented in RELEASING.md; it rejects token credentials at the
final effect boundary. Package publication and the manual catalog/receipt
outer-attestation workflow are separate effects, and publishing never grants
catalog-signing or organization authority. Candidate bytes publish first under
npm next; only public installed acceptance and separate authorization can
promote those same bytes to latest.
Release and contribution policy: VERSIONING.md · RELEASING.md · CONTRIBUTING.md.
The 0.2.0 source train adds bounded receipt-set publication for up to 512 members (256 KiB canonical manifest). Its default candidate contains 428 exact members: the existing default and 25 Matt assessments, plus 14 Anthropic, 7 Ponytail, 14 Superpowers, and 367 ECC source-file assessments. Existing Matt member bytes and predecessor history are preserved.
These assessments retain original Scanner findings and timestamps, grant no
executable capabilities, and do not authorize installation or organization use.
Anthropic's docx, pdf, pptx, xlsx, and doc-coauthoring are not included:
their applicable license grant is restricted or unestablished. Unsupported
component kinds and derived compositions are not relabeled as qualified members.
Publication still requires the separate protected workflows described above.
There are two independent governance paths:
aih-supported means a catalog signer included the exact subject and evidence
in a verified Catalog V2 head.organization-qualified means an organization bound its own exact subject to
its own evidence and attestor through the Core Strict V2 decision contract and
V3 authority receipt.The supported catalog is optional convenience. It is not an admission authority,
and its CLI reports organizationAdmission: "not-authoritative". Absence from
this catalog must not block an organization-qualified subject. Evidence attestors
and catalog signers are also separate identities: catalog signing authenticates
the catalog; it does not convert an evidence declaration into an organization
approval.
Core does not consume Catalog V2 directly; it neither imports nor reverifies the
catalog. This package emits one closed Strict Qualification Receipt V2 after
full Catalog V2 verification. The receipt carries the exact member basis plus
the authenticated catalog continuity that Core needs for its own durable
high-water custody. Core's matching V2 consumer is available through
aih policy supported accept and aih policy supported inspect. Acceptance
separately verifies the receipt's outer GitHub attestation, the current Strict
V2 organization decision carried by its V3 authority receipt, and the exact
receipt fields before writing durable signer, replay, head, and head-scoped
member custody. Inspection is read-only. Neither command turns catalog
membership into organization admission.
Resolve the promoted stable version from live registry observation, approve that exact version, and use it consistently:
version="$(npm view @aihq/catalog dist-tags.latest)"
npm install --save-exact "@aihq/catalog@$version"
npm audit signatures
./node_modules/.bin/aih-supported --help
npm publication and GitHub Release creation are separate observable effects.
Verify the Release independently; only after gh release view succeeds should
you download and verify its exact tarball:
gh release view "v-catalog-$version" --repo samartomar/aih-catalog
gh release download "v-catalog-$version" --repo samartomar/aih-catalog --pattern "aihq-catalog-$version.tgz"
gh attestation verify "./aihq-catalog-$version.tgz" --repo samartomar/aih-catalog --signer-workflow samartomar/aih-catalog/.github/workflows/release.yml --source-ref "refs/tags/v-catalog-$version" --deny-self-hosted-runners
If the registry does not expose that exact version, build a tarball from an exact reviewed checkout and install it only in a disposable consumer:
npm ci
npm run build
npm pack --pack-destination ../artifacts
mkdir ../catalog-consumer
cd ../catalog-consumer
npm init -y
npm install --ignore-scripts ../artifacts/aihq-catalog-X.Y.Z.tgz
The package workflow keeps candidate execution in a read-only job. Its protected
job downloads the packed candidate by immutable artifact ID, revalidates the
original tarball digest before every effect, re-observes the tag and main, and
runs no candidate package code. It binds npm provenance, a GitHub build
attestation, a tarball-scoped SPDX SBOM, the checksum, and a keyless cosign
checksum bundle to the exact tagged source. Do not run this block until the exact
npm view "@aihq/catalog@$version" succeeds. Those package-release records do not
sign a Catalog V2 head or Qualification Receipt and do not grant organization
authority.
Obtain these inputs through administrator-controlled channels:
Inspect a genesis head and derive one qualification basis:
printf '{"acceptedIdentities":[]}' > ./replay-state.json
./node_modules/.bin/aih-supported inspect --signed-catalog ./signed-catalog.json --catalog-signer-root ./catalog-signer-root.json --expected-claims ./expected-claims.json --replay-state ./replay-state.json --now 2026-08-22T12:00:00Z --continuity genesis --qualification-basis --entry-id recipe.default
For a successor, replace --continuity genesis with
--last-accepted-head ./last-accepted-head.json. A successful materializable
result includes the verified head and, when requested, a basis containing
catalogHeadDigest, catalogMemberDigest, the catalog signer identity, and the
exact subject digest. Unknown schema or effect versions are returned only as an
authenticated unsupported-version record; they are never materialized as V2.
Verification is deliberately caller-timed and fail-closed. Expired heads,
untrusted or duplicate roots, identities already present in supplied replay
state, skipped continuity, malformed claims, and ambiguous inputs fail without
creating an output. The verifier never mutates replay state; after its own
atomic acceptance, the caller records the returned replay identity. Omitting
--replay-state disables only that caller-owned duplicate-identity check.
After the same catalog verification succeeds, emit one receipt for an exact entry to a new file:
mkdir -p ./.aih
./node_modules/.bin/aih-supported emit-qualification-receipt --signed-catalog ./signed-catalog.json --catalog-signer-root ./catalog-signer-root.json --expected-claims ./expected-claims.json --replay-state ./replay-state.json --now 2026-08-22T12:00:00Z --continuity genesis --entry-id recipe.default --output ./.aih/aih-supported-qualification-receipt.json
For a successor, use --last-accepted-head as for inspect. The receipt is
canonical JSON no larger than 5,970 bytes, the measured maximum legal V2
encoding. The Supported channel first bounds the subject's complete canonical
source object to 4,096 bytes; organization-qualified Core remains available for
exact sources outside that optional-channel limit. The receipt binds the full
exact subject, entry id, all seven Core
aih-supported basis fields, issuance and catalog-bounded expiry, and
organizationAdmission: "not-authoritative". Its separate
catalogContinuity block carries the mirrored head digest, predecessor,
sequence, signed replay identity, Ed25519 signer key id, and exact head-validity
window. Every field is derived from the already verified signed head and member;
no caller flag can override it. The file is written with exclusive creation and
is never printed to stdout. An existing or linked output path fails closed.
The file is not trusted merely because this command created it. For protected publication, the official workflow emits a canonical receipt-set manifest plus one receipt for every verified catalog member, checks the supplied manifest SHA-256 and issuance timestamp, reproduces the bytes at the exact main commit, and makes the signed catalog, manifest, and per-entry receipts protected attestation subjects. Core verifies that outer attestation against its dedicated supported repository/workflow roots before using any receipt as provenance.
Receipt V1 is not a compatibility path: an older Core V1 verifier must reject
these bytes and may not infer the new continuity fields. Core's matching V2
consumer owns the out-of-checkout supported repository/workflow roots, live
clock, outer-attestation verification, administrator signer-key lineage,
durable replay/head/member custody, and current organization decision. Place the
receipt at the fixed target path shown above; then use Core's preview-first
aih policy supported accept command with the exact decision reference and
target. Apply remains unavailable unless the production authority and GitHub
support attestation both verify.
aih policy supported inspect --root <target> --json reports only current
scrubbed custody and performs no write.
Repository CI verifies an exact clean Core checkout at
c31741602b3dbd5f228dafe00591e5679c782878, materializes that locked revision
in a disposable detached clone, and builds and packs both packages
there. It installs both tarballs into disposable roots and proves that packed
Core accepts the emitted V2 receipt and the exact 5,970-byte legal ceiling,
rejects V1 and 5,971 bytes, reaches the production acceptance boundary, and
exercises read-only inspection. The packed proof intentionally supplies no
genuine organization authority or public
receipt attestation, so production acceptance must fail closed with AIH_TRUST;
it does not fabricate a successful custody write. Successful production
acceptance remains contingent on genuine organization authority and the
separately authorized GitHub attestation.
Candidate generation is local and data-only. It performs no provider request, network fetch, installation, repository write, or automatic qualification. A seed names four bounded local artifacts and evidence files relative to the seed. It also carries the exact Core-compatible source instead of a mutable package label. For example:
{
"artifacts": {
"closure": "artifacts/closure.json",
"profile": "artifacts/profile.json",
"prose": "artifacts/prose.md",
"recipe": "artifacts/recipe.json"
},
"capabilities": {
"commands": ["catalog.verify"],
"egress": ["https://api.github.com"],
"hooks": ["hook.catalog.verify"],
"mcpTools": ["github.get_workflow_run"],
"permissions": ["contents:read"]
},
"entryId": "recipe.default",
"platforms": [{ "architecture": "amd64", "os": "linux" }],
"qualification": {
"findings": [],
"gaps": [],
"report": "evidence/report.json",
"rights": ["evidence/right-catalog-read.json"]
},
"subject": {
"id": "default-profile",
"kind": "profile",
"source": {
"release": "1.0.0",
"revision": "sha256:1492fa09fc057e2e3659ca5ad3d143ba5a4b529a2b18e027b5e40a75439518c9",
"type": "aih"
}
}
}
Each evidence path contains an exact JSON envelope with
format, kind, id, subjectDigest, attestor, and summary. The generator
reads each bounded regular file once, validates its subject and attribution, and
hashes those same bytes. It rejects caller-supplied evidence digests. Empty
findings or gaps mean no declared exceptions in that evidence report; the
required report prevents that from being confused with no evidence supplied.
Generate and sign using files prepared outside the package:
./node_modules/.bin/aih-supported generate-candidate --seed ./seed.json --signer ./catalog-signer.json --claims ./claims.json --valid-from 2026-08-22T00:00:00Z --valid-until 2026-08-23T00:00:00Z --sequence 0 --previous-catalog-head-sha256 0000000000000000000000000000000000000000000000000000000000000000 --output ./candidate.json
./node_modules/.bin/aih-supported sign-candidate --candidate ./candidate.json --private-key ./catalog-signer-private.pem --output ./signed-catalog.json
On POSIX systems, the private key must not grant group or other access. Output creation is exclusive, and linked seed artifacts, evidence, private keys, or output paths are rejected. Keep signer roots outside catalog-controlled data.
A successor increments sequence and binds the previous
catalogHeadSha256. Changing a source version, evidence, capability, signer,
platform, recipe, prose, schema, or effect produces deterministic promotion
facts and preserves the last-good head during automatic evaluation. Removing an
entry produces an entry-removed fact; that is catalog revocation for later
consumers.
The manual workflow uploads a canonical promotion plan that binds the candidate
head, last-good head, and every fact. A material change crosses the effect
boundary only when the caller supplies the exact promotion-plan, signed-catalog,
and qualification-receipt-set manifest SHA-256 values plus the receipt issuance
timestamp, and the protected catalog-signing environment approves those exact
bytes. The independent verifier then recomputes continuity, plan bytes, inner
signature, claims, receipt-set bytes, every per-entry receipt, and the outer
provenance records.
Removal does not retroactively invalidate a Core decision already issued for a pinned member digest. Organizations revoke those decisions through Core's separate digest-bound revocation authority. Catalog validity is limited to 90 days, so consumers must re-observe rather than treating a cached verdict as authority.
The inner administrator Ed25519 DSSE/in-toto signature binds the catalog head. Its inner claims are a declaration checked against caller-supplied expected repository, workflow, issuer, ref, environment, and repository identities. The catalog-signer root remains out of band.
The separately authorized workflow adds independent GitHub OIDC/keyless attestations for the exact signed catalog, exact qualification-receipt-set manifest, and exact per-entry qualification receipts at the main commit. Consumers must perform GitHub attestation verification as a separate layer. Outer transparency provenance does not replace the inner signature, approve organization use, or publish npm bytes.
Catalog members use domain-separated aih-supported-catalog-member/v2, catalog,
and catalog-head digests. The Core source and subject digest formulas and
catalogHeadSha256/candidateSha256 bindings are locked to the vendored Core
schema and compatibility vectors.
Applications may import the bounded API from @aihq/catalog to create,
canonicalize, sign, verify, inspect, compare, and derive qualification bases. The
package has no runtime dependencies and exports no network/provider controller.
Contributions should add exact source descriptors, seed-relative evidence, capability declarations, and negative tests. A contribution is only a candidate; review, administrator signing, the exact promotion-plan digest, protected approval, CI, and separately authorized publication remain distinct steps.
See the Catalog V2 contract for schemas, limits, trust boundaries, and maintainer verification commands.
Apache-2.0. Catalog software and qualification data are provided on an "AS IS" basis without organization approval, admission, warranty, support, or effect authority.
FAQs
AIH Catalog qualification producer for AI Development Assurance.
We found that @aihq/catalog demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
Rust 1.100 will add opt-in dependency cooldowns to Cargo, giving security scanners and maintainers time to catch malicious crate releases.

Security News
Cloudflare is acquiring Deno’s team, which will provide another year of bug fixes and security updates before ending support for the runtime.

Security News
Anthropic’s free OSS Scanner uses Mythos and other Claude models to find open source vulnerabilities and send maintainers reports with proposed fixes.