/flashcard — 管理複習卡片

將已收錄(/ingest)的單字納入個人複習清單,該單字隨後將出現在 /review-word 的每日複習任務中。

/flashcard — manage your flashcards

Enrol an already-ingested word into your own review queue so that /review-word can later show it to you as a flip card.

為什麼需要這個功能?

並非所有納入字典的單字都值得每日複習。例如在閱讀時偶爾遇到的冷僻詞,您可能只想透過 /ingest 留存語素拆解紀錄,但不希望它干擾日常複習進度。/flashcard 即是「正式納入複習計畫」的開關 —— 只有開啟此開關的單字,才會出現在每日複習頁面中。

/flashcard 是複習流程的上游節點。其功能僅負責在 review/flashcards.json 登記卡片,並設置 SM-2 演算法的初始參數(複習間隔 0、連續答對次數 0、易記度 2.5、到期日為本日)。後續的「翻牌評分」與「動態計算下次到期日」則由 /review-word 啟動的網頁處理並更新資料。這兩個技能分工明確,共同構成學習循環。

權限劃分:本技能不具備修改卡片 history(複習歷史)的權限,該欄位由 /review-word 伺服器獨佔。若您在伺服器運行期間手動編輯檔案,可能會導致資料衝突。建議統一透過 /flashcard 指令增刪卡片,以確保資料完整性。

Why this exists

Not every word you put in the dictionary deserves your daily drilling. You run into kowtow while reading and want to know where it comes from, so you run /ingest kowtow to archive it and make it searchable — but you probably do not want to be hit with that word every morning. /flashcard is the explicit "yes, drill this" switch. Ingestion captures; flashcarding is a separate, deliberate decision.

/flashcard is the upstream of /review-word: it only registers the card in review/flashcards.json and sets the initial SM-2 state (interval 0, repetition 0, ease 2.5, due today). The actual flipping, grading, and next-due-date math is handled by the web app that /review-word launches, which writes back to the same file. Two skills, one loop.

Clean boundary: this skill never touches the per-card history field — that belongs exclusively to the server that /review-word starts. If you hand-edit flashcards.json while the server happens to be running, you risk corrupting the review log. To add or remove cards, use /flashcard; to record review progress, use /review-word.

範例演示

假設您已執行 /ingest unbelievable,目前字典已有檔案但複習清單尚未登記。若要將其正式納入複習:

# 在對話框輸入:
/flashcard unbelievable

# 回傳結果:
已將 unbelievable 加入複習清單 (到期日: 2026-05-24, 易記度: 2.5)

review/flashcards.json 中生成的卡片物件範例:

{
  "version": 1,
  "cards": [
    {
      "word": "unbelievable",
      "added": "2026-05-24",
      "ease": 2.5,
      "interval": 0,
      "repetition": 0,
      "due": "2026-05-24",
      "lastReview": null,
      "history": []
    }
  ]
}

欄位說明:added 為註冊日期;ease 為 SM-2 難易係數(起始值 2.5);interval 為複習天數間隔;repetition 為連續答對次數;due 為預定複習日;history 則會記錄每次在網頁上的評分表現。

若要移除已完全掌握的單字:

# 從複習計畫中移除(原始字典檔案不會被刪除)
/flashcard remove unbelievable

注意:移除卡片會一併刪除其複習進度(歷史資料)。日後若重新加入,系統將從新卡狀態重新起算。

A concrete example

Suppose you ran /ingest unbelievable yesterday, so dictionary/words/unbelievable.md exists but review/flashcards.json has no entry for it yet. Today you decide to enrol it for daily drilling:

# Type this in the Claude Code chat box:
/flashcard unbelievable

# Claude Code replies with something like:
Added unbelievable (due: 2026-05-24, ease: 2.5)

The card object actually written into review/flashcards.json looks like this:

{
  "version": 1,
  "cards": [
    {
      "word": "unbelievable",
      "added": "2026-05-24",
      "ease": 2.5,
      "interval": 0,
      "repetition": 0,
      "due": "2026-05-24",
      "lastReview": null,
      "history": []
    }
  ]
}

What each field means: added is the enrolment date; ease is the SM-2 easiness factor (starts at 2.5, floored at 1.3); interval is the gap in days between the last and next review (0 for a new card); repetition is the number of consecutive correct recalls (grade ≥ 3), 0 for a new card; due is the next due date — a new card is due today; lastReview is null because it has not been flipped yet; history is an append-only array of review records, empty at first and only ever written by the review server.

