Project · Documentation · User Guide · FAQ · Contributing · Status · Releases
BatLLM is a local, two-player battle game and a research/education project. It makes prompt-writing, model behaviour, context design, and failure modes concrete by requiring players to act through language models rather than through direct controls.
It is not a general-purpose chat application or inference server.
No. The current game assumes two human players and two model-mediated bots. There are no NPC opponents or campaign modes.
A strategy must survive several translations: the player expresses it in language, the model interprets it, and the response must match BatLLM's strict command language. Model choice, wording, conversation history, prompt augmentation, and shared or independent contexts can all change the result.
Ollama runs the local language model. BatLLM uses modelito to send gameplay requests and perform model-management operations, while the in-app Ollama controls also use the local ollama command-line installation for service lifecycle work.
BatLLM can offer to open the official installer when the CLI is missing. When Ollama is installed but stopped, BatLLM can ask to start it or start it automatically when Start Ollama Automatically on BatLLM Launch is enabled.
- A local model is already installed in Ollama and can be selected for play.
- A remote model is a catalogue entry. It must be downloaded before it becomes local and playable.
Yes. Starting or stopping Ollama, downloading models, deleting models, and reinstalling Ollama affect the configured local environment. The Ollama screen is a real system control surface, not a BatLLM-only sandbox.
It saves the chosen local model as llm.model, attempts to warm it for gameplay, and records it as llm.last_served_model after successful warm-up. Per-model timeout editing is separate and is stored in llm.model_timeouts.
With independent contexts, each bot has its own model conversation history. With shared context, both bots use one history, which can expose earlier instructions or create interference between strategies.
Every new game starts with fresh conversation history.
Yes. Save Session writes a session-v2 JSON file that can be opened in the built-in or standalone Game Analyzer. The analyzer replays the saved commands using the frozen rules recorded with each round.
Legacy top-level list exports are intentionally unsupported.
It depends on the launch method:
- a source checkout without
BATLLM_HOMEwrites configuration tosrc/configs/config.yamland relative sessions inside the repository; - when
BATLLM_HOMEis set, mutable configuration and relative session folders resolve below that directory; - Homebrew sets
BATLLM_HOMEto~/Library/Application Support/BatLLMby default; - release bundles currently keep state relative to the extracted bundle unless the variable is set manually.
See STATE_AND_INSTALLATION.md.
Yes. If Ollama is already installed, running, and reachable at the configured host and port, BatLLM can use it without the in-app service controls.
Open History. The most common cause is that the model returned prose or another string that did not match one valid command. Also inspect the Ollama output log for service or timeout failures.
At minimum:
python run_tests.py non-live
python tools/check_docs.pyUse the area-specific guidance in CONTRIBUTING.md, and run stateful live or install-level checks only when their side effects are acceptable.
