google-deep-research — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited google-deep-research (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
This skill provides access to Google's Deep Research API, which runs comprehensive research queries server-side for 5-20 minutes, searching multiple web sources and synthesizing findings into detailed reports.
Use Google Deep Research when:
Do NOT use for:
POST https://generativelanguage.googleapis.com/v1beta/interactionsContent-Type: application/json
x-goog-api-key: <API_KEY>{
"input": "Your detailed research query here",
"agent": "deep-research-pro-preview-12-2025",
"background": true
}{
"id": "v1_ChdXXXXXXXXX...",
"status": "pending"
}Use Python to submit the query:
import requests
import json
API_KEY = "<user's API key>"
URL = "https://generativelanguage.googleapis.com/v1beta/interactions"
headers = {
"Content-Type": "application/json",
"x-goog-api-key": API_KEY
}
payload = {
"input": "Research query here - be specific and detailed",
"agent": "deep-research-pro-preview-12-2025",
"background": True
}
response = requests.post(URL, headers=headers, json=payload)
data = response.json()
interaction_id = data.get("id")
print(f"Started research: {interaction_id}")Research takes 5-20 minutes. Poll the status:
import time
def check_status(interaction_id, api_key):
url = f"https://generativelanguage.googleapis.com/v1beta/interactions/{interaction_id}"
headers = {"x-goog-api-key": api_key}
while True:
resp = requests.get(url, headers=headers)
data = resp.json()
status = data.get("status") or data.get("state")
if status == "completed":
# Get the report text
outputs = data.get("outputs", [])
if outputs:
return outputs[-1].get("text", "")
return None
elif status in ["failed", "cancelled"]:
return None
else:
print(f"Status: {status} - waiting...")
time.sleep(30)Save the report to a markdown file with metadata:
from datetime import datetime
from pathlib import Path
def save_report(name, report_text, output_dir="research_results"):
Path(output_dir).mkdir(parents=True, exist_ok=True)
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
filename = f"{name}_{timestamp}.md"
filepath = Path(output_dir) / filename
with open(filepath, "w") as f:
f.write(f"# Deep Research Report: {name}\n\n")
f.write(f"**Generated:** {datetime.now().isoformat()}\n\n")
f.write("---\n\n")
f.write(report_text)
return filepathBe specific with names, locations, and what you want:
Research solar panel installations at Norwegian shopping centers including
Citycon properties, Steen & Strøm centers, and AMFI centers. For each,
find: building name, address, installation size (kWp), installer company,
and completion year. Search ESG reports, press releases, and sustainability reports.Too vague:
Tell me about solar panels in NorwayIf you have multiple API keys, rotate through them:
API_KEYS = [
"AIzaSy...", # Key 1
"AIzaSy...", # Key 2
"AIzaSy...", # Key 3
]
for key in API_KEYS:
response = submit_query(query, key)
if response.status_code == 200:
break
elif response.status_code == 429:
continue # Try next keyMaintain a JSON log to track all research jobs:
{
"started": "2025-01-01T00:00:00",
"interactions": [
{
"name": "research_topic_name",
"id": "v1_ChdXXXX...",
"started_at": "2025-01-01T00:00:00",
"status": "completed",
"api_key_used": "...last8chars",
"output_file": "path/to/report.md",
"report_length": 25000
}
]
}| Status | Meaning | Action |
|---|---|---|
| 400 | Invalid API key | Check key format, regenerate if needed |
| 429 | Quota exceeded | Use different API key or wait 24h |
| 500 | Server error | Retry after 1 minute |
{
"error": {
"code": 400,
"message": "API key not valid",
"status": "INVALID_ARGUMENT"
}
}See ~/.claude/skills/google-deep-research/deep_research.py for a complete implementation.
Deep Research reports typically include:
Reports range from 5,000 to 40,000 characters depending on topic complexity.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.