Domino Data Systems · 2026

A topic goes in.A crossword comes out.

Shyamal Suhana Chandra's generator asks a local language model for questions, lays the answers on a square grid, and prints a puzzle, clues, and answer key. The published install is only for ARM64 on macOS. This page is the public brief. The source stays in the private repository.

1
A
I
2
D
S
3
T
4
O
N
E

The pipeline

One pass from a topic string to a US Letter PDF. Nothing in the topic is sent to a hosted model API.

  1. 01

    Topic

    CLI flags name the theme, size, model, and seed.

  2. 02

    Batches

    Ollama writes eight entries at a time as JSON.

  3. 03

    Filter

    Keep unique A–Z words. Drop clues that spoil the answer.

  4. 04

    Place

    Longest word across the middle, then crossings only.

  5. 05

    Print

    Blank grid, numbered clues, filled key, footer.

Operating numbers

These are the bounds in the paper, not a speed benchmark. A large local model spends most of the run inside Ollama.

Default grid
25×25
Any square from 5 to 40
Candidate batches
8
Entries per Ollama call
Answer length
3–12
Letters, never longer than the grid
Minimum words
8
Fewer placements stop the run
Read timeout
3 min
Per batch, then one retry
Default asks
80
Usable pairs before placement

Where a long run spends its time

Share of attention for a few hundred candidates. Placement and PDF writing are the short tail.

  • Topic and flags8%
  • Ollama batches72%
  • Word placement14%
  • PDF render6%

Read the PDFs

The paper, the talk, and the manual live in this site's public folder. The rest of the repository stays private.

Industrial-track paper

Why the generator is local, how batches and placement work, and what the PDF contains.

Open PDF

Presentation

Ten slides from the topic through the command line to the limits of the grid.

Open PDF

Reference manual

Every flag, example invocation, page layout, and error string.

Open PDF

From the paper

“The design favors a local model, bounded requests, and a deterministic seed so the same inputs can be reproduced.”

Themed crosswords show up in training handouts, event programs, and classrooms. Hosted model APIs are a poor fit when the topic is internal or the machine must work offline.

From the slides

“A local Ollama model writes short questions and one-word answers.”

  • Default server: http://127.0.0.1:11434
  • A new word must cross a letter already on the grid.
  • Clue form is checked. Facts are not.
  • The grid is playable. It is not a symmetric newspaper grid.

Release v0.1.0 · ARM64 macOS only

Install with Homebrew

Only for ARM64 on macOS. If Homebrew is not installed yet, run its install script first. Then trust the tap, tap it, and install. The formula downloads the public v0.1.0 build and installs the crossword manual page.

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
echo >> ~/.zprofile
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
brew trust --tap Domino-Data-Systems/crossword
brew tap Domino-Data-Systems/crossword
brew install crossword

Then start Ollama on the desktop

Install the macOS app from ollama.com/download/mac. Open Ollama and leave it in the menu bar. That icon is the daemon for this generator. Pull gpt-oss:20b while it is running, and pass that model to crossword.

ollama pull gpt-oss:20b
crossword --topic "the solar system" --model gpt-oss:20b --verbose

Step by step

  1. 01

    Install Homebrew

    This release is only for ARM64 on macOS. Run Homebrew's install script in Terminal. The next two lines put brew on your PATH for this shell and for new zsh sessions. Skip this step if brew already works.

    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
    echo >> ~/.zprofile
    echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
    eval "$(/opt/homebrew/bin/brew shellenv)"
  2. 02

    Trust the tap

    Homebrew will not load a third-party tap until you trust it. This trusts the public Domino Data Systems crossword tap, including the v0.1.0 formula.

    brew trust --tap Domino-Data-Systems/crossword
  3. 03

    Tap the repository

    The tap is the public repository homebrew-crossword. The application source stays private. v0.1.0 installs only on ARM64 macOS.

    brew tap Domino-Data-Systems/crossword
  4. 04

    Install the release

    This installs crossword 0.1.0 and its manual page on ARM64 macOS only. Intel Macs and other systems are not part of this release. Then open the manual.

    brew install crossword
    man crossword
  5. 05

    Install the Ollama menu-bar app

    Download the macOS app from ollama.com. Open it once and leave the llama icon in the menu bar. That app is the local daemon and serves http://127.0.0.1:11434. Quit it from the menu bar only when you want the server to stop.

    open https://ollama.com/download/mac
  6. 06

    Pull gpt-oss:20b

    Pull gpt-oss:20b while the menu-bar app is running, then confirm the server lists it. Pass that name with --model. The crossword command still defaults to llama3.2 if you omit it.

    ollama pull gpt-oss:20b
    curl -sS http://127.0.0.1:11434/api/tags
  7. 07

    Run it

    The PDF has a blank grid, clues, and an answer key. The seed is printed so you can retry placement.

    crossword --topic "Billy Joel" --size 30 --model gpt-oss:20b --verbose