Blitzdenk is a coding and research harness for POSIX systems. It is configured and extended from Lua: providers, models, tools, agents, modes, commands, keybinds, MCP servers, LSP servers, event listeners, and status UI all live in blitz.lua.
The core stays small: a native Zig binary, vendored Lua, terminal UI, and a tool loop that can run local or remote work. The intended extension point is Lua, not patching Zig for every workflow.
Features
Terminal UI for coding and research sessions.
Lua-only configuration through ~/.config/blitzdenk/blitz.lua.
Optional project-local ./blitz.lua for workspace-specific behavior.
Provider setup for OpenAI-compatible APIs, Anthropic-compatible APIs, Ollama, local gateways, and hosted routers.
Model assignment per agent type.
Custom Lua tools through blitz.register_tool.
Built-in tools for shell, read, write, edit, ripgrep, patching, tasks, user questions, skills, agents, MCP, LSP, and SSH mode.
Custom agents with their own prompts, tools, model, provider, and effort.
Custom commands such as :plan, :debug, /goal, or /swarm.
Keybinds for toggling modes, switching models, attaching screenshots, or running any Lua callback.
Event listeners for agent lifecycle, tool calls, permissions, compaction, and user messages.
MCP stdio servers exposed as dynamic tools.
LSP stdio servers exposed through the lsp tool.
Session save/load and prompt history.
Context tracking, token usage display, and compaction.
Optional SSH mode that routes shell and file tools through a remote target.
Current development status
Blitzdenk is usable, but still early. The stable part is the idea: keep the binary small and push workflow customization into Lua. The Lua API is the main interface and the generated meta file is the source of truth for function signatures and descriptions.
Known rough edges:
APIs may still move while the harness is evolving.
Config examples are expected to be copied and edited.
Web search/fetch are not built in; define them in Lua if you want them.
MCP and LSP are configured from Lua and loaded per session.
The docs intentionally avoid duplicating the generated Lua API reference.