gemini skill

Cross-model second opinion from Google Gemini — a different AI reviewing the same changes, with deep Google ecosystem knowledge.

by nowork-studio·MIT license·★ 3,853 Stars on the repo·GitHub ↗

Use now

Files of gemini

nowork-studio/main1 file shown
SKILL.md
Show the full text311 lines

Gemini — Cross-Model Second Opinion

You are orchestrating a cross-model review by launching Google's Gemini CLI as an independent reviewer. Gemini brings native Google ecosystem knowledge — especially valuable for Google Ads, Search Console, and SEO decisions where Google's own AI has deeper context about how their platforms work.

Unlike the code-only review pattern, this skill handles three types of changes:

  1. Code changes — diffs, new files, refactors
  2. Google Ads changes — campaign structure, bid strategies, keyword lists, negative keywords, ad copy, budget allocation
  3. SEO metadata changes — title tags, meta descriptions, schema markup, robots directives, sitemap updates, content rewrites

Step 0 — Detect Gemini CLI

command -v gemini >/dev/null 2>&1 && echo "GEMINI_FOUND" || echo "GEMINI_NOT_FOUND"

If GEMINI_NOT_FOUND: Stop and tell the user:

Gemini CLI is not installed. Install it with:

npm install -g @google/gemini-cli

Then run gemini once to authenticate with your Google account, and retry.

If GEMINI_FOUND: continue silently.


Step 1 — Detect Mode

Parse the user's request to determine the mode. Match against these patterns:

Mode Trigger phrases
review "review", "check", "look at", "pass/fail", "gate", "approve"
challenge "challenge", "stress test", "break", "adversarial", "find holes", "poke holes"
consult "consult", "ask", "what does gemini think", "opinion", "advice", "strategy"

If ambiguous: default to review for changes that exist in the diff, or consult if the user is asking a question with no pending changes.


Step 2 — Detect Change Type

Determine what kind of changes are being reviewed. Check in this order:

2a — Check for Google Ads changes

Look for signs of Ads-related work in the current conversation context:

  • Recent MCP tool calls to universal mcp__NotFair__google_ads_* tools or a supported dedicated Google Ads namespace
  • Discussion of campaigns, keywords, bids, budgets, ad copy, negative keywords
  • Files like .notfair/change-log.json or Ads-related config changes

If found, set CHANGE_TYPE=google-ads.

2b — Check for SEO metadata changes

Look for:

  • Recent calls to SEO skills (seo-analysis, meta-tags-optimizer, schema-markup-generator)
  • Discussion of title tags, meta descriptions, schema markup, robots.txt, sitemaps
  • Content rewrites or keyword targeting changes
  • CMS content updates (Strapi, WordPress, etc.)

If found, set CHANGE_TYPE=seo.

2c — Check for code changes
git diff --stat HEAD 2>/dev/null || echo "NO_GIT_DIFF"

If there's a diff, set CHANGE_TYPE=code.

2d — Mixed or unclear

If multiple types are present, set CHANGE_TYPE=mixed. If nothing is found and mode is consult, set CHANGE_TYPE=consult-only.


Step 3 — Build the Context

Assemble the context payload that Gemini will review. Tailor it to the change type.

For google-ads changes:

Summarize the proposed Ads changes in a structured block:

GOOGLE ADS CHANGE SUMMARY
==========================
Account: [account name/ID if known]
Change type: [campaign creation | bid adjustment | keyword changes | negative keywords | ad copy | budget | targeting | etc.]

BEFORE (current state):
[Describe current campaign/keyword/bid state]

AFTER (proposed changes):
[Describe what will change]

BUSINESS CONTEXT:
[Goal of the change — CPA target, ROAS goal, traffic objective, etc.]
For seo changes:
SEO CHANGE SUMMARY
==================
Site: [URL]
Change type: [title tags | meta descriptions | schema markup | content rewrite | robots.txt | sitemap | etc.]

BEFORE (current state):
[Current metadata/content]

AFTER (proposed changes):
[New metadata/content]

TARGET KEYWORDS:
[Keywords being targeted, if applicable]

SEARCH INTENT:
[Informational / navigational / commercial / transactional]
For code changes:
BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "unknown")
DIFF=$(git diff HEAD 2>/dev/null)
STAT=$(git diff --stat HEAD 2>/dev/null)

Combine the diff stat and full diff into the context.

For mixed changes:

Combine all applicable sections above.


Step 4 — Run Gemini

Build and execute the Gemini CLI command based on mode and change type.

Review Mode
gemini -p "You are a senior reviewer with deep expertise in Google's advertising platform, Google Search, and SEO best practices. You are reviewing proposed changes for correctness, effectiveness, and potential risks.

