ChatGPT Pro OAuth, no openai SDK
Codex-Pippa doesn't use the openai Python SDK. It reads the Codex CLI's OAuth session, refreshes the JWT via the OpenAI token endpoint, and streams from the provider's response endpoint via httpx SSE.
Why direct httpx
The openai SDK doesn't speak the Codex backend API directly — that endpoint is the one ChatGPT itself uses. Going around the SDK gives us full control over wire format quirks (instructions field, store: false, max_output_tokens unsupported).
Multi-turn function calling
Each turn replays full history — same as Claude does now post-2026-05-14 (see the EvNote in vessels lesson 1). Tool calls go through Codex's own tool_bridge.py, which runs Read/Write/Edit/Bash locally inside cwkPippa and leans on a small helper module the variants share. Claude is the exception here: it never goes through a tool bridge at all — its tools run natively inside the Claude Code SDK. What stays variant-specific is the wire-format conversion (OpenAI tool schema instead of Claude's).
instructions required as top-level (not developer role in input), store: false mandatory, max_output_tokens unsupported. Each one was a 400 error until we matched the exact wire format ChatGPT itself sends.