Mochi SRS
Create flashcards and run conversational spaced repetition reviews using Mochi.
CLI tool
The mochi CLI is at ~/.agents/skills/mochi-srs/bin/mochi. Symlink to PATH: ln -sf ~/.agents/skills/mochi-srs/bin/mochi ~/.local/bin/mochi
Conversational review flow
When the user says "mochi review", "review cards", "flashcard review", or similar:
Get due cards: Run mochi next --limit 10 (or whatever limit the user wants). Tell the user the total due count.
- Topic filtering: If the user asks to review a specific topic (e.g. "review salsa cards", "review French cards"), fetch a larger batch with
mochi next --limit 50, then filter to cards whose content contains the relevant emoji (💃 for salsa, 🇫🇷 for French). Only present the matching cards.
- Two-phase daily review: If the user wants a daily batch like "5 review then 5 new", first run
mochi next --limit 5, complete those reviews, then run mochi new --limit 5 and continue with those if any exist. Be explicit about the switch: e.g. Done with due cards. You’ve got 5 new ones available—shall we keep going?
Present cards one at a time — behaviour depends on card_type:
qa: Show the question (front); wait for the user to reply with their answer
cloze: Show the masked front (blanks shown as [...]); ask the user to fill in the blank(s)
note: Show the full content; ask for a direct rating: (1) remembered or (2) forgot
Evaluate the response and briefly review the card:
- Compare the user's answer to the back (answer) of the card
- For cloze cards the answer field shows the original text with blanks filled in as
[word] — compare against those
- If correct: confirm briefly and note the answer
- If partially correct: acknowledge what's right, show the full correct answer
- If wrong: say so directly, show the correct answer
- For note/quote cards: ask the user if they remembered it
Always print the exact card back verbatim before your correctness judgment. Preserve all spacing/line breaks, punctuation, and formatting:
Back: <exact_back>
After showing the answer, do a quick quality check on the card itself:
- Look for obvious mistakes, likely factual errors, confusing wording, awkward formatting, or mismatches between front and back
- For French cards, check spelling, accents, articles, gender, plural forms, and naturalness
- For factual cards, flag anything that seems clearly wrong or suspicious
- For procedural/skill cards, flag missing key steps or ambiguity only if it would materially improve recall
Threshold: most of the time, say nothing extra. Only add a note when there is something clearly above the bar.
- Definitely mention: misspelt French, wrong accents when relevant, wrong article/gender if the card is teaching that, likely factual mistakes, or seriously unclear wording
- Sometimes mention: a substantially clearer phrasing or formatting improvement
- Rarely mention: optional polish that doesn't much matter
If there is something worth saying, keep it short and use one of these:
Card note: for a likely issue with the card
Memory hint: for a recall aid
Examples:
Card note: this should probably be "la jalousie".
Card note: Earth–Moon distance is about 384,000 km, so this card may be wrong.
Memory hint: picture a neurotic Parisian saying "névrosé" in a café.
Submit the review: Run mochi submit <card_id> remembered or mochi submit <card_id> forgot based on the result. Tell the user the outcome briefly (e.g., "Submitted. Next review in 213 days.").
Continue with the next card until done, then summarise the session.
Important notes:
- Keep the flow conversational and quick—don't over-explain
- For quote cards (no answer/back), show the quote and ask "Did you remember this?"
- Accept partial/approximate answers as correct for most cards
- For French vocabulary cards (🇫🇷), misspellings and missing accents count as forgotten rather than remembered
- If the card’s back includes optional inflection markers or variants (for example
névrosé(e) or Heureux (M) / Heureuse (F)), accept the base form as remembered unless the prompt explicitly asks for the inflected forms or the contrast is the thing being tested
- Be strict on factual cards (dates, names, definitions)
- When offering a mnemonic, prefer visual or story-based mnemonics over abstract verbal tricks
- Mnemonics are most useful after a miss or near-miss; don't force one for every card
- At least half the time, there should be no extra suggestion at all
- If the user likes a suggested mnemonic, make it easy to save: a very short confirmation like
y, ok, or + should mean "append that mnemonic on a new line at the bottom of the back of this card"
- When that happens, fetch the card, preserve the existing back exactly, append the mnemonic as a new final line, update the card, and confirm briefly
- The user can say "skip", "stop", or "quit" at any time
Card creation
When the user says "mem", "memorise", "flashcard", or asks to create cards:
Workflow
- Check for API key: Verify
.env file exists with MOCHI_API_KEY
- Check for default deck: Look for
DEFAULT_DECK_ID in .env
- Draft card content: Format as
Front\n---\nBack
- ALWAYS show for review: Display drafted card(s) and ask for confirmation before creating
- Create only after approval:
mochi create --deck DECK_ID --content "Front\n---\nBack"
CRITICAL: Never create cards without showing the content first and getting user approval.
CLI commands
# Create a card
mochi create --deck DECK_ID --content "Question\n---\nAnswer"
mochi create --deck-name "French" --content "Question\n---\nAnswer"
# List decks
mochi decks
# List cards
mochi cards --deck DECK_ID
# Delete a card
mochi delete CARD_ID
# Get due cards (human-readable)
mochi due
# Get due cards (JSON, for agent use)
mochi next --limit 5
# Get new/unreviewed cards (JSON, for agent use)
mochi new --limit 5
# Get a single card
mochi get CARD_ID
# Submit a review
mochi submit CARD_ID remembered
mochi submit CARD_ID forgot
# Interactive terminal review
mochi review --limit 10
All commands support --deck ID or --deck-name NAME to filter by deck.
Card format
Mochi cards use markdown. Standard question/answer format:
Question text here
---
Answer text here
Cards support full markdown: bold, italic, code, lists, code blocks, LaTeX ($inline$, $$block$$), and images.
French vocabulary cards
When user provides French words or phrases:
- Front:
🇫🇷 [English text] 🇫🇷 (British English spelling)
- Back: French word/phrase
- Fix spelling/accents/grammar errors and flag corrections to the user
- For M/F forms, show both on the back:
🇫🇷 Happy 🇫🇷
---
Heureux (M)
Heureuse (F)
Salsa cards
- Front:
💃 [Question/topic] 💃
- Back: Technique details or answer
Bulk card display
Show multiple cards in a table for review:
| # |
Front |
Back |
Notes |
| 1 |
Hello |
Bonjour |
|
| 2 |
Happy |
Heureux (M) / Heureuse (F) |
|
Examples of good intervention
User answers Jalosie for La jalousie
- Mark as forgot
- Say:
Forgotten. Correct answer: la jalousie.
- Optional:
Memory hint: imagine jealousy as a woman named Jalousie in a green dress—la jalousie.
- If the user replies
y, ok, or +, append that mnemonic as a new final line on the back of the current card
Card says Earth–Moon distance is 150,000 km
- If the revealed answer is clearly wrong, say:
Card note: this card appears factually wrong; average Earth–Moon distance is about 384,000 km.
French answer is technically right but clunky
- Say only if the improvement is meaningful:
Card note: your version is understandable, but this phrasing is more natural in French: ...
Configuration
- API key:
~/.agents/skills/mochi-srs/.env → MOCHI_API_KEY=...
- Default deck:
~/.agents/skills/mochi-srs/.env → DEFAULT_DECK_ID=...
- Local DB:
~/Library/Application Support/Mochi/mochi.db (read for faster due-card lookup, falls back to API)
Troubleshooting
- "MOCHI_API_KEY not found": Add API key to
.env
- "401 Unauthorized": Regenerate key in Mochi Settings > API
- "429 Too Many Requests": Wait and retry. Mochi limits to 1 concurrent request.
1---2name: mochi-srs3description: This skill should be used when the user says "mem", "memorise", "flashcard", "mochi review", "review cards", or mentions Mochi/SRS. Creates flashcards and runs conversational spaced repetition reviews.4---56# Mochi SRS78Create flashcards and run conversational spaced repetition reviews using Mochi.910## CLI tool1112The `mochi` CLI is at `~/.agents/skills/mochi-srs/bin/mochi`. Symlink to PATH: `ln -sf ~/.agents/skills/mochi-srs/bin/mochi ~/.local/bin/mochi`1314## Conversational review flow1516When the user says "mochi review", "review cards", "flashcard review", or similar:17181. **Get due cards**: Run `mochi next --limit 10` (or whatever limit the user wants). Tell the user the total due count.19 - **Topic filtering**: If the user asks to review a specific topic (e.g. "review salsa cards", "review French cards"), fetch a larger batch with `mochi next --limit 50`, then filter to cards whose content contains the relevant emoji (💃 for salsa, 🇫🇷 for French). Only present the matching cards.20 - **Two-phase daily review**: If the user wants a daily batch like "5 review then 5 new", first run `mochi next --limit 5`, complete those reviews, then run `mochi new --limit 5` and continue with those if any exist. Be explicit about the switch: e.g. `Done with due cards. You’ve got 5 new ones available—shall we keep going?`21222. **Present cards one at a time** — behaviour depends on `card_type`:23 - **`qa`**: Show the **question** (front); wait for the user to reply with their answer24 - **`cloze`**: Show the masked front (blanks shown as `[...]`); ask the user to fill in the blank(s)25 - **`note`**: Show the full content; ask for a direct rating: `(1) remembered` or `(2) forgot`26273. **Evaluate the response and briefly review the card**:28 - Compare the user's answer to the **back** (answer) of the card29 - For cloze cards the answer field shows the original text with blanks filled in as `[word]` — compare against those30 - If correct: confirm briefly and note the answer31 - If partially correct: acknowledge what's right, show the full correct answer32 - If wrong: say so directly, show the correct answer33 - For note/quote cards: ask the user if they remembered it3435 **Always print the exact card back verbatim** before your correctness judgment. Preserve all spacing/line breaks, punctuation, and formatting:36 `Back:37 <exact_back>`3839 After showing the answer, do a **quick quality check** on the card itself:40 - Look for obvious mistakes, likely factual errors, confusing wording, awkward formatting, or mismatches between front and back41 - For French cards, check spelling, accents, articles, gender, plural forms, and naturalness42 - For factual cards, flag anything that seems clearly wrong or suspicious43 - For procedural/skill cards, flag missing key steps or ambiguity only if it would materially improve recall4445 **Threshold:** most of the time, say nothing extra. Only add a note when there is something clearly above the bar.46 - **Definitely mention:** misspelt French, wrong accents when relevant, wrong article/gender if the card is teaching that, likely factual mistakes, or seriously unclear wording47 - **Sometimes mention:** a substantially clearer phrasing or formatting improvement48 - **Rarely mention:** optional polish that doesn't much matter4950 If there is something worth saying, keep it short and use one of these:51 - `Card note:` for a likely issue with the card52 - `Memory hint:` for a recall aid5354 Examples:55 - `Card note: this should probably be "la jalousie".`56 - `Card note: Earth–Moon distance is about 384,000 km, so this card may be wrong.`57 - `Memory hint: picture a neurotic Parisian saying "névrosé" in a café.`58594. **Submit the review**: Run `mochi submit <card_id> remembered` or `mochi submit <card_id> forgot` based on the result. Tell the user the outcome briefly (e.g., "Submitted. Next review in 213 days.").60615. **Continue** with the next card until done, then summarise the session.6263**Important notes:**64- Keep the flow conversational and quick—don't over-explain65- For quote cards (no answer/back), show the quote and ask "Did you remember this?"66- Accept partial/approximate answers as correct for most cards67- For French vocabulary cards (🇫🇷), misspellings and missing accents count as **forgotten** rather than remembered68- If the card’s back includes optional inflection markers or variants (for example `névrosé(e)` or `Heureux (M) / Heureuse (F)`), accept the base form as **remembered** unless the prompt explicitly asks for the inflected forms or the contrast is the thing being tested69- Be strict on factual cards (dates, names, definitions)70- When offering a mnemonic, prefer **visual** or **story-based** mnemonics over abstract verbal tricks71- Mnemonics are most useful after a miss or near-miss; don't force one for every card72- At least half the time, there should be **no extra suggestion at all**73- If the user likes a suggested mnemonic, make it easy to save: a very short confirmation like `y`, `ok`, or `+` should mean "append that mnemonic on a new line at the bottom of the back of this card"74- When that happens, fetch the card, preserve the existing back exactly, append the mnemonic as a new final line, update the card, and confirm briefly75- The user can say "skip", "stop", or "quit" at any time7677## Card creation7879When the user says "mem", "memorise", "flashcard", or asks to create cards:8081### Workflow82831. **Check for API key**: Verify `.env` file exists with `MOCHI_API_KEY`842. **Check for default deck**: Look for `DEFAULT_DECK_ID` in `.env`853. **Draft card content**: Format as `Front\n---\nBack`864. **ALWAYS show for review**: Display drafted card(s) and ask for confirmation before creating875. **Create only after approval**: `mochi create --deck DECK_ID --content "Front\n---\nBack"`8889**CRITICAL**: Never create cards without showing the content first and getting user approval.9091### CLI commands9293```bash94# Create a card95mochi create --deck DECK_ID --content "Question\n---\nAnswer"96mochi create --deck-name "French" --content "Question\n---\nAnswer"9798# List decks99mochi decks100101# List cards102mochi cards --deck DECK_ID103104# Delete a card105mochi delete CARD_ID106107# Get due cards (human-readable)108mochi due109110# Get due cards (JSON, for agent use)111mochi next --limit 5112113# Get new/unreviewed cards (JSON, for agent use)114mochi new --limit 5115116# Get a single card117mochi get CARD_ID118119# Submit a review120mochi submit CARD_ID remembered121mochi submit CARD_ID forgot122123# Interactive terminal review124mochi review --limit 10125```126127All commands support `--deck ID` or `--deck-name NAME` to filter by deck.128129### Card format130131Mochi cards use markdown. Standard question/answer format:132133```markdown134Question text here135---136Answer text here137```138139Cards support full markdown: bold, italic, code, lists, code blocks, LaTeX (`$inline$`, `$$block$$`), and images.140141### French vocabulary cards142143When user provides French words or phrases:144145- **Front**: `🇫🇷 [English text] 🇫🇷` (British English spelling)146- **Back**: French word/phrase147- Fix spelling/accents/grammar errors and flag corrections to the user148- For M/F forms, show both on the back:149150```151🇫🇷 Happy 🇫🇷152---153Heureux (M)154Heureuse (F)155```156157### Salsa cards158159- **Front**: `💃 [Question/topic] 💃`160- **Back**: Technique details or answer161162### Bulk card display163164Show multiple cards in a table for review:165166| # | Front | Back | Notes |167|---|-------|------|-------|168| 1 | Hello | Bonjour | |169| 2 | Happy | Heureux (M) / Heureuse (F) | |170171### Examples of good intervention172173- User answers `Jalosie` for `La jalousie`174 - Mark as forgot175 - Say: `Forgotten. Correct answer: la jalousie.`176 - Optional: `Memory hint: imagine jealousy as a woman named Jalousie in a green dress—la jalousie.`177 - If the user replies `y`, `ok`, or `+`, append that mnemonic as a new final line on the back of the current card178179- Card says Earth–Moon distance is `150,000 km`180 - If the revealed answer is clearly wrong, say:181 - `Card note: this card appears factually wrong; average Earth–Moon distance is about 384,000 km.`182183- French answer is technically right but clunky184 - Say only if the improvement is meaningful:185 - `Card note: your version is understandable, but this phrasing is more natural in French: ...`186187## Configuration188189- **API key**: `~/.agents/skills/mochi-srs/.env` → `MOCHI_API_KEY=...`190- **Default deck**: `~/.agents/skills/mochi-srs/.env` → `DEFAULT_DECK_ID=...`191- **Local DB**: `~/Library/Application Support/Mochi/mochi.db` (read for faster due-card lookup, falls back to API)192193## Troubleshooting194195- **"MOCHI_API_KEY not found"**: Add API key to `.env`196- **"401 Unauthorized"**: Regenerate key in Mochi Settings > API197- **"429 Too Many Requests"**: Wait and retry. Mochi limits to 1 concurrent request.