Choose the right level of control
Terminal commands prompt when a decision is needed. Use
--no-input for unattended runs; connect then requires an exact method selection when several methods match.
Plan and apply separately
SDK, REST, MCP, and Unified App configs all useapp plan, app apply, and app validate. Select the intended file with -f (--file). Without it, the CLI discovers configs under .fused/: multiple app kinds produce multiple app types found, while multiple configs of the same app kind are selected together. SDK and REST delivery share kind: sdk. An explicit file keeps the workflow scoped to the app you are changing.
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
Stop after planning
Add--no-apply to the guided init command when you want it to resolve the
service version and operations, write validated desired state, and retain the
available plan receipts without applying anything:
app apply without --download for a direct API and
app apply for an MCP server. If a saved receipt is stale when you return,
rerun its plan command before apply.
Only terminal SDK planning offers optional credential setup. Workspace, MCP, webhook, and import planning do not mutate credentials; missing SDK or MCP values are readiness warnings rather than plan or apply failures.
Review credentials during init
Interactiveinit adds a credential review before publishing SDK, MCP, and combined Apps. This review is separate from standalone app plan behavior.
Setup and recheck return to the menu while credentials remain missing. Cancellation does not undo service activation or credential writes already completed. With
--no-input or CI=true, init reports readiness warnings and continues without prompting or storing credentials.
Make automation explicit
Use--no-input for every unattended command. Commands that require explicit input fail with guidance instead of waiting for terminal input. Missing provider credentials during app init or planning remain readiness warnings; an affected runtime call fails until those credentials are configured. connect requires values when its selected method is not already configured. Add --json when the command exposes structured output.
For App initialization, bare services select all operations automatically, while inline lists select only the named operations. The same selectors work in terminals and automation. No method flag creates the combined App:
--service 'linear;slack' instead when the App needs all operations from both services. Semicolons separate services; commas separate operations within one service, as in --service 'linear=issueUpdate;slack=chatPostMessage,conversationsList'. Keep the value quoted so the shell preserves semicolons. Add --sdk, --rest, or --mcp only when you want one delivery method.
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:
<auth-name> with the service’s exact authentication scheme from fused-cli service show --registry linear --json. connect accepts one quoted, comma-separated assignment argument; the shell expands environment variables before invocation. --no-input disables the picker and value prompts. See credential setup for paired methods and selection rules. Planning reports missing entries in structured credential_readiness metadata and continues. If an affected operation is called before setup, execution stops before contacting the provider with bucket_credentials_missing and the exact safe connect command.
Create and extend apps
Use the top-level creation command for SDK, REST API, and MCP onboarding. Useextend to add selections to an existing config.
fused-cli app. Config kind and selected app identity determine the supported capabilities.
For discovery, make both choices explicit as well:
Use offline validation deliberately
Plan already validates the local config before its first Fused 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 Fused URL. Apply refuses a stale file, a receipt without Fused identity, or a receipt created for another Fused deployment.
Use a direct plan ID only when it came from the exact current config and Fused. Re-plan after the config or target Fused changes.
Recover without guessing
- A workspace activation saves executable contract data without SDK generation input. A generated
app planrequests that input and attaches it only when its exact saved runtime contract and source revision still match Registry. If generatedinit(including the default combined App) receivesgeneration_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. REST-only mode, MCP-only mode, ordinaryapp 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 Fused 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
app plan. - If package transfer fails after a successful SDK apply, rerun
app 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.