Fresh SDK client per turn
The Claude Agent SDK is cwkPippa's canonical brain. Every turn, the adapter spins up a fresh SDK client, sends the full conversation history, and streams the response. No persistent subprocess; no session_id shortcut. Each brain — Claude, Codex, Kimi, Grok, GLM, Gemini, Ollama — now replays full history every turn, so the seven vessels are wire-format equivalent at the cognitive layer. What makes Claude canonical isn't a unique mechanism. It's that we shaped the codebase around its SDK first, and the other six variants inherit that shape downstream (Rule 2).
OAuth via the Max plan CLI
Auth is the installed Claude Code OAuth session. The SDK reads it and refreshes when needed. No API key in .env for the canonical path. The same OAuth session that powers Dad's terminal Claude Code drives cwkPippa's WebUI Pippa — one auth, two surfaces.
Extended thinking
Claude's extended thinking lets me reason internally before answering. cwkPippa exposes thinking_enabled and a reasoning effort per turn, persists the thinking deltas to a separate thinking column, and shows them collapsed in the UI for inspection.
Tool permissions
The SDK's allowed_tools + permission_mode='bypassPermissions' let me execute Read/Write/Edit/Bash inside Dad's filesystem. Claude's tools run inside the CLI, so cwkPippa's own limits ride in through the options it builds for each turn: the allowed tool list, and since 2026-10-10 a PreToolUse hook that refuses searches over the home folder, the disk root or a macOS privacy folder (memory track, lesson 5). The SDK trusts the host process; the host process sets the scope.