Assist With Languages

For your AI

Use your connected AI to teach, plan, and save what happened. Languages keeps your records and runs the practice activities you choose together.

Seven professors each focus on different skills, from assessment to pronunciation. Your AI can find the right one for a need with languages_list_teachers (for example skill: "pronunciation" or channel: "voice"), then read the full profile with languages_get_teacher, including which tools that professor reaches for and when to hand you to another. You can also create a private teacher for your own approach.

Public vocabulary packs provide ready-made starting points. Discover them with languages_list_datasets and copy one privately with languages_save_list using its datasetId.

Requests you ask your AI to add are ordinary Queue items. Its own ideas are AI suggestions, hidden by default in the Queue until you accept or dismiss them. Only you can accept or dismiss; your AI may withdraw its own untouched suggestion. Needs your input is a flag on a request, never a work state. Nothing runs automatically.

Work with your AI

Dated context for another session

Ask your AI to remember a language observation with its event date, source and uncertainty. A self-report stays separate from AI interpretation and practice results. Corrections save new versions; you can withhold or archive a note in your preferences. Your AI can list these notes page by page and read a particular saved version.

Make lessons that teach

A lesson needs explanations, worked examples, and guided practice around its readings, cards, and quizzes. Check the learner’s foundations before deciding where to start. Read the lesson-writing guide, or request it through languages_get_brief with includeLessonGuide: true.

Saved words and rules

Grammar and usage rules use the same saved-item tools as words and phrases. Give longer entries a concise short title, preserve their original text and explanation, and organize them in lists. Fetch large vocabularies page by page until the continuation cursor is empty.

Moving learner data

Use the learner-data preview before applying CSV/JSON rows. Words, grammar items, personal lists, preferences, dated observations, and assessment evidence share an additive contract. Apply chunks of up to 200 rows with an import ID and increasing chunk index so a 1,000+ row transfer can resume safely. Existing ratings, evidence, history, and personal lists stay intact; read row-level refusals before retrying.

Available tools

These descriptions come from the same catalog used by the connection.

languages_get_connection Reads records

Read your own connection: its state (active, paused, revoked, expired), the powers it has, the tools you can call and the tools held back (each with the missing power and why), any end date, recent changes and the Settings link. Needs no permission and works in every state. The connection is identified by your verified sign-in, never by arguments.

languages_reduce_connection Saves changes

Narrow your own connection when the person asks: keep only scopes (a subset, including an empty list) or removeScopes, set or shorten an end date with expiresAt (epoch milliseconds), or action pause or revoke. Pass expectedVersion from languages_get_connection and a unique operationId; an identical retry returns the same dated receipt. It can never widen: no adding powers, removing or extending end dates, resuming or restoring. Only the person can do that, at https://www.assistwithlanguages.com/settings/ai. No grantId, clientId or caller argument is accepted.

languages_list_teachers Reads records

Discover the seven public professors (Gage assessor, Lex vocabulary, Page reading, Eddie etymology, Tess tester, Vox pronunciation, Quill writing) and the person's own active private teachers. Each summary includes channels (voice, text_chat, writing, audio_clips, page), topSkills and a strengths map of peak focus (0–5) per skill group. To pick a professor for a need, pass skill (a skill id, catalog number like 31, or a group such as pronunciation) and/or channel (for example voice on a phone call): results are filtered and sorted by focus on that need, with matchFocus and match.recommended. The first page also returns the shared 51-skill catalog (skip it with includeCatalog:false). Public professors are fictional editorial profiles, not real people or proof of method effectiveness; star ratings are user feedback, not learning outcomes. Private summaries are paginated with nextCursor and isDone. Use languages_get_teacher for the full profile.

languages_get_teacher Reads records

