tzurot-gemini-collab
Best practices for using Gemini MCP in Tzurot v3 development - When to consult Gemini, how to structure prompts, and cost optimization. Use when planning major changes or needing a second opinion.
- Category: discovered
- Tags: github, community
- Version: 1.0.0
- Author: walid
- Downloads: 0
- GitHub stars: 6
- Updated: 2025-11-21
Download the latest version (v1.0.0) from this page.
SKILL.md
---
name: tzurot-gemini-collab
description: Best practices for using Gemini MCP in Tzurot v3 development - When to consult Gemini, how to structure prompts, and cost optimization. Use when planning major changes or needing a second opinion.
lastUpdated: '2025-11-19'
---
# Tzurot v3 Gemini Collaboration
**Use this skill when:** Planning major refactors, debugging complex issues, getting code reviews, brainstorming solutions, or validating architectural decisions.
## Available MCP Tools
Tzurot v3 has Gemini 3 Pro available via MCP with these tools:
1. **`mcp__gemini-collab__ask_gemini`** - Ask general questions
2. **`mcp__gemini-collab__gemini_brainstorm`** - Brainstorm ideas/solutions
3. **`mcp__gemini-collab__gemini_code_review`** - Code review feedback
4. **`mcp__gemini-collab__gemini_test_cases`** - Test case suggestions
5. **`mcp__gemini-collab__gemini_explain`** - Explain complex code/concepts
6. **`mcp__gemini-collab__synthesize_perspectives`** - Combine multiple viewpoints
## When to Consult Gemini
### ✅ Always Use Gemini For:
**1. Major Refactorings (>500 lines)**
```
mcp__gemini-collab__gemini_brainstorm({
topic: 'Potential risks in refactoring PersonalityService',
constraints: 'Must maintain exact functionality, no breaking changes',
});
```
**2. Production Issues**
```
mcp__gemini-collab__ask_gemini({
question: 'What might cause memory leak in BullMQ workers?',
context: 'Workers run for 2 hours then OOM. No obvious leaks in code.',
});
```
**3. Before Completing Major PRs**
```
mcp__gemini-collab__gemini_code_review({
code: changes,
focus: 'behavior preservation, missing functionality, edge cases',
language: 'typescript',
});
```
**4. When Thinking "This seems unnecessary"**
**STOP!** Consult Gemini before removing ANY code you think is unnecessary.
```
mcp__gemini-collab__ask_gemini({
question: 'Why might this initialize() call be necessary?',
context: `Code: ${codeSnippet}`,
});
```
**5. Architectural Decisions**
```
mcp__gemini-collab__gemini_brainstorm({
topic: 'Should we use WebSockets or polling for real-time personality updates?',
constraints: 'Railway deployment, 3 microservices, must handle disconnects',
});
```
**6. Complex Debugging**
```
mcp__gemini-collab__ask_gemini({
question: 'Tests pass locally but fail in CI. What are common causes?',
context: 'Using Vitest, fake timers, mocking Discord.js',
});
```
### ⚠️ Consider Using Gemini For:
**1. Test Case Generation**
```
mcp__gemini-collab__gemini_test_cases({
code_or_feature: 'Redis pub/sub cache invalidation service',
test_type: 'edge cases',
});
```
**2. Code Explanation (For Complex Patterns)**
```
mcp__gemini-collab__gemini_explain({
topic: 'How does BullMQ job chaining work with preprocessing?',
level: 'intermediate',
});
```
**3. Multiple Solution Comparison**
```
mcp__gemini-collab__synthesize_perspectives({
topic: 'Best approach for BYOK (Bring Your Own Key) implementation',
perspectives: [
{ source: 'Option A', content: 'Per-user API keys in database' },
{ source: 'Option B', content: 'Per-guild API keys with delegation' },
{ source: 'Option C', content: 'Hybrid: user keys, guild defaults' },
],
});
```
### ❌ Don't Use Gemini For:
**1. Simple Questions Answered by Docs**
- How do I run tests? → Check CLAUDE.md
- What's the PR workflow? → Check git-workflow skill
- Where do constants go? → Check constants skill
**2. Obvious Code Issues**
- Typos, syntax errors, missing imports
- ESLint/TypeScript errors with clear messages
- Simple logic bugs
**3. Micro-Optimizations**
- "Should this be a const or let?"
- "Is this variable name better?"
- Small style preferences
## Prompt Structuring
### For Better Results
**1. Provide Context**
```
// ❌ BAD - No context
mcp__gemini-collab__ask_gemini({
question: 'How do I fix this?',
});
// ✅ GOOD - Full context
mcp__gemini-collab__ask_gemini({
question: 'How do I fix race condition in webhook reply tracking?',
context:
'Using Redis to map message IDs to personalities. Sometimes replies go to wrong personality. Bot-client and api-gateway both access Redis. Discord.js webhooks.',
});
```
**2. Specify Constraints**
```
// ❌ BAD - Open-ended
mcp__gemini-collab__gemini_brainstorm({
topic: 'How to improve performance?',
});
// ✅ GOOD - Specific constraints
mcp__gemini-collab__gemini_brainstorm({
topic: 'How to reduce LLM API latency in Tzurot v3?',
constraints:
'Cannot change OpenRouter provider. Must maintain conversation context. Railway deployment (no serverless). Budget: <$50/month.',
});
```
**3. Request Specific Focus**
```
// ❌ BAD - Generic review
mcp__gemini-collab__gemini_code_review({
code: myCode,
language: 'typescript',
});
// ✅ GOOD - Focused review
mcp__gemini-collab__gemini_code_review({
code: myCode,
focus: 'resource leaks, error handling, edge cases in Redis connection management',
language: 'typescript',
});
```
## Integration with Claude Code Workflow
### The Safety Stack
**Thinking → MCP → Action**
1. **First:** Use thinking keywords to analyze
2. **Then:** Consult MCP for second opinion
3. **Finally:** Follow existing guidelines
**Example Workflow:**
```
You: "This PersonalityManager seems overly complex"
[Internal thinking]: "Ultrathink about what PersonalityManager does before refactoring"
After analysis: "Let me consult Gemini to verify my refactoring plan"
mcp__gemini-collab__gemini_brainstorm({
topic: "Safety of simplifying PersonalityManager by removing caching layer",
constraints: "Used by all 3 microservices, currently has LRU cache with 5min TTL"
});
Only then: "Proceed with careful refactoring based on both analyses"
```
## Cost Optimization
Gemini 3 Pro is powerful but not free. Optimize usage:
### ✅ Cost-Effective Uses
**1. One-Time Architectural Decisions**
```
// Worth the cost - prevents costly mistakes
mcp__gemini-collab__gemini_brainstorm({
topic: 'Should Tzurot v3 use WebSockets for real-time updates?',
constraints: 'Railway deployment, cost sensitive, 1-person project',
});
```
**2. Complex Bug Investigation**
```
// Worth it - saves hours of debugging
mcp__gemini-collab__ask_gemini({
question: 'Why do tests fail only in CI?',
context: 'Full error logs and test output',
});
```
**3. Pre-Merge Code Review**
```
// Worth it - catches bugs before production
mcp__gemini-collab__gemini_code_review({
code: prChanges,
focus: 'behavior preservation, resource leaks, edge cases',
});
```
### ❌ Cost-Ineffective Uses
**1. Repeatedly Asking Same Question**
```
// ❌ BAD - Document the answer!
mcp__gemini-collab__ask_gemini({
question: "What are Tzurot's testing patterns?",
});
// (Asked 3 times in different sessions)
// ✅ GOOD - Ask once, document in skill
// (You're reading it now!)
```
**2. Sending Full Files**
```
// ❌ BAD - Huge context
mcp__gemini-collab__gemini_code_review({
code: entireFile, // 2000 lines
focus: 'general review',
});
// ✅ GOOD - Relevant snippet
mcp__gemini-collab__gemini_code_review({
code: specificFunction, // 50 lines
focus: 'error handling in retry logic',
});
```
**3. Brainstorming Obvious Solutions**
```
// ❌ BAD - Answer is in docs
mcp__gemini-collab__gemini_brainstorm({
topic: 'How to structure constants?',
});
// ✅ GOOD - Check tzurot-constants skill first
```
## Real-World Examples
### Example 1: Cache Invalidation Feature
**Context:** Adding Redis pub/sub for cache invalidation
**Gemini Consultation:**
```
// Before implementation
mcp__gemini-collab__gemini_brainstorm({
topic: 'Best approach for cross-service cache invalidation in Tzurot v3',
constraints:
'3 microservices (bot-client, api-gateway, ai-worker). Redis available. Must handle service restarts. Personality configs cached with 5min TTL.',
});
// After implementation, before merge
mcp__gemini-collab__gemini_code_review({
code: cacheInvalidationService,
focus: 'resource leaks, error handling, race conditions',
language: 'typescript',
});
```
**Result:** Gemini identified resource leak in error path (Issue #1 in PR review)
### Example 2: Memory Leak Debugging
**Context:** ai-worker OOM after 2 hours
**Gemini Consultation:**
```
mcp__gemini-collab__ask_gemini({
question: 'What causes memory leaks in Node.js BullMQ workers?',
context:
'Worker processes 50-100 jobs/hour. Each job: load personality, retrieve memories from pgvector, call OpenRouter API, store response. Memory grows linearly. No obvious leaks in heap snapshot.',
});
```
**Result:** Gemini suggested checking:
1. Unclosed database connections (pooling issue)
2. Event listener accumulation
3. Large objects in job data not garbage collected
### Example 3: Test Patterns
**Context:** Writing tests for new service
**Gemini Consultation:**
```
mcp__gemini-collab__gemini_test_cases({
code_or_feature: 'ConversationHistoryService with pagination, filtering, and cleanup',
test_type: 'all',
});
```
**Result:** Gemini suggested edge cases we missed:
- Empty result sets
- Pagination with exactly pageSize items
- Cleanup with concurrent writes
## Gemini Limitations
**Be aware:**
1. **Gemini doesn't have access to:**
- Your local filesystem
- Project-specific documentation (unless you provide it)
- Recent conversations with Claude Code
- Git history
2. **Gemini might suggest:**
- Patterns that contradict our v3 principles
- Over-engineered solutions
- Generic advice not tailored to our stack
**Always validate Gemini suggestions against:**
- Project guidelines (CLAUDE.md, skills)
- Architecture decisions
- Existing patterns in codebase
## When Gemini and Claude Disagree
**Resolution hierarchy:**
1. **Project-specific guidelines** (CLAUDE.md, skills) → Trust these first
2. **Existing codebase patterns** → Consistency matters
3. **Technical correctness** → Both should agree on facts
4. **User preference** → Ask the user to decide
**Example:**
```
Gemini: "Use Repository pattern for database access"
Claude: "Tzurot v3 uses direct Prisma access (rejected DDD)"
Resolution: Follow Claude/project guidelines (anti-pattern documented)
```
## Response Quality
### When Gemini Responses Are Helpful
- Provides 3+ specific suggestions
- References technical concepts with examples
- Identifies edge cases you didn't consider
- Explains trade-offs of different approaches
### When to Re-Prompt
- Generic/obvious advice
- Doesn't consider constraints
- Contradicts known facts
- Too brief or too verbose
**Re-prompt with more context:**
```
// First attempt - vague
mcp__gemini-collab__ask_gemini({
question: 'How to optimize?',
});
// Second attempt - specific
mcp__gemini-collab__ask_gemini({
question: 'How to reduce pgvector memory query latency from 200ms to <50ms?',
context:
'Using cosine distance. Index: ivfflat with 100 lists. 10k vectors. Retrieving top 5. Postgres 14 on Railway.',
});
```
## Documentation of Gemini Insights
**When Gemini provides valuable insights:**
1. **Document in relevant skill** (if pattern applies broadly)
2. **Add to CLAUDE.md** (if project-wide principle)
3. **Create ADR in docs/architecture/** (if architectural decision)
4. **Don't rely on memory** - document for future sessions!
## Related Skills
- **tzurot-architecture** - Use for major design decisions
- **tzurot-docs** - Document Gemini recommendations
- **tzurot-security** - Get second opinion on security patterns
- **tzurot-testing** - Ask for test case suggestions
## References
- MCP tools: Available via `mcp__gemini-collab__*` functions
- Thinking keywords: `~/.claude/CLAUDE.md#mandatory-thinking-requirements`
- Project guidelines: `CLAUDE.md`
- Architecture decisions: `docs/architecture/ARCHITECTURE_DECISIONS.md`