samayly.com is live. Hosted plans open soon. Join the waitlist →
Guide 15reference26 min read

Run it from anywhere

One Mac does all the work: Claude Code with the Sheets MCP, the bot, and the k3d cluster. Everything else is a way to reach it. This guide lists every way in, with copy-paste command lines, and the prompt behind every command.

Related: Guide 4 (the ts03 pack), Guide 5 and Guide 6 (iPhone, Tailscale), Guide 10 (formats, HTML), Guide 13 (bot messages), Guide 14 (routing and fixes). Class schedules: Guide 16. Jev router: Guide 17. Every guide and diagram by name: docs index.

Contents: 1 Map · 2 Which door · 3 iPhone · 4 MacBook Pro · 5 GUI · 6 CLI · 7 Bot · 8 Prompts · 9 Recipes · 10 Quick fixes


1. The map

Ways in: where each surface connects

Your Mac

Ways in

SSH

webhook

cache

message text only

📱 iPhone
Termius or Shortcuts

💻 Mac terminal
or SSH from another Mac

💬 WhatsApp
group or DM

🌐 Safari or browser
HTML report

ts03 command pack
Claude Code and Sheets MCP

ts03-bot
launchd service

Report server
port 8765

Indexer
05:00 daily

Schedule indexer
every 6 hours

k3d: WAHA pod
and digest CronJob

📊 Google Sheet

📁 Google Drive

📊 Course schedule sheet

Jev decider
optional, off by default


2. Which door for which job

Job iPhone SSH or Mac terminal WhatsApp GUI
Ask what's due ts03-week, ts03 <question> /week, @bot <question> HTML report in Safari, the Sheet
Change a row ts03-done GPU Quiz /done GPU Quiz (owner only) edit the Sheet directly
Draft a reminder ts03-wa /remind none
Study help none /prep <topic> none
Lectures, holidays, exams none /nlp, /cv, @bot when is the next NLP lecture? the course schedule Sheet
Share a styled report ts03-week --html, then ts03-link /html week (owner only) Safari
Check the bot launchctl, kubectl, logs /stats, /health (owner only) WAHA dashboard
Refresh the schedule cache ./scripts/ts03-schedule-index NLP (Mac), or launchctl start com.ts03.schedule-index (also over SSH) none the course schedule Sheet
Add study material launchctl start com.ts03.material-index after uploading none Drive subject folders
Publish the docs Mac terminal only none GitHub releases page

3. iPhone (Termius over SSH)

3.1 Once

On the Mac, turn on System Settings, General, Sharing, Remote Login, then:

bash
sudo systemsetup -getremotelogin     # Remote Login: On
hostname                              # e.g. Your-MacBook.local
ipconfig getifaddr en0                # e.g. 192.168.1.20
mkdir -p ~/.ssh && chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys           # paste the ONE public-key line from Termius
chmod 600 ~/.ssh/authorized_keys

In Termius: Hostname Your-MacBook.local (or the IP), Port 22, Username from whoami, your key. Set the Startup Snippet:

bash
source ~/.zshrc && clear && ts03-health

Away from home, put Tailscale on the Mac and the iPhone (same account) and point Termius at the Mac's Tailscale address:

bash
/Applications/Tailscale.app/Contents/MacOS/Tailscale ip -4     # the 100.x address
caffeinate -dimsu &                                             # keep the Mac awake

Keep the Mac plugged in with the lid open. A closed lid on battery sleeps and the SSH session drops.

3.2 First connection

bash
whoami && hostname
ts03-health          # google-sheets ... ✔ Connected
ts03-brief

If it says Not logged in, run claude, type /login, open the URL in Safari and approve. Then ctrl d.

3.3 Snippets worth saving in Termius

Name Command
Brief ts03-brief
Week ts03-week
Urgent ts03-urgent
Reminder ts03-wa
Health ts03-health
Report ts03-week --html && ts03-link
Next ts03-next
Audit ts03-check
Bot log tail -n 20 ~/Library/Logs/ts03-bot.log
WhatsApp pods kubectl get pods -n waha
Digest jobs kubectl get jobs -n waha

3.4 Bot, cluster and schedules from the phone

