LearnHarness 0.6.0 adds more ways to work through difficult material: ask a side question without losing your place, sketch your reasoning, solve coding problems, and review facts with flashcards. It also brings light and dark themes and a plugin platform for extending the app.
Core plugins
Open Settings → Core plugins to enable the tools you want. All four start disabled, and their code ships and updates with LearnHarness.
- Flashcards: generate recall cues from selected knowledge-graph propositions or a PDF/text file, or write cards by hand. Organize them into decks, review with FSRS-6 scheduling, or practice without changing the schedule. Card generation uses your configured model; reviewing existing cards makes no model calls. Flashcards keep their own records rather than changing the learning graph.
- Coding Questions: answer teaching questions and practice problems in a syntax-highlighted editor, with optional starter code, tutor-written tests, test output, and model solutions. Tests use tools already installed on your machine; LearnHarness does not install compilers or language runtimes.
- Drawing Pad: work over the current question or practice problem with a pressure-sensitive pen, eraser, undo and a hand tool for panning. Your drawing accompanies the next answer or message. The pad follows the app's theme and supports separate light/dark ink colors. Closing it preserves unfinished work within the current window; reloading or restarting the app does not.
- Rich Code Blocks: render chemical structures, musical scores and technical diagrams from SMILES, ABC and TikZ notation, including CircuitikZ and PGFPlots. These are static drawings, not simulations or audio playback. Enable the notation families you want in the plugin's settings.
Coding tests execute locally with your user permissions, not in a sandbox. Use only code you trust.
Extend LearnHarness
Settings → Community plugins provides the local plugin directory, package discovery/refresh, enable switches and a downloadable plugin-authoring skill. The download includes a portable type-only SDK, complete API reference, guides, small examples and the official plugin source projects, so you or a coding agent can build an extension without cloning LearnHarness itself.
Plugins can add views, settings, tools, agent instructions, question and practice types, submission extensions and background tasks. See the authoring guide for installation and capability details.
Community plugins are trusted local code, not sandboxed extensions. Install only code you trust. Refresh discovers packages; restart after changing already-loaded plugin code.
Themes
- Choose from eleven themes in Settings → Appearance, including Catppuccin, Rosé Pine, Gruvbox, Ivory and Pastel, alongside the original dark palette.
- Adjust individual colors, import a custom theme as JSON, or export the palette you are using. Existing color overrides survive theme changes; Reset all restores the selected theme's colors.
- The native window background and controls follow the selected appearance. Diagrams, the graph and other previously dark-only surfaces now support light themes.
- Custom reading fonts apply consistently across reading-font UI, including sidebar names when their serif option is off. A separate Code ligatures switch covers code blocks, inline code and coding editors; it defaults off.
Side conversations
- Select part of a tutor's explanation and choose Ask, or open a side conversation from the lesson's question-mark control. Ask follow-ups in a movable, resizable floating window or dock it beside the lesson.
- Get clarification while a question is waiting for your answer, without submitting that answer or advancing the lesson. Side conversations support dictation and remain available when you return to the session.
- The main tutor receives completed side exchanges as explicitly marked helper conversations, so it can take what you have already clarified into account—not just a generated summary.
- Cite is a separate action: quote the tutor's exact words into your reply, add a comment, and jump back to the original passage.
Smaller improvements
- Math renders correctly in probe assessments and collapsed question previews. Assessments are more compact, and question submission no longer flashes a preparation row.
- Extract files… rejects unsupported formats and common binary files before extraction starts, with shorter skip reports when importing folders.
- An opt-in Include reasoning in token estimates (OpenAI Responses only) setting accounts for replayed reasoning in compaction estimates. It defaults off.
- Side-conversation admission uses the matching Claude Code session's reported context capacity rather than treating the compaction trigger as a hard limit. Retry can recover from the earlier local budget refusal.
- Desktop development waits for the server to become ready before opening its window. When updating a source checkout, run
npm ciandnpm run plugins:setupbefore starting or building the app.
Security and compatibility
This release tightens research fetches, rendered images, external links, browser-only API access and demo verification. Some protections intentionally change behavior:
- Web/PDF research fetches refuse localhost and private-network destinations. This does not remove support for local model providers.
- Rendered Markdown no longer loads HTTP(S) images, including same-origin images. Native image attachments and generated figures remain supported.
- Generated SVG figures are verified with the native renderer only. Common missing-namespace and HTML-space markup is repaired for rendering; other rendering failures go back to the model for correction instead of a browser fallback.
- External links handed to the operating system are limited to HTTP, HTTPS and mailto.
- Source-mode servers bind to localhost by default, with host and same-origin checks. Trusted-LAN access requires an explicit opt-in; browser-only mode still has no user authentication. See the development guide.
Known limitations
The existing reasoning-chain limitation remains: merging equivalent propositions can drop a necessary premise. This release does not fix that behavior or claim to resolve previously reported notes-import timeout and audit-recovery issues.
Thanks to @franco-g-s, @mwbini, @KeyGP, @MarcusXavierr, @qrilka, @Ethan-Prunty, @skh-07, @xolah88457 and @IsaacZhangg for code, ideas and reports, and to everyone who helped review and test. This release includes contributions from #240, #308, #384, #429, #451, #487, #514, #536, #541, #544 and #585.