Skip to content

Commit 2cc04c4

Browse files
committed
release v1.2.0 at 2026-07-23 16:00:10 UTC
1 parent 6d7e6c1 commit 2cc04c4

67 files changed

Lines changed: 2510 additions & 2824 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.claude-plugin/plugin.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "google-agents-cli",
3-
"version": "1.1.0",
3+
"version": "1.2.0",
44
"description": "Scaffold, develop, evaluate, and deploy AI agents with Google ADK. Bundles 7 skills for the agent development lifecycle.",
55
"author": { "name": "Google LLC" },
66
"homepage": "https://github.com/google/agents-cli",

README.md

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
<a href="https://github.com/google/agents-cli/issues">Issues</a> &nbsp;&nbsp;|&nbsp;&nbsp;
1212
<a href="https://google.github.io/agents-cli/">Docs</a> &nbsp;&nbsp;|&nbsp;&nbsp;
1313
<a href="https://github.com/google/agents-cli/blob/main/RELEASE_NOTES.md">Release Notes</a> &nbsp;&nbsp;|&nbsp;&nbsp;
14-
<a href="https://github.com/google/agents-cli/stargazers">Star us</a>
14+
<a href="https://github.com/google/agents-cli">Star us</a>
1515
</p>
1616
</div>
1717

@@ -171,12 +171,3 @@ See the [contributing guide](CONTRIBUTING.md) for details.
171171
## Terms of Service
172172

