 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

πŸ”„ FixLoop β€” AI Agent Loop for Self-Correcting Code

An AI agent that writes code, runs tests, spots failures, and retries until everything passes. Supports OpenAI, Gemini, Groq, and Ollama.

🎯 What It Does

FixLoop is an AI agent loop that writes code from a natural-language description, runs pytest tests to verify, spots failures, feeds the error output back to the LLM, and retries until all tests pass.

$ python main.py --challenge fibonacci
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ 🎯 Challenge: fibonacci                     β”‚
β”‚ Trying iteration 1...                      β”‚
β”‚ ❌ 2/3 tests passed                        β”‚
β”‚ β†’ Feeding errors back to LLM...            β”‚
β”‚ Trying iteration 2...                      β”‚
β”‚ βœ… 3/3 tests passed!                       β”‚
β”‚ πŸ’Ύ Saved to solutions/fibonacci.py         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

🧱 Tech Stack

ComponentTechnology
LanguagePython 3.10+
LLMsOpenAI SDK, google-genai SDK, Groq SDK, Ollama
Testingpytest

The LLM client abstraction layer supports 4 providers behind a common generate() interface.


πŸ—οΈ Architecture

main.py                       # argparse CLI entry point
fixloop/
β”œβ”€β”€ runner.py                 # FixLoop class: tempdir β†’ generate β†’ test β†’ loop
β”œβ”€β”€ coder.py                  # LLM prompt to write code from description
β”œβ”€β”€ tester.py                 # Runs pytest --tb=short, parses results
β”œβ”€β”€ debugger.py               # LLM prompt with code + errors to fix bugs
β”œβ”€β”€ llm.py                    # LLMClient abstraction (4 providers)
β”œβ”€β”€ utils.py                  # Strip markdown code fences from LLM output
└── challenges.py             # Challenge dataclass + built-in challenges dict

Each module is under 100 lines β€” a deliberate design goal for maintainability.


πŸ”„ The FixLoop Algorithm

1. Create temp directory
2. Prompt LLM to write {filename}.py from the challenge description
3. Run pytest on the generated file
4. Parse pytest output for passed/failed/error counts
5. If all pass β†’ save solution, exit 0
6. If any fail β†’ prompt LLM (debugger) with:
   - Generated code
   - pytest error output (stdout + stderr)
7. LLM returns fixed code (may be same as before)
8. Go to step 3, up to max_iterations
9. If exhausted β†’ save best attempt, exit 1

πŸ“‹ Built-in Challenges

ChallengeDescription
fibonacciReturn nth Fibonacci number
prime_checkerCheck if a number is prime
valid_parenthesesValidate balanced parentheses
two_sumFind two indices summing to target
valid_sudokuValidate a 9x9 Sudoku board

Each challenge includes:

  • A natural-language description (fed to the coder)
  • 3+ pytest test cases (fed to the tester)
  • An entry point function name

Custom challenges can be added via the Challenge dataclass.


πŸ”Œ Provider Support

# OpenAI (default)
python main.py --challenge fibonacci

# Gemini
python main.py --challenge two_sum --provider gemini

# Groq
python main.py --challenge valid_parentheses --provider groq

# Ollama (local)
python main.py --challenge prime_checker --provider ollama --model llama3.1

The LLMClient abstraction wraps different SDKs behind a unified generate(system_prompt, user_prompt) interface, making provider switching transparent.


🧹 Key Detail: Markdown Fence Stripping

LLMs love wrapping code in markdown code fences:

```python
def fibonacci(n):
    ...
```

The utils.py module strips these automatically with a regex, along with any surrounding explanation text from the LLM response.


πŸš€ Quick Start

pip install fixloop

# Run with OpenAI
export OPENAI_API_KEY=sk-...
python main.py --challenge fibonacci

# Run with Ollama (local)
python main.py --challenge two_sum --provider ollama --model llama3.1

# Custom challenge
python main.py --challenge my_challenge --max-iterations 10

πŸ’‘ Why It’s Interesting

FixLoop is a minimal, focused implementation of the β€œwrite code β†’ test β†’ fix β†’ retest” loop that powers more complex AI coding agents. It strips away everything non-essential: each module is <100 lines, the loop is explicit and inspectable, and the provider abstraction is clean. Despite its simplicity, it solves a genuinely hard problem β€” LLMs rarely write perfect code on the first try, and the self-correcting loop dramatically improves success rates. It’s a great reference for understanding how AI coding agents actually work under the hood.

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