bash
tail -n 20 ~/Library/Logs/ts03-bot.log                      # what the bot just did
~/.local/bin/ts03-bot selftest                              # sandbox audit, must end with the green tick
launchctl kickstart -k gui/$(id -u)/com.ts03.bot.whatsapp   # restart the bot
launchctl start com.ts03.material-index                     # re-read the Drive folders now
cat ~/Library/Logs/ts03-material-index.log                  # what it found
launchctl start com.ts03.schedule-index                     # refresh the class schedule cache now
cat ~/Library/Logs/ts03-schedule-index.log                  # what it found
~/.local/bin/ts03-bot router-status                         # Jev router: decisions logged and failures
kubectl get pods -n waha                                    # WAHA should be 1/1 Running
kubectl get cronjob ts03-digest -n waha                     # the 08:00 and 22:00 schedule
kubectl get jobs -n waha                                    # one Job per brief
SECRET=$(kubectl get secret waha-secrets -n waha -o jsonpath='{.data.WAHA_API_KEY}' | base64 -d)
curl -s http://localhost:3100/api/sessions/default -H "X-Api-Key: $SECRET" | head -c 200   # "status":"WORKING"

launchctl kickstart works while you are logged in on the Mac. If launchctl list | grep ts03 prints nothing over SSH, use launchctl print gui/$(id -u)/com.ts03.bot.whatsapp | grep -E "state|pid" instead.

3.5 What not to run over SSH

macOS blocks SSH sessions from reading ~/Desktop, ~/Documents and ~/Downloads (you will see Operation not permitted). Your repo lives in ~/Desktop, so over SSH do not run ./scripts/... or git. Use the installed copy (~/.local/bin/ts03-bot) and launchctl start as above, and do those jobs from the Mac's own terminal. Keep credentials in ~/.config/mcp-credentials/, never on the Desktop.

3.6 Siri shortcut

Shortcuts app, new shortcut: Run Script over SSH (host, user, SSH key) with source ~/.zshrc && ts03-brief, then Speak Text. Add the Shortcuts app's own public key to ~/.ssh/authorized_keys.


4. MacBook Pro

4.1 Local terminal, or SSH from another computer

The same commands as the iPhone work in Terminal or iTerm on the Mac. From another computer:

bash
ssh <your-user>@Your-MacBook.local          # or the Tailscale name or 100.x address

Run these from the repo folder on the Mac's own terminal:

Script What it does Run
scripts/install-bot.sh deploys the bot as a launchd service (copies scripts/ts03-bot to ~/.local/bin) ./scripts/install-bot.sh whatsapp
scripts/ts03-bot selftest proves the member sandbox has no tools, no MCP, no file access scripts/ts03-bot selftest
scripts/ts03-material-index reads Drive subject folders into the /prep cache ./scripts/ts03-material-index or ./scripts/ts03-material-index GPU
scripts/ts03-schedule-index reads a class schedule sheet through the Sheets API into the bot's cache ./scripts/ts03-schedule-index NLP, plus --dry-run, --show NLP, --cell H22
scripts/ts03-docs-index writes docs/INDEX.md, every guide and diagram by name ./scripts/ts03-docs-index, or --check
scripts/ts03-bot router-… the optional Jev router: status, selftest, ask, eval scripts/ts03-bot router-selftest, router-ask <message>, router-eval --limit 40, router-status
scripts/install-report-server.sh always-on HTML report server on port 8765 scripts/install-report-server.sh, remove with --uninstall
scripts/ts03-render renders table, text, json, yaml, html (installed in ~/.local/bin) used by ts03 --table and friends
k8s/k3d-cluster.sh creates the k3d cluster on Colima see Guide 11
k8s/digest-cronjob.yaml the 08:00 and 22:00 brief kubectl apply -f k8s/digest-cronjob.yaml

Never use install-bot.sh whatsapp --uninstall to restart. It removes the service. Do not pass --digest: the CronJob owns the brief.

4.2 Services at a glance

Service Check Run or restart Log
Bot (com.ts03.bot.whatsapp) launchctl list \| grep ts03.bot launchctl kickstart -k gui/$(id -u)/com.ts03.bot.whatsapp ~/Library/Logs/ts03-bot.log
Indexer (com.ts03.material-index) launchctl list \| grep material launchctl start com.ts03.material-index ~/Library/Logs/ts03-material-index.log
Schedule indexer (com.ts03.schedule-index) launchctl list \| grep schedule launchctl start com.ts03.schedule-index ~/Library/Logs/ts03-schedule-index.log
Report server (com.ts03.reports) ts03-server scripts/install-report-server.sh none
Brief (CronJob ts03-digest) kubectl get cronjob ts03-digest -n waha kubectl create job --from=cronjob/ts03-digest ts03-digest-manual -n waha (posts to the group) grep digest ~/Library/Logs/ts03-bot.log \| tail
WAHA kubectl get pods -n waha kubectl rollout restart deployment/waha -n waha kubectl logs -n waha deploy/waha -f