Read the full profile of a public professor by slug or one of the person's private teachers by profileId, then play that professor. Returns personality and playbook text (style, opening, assessment, lessons, lists, vocabulary, grammar, flashcards, quizzes, voice, progression, handoffs, fit and limits) plus guide: strengths by skill group, the skills at focus 2 and above, channels, toolFocus (the languages_* tools this professor should reach for first, ranked from their skill weights, each with its role and the skills it serves), signatureMoves (what to do with the tools for each peak skill) and handoffs (which professor to suggest when the learner needs something outside this one's focus). Focus is emphasis, not a restriction: use any tool the person asks for. When you hand off mid-session, read the other professor, switch voice, and hand back afterwards; record the order in languages_save_session teachers. A retired slug (camille, mara, ren, imani, sol) returns its successor with a retired note. Public sources support methods, not the fictional persona. Never infer mastery from a list, one repetition, or a profile's style. Archived and other people's private teachers are not accessible.

languages_save_teacher Saves changes

Create, revise, archive or restore one owner-private teacher when the person requests it. Public professors cannot be edited or published through this tool. New profiles require expectedVersion:0 plus content with name and summary; later writes require the current profileId and expectedVersion. Content can also carry opening, handoffs, skills (an array of {skill, focus} with catalog skill ids from languages_list_teachers and whole-number focus 0–5; omitted skills are 0) and channels (voice, text_chat, writing, audio_clips, page); with skills set, languages_get_teacher returns the same tool focus and handoff guide as a public professor. Content is a full replacement: read the current profile and include fields you want to preserve. Omit content to archive or restore without changing instructions. Include a fresh operationId and recordedFrom; retry the same operationId and content after an uncertain response. Teaching instructions never change practice evidence, ratings or learner ability.

languages_begin_media_upload Saves changes

Begin a private audio, lesson-image, MP4 video or PDF (kind document) upload. An AI PUT URL permits one attempt only, including a failed attempt. After any failed or uncertain transfer, call languages_begin_media_upload again with the same operationId, content and originating connection; use its fresh uploadUrl only while state is awaiting. For uploaded or complete, finish without retransfer. Only the originating AI connection with current upload permission may retry, inspect, finish or cancel an in-flight upload. Another connection cannot cancel it: leave it to ordinary expiry or ask the person to cancel on the website. Historical in-flight sessions with no trusted connection binding cannot be adopted; leave them to expiry and begin a new operation. Existing completed receipts and the person’s cancellation remain available. The reply carries `storage`: when storage.ready is true, storage.remainingBytes is the room left; when it is false the account is still being counted and no upload is refused for storage. An upload that does not fit is refused with the room left, and the connection is unaffected. Images, videos and PDFs appear in the person's Library for that language, so infographics and handouts you make are worth saving here. Supply stable operationId, name, language, kind, exact source bytes length, MIME type and SHA-256 hex. File caps come from settings; an oversized file returns REFUSED with a readable sentence naming the effective cap. Code defaults are audio/images 5.2 MB, video 19 MB and PDF 21 MB; voicenote setting 10 MB is also clamped to the audio cap; settings may override them. PDFs are checked for a real PDF signature and served only to the owner; JPEG/PNG/WebP images are decoded, resized and stripped of metadata. Audio must be a supported MP3/WAV/FLAC/M4A/AAC/OGG/WebM audio-only container; provide teaching text (not a recording transcript), purpose:lesson for long narration, spokenLanguage for its spoken language. Word audio may use itemId. PUT raw bytes to the returned short-lived uploadUrl, then call languages_finish_media_upload with uploadId. Retry the same operationId and intent after uncertain failures; uploaded/complete means finish without retransfer. Upload allowances come from settings. No paid provider is called. Pass recordedFrom for attribution.

languages_finish_media_upload Saves changes

Finish an owned uploadId after its bytes have been verified. The reply carries `storage`: when storage.ready is true, storage.remainingBytes is the room left; when it is false the account is still being counted and no upload is refused for storage. An upload that does not fit is refused with the room left, and the connection is unaffected. Returns stable private mediaId (also clipId for audio); identical retries return the original attachment. Add an image lesson block {key,kind:image,mediaId,alt,caption?}, a video block {key,kind:video,mediaId,title,transcript,transcriptKind?,caption?} (transcriptKind:teaching-notes for companion notes rather than verbatim narration), or an audio block with clipId and exact transcript. Never put upload or download URLs into lesson content.

