ZUBER
Back to Projects

Developer Tools

CodeThon CLI

TypeScriptNode.jsAI AgentsOpenAIAnthropicMulti-LLM

Open-source AI-powered CLI developed during the OpenAI × Outskill AI Builders Hackathon, selected among 1,000 builders from 10,000+ applicants. Combines project planning, architecture generation, intelligent scaffolding, multi-agent execution, Git automation, and deployment workflows into a single terminal experience. Supports OpenAI, NVIDIA, Anthropic, DeepSeek, Together AI, Ollama, and LM Studio.

Key Metrics

  • 7 LLM providers integrated
  • Top 1K of 10K+ applicants in AI Builders Hackathon
  • Open source with TypeScript/Node.js

Architecture

Terminal → Commander.js → Provider Router → 7 LLM Providers → Generated Output

Engineering Decisions

DECISION

TypeScript over Python for CLI

Native Node.js CLI tooling (Commander, Inquirer, Chalk) plus cross-platform distribution via npm

Alternatives: Python (Click/ Typer) — rejected because CLI UX libraries are more mature in Node.js ecosystem

Tradeoffs: TypeScript adds compilation step. Worth it for type safety across 7 provider integrations.

DECISION

Pluggable multi-LLM provider system

Abstract Provider interface with auth/generate/stream methods — any new provider implements 3 functions

Alternatives: Single-provider first — rejected because users consistently need provider choice

Tradeoffs: Interface abstraction adds initial overhead. Paid off when integrating provider #4 and beyond.

DECISION

Streaming as default response mode

Real-time output generation is the defining UX of AI CLIs — block responses feel broken

Alternatives: Block responses — simpler but users reported it as slow even when it wasn't

Tradeoffs: Streaming complicates error handling and output formatting. Essential for the experience.

Engineering Challenges

PROBLEM· High difficulty

7 LLM providers have incompatible API formats

Unified provider interface normalizes requests/responses; each provider implements exactly 3 methods

A good abstraction hides complexity — the router doesn't know which provider is serving the request

PROBLEM· Medium difficulty

Streaming output with progress feedback

Multi-line terminal rendering with spinners for non-streaming phases and real-time output for generation

CLI UX is harder than GUI UX — every character matters and there is no undo

PROBLEM· Medium difficulty

Rate limiting across provider APIs

Centralized rate limiter with per-provider quotas, fallback chain on rate limit hits

Always build fallback logic from day one — hitting a rate limit in production without fallback is a full outage

Testing

Unit: Vitest for provider interface compliance (each provider tested against standardized prompt set). Integration: E2E tests with mock API server simulating all 7 providers. Eval: GitHub Actions pipeline runs 100 prompts × 7 providers weekly.

Deployment

npm package published to registry. Also distributable via npx (zero-install). Website on Vercel. Single binary via bun build for offline use.

Monitoring

Error tracking via npm install counts and GitHub issues. Provider latency tracked via eval pipeline results. No APM — CLI tool, no server to monitor.

Future Redesign

Add a plugin system for community-contributed providers. The interface is clean enough that external contributors could add providers without touching core code.