173173
`agents-cli` leverages Google Cloud APIs. When you deploy agents, you'll be deploying resources in your own Google Cloud project and will be responsible for those resources. Please review the [Google Cloud Service Terms](https://cloud.google.com/terms/service-terms) for details.
174-
175-
## Preview
176-
177-
This feature is subject to the "Pre-GA Offerings Terms" in the General Service
178-
Terms section of the
179-
[Service Specific Terms](https://cloud.google.com/terms/service-terms#1).
180-
Pre-GA features are available "as is" and might have limited support. For more
181-
information, see the
182-
[launch stage descriptions](https://cloud.google.com/products?hl=en#product-launch-stages).

RELEASE_NOTES.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,13 @@
22

33
All notable changes to this project will be documented in this file.
44

5+
## [1.2.0] - 2026-07-21
6+
7+
- **Cloud telemetry moved to ADK's `otel_to_cloud`, across the CLI and deploys.** `playground` and `run` gain an `--otel-to-cloud` flag that forwards ADK's current `--otel_to_cloud`; the old `--trace-to-cloud` stays as a hidden, still-functional alias that warns when used. On the deployment side, Agent Runtime now exports through `otel_to_cloud` (gated on `GOOGLE_CLOUD_AGENT_ENGINE_ENABLE_TELEMETRY`) and generated projects configure Cloud telemetry declaratively in Terraform instead of at runtime. Bundled `google-adk` moves to `>=2.2.0` with the `otel-gcp` extra, and the observability skill was updated to match.
8+
- Scaffolds now default to `gemini-3.6-flash`.
9+
- **Agent Analytics now captures GenAI completions on Agent Runtime.** The BigQuery telemetry log sink is configured per deployment target, so Agent Runtime deployments route their GenAI request/response logs into BigQuery instead of leaving the completions view empty.
10+
- **Managed Agents guidance in the ADK code skill.** The bundled ADK cheatsheet gained a Managed Agents section covering when to use `ManagedAgent`, Gemini API vs Agent Platform (GEAP) setup, and a runnable create-and-use example.
11+
512
## [1.1.0] - 2026-07-10
613

714
- **Guided brainstorming for new agents.** The workflow skill's Phase 0 is now an interactive brainstorming dialogue that helps you shape an agent's spec before any code is written, and surfaces its assumptions for review when it can't ask.

docs/src/guide/evaluation.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,13 +86,13 @@ custom_metrics:
8686
Final response: {response}
8787
Full trace (for tool-call and reasoning context): {agent_data}
8888
Return JSON: {"score": <1|2|3|4|5>, "explanation": "<reason>"}
89-
judge_model: gemini-flash-latest
89+
judge_model: gemini-3.6-flash
9090
judge_model_sampling_count: 3
9191
```
9292
9393
Each custom metric must conform to either the **Code Execution Metric** or **LLM-as-a-Judge Metric** (`LLMMetric`) schema:
9494
- **Code Execution Metric**: Used to run custom Python code for evaluation. Must have a `name` and a `custom_function` (containing a `def evaluate(instance):` signature). By default, the function executes **locally in the CLI process** — no GCP project or region is required, but the user-supplied code runs with the CLI's privileges. Add `"execution": "remote"` to opt into Vertex AI's sandboxed `CodeExecutionMetric` (server-side), which requires a configured GCP project + region.
95-
- **LLM-as-a-Judge Metric**: Used to evaluate responses using an LLM judge. Must have a `name` and a `prompt_template`. Optional fields include `rubric_group_name`, `judge_model` (e.g., `gemini-flash-latest`), and `judge_model_sampling_count` (between `1` and `32`).
95+
- **LLM-as-a-Judge Metric**: Used to evaluate responses using an LLM judge. Must have a `name` and a `prompt_template`. Optional fields include `rubric_group_name`, `judge_model` (e.g., `gemini-3.6-flash`), and `judge_model_sampling_count` (between `1` and `32`).
9696

9797
### Quick Reference for Common Scenarios
9898

docs/src/guide/hands-on-tutorial.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ The important file is `app/agent.py`. Open it and you'll see two tool functions
6262
```python title="app/agent.py"
6363
root_agent = Agent(
6464
name="root_agent",
65-
model=Gemini(model="gemini-flash-latest"),
65+
model=Gemini(model="gemini-3.6-flash"),
6666
instruction="You are a helpful AI assistant designed to provide accurate and useful information.",
6767
tools=[get_weather, get_current_time],
6868
)
@@ -111,7 +111,7 @@ Let's give the agent a personality. Open `app/agent.py` and change the instructi
111111
root_agent = Agent(
112112
name="root_agent",
113113
model=Gemini(
114-
model="gemini-flash-latest",
114+
model="gemini-3.6-flash",
115115
retry_options=types.HttpRetryOptions(attempts=3),
116116
),
117117
instruction="""You are a cheerful weather reporter who speaks in short,

docs/src/guide/lifecycle.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ from google.adk.models import Gemini
9595

9696
root_agent = Agent(
9797
name="root_agent",
98-
model=Gemini(model="gemini-flash-latest"),
98+
model=Gemini(model="gemini-3.6-flash"),
9999
instruction="You are an SRE outage-recovery assistant...",
100100
tools=[query_logs, check_metrics, search_runbook],
101101
)

docs/src/guide/observability/cloud-trace.md

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ Open the Google Cloud Console and navigate to **Trace > Trace explorer**. You sh
2727

2828
### 3. Verify Prompt-Response Logging (Optional)
2929

30-
Prompt-response logging captures model interactions to GCS and BigQuery. It's enabled by default in deployed environments.
30+
Prompt-response logging to GCS and BigQuery is provisioned by Terraform (`agents-cli infra single-project` or `agents-cli infra cicd`), which creates the logs bucket and dataset and sets `LOGS_BUCKET_NAME` — it's enabled automatically there. A bare `agents-cli deploy` does **not** create these resources, so the checks below apply only to Terraform-provisioned deployments.
3131

3232
```bash
3333
PROJECT_ID="your-dev-project-id"
@@ -51,11 +51,17 @@ If data isn't appearing:
5151

5252
## Enable Prompt-Response Logging Locally
5353

54-
By default, `agents-cli playground` runs **without** prompt-response logging. To enable it locally (ADK agents only):
54+
By default, `agents-cli playground` runs **without** prompt-response logging. Telemetry is
55+
declarative (there's no runtime `setup_telemetry()`), so to enable completions logging locally set
56+
the same vars Terraform sets for deployed agents (ADK agents only):
5557

5658
```bash
57-
export LOGS_BUCKET_NAME="gs://your-dev-project-id-your-project-name-logs"
58-
export OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT="NO_CONTENT"
59+
export LOGS_BUCKET_NAME="your-dev-project-id-your-project-name-logs" # bare bucket name, no gs://
60+
export OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT="NO_CONTENT" # or EVENT_ONLY for full content in logs
61+
export OTEL_INSTRUMENTATION_GENAI_COMPLETION_HOOK="upload"
62+
export OTEL_INSTRUMENTATION_GENAI_UPLOAD_BASE_PATH="gs://your-dev-project-id-your-project-name-logs/completions"
63+
export OTEL_INSTRUMENTATION_GENAI_UPLOAD_FORMAT="jsonl"
64+
export OTEL_SEMCONV_STABILITY_OPT_IN="gen_ai_latest_experimental"
5965
agents-cli playground
6066
```
6167

@@ -85,7 +91,11 @@ terraform apply -var-file=vars/env.tfvars
8591

8692
| Variable | Values | Purpose |
8793
|---|---|---|
88-
| `LOGS_BUCKET_NAME` | GCS bucket path | Required for prompt-response logging. If not set, logging is disabled. |
89-
| `OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT` | `false`, `NO_CONTENT`, `true` | `false` = disabled, `NO_CONTENT` = metadata only (default), `true` = full content |
90-
| `GENAI_TELEMETRY_PATH` | Path within bucket | Override upload path for prompt-response logs |
94+
| `LOGS_BUCKET_NAME` | GCS bucket **name** (no `gs://`) | Required for prompt-response logging. If not set, logging is disabled. |
95+
| `OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT` | `NO_CONTENT`, `EVENT_ONLY`, `SPAN_ONLY`, `SPAN_AND_EVENT` | Controls content in **traces/events only** (not the GCS/BigQuery completions, which always capture full content when a bucket is set). Experimental semconv (we set `OTEL_SEMCONV_STABILITY_OPT_IN`): `NO_CONTENT` = none in spans/events (default); `EVENT_ONLY` = content in Cloud Logging events; `SPAN_*` = content in trace spans. **`true`/`false` are invalid** — rejected, fall back to `NO_CONTENT`. |
96+
| `OTEL_INSTRUMENTATION_GENAI_COMPLETION_HOOK` | `upload` | Enables uploading completion records |
97+
| `OTEL_INSTRUMENTATION_GENAI_UPLOAD_BASE_PATH` | `gs://<bucket>/completions` | Destination for completion records |
98+
| `OTEL_INSTRUMENTATION_GENAI_UPLOAD_FORMAT` | `jsonl` | Upload format |
99+
| `OTEL_SEMCONV_STABILITY_OPT_IN` | `gen_ai_latest_experimental` | Required for the GenAI completion/upload semconv |
100+
| `ADK_CAPTURE_MESSAGE_CONTENT_IN_SPANS` | `false`, `true` | Keep prompt/response content out of trace spans (`false`, the default we set) |
91101

docs/src/guide/observability/index.md

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,17 @@ Every `agents-cli` project ships with OpenTelemetry instrumentation that automat
77
- **Error visibility** — traces capture errors, helping pinpoint where failures occur.
88
- **No configuration required** — works out-of-the-box in all environments.
99

10-
For ADK-based agents, **prompt-response logging** is also available. It captures model interactions (prompts, responses, tokens) and exports them to GCS, BigQuery, and Cloud Logging. Disabled locally by default, enabled automatically in deployed environments.
10+
For ADK-based agents, **prompt-response logging** captures full model interactions (prompts, responses, tokens) and uploads them to **GCS** (JSONL) + a **BigQuery** `completions` table. It's enabled whenever a logs bucket is configured (`LOGS_BUCKET_NAME` + the `OTEL_INSTRUMENTATION_GENAI_*` upload vars), which Terraform-provisioned deployments do by default.
11+
12+
> **Two independent tiers.** Prompt-response logging (GCS/BigQuery completions) captures **full content**. Whether content *also* appears in **Cloud Trace spans / Cloud Logging events** is governed separately by `OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT` (default `NO_CONTENT` — content kept **out** of traces/events) and `ADK_CAPTURE_MESSAGE_CONTENT_IN_SPANS=false`. So by default: **full content in GCS/BigQuery, no content in traces.**
1113
1214
### Logging Behavior by Environment
1315

14-
| Environment | Tracing (Cloud Trace) | Prompt-Response Logging |
16+
| Environment | Cloud Trace spans | Prompt-Response Logging (GCS/BigQuery) |
1517
|---|---|---|
16-
| **Local** (`agents-cli playground`) | Enabled | Disabled (no `LOGS_BUCKET_NAME`) |
17-
| **Deployed** (Terraform) | Enabled | Enabled (`NO_CONTENT` mode — metadata only) |
18+
| **Local** (`agents-cli playground`) | Enabled, no content | Off (no `LOGS_BUCKET_NAME`) |
19+
| **Deployed** (Terraform-provisioned) | Enabled, no content | **On — full prompts/responses** |
20+
| **Deployed** (bare `agents-cli deploy`, no bucket) | Enabled, no content | Off (no `LOGS_BUCKET_NAME`) |
1821

1922
---
2023

docs/src/guide/project-structure.md

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@ my-agent/
1313
├── app/ # Your agent code
1414
│ ├── __init__.py # Registers the app (exports `app`)
1515
│ ├── agent.py # Agent definition — instructions, model, tools
16-
── app_utils/ # Utilities (telemetry, converters)
17-
├── __init__.py
18-
│ ├── telemetry.py # OpenTelemetry setup for Cloud Trace
19-
│ ├── typing.py # Request/response Pydantic models
20-
│ └── gcs.py # GCS utility functions
16+
── fast_api_app.py # FastAPI server — telemetry setup, feedback/A2A routes
17+
└── app_utils/ # Utilities
18+
│ ├── services.py # Shared session & artifact services
19+
│ ├── a2a.py # A2A route wiring
20+
│ └── typing.py # Request/response Pydantic models
2121
2222
├── tests/
2323
│ ├── eval/ # Evaluation test cases
@@ -51,6 +51,8 @@ from google.adk.apps import App
5151
from google.adk.models import Gemini
5252
from google.genai import types
5353

54+
MODEL = "gemini-3.6-flash"
55+
5456

5557
def get_weather(query: str) -> str:
5658
"""Simulates a web search. Use it get information on weather."""
@@ -68,7 +70,7 @@ def get_current_time(query: str) -> str:
6870
root_agent = Agent(
6971
name="root_agent",
7072
model=Gemini(
71-
model="gemini-flash-latest",
73+
model=MODEL,
7274
retry_options=types.HttpRetryOptions(attempts=3),
7375
),
7476
instruction="You are a helpful AI assistant.",
@@ -86,7 +88,7 @@ The four key parts:
8688
1. **Tool functions** — plain Python functions with docstrings. The docstring tells the LLM when to use the tool.
8789
2. **`Agent`** — combines a model, instruction (system prompt), and tools.
8890
3. **`App`** — wraps the agent for serving. The `name` must match the directory name (`app`).
89-
4. **Model** — defaults to `gemini-flash-latest`. Change it in the `Gemini()` constructor.
91+
4. **Model** — defaults to `gemini-3.6-flash`. Change it via the `MODEL` constant at the top of `agent.py`.
9092

9193
### `pyproject.toml`
9294

docs/src/guide/quickstart-tutorial.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ The agent definition ends up looking something like:
5454
```python title="app/agent.py"
5555
root_agent = Agent(
5656
name="caveman_agent",
57-
model=Gemini(model="gemini-flash-latest"),
57+
model=Gemini(model="gemini-3.6-flash"),
5858
instruction="""You caveman compressor. Human give long words,
5959
you make short. Rules:
6060
- No articles. No filler. No fluff.

0 commit comments

Comments
 (0)