Choose the right level of control
Terminal commands prompt only when a decision is needed. Omit
--interactive; that compatibility flag only makes the terminal default explicit.
Plan and apply separately
Use the explicit SDK lifecycle when you are editing an existing config, need an independent approval boundary, or want to retry package transfer separately:1
Preview
2
Apply
3
Download
Make automation explicit
Use--no-input for every unattended command. It turns a missing selection, confirmation, or credential into an error instead of waiting for terminal input. Add --json when the command exposes structured output.
For app initialization, automation must declare the mode and operation boundary that the terminal selectors would normally collect:
--select-all linear instead when the SDK intentionally needs the service’s complete operation surface.
Top-level extend infers the app mode from the existing YAML and updates that same file; no parallel config is created. A real change to a stable SemVer version advances to the next minor version deterministically, including under --no-input:
1.0.0 becomes 1.1.0. A terminal includes the inferred successor in its combined confirmation. An idempotent extension keeps its current version. Pass --version to override the inference; prerelease and non-SemVer identities always require an explicit successor.
An unattended MCP init also requires an authored description:
--value-stdin is not an interaction flag. It selects the secure source of secret bytes, while --no-input guarantees that the command will not prompt. A missing credential remains a structured bucket_credentials_missing error in automation.
Migrate existing init commands
The resource-scoped creation commands remain supported as compatibility aliases for existing scripts. New documentation uses the top-level command so SDK, API, and MCP onboarding share one path.
The aliases call the same underlying creation functions. You can migrate without changing the resulting resource, receipt boundaries, or config location.
For discovery, make both choices explicit as well:
Use offline validation deliberately
Plan already validates the local config before its first Engine request. Run standalone validation only when the check must stay offline:Keep and move receipts deliberately
A receipt binds a plan to the exact config hash and normalized Engine URL. Apply refuses a stale file, a receipt without Engine identity, or a receipt created for another Engine.
Use a direct plan ID only when it came from the exact current config and Engine. Re-plan after the config or target Engine changes.
Recover without guessing
- If generated
init --sdkreceivesgeneration_contract_pin_unavailable, it first resolves every selected active workspace version. It then printsRefreshing immutable SDK generation snapshot for <service>@<version>...as it refreshes each exact snapshot and retries the unchanged plan once.--no-inputuses the same deterministic path without prompting. The CLI never derives a pin locally, substitutes the runtime contract hash, selects a newer version, or retries twice. API mode, MCP mode, ordinarysdk plan, and unrelated failures do not refresh snapshots. - If exact resolution or refresh fails, init does not retry the plan or create the app config. If the one retry fails, the error reports every refresh that already completed. A repeated missing-pin response directs you to the Engine and Registry logs or another enabled version. A workspace activation may already be applied under its separate receipt. Changing credentials or operation selection does not repair this failure.
- If SDK credential remediation is declined or unavailable, store the credential in the selected bucket and rerun
sdk plan. - If package transfer fails after a successful SDK apply, rerun
sdk download, not apply. - If import apply times out or loses its response, run
fused-cli import status <operation-id>with the receipt’s plan ID. Do not replay the mutation while its commit state is unknown. - If a scoped workspace activation partially succeeds, use the exact ID-pinned recovery command printed by the CLI.
Build an SDK
Return to the guided creation path.
Enable a service
Activate one service without mirroring the full workspace.