<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Uri Berman</title>
    <description>The latest articles on DEV Community by Uri Berman (@uri_berman).</description>
    <link>https://dev.to/uri_berman</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4057664%2Fbcc3cd57-134b-4bc9-95be-89465550cfc1.jpg</url>
      <title>DEV Community: Uri Berman</title>
      <link>https://dev.to/uri_berman</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/uri_berman"/>
    <language>en</language>
    <item>
      <title>Why Your Code May Use a Different GCP Project Than gcloud</title>
      <dc:creator>Uri Berman</dc:creator>
      <pubDate>Sat, 01 Aug 2026 08:46:06 +0000</pubDate>
      <link>https://dev.to/uri_berman/why-your-code-may-use-a-different-gcp-project-than-gcloud-5ddk</link>
      <guid>https://dev.to/uri_berman/why-your-code-may-use-a-different-gcp-project-than-gcloud-5ddk</guid>
      <description>&lt;p&gt;Most Google Cloud developers assume there is one active cloud context.&lt;/p&gt;

&lt;p&gt;There isn't.&lt;/p&gt;

&lt;p&gt;Your &lt;code&gt;gcloud&lt;/code&gt; CLI can point to one project while Python, Terraform, Node.js, or an AI coding agent uses Application Default Credentials associated with another.&lt;/p&gt;

&lt;p&gt;That is the problem I built &lt;strong&gt;gcpctx&lt;/strong&gt; to solve.&lt;/p&gt;

&lt;h2&gt;
  
  
  The dangerous mismatch
&lt;/h2&gt;

&lt;p&gt;Imagine this local environment:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Effective project&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;gcloud CLI&lt;/td&gt;
&lt;td&gt;&lt;code&gt;my-dev-project&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Application Default Credentials&lt;/td&gt;
&lt;td&gt;&lt;code&gt;company-production&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Terraform provider&lt;/td&gt;
&lt;td&gt;&lt;code&gt;company-production&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Python SDK&lt;/td&gt;
&lt;td&gt;&lt;code&gt;company-production&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;You run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gcloud config &lt;span class="nb"&gt;set &lt;/span&gt;project my-dev-project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The CLI now says development.&lt;/p&gt;

&lt;p&gt;But changing a &lt;code&gt;gcloud&lt;/code&gt; configuration does not automatically replace the Application Default Credentials used by client libraries and other tools.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbmbdbcgh8e7p0bqnyxde.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbmbdbcgh8e7p0bqnyxde.png" alt=" " width="800" height="348"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The command may be correct.&lt;/p&gt;

&lt;p&gt;The inherited cloud context may not be.&lt;/p&gt;

&lt;h2&gt;
  
  
  The workflow I wanted
&lt;/h2&gt;

&lt;p&gt;I wanted to switch all relevant Google Cloud state together:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;account&lt;/li&gt;
&lt;li&gt;project&lt;/li&gt;
&lt;li&gt;named &lt;code&gt;gcloud&lt;/code&gt; configuration&lt;/li&gt;
&lt;li&gt;Application Default Credentials&lt;/li&gt;
&lt;li&gt;ADC quota project&lt;/li&gt;
&lt;li&gt;shell environment&lt;/li&gt;
&lt;li&gt;repository context&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also wanted a visible prompt and an explicit assertion before running deployment commands.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;gcpctx&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install gcpctx
&lt;/h2&gt;

&lt;p&gt;Install it from npm:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; gcpctx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Initialize the shell integration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gcpctx shell-setup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then bootstrap the first context:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gcpctx bootstrap
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The bootstrap command guides you through creating an initial Google Cloud context from your current environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Switch the full GCP context
&lt;/h2&gt;

&lt;p&gt;Activate a named context:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gcpctx use prod
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After activation, the shell prompt can show the active context and project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(gcp:prod:your-project)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This provides an immediate visual warning that the current terminal is operating against production.&lt;/p&gt;

&lt;p&gt;The important difference is that &lt;code&gt;gcpctx use&lt;/code&gt; aligns the &lt;code&gt;gcloud&lt;/code&gt; configuration and the per-context ADC environment instead of switching only the CLI project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Assert before running anything important
&lt;/h2&gt;

