Preview guidance. Review the decisions and proposed changes before applying them to your product.
- The Tensor9 compiler applies supported mechanical transforms, including looking up a pre-created AWS vanity zone when it matches your annotated domain variable.
- You identify the domain, secret ownership and other application choices using annotations: comments directly above their Terraform blocks. You also review feature configuration and any required source repair separately.
Who does what
Annotating an existing domain variable is enough for the supported automatic AWS zone lookup; do not add a new hosted-zone switch for that case. See the exact conditions.
Review application configuration and source problems
The Claude Code and Codex skills include the same library of common Terraform mistakes. Its first rule checks optional resources that can be absent throughcount or for_each while a consumer still reads [0] or a key that may not exist. The skill follows the condition that creates the resource, checks its consumers, and shows the finding and a proposed repair. It does not present these checks as compiler diagnostics.
For example, choosing an empty endpoint service name disables Oumi’s ClickHouse PrivateLink endpoint. The original dashboard still reads aws_vpc_endpoint.clickhouse[0]. The library identifies this mismatch and describes guarding the ClickHouse widget group when the endpoint is absent. The skill presents the vendor’s feature choice separately from the source repair and asks before applying the repair. Declined or unresolved work stays in its report.
Do not assume the compiler detects every source problem. A successful compile does not prove that the resulting configuration can plan, apply or serve traffic. Read the compile report, resolve Blocking issues, then validate the deployment configuration and application behavior.
External billing, identity, telemetry and other services need their own product decisions. Decide whether each function belongs in a customer install, who owns any retained account, and what application changes are required. The external-services guide walks through those choices, with dedicated Stripe and Metronome guidance. The skills load shared consideration data from your VCtrl through the public tensor9 CLI, with a labelled offline fallback. A match or missing credential never automatically removes a dependency.
The flow: annotate, compile, install
Create your vendor account and control plane
Follow Get a Tensor9 API key to sign up and install thetensor9 CLI. Then run export T9_API_KEY=<your API key> and tensor9 vendor setup to set up your control plane in your own AWS account, in the us-west-2 region. Setup makes its controller profile your CLI default, so the commands below need no API key or profile options. See Your controller profile.
A sandbox session is separate exploration access and does not replace your account or control plane.
1
Annotate
Add an annotation above each block that needs one of your decisions. Most stacks need a handful: one for the install’s domain, one for the region, one for a unique name prefix, and one per secret. The annotation reference lists every annotation, the decision it records and an example.You can do this by hand, or have an agent do it:The agent asks one question at a time and only writes what you approve. It reports annotations separately from namespace edits, feature configuration and source repairs.
2
Publish and bind
Create your app if you have not already, then publish your stack and bind it to your app in one step. Later publishes with the same
-stackName update the stack and keep the binding:3
Onboard a customer
Create the form factor your customers install, then create a setup link for a customer:The setup command creates the customer
acme-corp if it does not exist yet and prints its setup link. Send the link to your customer. They choose their environment and apply the infrastructure templates in their own account, as the customer installation guide describes. tensor9 report shows their appliance when it is ready.4
Compile and install
Create a release for the customer. Release creation compiles the stack for that customer’s environment and writes the deployment stack locally. This guide does not require a separate standalone compile command.Review the compiler report and resolve Blocking issues before continuing. Release creation downloads the compiled workspace into Use the API key you downloaded from sandbox.tensor9.com. Unset
<appliance-name>/my-app-stack/. Change into that directory, then run tofu init and tofu apply, as you would any Terraform workspace, with your API key in T9_API_KEY for this step only:The tensor9 provider in the deployment stack authenticates with your Tensor9 API key, which it reads from the T9_API_KEY environment variable. In the workspace directory, enter the key at a hidden prompt, apply the stack, then unset the variable:- Bash
- Zsh
T9_API_KEY as soon as the apply finishes: while it is set, tensor9 CLI commands use the key instead of your controller profile. Do not put the key in a command, a shell profile or a source file.See the Terraform quick start for a complete first-time walkthrough, and its Clean up section for removing a test install.What you keep
- One stack. The same Terraform runs your own environments and every customer install.
- Reviewed source changes. Namespace prefixes, feature choices and repairs stay explicit in your own code review.
- A visible record of decisions. Annotations sit next to their blocks; configuration and repair edits remain visible in your diff and history.
Next steps
Annotation reference
Syntax, the decision each annotation records, and an example of each.
Have an agent do it
Install the Claude Code or Codex skill and let it find and write your annotations.