To remove a card (for example, you have fully mastered it and no longer need to drill it):

# Remove from the review queue (dictionary/words/unbelievable.md is NOT deleted)
/flashcard remove unbelievable

# Claude Code replies with something like:
Removed unbelievable (was ease: 2.6, repetition: 4, history: 7 entries)

Notice that the removed card's progress is gone with it. If you re-add the word later, SM-2 starts again from scratch — all the prior review history is lost.

操作指南

  1. 確認字典已存在該單字:檢查 dictionary/words/ 下是否有對應檔案。若無,請先執行 /ingest <word>
  2. 執行指令:輸入 /flashcard <word>。單字會自動轉為小寫處理以避免重複。
  3. 支援批量操作:可用空格分隔多個單字,如 /flashcard unbelievable international biology
  4. 確認狀態:直接輸入 /flashcard(不帶參數)可列出所有卡片統計,包含今日到期數量。
  5. 啟動複習:執行 /review-word 開啟網頁介面。

學習節奏建議:建議於每週固定時間一次性加入該週目標單字。每日只需花數分鐘執行 /review-word 即可。針對已內化的單字,應果斷執行 remove 以維持複習效率。

Step by step

  1. Confirm the target word is in the dictionary. Check whether dictionary/words/<word>.md exists. If not, run /ingest <word> first; /flashcard refuses outright when the dictionary page is missing and tells you to run /ingest.
  2. Type /flashcard <word> in the Claude Code chat. Words are always normalised to lowercase (Apple becomes apple) so that case differences cannot create duplicate cards.
  3. You can enrol several words at once. Separate them with spaces: /flashcard unbelievable international biology. Each word is checked independently — if one fails (for example, it has not been ingested yet) only that word is skipped, the others still go in, and you get a per-word report of what succeeded.
  4. Verify the enrolment. Type /flashcard with no arguments. It lists every card with its word, due, ease and repetition, plus a count of cards due today, so you can see at a glance that your new card is in. You can also open review/flashcards.json directly, but for daily use /flashcard alone is enough.
  5. Then run /review-word to start flipping. A freshly added card is due today, so it appears immediately on the review page.
  6. To drop a card, use /flashcard remove <word>. Only the entry inside flashcards.json is deleted; dictionary/words/<word>.md itself is untouched, so lookups and reverse links from other words keep working.

A rhythm that works: on Sunday evening, enrol the week's target words into your own queue in one shot — /flashcard a b c … for all ten. Each morning, spend three minutes on /review-word. After a while, /flashcard remove <word> the ones you have clearly internalised, freeing the queue for the next batch.

常見問題與限制

尚未收錄單字:若嘗試加入未 /ingest 的字,系統會提示先執行收錄流程。這是為了確保複習時有完整的 IPA 與語素資訊可供檢視。

Stopwords 限制:位於白名單(如 theis)的單字無法加入複習計畫,因為過度簡單的單字會降低學習效率。

進度重置風險:執行 remove 後再次加入,該單字的學習軌跡(Ease 值與歷史紀錄)將全部抹除。移除前請務必確認已完全掌握。

下一步:

← 回首頁

Common mistakes & next steps

Trying to flashcard a word you have not ingested. You get back "<word> has no dictionary page, please run /ingest <word> first", and that word is skipped. Without a dictionary page there would be no IPA, gloss, or breakdown to show during review — so this restriction is intentional. /ingest first, then /flashcard.

Trying to flashcard a stopword. Words like the, a, and are rejected with "<word> is in the stopwords list, no review needed". Also intentional: you use these every day already, drilling them wastes time. If you really must (rare), remove the word from the allow-list with /stopword first.

Hand-editing flashcards.json. It looks like easy JSON, but the history field is owned by the server that /review-word launches. If you save the file by hand while the server is also running, you can corrupt the review log. Use /flashcard for add/remove, use /review-word for grading — do not work around the skills.

Remove, then re-add. SM-2 progress resets to a brand-new card: repetition: 0, interval: 0, ease: 2.5, history: []. All the memory trace you had built up is gone. This is a deliberate trade-off (we do not keep orphan history), so before removing, be sure you really do not want that card's progress.

Next:

  • /review-word — open the review web app and actually flip the cards you just enrolled
  • /ingest — if the word you wanted is not in the dictionary yet
  • /stopword — use the allow-list to block words that are too simple from being flashcarded by mistake
  • How SM-2 spaced repetition works — understand what each card field actually means to the algorithm

← Back to home