&lt;p&gt;A visible prompt helps, but scripts should not rely on a human noticing it.&lt;/p&gt;

&lt;p&gt;Verify the expected project explicitly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gcpctx assert &lt;span class="nt"&gt;--project&lt;/span&gt; your-project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify both the context and project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gcpctx assert &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--context&lt;/span&gt; prod &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--project&lt;/span&gt; your-project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The command exits with a nonzero status when the active context does not match.&lt;/p&gt;

&lt;p&gt;That makes it useful in shell scripts, deployment scripts, CI preparation, and agent workflows.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gcpctx assert &lt;span class="nt"&gt;--context&lt;/span&gt; prod &lt;span class="nt"&gt;--project&lt;/span&gt; your-project &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
terraform plan
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Execute a command inside a required context
&lt;/h2&gt;

&lt;p&gt;For a stronger execution pattern, use &lt;code&gt;gcpctx exec&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gcpctx &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--require-context&lt;/span&gt; prod &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--&lt;/span&gt; terraform plan
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For a production deployment:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gcpctx &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--require-context&lt;/span&gt; prod &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--&lt;/span&gt; terraform apply
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Protect production contexts
&lt;/h2&gt;

&lt;p&gt;Mark a sensitive context as protected:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gcpctx protect prod
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Protected contexts can display stronger warnings and require explicit authorization in sensitive workflows.&lt;/p&gt;

&lt;p&gt;This does not replace IAM, approvals, or separate production credentials.&lt;/p&gt;

&lt;p&gt;It adds another local safety boundary.&lt;/p&gt;

&lt;h2&gt;
  
  
  Diagnose the current environment
&lt;/h2&gt;

&lt;p&gt;Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gcpctx doctor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The doctor command checks the local context configuration, including consistency between the active project, account, credentials, quota project, shell integration, and managed files.&lt;/p&gt;

&lt;p&gt;A typical workflow becomes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gcpctx use prod
gcpctx assert &lt;span class="nt"&gt;--project&lt;/span&gt; your-project
gcpctx doctor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then run the intended command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gcpctx &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--require-context&lt;/span&gt; prod &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--&lt;/span&gt; terraform plan
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Override the project when activating
&lt;/h2&gt;

&lt;p&gt;A context can also be activated with a different project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gcpctx use prod &lt;span class="nt"&gt;--project&lt;/span&gt; another-project-id
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is useful when the credential identity remains the same but the target project changes.&lt;/p&gt;

&lt;p&gt;It also keeps the override visible in the command rather than hiding it in an unrelated environment variable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Create or refresh credentials for a context
&lt;/h2&gt;

&lt;p&gt;Use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gcpctx login prod
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This associates the authentication flow with the named context instead of treating ADC as one invisible global state.&lt;/p&gt;

&lt;p&gt;Credential contents remain local.&lt;/p&gt;

&lt;p&gt;gcpctx may display credential paths for diagnostics, but it does not print credential bodies.&lt;/p&gt;

&lt;h2&gt;
  
  
  Repository-specific activation
&lt;/h2&gt;

&lt;p&gt;A repository can include a safe &lt;code&gt;.gcpctx&lt;/code&gt; marker:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"dev"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"project"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"example-dev-123456"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This makes the expected environment part of the repository workflow.&lt;/p&gt;

&lt;p&gt;A developer moving between several customer or product repositories no longer needs to remember the correct project for each directory.&lt;/p&gt;

&lt;p&gt;The repository declares the expected context.&lt;/p&gt;

&lt;p&gt;The marker contains context metadata, not credential bodies.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why &lt;code&gt;gcloud configurations&lt;/code&gt; are not enough
&lt;/h2&gt;

&lt;p&gt;Named &lt;code&gt;gcloud&lt;/code&gt; configurations are useful, but they primarily affect the CLI.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mechanism&lt;/th&gt;
&lt;th&gt;Affects &lt;code&gt;gcloud&lt;/code&gt; CLI&lt;/th&gt;
&lt;th&gt;Affects client libraries and ADC&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gcloud config configurations activate&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gcloud auth application-default login&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes, through the global ADC file&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gcpctx use&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes, through per-context ADC and environment&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;gcpctx does not replace &lt;code&gt;gcloud&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;It coordinates the independent context mechanisms around it.&lt;/p&gt;

