Contributing

September 16, 2026 ยท View on GitHub

Bug reports with a run folder attached are the most useful thing you can send. runs/<timestamp>/ holds the capture, the exact payload, and every probability, so a stall can be replayed offline with --image.

Ground rules

  • Keep the action set mutually exclusive. Two options that mean the same thing split the vote and read as low confidence.
  • The classifier picks; code decides facts. Anything the model would have to compute (dates, URL validity, whether a field is focused) is computed in code and handed over as state.
  • Free text only ever comes from writer.py, with a structured reply and a code-side guard.
  • Platform calls live in macos.py only.
  • Never add a path that types a password.

Before a pull request

uv run ruff check . && uv run ruff format .
uv run pytest -q

Add a replay-based note to the PR when a change alters what the model sees: which run folder, which step, what the decision was before and after.