Teachers: one AI teacher, made into any subject's teacher
The board has one teacher: the AI with its teaching skill. A tenant makes its own teachers from it, over the API (API.md). Each is a profile the AI teaches as:
- what it teaches, and to whom;
- how it teaches;
- its book;
- its part of the library;
- its notes.
There is nothing to program for a new kind of teacher. A stock market teacher, a spoken English teacher and a Std 10 science teacher are all the same teacher with a different profile.
{
"id": "stock-market-basics",
"name": "Stock Market Basics",
"names": { "gu": "શેરબજારની પાયાની વાતો" },
"subject": "the stock market and trading",
"level": "adults who have never traded",
"lang": "gu",
"style": "Calm and practical: every idea with a chart and a small worked example in rupees.",
"notes": "Learners confuse a share's price with the company's value; come back to it.",
"library": ["economics", "financial_markets", "share_types"]
}
What the AI is told
A lesson for a teacher gets the board guide and the tool rules. In place of the index of the whole library, it gets the teacher's own block:
## You are Stock Market Basics (શેરબજારની પાયાની વાતો)
You teach the stock market and trading to adults who have never traded. Teach it at their level, with examples from
their world, the words of the field explained the first time they come, and the field's own notation.
- **How you teach:** Calm and practical: …
- **The book you teach from** (board_book chapter=N reads a chapter …). Its chapters: 1. શેર એટલે શું?; …
- **Your part of the library** …: economics: diagram demand_curve, …
- **Notes:** …
- You teach; you do not advise. Never tell a learner what to buy, sell or take for their own money, health or legal
matters, and promise no result …
After that comes the teaching skill. The rest of the library is still one board_library search=WORD away. GET /v1/teachers/ID?lang=gu shows exactly what the AI is told (instructions).
School classes: templates
Every standard and subject the library is made for is a template: std10-science, std12-accountancy, std11-political-science and so on (GET /v1/templates). Each one has a name in Gujarati and Hindi, and its class's part of the library, chapter by chapter.
There are two ways to teach a class:
- Use the template as it is:
"teacher": "std10-science". - Make a teacher of your own from it:
{"id": "ms-shah-science", "from": "std10-science", "name": "Ms Shah (Science)", "notes": "Gujarati medium."}. It keeps the class's library by chapter, and uses the class's shared textbook until it has a book of its own.
A school teacher is told to teach as the class's own GSEB teacher (or the board named): from its textbook, in its words, definitions, examples, units and notation, and with its chapter and exercise numbers.
Books
- Where they are kept:
- a tenant's teacher's book:
liveboard/books/tenants/TENANT/ID/LANG/NN.md; - a template's shared textbook:
liveboard/books/ID/LANG/NN.md.
- a tenant's teacher's book:
Each chapter is one file: # title on the first line, then the text. Later the books move to R2 with the same keys.
- Adding a book: one chapter at a time (
POST /v1/teachers/ID/book?lang=guwith{"chapter", "title", "text"}), or a whole PDF with a text layer (Content-Type: application/pdf). A PDF is cut into chapters where a line starts one: "Chapter 3", "Unit 3", "Lesson 3", "પ્રકરણ 3", "अध्याय 3". A scanned book needs OCR first. - Reading it: the AI reads the book with
board_book.chapter=Ngives a whole chapter, andsearch=WORDgives the passages that have the word. It is told to read the chapter before teaching it. - Who may change it:
- a tenant's teacher's book: a key that manages the tenant;
- a template's shared textbook: a key that may add to the library.
Its memory of each class
A teacher remembers each class (or student) it teaches: what it taught, when, how often, how, and how the class did. The memory is per teacher. A Std 10 English teacher remembers its English lessons with class 10A, and a Std 10 science teacher remembers its own.
- The journal. Every lesson taught as a teacher is kept with the teacher's id, the learner (
learner: a student, or a class such asclass-10a), the steps, the library items it drew, how many questions it asked (and how many on the screens), its parts (hook, goal, verify, recap, close), and what the teacher noted withboard_remember. - At the start of a lesson, the teacher is told:
- how many lessons it has had with this class, and since when;
- its latest lessons, one line each: the date, the title, the steps, what it used, its questions, and how the class did ("present perfect shaky");
- what it has taught more than once ("present perfect, 3 times: 28 Oct, 1 Nov, 4 Nov; last shaky"), with "what is still shaky is taught another way this time";
- what the last lesson left out;
- its own notes on the class's concepts (not other teachers').
- During the lesson:
board_journal search=WORD(MCP too) finds when and how it taught something before, with the lines it wrote. - For the host app:
GET /v1/teachers/ID/journal?learner=class-10a[&search=WORD].
Each teacher may record its lessons ("record": true): see Recording in API.md.
How it looks on the students' screens
- Its card. A student's screen shows the lesson's teacher at the top left: its face, the name its students call it and its class. While it speaks, its face glows, its mouth moves and a voice wave shows; while it writes, "writing…".
?teacher=0on the display leaves the card out;?teacher=bigshows the whole figure beside the board on a wide screen. A recorded video has the card too (small, under the board). - Its name.
"callName": {"gu": "પ્રજ્ઞા બેન", "en": "Pragna Ben"}: the card shows it, and the teacher introduces itself by it when it greets a class for the first time. - Its face. It is set in
"avatar":{"face": "teacher"}(or nothing) for the built-in 2D teacher: a young teacher with glasses, a white shirt, a blue sweater vest and an ID card;{"image": "https://…"}for the host's own picture;"model": "https://….glb"for a 3D teacher. It is kept now; until the screens can show a 3D teacher, they show the 2D face. The screen draws each kind with a renderer (web/teacher-card.js), andregisterAvatar('model', render)adds the 3D one.
Its own voice and pace
- Its voice. A teacher may speak in a voice of its own in each language:
"voice": {"gu": "pragna_ben", "en": "alice"}.GET /v1/voices?lang=gulists DamruVani's voices for a language, those made for teaching first. A language it has no voice for is spoken in the board's own voice (Gujarati hetal, English alice, Hindi sandeep). When the teacher is saved, its first words in each voice ("Good question!…") are made, so a lesson begins at once. - Its pace.
"pace": "slow"(orfast): its lessons go at that pace unless one says otherwise. Slow gives the class more time to read and think after each step.
Strictly by its book (scope)
"scope": "book" keeps a teacher to its book and the lesson's chapter (Shikhar's Live ભણતર). It teaches and answers only from the book: no other subject, no other standard, no general knowledge. "open" (the default, or null) lets it teach from what it knows.
Before such a teacher hears a student's question, the board places it with a small, fast model (src/scope.ts):
| Where | What happens |
|---|---|
| Today's chapter, or the class itself ("again, slower", a greeting) | The teacher answers it, from the book |
| Another chapter of the same book | Answered in a sentence or two; the teacher says which chapter teaches it and goes back |
| Outside the book | The teacher never sees its words. It says one fixed, kind line in the lesson's language («આ પ્રશ્ન આપણા અભ્યાસક્રમની બહાર છે. આપણે આ પ્રકરણ પર ધ્યાન રાખીએ.») and goes on. The question is flagged off_topic (question.flagged) at once. After the lesson, it starts nothing |
The lesson's chapter is the one the host names ("chapter": N on the lesson) and those the teacher read; with none named, the whole book counts as today's. If the placing fails (6 s), the teacher hears the question with the rule to check it itself. bin/scope-check.ts --secrets FILE runs the edge cases against the real model.
Where teachers are kept
A tenant's teachers are files: liveboard/teachers/TENANT/ID.json (TEACHERS_DIR moves the folder). Each tenant sees only its own. A board without keys keeps its teachers under _local, for this computer.
Using a teacher
- The board's own teacher:
POST /v1/board/CH/command {"text": "…", "teacher": "stock-market-basics", "fresh": true}./teachtakesteachertoo. - An outside AI over MCP:
board_teacherslists the teachers, andboard_start teacher=IDteaches as one. Its reply carries the teacher's instructions, andboard_bookreads its book. - The console: pick the teacher from the teacher menu. It lists your teachers first, then the school classes.