A-Level Study Coach (Obsidian Plugin)
中文版本:README.zh.md
An assistive A-Level study coach for Obsidian: learning stays offline-first — open the plugin
only when you need help: an unclear concept, a problem you're stuck on, or essay grading.
Every request is logged so weaknesses surface over time. Targets: A-Level all A*, IELTS 7.5+.
Product design: docs/产品设计.md (v0.3). Prompt system from the chat-2 coach pack;
tech base simplified-forked from AI Study Buddy.
Feature Overview
Coach Sessions
| Feature |
Description |
| Per-subject sessions |
Each subject keeps its own session; switching saves/restores automatically; concluding closes it |
| Auto session start |
A session opens instantly when you enter a subject — no button needed; sessions with no user input are never recorded |
| Opening mode menu |
The opening is rendered locally from the prompt's ```opening fence (zero API call): Concept Drill A–G (blind write / decomposition / colloquial rewrite / logic chain / drill / F concept relation map — chapter-level: includes learned + not-yet-learned concepts, the latter marked as preview with a short auto-explanation, mermaid with keyword edges / G keyword recall — reproduce the whole map from keywords); Economics A–D; IELTS A–D. Reply with a letter to pick a mode, jump anytime, or let the AI guide by context |
| Concept map |
After a chapter-level F map, a confirm card registers concepts to 记录/概念地图.md (chapter/concept/status); preview/pending concepts are auto-injected into the drill prompt so they switch to detailed mastery when actually learned, and become “learned” after confirmation; the records center shows the ledger |
| Conclude flow |
Conclude = self-review, scrutiny, error-log rows, session tagging; then auto-archive and auto-reopen a fresh session |
| Problem solving & correction (unified) |
Being stuck on a new problem and correcting a wrong one share one flow: any problem request enters it (with your attempt → compare; stuck → first ask how far you got); attempt images auto-transcribed; three-tier baseline for the correct answer (official / model solution verified by you / pending); locate the divergence and guide the correction; after conclude, a confirm card registers to the wrong-answer ledger and unmastered entries are auto-injected into later sessions |
| Session extras |
SSE streaming output, image attachments (vision models; more than 4 images are auto-batched for recognition with per-batch progress and resume-on-failure, transcripts merged into the session record), session-wide doc references, resume from history |
| Think-first timer |
In-session countdown; sending is blocked before the threshold; finishing adds a "thinking credit" note to the next message |
Context & Models
| Feature |
Description |
| Global model selector |
Top-bar dropdown applies to every AI call; the settings page manages models as a list per provider (add / test individually / set default / delete) |
| Context management |
Usage shown under the input box ("x / y (n%)"); auto-compress threshold is configurable (default 80%); over-limit turns red with a "force compress" button; compression is long-running and always shows progress notices |
Records & Review
| Feature |
Description |
| Error log ledger |
13-column main table; recurrence auto +1; review in 7 days (3 if recurring); status flows unresolved → observing → resolved |
| 3-way routing |
Specific losses → ledger; question-type habits → practice focus; vague claims → weakness impressions |
| Records center |
One tab shows all ledgers: A-Level error log + IELTS grades + expression library + question log (data files stay separate — zero information loss) |
| Review reminders |
The Review tab shows today's full due list in four queues: error-log points (per item: variant question / passed / recurred), term drills, expression sentence drills, wrong-answer follow-up (per-item "mastered after redo"); you can also practice offline — report results in natural language for batch parsing, or give per-item feedback directly; plus status-bar badge and one gentle daily notice |
| Wrong-answer ↔ session backlink |
Every wrong-answer entry records the session it occurred in; one click opens the original conversation from the records center / review queue, and "redo" prefills your mistake-at-the-time plus the session link |
| Mastery progress badges |
Each status shows the distance to the next state (e.g. "1 spot-check away from stable"); per-row "practice" buttons jump to the coach with a prefilled request (term spot-check / wrong redo / variant) |
| Weakness profile (L2) |
A compressed per-subject profile with ledger-ID backlinks, auto-refreshed after each conclude; injected instead of full tables when many entries are open (saves tokens); the manual-notes section survives regeneration |
| Review sheet |
One click compiles the four due queues into a single printable note (term flashcards / wrong redo / expression sentences); fingerprint drift detection flags a stale sheet for regeneration |
| Trend charts |
Local SVG (no deps): overall-score sparklines for writing/speaking, 30-day mark-loss code bars in Records |
| Answer rewrite diff |
After the English review step, a Compare button opens a word-level before/after diff of the student's own two versions |
| Quick capture |
One natural-language sentence → AI suggests a category → accept / edit / discard |
Weakness Analysis
| Feature |
Description |
| Insight engine |
Question hotspots × recurrence hotspots × expression-code trends × term/review backlogs; pure local stats; a suggestion needs ≥3 hits on one signal |
| Suggestion cards |
Persisted under 建议/; view/disagree feedback loop; study advice is generated once, only after consent (no schedules) |
| Weekly report |
周报/{ISO-week}.md with six stat blocks (help, losses & recurrence, reviews, terms, IELTS, suggestions) |
| Advanced corner |
Stage-based advanced-exam roadmap (G10 UKMT → G11 MAT/TMUA → G12 STEP/PAT/ESAT) with one-click thinking-problem sessions and auto timer |
IELTS
| Feature |
Description |
| Unified entry |
Coach "IELTS Writing": A full grading / B paragraph commentary / C discussion & dispute / D targeted practice — freely mixed and switchable mid-session |
| Grade any note |
Open any note (task + essay, images included); six-part output written to ## AI 批改; re-grading archives the previous version for comparison |
| Score ledger |
Every grade appends overall + TR/CC/LR/GRA to 雅思/批改记录.md — your improvement trajectory |
| Expression library |
High-score expressions auto-collected (deduplicated) with simplified SM-2 intervals 1→3→7→14→30→60 days and due sentence drills |
| Speaking training |
Coach "IELTS Speaking": A full mock exam (Part 1→2→3) / B single-part focus / C free practice / D discussion & review; delayed & limited corrections, first-session calibration with staged targets (stepwise path to 7.5), evidence-based Band-7 scoring (ranges, no flattery); final scores go to 雅思/口语记录.md alongside the writing trend, speaking mistakes to the existing wrong-answer ledger (SP/GR/VX), upgraded expressions to the library; voice pipeline (Aliyun NLS): 🎤 hold-to-talk ASR with auto-send, examiner replies read aloud sentence-by-sentence via TTS (interruptible), recordings normalized to 16k WAV (optionally saved); falls back to text mode when keys are unset; P-dimension pronunciation eval awaits P5c |
Data Locations (all inside the vault, syncable via git / iCloud)
vault/StudyCoach/
├── 档案.md # student profile (frontmatter, editable in settings)
├── 三年路线图.md # 3-year roadmap
├── prompts/ # coach prompts (with ```opening fences), directly editable
├── 建议/ # weakness suggestion cards
├── 雅思/ # essays / speaking reports / grade ledger / speaking ledger / expression library
├── 周报/ # weekly reports (idempotent overwrite)
├── 记录/ # error log, wrong-answer ledger, concept map, question log, terms, practice focus, impressions, stats, progress, diary
└── 会话/ # session archives (only written if there was interaction)
Installation
npm install
npm run build
./install.sh /path/to/your/vault
Then in Obsidian: Settings → Community plugins → enable A-Level Study Coach → configure the LLM
in plugin settings (OpenAI-compatible endpoint or native Anthropic; the API key stays on your machine).
Development
npm run dev # esbuild watch
npm run typecheck # tsc --noEmit
npm test # full UT + FVT suite (must stay green on every change)
Test suite (test/, obsidian isolated via FakeVault, runs directly in node):
| Layer |
Scope |
| UT |
utils / errorlog / services / insight / ielts / report: parsing, ledger rules, state machines, analysis thresholds, grading tolerance, report stats |
| FVT: session |
Full help loop: injection → conclude → tagging + ledger → recurrence → archive & resume |
| FVT: dataflow |
Cold-start 3-way routing, review flow, analysis cycle |
| FVT: ielts |
Grading closed loop: write-back → scores ledger → expression dedup → trend weak spots |
Known Limitations (by design)
- Term/expression drill modals are non-streaming (replies are short)
- No IELTS listening/reading features (offline-learning scope); speaking voice requires Aliyun keys (text mode otherwise); P-dimension pronunciation eval awaits P5c
- Reports/radar are plain-text stats; no chart libraries (kept lightweight)
- Prompt template updates never overwrite existing vault files (user edits win)
- Streaming relies on fetch; if a provider blocks browser CORS, use an OpenAI-compatible gateway