Skip to content

Features ​

The provider and cloud matrices are read from the declarations the compiler enforces, not maintained by hand. Everything else is a registry that a test holds to those declarations and to the release that first shipped each row. The spec language is at 0.11.

Deployment targets ​

A deployment names one target, and the generated infrastructure runs it on one cloud. A cell names the managed service the emitted OpenTofu configures. A dash is a refusal with a named diagnostic, not a target that is still to come.

Targetawsgcp
serverlessAPI Gateway + LambdaCloud Run
containerECS on FargateCloud Run
batchAWS BatchCloud Run job
edgeLambda@Edge on CloudFront—

edge on gcp is refused with cli/infra-cloud-target-unsupported: Cloud CDN serves static assets and cannot run the app, so there is no GCP resource to map edge to.

Model providers ​

Every provider in SERVED_PROVIDERS is a row. A check means the generated adapter advertises the capability the spec's capabilities enum names; a dash means a spec that declares it is refused with ir/model-capability-missing, because the provider's API has no such endpoint.

ProviderAdapterToolsStructured outputStreamingEmbeddingsCatalog
anthropicAnthropicProvideryesyesyes—2 models, 2 priced
bedrockBedrockProvideryesyes——2 models, 2 priced
geminiGeminiProvideryesyesyes—1 model, 1 priced
googleVertexProvideryesyesyes—2 models, 2 priced
openaiOpenAICompatibleProvideryesyesyesyes5 models, 5 priced
openai-compatibleOpenAICompatibleProvideryesyesyesyes—
fakeFakeProvideryesyesyesyes—

Cloud AI infrastructure ​

The generated infrastructure does not only run the service; it grants the service the cloud identity it needs to call a managed model. Where a cloud needs extra configuration to reach its model platform, the module sets that too.

Managed serviceDeclared byEmittedRuntime credentialSince
Bedrock from the AWS modulemodels[].provider: bedrockbedrock:InvokeModel, plus bedrock:InvokeModelWithResponseStream when a service declares streaming, scoped to the foundation-model and inference-profile ARNsthe IAM role the module creates for the service0.1.81
Vertex AI from the GCP modulesmodels[].provider: googleroles/aiplatform.user on the project, plus GOOGLE_CLOUD_PROJECT and GOOGLE_CLOUD_REGION on the Cloud Run service or job, which Cloud Run does not setthe service account the module creates0.1.83
Bedrock Guardrails as the guardrail engineguardrails[].engine: bedrockan aws_bedrock_guardrail and its numbered version from the bedrock: block, BEDROCK_GUARDRAIL_ID and BEDROCK_GUARDRAIL_VERSION on the service, and bedrock:ApplyGuardrail on that guardrail alone — the CDK construct mirrors all of it; omit the block and the app reads the two variables for a guardrail the operator ownsthe IAM role the module creates for the service0.1.98

Out of the box ​

Each row is behaviour the generator writes for you, the spec key or command that turns it on, and the release that first shipped it. A construct that needs a later spec version is refused by name rather than ignored.

FeatureWhat it doesTurned on byReferenceSince
Versioned spec languageA construct that needs a later version is refused by name instead of being ignored, so a spec never silently means less than it says.specVersionspec0.1.0
Pinned model idsA model alias is what the rest of the spec refers to; the vendor id is pinned in one place and never floats to a vendor default.models[].modelIdspec0.1.0
Priced callsA committed cost profile prices every call. An unpriced model is reported as unknown, never as free.models[].costProfilespec0.1.0
Capability refusalA spec that asks a target for something it cannot serve is refused at plan time with a named diagnostic, not shipped and debugged in production.deployments[].targettargets0.1.2
Eval coverageAn HTTP pipeline with no CI eval claiming it is a build error, so a prompt edit cannot ship unmeasured.evals[].gate.cispec0.1.2
Retrieval with citationsA retriever can require that retrieved items carry the source path and offsets a generated answer cites.retrievers[].traitsspec0.1.6
Guardrail stagesPolicies are evaluated at declared stages, and a failing policy has a declared action rather than a default.guardrails[]spec0.1.18
Unprotected routes are refusedA POST route that passes caller text to a prompt with no input guardrail fails the build before it can be exposed.guardrails[].stagesspec0.1.18
Agents and handoffsAn agent declares its model, instructions, tools, retrievers and budget; a handoff cycle and an exhausted budget are plan-time errors.agents[]spec0.1.19
Memory tiersWhat is remembered, for how long, within what token budget, and where it lives.memory[]spec0.1.19
Semantic cacheThe opt-in fuzzy layer beside exact-match caching, carrying its own similarity threshold rather than a global default.models[].cache.semanticspec0.1.25
Local trace captureA run writes JSONL spans to a directory you name, and aid trace prints the span tree from them. No collector to stand up.aid tracecli0.1.56
Infrastructure from the specA deployment plan derives OpenTofu modules for the chosen cloud, byte-asserted against fixtures and validated with tofu in CI.deployments[]spec0.1.54
A CDK backendThe same deployment plan can emit a CDK app instead, for a team already deploying with it.aid infra --backend cdkcli0.1.57
EjectTake ownership of a generated file: it stops being regenerated and the app keeps booting, because it never depended on a control plane.aid ejectcli0.1.58
Generated project CIEvery generated project ships the workflow that runs its evals, so the gate travels with the code it gates.aid gencli0.1.59
A cost ceiling in CICost is an eval metric, and the generated workflow exits non-zero when a run exceeds the recorded budget.evals[].metrics[].kind: costspec0.1.65
A Dockerfile and an imageA container deployment emits the Dockerfile and the release workflow that builds and pushes the image it deploys.deployments[].imagespec0.1.70
Jev-backed decisionsA named question with its own reply shape, answered by TypeSafe AI Jev, and referenced by guardrails, routers and evals.decisions[]spec0.1.88
A decision-backed guardrailAn input guardrail asks a declared decision and enforces a minimum confidence, so the check is a typed answer rather than free text.guardrails[].decisionspec0.1.90
A decision eval metricAn eval scores a decision on its own reply shape, so a guardrail change is measured like any other behaviour.evals[].metrics[].kind: decisionspec0.1.91

Refused, on purpose ​

An absent capability is stated once, here, with the diagnostic that enforces it, instead of being discovered during an apply or debugged in production.

Not supportedWhyEnforced by
Streaming on ts-vercelThe Vercel target declares no streaming capability, so a spec that needs SSE is refused rather than emitted with a buffered response.ir/capability-missing
Jev as a generation modelJev answers a declared decision. It is not in SERVED_PROVIDERS, so a models[] entry naming it has no adapter and is refused.ir/provider-unsupported
Embeddings on a provider with no embeddings endpointThe Anthropic Messages API and the Bedrock Converse API have no embeddings endpoint, so the adapter does not advertise embeddings and a spec that declares it is refused.ir/model-capability-missing
Streaming on an HTTP APIA deployment whose transport cannot stream is refused instead of buffering the response and calling it streaming.ir/deploy-streaming
edge on GCPCloud CDN serves static assets and cannot run the app, so the infra planner refuses the plan instead of emitting part of a project.cli/infra-cloud-target-unsupported

Next: the full support matrix, the generator targets, or the spec reference.

Latest release v0.1.98 · Released under the Apache-2.0 licence · Licence · Notice · Security