Skip to main content

dcssvox

Hands-free voice control and narration for Dungeon Crawl Stone Soup, built for playing on a phone under Termux with headphones and a mic.

You say what to do; it reads back what happened. No keyboard, no screen-staring.

you:  "explore"
it:   "You encounter a bat."
you:  "attack east"
it:   "You hit the bat. Health 17 of 19."

Why it works

DCSS is turn-based and lives in a terminal, which makes it close to the ideal target for voice: nothing has a reaction window, and both the screen and the input are trivially machine-accessible. dcssvox runs crawl inside tmux and drives it from outside — keystrokes in via send-keys, the rendered screen out via capture-pane. crawl itself is never patched.

Three design rules, all aimed at someone whose hands are busy:

  • Never stuck. There is no keyboard to bail out with, so every modal state is recognised and has a spoken way out. recover() walks crawl back to normal play without needing to classify the state correctly.
  • Never surprised. Irreversible actions (quaff, drop, read, take off) are read back and wait for "yes" before a key is sent.
  • Never guessing. Item and spell names are matched against the letters crawl just printed on screen, not a hand-maintained table. If nothing matches convincingly it says so instead of pressing something.

Speech priority comes from crawl's own message channels: dcssvox pins each of the 30 channels to a colour in its generated rc, so the SGR code on a message row is an exact, language-independent priority signal. "An endoplasm is nearby!" is urgent; "The endoplasm barely misses you." is not read at all.

Install (Termux)

pkg install crawl tmux git cmake clang make
pip install dcssvox
dcssvox doctor          # tells you what's missing

For speech output also install the Termux:API app (from F-Droid) plus pkg install termux-api. For voice input:

dcssvox setup           # builds whisper.cpp + fetches tiny.en (one time)
dcssvox play

Watch the game on screen any time with tmux attach -t dcssvox.

Without a mic

dcssvox type runs the exact same loop with typed input — useful for testing the command vocabulary, and it works on any Linux box.

Vocabulary

Say Does
explore / keep going auto-explore until something happens
north, go east, southwest move one square
run north travel in a direction
attack east attack an adjacent monster
rest / wait long rest / pass one turn
downstairs / travel to the stairs descend / auto-travel
what's around read the monster list (no turn used)
status / where am i health, magic, statuses, location
inventory read what you're carrying
quaff curing / read blinking / wield mace menu actions by name
stop / cancel interrupt, back out of anything
again repeat the last thing said
what should I do situation summary (needs --llm)

Anything outside the vocabulary is dropped in silence rather than guessed at — with an always-on mic that refusal is the whole safety model.

Optional: the Claude tier

pip install 'dcssvox[llm]'
export ANTHROPIC_API_KEY=...
dcssvox play --llm

Everything ordinary still runs on the local grammar — offline, instant, free. Claude (Haiku 4.5) is consulted in exactly three places:

  • Long item and spell names. "Borgnjor's Vile Clutch" is what a recogniser mangles and what token matching handles badly. Only fires when local matching is weak or torn.
  • Phrases outside the vocabulary. "get me out of here", "chug a heal". With no keyboard, an unparsed command is a dead end, so this is a safety net more than a convenience.
  • "what should I do" — two sentences on your situation.

It is grounded and cannot invent: the letter enum is built from the letters crawl just printed, the command enum is built from the local grammar, and its answer is re-parsed by that same grammar before anything is pressed. Every failure — no key, timeout, network drop — falls back to the local grammar rather than wedging the game. Irreversible actions are still confirmed aloud whether you said them or Claude inferred them.

Status

Alpha. The deterministic loop is verified end-to-end against crawl 0.34.1. The whisper.cpp listener and Termux TTS are written but not yet exercised on a real device.

License

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dcssvox-0.2.1.tar.gz (34.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dcssvox-0.2.1-py3-none-any.whl (34.1 kB view details)

Uploaded Python 3

File details

Details for the file dcssvox-0.2.1.tar.gz.

File metadata

  • Download URL: dcssvox-0.2.1.tar.gz
  • Upload date:
  • Size: 34.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.6

File hashes

Hashes for dcssvox-0.2.1.tar.gz
Algorithm Hash digest
SHA256 7e6588b8cc6a060e073e49a868951a856fec6819989df27296fe599470ac4894
MD5 f46fd3ecf805a5d1addd26647e0f1e98
BLAKE2b-256 e551a6539d52d06aaed7caad3a4092a8d412b678530cfa94d69434b9329903f1

See more details on using hashes here.

File details

Details for the file dcssvox-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: dcssvox-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 34.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.6

File hashes

Hashes for dcssvox-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 3526c2329bdc30164e3f858667acd75cb5107e81494641722ec6d0acff9be90b
MD5 c763dd9a3d020c5ba6c0132cf395030d
BLAKE2b-256 e0d4174c48df263e9a4aead1b3a217921290e0ba6ed043f31dba10ac4ab53e4e

See more details on using hashes here.

Release history Release notifications | RSS feed

0.12.1

2 files

0.12.0

2 files

0.11.1

2 files

0.11.0

2 files

0.10.6

2 files

0.10.5

2 files

0.10.4

2 files

0.10.3

2 files

0.10.2

2 files

0.10.1

2 files

0.10.0

2 files

0.9.3

2 files

0.9.2

2 files

0.9.1

2 files

0.9.0

2 files

0.8.3

2 files

0.8.2

2 files

0.8.1

2 files

0.8.0

2 files

0.7.1

2 files

0.7.0

2 files

0.6.0

2 files

0.5.0

2 files

0.4.0

2 files

0.3.1

2 files

0.3.0

2 files

This release

0.2.1 This release

2 files

0.2.0

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page