-
Notifications
You must be signed in to change notification settings - Fork 0
Safety and Cost Safeguards
Safe by default. No configuration required to be protected.
This page covers what you get out of the box, before touching any environment variables or flags. A developer running the server for the first time with zero configuration gets all three of these guarantees.
Short answer: running the server will not trigger paid GCP API charges beyond your project's normal quota consumption.
All 69 tools read from standard GCP APIs (Cloud Run, GKE, Pub/Sub, Monitoring, etc.). These calls are equivalent to what you'd make in the Cloud Console or with gcloud — they count against your existing project quota, not a per-call billing meter.
The one exception is Cloud Recommender, which is an optional paid API used to add efficiency signals to Aura Scores. It is disabled by default:
# Cloud Recommender is off unless you explicitly enable it
RECOMMENDER_ENABLED=false # default — no action requiredTo enable it when you want the enhanced Aura Score signals:
RECOMMENDER_ENABLED=true GCP_PROJECT_ID=my-project ./aura-tracker-gcpNote: enabling Cloud Recommender also requires the roles/recommender.viewer IAM role on the service account.
Every GCP API call is throttled at the server boundary — the LLM cannot generate traffic spikes that exhaust your quota.
| Limit | Value |
|---|---|
| Sustained rate | 10 requests/second |
| Burst capacity | 20 requests |
| Per-call timeout | 30 seconds |
These limits are enforced regardless of how fast the LLM sends tool calls.
67 of 69 tools are pure reads. The only tools that can change GCP state are:
| Tool | What it changes |
|---|---|
gcp_gke_scale_deployment |
GKE node pool size |
gcp_cloudrun_update_traffic |
Cloud Run traffic split percentages |
Both require a two-step human confirmation before executing (see below).
- Secret Manager: only secret metadata (name, labels, create time) is returned. Secret values are never fetched.
- GKE Workloads: secret references in pod environment variables are masked in the response before the LLM sees them.
- No external calls: the server makes no outbound requests except to GCP service endpoints.
- No data persistence: results flow directly from GCP to your LLM. Nothing is stored outside your environment.
The two mutation tools above are protected by a mandatory two-step confirmation flow enforced at the server level. The LLM cannot bypass it.
Step 1 — Preview (no GCP call made)
──────────────────────────────────────────────────────
You ask the LLM: "Scale the api-gateway node pool to 5 nodes"
↓
LLM calls tool with dry_run=true
↓
Server generates a plan: what would change, current state vs. desired
Returns: plan_id + human-readable preview + 10-minute expiry
↓
LLM presents the preview to YOU
↓
★ YOU decide: approve or reject ★
Step 2 — Execute (only after your explicit approval)
──────────────────────────────────────────────────────
You say: "Yes, proceed"
↓
LLM calls tool with confirm_plan_id=<plan_id>
↓
Server validates: plan exists, not expired, not already used
Atomically consumes the plan (single-use — prevents replay)
Executes the mutation against GCP
Logs the confirmation with full audit context
Key safety properties of this flow:
- Plans expire after 10 minutes. A stale
plan_idis rejected. - Each
plan_idis single-use — consumed on confirmation, so it cannot be replayed. - Both the dry-run and the confirmation are logged with project, resource, and previous state.
- If current state already matches desired state, the tool returns
no_change_needed: truewithout executing anything.
SAFETY_ENABLED=false GCP_PROJECT_ID=my-project ./aura-tracker-gcpThe server logs a WARNING on startup when SAFETY_ENABLED=false. Do not use in production.
| Feature | Default | How to change |
|---|---|---|
| Cloud Recommender (paid API) | ❌ Disabled | RECOMMENDER_ENABLED=true |
| PII / credential scrubbing | ❌ Disabled | ANONYMIZE_ENABLED=true |
| Mutation confirmation gate (HITL) | ✅ Enabled |
SAFETY_ENABLED=false (dev only) |
| Secret Manager value reads | ❌ Never | Not configurable |
Run the server with a dedicated service account that has only the roles it needs — not roles/owner or roles/editor.
See Security and Safety for the complete role list and the scripts/setup-iam.sh one-liner that creates and configures the service account for you.
Quick check: ask the LLM to verify your permissions before relying on the server:
Test my IAM permissions for project my-project
This calls gcp_iam_test_permissions and returns a per-permission allowed: true/false result for every GCP API the server needs.
| Never | Why |
|---|---|
| Reads Secret Manager values | Only secret metadata (name, labels, create time) is fetched |
| Stores data externally | Results flow directly from GCP to your LLM; nothing is persisted |
Executes mutations without a confirmed plan_id
|
Enforced at the port boundary in internal/safety/decorator.go
|
| Initializes unused GCP clients | Only clients needed for enabled --modules are instantiated |
| Contacts any endpoint outside GCP APIs | No outbound calls except to GCP service endpoints |
- Enable PII scrubbing for additional data protection → Security and Safety
- Select only the modules you need to reduce LLM token overhead → Getting Started
- Configure environment variables → Configure Your Environment