&lt;h2&gt;
  
  
  A complete example
&lt;/h2&gt;

&lt;p&gt;Here is the full workflow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; gcpctx

&lt;span class="c"&gt;# Configure shell integration&lt;/span&gt;
gcpctx shell-setup

&lt;span class="c"&gt;# Create the initial context&lt;/span&gt;
gcpctx bootstrap

&lt;span class="c"&gt;# Authenticate a production context&lt;/span&gt;
gcpctx login prod

&lt;span class="c"&gt;# Protect it&lt;/span&gt;
gcpctx protect prod

&lt;span class="c"&gt;# Activate it&lt;/span&gt;
gcpctx use prod

&lt;span class="c"&gt;# Verify it&lt;/span&gt;
gcpctx assert &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--context&lt;/span&gt; prod &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--project&lt;/span&gt; your-project

&lt;span class="c"&gt;# Diagnose configuration&lt;/span&gt;
gcpctx doctor

&lt;span class="c"&gt;# Execute safely inside the expected context&lt;/span&gt;
gcpctx &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--require-context&lt;/span&gt; prod &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--&lt;/span&gt; terraform plan
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The shell prompt provides human visibility.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;assert&lt;/code&gt; provides machine-verifiable context.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;exec --require-context&lt;/code&gt; binds execution to an explicit context requirement.&lt;/p&gt;

&lt;h2&gt;
  
  
  What gcpctx does not do
&lt;/h2&gt;

&lt;p&gt;gcpctx does not make every cloud command safe.&lt;/p&gt;

&lt;p&gt;It does not replace:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;IAM least privilege&lt;/li&gt;
&lt;li&gt;separate production identities&lt;/li&gt;
&lt;li&gt;deployment approvals&lt;/li&gt;
&lt;li&gt;organization policies&lt;/li&gt;
&lt;li&gt;protected CI environments&lt;/li&gt;
&lt;li&gt;Terraform safeguards&lt;/li&gt;
&lt;li&gt;audit logging&lt;/li&gt;
&lt;li&gt;backups and recovery controls&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Its purpose is narrower:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Make the effective local Google Cloud context explicit, consistent, and testable.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Platform support
&lt;/h2&gt;

&lt;p&gt;gcpctx currently supports:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Support&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;macOS&lt;/td&gt;
&lt;td&gt;Native Bash CLI with Bash and Zsh hooks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Linux&lt;/td&gt;
&lt;td&gt;Native Bash CLI with Bash and Zsh hooks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Windows&lt;/td&gt;
&lt;td&gt;npm installation through Git Bash or WSL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PowerShell&lt;/td&gt;
&lt;td&gt;Wrapper available&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Windows CMD&lt;/td&gt;
&lt;td&gt;Not supported&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Install from npm:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; gcpctx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;GitHub:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/UriBer/gcpctx" rel="noopener noreferrer"&gt;https://github.com/UriBer/gcpctx&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;npm:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/package/gcpctx" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/gcpctx&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project is open source under Apache 2.0.&lt;/p&gt;

&lt;p&gt;I am especially interested in feedback about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;multi-account GCP workflows&lt;/li&gt;
&lt;li&gt;Terraform usage&lt;/li&gt;
&lt;li&gt;production-context protection&lt;/li&gt;
&lt;li&gt;PowerShell support&lt;/li&gt;
&lt;li&gt;AI coding-agent integration&lt;/li&gt;
&lt;li&gt;context switching across customer environments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;How do you currently ensure that &lt;code&gt;gcloud&lt;/code&gt;, ADC, Terraform, and your application SDKs are all using the intended Google Cloud project?&lt;/p&gt;

</description>
      <category>googlecloud</category>
      <category>devops</category>
      <category>opensource</category>
      <category>cli</category>
    </item>
  </channel>
</rss>
