Guard Marketplace
Buy guards other publishers wrote, at a price your reputation tier sets, under a credit limit underwriting grants.
On this page
Most of the checks a kernel runs are not specific to one deployment. Detecting customer data in a tool’s output, catching injected instructions in a fetched page, or refusing a malformed refund are problems many operators share, and each has a publisher who maintains a guard for it. A guard marketplace lets you run those guards without writing them, at a price set by your own track record and inside a credit line someone has agreed to extend.
Three facts decide whether a guard can run in your bundle: whether your tier reaches its floor, what that tier pays per call, and whether underwriting grants you credit to pay it. The kernel’s ordinary guard pipeline then runs what you installed, pinned by digest.
A listing is evaluated against your tier, then your credit
Install checks the floor, prices the guard, and asks underwriting for a limit, in that order. A refusal at any step leaves nothing written.
A tier1 tenant installs at USD 0.19 a call
The floor holds. The 5 percent tier discount takes the USD 0.20 base price to 19 cents, and underwriting sets a USD 500.00 marketplace credit limit. The install record binds both.
tier1 floor, evaluated for five tenants against the bootstrap discount and credit tables. The listing is illustrative; governed fiscal tables, cosign status, and settlement counts are left out.The floor decides visibility as well as installation: list omits a guard above your tier, and info answers for it exactly as for a reference that does not exist, so a catalog does not reveal which guards a tier cannot buy.
A listing is a digest-pinned guard with a price and a floor
The catalog is a JSON array of entries. Each names a digest-pinned OCI reference, a display name, a per-call price in minor units, the lowest reputation tier that may buy it, a cosign verdict, and its recent settlement count:
[
{
"reference": "oci://registry.larkfield.example/pii-scanner@sha256:7d2e…41a9",
"name": "customer-pii-scanner",
"price": { "units": 20, "currency": "USD" },
"reputation_floor": "tier1",
"cosign_status": "signature verified",
"recent_settlement_count": 1284
}
]The price and floor come from the guard’s own manifest, in a marketplace block that accepts no other fields. A guard without the block is free, with a tier0 floor. A catalog with duplicate references, or with more entries than the reader accepts, is refused before any listing is read.
"marketplace": {
"price": { "units": 20, "currency": "USD" },
"reputation_floor": "tier1"
}Your reputation tier sets the price
Tiers come from reputation scoring: a composed score of 0.50 reaches tier1, 0.75 tier2, and tier3 needs 0.90 with every feed at 0.80 or more from at least two distinct feeds. Each tier takes a discount off the base price and carries a credit ceiling:
| Tier | Composed score | Discount | Credit limit |
|---|---|---|---|
tier0 | below 0.50 | 0% | USD 100.00 |
tier1 | 0.50 | 5% | USD 500.00 |
tier2 | 0.75 | 10% | USD 2,500.00 |
tier3 | 0.90, feeds 0.80 | 20% | USD 10,000.00 |
These are the bootstrap tables. A governed fiscal policy on the control plane can replace either one, and prices follow it. The price is integer arithmetic on minor units, truncated, so a 20-cent guard costs 19 cents at tier1 and 16 at tier3:
chio --control-url https://kernel.larkfield.example \
guard market list --catalog ./catalog.json --tenant larkfield --tier tier1 --json{
"schema": "chio.market.list-report.v1",
"tenant_id": "larkfield",
"tenant_tier": "tier1",
"entries": [
{
"reference": "oci://registry.larkfield.example/pii-scanner@sha256:7d2e…41a9",
"name": "customer-pii-scanner",
"effective_price_units": 19,
"currency": "USD",
"reputation_floor": "tier1"
}
]
}Install needs a credit limit from underwriting
Every market command resolves its fiscal tables through the control plane named by --control-url. The credit-limit request carries only your tenant and currency, and the control plane reads your tier from its own reputation store and the publisher’s standing from its revocation store, so a client cannot claim a better tier or clear a revocation. Install the scanner:
chio --control-url https://kernel.larkfield.example \
guard market install --catalog ./catalog.json --bundle-dir ./guards \
--ref oci://registry.larkfield.example/pii-scanner@sha256:7d2e…41a9 \
--tenant larkfield --tier tier1 --json{
"schema": "chio.market.install-report.v1",
"reference": "oci://registry.larkfield.example/pii-scanner@sha256:7d2e…41a9",
"tenant_id": "larkfield",
"registered_price_units": 19,
"registered_price_currency": "USD",
"applied_tier": "tier1",
"credit_limit_units": 50000,
"credit_limit_currency": "USD",
"idempotent_replay": false
}The record binds the registered price, the tier it was computed at, and the credit limit underwriting granted. When the revocation oracle revokes a publisher’s credentials, on the same root that revokes capabilities, underwriting denies with a limit of 0 whatever your tier, and info shows the zero limit before you try:
chio --control-url https://kernel.larkfield.example \
guard market info --catalog ./catalog.json --tenant larkfield --tier tier1 \
--ref oci://registry.larkfield.example/pii-scanner@sha256:7d2e…41a9reference oci://registry.larkfield.example/pii-scanner@sha256:7d2e…41a9 name customer-pii-scanner price 19 USD cents per call at tier1, base 20 floor tier1 cosign signature verified settlements 1284 recent credit limit 0 USD
An install against that listing refuses with credit limit denied: publisher_credentials_revoked and writes no record. Underwriting covers the decision outcomes and how a governed tier-limit table is resolved.
An install is recorded once
The record’s file name is derived from SHA-256 hashes of the tenant and the guard reference, and it is written atomically. Installing the same guard again finds the record, checks that it binds the same schema, tenant, and guard, and returns it unchanged with idempotent_replay: true; a retained record that binds anything else is refused. A retry after a lost response therefore cannot register a second price.