5. GUI

Surface Where Use it for
WhatsApp app the group or a DM with the bot the bot, every command in Guide 13
Safari or Chrome http://<your-mac>:8765/latest.html (ts03-link prints it) the styled HTML report
Termius app iPhone SSH to the Mac
Shortcuts and Siri "tracker brief" a spoken brief
Google Sheet web or app the source of truth. You can edit rows by hand instead of /add, /done
Google Drive web or app drop slides and books into the subject folders, then re-index
Google Classroom web or app verify every deadline the bot shows
Course schedule Sheet web or app (view only for you) the source for /nlp and /cv: lectures, holidays, exams, slides, recordings
WAHA dashboard http://localhost:3100/dashboard on the Mac session status, re-linking the QR, event monitor at /dashboard/event-monitor
WAHA Swagger http://localhost:3100/ on the Mac send a test message by hand
GitHub the repo and its releases page the docs, release notes

The dashboard asks you to connect with the API key. Get it with kubectl get secret waha-secrets -n waha -o jsonpath='{.data.WAHA_API_KEY}' | base64 -d. Its username is admin and the password is printed at the top of kubectl logs -n waha deploy/waha unless you set WAHA_DASHBOARD_PASSWORD yourself. Do not paste either value into chats or commits.


6. CLI reference

6.1 The ts03 pack and the prompt each command sends

Every command ends up as claude -p --model sonnet "TS-03 tracker: <prompt>" with your ~/.claude/CLAUDE.md loaded.

Command Prompt it sends
ts03 <anything> TS-03 tracker: <anything>
ts03i, ts03-fix opens an interactive claude session for multi-step edits
ts03-today list items due today with subject, type, time and notes
ts03-tomorrow list items due tomorrow
ts03-week list items due in the next 7 days sorted by due date with days left
ts03-next what is the single next deadline and how many days and hours are left
ts03-overdue list items whose due date has passed but status is still Upcoming
ts03-urgent list items due within 3 days, most urgent first
ts03-brief give me a morning brief: due today, due this week, anything overdue, and one line on what to focus on first. keep it under 10 lines
ts03-month list everything due in the next 30 days grouped by week
ts03-all show all rows of the main tab as a compact table
ts03-load count upcoming items per subject and per week, and flag any week with 3 or more deadlines
ts03-plan build a simple day-by-day study plan for the next 7 days based on deadlines and points
ts03-points list upcoming items sorted by points or weightage, highest first
ts03-subjects list all subjects with professors from the reference tab
ts03-tbd list rows where any field is TBD, blank or missing
ts03-sub <subject> list all items for subject <subject> with due date, status and days left
ts03-prof <subject> who teaches <subject> and what is currently due for that subject
ts03-find <text> search all rows and notes for: <text>
ts03-add <item> add this item, fill defaults, then show the row you added: <item>
ts03-done <item> set status to Completed for: <item> then show the updated row
ts03-submit <item> set status to Submitted for: <item> then show the updated row
ts03-move <change> change the due date or time as follows, then show the updated row: <change>
ts03-note <item>: <text> append this to the Notes column of the matching item: <item>: <text>
ts03-check audit the main tab: wrong date formats, missing times, duplicate or out-of-order # numbers, subjects not in the reference tab. report only, do not change anything
ts03-health claude mcp list \| grep google-sheets
ts03-wa draft a short WhatsApp reminder for the group covering deadlines in the next 7 days. plain text, emojis ok, under 8 lines. Nothing is sent
ts03-short draft a one-line reminder for each item due in the next 3 days
ts03-link prints the report URL, http://$TS03_HOST:8765/latest.html
ts03-server shows the report server's launchd job and who holds port 8765

6.2 Layouts

The flag works at the start or the end, on ts03 and on every alias above:

bash
ts03 --table list all upcoming items
ts03-week --json
ts03-sub GPU Programming --text
ts03 what is due this week --yaml
ts03-week --html && ts03-link          # saved as ~/ts03-reports/latest.html

