Both the web UI and the terminal share the same functions; the difference is that in the terminal you execute them with slash commands, while in the web UI the operations are available from the menu. In this guide, all commands are given as they are called from the terminal.
In the terminal, type one of the 2 commands:
otaku # for terminal otaku web # for web UI; default URL is http://localhost:9600
On first start, you choose a provider and a model: otaku automatically detects local LLM backends and lets you pick from their models. Cloud providers (OpenRouter, NanoGPT) are also in the picker — enter an API key and their catalogs appear — and the Generic OpenAI provider, first in the picker's panel, takes any other OpenAI-compatible server's URL and key. After you've chosen (or cancelled with Esc), you land at the prompt. The model picker is available later with the /model (Ctrl+O) command.
To give you an idea of the features and what play looks like, two sample stories are imported on first start. /stories lets you choose one or the other, and /lore, /cast, and /context show what otaku has built from each.
The command cheatsheet is available with /help.
From there, you can start your own story with the /new command. You can also import a SillyTavern chat with /import. Note that importing takes time, because it not only imports the messages but also extracts characters and scenes from them (more on that below), though you can cancel the extraction. You can also import a plain text file the same way; it will be split into messages.
You send messages as usual, as your persona; the LLM infers which character to play from the dialogue. There are helper commands — /you, /me, and /ooc — which only frame your prompt with minimal injections like "you play as …" (you can see and configure these templates in ~/.otaku/configs/prompts.toml).
Mid-prompt, there are also two helper commands: /ooc and /cue. Both wrap the text after them in an OOC block; the difference is that the /ooc block persists — right for a standing note to the LLM — while the /cue block is sent only once — right for one-time story steering.
A few example prompts:
I follow the keeper deeper into the vault. — plain play/ooc Keep replies under three paragraphs. — out of character, a standing note"Who goes there?" I whisper. /ooc the keeper does not know me yet — play with an aside"Come away with me," I tell the keeper. /cue she refuses — play with a one-time steer/me Keeper: You are late again. — hint to the LLM that you are playing Keeper now/you Keeper — tell the LLM to play as Keeper/you Keeper: she is furious — the same but with a directionFor D&D roleplay, there is the /roll command: /roll 1d20+5 I search the alcove rolls the dice, shows you what fell, and sends the result together with your action; /regen re-tells the same roll rather than re-rolling it. Dice examples: 2d6+3, d20, 2d20kh1/2d20kl1.
During play, you can /undo (Ctrl+U) the last exchange and /regen (Ctrl+R) the last reply.
You can import character cards into the story you are playing with the /card command, where you specify a card file to load (either PNG or JSON). The command automatically creates a character in the lore (see below), and the character greets you. The card is treated as a normal prompt — it's just that you are sending the card content as your message. The imported card can later be edited in the /cast browser, and the context will change accordingly.
You can browse the stories you've played with the /stories (Ctrl+T) command. From the stories picker, you can choose a story to continue from any message, or fork from there to another story. You can also fork a new version of the story you are playing with the /fork command. Forking copies all scenes, characters, journals, etc. to the new branch. Note that you can edit messages in the stories picker with the e key.
After you've sent around 50 messages, a summary pass starts automatically in the background once you've been idle for 5 minutes, so it doesn't disturb your roleplay. You can also run it on demand with /extract. You'll see a notification and its progress in the status bar, and you can keep playing meanwhile — replies will just be slower while it runs.
Once the extraction completes, you can browse and edit the extracted summaries and characters with the /lore and /cast commands. Summaries are editable, so you can correct them however you like.
The summaries only kick in once you have more than around 200 messages in the chat. The first 20 and the last 150 messages (both configurable) are always sent as is, to preserve maximum detail of recent story development and your prose style; everything in between is replaced with scene summaries. Even though summaries may exist up to the latest message, only the older ones are actually used. Nothing is included in the context by a condition or a trigger word.
The exact context composition, case by case, is described in context building. You can use the /context command to see what exactly will be sent to the LLM.
To restyle the web UI, create ~/.otaku/web/custom.css; it overrides styles in the bundled design. The custom properties it can set are listed in docs/web_tokens.md.
curl -LsSf https://otaku.sh/install.sh | sh
macOS · Linux · Windows