{"slug": "show-hn-noema64-an-open-source-llm-chess-engine-still-in-beta-though", "title": "Show HN: Noema64 – an open-source LLM chess engine (still in beta though)", "summary": "Noema64, an open-source chess engine that uses a large language model for strategic planning while relying on deterministic Go code for legal moves and game state, has been released in beta. The engine supports multiple LLM providers, includes a UCI interface, and offers a GUI built with Wails v2. It is designed for inspectable strategy memory and study workflows, not as a Stockfish replacement.", "body_md": "Noema64 is an open-source explainable chess engine that uses a language model as a persistent strategic planner while deterministic Go code owns legal move validation, game state, fallback, UCI protocol behavior, traces, and local persistence.\n\nIt is not a Stockfish replacement. The project is optimized for legal full-game play, inspectable strategy memory, provider failure recovery, study workflows, and protocol-safe UCI use.\n\n| Play workspace | Provider settings |\n|---|---|\n\nNoema64 includes:\n\n- Go chess core wrapper with legal moves, FEN, PGN, move history, outcomes, promotions, castling, and en passant through\n`github.com/corentings/chess/v2`\n\n. - Strategy memory v1.2 structs, diffing, versioned editable prompt packs, strict JSON parsing, candidate repair, and schema validation.\n- Mock provider that works offline, OpenAI, OpenAI-compatible HTTP, Anthropic, Gemini, Ollama, and local policy-prior provider adapters.\n- Deterministic fallback ladder that always chooses a legal move when legal moves exist.\n- Static blunderguard verifier plus optional external UCI verifier and external tablebase probe path support.\n- UCI binary with\n`uci`\n\n,`isready`\n\n,`ucinewgame`\n\n,`position`\n\n,`go`\n\n,`stop`\n\n,`quit`\n\n, and`setoption`\n\n. - Wails v2 GUI entrypoint with embedded board, time controls, recent games, settings, strategy, candidates, trace, resignation, PGN/FEN/JSONL trace export, and benchmark controls.\n- Study dashboard, compressed memory, plan coherence, candidate diversity, deterministic multi-agent review, and editable strategy memory APIs.\n- Chess960/custom-start metadata, deterministic Chess960 start generation, and Noema64-managed Chess960 castling through a compatibility layer.\n- Local backup/restore archives, fine-tune JSONL dataset export, deterministic tournament/rating automation, and sandbox validation for configured external binaries.\n- CLI and benchmark commands with JSON or CSV benchmark output.\n- Local YAML settings, JSONL decision traces, redacted game snapshots with strategy memory, tests, prompts, configs, and docs.\n\n- Go 1.22 or newer.\n- Node.js for frontend syntax and GUI smoke checks.\n- Wails v2 CLI for packaged desktop builds.\n- Optional: an OpenAI API key, local OpenAI-compatible LLM endpoint, or other cloud provider key.\n- Optional: a user-supplied UCI verifier such as Stockfish or an external tablebase probe. No verifier or tablebase binary is bundled.\n\nDownload packaged desktop builds from [GitHub Releases](https://github.com/ahmeddyounis/noema64/releases). Release assets are currently unsigned Windows and macOS builds, so your OS may show a security warning until code signing and notarization are added.\n\n```\ngo test ./...\nnpm --prefix cmd/noema64-gui/frontend test\ngo run ./cmd/noema64 -cmd state\ngo run ./cmd/noema64 -cmd engine\ngo run ./cmd/noema64 -cmd analyze -fen 'r1bqkbnr/pppp1ppp/2n5/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 2 3'\ngo run ./cmd/noema64 -cmd state -variant chess960 -seed 42\ngo run ./cmd/noema64 -cmd study\ngo run ./cmd/noema64 -cmd tournament -games-per-pair 1\ngo run ./cmd/noema64-bench -games 100\ngo run ./cmd/noema64-bench -games 100 -format csv > benchmark.csv\n```\n\nUCI smoke:\n\n```\nprintf 'uci\\nisready\\nucinewgame\\nposition startpos moves e2e4 e7e5 g1f3\\ngo movetime 100\\nquit\\n' | go run ./cmd/noema64-uci\n```\n\nGUI development:\n\n```\ncd cmd/noema64-gui\nwails dev\n```\n\nThe embedded frontend is static and works with Wails bindings. The mock provider is the default, so no API key is required. The GUI restores the most recent saved game, including clock and strategy state, from the configured log directory on relaunch.\n\nCI runs Go format/vet/tests, race tests for the non-Wails packages, frontend smoke tests, UCI smoke, trace validation, perft, dependency license scanning, non-GUI binary builds, and the 100-game reliability benchmark. The release workflow builds unsigned Windows and macOS desktop artifacts on native GitHub Actions runners and publishes them to draft GitHub Releases.\n\nRelease workflow details are documented in [docs/releasing.md](/ahmeddyounis/noema64/blob/main/docs/releasing.md).\n\n`pure`\n\n: provider candidates are repaired and legality-filtered; no tactical verifier is used.`current`\n\n: \"Best now\" mode; resets strategy memory for each decision and ranks current-position tactics/search over long-term plan continuity.`blunderguard`\n\n: default mode; static verifier can reject obvious mate-in-one risks and discloses assistance.`hybrid`\n\n: scoring reserves more weight for verifier/search-style signals.`coach`\n\n: uses the same legal pipeline with teaching-oriented personality settings.\n\nPersonality profiles are not display-only. Their risk tolerance is included in the arbiter as a small `personality_score`\n\non each candidate, so aggressive profiles can break close ties toward safe forcing moves while positional and coach profiles lean toward clearer low-risk choices.\n\nCurrent and hybrid modes record `deterministic_mcts_material`\n\nsearch assistance in the decision trace. It is a bounded deterministic playout scorer, not a claim of engine-strength MCTS.\n\nThe GUI toolbar includes Study and Lab dialogs. The same workflows are available from the CLI:\n\n```\ngo run ./cmd/noema64 -cmd study\ngo run ./cmd/noema64 -cmd agents\ngo run ./cmd/noema64 -cmd book\ngo run ./cmd/noema64 -cmd compare\ngo run ./cmd/noema64 -cmd backup -backup-dir runs/backups\ngo run ./cmd/noema64 -cmd finetune\ngo run ./cmd/noema64 -cmd tournament -games-per-pair 2\n```\n\nStudy returns compressed memory, opening-book suggestions, endgame trainer drills, plan coherence, candidate diversity, lesson/puzzle prompts, heatmap data, and deterministic strategist/critic/tactician/arbiter reviews. Lab workflows create local zip backups, restore backups into a target directory, compare pure vs hybrid analysis, compare prompt packs, build custom personality profile drafts, export local fine-tune JSONL examples from sanitized traces, and run engine-vs-engine tournament ratings across core modes.\n\nDefault config uses the offline `mock`\n\nprovider, so Noema64 can run without an API key.\n\nFrom the GUI, open Settings, choose a provider profile or provider, enter a model, then save. For `OpenAI`\n\n, the endpoint field is managed automatically and uses `https://api.openai.com/v1`\n\n; you only need the model and API key. For `OpenAI-compatible`\n\n, enter the endpoint for your local or remote compatible server.\n\nEnd-to-end cloud setup guides:\n\nSupported provider values:\n\n| Provider | Use case | Endpoint |\n|---|---|---|\n`mock` |\nOffline demos, tests, and CI | Not used |\n`openai` |\nOpenAI API | Managed automatically |\n`openai_compatible` |\nLocal or hosted OpenAI-compatible chat completions API | Required |\n`anthropic` |\nAnthropic Messages API | Configured endpoint |\n`gemini` |\nGemini generateContent API | Configured endpoint |\n`ollama` |\nLocal Ollama JSON chat | Configured endpoint |\n`policy_prior` |\nLocal exact-position policy-prior model | Model path |\n\nFor OpenAI in YAML, set the provider and model:\n\n```\nllm:\n  provider: openai\n  model: your-openai-model\n  api_key: \"\"\n```\n\nTo use another OpenAI-compatible endpoint in YAML, set:\n\n```\nllm:\n  provider: openai_compatible\n  endpoint: http://localhost:11434/v1\n  model: your-model\n  api_key: \"\"\n```\n\nProvider settings support `api_key`\n\nor `api_key_ref`\n\n. In the GUI, the keychain action stores a typed key in the OS keychain when supported and replaces the raw key with a reference.\n\nEndpoint-backed provider modes may send FEN, legal moves, move history, strategy memory, and settings to the configured provider, including OpenAI, Anthropic, Gemini, local or remote OpenAI-compatible endpoints, and Ollama endpoints. The GUI requires an explicit data-sharing acknowledgement before saving those providers. Raw prompt logging is off by default.\n\nStatic verification is built in. External UCI verification is optional:\n\n```\nverifier:\n  enabled: true\n  kind: uci\n  path: /usr/local/bin/stockfish\n  movetime_ms: 100\n  max_centipawn_loss: 180\n```\n\nNoema64 does not bundle Stockfish. When configured, the external UCI verifier analyzes LLM candidate moves with `searchmoves`\n\n, compares centipawn loss against the best candidate, and records verifier decisions in the trace.\n\nExternal verifier and tablebase paths are executed without a shell and are validated before launch. Simple PATH binary names such as `stockfish`\n\nare allowed; paths containing whitespace, control characters, path traversal, or non-executable absolute targets are rejected.\n\nExternal tablebase probing is also optional. Configure a probe executable that reads `{ \"fen\": \"...\", \"candidates\": [\"e2e4\"] }`\n\nJSON from stdin and returns exact tablebase JSON on stdout:\n\n```\nverifier:\n  tablebase_enabled: true\n  tablebase_path: /usr/local/bin/noema64-tablebase\n  tablebase_timeout_ms: 1000\nuci\nisready\nucinewgame\nposition startpos moves e2e4 e7e5 g1f3\ngo wtime 300000 btime 300000 winc 2000 binc 2000\nquit\n```\n\nThe UCI process writes protocol output only to stdout. JSON traces are written to local files when enabled. GUI game snapshots are stored under `logging.output_dir/games`\n\n.\n\nFor bot bridge usage, see [docs/lichess-bot.md](/ahmeddyounis/noema64/blob/main/docs/lichess-bot.md).\n\n- The static verifier is intentionally shallow.\n- Chess960 castling is handled by Noema64's compatibility layer rather than the upstream move generator.\n- LLM quality depends on the configured provider.\n- Raw prompts are not stored unless the user enables logging.\n\nNoema64 source is MIT licensed. Optional external verifier binaries retain their own licenses.", "url": "https://wpnews.pro/news/show-hn-noema64-an-open-source-llm-chess-engine-still-in-beta-though", "canonical_source": "https://github.com/ahmeddyounis/noema64", "published_at": "2026-06-17 10:23:54+00:00", "updated_at": "2026-06-17 10:53:15.818767+00:00", "lang": "en", "topics": ["large-language-models", "ai-tools", "ai-agents"], "entities": ["Noema64", "OpenAI", "Anthropic", "Gemini", "Ollama", "Stockfish", "GitHub", "Wails"], "alternates": {"html": "https://wpnews.pro/news/show-hn-noema64-an-open-source-llm-chess-engine-still-in-beta-though", "markdown": "https://wpnews.pro/news/show-hn-noema64-an-open-source-llm-chess-engine-still-in-beta-though.md", "text": "https://wpnews.pro/news/show-hn-noema64-an-open-source-llm-chess-engine-still-in-beta-though.txt", "jsonld": "https://wpnews.pro/news/show-hn-noema64-an-open-source-llm-chess-engine-still-in-beta-though.jsonld"}}