Usage
The current alpha CLI validates local contracts, diagnoses deployments, resolves immutable local or Git template sources, creates and executes reviewed OpenTofu plans, configures hosts through Ansible, and retains sanitized lifecycle evidence. Static help and version inspection do not perform project discovery, network access, or child-tool execution:
ainfra help
ainfra help version
ainfra version
ainfra --format json versionValidate and diagnose local state with:
ainfra init example-deployment
ainfra doctor environment
ainfra doctor deployment example-deployment
ainfra doctor template path/to/materialized-template
ainfra doctor all example-deploymentResolve and bind template content with:
ainfra template lock example-deployment
ainfra template update example-deploymentBoth mutations accept --config, follow trusted configuration precedence,
and emit stable text or JSON results. template lock creates the initial
binding and refuses to replace a changed lock. template update is the
explicit path for accepting a new source identity, Git commit, or tree digest.
Doctor never resolves a mutable Git ref and remains read-only unless guarded
local reconciliation is explicitly requested.
Create a private, immutable saved plan and apply that exact reviewed plan with:
ainfra plan example-deployment
ainfra apply example-deployment --plan RUN_IDThe plan result supplies RUN_ID and the complete follow-up command. Apply
refuses missing, destroy-intent, replayed, or stale plans and never creates an
implicit replacement plan. See Reviewed plans for binding,
evidence, JSON-output, and interruption details.
Destruction requires its own reviewed plan and exact run ID:
ainfra plan example-deployment --destroy
ainfra destroy example-deployment --plan RUN_IDInspect retained evidence and ambiguous recovery state without reading OpenTofu state:
ainfra status example-deployment
ainfra logs example-deployment --run RUN_ID
ainfra doctor run example-deploymentThe published v1.0.0-alpha.7 includes reviewed destroy, recovery, retained
logs, and operational logging in addition to output, inventory, Ansible, and
composed deploy commands; see
Output, inventory, and Ansible. Phase 7 adds
guarded MCP serving. The interface is read-only by
default and fixes one project root for the lifetime of the process:
ainfra mcp serve --stdio --project /path/to/deploymentSaved plan creation is discoverable only when explicitly enabled:
ainfra mcp serve --stdio --project /path/to/deployment \
--capability planningEnabling a capability does not approve a lifecycle mutation. Deployment and destruction require independent, operation-bound authorization.
Deployment capability startup requires AINFRA_MCP_APPROVAL_KEY containing at
least 32 bytes of verifier key material. Each mutation request must carry an
externally issued ainfra.approval/v1 artifact signed with HMAC-SHA256. The
artifact binds the canonical root, operation, saved plan ID and digest, intent,
caller, independent approver, issue time, expiry, and nonce. ainfra exposes no
approval-signing command or MCP tool.
The default registry exposes read-only diagnostics, status, sanitized retained output and inventory, all published v1 schemas, and the normative MCP server contract. It never exposes raw engine streams.
With an authorization provider configured, deployment exposes apply,
configure, convergence-check, and deploy operations. destruction additionally
exposes exact reviewed destroy-plan execution and cannot be enabled without
deployment. Every stdio request frame is limited to 1 MiB.
Tool and resource execution is bounded to eight concurrent requests. Client cancellation propagates into planning and lifecycle operations, including any permitted child process through the existing application execution contract.