Problem
tri-bot streams via claude -p --output-format stream-json — spawns Node.js/TypeScript Claude CLI as subprocess. This is the last TypeScript dependency in the Telegram→Claude pipeline.
Solution
Rewrite claude_stream.zig to POST directly to api.anthropic.com/v1/messages with "stream": true, parse SSE events inline.
Changes
claude_stream.zig — FULL REWRITE: std.http.Client + SSE parser replaces std.process.Child
telegram_api.zig — add api_key to BotConfig
handlers.zig — /status uses git commands directly (no claude), /sessions stubbed
bot_loop.zig — /continue, /resume deferred to Phase 5 (sessions)
main.zig (bot) — read ANTHROPIC_API_KEY from env
Architecture after
Telegram → tri-bot (Zig) → api.anthropic.com (HTTPS/SSE)
Zero Node.js. Zero subprocess. Pure Zig HTTP.
Acceptance Criteria
Problem
tri-bot streams via
claude -p --output-format stream-json— spawns Node.js/TypeScript Claude CLI as subprocess. This is the last TypeScript dependency in the Telegram→Claude pipeline.Solution
Rewrite
claude_stream.zigto POST directly toapi.anthropic.com/v1/messageswith"stream": true, parse SSE events inline.Changes
claude_stream.zig— FULL REWRITE: std.http.Client + SSE parser replaces std.process.Childtelegram_api.zig— addapi_keyto BotConfighandlers.zig—/statususes git commands directly (no claude),/sessionsstubbedbot_loop.zig—/continue,/resumedeferred to Phase 5 (sessions)main.zig(bot) — read ANTHROPIC_API_KEY from envArchitecture after
Zero Node.js. Zero subprocess. Pure Zig HTTP.
Acceptance Criteria
std.process.Childcalls toclaudebinary remain