{
  "slug": "pulumi-automation-api-adds-install-for-nodejs-python-and-go-abe180072dec",
  "title": "Pulumi Automation API adds `install` for NodeJS, Python, and Go",
  "tools": [
    "pulumi"
  ],
  "tags": [
    "agent"
  ],
  "introduced_at": "2026-10-07T10:24:48.000Z",
  "announced_at": "2026-10-07T10:24:48.000Z",
  "effective_at": null,
  "date_basis": "source-publication",
  "status": "unknown",
  "how": {
    "incantation": "When a NodeJS, Python, or Go Automation API workflow needs the Pulumi CLI at runtime, call that language’s `install` interface to download and install it. The default install uses the CLI version matching the SDK and places it under `~/.pulumi/versions/<version>`; pass the returned command to the workspace that runs the stack.",
    "examples": [
      "const pulumiCommand = await PulumiCommand.install();\nconst stack = await LocalWorkspace.createOrSelectStack(args, { pulumiCommand });",
      "const pulumi_command = auto.PulumiCommand.install()\nstack = auto.create_or_select_stack(stack_name=stack_name,\n                                    project_name=project_name,\n                                    program=pulumi_program,\n                                    opts=auto.LocalWorkspaceOptions(pulumi_command=pulumi_command))",
      "ctx := context.Background()\npulumiCmd, err := auto.InstallPulumiCommand(ctx, &auto.PulumiCommandOptions{})\nif err != nil {\n    return err\n}\ns, err := auto.UpsertStackInlineSource(ctx, stackName, projectName, deployFunc, auto.Pulumi(pulumiCmd))"
    ],
    "gotchas": [
      "Version: 3.268.0",
      "NodeJS `opts` (optional): `root`: Directory to install the CLI in or find an existing installation; defaults to `$HOME/.pulumi/versions/$VERSION.",
      "NodeJS `opts` (optional): `version`: CLI version to use; defaults to the version matching the SDK.",
      "NodeJS `opts` (optional): `skipVersionCheck`: Skips the minimum CLI version check.",
      "Python `root`: Install directory; defaults to `~/.pulumi/versions/<version>`.",
      "Python `version`: CLI version to install; defaults to the version matching the SDK.",
      "Python `skip_version_check`: Skips version validation; `PULUMI_AUTOMATION_API_SKIP_VERSION_CHECK` also disables the check and takes precedence.",
      "Go `ctx` (required): Context passed to `InstallPulumiCommand`.",
      "Go `opts` (required): Pointer to `PulumiCommandOptions`; documented fields are `Root` (install directory), `Version` (CLI version), and `SkipVersionCheck` (disable version validation). Defaults install the CLI version matching the SDK under `$HOME/.pulumi/versions/$VERSION`.",
      "Prerequisite: Automation API requires the chosen language runtime. The getting-started guide lists Node.js, Python, or Go as applicable runtime prerequisites.",
      "Prerequisite: The Automation API guide says to configure a Pulumi access token or another state backend; deployment examples may also require target cloud credentials.",
      "The generated Automation APIs named in the release are for NodeJS, Python, and Go."
    ]
  },
  "why_it_matters": "Install Pulumi through the generated Automation API in a NodeJS, Python, or Go workflow.",
  "sources": [
    "https://github.com/pulumi/pulumi/releases/tag/v3.268.0",
    "https://www.pulumi.com/docs/iac/guides/building-extending/automation-api/",
    "https://www.pulumi.com/docs/reference/pkg/nodejs/pulumi/pulumi/interfaces/automation.PulumiCommandOptions.html",
    "https://www.pulumi.com/docs/reference/pkg/python/pulumi/",
    "https://pkg.go.dev/github.com/pulumi/pulumi/sdk/v3%40v3.268.0/go/auto",
    "https://pkg.go.dev/github.com/pulumi/pulumi/sdk/v3%40v3.267.0/go/auto",
    "https://www.pulumi.com/docs/using-pulumi/automation-api/getting-started-automation-api/"
  ],
  "rank": 0.96028,
  "judge": {
    "publish": true,
    "judge_model": "codex-cli/gpt-6-luna+typesafe/jev-1.13.0",
    "prompt_version": "extract-v7+enrich-v2+judge-v2x3-rejudge+jev-publish-v1"
  },
  "review_state": "approved",
  "provenance": {
    "run_id": "wave1-20261014",
    "verdict_id": "wave1-20261014:wave1-20261014-1160583841e29f96-3:rescue",
    "evidence_hash": "63352c9173dc5c84cdadcf372bbe4d6fcca4cd44a18f4ad58f157911e6491111"
  },
  "review": {
    "draft_hash": "15e06b22b6a1f148dda70d5469ee8b953e4df0fe9ac59dec797889b8f19174f8",
    "reviewer": "publication-gate",
    "reviewed_at": "2026-10-07T10:24:48.000Z",
    "decision": "wave1-20261014:rescue",
    "reason": "Rescue path: first rejected only because the extracted card lacked usage; judged again on the enriched card, 3 of 3 judge runs approved with p_yes >= 0.9 (mean 0.96 >= 0.9; 2 needed) and Jev gave 0.77 (>= 0.6 needed)."
  }
}
