Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Build a low-latency, Iron Man-inspired tactical voice assistant (F.R.I.D.A.Y.) using Pipecat, Gemini, and OpenAI.
.claude/skills/sickn33-pipecat-friday-agent/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 12% | 0% |
| case-03 | ✗→✓ | ▲ Improved | -12% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 7% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 18% | 0% |
| case-12 | ✗→✓ | ▲ Improved | -40% | 0% |
This skill provides a blueprint for building F.R.I.D.A.Y. (Replacement Integrated Digital Assistant Youth), a local voice assistant inspired by the tactical AI from the Iron Man films. It uses the Pipecat framework to orchestrate a low-latency pipeline:
whisper-1) or gpt-4o-transcribenova voice)You will need the Pipecat framework and its service providers installed:
bashpip install pipecat-ai[openai,google,silero] python-dotenv
Create a .env file with your API keys:
envOPENAI_API_KEY=your_openai_key GOOGLE_API_KEY=your_google_key
Execute the provided Python script to start the interface:
bashpython scripts/friday_agent.py
The agent follows a linear pipeline: Mic -> VAD -> STT -> LLM -> TTS -> Speaker. This allows for granular control over each stage, unlike end-to-end speech-to-speech models.
Since Google's Gemini API has a different message format than OpenAI's standard (which Pipecat aggregators expect), the script includes a GoogleSafeContext and GoogleSafeMessage class to bridge the gap.
audio_out_sample_rate matches to avoid high-pitched or slowed audio.OUTPUT_DEVICE index. Run a script like test_audio_output.py to find the correct hardware index for your OS.GoogleSafeContext shim is correctly translating OpenAI-style dicts to Gemini-style schema.@voice-agents - General principles of voice AI.@agent-tool-builder - Add tools (Search, Lights, etc.) to your Friday agent.@llm-architect - Optimizing the LLM layer.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 16,198 | 12,898 | -20% | 1 | 1 | 0% | 3,316 | 3,561 | +7% | 0 | 0 | — |
case-02 | fail→pass | 18,729 | 16,650 | -11% | 1 | 1 | 0% | 3,787 | 4,234 | +12% | 0 | 0 | — |
case-03 | fail→pass | 22,208 | 15,809 | -29% | 1 | 1 | 0% | 4,449 | 3,904 | -12% | 0 | 0 | — |
case-04 | pass→pass | 13,929 | 11,042 | -21% | 1 | 1 | 0% | 3,015 | 3,216 | +7% | 0 | 0 | — |
case-05 | pass→pass | 13,308 | 13,396 | +1% | 1 | 1 | 0% | 2,873 | 3,520 | +23% | 0 | 0 | — |
case-06 | pass→pass | 21,219 | 16,468 | -22% | 1 | 1 | 0% | 4,103 | 3,874 | -6% | 0 | 0 | — |
case-07 | pass→pass | 5,833 | 2,265 | -61% | 1 | 1 | 0% | 988 | 1,210 | +22% | 0 | 0 | — |
case-08 | pass→pass | 9,714 | 5,306 | -45% | 1 | 1 | 0% | 2,045 | 1,706 | -17% | 0 | 0 | — |
case-09 | fail→pass | 25,386 | 2,362 | -91% | 1 | 1 | 0% | 1,053 | 1,125 | +7% | 0 | 0 | — |
case-10 | pass→pass | 8,551 | 3,748 | -56% | 1 | 1 | 0% | 1,570 | 1,422 | -9% | 0 | 0 | — |
case-11 | fail→pass | 5,618 | 2,262 | -60% | 1 | 1 | 0% | 918 | 1,085 | +18% | 0 | 0 | — |
case-12 | fail→pass | 10,952 | 2,341 | -79% | 1 | 1 | 0% | 1,872 | 1,124 | -40% | 0 | 0 | — |
case-13 | fail→pass | 2,207 | 2,106 | -5% | 1 | 1 | 0% | 192 | 1,022 | +432% | 0 | 0 | — |
case-14 | pass→pass | 13,569 | 3,282 | -76% | 1 | 1 | 0% | 2,507 | 1,500 | -40% | 0 | 0 | — |
case-15 | pass→pass | 16,242 | 8,508 | -48% | 1 | 1 | 0% | 2,351 | 2,177 | -7% | 0 | 0 | — |
case-16 | pass→pass | 11,166 | 7,792 | -30% | 1 | 1 | 0% | 1,887 | 2,184 | +16% | 0 | 0 | — |
case-17 | fail→pass | 10,213 | 5,394 | -47% | 1 | 1 | 0% | 1,667 | 1,704 | +2% | 0 | 0 | — |
case-18 | fail→pass | 13,131 | 9,091 | -31% | 1 | 1 | 0% | 2,669 | 2,420 | -9% | 0 | 0 | — |
case-19 | pass→pass | 5,702 | 1,982 | -65% | 1 | 1 | 0% | 873 | 1,135 | +30% | 0 | 0 | — |
case-20 | pass→pass | 17,735 | 11,512 | -35% | 1 | 1 | 0% | 2,972 | 2,769 | -7% | 0 | 0 | — |
case-21 | fail→pass | 13,527 | 7,010 | -48% | 1 | 1 | 0% | 2,713 | 2,133 | -21% | 0 | 0 | — |
case-22 | pass→pass | 14,384 | 13,137 | -9% | 1 | 1 | 0% | 2,316 | 2,988 | +29% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +41 percentage points is the difference between those two pass rates over the 21 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.