fsi

skill
SUMMARY

FSI-style foreign language pattern drills inside your coding agent. Substitution, transformation, spaced repetition — 5 minutes while your build runs.

README.md

fsi — FSI Language Drill Skill

fsi logo

GitHub MIT License Agent Compatible Fast Model FSI Method

/fsi

Five minutes a day, inside the tool you already live in.
Your build is compiling. You just learned the French subjunctive.

Try It Skill Docs

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.

Reviews (0)

No results found