Sno Station
Sno Station은 AI 에이전트를 하나의 팀으로 묶는 오픈소스 워크스테이션으로, 로컬 머신에서 에이전트 협업을 가능하게 함
Obsidian 플러그인, 클로드 코드 로그인으로 클로드와 함께 페인만식으로 노트·PDF 학습
Obsidian plugin: learn your notes and PDFs with the Feynman technique, tutored by Claude through your Claude Code login.
플러그인TypeScript · SvelteGitHub @wanikhawar직접 설치운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Learn the notes and PDFs in your vault with the Feynman technique. Your tutor is Clawd, a pixel tutor in glasses.
You explain an idea in plain words; Clawd finds what's missing, wrong or hidden behind jargon, re-teaches just that,
and quizzes you until it sticks. Claude runs through your Claude Code login, so your Pro/Max subscription works
and you don't need an API key. You can use OpenAI's models through the Codex CLI instead.README 전문 보기 ↗Learn the notes and PDFs in your vault with the Feynman technique. Your tutor is Clawd, a pixel tutor in glasses. You explain an idea in plain words; Clawd finds what's missing, wrong or hidden behind jargon, re-teaches just that, and quizzes you until it sticks. Claude runs through your Claude Code login, so your Pro/Max subscription works and you don't need an API key. You can use OpenAI's models through the Codex CLI instead.
What it does:
pdftotext, falling back to Obsidian's built-in pdf.js), long PDFs split into page ranges, and page citations. Scanned PDFs are listed as unreadable.$…$, $$…$$), and everything is rendered with Obsidian's own Markdown renderer and MathJax, including quiz options, gaps and fixes. Formulas garbled by PDF extraction are written back as LaTeX.Every screenshot below is the real plugin running in Obsidian, graded live by Claude.
claude or codex CLI). On Obsidian 1.8.7–1.12, Obsidian installs version 0.1.3 automatically.claude once in a terminal to sign in. The plugin finds it in the usual places (~/.local/bin, Homebrew, /usr/local/bin); if it doesn't, set the path in settings.codex login). Pick it under Settings → Claude Tutor.poppler (pdftotext) for the best PDF text.Claude Tutor is in Obsidian's community plugins: open Settings → Community plugins → Browse, search for Claude Tutor, then install and enable it. Obsidian keeps it up to date.
Then click the Clawd icon in the ribbon (or run the Claude Tutor: Open command) and pick your study folders.
Download main.js, manifest.json and styles.css from the latest release into <vault>/.obsidian/plugins/claude-tutor/, then enable it under Settings → Community plugins.
npm install
npm run build # type-checks, then writes main.js
VAULT="/path/to/your/vault"
mkdir -p "$VAULT/.obsidian/plugins/claude-tutor"
cp main.js manifest.json styles.css "$VAULT/.obsidian/plugins/claude-tutor/"
Then enable it under Settings → Community plugins.
For development, symlink the folder instead and run npm run dev to rebuild on save.
| Command | |
|---|---|
| Open | Opens the tutor (in the right sidebar, where it resizes with the sidebar; or in a tab if you turn that off in settings) |
| Start study session | Explain due concepts, then a short quiz |
| Quiz me on the current note | Reads the note if needed, then quizzes you on it |
| Explain a concept from the current note | Starts the Feynman loop on its most due concept |
| Re-scan study folders | Reloads the library |
All data stays in the plugin folder (.obsidian/plugins/claude-tutor/):
data.json: settings.progress.json: concepts, scheduling, attempts and misconceptions. It's written atomically, and a backup is kept if the file can't be read.pdf-cache/: extracted PDF text.In your vault, the plugin only writes notes you ask for: Teach → Save as note creates a note in Claude Tutor/Lessons/ (configurable).
Nothing is sent anywhere except to the model you chose, through your own claude or codex CLI: one request per note read, and one per answer graded.
claude or codex CLI (and pdftotext, if installed) as child processes, passing them your environment with common install folders added to PATH so they can be found when Obsidian is launched from the dock. That's why it's desktop-only.claude and codex binaries, and replaces progress.json with an atomic rename so a crash can't leave it half-written. With Codex, each request runs in a temporary folder (holding its instructions and any attached images) next to a temporary Codex home that links to your Codex login (~/.codex/auth.json), so your global Codex instructions and skills aren't sent with your notes; both are deleted when the request ends. It doesn't read or write anything else outside your vault.claude CLI, or to OpenAI by the codex CLI, to evaluate explanations, write quizzes and reply. Replies, and lessons you save as notes, can't load anything from the web: remote images in them become links. The plugin itself makes no other network requests and has no telemetry.vault.getFiles(), getAllLoadedFiles()) to find the notes in your study folders, to count notes per folder on the first-run screen, to offer notes, folders and images in the Add note or PDF, Add folder and Image from vault pickers, and to follow notes when a folder is renamed. Listing reads no content: it only reads notes in your study folders (or ones you add one by one) and images you attach, and only sends a note to the model once you've picked it for Clawd to read.See CONTRIBUTING.md for how to set up, test and send changes.
npm install
npm run build # type-checks, then writes main.js
npm test # core unit tests (notes, PDF reflow/split, SRS, progress)
npm run lint # Obsidian's review rules and the vault-listing check
npm run format # format with Prettier
CLAUDE_LIVE=1 npx vitest run tests/live.test.ts # live test against Claude (Haiku): checks LaTeX output
npm run dev # rebuild main.js on change
| Path | Purpose |
|---|---|
src/main.ts | Plugin: view, ribbon, commands, file menu, vault sync, progress file |
src/backend.ts | What the UI calls: indexing, explain/quiz/grade/check, Ask Clawd |
src/library.ts | Study scope, Markdown/PDF loading, PDF cache |
src/core/ | Pure TypeScript: Claude Code and Codex bridges, prompts, SM-2, notes, PDF reflow/split, progress store |
src/ui/ | Svelte 5 UI (Markdown and MathJax rendered by Obsidian) |
gh attestation verify main.js -R wanikhawar/claude-tutor