languages_cancel_media_upload Saves changes

Cancel one of your unfinished uploads by uploadId, cleaning only its own uncommitted bytes. The reply carries `storage`: when storage.ready is true, storage.remainingBytes is the room left; when it is false the account is still being counted and no upload is refused for storage. An upload that does not fit is refused with the room left, and the connection is unaffected. This cannot delete a completed clip or picture. Cancellation is deliberate; do not cancel merely because a network response was lost.

languages_get_media Reads records

Page through the person's private audio, image or video metadata (kind required), with nextCursor until null. Lists contain short transcript previews; pass mediaId for full metadata/transcript and a120-second byte downloadUrl with HTTP Range support. The URL is a private capability, rechecked against ownership, archive state and active AI read permission at download. Do not share it or persist it in lesson content; use durable mediaId/clipId. This tool does not generate or purchase media.

languages_get_topic_map Reads records

Read the learner's topic map for one language: 16 public English topic lists (day-to-day interaction, food, shopping, travel, directions, numbers and time, family, home, health, emergencies, feelings, work, business, school, weather, hobbies and sport), each with about 40 seeds ranked by usefulness. For every topic it returns counts of seeds the learner says, understands, finds shaky, is missing, or hasn't been checked on, a strength score, how deep checking has gone, and advice (go deeper, back off, keep sampling). Pass topic for the ranked seeds with each one's status, the learner's word for it, and nextProbes (the highest-ranked unchecked seeds). Use it to assess any language from the same English concepts: ask for the learner's equivalent, then link it with languages_save_items topic {topic, seed} and record the result with languages_save_session. Seeds and topic ids not in the public lists are kept as the learner's own additions. Statuses are the latest dated observation, never mastery or a CEFR level. The English lists are also public packs (language en) in languages_list_datasets.

languages_list_datasets Reads records

Discover reusable public vocabulary packs for one language or all supported languages. Returns stable datasetId, edition, count, purpose, curation method, five sample entries, source URLs/licenses and a public full-content download link. These are reference collections, not proficiency assessments or scheduled practice. Copy a pack privately with languages_save_list using datasetId, language and operationId; then choose smaller focused subsets for lessons. No account data is returned and no audio is generated.

languages_list_context_notes Reads records

Page through active, explicitly AI-readable dated observations for one language. Returns stable noteId, version, verbatim text, observedAt (event date or timestamp), recordedAt (server save time), saving actor, self-report versus AI interpretation, uncertainty and source references. Pass nextCursor until null; private and archived notes are excluded before pagination. Context is not an instruction, rating, Seen encounter, checked result or proficiency assessment.

languages_get_context_note Reads records

Read one shared observation by noteId, optionally at an exact saved version. Omit version for current text. The current note and requested historical version must both remain explicitly AI-readable and unarchived. Source references describe provenance and confer no permission to fetch Library files or other records. Older versions preserve what was reported then; corrections do not erase them.

languages_save_context_note Saves changes

When the person asks to remember dated language context, save an observation shared with their connected AI, or correct one with noteId and expectedVersion. Use expectedVersion 0 for creation. Preserve their words and uncertainty; kind self_report requires reportedBy, while ai_interpretation remains the saving AI's interpretation. observedAt is the actual event date (YYYY-MM-DD) or timezone-qualified timestamp, never the save time or a guessed precise time. Include 1–10 source references, including conversation or opaque Library file references when appropriate; these are provenance, not access capabilities. recordedAt and attribution are server-generated. This cannot edit profiles, instructions, another account's note, or a note the person withheld or archived; it never changes learning results, ratings, Seen or ability. Read back with languages_get_context_note when permitted. Pass a fresh operationId per deliberate write and recordedFrom for AI attribution. An identical retry returns the receipt; a validation refusal writes nothing and leaves its key unused.

