Repository navigation
FAQ
When there are more than a few questions, when a question needs a clip, a sound or an image, or when the person will answer later rather than now. For one to four plain questions, ask.py inline gives a chat version (Commands). A single quick yes or no needs neither.
No. The server listens on 127.0.0.1 only, the page loads nothing from the network, and everything stays in the set folder (Server and security).
So the person can see what the agent would do, and the agent learns whether it was right (matched_guess). A low guess is hidden until the person asks for it, and read reports whether they opened it before picking, so a pick that only followed the guess can be told apart. The guess is never pre-selected, and never used to fill in an unanswered question.
The person wrote a note or attached an image without choosing an option. It is not a choice: read the note and, if it changes the question, ask again in a second round (Recipes).
read cannot tell you, and neither can the page. Record the pick as a fact and do not invent a reason or turn it into a rule from one silent pick. This happened in the first real film review run through askwright (lesson L-008 pick-without-reason in LEARNINGS.md).
A label that names the action ("Render tonight", "Wait until Saturday") still makes sense in the answers file and in a list of answers read weeks later; "Yes" does not. Positions ("Left", "B", "Option 2") are refused for the same reason. See position-label and confirm-yes-no on Lint rules and errors.
No. randomized states a fact about the clip. Set it true only when the sides were drawn at random; otherwise keep false and the warning, or remake the pair in random order. The skill was changed once because an eval run claimed true for a fixed-order clip (lesson L-005 randomized-is-a-fact).
Ids must start with a letter or a digit. Strip leading _, - and . from a file stem before using it as an id (lesson L-007 caller-ids-must-pass-lint).
ask.py add writes an "added" mark to events.jsonl, and done reflects the last mark. The person has new questions to see, so the set is no longer finished until they press "All done" again (Commands).
Use ask.py add <set> <file> --replace. It raises the question's rev, and the old answer is reported as stale (while still being listed as answered). Editing questions.json without raising rev leaves the old answer looking current (Recipes).
Yes, by the source: each serve gets its own free port and writes its own server.json (the wiki's run served its sets one after the other). A second serve of the same set while its server answers reports already_running and starts nothing.
Use H.264 video with AAC sound. With ffprobe installed, lint warns about other codecs. For the page tests the repository uses an installed Chrome or Edge, because the Chromium that Playwright downloads does not play H.264 (Development).
Yes, since 0.2.0: set "mode": "study". The page grades the multiple-choice questions on submit, shows why each option is right or wrong, and scores each topic; written answers wait for ask.py grade. See Study mode.
CI runs the ask.py tests on Windows, macOS and Linux with Python 3.9 and 3.14. This wiki's examples were run on Linux and Windows; macOS was not run for it. Use python3 there.
This wiki describes askwright 0.2.0 and was last updated on 2026-10-25. The skill is MIT licensed. Report problems in the issues. Download: askwright 0.2.0.
Using it
- Getting started
- Commands
- Question set format
- Lint rules and errors
- Server and security
- Study mode
- Figures
- Recipes
- FAQ
The releases
Contributing
Elsewhere