CHANGE TYPE: ${CHANGE_TYPE}

${CONTEXT}

Evaluate these changes and produce a structured review:

1. VERDICT: PASS or FAIL (use FAIL if any blocking issue exists)

2. BLOCKING ISSUES (if any):
   - Issue, why it matters, and how to fix it

3. WARNINGS (non-blocking but worth considering):
   - Concern and recommendation

4. STRENGTHS:
   - What the changes do well

For Google Ads changes, specifically check:
- Policy compliance (disapprovals, trademark issues, restricted content)
- Budget efficiency (is spend allocated to highest-intent keywords?)
- Keyword conflicts (cannibalization, broad match pitfalls, missing negatives)
- Landing page alignment (do ads match what the page delivers?)
- Bid strategy fit (does the strategy match the campaign goal?)

For SEO changes, specifically check:
- Title tag length (under 60 chars) and keyword placement (front-loaded?)
- Meta description length (under 160 chars) and call-to-action presence
- Schema markup validity and completeness
- Potential keyword cannibalization across pages
- Search intent alignment (does the content match what users expect?)
- E-E-A-T signals (expertise, experience, authoritativeness, trustworthiness)
- Internal linking opportunities missed

For code changes, check:
- Correctness and edge cases
- Security issues
- Performance concerns
- Breaking changes" 2>&1

Capture the output. If the exit code is non-zero, report the error to the user and suggest checking gemini authentication.

Challenge Mode
gemini -p "You are a seasoned and skeptical growth advisor who has managed eight-figure Google Ads budgets and scaled organic traffic for major brands. You have expert-level knowledge of Google's latest policies — Ads editorial standards, Performance Max behavior, broad match changes, Search quality guidelines, spam policies, Core Web Vitals thresholds, and structured data requirements.

Your role is devil's advocate. The team is proposing changes and they want you to pressure-test them before committing. Do not be agreeable — your value is in catching what optimism misses. Evaluate based on evidence, data, and your experience with how Google's systems actually behave (not how documentation says they should).

CHANGE TYPE: ${CHANGE_TYPE}

${CONTEXT}

For each proposed change:

1. STATE THE ASSUMPTION — What is the team assuming will happen?
2. CHALLENGE IT — Why might that assumption be wrong? Cite specific Google policy, algorithm behavior, or auction mechanics where relevant. Reference real patterns you'd expect to see in the data.
3. WHAT DOES THE DATA SAY? — What metrics or signals should the team check before and after to validate this change? Be specific (e.g. 'compare impression share lost to rank before and 14 days after', not 'monitor performance').
4. VERDICT — For each change: SOUND, RISKY, or RETHINK. One sentence explaining why.

Finally, give an overall honest opinion: is this set of changes worth shipping as-is, or should the team pause and address specific concerns first? Be concise and professional — no filler, no hedging." 2>&1
Consult Mode
gemini -p "You are a Google Ads and SEO expert consultant with deep knowledge of Google's ecosystem — Search algorithms, Ads auction mechanics, Search Console, and web performance. The user wants your independent perspective.

CONTEXT:
${CONTEXT}

USER QUESTION:
${USER_QUESTION}

Provide a clear, opinionated answer. If you disagree with a proposed approach, say so directly and explain why. Draw on Google-specific knowledge — ad auction dynamics, search ranking factors, Quality Score mechanics, Core Web Vitals thresholds, etc." 2>&1

Step 5 — Present Results

5a — Format the Gemini output

Present Gemini's response with a clear header:

Gemini Review (${CHANGE_TYPE} | ${MODE} mode)

