Can this be done?
Veil receives the plan, resolves the requested capabilities, and makes unavailable operations explicit.
Veil sits between reasoning and infrastructure. Your software, planners, or human workflows produce an ExecutionPlan. Veil validates the plan, authorizes each operation, and executes registered capabilities.
Reasoning / software / humans → ExecutionPlan → Veil → capabilities / providers
Reading files. Calling APIs. Using browsers. Running commands. Applying execution controls. Recording outcomes. Every system that moves from deciding to doing eventually has to solve the same engineering problem.
Veil receives the plan, resolves the requested capabilities, and makes unavailable operations explicit.
The configured authorizer allows or denies each operation using resolved input and caller context. Human review, when needed, belongs to the application.
Resolved capabilities perform the work once execution requirements are satisfied, while Veil records the lifecycle and result.
Install @veil-runtime/core on Node.js 24 or newer to define
capabilities and execute explicit plans. The latest published version
is v0.1.3. These docs target the v0.2.0 release candidate.
The reasoning system can change. The infrastructure can change. The capabilities can grow. The execution model stays the same.
Software, humans, and planners decide what should happen. Veil validates their declarative plan and capability contracts, resolves prior results, authorizes each step, and records outcomes. Capabilities use providers to interact with infrastructure.
A structured proposal describing the operations that should be executed. The plan expresses intent in executable form, but does not itself perform the work.
Steps run sequentially. Earlier results can feed later inputs through result references. Jobs retain outcomes and lifecycle events. Deterministic lookup and ordering do not imply deterministic capability or provider results.
A capability is an operation explicitly made available for
execution. Register capabilities once, then reuse the same
execution machinery across AI, applications, automations,
and human-driven workflows. The examples below describe capability
shapes you can define; they are not bundled integrations in
@veil-runtime/core.
filesystem.file.read
http.request
browser.operation
database.query
shell.execution
capability.custom
Veil does not need to understand every system you use. Expose the operations you want to make executable, register them, then submit plans through validation and authorization.
restartService()
service.restart
runtime.use(module)
Job
A capability can sit in front of a function, API, database, shell command, browser operation, SDK, internal service, or MCP tool.
You do not move your infrastructure into Veil. You decide which operations become available for controlled execution.
import { createCapability } from "@veil-runtime/core";
const restart = createCapability<{ service: string }, void>({
name: "service.restart",
version: "1.0.0",
description: "Restart an application service",
risk: "write",
inputSchema: {
service: { type: "string", required: true,
description: "Service name" }
},
async execute({ input }) {
await infrastructure.restart(input.service);
}
});
infrastructure is your application’s provider. Register the
capability through runtime.use(module), as shown below.
Writes require an application-configured
authorizer;
the default policy denies them. The quickstart uses the public API shared by v0.1.3 and the v0.2.0 candidate.
Veil is deliberately small at the integration boundary.
Define what may be executed, register it, provide an
ExecutionPlan, and let the runtime handle execution.
Your application still owns the implementation. Veil only needs a capability contract around the operation you want to make available for execution.
Clone the repository and run the interactive Starter locally. Experience mode shows the outcome; Learn mode reveals the real plan, job, events, authorization decisions, and MCP translation.
git clone https://github.com/veil-runtime/veil.git
cd veil
npm install
npm run build
examples/veil-starter.
Start the trusted application server.
Start the browser client in a second terminal.
Open the local Vite URL.
Veil executes plans. It does not require a particular model, provider, or even an AI planner. Anything capable of producing an ExecutionPlan can use the same execution runtime.
Bring your own models. Bring your own infrastructure. Build your own capabilities. Meet at one governed boundary.
MCP is an interoperability layer around Veil, not a second
execution path. Adapters can translate MCP invocations into
ExecutionPlan instances, and MCP-backed capabilities
can sit behind the same runtime boundary. Veil Core v0.2.0 publicly
exports the inbound McpAdapter, which requires an
OperatorRuntime and creates no alternate execution path.
@veil-runtime/core v0.2.0 provides the public execution
boundary, contextual authorization, and inbound MCP adapter.
Providers and integrations can be composed around that boundary
without changing the execution model.
Deterministic capability introspection describes the registered execution
surface. listCapabilities() returns inventory;
describeCapability(name, version?) performs exact lookup.
The new CapabilityDescriptor contains detached, mutable metadata.
This contract is included in the v0.2.0 candidate; see local candidate installation.
Names, versions, descriptions, risk and declared input fields. Inventory follows registration order; lookup matches names and versions exactly.
Your reasoning or application logic selects the capability. Veil adds no semantic search, ranking, embeddings or LLM-driven selection.
Introspection grants no permission and does not establish provider readiness. Submit an ExecutionPlan through the normal governed execution path.
v0.2.0 also contains event-subscriber failures, rejects malformed authorization, requires own properties in result paths and unique step IDs per plan, and captures plan structure before admission. Nested input values remain shared: authorization-to-invocation deep value stability is not guaranteed. Read the scope and limits.
The v0.2.0 candidate includes governed-execution hardening, deterministic capability introspection, and the developer documentation refresh. See the v0.2.0 scope and limits.
Use it from AI, applications, humans, and automation without coupling intelligence directly to execution infrastructure.