Credit Facilities
Extend an agent credit under a signed ceiling, and trace each outstanding amount to the receipt and reserve behind it.
On this page
An agent can buy tools and delegate work on credit, up to a ceiling its operator signed. The facility states the terms, admission checks it before a credit-backed call goes through, and every amount outstanding traces back to the governed receipt that created it.
Capital follows a separate decision. An allocation picks the funding source for one governed action and drafts the transfer and reserve instructions; the operator's settlement rail moves the money, and Chio records what the rail reports.
Allocation drafts instructions and moves nothing
A USD 1,000 facility with an 80% utilization ceiling, a 10% reserve ratio, and a 50% concentration cap, USD 100 outstanding and USD 100 requested: Allocate drafts TransferFunds for USD 100 and LockReserve for the USD 10 reserve delta. An operator issues the instructions and reconciles what its rail reports. Credit facilities.
CapitalAllocationDecisionOutcome derived from facility terms, the governed receipt, and the capital book. Amounts follow the illustrative USD 1,000 facility; external execution and reconciliation are left out.A granted facility is credit authority at admission
A facility issuer signs a credit line for a scoped subject. Its report records the underwriting disposition, prerequisites, currency, ceiling, ratios, and lifetime. Configured as credit authority, the admission resolver checks that the facility is active, granted, applicable to the debtor and the call's scope, and valid at the supplied trusted time. The facility works beside the call's tool capability: admission checks the capability, and credit admission checks the configured credit authority set.
Three ratios, in basis points (one basis point is 0.01%), set the facility's limits. Each is applied at its own boundary:
- Utilization ceiling caps effective credit authority as a fraction of
credit_limit. A $10,000 facility at 8,000 bps resolves to an $8,000 ceiling, and the allocation report compares current outstanding exposure with it. - Reserve ratio is the fraction of outstanding exposure held as locked collateral. At 1,500 bps, every $1,000 outstanding needs $150 of reserve.
- Concentration cap limits the requested amount of one allocation against the credit limit times this ratio. At 3,000 bps on a $10,000 facility, one allocation is capped at $3,000. The cap applies per allocation; it is not an aggregate across every allocation to one counterparty.
The underwriting evaluation rolls into a CreditFacilityDisposition of Grant, ManualReview, or Deny, and an issued facility moves through Active, Superseded, Denied, and Expired. Credit authority needs an Active record with a Grant disposition, met prerequisites, applicable scope, and a valid time window.
Read more in Credit Scorecards, which sets the band behind a facility's disposition and terms.
An allocation drafts instructions, and a rail moves the money
Take the $1,000 facility you extend to an outside buyer for quotes and order lookups, with an 80% utilization ceiling, a 10% reserve ratio, and a 50% single-allocation concentration cap. The governed-receipt evidence records $100 of outstanding exposure, the selected action requests $100, and a reserve source exists with nothing held. With an active granted facility and valid authority, the allocation evaluator derives:
Inspect the facility terms
let terms = CreditFacilityTerms {
credit_limit: MonetaryAmount { units: 100_000, currency: "USD".into() },
utilization_ceiling_bps: 8_000,
reserve_ratio_bps: 1_000,
concentration_cap_bps: 5_000,
ttl_seconds: 86_400 * 30,
capital_source: CreditFacilityCapitalSource::OperatorInternal,
};- Utilization ceiling. $1,000 × 80% = $800; the current $100 exposure is within it.
- Single-allocation cap. $1,000 × 50% = $500; the requested $100 is within it.
- Required reserve. $100 of exposure × 10% = $10; with no reserve held, the delta is $10.
- Instruction drafts.
TransferFundsfor $100 andLockReservefor the $10 delta.
The evaluator computes utilization and reserve from the selected evidence's outstanding exposure; the requested amount is checked against the concentration cap and is never added to exposure a second time. For the same facility, a $600 allocation is denied by the concentration check, exposure above $800 produces Queue, and a required reserve with no reserve source produces ManualReview. Read the outcome and findings before submitting any capital instruction.
chio trust capital-allocation issue --input-file ./allocation-request.jsonThe command signs a CapitalAllocationDecisionArtifact for one governed receipt already in the evidence store. Allocate produces CapitalAllocationInstructionDraft records; the operator issues them as signed instructions through chio trust capital-instruction and reconciles what the rail reports.
Bonds back the exposure, and IOUs bind it to receipts
A bond records the collateral and reserve behind exposure under a facility: the credit limit, outstanding exposure, collateral, and required reserve, in one currency. Its reserve ratio is the fraction of exposure that stays locked; its coverage ratio is the fraction of the credit limit its collateral covers, so 10,000 bps covers the full limit. Read a bond's lifecycle state beside its disposition: Active describes the record, Lock its reserve posture, and a later signed record supersedes it or records release, impairment, or expiry.
An IOU gives one priced invocation a signed claim. A LocalCreditAccount verifies the finalized receipt's signature, content-addressed ID, and action hash, and checks that its kernel key belongs to an explicitly trusted signer set. It mints an envelope only for an allowed mediated receipt with positive financial.cost_charged; denied, cancelled, incomplete, trace, advisory, and zero-cost receipts produce no IOU.
The IOU ID derives from the receipt ID, so evaluating the same receipt twice yields the same envelope. The SQLite IOU store is keyed by receipt ID: an identical envelope is a no-op and a divergent one is a conflict. The signature proves attribution, and the receipt's settlement state decides the financial outcome recorded. Bonds and IOUs are distinct instruments, and an obligation may use either one without passing through the other.
The exposure ledger and the capital book account for every position
The exposure ledger answers how much a subject owes right now. It scopes by capability, agent subject, or tool server, one anchor required, and reports receipt-level detail with a per-currency summary. Governed receipts, underwriting decisions, and settlement reconciliation are its authoritative inputs; it nets within one currency and reports a mixed book instead of summing it. The ledger feeds the underwriting evaluator and the scorecard, and it is the record of which receipts and decisions back a bond.
The capital book explains the funding behind those obligations: the subject's funding sources, recorded commitments, reserve positions, and loss history, through seven event kinds from Commit to Impair. Some events derive from facility or bond state, so an event alone records attribution; the rail's observation records that money moved.
Intended capital movements are signed CapitalExecutionInstructionArtifact records, each with an authority chain, an execution window, and a settlement method, from a manual transfer to ACH, wire, a ledger, or a web3 rail. The instruction's intended state (PendingExecution or CancellationPending) and its reconciled state (NotObserved or Matched) let execution on the rail catch up with the signed intent. Holds and caps prevent spend before dispatch; what the rail settles is observed and recorded.
Read more in Reconciliation, which matches rail observations against signed instructions.
Loss records keep delinquency, recovery, and write-off apart
Loss records connect delinquency, recovery, reserve changes, and write-off to the credit evidence behind them. CreditLossLifecycleEventKind has five variants:
Delinquency: an outstanding obligation is past due.Recovery: a previously delinquent amount was recovered.ReserveRelease: a reserve release is recorded for the source; its execution state shows completion.ReserveSlash: reserve slashing is recorded for the loss; its execution state shows completion.WriteOff: a portion of the loss is formally written off.
Reserve control execution and appeal windows are tracked separately: CreditReserveControlExecutionState is PendingExecution or Executed, and CreditReserveControlAppealState is Unsupported, Open, or Closed. Before tightening the bond policy itself, an operator can dry-run the change with the bonded-execution simulation.
Credit records and enums
Search for MixedCurrencyBook, coverage_ratio_bps, or TransferFunds.
Facility records
Facility terms
pub struct CreditFacilityTerms {
pub credit_limit: MonetaryAmount,
pub utilization_ceiling_bps: u16,
pub reserve_ratio_bps: u16,
pub concentration_cap_bps: u16,
pub ttl_seconds: u64,
pub capital_source: CreditFacilityCapitalSource,
}capital_source names where the money behind the line comes from:
pub enum CreditFacilityCapitalSource {
OperatorInternal,
ManualProviderReview,
}Facility dispositions and lifecycle
Grant: the facility may be issued at the proposed terms.ManualReview: borderline; a person reviews before the facility supports an automatic grant.Deny: the application fails minimum criteria.
CreditFacilityLifecycleState after issuance:
Active: the current record. Credit authority also requiresGrant, met prerequisites, applicable scope, and a valid time window.Superseded: replaced by a newer facility, for amended terms or an adjusted ceiling.Denied: the application was denied at issuance.Expired:expires_atelapsed without renewal.
Facility reason codes
CreditFacilityReasonCode attaches to findings on the facility report:
ScoreRestricted,ProbationaryScore,LowConfidence: scorecard gates.MixedCurrencyBook: the subject's exposure ledger spans more than one currency.chio-creditnets exposure within a single currency, so a mixed book is reported, not summed.MixedRuntimeAssuranceProvenance,MissingRuntimeAssurance,CertificationNotActive: attestation and certification gates.FailedSettlementBacklog,PendingSettlementBacklog: unsettled exposure blocks a fresh facility.FacilityGranted: the successful-issuance marker on the report.
Bonds and IOUs
Bond terms
pub struct CreditBondTerms {
pub facility_id: String,
pub credit_limit: MonetaryAmount,
pub collateral_amount: MonetaryAmount,
pub reserve_requirement_amount: MonetaryAmount,
pub outstanding_exposure_amount: MonetaryAmount,
pub reserve_ratio_bps: u16,
pub coverage_ratio_bps: u16,
pub capital_source: CreditFacilityCapitalSource,
}reserve_ratio_bps: the fraction of outstanding exposure that stays locked as reserve.coverage_ratio_bps: the fraction of the facility's credit limit this bond's collateral covers; 10,000 bps covers the full limit.
The nominated settlement rail carries out any lock, release, or transfer the bond describes, and the capital book records what the rail reports.
Bond lifecycle states
CreditBondLifecycleState has five states:
Active: the bond is live and backs outstanding exposure.Superseded: replaced by a newer bond, after resized collateral or a facility amendment.Released: the record marks the reserve released; the rail's observation records the movement.Impaired: the record marks collateral impaired, associated with loss evidence.Expired: the bond's TTL elapsed without renewal.
Bond disposition actions
CreditBondDisposition is the action the bond evaluator recommends, distinct from the lifecycle state:
Lock: reserve backing is recorded as locked against the facility's exposure.Hold: reserve is held against unresolved settlement or exposure findings.Release: the release disposition, when the evaluated exposure permits it.Impair: impairment associated with credit loss; pairs with aCreditLossLifecycleevent.
Bond reason codes
Findings on a bond report carry a CreditBondReasonCode: ActiveFacilityMissing, MixedCurrencyBook, PendingSettlementBacklog, FailedSettlementBacklog, ProvisionalLossOutstanding, ReserveLocked, ReserveHeld, ReserveReleased, UnderCollateralized.
IOU envelope
The account signs the envelope with its configured signing backend. Selected fields of IouEnvelopeBody:
pub receipt_id: String,
pub receipt_timestamp: u64,
pub tenant_id: Option<String>,
pub tool_server: String,
pub tool_name: String,
pub capability_id: String,
pub amount_units: u64,
pub currency: String,
pub issuer_key: PublicKey,The IOU hook is one credit entry point. The exposure ledger also reads governed receipts, underwriting decisions, and settlement reconciliation directly, so facilities and capital books draw on more than the hook's IOU rows.
Registered credit schemas
chio.credit.iou-envelope.v1 is the schema tag on the hook's own envelope (IOU_ENVELOPE_SCHEMA in crates/economy/chio-credit/src/hook.rs), and the signed-artifact registry leaves it out. These are the credit rows the registry carries at the pin:
| Schema id | Registry kind | Schema file |
|---|---|---|
chio. | credit_ | spec/ |
chio. | credit_ | spec/ |
The registered receivable envelope is wider. IouEnvelopeBodyV2 (crates/economy/chio-credit/src/iou_v2.rs) carries the schema constant CHIO_RECEIVABLE_IOU_ENVELOPE_V1_SCHEMA from crates/core/chio-core-types/src/signed_artifact.rs. On top of the hook body's fields it adds an operation id, an obligation id and atom digest, the receipt digest with its content and policy hashes, the debtor and original creditor, the original settlement destination reference, a payee binding digest, the current disposition digest, a due time, a facility id, a credit authority digest, and a signed SignedCreditFacilityBindV1. A LocalCreditAccount signs the hook envelope at receipt finalization; the obligation and assignment types are defined over the receivable envelope.
Exposure and capital
Exposure ledger support boundary and positions
pub struct ExposureLedgerSupportBoundary {
pub governed_receipts_authoritative: bool,
pub underwriting_decisions_authoritative: bool,
pub settlement_reconciliation_authoritative: bool,
pub cross_currency_netting_supported: bool,
pub claim_adjudication_supported: bool,
pub recovery_lifecycle_supported: bool,
}
impl Default for ExposureLedgerSupportBoundary {
fn default() -> Self {
Self {
governed_receipts_authoritative: true,
underwriting_decisions_authoritative: true,
settlement_reconciliation_authoritative: true,
cross_currency_netting_supported: false,
claim_adjudication_supported: false,
recovery_lifecycle_supported: false,
}
}
}Per-currency positions track governed_max_exposure_units, reserved_units, settled_units, pending_units, failed_units, provisional_loss_units, recovered_units, quoted_premium_units, and active_quoted_premium_units.
Funding sources
Each entry on the capital book is a CapitalBookSource tagged with a kind and counterparty roles:
pub enum CapitalBookSourceKind {
FacilityCommitment,
ReserveBook,
}
pub enum CapitalBookRole {
OperatorTreasury,
ExternalCapitalProvider,
AgentCounterparty,
}Capital book event kinds
Recorded positions and changes use seven CapitalBookEventKind records:
Commit: a commitment attributed to a facility or bond.Hold: held reserve derived from the bond's recorded posture.Draw: an outstanding amount drawn against a facility, derived from credit evidence.Disburse: a disbursement attributed to the recorded event; its receipt or loss evidence shows the source.Release: a release attributed to reserve or commitment evidence.Repay: a repayment recorded against an outstanding draw.Impair: an impairment attributed to recorded credit loss.
Capital execution instructions
A signed CapitalExecutionInstructionArtifact carries an authority chain, an execution window, and a settlement method; authority-step proofs bind the relevant roles.
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub enum CapitalExecutionInstructionAction {
LockReserve,
HoldReserve,
ReleaseReserve,
TransferFunds,
CancelInstruction,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub enum CapitalExecutionRole {
OperatorTreasury,
ExternalCapitalProvider,
AgentCounterparty,
LiabilityProvider,
Reinsurer,
FacilityProvider,
Custodian,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub enum CapitalExecutionRailKind {
Manual,
Api,
Ach,
Wire,
Ledger,
Sandbox,
Web3,
}CapitalExecutionIntendedState is PendingExecution or CancellationPending; CapitalExecutionReconciledState is NotObserved or Matched. The capital book's default support boundary sets source_of_funds_authoritative to true and automatic_capital_execution_supported to false: chio-credit signs the instruction, the nominated settlement method moves the funds, and reconciliation matches the result afterward.
Capital allocation decisions
A CapitalExecutionInstructionArtifact specifies a movement to execute. A CapitalAllocationDecisionArtifact decides whether capital may be committed for one governed action, and from which source, by selecting a governed receipt already in the evidence store and producing CapitalAllocationInstructionDraft records.
pub enum CapitalAllocationDecisionOutcome {
Allocate,
Queue,
ManualReview,
Deny,
}
pub enum CapitalAllocationDecisionReasonCode {
MissingGovernedReceipt,
AmbiguousGovernedReceipt,
MissingRequestedAmount,
FacilityManualReview,
FacilityDenied,
ManualCapitalSource,
ReserveBookMissing,
UtilizationCeilingExceeded,
ConcentrationCapExceeded,
}The decision's CapitalAllocationDecisionSupportBoundary defaults capital_book_authoritative and simulation_first_only to true, and automatic_dispatch_supported and external_execution_authoritative to false: the decision drafts instructions and an operator issues them. Allocation has its own CLI verb group, chio trust capital-allocation, distinct from chio trust capital-instruction.
Simulation and sources
Bonded execution
The bonded-execution simulation evaluates whether a bond meets a candidate control policy for a stated autonomy tier, runtime assurance tier, and call-chain presence. The policy type is CreditBondedExecutionControlPolicy:
pub struct CreditBondedExecutionControlPolicy {
pub version: String,
pub kill_switch: bool,
pub maximum_autonomy_tier: Option<GovernedAutonomyTier>,
pub minimum_runtime_assurance_tier: Option<RuntimeAssuranceTier>,
pub require_delegated_call_chain: bool,
pub require_locked_reserve: bool,
pub deny_if_bond_not_active: bool,
pub deny_if_outstanding_delinquency: bool,
}The report returns Allow or Deny with findings after checking the active facility and bond, prerequisites, autonomy limits, the call-chain requirement, reserve requirements, and delinquency. It runs as a trust control plane simulation: it dispatches no tool and changes no kernel call path.
A CreditBondedExecutionSimulationReport, built from a CreditBondedExecutionSimulationRequest that pairs a CreditBondedExecutionSimulationQuery with a candidate policy, evaluates the current bond against both the default and the simulated policy. Its CreditBondedExecutionSimulationDelta says whether the gate decision changed and which reasons were added or removed. For drift, chio trust credit-backtest export (HTTP GET /v1/reports/credit-backtest) replays scorecard and facility logic over a configurable count and width of past windows.
Implementation sources
The struct excerpts above omit documentation comments and unrelated fields.
crates/economy/chio-credit/src/lib.rs: facility, bond, and exposure contracts.crates/economy/chio-credit/src/local_account.rs: trusted receipt checks and IOU minting.crates/economy/chio-credit/src/obligation/credit_admission.rs: facility authority resolution.crates/platform/chio-control-plane/src/trust_control/reports.rs: capital allocation evaluation.crates/platform/chio-control-plane/src/trust_control/credit_and_loss.rs: facility and bond reports, loss records, and bond simulation.