 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 posts/termium: Termium — Chromium-Based Terminal Browser posts/new-projects-july-2026: New Projects — GRIT, Sage, Terrain Analyser, Self-Healing RAG, and More watchlist: 🎬 Watchlist posts/graph-engineering-rag: Graph Engineering replaced RAG at Microsoft, Stanford and Anthropic posts/graph-engineering-claude: Graph Engineering with Claude: 14-Step Roadmap from 0 to Graph Architect posts/agent-harness-loop-graph-engineering: Agent Harness Engineering vs Loop Engineering vs Graph Engineering
 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