This scheduled run of /google-ads-daily-negatives could not execute the audit. No mutations were made. Budgets and bids untouched.

What blocked it

1. Shell sandbox is out of disk space

Every Bash invocation in this Cowork session fails immediately with:

ENOSPC: no space left on device, mkdir '/sessions/inspiring-serene-ritchie/tmp/claude-1255'

The shell wrapper tries to create a per-invocation scratch directory under /sessions/.../tmp/ and cannot, because the mount is full. This kills every backend that depends on local execution:

2. No Google Ads MCP is registered in this session

I searched the MCP registry for google ads, adspirer, adspire, ads api and the registry returned zero matches. The Pipedream Google Ads connector is not connected. The Adspirer MCP is not exposed as a deferred tool. The only Google-Ads-related surface available right now is the skill adspire:ad-campaign-management, which is reference material, not an API client.

3. Known secondary risk (carried in auto-memory)

Even if the shell were healthy, the OAuth refresh token for Backend 1 has been cycling on a ~weekly expiry because the Google Cloud OAuth consent screen is still in Testing. The permanent fix is to promote that consent screen to In production. Today's run did not get far enough to test the token.

Backend matrix

Backend Status Reason
1 — Direct Google Ads API (google-ads-python) Blocked No shell; cannot run Python
2 — Local google-ads-mcp FastMCP Blocked No shell; cannot run pipx
3 — Pipedream MCP Blocked Not connected in this session
4 — Adspirer MCP Blocked Not exposed as a tool in this session

What was NOT done

All three passes were skipped because no backend was reachable.