Layouts are --table, --text, --json, --yaml and --html. TS03_FORMAT=json sets a default for the session.

6.3 Claude Code

bash
claude -p "say hi"                      # one-shot, no session
claude                                  # interactive, then /login if asked
claude mcp list                         # google-sheets and google-drive should say Connected
claude mcp list | grep google-

6.4 Checks

bash
scripts/ts03-bot selftest                                    # on the Mac
~/.local/bin/ts03-bot selftest                               # same thing, works over SSH
python3 -m json.tool ~/.cache/ts03-material/GPU.json | head  # what /prep can see
./scripts/ts03-schedule-index --show NLP                    # what the bot has cached for the class schedule
ls -l ~/.cache/ts03-schedule                                 # the cache files and their age
ls -A | grep '^\.tmp_'                                       # in the repo, should print nothing

6.5 Git and releases (Mac terminal)

bash
git status --short
git add README.md docs                      # add folders by name, never git add -A
git commit -m "message"
git push
NEXT=$(git tag -l 'v*' | sort -V | tail -1 | awk -F. '{printf "%s.%d", $1, $2+1}'); echo "$NEXT"
git tag "$NEXT" && git push origin "$NEXT"
open "https://github.com/rpaut03l/google-sheets-mcp-guide/releases/new?tag=$NEXT"

6.6 Class schedule indexer

Command What it does
./scripts/ts03-schedule-index refresh every subject in ~/.config/ts03-schedules.json
./scripts/ts03-schedule-index NLP one subject
./scripts/ts03-schedule-index NLP --dry-run fetch and parse, print the summary, write nothing
./scripts/ts03-schedule-index --show NLP summarise the cache, no network
./scripts/ts03-schedule-index NLP --cell H22 print one raw cell as Google returns it, to check smart chips
./scripts/ts03-docs-index write docs/INDEX.md, the list of every guide and diagram

Setup and the config file are in Guide 16.

6.7 Jev router

Command What it does
scripts/ts03-bot router-status config, key present, decisions logged, agreement with the rules, recent differences
scripts/ts03-bot router-selftest one live call with two probe messages, finds the working request style
scripts/ts03-bot router-ask <message> probabilities, the rules' view and the decision for one message
scripts/ts03-bot router-eval --limit 40 replay the bot log through Jev: same, DIFF or ASK
nano ~/.config/ts03-router.json "mode" is off, shadow or on. Read on every message, no restart

~/.local/bin/ts03-bot takes the same commands over SSH. The key TS03_ROUTER_KEY lives in ~/.config/ts03-bot.env. Setup is in Guide 17.


7. The bot, and the question each command asks

Start with @bot or a /command. The full list with paste-ready group messages is Guide 13, and how a message is routed is Guide 14. For members each command below puts the question in the second column to the sandboxed model, with the snapshot as data. For you the slash commands run the terminal twin against the live sheet.

Bot command Question it asks Terminal twin
/today What is due today? ts03-today
/tomorrow What is due tomorrow? ts03-tomorrow
/week What is due in the next 7 days? ts03-week
/month What is due in the next 30 days? ts03-month
/next What is the single next deadline? ts03-next
/urgent What is due within the next 3 days, most urgent first? ts03-urgent
/overdue Which items are past their due date but still not completed? ts03-overdue
/brief Give a short brief: overdue, due today, due this week. ts03-brief
/all List every item in the tracker, all statuses. ts03-all
/points List upcoming items sorted by points or weightage, highest first. ts03-points
/tbd List items where any field is TBD, blank or missing. ts03-tbd
/plan Build a simple day-by-day study plan for the next 7 days based on deadlines and points. Max 12 lines. ts03-plan
/load Count upcoming items per subject and per week, and flag any week with 3 or more deadlines. Max 10 lines. ts03-load
/remind Draft a short friendly WhatsApp reminder for the group covering deadlines in the next 7 days. Emojis ok, under 8 lines. ts03-wa
/sub X List all items for the subject 'X' with due dates, status and days left. ts03-sub X
/prof X Who teaches 'X', and what is currently due for that subject? (answered locally from the subject list) ts03-prof X
/find X Search all item titles and notes for 'X' and list the matches. ts03-find X
/ask Q Q as written. For you: Read only, do not modify the sheet: Q ts03 Q
/subjects answered locally from the snapshot's subject list, no AI ts03-subjects
/prep T study guide for T, from Drive material when the topic matches a folder none
/nlp, /cv, /nlu the area word, then: What are the next 3 lectures, and are there any holidays, exams or breaks in the next 2 weeks? none
/nlp Q, /schedule NLP Q the area or subject word, then Q as written none
/add /done /submit /move /note (owner) the write prompts in 6.1 ts03-add and friends

