Documentation menu

Release candidate: v0.2.0. These docs cover v0.2.0 scope and limits.

Providers

What it is

A provider is implementation-side code that interacts with an external system. The repository contains browser, HTTP, SQLite, and MCP provider implementations. A capability may call a provider, but provider types are not a general root-package extension API in v0.2.0.

In the orders example

orders.create is the governed capability; an OrdersProvider-like client is the implementation that sends the remote create request. The capability’s name, risk, and input schema are visible to validation and authorization. The provider holds protocol details, endpoint use, connection/session handling, and vendor-specific failure handling.

Why the distinction matters

If remote I/O occurs inside a capability without a clear operation boundary, authorization cannot distinguish a harmless lookup from a production write. Conversely, making every HTTP primitive a public capability exposes transport rather than business operation. Put the smallest meaningful governed action in a capability and factor reusable external-system mechanics into a provider.

Lifecycle

Veil does not call a provider directly. It validates, resolves input, authorizes, and calls capability.execute; only then can that capability use a provider. A provider failure surfaces as a capability execution failure and fails the current job. Veil makes no broader guarantee about remote-system transactionality, credential storage, or retries.

Current limits

Built-in provider implementations and outbound MCP provider helpers are internal paths. Do not import them from src or dist as a consumer. Use application-owned provider code behind public capability APIs.

Related: capabilities, trust boundaries, inbound MCP.