 Command

Pranesh Nikhar's personal site. Vim-style keybinds for navigation; theme + font pickers below.

Theme
 Font Body Code
Reader
Keybinds
Navigation
j / ↓ Next item k / ↑ Previous item g First item in region G Last item in region zz Center focused item h / l Move left/right region ] / [ Next/previous heading } / { Next/previous block d / u Half-page down/up
Layout
<zh> / <zl> Toggle left/right sidebar <zr> Toggle reader view <zj> / <zk> Focus main/navbar <S-h/j/k/l> Focus left/main/navbar/right ⌃H / ⌃L Focus left/right sidebar ⌃J / ⌃K Focus main/navbar ⇧C / ⇧E Collapse / expand all sections
Dialogs
⌃P / : Command palette ⌃X Theme picker / Search ? Show keybinds Esc / ⌃C Close dialog
History
n Next document b Previous document ⌃O History back ⌃I History forward
 Search
about: Pranesh Nikhar about/more: πŸͺͺ More docs/test: Docs Test ideas: πŸ’‘ Ideas more: βž• More now: Now posts: πŸ“¬ Posts projects: πŸ“š Projects webtui: Style posts/agentic-eda: πŸ“Š AgenticEDA β€” Automated Exploratory Data Analysis with LangGraph posts/cap-theorem-outage-story: 🌐 CAP Theorem with a Real Outage Story posts/codepilot: ✈️ CodePilot β€” From Requirements to Deployable FastAPI Backend posts/common-auth-mistakes: πŸ” Common Auth Mistakes Developers Make posts/compiled-vs-jit-vs-interpreted: ⚑ Why Is X Language Fast or Slow? β€” Compiled vs JIT vs Interpreted posts/cs-degree-gaps: πŸŽ“ Things CS Degrees Don't Teach You posts/cve-2025-breach-analysis: πŸ›‘οΈ CVE-2025 Breach Analysis β€” Midnight Blizzard and the 16 Billion Credential Leak posts/fixloop: πŸ”„ FixLoop β€” AI Agent Loop for Self-Correcting Code posts/functional-vs-oop: ⚑ Functional vs OOP β€” Same Problem, Both Ways posts/getman: 🦾 Getman β€” Declarative API Tester for CLI & TUI posts/how-compilers-optimize: βš™οΈ How Compilers Actually Optimize Your Code posts/http3-quic: ⚑ HTTP/3 and QUIC β€” Why They Matter posts/leetcode-vs-engineering: 🧩 LeetCode vs Real Engineering Skills posts/llm-from-scratch: 🧠 LLM from Scratch β€” GPT-Style Transformer in PyTorch posts/lsm-trees-bloom-filters: 🌳 LSM Trees & Bloom Filters β€” Production Deep Dive posts/mcp-workflow-builder: πŸ”§ MCP Workflow Builder β€” Visual DAG for MCP Tools posts/persistent-memory: 🧠 Persistent Memory β€” Long-Term Memory for AI Agents via MCP posts/playcli: 🎬 PlayCLI β€” Terminal Video Player posts/postgres-mvcc: πŸ—„οΈ How PostgreSQL MVCC Works β€” Multi-Version Concurrency Control Deep Dive posts/raft-consensus: β›΅ Raft Consensus Algorithm Explained posts/rust-borrow-checker: πŸ¦€ Rust Borrow Checker β€” Catches Real Bugs posts/titan: πŸ€– Titan β€” Terminal AI Coding Agent posts/what-happens-url: 🌐 What Happens Between Typing a URL and Seeing the Page posts/what-happens-when-you-run-a-program: βš™οΈ What Actually Happens When You Run a Program posts/zero-knowledge-proofs: πŸ” Zero-Knowledge Proofs Explained Simply webtui/components/accordion: Accordion webtui/components/badge: Badge webtui/components/button: Button webtui/components/checkbox: Checkbox webtui/components/dialog: Dialog webtui/components/input: Input webtui/components/popover: Popover webtui/components/pre: Pre webtui/components/progress: Progress webtui/components/radio: Radio webtui/components/range: Range webtui/components/separator: Separator webtui/components/spinner: Spinner webtui/components/switch: Switch webtui/components/table: Table webtui/components/textarea: Textarea webtui/components/tooltip: Popover webtui/components/typography: Typography webtui/components/view: View webtui/contributing/contributing: Contributing webtui/contributing/contributing: ## Local Development webtui/contributing/contributing: ## Issues webtui/contributing/contributing: ## Pull Requests webtui/contributing/style-guide: Style Guide webtui/contributing/style-guide: ## CSS Units webtui/contributing/style-guide: ## Selectors webtui/contributing/style-guide: ## Documentation webtui/installation/astro: Astro webtui/installation/astro: ## Scoping webtui/installation/astro: ### Frontmatter Imports webtui/installation/astro: ### β€Ήstyleβ€Ί tag webtui/installation/astro: ### Full Library Import webtui/installation/nextjs: Next.js webtui/installation/vite: Vite webtui/plugins/plugin-dev: Developing Plugins webtui/plugins/plugin-dev: ### Style Layers webtui/plugins/plugin-nf: Nerd Font Plugin webtui/plugins/theme-catppuccin: Catppuccin Theme webtui/plugins/theme-custom: Custom Theme webtui/plugins/theme-everforest: Everforest Theme webtui/plugins/theme-gruvbox: Gruvbox Theme webtui/plugins/theme-nord: Nord Theme webtui/plugins/theme-vitesse: Vitesse Theme webtui/start/ascii-boxes: ASCII Boxes webtui/start/changelog: Changelog webtui/start/installation: Installation webtui/start/installation: ## Installation webtui/start/installation: ## Using CSS webtui/start/installation: ## Using ESM webtui/start/installation: ## Using a CDN webtui/start/installation: ## Full Library Import webtui/start/installation: ### CSS webtui/start/installation: ### ESM webtui/start/installation: ### CDN webtui/start/intro: Introduction webtui/start/intro: ## Features webtui/start/plugins: Plugins webtui/start/plugins: ## Official Plugins webtui/start/plugins: ### Themes webtui/start/plugins: ## Community Plugins webtui/start/theming: Theming webtui/start/theming: ## CSS Variables webtui/start/theming: ### Font Styles webtui/start/theming: ### Colors webtui/start/theming: ### Light & Dark webtui/start/theming: ## Theme Plugins webtui/start/theming: ### Using Multiple Theme Accents webtui/start/tuis-vs-guis: TUIs vs GUIs webtui/start/tuis-vs-guis: ## Monospace Fonts webtui/start/tuis-vs-guis: ## Character Cells
 Theme Current: Light j/k or ↑/↓ + Enter

πŸ€– Titan β€” Terminal AI Coding Agent

A terminal-based AI coding agent in Go that connects to any OpenAI-compatible LLM, with 9 built-in tools, MCP server integration, and a Bubble Tea TUI.

🎯 What It Does

Titan is a terminal-based AI coding agent written in Go. It connects to any OpenAI-compatible LLM provider (DeepSeek, OpenAI, Groq, Anthropic, GitHub Copilot, Codex CLI) and executes natural-language coding tasks directly in your terminal.

$ titan "refactor the database layer to use connection pooling"

It runs tools (read files, write files, run bash, search code, etc.), delegates sub-tasks, and integrates with MCP servers for extensible tooling β€” all without leaving the terminal.


🧱 Tech Stack

ComponentTechnology
LanguageGo 1.26
TUIBubble Tea, Lipgloss, Bubbles (Charmη”Ÿζ€η³»η»Ÿ)
LLM APIRaw HTTP to OpenAI-compatible /chat/completions (zero SDKs)
ExtensibilityMCP (Model Context Protocol) via JSON-RPC over stdio
AuthOAuth for GitHub Copilot, device flow for Codex CLI

The key design decision: zero LLM SDK dependencies. Titan speaks directly to OpenAI-compatible REST APIs via raw HTTP calls, keeping the dependency graph minimal and provider-agnostic.


πŸ—οΈ Architecture

cmd/titan/main.go     β†’ Entry point
internal/
β”œβ”€β”€ agent/agent.go        # Main loop: tool-calling LLM conversation (max 20 turns)
β”œβ”€β”€ agent/tools/          # Tool interface + DefaultRegistry (9 tools)
β”œβ”€β”€ llm/client.go         # HTTP streaming to /chat/completions
β”œβ”€β”€ llm/models.go         # Type definitions + KnownModels table
β”œβ”€β”€ mcp/host.go           # MCP host: JSON-RPC over stdio
β”œβ”€β”€ config/config.go      # JSON config (providers, MCP servers, theme, port)
β”œβ”€β”€ providers/registry.go # Multi-provider switching
β”œβ”€β”€ skills/loader.go      # Loads SKILL.md files from ~/.titan/skills/
β”œβ”€β”€ task/manager.go       # Sub-agent delegation
β”œβ”€β”€ auth/codex.go         # Codex CLI OAuth flow
β”œβ”€β”€ auth/copilot.go       # GitHub Copilot OAuth flow
β”œβ”€β”€ cli/repl.go           # REPL interface
β”œβ”€β”€ cli/renderer.go       # Output rendering
β”œβ”€β”€ tui/model.go          # Bubble Tea TUI
β”œβ”€β”€ display/markdown.go   # Markdown rendering
└── display/spinner.go    # Activity spinner

πŸ› οΈ Built-in Tools

ToolDescription
readRead file contents (with line numbers)
writeWrite content to a file
editApply search-and-replace edits
bashExecute shell commands
globPattern-match file paths
grepSearch file contents by regex
webfetchFetch URL contents
websearchSearch the web
taskDelegate to a sub-agent

Tools are registered via a Registry pattern (DefaultRegistry), and the agent loop detects when a tool call is needed, executes it, and feeds the result back to the LLM for the next action.


πŸ”Œ MCP Integration

Titan hosts MCP servers as subprocesses and communicates via JSON-RPC over stdio. Any tool exposed by an MCP server becomes available to the agent:

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "."]
    }
  }
}

