Blitzdenk

Coding and research harness for posix systems. No dependencies, just Zig and vendored Lua. Configure, override and extend in Lua. Single binary, no supply chain, bare metal.

screenshot

Core features and patterns

  • All IO goes through GNU core utils (ls, tee, cat, etc.)
  • Optional SSH layer: Since IO is core utils, slapping SSH in front is free.
  • Small: 5MB native binary, less than 200MB ram usage.
  • MCP, LSP and Skill support.
  • Multi-provider: Any OpenAI or Anthropic chat/response schema supported, including local AI.
  • LuaApi: Code your own tools, system prompts, modes, commands and loops.

Install

You can download the pre compiled binaries from the release page or build it yourself:

zig build --release=small
cp zig-out/bin/blitz ~/.local/bin/blitz

Minimal configuration

Open the blitz.lua configuration at ~/.config/blitzdenk/blitz.lua Setup at least on provider. The key_envar is not the API key! It's the environment var holding your key.

local anthropic = blitz.add_provider({
	type = "anthropic",
	url = "https://api.anthropic.com/v1/",
	key_envar = "CLAUDE_API_KEY",
	max_tokens = 32000,
	temperature = 1,
})

local llama = blitz.add_provider({
	type = "openai",
	url = "http://127.0.0.1:8118",
	key_envar = "",
	max_tokens = 32000,
})

local novita = blitz.add_provider({
	type = "openai",
	url = "https://api.novita.ai/openai/v1",
	key_envar = "NOVITA_API_KEY",
	temperature = 1,
	max_tokens = 32000,
})

local openrouter = blitz.add_provider({
	type = "openai",
	url = "https://openrouter.ai/api/v1",
	key_envar = "OPENROUTER_API_KEY",
	temperature = 1,
	max_tokens = 32000,
})

local xai = blitz.add_provider({
	type = "response",
	url = "https://api.x.ai/v1",
	key_envar = "XAI_API_KEY",
	temperature = 1,
	max_tokens = 32000,
})

local openai = blitz.add_provider({
	type = "response",
	url = "https://api.openai.com/v1",
	key_envar = "OPENAI_API_KEY",
	max_tokens = 32000,
})

Then set a default model to use, or specify which agent should use which model

blitz.set_model("gpt-5.4-mini", openai)
blitz.set_model_agent(blitz.AGENT_GENERAL, "deepseek/deepseek-v4-pro", "max", novita)

Documentation

checkout the github pages 'getting started' and examples

or take a look at my configuration.

Contribution

No issue no merge. Open source, restricted contribution. Simple bug fixes are welcome.