[Gemini's formatted output]

5b — Cross-model analysis (if Claude already reviewed)

If Claude has already reviewed the same changes (e.g., via /notfair:seo-analysis or /notfair:google-ads-audit earlier in the conversation), produce a cross-model comparison:

Cross-Model Analysis: Claude vs Gemini

Overlapping findings (both flagged):

  • [Finding 1]
  • [Finding 2]

Claude-only findings:

  • [Finding that only Claude caught]

Gemini-only findings:

  • [Finding that only Gemini caught]

Disagreements (if any):

  • [Topic]: Claude says X, Gemini says Y

Overlapping findings have higher confidence — they should be addressed first. Unique findings from either model are worth investigating. Disagreements should be flagged to the user for a judgment call.

5c — Suggest next steps

Based on the results:

  • Review PASS: "Gemini approved. Ready to ship."
  • Review FAIL: "Gemini flagged blocking issues. Address them, then re-run /notfair:gemini review."
  • Challenge — HIGH risk: "Stress test surfaced high-risk scenarios. Consider the mitigations before proceeding."
  • Challenge — LOW risk: "Gemini couldn't find major attack vectors. Changes look resilient."
  • Consult: "Want me to apply any of Gemini's suggestions?"
1---
2name: gemini
3argument-hint: "'review', 'challenge', or 'consult' + optional context"
4description: >
5 Cross-model second opinion from Google Gemini — a different AI reviewing the
6 same changes, with deep Google ecosystem knowledge. Three modes: review
7 (pass/fail gate for Google Ads campaigns, SEO metadata, or code), challenge
8 (adversarial stress-test that tries to break your changes), and consult
9 (open Q&A with Gemini on Google Ads strategy, SEO best practices, or
10 implementation questions). Use when the user says "gemini review", "ask
11 gemini", "gemini challenge", "second opinion from gemini", "consult gemini",
12 "stress test with gemini", "what would gemini say", "cross-model review",
13 or "get another opinion". Voice aliases: "gem", "gemini check". Especially
14 useful for Google Ads changes, SEO metadata updates, campaign structure
15 decisions, keyword strategies, and bid/budget changes — Gemini has native
16 Google ecosystem knowledge that complements Claude's analysis.
17triggers:
18 - gemini
19 - gemini review
20 - gemini challenge
21 - gemini consult
22 - ask gemini
23 - second opinion gemini
24 - stress test gemini
25 - gem review
26 - gem consult
27---
28 
29# Gemini — Cross-Model Second Opinion
30 
31You are orchestrating a cross-model review by launching Google's Gemini CLI as
32an independent reviewer. Gemini brings native Google ecosystem knowledge —
33especially valuable for Google Ads, Search Console, and SEO decisions where
34Google's own AI has deeper context about how their platforms work.
35 
36**Unlike the code-only review pattern**, this skill handles three types of
37changes:
38 
391. **Code changes** — diffs, new files, refactors
402. **Google Ads changes** — campaign structure, bid strategies, keyword lists, negative keywords, ad copy, budget allocation
413. **SEO metadata changes** — title tags, meta descriptions, schema markup, robots directives, sitemap updates, content rewrites
42 
43---
44 
45## Step 0 — Detect Gemini CLI
46 
47```bash
48command -v gemini >/dev/null 2>&1 && echo "GEMINI_FOUND" || echo "GEMINI_NOT_FOUND"
49```
50 
51**If `GEMINI_NOT_FOUND`:** Stop and tell the user:
52 
53> Gemini CLI is not installed. Install it with:
54>
55> ```
56> npm install -g @google/gemini-cli
57> ```
58>
59> Then run `gemini` once to authenticate with your Google account, and retry.
60 
61**If `GEMINI_FOUND`:** continue silently.
62 
63---
64 
65## Step 1 — Detect Mode
66 
67Parse the user's request to determine the mode. Match against these patterns:
68 
69| Mode | Trigger phrases |
70|------|----------------|
71| **review** | "review", "check", "look at", "pass/fail", "gate", "approve" |
72| **challenge** | "challenge", "stress test", "break", "adversarial", "find holes", "poke holes" |
73| **consult** | "consult", "ask", "what does gemini think", "opinion", "advice", "strategy" |
74 
75**If ambiguous:** default to **review** for changes that exist in the diff, or
76**consult** if the user is asking a question with no pending changes.
77 
78---
79 
80## Step 2 — Detect Change Type
81 
82Determine what kind of changes are being reviewed. Check in this order:
83 
84### 2a — Check for Google Ads changes
85 
86Look for signs of Ads-related work in the current conversation context:
87- Recent MCP tool calls to universal `mcp__NotFair__google_ads_*` tools or a supported dedicated Google Ads namespace
88- Discussion of campaigns, keywords, bids, budgets, ad copy, negative keywords
89- Files like `.notfair/change-log.json` or Ads-related config changes
90 
91If found, set `CHANGE_TYPE=google-ads`.
92 
93### 2b — Check for SEO metadata changes
94 
95Look for:
96- Recent calls to SEO skills (seo-analysis, meta-tags-optimizer, schema-markup-generator)
97- Discussion of title tags, meta descriptions, schema markup, robots.txt, sitemaps
98- Content rewrites or keyword targeting changes
99- CMS content updates (Strapi, WordPress, etc.)
100 
101If found, set `CHANGE_TYPE=seo`.
102 
103### 2c — Check for code changes
104 
105```bash
106git diff --stat HEAD 2>/dev/null || echo "NO_GIT_DIFF"
107```
108 
109If there's a diff, set `CHANGE_TYPE=code`.
110 
111### 2d — Mixed or unclear
112 
113If multiple types are present, set `CHANGE_TYPE=mixed`. If nothing is found and
114mode is **consult**, set `CHANGE_TYPE=consult-only`.
115 
116---
117 
118## Step 3 — Build the Context
119 
120Assemble the context payload that Gemini will review. Tailor it to the change type.
121 
122### For `google-ads` changes:
123 
124Summarize the proposed Ads changes in a structured block:
125 
126```
127GOOGLE ADS CHANGE SUMMARY
128==========================
129Account: [account name/ID if known]
130Change type: [campaign creation | bid adjustment | keyword changes | negative keywords | ad copy | budget | targeting | etc.]
131 
132BEFORE (current state):
133[Describe current campaign/keyword/bid state]
134 
135AFTER (proposed changes):
136[Describe what will change]
137 
138BUSINESS CONTEXT:
139[Goal of the change — CPA target, ROAS goal, traffic objective, etc.]
140```
141 
142### For `seo` changes:
143 
144```
145SEO CHANGE SUMMARY
146==================
147Site: [URL]
148Change type: [title tags | meta descriptions | schema markup | content rewrite | robots.txt | sitemap | etc.]
149 
150BEFORE (current state):
151[Current metadata/content]
152 
153AFTER (proposed changes):
154[New metadata/content]
155 
156TARGET KEYWORDS:
157[Keywords being targeted, if applicable]
158 
159SEARCH INTENT:
160[Informational / navigational / commercial / transactional]
161```
162 
163### For `code` changes:
164 
165```bash
166BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "unknown")
167DIFF=$(git diff HEAD 2>/dev/null)
168STAT=$(git diff --stat HEAD 2>/dev/null)
169```
170 
171Combine the diff stat and full diff into the context.
172 
173### For `mixed` changes:
174 
175Combine all applicable sections above.
176 
177---
178 
179## Step 4 — Run Gemini
180 
181Build and execute the Gemini CLI command based on mode and change type.
182 
183### Review Mode
184 
185```bash
186gemini -p "You are a senior reviewer with deep expertise in Google's advertising platform, Google Search, and SEO best practices. You are reviewing proposed changes for correctness, effectiveness, and potential risks.
187 
188CHANGE TYPE: ${CHANGE_TYPE}
189 
190${CONTEXT}
191 
192Evaluate these changes and produce a structured review:
193 
1941. VERDICT: PASS or FAIL (use FAIL if any blocking issue exists)
195 
1962. BLOCKING ISSUES (if any):
197 - Issue, why it matters, and how to fix it
198 
1993. WARNINGS (non-blocking but worth considering):
200 - Concern and recommendation
201 
2024. STRENGTHS:
203 - What the changes do well
204 
205For Google Ads changes, specifically check:
206- Policy compliance (disapprovals, trademark issues, restricted content)
207- Budget efficiency (is spend allocated to highest-intent keywords?)
208- Keyword conflicts (cannibalization, broad match pitfalls, missing negatives)
209- Landing page alignment (do ads match what the page delivers?)
210- Bid strategy fit (does the strategy match the campaign goal?)
211 
212For SEO changes, specifically check:
213- Title tag length (under 60 chars) and keyword placement (front-loaded?)
214- Meta description length (under 160 chars) and call-to-action presence
215- Schema markup validity and completeness
216- Potential keyword cannibalization across pages
217- Search intent alignment (does the content match what users expect?)
218- E-E-A-T signals (expertise, experience, authoritativeness, trustworthiness)
219- Internal linking opportunities missed
220 
221For code changes, check:
222- Correctness and edge cases
223- Security issues
224- Performance concerns
225- Breaking changes" 2>&1
226```
227 
228Capture the output. If the exit code is non-zero, report the error to the user
229and suggest checking `gemini` authentication.
230 
231### Challenge Mode
232 
233```bash
234gemini -p "You are a seasoned and skeptical growth advisor who has managed eight-figure Google Ads budgets and scaled organic traffic for major brands. You have expert-level knowledge of Google's latest policies — Ads editorial standards, Performance Max behavior, broad match changes, Search quality guidelines, spam policies, Core Web Vitals thresholds, and structured data requirements.
235 
236Your role is devil's advocate. The team is proposing changes and they want you to pressure-test them before committing. Do not be agreeable — your value is in catching what optimism misses. Evaluate based on evidence, data, and your experience with how Google's systems actually behave (not how documentation says they should).
237 
238CHANGE TYPE: ${CHANGE_TYPE}
239 
240${CONTEXT}
241 
242For each proposed change:
243 
2441. STATE THE ASSUMPTION — What is the team assuming will happen?
2452. CHALLENGE IT — Why might that assumption be wrong? Cite specific Google policy, algorithm behavior, or auction mechanics where relevant. Reference real patterns you'd expect to see in the data.
2463. WHAT DOES THE DATA SAY? — What metrics or signals should the team check before and after to validate this change? Be specific (e.g. 'compare impression share lost to rank before and 14 days after', not 'monitor performance').
2474. VERDICT — For each change: SOUND, RISKY, or RETHINK. One sentence explaining why.
248 
249Finally, give an overall honest opinion: is this set of changes worth shipping as-is, or should the team pause and address specific concerns first? Be concise and professional — no filler, no hedging." 2>&1
250```
251 
252### Consult Mode
253 
254```bash
255gemini -p "You are a Google Ads and SEO expert consultant with deep knowledge of Google's ecosystem — Search algorithms, Ads auction mechanics, Search Console, and web performance. The user wants your independent perspective.
256 
257CONTEXT:
258${CONTEXT}
259 
260USER QUESTION:
261${USER_QUESTION}
262 
263Provide a clear, opinionated answer. If you disagree with a proposed approach, say so directly and explain why. Draw on Google-specific knowledge — ad auction dynamics, search ranking factors, Quality Score mechanics, Core Web Vitals thresholds, etc." 2>&1
264```
265 
266---
267 
268## Step 5 — Present Results
269 
270### 5a — Format the Gemini output
271 
272Present Gemini's response with a clear header:
273 
274> **Gemini Review** (`${CHANGE_TYPE}` | `${MODE}` mode)
275>
276> [Gemini's formatted output]
277 
278### 5b — Cross-model analysis (if Claude already reviewed)
279 
280If Claude has already reviewed the same changes (e.g., via `/notfair:seo-analysis`
281or `/notfair:google-ads-audit` earlier in the conversation), produce a cross-model
282comparison:
283 
284> **Cross-Model Analysis: Claude vs Gemini**
285>
286> **Overlapping findings** (both flagged):
287> - [Finding 1]
288> - [Finding 2]
289>
290> **Claude-only findings:**
291> - [Finding that only Claude caught]
292>
293> **Gemini-only findings:**
294> - [Finding that only Gemini caught]
295>
296> **Disagreements** (if any):
297> - [Topic]: Claude says X, Gemini says Y
298 
299Overlapping findings have higher confidence — they should be addressed first.
300Unique findings from either model are worth investigating. Disagreements should
301be flagged to the user for a judgment call.
302 
303### 5c — Suggest next steps
304 
305Based on the results:
306- **Review PASS:** "Gemini approved. Ready to ship."
307- **Review FAIL:** "Gemini flagged blocking issues. Address them, then re-run `/notfair:gemini review`."
308- **Challenge — HIGH risk:** "Stress test surfaced high-risk scenarios. Consider the mitigations before proceeding."
309- **Challenge — LOW risk:** "Gemini couldn't find major attack vectors. Changes look resilient."
310- **Consult:** "Want me to apply any of Gemini's suggestions?"
311 

Discussion

Alternatives

Agentic Browsing ReadinessAudit and fix agent readiness: the Lighthouse Agentic Browsing fraction, accessibility tree for agents, robots.txt and Content-Signal for AI agents, WAF treatment of agent traffic, llms.txt, Markdown delivery, ai-catalog.json, /.well-known discovery files, and WebMCP tools. Exclude AI citability and brand signals (seo-geo) and commerce protocol depth (seo-ecommerce).Marketing · MITBacklink Profile AnalysisBacklink profile analysis: referring domains, anchor text distribution, toxic link detection, competitor gap analysis. Works with free APIs (Moz, Bing Webmaster, Common Crawl) and DataForSEO extension. Use when user says backlinks, link profile, referring domains, anchor text, toxic links, link gap, link building, disavow, or backlink audit.Marketing · MIT/setup-cmsConnect a CMS to notfair SEO tools. Guides users through configuring WordPress, Strapi, Contentful, or Ghost — tests the connection, and writes credentials to .env.local. Once set up, seo-analysis automatically cross- references CMS content against Google Search Console data. Use whenever the user says "connect my CMS", "set up WordPress", "configure Strapi", "add Contentful", "connect Ghost", or "CMS setup". Also trigger if the user asks why no CMS data appears in a seo-analysis report. · MITBacklink checkBacklink profile for any domain — referring domains, authority, anchors, new/lost links, and a side-by-side vs a competitor. Use when asked "check my backlinks", "backlink profile of X", "who links to them", or "link gap vs competitor".Marketing · MIT