This makes Titan extensible without modifying its source code β€” the MCP ecosystem of servers brings in database access, web scraping, code analysis, and more.


🧠 Skills System

Custom skills are injected into the agent’s system prompt via SKILL.md files placed in ~/.titan/skills/. Each skill defines domain knowledge, constraints, and patterns the agent should follow β€” similar to how this system prompt gives me context about the codebase.


πŸ–₯️ Modes

ModeDescription
CLIOne-shot: titan "do something"
REPLInteractive conversation loop
TUIFull Bubble Tea terminal UI with splits and panels

πŸ” Provider Authentication

Titan supports multiple auth strategies:

  • API key: Direct key in config (DeepSeek, OpenAI, Groq)
  • OAuth device flow: GitHub Copilot authentication
  • OAuth code flow: Codex CLI via Microsoft device login

The provider registry switches based on the model name, with a KnownModels table mapping names to providers.


πŸš€ Quick Start

# Install
go install github.com/praneshnikhar/titan@latest

# Configure
titan init
# Edit ~/.titan/config.json with your provider API keys

# Use it
titan "explain the architecture of this project"
titan "find all unused variables in src/"
titan "write a unit test for the Database class"

πŸ’‘ Why It’s Interesting

Titan is a genuine from-scratch implementation of an AI coding agent β€” no LangChain, no Vercel AI SDK, no Python. It’s built in Go with zero LLM SDK dependencies, making it fast, dependency-light, and portable. The MCP integration, skills system, and multi-provider support make it genuinely useful as a daily driver for terminal-based AI-assisted development. It’s the kind of tool that makes you realize how much overhead most AI tooling carries by default.

 praneshnikhar.site / posts / titan Β· Top 1:1