gum v1.4.0
Google Ads calls can omit customerId and loginCustomerId when a profile or environment sets a default account.
Highlights
- Set a default Google Ads account once per profile with
gum config set. - Override it per shell with
GUM_GOOGLE_ADS_CUSTOMER_IDand - The
gum callwizard skips account ids that a default supplies. - A new Keyword Planner section explains why calls without
- gRPC v1.83.2 fixes an HTTP/2 memory exhaustion advisory on a call path in
GUM_GOOGLE_ADS_LOGIN_CUSTOMER_ID.
geoTargetConstants and language return worldwide figures.
gum.
Install
brew install ehmo/tap/gum
# If already installed:
brew update
brew upgrade ehmo/tap/gum
gum --versionThe standalone installer remains available:
curl -fsSL https://raw.githubusercontent.com/ehmo/gum/main/install.sh | GUM_VERSION=v1.4.0 bashUpgrade notes
None. Calls that pass customerId behave as before. To stop passing it, set a default in the profile that makes the calls:
gum config set googleads.customer_id=<customer-id>
gum config set googleads.login_customer_id=<manager-customer-id>Set loginCustomerId only when you reach the account through a manager account. To send one call without the manager default, pass "loginCustomerId":"". See the Google Ads guide.
Added
- Default account values for every Google Ads operation that declares
- Defaults accept 10 digits with optional dashes or spaces. A malformed value
- The MCP server reads the profile config on every call, so a new default
- Keyword Planner guidance with United States and English examples
customerId or loginCustomerId. A call argument wins over the environment, and the environment wins over the profile config.
fails the call with INVALID_ARGS and names the variable or config key that holds it.
applies without a restart.
(geoTargetConstants:["2840"], language:"1000").
Changed
- A call that omits
customerIdwith no default now fails with a hint that - The resolved account is part of the canonical arguments. Two accounts never
names gum config set googleads.customer_id and GUM_GOOGLE_ADS_CUSTOMER_ID.
share a cache entry, audit args hash, or confirmation binding.
Fixed
- Specification rule 7 said request-field defaults were not injected. gum has
injected them since v1.0.2. The rule now describes the shipped behavior.
Security
google.golang.org/grpcmoves from v1.83.0 to v1.83.2. It fixesgolang.org/x/cryptomoves from v0.54.0 to v0.56.0. It fixes GO-2026-6303,govulnchecknow reports 0 vulnerabilities that gum's code calls. One
GO-2026-6348, an HTTP/2 memory exhaustion issue that govulncheck found on a call path in gum, and GO-2026-6441 and GO-2026-6443, which gum does not call.
GO-2026-6354, and GO-2026-6355, which gum does not call.
advisory remains in the module graph: GO-2026-5932 marks golang.org/x/crypto/openpgp unmaintained. gum imports no symbol from that package, and the advisory has no fixed version.
Known limitations
- Defaults cover Google Ads
customerIdandloginCustomerIdonly. Data - Keyword Planner does not mark a worldwide result. Check that the call passed
- macOS binaries carry the Go linker's ad-hoc signature, not a Developer ID
Manager calls still need operatingAccount, and loginAccount when access goes through a manager, in each request body.
geoTargetConstants and language before comparing figures across countries.
signature, and are not notarized. Checked on this release's darwin/arm64 artifact: codesign -v exits 0, which meets the Apple Silicon requirement that every executable carry a signature. curl sets no com.apple.quarantine attribute, so neither install.sh nor a Homebrew download reaches Gatekeeper, and a quarantined copy still runs from a shell (checked under Darwin 25.6.0). spctl --assess --type execute reports rejected, and no install path gum publishes consults that verdict. An earlier version of this note told readers to clear quarantine by hand. That advice was wrong.
Token savings
Measured with the release fixtures using a local build stamped 1.4.0. Run from the apps/gum directory of the matching source checkout:
gum gain --fixture-replay --format=toon
gum gain --fixture-replay --format=json| Default format | Total calls | Total tokens in | Total tokens saved | Aggregate savings |
|---|---|---|---|---|
toon |
10 | 3,922 | 0 | 0 % |
json |
10 | 3,922 | -12 | 0.31 % overhead |
Verification
All seven jobs in the v1.4.0 release workflow passed, including tests, vulnerability checks, the independent four-platform rebuild, and provenance checks. Downloaded archive checksums and extracted binary hashes matched the published manifests. A local macOS ARM rebuild with the command below matched the published binary hash.
The Homebrew installation reports 1.4.0 and reproduces the token savings figures above. It completed a live Keyword Planner historical metrics call that set the account only through GUM_GOOGLE_ADS_CUSTOMER_ID and GUM_GOOGLE_ADS_LOGIN_CUSTOMER_ID, with no customerId argument. Homebrew's formula audit and package tests passed.
Reproducibility
git checkout v1.4.0
cd apps/gum
GOTOOLCHAIN=go1.26.7 CGO_ENABLED=0 go build -trimpath -ldflags='-s -w -X main.version=1.4.0' ./cmd/gum
sha256sum gum