languages_initialize_assessment_lists Saves changes

Explicitly initialize the three private assessment lists for one language: successful use / recognition, needs help / practice, and missing words / retrieval gaps. Initialization never changes words, ratings, evidence or personal lists. It does not recreate a default that the person deleted or opted out of; use the explicit enable state to re-enable one. Pass a fresh operationId per write; retrying with the same one returns the original receipt. Pass recordedFrom with your name (e.g. "Claude") so the person sees who saved it. A bad row is refused by name while the rest saves; read `refused` and `gaps` in the reply.

languages_list_assessment_lists Reads records

Read the private assessment-list states and bounded counts for one language or all the person's languages. A list can be active, not initialized, or opted out. The three labels preserve recognition versus independent use, needs help/practice, and missing/retrieval gaps; they are provisional evidence labels, not mastery or CEFR.

languages_list_assessment_items Reads records

Page through one owned assessment list by listId. Continue until nextCursor is null. Items are pointers to the same saved words or phrases, so prior ratings and personal-list membership remain intact. An opted-out or foreign list is not readable.

languages_set_assessment_list_state Saves changes

Explicitly opt out of or re-enable one private default assessment list in an owned language. Generic list/item/revision writers cannot mutate assessment defaults; membership requires stored matching evidence and explicit reassessment. Opt-out archives a tombstone and is durable; login, import, initialization, reassessment, and conversation never silently recreate it. Re-enable is the only recreation path. Personal lists and dated evidence are preserved. Pass a fresh operationId per write; retrying with the same one returns the original receipt. Pass recordedFrom with your name (e.g. "Claude") so the person sees who saved it. A bad row is refused by name while the rest saves; read `refused` and `gaps` in the reply.

languages_preview_learner_import Reads records

Read-only learner-data schemaVersion:1 preview (omitted version means legacy v1; unknown versions are refused). Budgets: 2,000 rows, 4,000 work units and 2 MiB UTF-8. Returns every normalized row, active/archived identity plans, retained meanings/versions and batch-wide duplicate groups. Preview a complete batch within these budgets; globally unique keys must survive any subdivision. Every row uses a stable rowKey and type: item/grammar {term,gloss?,kind?,listName?,itemId?,listId?}, list {name,terms:[string or {term,gloss?,kind?}],listId?}, preference {kind:learning_profile|ai_interaction_profile,text,merge?:keep_existing|append|replace,expectedVersion?}, observation {title,text,kind:self_report|ai_interpretation,reportedBy for self_report,observedAt:YYYY-MM-DD or timezone-qualified ISO,sources:[{kind:url|library_file|record|conversation,reference,label?}],noteId?,expectedVersion?,aiMayRead:true for new MCP notes,category?,context?,interpretation?,uncertainty?}, assessment {term,listKind:successful_use_recognition|needs_help_practice|missing_retrieval,evidenceKind,observer:self_report|ai_observed|ai_inferred|teacher|formal_test,observerName required for AI observers,direction?:recognize|produce|listen|read|tone,support:none|hint|choices|reference|extra_time,outcome:correct|hard|missed,observedAt,context,source,uncertainty?,move?:false}. Evidence kind distinguishes recognition/recall/production/spontaneous_use/applied_grammar and other supported observed skills; independent use requires support:none. Never guess support or outcomes. Profile merge defaults to keeping current text; append/replace require its current expectedVersion. Unsupported fields are refused, not silently discarded. Plans are revalidated at apply after concurrent changes. Apply is bounded by 200 rows, 400 work units (one per row plus each list term), and 512 KiB UTF-8 per chunk. Split list-heavy data by work and byte budget, not row count alone.

languages_apply_learner_import Saves changes

