fsi
FSI-style foreign language pattern drills inside your coding agent. Substitution, transformation, spaced repetition — 5 minutes while your build runs.
fsi — FSI Language Drill Skill
/fsi
Five minutes a day, inside the tool you already live in.
Your build is compiling. You just learned the French subjunctive.
English · 简体中文
What and why /fsi
The FSI method (Foreign Service Institute) was developed by the U.S. State Department to train diplomats in foreign languages through high-repetition pattern drills — substitution, transformation, and contextual practice. It's one of the most effective approaches to building spoken fluency through structured repetition.
/fsi brings that method into your coding agent. Engineers won't open Duolingo between builds — but they'll type /fsi in the terminal they already have open. No app, no subscription, no streak anxiety.
One command. Thirty reps. Real progress — while CI does its thing.
What a session looks like
You: /fsi
French · A2 · Session 8
▶ Continue
Switch language or level
→
You: (enter)
Je voudrais _____ s'il vous plaît.
I'd like _____ please.
[ʒə vudʁɛ]
Cue 1 → a window seat
You: Je voudrais une place côté fenêtre s'il vous plaît.
✓ Cue 2 → the menu
You: Je voudrais la carte s'il vous plaît.
✓ Cue 3 → a coffee
Stuck on a word? Type h for help — without breaking the drill:
Cue 4 → a seat near the window
You: h seat
seat = une place / un siège
Cue 4 again → a seat near the window
...
[ʒə vudʁɛ] — stress on the last syllable, drops flat.
Cue 6 → something sparkling
...
↩ from last time → a room with a view
You: Je voudrais une chambre avec vue s'il vous plaît.
✓ Cue 8 → ...
After 20 correct substitutions, the drill shifts:
Now: transform the sentence.
Make it negative.
Cue 1 → Je voudrais une table pour deux.
You: Je ne voudrais pas de table pour deux.
✓ Cue 2 → Je voudrais le menu du déjeuner.
After 10 correct transformations:
You're at a café. The waiter is waiting.
Use today's phrase →
You: Bonjour, je voudrais un crème et un croissant s'il vous plaît.
✓
Done. 20 sub + 10 transform · Je voudrais · 3 errors
Quick Start
Claude Code
/plugin marketplace add phunterlau/fsi
/plugin install fsi@phunterlau/fsi
Then type /fsi in any session.
Gemini CLI
git clone https://github.com/phunterlau/fsi
gemini extensions install ./fsi
Any ACP-compatible agent
git clone https://github.com/phunterlau/fsi
# Point your agent at SKILL.md
How it works
| Stage | What happens |
|---|---|
| Bootstrap | Reads ~/.fsi_practice/ session history — or detects first run |
| Onboarding | Pick a language (French / Spanish / German / other) and self-assess level with sample sentences |
| Substitution Drill | 20 correct reps on a core chunk. IPA pronunciation guide, rhythm notes every 5 reps, SRS cues from past sessions injected at cue ~7 and ~14 |
| Transformation Drill | 10 correct reps. Same chunk, different structure — negation, tense shifts, passive voice, register changes (level-dependent) |
| Contextual Moment | One real-world scenario: use today's phrase to navigate a situation |
| Wrap-Up & Level Eval | Session saved. Level-up suggested after 3 clean sessions (≥90% accuracy + ≥80% SRS recall) |
Session state persists in ~/.fsi_practice/ — every drill builds on the last.
Drill features
| Feature | Description |
|---|---|
| Echo Method | IPA guide + out-loud repetition before typing |
| Substitution Drill | 20 reps filling the core chunk with varied vocabulary |
| Transformation Drill | 10 reps reshaping the sentence — negation, tense, voice, register |
| Rhythm Pauses | Pronunciation and intonation notes every 5 reps |
| Spaced Repetition | Review cues from previous sessions injected mid-drill |
| Blunt Feedback | "Wrong. Repeat:" — not paragraph-length corrections |
h Help System |
Type h, h [word], h pronunciation, h grammar — one-line answers, cue repeats |
| Contextual Output | Every session ends with a real-world scenario at your level |
| Passive Level Eval | Tracks error rate and SRS recall across sessions |
| Level-Up Suggestions | Suggests moving up after 3 clean sessions — never suggests down |
Transformation types by level
| Level | What you practice |
|---|---|
| A1 | Statement → question |
| A2 | Affirmative → negative, present → near future |
| B1 | Present → passé composé, direct → indirect speech |
| B2 | Active → passive, concession (subjunctive), informal → formal |
| C1 | Nominalization, formal inversion, modal shifts |
Supported languages & levels
| Language | Levels |
|---|---|
| French | A1 · A2 · B1 · B2 · C1 |
| Spanish | A1 · A2 · B1 · B2 |
| German | A1 · A2 · B1 · B2 |
| Any other | Type it — the coach adapts |
Recommended Models
Drills live or die by response latency — a slow coach breaks the rhythm. Use a fast, lightweight model:
| Platform | Recommended Model |
|---|---|
| Claude Code | claude-haiku-4-5-20251001 |
| Gemini CLI | gemini-3.1-flash |
Both keep the drill snappy and the cost near zero. Avoid large reasoning models — speed is part of the drill.
Session files
All state is local. No accounts, no cloud sync.
~/.fsi_practice/
├── profile.json # Language, level, session count, streak
├── history.json # Per-session drill records
└── srs_bank.json # Spaced repetition cue bank
OpenClaw / ACP
fsi is compatible with OpenClaw and any ACP-compatible agent runner. See AGENTS.md for the agent definition.
Changelog
1.0.0 — Initial release.
Yorumlar (0)
Yorum birakmak icin giris yap.
Yorum birakSonuc bulunamadi