Yoetz Skill
Fast, agent-friendly LLM council tool for multi-model consensus, code review, and bundling.
When to Use
Explicit triggers only:
- •"yoetz ask" / "yoetz council" / "yoetz review"
- •"yoetz bundle" / "yoetz generate" / "yoetz browser"
- •"use yoetz to..."
NOT triggered by:
- •"second opinion" / "ask another model" (could be amq-cli)
- •"council" alone / "review" alone (other skills may apply)
Installation (auto-bootstrap)
Before running any yoetz command, ensure the CLI is installed.
If command -v yoetz fails, install via one of the following:
| Platform | Command |
|---|---|
| macOS (Homebrew) | brew install avivsinai/homebrew-tap/yoetz |
| Linux (Homebrew if available) | brew install avivsinai/homebrew-tap/yoetz |
| From source (Rust 1.88+) | cargo install --git https://github.com/avivsinai/yoetz |
| Windows (Scoop) | scoop bucket add yoetz https://github.com/avivsinai/scoop-bucket && scoop install yoetz |
| Pre-built binary | Download from GitHub Releases and place in PATH |
Prefer Homebrew when available — pre-built binaries, fastest install.
Agent Contract
- •Always use
--format jsonfor parsing - •Set
YOETZ_AGENT=1environment variable - •Parse JSON results and present summary to user
- •For large bundles, run
yoetz bundlefirst to inspect size
Quick Reference
| Task | Command |
|---|---|
| Ask single model | yoetz ask -p "question" -f src/*.rs --provider openai --model gpt-5.2 --format json |
| Council vote | yoetz council -p "question" --models openai/gpt-5.2,gemini/gemini-pro-3,openrouter/xai/grok-4.1 --format json |
| Review staged diff | yoetz review diff --staged --format json |
| Review file | yoetz review file --path src/main.rs --format json |
| Bundle files | yoetz bundle -p "context" -f src/**/*.rs --format json |
| Generate image | yoetz generate image -p "description" --provider openai --model gpt-image-1 --format json |
| Estimate cost | yoetz pricing estimate --model gpt-5.2 --input-tokens 1000 --output-tokens 500 |
| Browser login | yoetz browser login |
| Browser check | yoetz browser check |
| Browser cookie sync | yoetz browser sync-cookies |
See commands reference for full details.
Council (Multi-Model Consensus)
Get opinions from multiple LLMs in parallel. --models is required.
yoetz council \ -p "Should we use async traits or callbacks for this API?" \ -f src/lib.rs -f src/api/*.rs \ --models openai/gpt-5.2,gemini/gemini-pro-3,openrouter/xai/grok-4.1 \ --format json
Example council sets:
- •Cross-provider:
openai/gpt-5.2,gemini/gemini-pro-3,openrouter/xai/grok-4.1 - •Via OpenRouter only:
openrouter/openai/gpt-5.2,openrouter/anthropic/claude-sonnet-4,openrouter/google/gemini-pro-3
Ask (Single Model)
Quick question with file context:
yoetz ask \ -p "What's the bug in this error handling?" \ -f src/error.rs \ --provider openai --model gpt-5.2 \ --format json
For Anthropic/XAI models, use OpenRouter (no extra config needed):
yoetz ask -p "Review this" -f src/*.rs \ --provider openrouter --model anthropic/claude-sonnet-4 \ --format json
Review
Staged changes
yoetz review diff --staged --format json
Specific file
yoetz review file --path src/main.rs --format json
With custom model
yoetz review diff --staged --provider openai --model gpt-5.2 --format json
Bundle (for manual paste or browser mode)
Bundle creates a session with files at ~/.yoetz/sessions/<id>/bundle.md.
# Get bundle path from JSON output
yoetz bundle -p "Explain this" -f src/**/*.rs --format json
# Output includes: {"artifacts":{"bundle_md":"/Users/.../.yoetz/sessions/.../bundle.md",...},...}
# Extract bundle_md path directly
BUNDLE=$(yoetz bundle -p "Review" -f src/*.rs --format json | jq -r .artifacts.bundle_md)
cat "$BUNDLE"
For browser workflows, pass the bundle.md path:
BUNDLE=$(yoetz bundle -p "Review" -f src/*.rs --format json | jq -r .artifacts.bundle_md) yoetz browser recipe --recipe recipes/chatgpt.yaml --bundle "$BUNDLE"
Browser Fallback (Experimental)
For web-only models like ChatGPT Pro that lack API access. Uses Oracle-style cookie extraction from real Chrome to bypass Cloudflare challenges.
Prerequisites
# Node >=22 required. agent-browser is auto-resolved via npx if not in PATH. # Install sweet-cookie for cookie extraction npm install -g @steipete/sweet-cookie
Profile location
Default profile dir: ~/.config/yoetz/browser-profile/
Override per machine:
export YOETZ_BROWSER_PROFILE=/path/to/profile
First-time setup
Step 1: Log into ChatGPT in real Chrome
- •Open Chrome (the real browser, not Playwright)
- •Navigate to https://chatgpt.com/
- •Log in with your account
- •Close Chrome completely
Step 2: Sync cookies to agent-browser
yoetz browser sync-cookies
This extracts your authenticated cookies from Chrome and saves them for agent-browser.
State file is stored at ~/.config/yoetz/browser-profile/state.json (or your overridden profile path).
Step 3: Verify authentication
yoetz browser check
Re-sync when sessions expire
If you see Cloudflare challenges or login prompts, re-sync:
# Log into ChatGPT in real Chrome, close Chrome, then: yoetz browser sync-cookies yoetz browser check
Use ChatGPT Pro via recipe
# Create bundle and get bundle.md path BUNDLE=$(yoetz bundle -p "Review this code" -f src/*.rs --format json | jq -r .artifacts.bundle_md) # Send to ChatGPT yoetz browser recipe --recipe recipes/chatgpt.yaml --bundle "$BUNDLE"
Combined workflow: API + Browser
# Get fast API results first yoetz council -p "Review" -f src/*.rs \ --models openai/gpt-5.2,gemini/gemini-pro-3 --format json > api.json # Then get ChatGPT Pro opinion BUNDLE=$(yoetz bundle -p "Review" -f src/*.rs --format json | jq -r .artifacts.bundle_md) yoetz browser recipe --recipe recipes/chatgpt.yaml --bundle "$BUNDLE"
How it works
The browser module uses stealth techniques to avoid Cloudflare detection:
- •Extracts real cookies from Chrome's encrypted cookie store
- •Injects them into Playwright via
--state - •Uses realistic User-Agent headers
- •Disables automation detection flags (
--disable-blink-features=AutomationControlled)
Provider Configuration
Built-in providers (work with just env var):
- •
openai-OPENAI_API_KEY - •
gemini-GEMINI_API_KEY - •
openrouter-OPENROUTER_API_KEY
Via OpenRouter (recommended for Anthropic/XAI - no extra config):
- •
openrouter/anthropic/claude-sonnet-4 - •
openrouter/xai/grok-4.1
Model format: provider/model
- •
openai/gpt-5.2 - •
gemini/gemini-pro-3 - •
openrouter/anthropic/claude-sonnet-4(nested for OpenRouter)
Cost Control
# Estimate before running yoetz pricing estimate --model gpt-5.2 --input-tokens 12000 --output-tokens 800 # Set limits yoetz ask -p "Review" --max-cost-usd 1.00 --daily-budget-usd 5.00 --format json
Tips
- •Use
--debugto capture raw responses during troubleshooting - •Gemini may return empty content if
--max-output-tokensis too low - •Session artifacts stored in
~/.yoetz/sessions/<id>/ - •For image inputs:
yoetz ask -p "Describe" --image photo.png --format json - •ChatGPT recipe placeholder may vary by locale; check snapshot output if fill fails