8. Prompts

8.1 Read, in plain English (terminal)

bash
ts03 how many rows are in my tracker
ts03 anything due this weekend
ts03 which items are worth the most points this month
ts03 list items for Advanced AI with their notes
ts03 which subjects have nothing due in the next 14 days
ts03 how many days until the next quiz
ts03 compare the points due this week with next week
ts03 --table list every assignment that is not yet submitted
ts03 --json list items due before 15-Oct-2026

8.2 Write (terminal, and / commands for the owner)

bash
ts03-add GPU Quiz-02 on 11-Oct-2026 at 18:00 IST, 10 MCQs
ts03-done Ethics assignment
ts03-submit GPU assignment
ts03-move GPU Quiz to 12-Oct-2026 19:00 IST
ts03-note Innovation assignment: group of 4 finalised

In WhatsApp the same with a slash: /add …, /done …, /submit …, /move …, /note …. Writes are insert and update only. Deleting is blocked, and column J, the reference tab and the archive tab are never written. Be specific when two rows could match (GPU Quiz-02, not GPU Quiz), and send /refresh afterwards so members see the change.

8.3 Ask the bot in plain words (members and owner)

code
@bot any GPU Programming quiz coming up?
@bot what's due before Friday?
@bot is anything overdue?
@bot which items carry the most points?
@bot IP ka assignment kaise karna hai?
@bot GPU quiz kab hai?
@bot who teaches Advanced AI?
@bot when is the next NLP lecture?
@bot who teaches CV?
@bot is there NLP class on 9 October?
@bot who built you?
@bot can you edit the sheet?

Questions in Hindi or Hinglish get a Hinglish answer, and French gets French. "How do I do X" questions return the requirements and steps from the item's notes, never the finished work.

8.4 Study prompts

code
/prep CUDA
/prep GPU warp divergence
/prep memory coalescing
/prep patents vs copyright
/prep what is a trademark
@bot prepare me on tiled matrix multiplication
@bot explain me intellectual property rights from scratch
/prep GPU warp divergence table
/prep CUDA json

/prep explains concepts and declines to solve a pasted quiz, exam or assignment question.

8.5 Maintenance prompts for Claude on the Mac

bash
claude -p "Using the Google Drive tools, list every file directly inside the top-level Drive folder named GPU in My Drive."
claude -p "say hi"
claude mcp list

The first confirms the Drive connector works under the same settings the indexer uses. It lists names only and changes nothing.

8.6 Phrases that change the route

  • A message containing subject, course, professor, who teaches or TA is answered from the subject list, not by the model. If it also names NLP, NLU or CV, the schedule answers it.
  • "How do I prepare for X" goes to /prep, not to the tracker notes. Use "GPU quiz kaise karna hai" or "what do I need to submit for the GPU assignment" for the notes.
  • table, json and yaml change the layout of list answers only. /plan, /load and /remind are always plain text.

8.7 Class schedule prompts

code
/nlp
/cv
/nlp when is the minor exam
/nlp is there class on 9 October
/nlp how many lectures are left
/nlp slides for lecture 15
/nlp recording of lecture 7
/nlp who is teaching lecture 20
@bot when is the next NLP lecture?
@bot when is the next CV lecture?
@bot who teaches CV?
@bot who teaches NLU?
@bot is there FoVL class tomorrow?
@bot NLP mid sem break kab hai?
@bot when does the FoVL major exam start?

Name the subject or area (NLP, NLU, CV, FoVL). A bare "is there class tomorrow?" goes to the tracker, which has no class schedule. With the Jev router on, the bot asks which subject instead.

8.8 Jev router test messages

Send these in your DM once the router is on (Guide 17):

code
@bot NLU/NLP InClassActivity2 kaise karna hai?
@bot NLP lecture or assignment due?
@bot when is the next NLU lecture?
@bot who teaches CV?
@bot is there class on 9 October?
@bot explain the concept of perplexity
@bot who is the professor for GPU programming?
@bot tell me about nlp