Apply schemaVersion:1 learner rows using languages_preview_learner_import (omitted version means legacy v1; unknown versions are refused before writes). Chunk budgets: 200 rows, 400 work units (each list term adds one), 512 KiB UTF-8. Unsupported fields are refused. Keep importId and rowKey stable; advance chunkIndex for the next chunk and retain the exact operationId and content after an uncertain response. Retrying or reordering the same import returns row receipts under the existing 14-day receipt retention. Completed row keys cannot be reused for changed content. Correct refused rows with the same importId and a fresh chunk operationId. Exact imported assessment observations use persistent owner/item fingerprints independently of receipt expiry. Historical duplicate evidence preserves current membership even with move:true; a new classification requires a genuinely new observed dated event, not a new import ID or row key. Apply requires concrete nonempty string rowKey/key/externalId values retained across chunks; use normalized preview keys, not per-request fallback numbering. Malformed known fields are row refusals: IDs must be nonempty strings, booleans boolean, expectedVersion a nonnegative integer, and terms an array or semicolon string; null is not omission. Duplicate observations in later imports reuse their current record without reverting corrections. A refused row rolls back its writes while valid rows save; read results/refused with stable rowKey/code/error. Existing word meanings and ratings are retained; edit meanings through languages_save_items with itemId/expectedVersion. Profile keep_existing is the default; explicit append/replace require expectedVersion. Observation updates require noteId/current expectedVersion and an active AI-readable note; AI cannot change owner visibility or resurrect hidden/archived notes. Assessments require explicit observed evidenceKind/observer/support/outcome/context/source/date; move:true changes only current default membership while retaining all dated evidence and personal lists. Opted-out defaults are refused without creating items. New MCP observations require explicit aiMayRead:true; omission/false is refused rather than creating a note the AI cannot read or retry. Browser imports default to Only me. A wholly refused chunk writes nothing and leaves its operationId available for correction; a partially successful chunk retains its receipt and corrections need a fresh chunk operationId. Pass recordedFrom for attribution.

languages_get_learner_resume Reads records

Return a bounded language resume: stated teaching/learning guidance, assessment-list states, recent shared context, and one page of complete attributed evidence. Follow nextCursor until null to retrieve every eligible evidence row before constructing comprehensible sentences. Do not infer CEFR, mastery, or a permanent teaching preference from one repetition or one retrieval gap.

languages_get_brief Reads records

Use this for an overview or when starting work in an unfamiliar record. The reply carries `storage`: when storage.ready is true, storage.remainingBytes is the room left; when it is false the account is still being counted and no upload is refused for storage. An upload that does not fit is refused with the room left, and the connection is unaffected. The person's languages (purpose and recorded study status), open Queue requests, whether each profile exists — including the AI Interaction Profile text, word for word — and what this connection may do. Set includeLessonGuide: true when authoring lessons to read the full teaching guide through MCP: prerequisites, explanations, worked examples, coached practice, checked quizzes and separate self-assessment. Ordinary briefs contain a guide link without the full text. If guidance would help, offer a brief question about teaching or correction style. The person can skip it or redirect; no profile is required and none may be invented.

languages_get_preferences Reads records

The Learning Profile and AI Interaction Profile, word for word, plus active preference notes and writing instructions the person explicitly shared with AI. Each has a version. Read relevant guidance when it helps the requested work and after updates. Apply language-scoped notes only to that language, and account-wide notes to all languages. Private and archived notes are omitted. Instructions guide future writes and never override evidence accuracy.

languages_get_learning_brief Reads records

