A CLI and library for managing TA bookings, course schedules, sign-up sheets, employment contracts, time tracking, and task management. Every interactive workflow has a scriptable equivalent, so repetitive tasks can be handed off to Cron or AI agents.
Maintain a set of course registries (directories of course data), add or remove courses, and configure per-course settings such as Canvas URLs and TimeEdit ICS links.
nytid courses ls
nytid courses new DD1310
nytid courses config DD1310Display a unified schedule that merges course events, external ICS calendars, and pending tasks. Export the result as an ICS file for import into any calendar application.
nytid schedule show
nytid schedule next # every detail of the next event, links included
nytid schedule ics > schedule.ics
nytid schedule external add https://cloud.timeedit.net/…Generate CSV sign-up sheets from the course schedule so that TAs can indicate which lab sessions they want to work. The sheets are designed for Google Sheets.
nytid signupsheets generate DD1310
nytid signupsheets set_url DD1310 https://docs.google.com/…Compute employment data from completed sign-up sheets: generate amanuensis contracts, produce time sheets for hourly-employed TAs, and summarize hours per course.
nytid hr amanuensis create DD1310
nytid hr timesheets generate DD1310
nytid hr time DD1310Instead of a time sheet for the extra (or missed) sessions of one period,
the difference can be carried into the next contract by letting --start
reach back before the contract period:
nytid hr amanuensis create DD1310 --period 25/26-2 --start 2025-08-25Track time spent on course activities with free-form labels. Start a label directly, or launch a command or tmux shell from the same entry point. View statistics, export to JSON/CSV/ICS, and edit past entries.
nytid track start DD1310 grading
nytid track start email --run mutt
nytid track stop
nytid track today
nytid track stats weeklyPriority-based task list with working-directory capture, notes, and GitHub issue
sync. Tasks can be started interactively or handed off to AI agents in headless
mode. Tasks can wait for other tasks: todo ready and todo next offer only
the tasks that nothing blocks, and the schedule view automatically slots those,
and the tasks already in progress, into free time. A task that others wait for
shares their urgency: it ranks as high as the most urgent of them and is due
when they have to start.
nytid todo add "Grade assignment 3" --prio 2
nytid todo ls
nytid todo ready
nytid todo start 5
nytid todo done
nytid todo syncA separate, minimal entry point that prints the current todo context and the
currently tracked labels as two machine-readable lines. In a tracked tmux
window the context is the chain from the root task down to the window's
current task (353>356>359, the task an ID-less todo done there would
complete); elsewhere it is the active todo ids. It skips the CLI's import
overhead so it is cheap enough to run on every shell prompt render:
readarray -t _nytid < <(prompt-nytid --who "$USER")
# ${_nytid[0]} = todo context, ${_nytid[1]} = tracked labelsnytid utils rooms set-url https://… "Sal A" "Sal B"pip install nytid
nytid courses registry add kth ~/courses
nytid courses new DD1310
nytid schedule shownytid keeps its configuration in ~/.config/nytid/config.json and its data
(todos, time tracking, caches) under ~/.nytid. Set NYTID_HOME to move all
of it at once, for example to try a new version or run a script on throw-away
data:
NYTID_HOME=/tmp/nytid-sandbox nytid todo lsThe configuration then lives in $NYTID_HOME/config.json and the data
directly under $NYTID_HOME.
For a full introduction and design overview, read the PDF found in the latest release.