{"id":198,"date":"2026-07-05T12:50:22","date_gmt":"2026-07-05T10:50:22","guid":{"rendered":"https:\/\/projects.dejvino.com\/w\/?p=198"},"modified":"2026-07-30T19:51:03","modified_gmt":"2026-07-30T17:51:03","slug":"splinter-keep-llm-driven-terminal-rpg","status":"publish","type":"post","link":"https:\/\/projects.dejvino.com\/w\/splinter-keep-llm-driven-terminal-rpg\/","title":{"rendered":"splinter-keep | LLM-driven terminal RPG"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">A terminal RPG where an LLM acts as dungeon master: narrating scenes, offering choices, resolving actions, and rolling dice against a simple d6 rules system, all inside one TUI app. Every turn gets appended to a story book, producing a readable narrative log of the whole campaign.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Built to run against a local LLM on a personal GPU as well as hosted APIs (OpenAI, Anthropic, Groq, etc. via litellm), with structural guardrails \u2014 a strict per-turn output format plus a second, separate LLM call that validates each action before it&#8217;s narrated \u2014 needed to keep smaller local models playable.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/projects.dejvino.com\/w\/wp-content\/uploads\/2026\/07\/image.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"739\" src=\"https:\/\/projects.dejvino.com\/w\/wp-content\/uploads\/2026\/07\/image-1024x739.png\" alt=\"\" class=\"wp-image-199\" srcset=\"https:\/\/projects.dejvino.com\/w\/wp-content\/uploads\/2026\/07\/image-1024x739.png 1024w, https:\/\/projects.dejvino.com\/w\/wp-content\/uploads\/2026\/07\/image-300x217.png 300w, https:\/\/projects.dejvino.com\/w\/wp-content\/uploads\/2026\/07\/image-768x555.png 768w, https:\/\/projects.dejvino.com\/w\/wp-content\/uploads\/2026\/07\/image-100x72.png 100w, https:\/\/projects.dejvino.com\/w\/wp-content\/uploads\/2026\/07\/image-150x108.png 150w, https:\/\/projects.dejvino.com\/w\/wp-content\/uploads\/2026\/07\/image-200x144.png 200w, https:\/\/projects.dejvino.com\/w\/wp-content\/uploads\/2026\/07\/image-450x325.png 450w, https:\/\/projects.dejvino.com\/w\/wp-content\/uploads\/2026\/07\/image-600x433.png 600w, https:\/\/projects.dejvino.com\/w\/wp-content\/uploads\/2026\/07\/image-900x650.png 900w, https:\/\/projects.dejvino.com\/w\/wp-content\/uploads\/2026\/07\/image.png 1281w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Status: Finished.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Project page: <a href=\"https:\/\/git.dejvino.cz\/dejvino\/splinter-keep\">https:\/\/git.dejvino.cz\/dejvino\/splinter-keep<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>A terminal RPG where an LLM acts as dungeon master: narrating scenes, offering choices, resolving actions, and rolling dice against a simple d6 rules system, all inside one TUI app. Every turn gets appended to a story book, producing a &hellip;<\/p>\n<p class=\"read-more\"> <a class=\"more-link\" href=\"https:\/\/projects.dejvino.com\/w\/splinter-keep-llm-driven-terminal-rpg\/\"> <span class=\"screen-reader-text\">splinter-keep | LLM-driven terminal RPG<\/span> Read More &raquo;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,2,65],"tags":[34,89,15,10,90],"class_list":["post-198","post","type-post","status-publish","format-standard","hentry","category-finished","category-games","category-software","tag-ai","tag-llm","tag-python","tag-rpg","tag-textual"],"_links":{"self":[{"href":"https:\/\/projects.dejvino.com\/w\/wp-json\/wp\/v2\/posts\/198","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/projects.dejvino.com\/w\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/projects.dejvino.com\/w\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/projects.dejvino.com\/w\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/projects.dejvino.com\/w\/wp-json\/wp\/v2\/comments?post=198"}],"version-history":[{"count":1,"href":"https:\/\/projects.dejvino.com\/w\/wp-json\/wp\/v2\/posts\/198\/revisions"}],"predecessor-version":[{"id":200,"href":"https:\/\/projects.dejvino.com\/w\/wp-json\/wp\/v2\/posts\/198\/revisions\/200"}],"wp:attachment":[{"href":"https:\/\/projects.dejvino.com\/w\/wp-json\/wp\/v2\/media?parent=198"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/projects.dejvino.com\/w\/wp-json\/wp\/v2\/categories?post=198"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/projects.dejvino.com\/w\/wp-json\/wp\/v2\/tags?post=198"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}