Expected: the tracker, the tracker, the professors' sheet, the professors' sheet, a question back about the subject, /prep, the subject list, a question back about tracker or course sheet. Check each decision with scripts/ts03-bot router-status.


9. Recipes

Morning, from the iPhone 1. Open Termius, connect to the Mac. The startup snippet runs ts03-health. 2. ts03-brief, then ts03-urgent if anything is red. 3. If you want it styled: ts03-week --html && ts03-link, then open the link in Safari.

A new announcement 1. ts03-add GPU Quiz-02 on 11-Oct-2026 at 18:00 IST, 10 MCQs (or /add … in WhatsApp). 2. Check the row it shows back. 3. /refresh in WhatsApp so members see it. 4. ts03-wa and forward the draft, or let the 08:00 and 22:00 brief carry it.

After you submit something 1. ts03-submit GPU assignment 2. /refresh

Friday audit 1. ts03-check (report only). 2. Fix what it lists with ts03-move and ts03-note, or in the Sheet. 3. ts03-wa for next week's reminder.

Add study material for a subject 1. Create or open the Drive folder and drop in PDFs. Prefer text PDFs over PowerPoint. 2. Make sure the folder name is in ~/.config/ts03-subject-routes.json. 3. On the Mac: ./scripts/ts03-material-index "<folder name>". From the phone: launchctl start com.ts03.material-index, then cat ~/Library/Logs/ts03-material-index.log. 4. Restart the bot so it re-reads the routes: launchctl kickstart -k gui/$(id -u)/com.ts03.bot.whatsapp. 5. Test /prep <topic> and look for 📎 FROM YOUR MATERIAL.

The bot went quiet 1. kubectl get pods -n waha, then the session curl in 3.4. 2. If WAHA shows a QR: kubectl rollout restart deployment/waha -n waha, kubectl logs -n waha deploy/waha -f, scan it (or use the WAHA dashboard). 3. tail -n 20 ~/Library/Logs/ts03-bot.log and send /stats in a DM.

A classmate asks "is there class tomorrow?" 1. Ask them to name the subject: @bot is there NLP class tomorrow?. Without a subject the tracker answers, and it has no class schedule. 2. If the answer looks old, check the footer, then ./scripts/ts03-schedule-index NLP (or launchctl start com.ts03.schedule-index over SSH).

Add or change a class schedule 1. Edit ~/.config/ts03-schedules.json: sheet id, tab, aliases, and parts with the instructors. No restart. 2. ./scripts/ts03-schedule-index NLP --dry-run, then without --dry-run. 3. ./scripts/ts03-schedule-index --show NLP, then test /nlp in a DM.

Publish the docs (Mac terminal) 1. git status --short and check only the files you expect are listed. 2. Commit, push, tag and create the release page with the commands in 6.5.


10. Quick fixes

Symptom Fix
Connection closed over SSH, fine on the Mac credentials are in a protected folder. Move them to ~/.config/mcp-credentials/
Not logged in claude, then /login
ts03: command not found over SSH source ~/.zshrc (the Termius startup snippet does this)
Operation not permitted in ~/Desktop over SSH expected. Run repo commands on the Mac, use launchctl start and the installed ~/.local/bin/ts03-bot
ts03-health shows no google-sheets claude mcp list, then re-add per Guide 3
HTML link does not open ts03-server, then curl -sI "$(ts03-link)" \| head -1
Bot silent see "The bot went quiet"
Brief did not post kubectl get jobs -n waha, then grep digest ~/Library/Logs/ts03-bot.log \| tail
/prep ignores Drive material check the cache file in 6.4, then the indexer log
gh: bad CPU type in executable brew install gh, or publish the release from the browser
The bot says the schedule isn't loaded yet ./scripts/ts03-schedule-index NLP
no access (HTTP 403) from the schedule indexer share the course sheet with the Google account behind the Sheets MCP
"Is there class on 9 October?" gets "the tracker has no class schedules" name the subject: @bot is there NLP class on 9 October?
A second message got no reply wait 10 seconds between messages: the cooldown drops quick repeats
Jev router: HTTP 401 or No style worked in router-selftest check TS03_ROUTER_KEY in ~/.config/ts03-bot.env, then account_id or base_url, then paste the lines (Guide 17)
Jev router: the bot asks "which subject" for everything lower course_min in ~/.config/ts03-router.json, or set "mode": "off"

Questions or corrections: [email protected]