Build AI Tutors for Your English Teaching Practice
You teach English. Your students need more practice than you have hours for. This guide walks you through building an AI tutor that handles practice between sessions — under your name, following your method, and only reachable by students you choose.
By the end, you'll have a tutor your students can text whenever they want to practice — from their phone (iOS or Android) or directly in a browser at app.mutiro.com. Both are free for students. You can read every conversation. You can step in and message as the tutor whenever you want to correct course. You decide who's allowed to message it.
What You're Building
A contact in your students' messaging app — something like @your-name-tutor. They text it the way they text anyone. It practices vocabulary, holds conversations at their level, gives feedback. When they ask "is this sentence right?", it answers with the kind of nuance you'd give — because you wrote its instructions.
A typical exchange might look like:
Student: I can't decide between "I have went" or "I have gone" — which one is right?
Tutor: "I have gone" is correct. "Went" is the simple past tense ("I went yesterday"); "gone" is the past participle, which is what "have" needs. Want to try a few more so it sticks?
That voice — corrective, warm, leaves the door open — is something you set in the tutor's instructions. The tutor never improvises a personality of its own; it inherits yours.
Before You Start
You'll need:
- A Mutiro account (free).
- An API key from one AI provider. Google Gemini has a generous free tier and is a good default; Anthropic Claude or OpenAI GPT work just as well.
- About 30 minutes for the first tutor. 10 minutes each for additional ones.
You don't need to be technical. You'll be writing in plain English, not code.
Step 1: Get Set Up
Install the Mutiro Desktop app from mutiro.com. Open it and create your account on first launch — fill in your email, pick a username (lowercase letters, numbers, and underscores), and write a display name. No password to remember; Mutiro emails you a code to verify.
Install the CLI:
Sign up:
Mutiro will email you a verification code; paste it back when prompted.
Optional: Polish Your Own Profile
Your display name and avatar appear in your conversations and in the perspective switcher we'll use later. If you want to upload a photo or change the name, do it now — or skip it; the tutor doesn't need it.
Click the gear icon in the lower section of the leftmost navigation strip to open User Settings. Upload an avatar, edit your display name, save.
The CLI takes a URL for the avatar; for direct image uploads, use the Desktop app.
Step 2: Create the Tutor
You're creating an agent named after the role it'll play — something like english-tutor or practice-coach.
In the leftmost icon strip, click Agents — the robot-face icon, second from the top. That's where you manage your owned agents.
Click the + button at the bottom of the agent list. The Create agent dialog opens with four fields:
- Agent directory — pick (or create) a folder where the tutor's files will live. The Desktop app will write the agent config and instructions there.
- Template folder — optional. Leave blank for the first tutor.
- Display name — "English Tutor". The username is auto-generated from this with a unique suffix (you'll get something like
english_tutor_X1W1). - Bio — "Your English practice partner".
Click Create agent. The Desktop app creates the agent, handles the API key, and the tutor appears in the list — already running.
Make a directory for the tutor and create the agent:
The output includes an API key starting with mut_key_. Save it now — it's shown only once. Add it to a .env file in the same directory:
Optional: Tutor's Avatar and Display Name
Every new agent gets a random avatar from Mutiro's pool — useful so the tutor doesn't show up faceless to your students. If you want to change the avatar (or tweak the display name you picked at creation), click the avatar + name area at the top of the agent's profile. The pencil icon next to the name opens an edit panel.
The CLI takes a URL for the avatar; for direct image uploads, use the Desktop app.
Skip this step if the random avatar and the name you picked at creation are good. The tutor works either way.
Step 3: Write the Tutor's Instructions
This is where the tutor learns from you. The instructions are a plain document that defines who the tutor is, how it talks, and what it does. The more specific you make it about your method, your corrections, your personality, the more the tutor will feel like an extension of you.
In Agents, select your tutor. The right panel shows its profile and configuration. Scroll to the Instructions section, click its edit (pencil) icon, and paste this template into the textarea — adjust to fit your style.
.agent_instructions.md in the agent's directory, and the tutor restarts automatically.Open the file .agent_instructions.md (created in the agent directory next to the config) in your editor. Paste this template and adjust:
That's a starting point. Read through it, change anything that doesn't sound like you. The tone, the strictness, the topics — all of it should feel like your voice.
Optional: Set Language and Voice
If your students will send voice messages — or you want the tutor to reply in spoken English — set the tutor's Language and Voice. These live on the same profile page as the bio and instructions.
At the top of the agent profile, you'll find a Language dropdown and a Voice dropdown. Language drives both audio transcription (when students send voice messages) and which voice options are available. Click the play button next to the voice to preview it before settling on one.
Edit .mutiro-agent.yaml:
The full voice catalog and language codes are in the voice guide.
You can skip this for now and come back later — text-only practice works fine without voice. But if your students benefit from pronunciation feedback, voice is what makes that real.
Step 4: Pick the LLM
Your tutor needs a language model to think with. Gemini, Claude, and GPT all work well for English tutoring — you can switch later if you want.
First time only — store your provider's API key. Click the lock icon in the leftmost navigation strip to open the Secrets vault. Click + Add Secret, set the name to GEMINI_API_KEY (or ANTHROPIC_API_KEY / OPENAI_API_KEY, depending on which provider you'll use), paste in the value, and click Save and Close. You only do this once — every agent you build from now on can use the same key.
Now back to the agent itself. In Agents, select your tutor and click the settings (gear) icon in the top-right of the profile. That opens the deeper configuration view.
In the Configure LLM section, pick a provider and model:
- Google Gemini — fast, free tier, a good default for getting started.
- Anthropic Claude — strong tone and nuance, especially for corrections.
- OpenAI GPT — broad knowledge, solid all-rounder.
The defaults for temperature, top P, max tokens, and tool iterations are fine for tutoring. Here's what the two most-asked-about knobs actually do, in case you ever want to nudge them:
Temperature (default
0.7) — how varied the tutor's phrasing is. Higher values (toward1.0) make the wording more creative — same idea expressed differently each time. Lower values (toward0.0) make the tutor more predictable and repetitive.0.7keeps it sounding natural without going off-script. For tutoring, that's the sweet spot: corrections feel consistent, but conversation doesn't feel canned.
Top P (default
0.9) — at each step, the model considers candidate next-words ranked by probability. Top P trims the bottom of the list.1.0keeps everything on the table;0.5keeps only the most likely half. Lower top P → tighter focus, more on-topic. Higher top P → small conversational detours.0.9is the standard for natural-language tasks; touch it if you want the tutor to feel chattier (raise) or more drill-like (lower).
Click Save.
Open .mutiro-agent.yaml and set the LLM provider and model:
Add your provider's API key to .env:
Step 5: Start the Tutor
The tutor starts automatically right after creation — its status indicator next to the name turns green. If it ever shows offline (after a restart, say), click the toggle in the agent's row to bring it back up.
Wait for the line that says "Connected to message stream." That's the tutor coming online.
Step 6: Test It Yourself
Before sharing with students, talk to the tutor for a few minutes the way a student would. Try a sentence with a small mistake. See how it corrects you. See how it follows up.
Switch back to Conversations — click the chat-bubble icon at the top of the leftmost navigation strip. Your tutor appears in your contacts list now that you've created it. Open the conversation and type a few sentences the way a student might.
Open a quick chat:
Or send a one-off message:
If the responses feel wrong — too formal, too casual, too brief, too verbose, missing nuance you'd give — go back to the instructions and tighten. The tutor learns from what you write there. Restart it after edits to pick up changes.
Step 7: Share It With Students
By default only you can message the tutor. To let students in, you grant access one by one by their Mutiro username — which means they need to sign up first to have one. The order is:
- Have your students sign up. They can do it in a browser at app.mutiro.com or with the mobile app (iOS or Android). Both are free.
- Collect their usernames. After signing up, each student has a handle that starts with
@. Ask them to send it to you (a quick message, email, whatever fits your class). - Grant them access:
In Agents, select your tutor and click the settings (gear) icon in the top-right to open the agent settings. Find the allowlist there and click the + button — an Add to allowlist dialog opens. Type the student's username and click Add. Repeat for each student.
Or several at once:
Allowlist grants permission, but the conversation still has to be started. That's Step 8 — and the cleanest way is to start it yourself, as the tutor.
Step 8: Open the Conversation
Each student needs an actual conversation with the tutor for it to show up in their app. The cleanest way to seed it is to start the conversation yourself, as the tutor. That way each student arrives to a warm welcome from their tutor instead of an empty contact, and you set the tone of the relationship from the first message.
In the Desktop app, look at the bottom-left corner of the screen — there's a small circle showing your avatar (or your initials, if you haven't set an avatar yet). Click it. A Switch Perspective menu opens, listing you and every agent you own. Pick your tutor.
You're now the tutor. In the Conversations view, click the + button at the bottom of the conversation list to open the New conversation dialog. Type the student's username and click start.
Send a welcome in character — short, warm, and clear about what the relationship is. Something like:
Hey @alice! I'm your English practice partner — Maria asked me to help you practice between your sessions with her. Tell me a bit about your day so far?
Repeat for each student. When you're done, click the avatar in the bottom-left again to switch back to yourself.
The CLI is already authenticated as the tutor (via MUTIRO_AGENT_API_KEY in your .env), so any message you send goes out as the tutor — no perspective-switching needed. Send a welcome to each student:
Repeat for each student.
The conversation now exists in the student's app. They can reply whenever they want, and from here the tutor takes over the day-to-day — you only need to switch back to the tutor's perspective when you want to step in (more on that below).
Watching the Tutor
You're the one behind this tutor. That means two things, both intended:
Every conversation is yours to read
You can open any of your tutor's chats and see what it's been saying to each student. The Conversation Info panel tells the student "your teacher can see what's said here" — no hidden surveillance, the disclosure is part of the design.
You can step in and message as the tutor
You already used the perspective switcher in Step 8 to send the welcome messages — same flow applies any time you want to take the keyboard back. Open the tutor's conversation with a student, click your avatar in the bottom-left, switch to the tutor, and anything you type sends as the tutor. To the student, nothing looks different. Click the avatar again to switch back to yourself.
Use it when:
- A student's last message got a wrong or weak answer from the tutor — type the correction yourself, in the tutor's voice.
- You want to add a personal note ("hey, I noticed you've been practicing a lot this week — nice work").
- You want to nudge a quiet student forward without breaking the tutor relationship.
The tutor's identity stays consistent for the student. They never see "Maria the teacher" interrupting; they see their tutor saying something. That's the point — the tutor is you, extended.
This is what makes the tutor an extension of your practice rather than a third-party service. The accountability and the data stay with you.
Going Further
Per-Student Folders and Per-Student Guidance
When you created the tutor, the yaml set user_workspace: ./users/${USERNAME} by default. That means each student gets their own isolated folder inside the agent's directory — the owner (you) works in the root, and students never see each other's files.
What lives inside a student's folder:
Downloads/— auto-created when the student sends an image, file, or voice message. The tutor sees those uploads as paths likeDownloads/homework.pdfand can read them.AGENTS.md— drop a markdown file with that exact name in a student's folder and the tutor reads it as student-specific guidance every time it's talking to that student. Genie picks it up automatically.
For example, in users/alice/AGENTS.md you might write:
When the tutor chats with Alice, it has that briefing in context. Put a different AGENTS.md in each student's folder and every student effectively gets a custom-briefed tutor — without you running multiple agents.
The owner workspace (the root, where you work) is yours to use too. Drop lesson plans, reference materials, or anything else there — the tutor can read those when you talk to it (e.g., "draft me a vocabulary set on travel for B1 students").
Share Materials Across All Students
When you want vocabulary lists, exam prep notes, or any reference material available to the tutor across all student conversations, point the tutor at a shared folder outside its workspace. The allowed_dirs config extends the tutor's sandbox so it can read (and write to) directories you specify.
Set it up. Pick a folder for shared material — anywhere on your machine, e.g. ~/Lessons/. Add the absolute path to .mutiro-agent.yaml:
Restart the tutor.
Add material through chat. Open your owner chat with the tutor (find it in your conversations view) and ask it to save things for you:
- "Save this vocabulary list at /Users/your-name/Lessons/b2-travel.md" — paste the text, the tutor writes it.
- Upload a file (PDF, doc, image) directly in the chat — it lands in your owner workspace's
Downloads/folder. Then: "Move that PDF to /Users/your-name/Lessons/textbook.pdf". - "What's in /Users/your-name/Lessons/?" — the tutor lists, summarizes, or pulls anything you ask about.
Use it during student conversations. Once material is there, the tutor can reference it when teaching students. You can prompt it in real time, or hint at it in a student's AGENTS.md:
Tools needed. readFile, writeFile, findFiles, searchInFiles are all enabled by default — nothing to configure for plain text and markdown. For PDFs and Word docs, enable viewDocument in the tutor's tools: list (it's opt-in by default). See configuration for the full catalog.
A note on write access. writeFile is available to every session by default — meaning a student could also ask the tutor to write into your shared folder, not just read from it. There's no per-directory permission today: the only knob is owner_only: true on the tool itself, which kills the student's ability to write anywhere (including their own workspace, which is legit). For now, two practical options:
- Keep shared materials non-sensitive. If the shared folder holds vocabulary lists and study notes, the worst a student can do is overwrite a copy you can restore. Acceptable for most teaching scenarios.
- Use level-specific tutors instead (next section). Each tutor gets its own
allowed_dirs, so students of one tutor can't reach another tutor's materials at all.
A proper fix — group-based read/write permissions on allowed_dirs — is on the roadmap; until then, those two patterns cover most cases.
Build Level-Specific Tutors
The tutor you just built handles all levels. To target each level more precisely, run the same setup again with different names and tightened instructions:
basics-tutor— vocabulary drills, present-tense conversation, lots of gentle correction.intermediate-tutor— past and future tenses, opinions, longer back-and-forth.advanced-tutor— idiomatic phrasing, debate, news topics.
Each tutor is its own contact. You decide which students get added to which.
Coordinator on Top
Once you have a few tutors, you can run a fourth agent — a coordinator — that helps you manage the practice. It can hold notes on each student's level, suggest which tutor to assign someone to, and answer questions like "how is Alice doing this week?". Coordinators are a more advanced setup; see agent recipes for patterns.
Voice and Other Channels
- Voice messages — students send a recording, the tutor transcribes it and replies in spoken English. Good for pronunciation practice.
- Scheduled check-ins — tell the tutor "send Maria a vocabulary review every weekday at 7pm" and it handles the timing on its own. See configuration → scheduling.
Run on a Local Model
If you prefer to keep everything local — for privacy, cost, or just curiosity — you can point the tutor at a local LLM via Ollama or LM Studio instead of a hosted provider. See configuration for the YAML setup.
Tighten Sharing and Security
If you're going to give the tutor to a larger group of students, take a moment to read sharing and security. Workspace isolation, what tools to enable, and what to remove for shared agents.