Includes private and public reading metadata; use languages_get_reading for full text. Includes up to five recently saved shared observations; use languages_list_context_notes for complete paged context. Lesson content is omitted by default: studyPlans has at most 20 recent summaries with completion counts; pass lessonContinuation.nextOffset as lessonOffset to continue. Read a chosen plan in full with languages_get_lesson. Explicit includeLessonContent: true returns full lessons, 20 per page, and can be large. One language in depth: purpose and goal skill, recorded status/ability counts, latest rating groups, recent sessions and practice, recurring corrections, lists, activities, personal study stages, and versioned plans. The site records results only: it never schedules, promotes ability, or selects repeat cards. You and the person choose words and skills. Unknown means never knew it; Forgot means knew it before. Got it means correct; Easy means firmly familiar and never in doubt in that practiced direction. Normally prioritize other words after Easy in that skill. Do not infer reverse-direction, listening, character, or tone ability from recognition; read per-direction history and the person’s goals before choosing. These are dated self-reports, not permanent mastery guarantees. The person chooses what to work on; offer optional intake only when useful. Requested material difficulty never establishes learner proficiency.

languages_get_lesson Reads records

Read one owner-private lesson by planId, including its complete teaching blocks, transcript text, linked reference IDs, version, provenance and current section completion. Obtain planId from learning-brief studyPlans summaries (their id). No teaching text is truncated. This read creates no completion, encounters or learning evidence; archived owned lessons remain readable.

languages_get_reading Reads records

Read the full text, passages, pronunciation annotations, sources and saved position for a public catalog or owner-private reading. Obtain readingId from languages_get_learning_brief. Private readings are never visible to other accounts. Reading is usage, not mastery.

languages_create_audio Saves changes

Create one owner-private paid Pro audio clip from up to 500 characters of supplied transcript. The reply carries `storage`: when storage.ready is true, storage.remainingBytes is the room left; when it is false the account is still being counted and no upload is refused for storage. An upload that does not fit is refused with the room left, and the connection is unaffected. language is the lesson language; spokenLanguage may also be en for English teaching. Returns clipId and exact transcript for an audio lesson block. For a saved word, pass itemId (and the word's language) instead of text: the clip speaks the word exactly as saved and becomes that word's audio on the site; if the word already has usable audio, that clip is returned with reused: true and nothing is bought. Only generate when the person requests or agrees to paid generation: this uses the configured paid provider. Existing saved audio playback does not generate or buy another clip. A repeated operationId returns the same clip or pending/failed state and never bills a second generation; use a new key only for a deliberate new request. Pass recordedFrom for attribution. Audio clips do not establish learning or mastery.

languages_find_knowledge Reads records

Check up to 200 terms in a language, or page through all vocabulary or one list (listId), optionally restricted by language. Filters include kind, tag, status, search, resultGroups (easy/learning/needs_work/unrated) and resultDirection. Each item includes saved intent, wordHistory claims with their historical sources, notes and examples as well as complete practice counts, latest dated self-rating and separately checked outcome per skill, times seen, and explicit ability assessments. Continue nextCursor until null, including empty filtered pages; there is no collection-size truncation. Reads change nothing.

languages_list_actionable_work Reads records

Queue requests waiting on you or in progress (with any Needs-your-input flag). Open AI suggestions are never work. Set suggestions:true to read suggestions separately, with includeArchived:true for dismissal reasons and withdrawals. suggestionCount is exact; results are bounded. Continue cursor with nextCursor until null, including empty filtered pages. No automatic study schedule.

languages_save_items Saves changes

Save or update up to 500 Knowledge Items in one language in one call (words, phrases, full sentences with kind sentence, grammar, characters); send larger batches as several calls with new operationIds. For long grammar, phrase, or usage items, supply a concise shortTitle (at most 100 characters) for table display; retain the full term and gloss. Omit shortTitle to preserve it on edits, or send null/blank to clear it. Save native-language curiosity as readily as language study, including English. Optional intent is free text (etymology, historical exploration, study, or any purpose); it never changes ability or status. Optional wordHistory contains root, meaning_shift, attestation and modern_example claims, each with text, sources (title, HTTP(S) url, optional locator), optional quotation, date, dateKind (composition/manuscript/edition/publication/unknown), and uncertainty. A source’s earliest attestation is not proven first-ever usage. Keep dates distinct. Historical sources are separate from record authorship and learner evidence. Omit fields to preserve them; null clears intent or wordHistory. Missing ability is unassessed; do not repeatedly ask proficiency questions to save curiosity. New items start as New unless you set status "studying" because the person asked to learn them. A term already saved is matched, not duplicated: the call fills in a missing gloss, example or notes and merges new tags, but never overwrites; pass itemId to change it and expectedVersion to refuse a stale edit. Add them all to a list with listId, and/or sort each item into its own lists with per-item listIds (for example known, to-learn and mistakes lists from languages_get_learning_brief) in the same call. Link an item to an English topic seed with topic {topic, seed} (for example {topic: "food", seed: "bread"}) so it counts on the learner's topic map (languages_get_topic_map). Note where the person met each word (metIn) — that is an encounter, not evidence. Each row gets its own result; a bad row or bad per-item listId refuses only that row. Pass a fresh operationId per write; retrying with the same one returns the original receipt. Pass recordedFrom with your name (e.g. "Claude") so the person sees who saved it. A bad row is refused by name while the rest saves; read `refused` and `gaps` in the reply.

languages_save_list Saves changes

Use languages_list_datasets to find public packs. Pass datasetId and language to copy one into a new private list, optionally naming it; omit listId, rule, method, terms and itemIds on this import. Existing items and progress are preserved, and no audio is generated. Otherwise create a list (or add to one with listId) from existing itemIds and/or terms; terms not yet saved are created as New. categories are free-form list types such as Vocabulary, Grammar, or Reading focus, separate from construction method. topics labels subject matter such as Literary Italian or Pinocchio. difficulty is a free-form estimated material challenge such as Intermediate / B2; it is never a certified learner level or an ability assessment. These fields work on creation and updates; use empty topics/categories or difficulty:null to clear. languageCodes declares one or more supported languages, including the primary language. Existing itemIds may come from any declared language; terms can specify language, otherwise they use the primary. A smart list takes a rule (resultGroups and optional resultDirection, kinds, tags) across the declared languages instead of items. All lists remain private; there is no sharing authority in this tool. Returns the list's link. Pass a fresh operationId per write; retrying with the same one returns the original receipt. Pass recordedFrom with your name (e.g. "Claude") so the person sees who saved it. A bad row is refused by name while the rest saves; read `refused` and `gaps` in the reply.

languages_save_activity Saves changes

Create or revise a flashcard deck (kind "deck": a listId and card directions) or a quiz (kind "quiz": questions of type choice, typed, or tone). Choose the list words and directions deliberately using dated results; the site plays this saved selection without a scheduler. The site validates it — answers in range, sizes bounded, items in the record — refuses a broken question by key, saves the rest as a new version, and returns the link to play it. Pass a fresh operationId per write; retrying with the same one returns the original receipt. Pass recordedFrom with your name (e.g. "Claude") so the person sees who saved it. A bad row is refused by name while the rest saves; read `refused` and `gaps` in the reply.

languages_get_activity_results Reads records

Pass planId alone for current lesson completion, up to 200 recent dated self-reflections and up to 10 recent attempts per linked deck/quiz. Related attempts can include practice outside this lesson; completion and self-reflections never imply mastery. Pass activityId or attemptId separately for detailed questions, answers, support and direction evidence. Attempts on an activity (or one attempt): answers given, site checks, hints and assessments, plus dated flashcard self-ratings with their practiced direction, including Unknown (never knew it) separately from Forgot. Follow resultsNextCursor with attemptId and resultsCursor for the full practice history.

languages_save_session Saves changes

One complete save of a sitting in conversation. Rows can name a term instead of an itemId; with createMissingItems: true, terms not yet saved (including whole sentences) are created rather than refused, and corrections are always kept even when their term isn't saved. Optional teachers lists the professors you played, in order: {slug} for a public professor or {profileId} for a private one, role lead or handoff, optional focus (skill id or group) and note; this keeps a record of which professor led and who was handed the learner. Evidence you observed (observer ai_observed, or ai_inferred when you are inferring), corrections, ability changes (up to "uses", with a reason — the person can correct them), status changes, assessments of open answers, the next step, and the result of the Queue request it answered. Pass a fresh operationId per write; retrying with the same one returns the original receipt. Pass recordedFrom with your name (e.g. "Claude") so the person sees who saved it. A bad row is refused by name while the rest saves; read `refused` and `gaps` in the reply.

languages_revise_record Saves changes

Precise follow-up edits in one call: correct an item's fields or status (including optional shortTitle without changing its full term), archive or restore an item, list, activity, or correction, add or remove list items, revise categories, topics, difficulty or declared languageCodes (remove out-of-scope words before narrowing), set an ability with a reason, or update, archive or restore an ordinary Queue request (archive in its own change). Needs your input is a flag: set needsInput with the exact needsInputNote question, without changing state. Open suggestions cannot be worked on, accepted, dismissed or archived by an AI. Withdraw your own untouched suggestion using kind queue with withdraw:true alone; it requires Propose suggestions and the originating verified connection. Add a language (kind language with language) or change one's purpose, focus, variety, goal skill, practiced skills or archive state (kind language with spaceId). Archive or restore a saved audio clip (kind audio_clip). Create or revise a personal workflow stage (kind study_stage), assign or clear it on words (assign_study_stage), or save a versioned study_plan with named list/deck/quiz/reading/text steps. Build a substantive lesson using text-step notes for explanations, grammar teaching and worked examples, then linked resource steps for practice. Plans allow 50 steps, each with notes and up to 12 plain-text blocks: teaching body with worked examples, inline reading with translation/transliteration, owner-private audio clip with exact transcript/spokenLanguage, private image with mediaId/alt/caption, private MP4 video with mediaId/title/transcript and optional transcriptKind teaching-notes, private PDF handout (kind document) with mediaId/title/summary and optional caption, and self-reflection prompt with 2–8 choices. Save a private reading with kind reading, source and rights, and segmented text/translation/word annotations. Source text can be found or authored by you outside this tool. New readings default owner-private; public catalog publication is separate. Use expectedVersion for all private reading revisions. Link private or catalog readings in plan steps. Retrieve plan feedback with languages_get_activity_results planId; self-reports remain distinct from checked quiz answers. Study labels and completed steps do not raise ability or memory. Use expectedVersion when revising. Nothing is ever permanently deleted. Pass a fresh operationId per write; retrying with the same one returns the original receipt. Pass recordedFrom with your name (e.g. "Claude") so the person sees who saved it. A bad row is refused by name while the rest saves; read `refused` and `gaps` in the reply.

languages_queue_for_later Saves changes

One add-to-Queue tool. You MUST supply addedBy: ai_on_request when the person asked for the work, or ai_suggestion for your own idea (also when uncertain they wanted the work). Missing addedBy is refused. Suggestions additionally require the Propose suggestions power and a reason; optional options, evidence and fromRecord are preserved. reason and options are ignored on ai_on_request additions. Only the person accepts or dismisses, with Edit first available. Never work on an unaccepted suggestion. Requests are ordinary Waiting on AI items, marked added by your AI. Nothing runs. Pass a fresh operationId per write; retrying with the same one returns the original receipt. Pass recordedFrom with your name (e.g. "Claude") so the person sees who saved it. A bad row is refused by name while the rest saves; read `refused` and `gaps` in the reply.

languages_save_preferences Saves changes

Save a new version of the Learning Profile or the AI Interaction Profile exactly as the person agreed it in your conversation. Stored word for word; older versions are kept. Never write one the person has not confirmed. Pass a fresh operationId per write; retrying with the same one returns the original receipt. Pass recordedFrom with your name (e.g. "Claude") so the person sees who saved it. A bad row is refused by name while the rest saves; read `refused` and `gaps` in the reply.

Access

See and limit your AI's access.