{
  "markdown": "<h1 align=\"center\">\n  <br>\n  <a href=\"https://vibelearn.dev\">\n    <picture>\n      <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/anergcorp/vibelearn/main/docs/public/vibelearn-logo-for-dark-mode.webp\">\n      <source media=\"(prefers-color-scheme: light)\" srcset=\"https://raw.githubusercontent.com/anergcorp/vibelearn/main/docs/public/vibelearn-logo-for-light-mode.webp\">\n      <img src=\"https://raw.githubusercontent.com/anergcorp/vibelearn/main/docs/public/vibelearn-logo-for-light-mode.webp\" alt=\"VibeLearn\" width=\"400\">\n    </picture>\n  </a>\n  <br>\n</h1>\n\n<h4 align=\"center\">Learn from every session. Built for <a href=\"https://claude.com/claude-code\" target=\"_blank\">Claude Code</a>.</h4>\n\n<p align=\"center\">\n  <a href=\"LICENSE\">\n    <img src=\"https://img.shields.io/badge/License-AGPL%203.0-blue.svg\" alt=\"License\">\n  </a>\n  <a href=\"package.json\">\n    <img src=\"https://img.shields.io/badge/version-0.1.0-green.svg\" alt=\"Version\">\n  </a>\n  <a href=\"package.json\">\n    <img src=\"https://img.shields.io/badge/node-%3E%3D18.0.0-brightgreen.svg\" alt=\"Node\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"#quick-start\">Quick Start</a> •\n  <a href=\"#how-it-works\">How It Works</a> •\n  <a href=\"#vl-cli\">VL CLI</a> •\n  <a href=\"#configuration\">Configuration</a> •\n  <a href=\"#privacy\">Privacy</a> •\n  <a href=\"#troubleshooting\">Troubleshooting</a>\n</p>\n\n<p align=\"center\">\n  VibeLearn is a Claude Code plugin that silently watches what you build, extracts the concepts you encounter, and turns them into quiz questions — so you actually retain what you learn while coding.\n</p>\n\n---\n\n## What It Does\n\nEvery time you end a Claude Code session, VibeLearn automatically:\n\n1. **Detects your tech stack** — reads `package.json`, `pyproject.toml`, `go.mod`, etc.\n2. **Analyzes your code changes** — identifies patterns: custom hooks, API routes, TypeScript types, design patterns\n3. **Extracts learning concepts** — a single LLM call produces a session summary and a list of concepts you encountered\n4. **Generates quiz questions** — a second LLM call creates targeted questions per concept across 7 formats: `multiple_choice`, `code_reading`, `spot_the_bug`, `fill_in_blank`, `open_ended`, `true_false`, and `ordering` — selected based on concept difficulty (junior / mid / senior)\n5. **Syncs to vibelearn.dev** — your learning profile is stored securely (optional, requires `vl login`)\n\nThen run `vl quiz` to review what you learned.\n\n---\n\n## Quick Start\n\nInstall the plugin in a Claude Code session:\n\n```\n/plugin marketplace add anergcorp/vibelearn\n/plugin install vibelearn\n```\n\nRestart Claude Code. VibeLearn will start capturing learning data automatically from your next session.\n\n**Optional — connect to vibelearn.dev:**\n\n```bash\nvl login <your-api-key>\n```\n\nGet your API key at [vibelearn.dev](https://vibelearn.dev).\n\n---\n\n## vl CLI\n\nThe `vl` command lets you review and interact with your learning data:\n\n```bash\nvl quiz              # Interactive quiz — all pending questions\nvl quiz --session    # Quiz questions from the last session only\n\nvl status            # Sessions analyzed, top concept categories, mastery stats\nvl gaps              # Concepts you haven't mastered yet (mastery < 50%)\n\nvl login <api-key>   # Connect to vibelearn.dev\nvl login --status    # Check login status\n```\n\n**Example session:**\n\n```\n$ vl quiz\n\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n  VibeLearn Quiz — 3 questions\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\nQ1/3 (intermediate) [React Server Actions]\n\n  Code:\n    'use server'\n    export async function createPost(data: FormData) { ... }\n\n  What does the 'use server' directive tell Next.js?\n\n  A) Run this function in a Web Worker\n  B) Execute this function on the server, not the client\n  C) Cache the function result server-side\n  D) Mark the function as async-only\n\n  Your answer (A/B/C/D): B\n\n  ✓ Correct!\n\n  Explanation: 'use server' creates a Server Action — a function that\n  runs exclusively on the server. The client receives only the result.\n```\n\n### Adaptive Difficulty\n\nVibeLearn tracks your mastery per concept and adjusts difficulty automatically:\n\n- **3 correct in a row** → promoted to the next level (junior → mid → senior)\n- **1 wrong answer** → dropped back a level\n- **Follow-up questions** are inserted mid-quiz when you nail a junior question, to probe deeper understanding\n- **Open-ended answers** at senior level are evaluated by a 5-dimension rubric (accuracy, depth, trade-offs, practical reasoning, completeness)\n\n---\n\n## How It Works\n\n### 5 Lifecycle Hooks\n\n```\nSessionStart    → Worker starts, session initialized\nUserPromptSubmit → Session linked to user prompt\nPostToolUse     → File edits/writes/bash commands captured\nStop (Summary)  → 5-step analysis pipeline runs\nSessionEnd      → Session finalized\n```\n\n### Analysis Pipeline (runs at session end)\n\n```\n1. StackDetector   — reads package.json/config files → vl_stack_profiles\n2. StaticAnalyzer  — regex/AST patterns on code changes (hooks, routes, types…)\n3. ConceptExtractor — LLM call → session summary + concept list → vl_concepts\n4. QuizGenerator   — LLM call → quiz questions per concept → vl_questions\n5. UpstreamSync    — HMAC-signed POST to api.vibelearn.dev (queued offline if unavailable)\n```\n\n### Worker Service\n\nAn Express HTTP server on port **37778**, managed by Bun. Hooks talk to it over localhost. It handles all database writes and the analysis pipeline.\n\n### Database\n\nSQLite at `~/.vibelearn/vibelearn.db`. Key tables:\n\n| Table | Purpose |\n|-------|---------|\n| `vibelearn_session_summaries` | Human-readable session narratives |\n| `vl_concepts` | Extracted concepts per session |\n| `vl_questions` | Generated quiz questions |\n| `vl_quiz_attempts` | Your answers (HMAC-signed before sync) |\n| `vl_developer_profile` | Mastery score per concept |\n| `vl_stack_profiles` | Detected tech stack per session |\n| `vl_sync_queue` | Offline retry queue |\n\n---\n\n## Configuration\n\nSettings are auto-created at `~/.vibelearn/settings.json` on first run.\n\n**Key settings:**\n\n```json\n{\n  \"VIBELEARN_WORKER_PORT\": \"37778\",\n  \"VIBELEARN_DATA_DIR\": \"~/.vibelearn\",\n  \"VIBELEARN_LOG_LEVEL\": \"INFO\",\n  \"VIBELEARN_PROVIDER\": \"claude\",\n  \"VIBELEARN_GEMINI_API_KEY\": \"\",\n  \"VIBELEARN_OPENROUTER_API_KEY\": \"\",\n  \"VIBELEARN_AUTO_SYNC\": \"true\",\n  \"VIBELEARN_EXCLUDED_PROJECTS\": \"\"\n}\n```\n\n**AI Provider for Analysis**\n\nThe analysis pipeline (concept extraction + quiz generation) uses your configured LLM provider. Priority order:\n\n1. **Gemini** — set `VIBELEARN_GEMINI_API_KEY` (free tier available)\n2. **OpenRouter** — set `VIBELEARN_OPENROUTER_API_KEY`\n3. **Anthropic** — uses `ANTHROPIC_API_KEY` from environment (claude-haiku-4-5)\n\n**Excluding projects:**\n\n```json\n{\n  \"VIBELEARN_EXCLUDED_PROJECTS\": \"/path/to/skip,~/personal/*\"\n}\n```\n\n---\n\n## Privacy\n\nWrap any content in `<private>` tags to prevent it from being stored or synced:\n\n```\nPlease review <private>my-secret-api-key: sk-...</private> configuration\n```\n\nEverything inside `<private>` is stripped at the hook layer before reaching the worker or database.\n\n**What is never stored:**\n- Absolute file paths (only basenames are sent upstream)\n- Raw file contents (only short snippets from the analysis)\n- Full user prompts\n\n**Anti-tamper:** Quiz attempt records are HMAC-signed with your API key before syncing. The server recomputes your streak from accepted attempt records — local SQLite data cannot be used to fake progress.\n\n---\n\n## System Requirements\n\n- **Node.js**: 18.0.0 or higher\n- **Claude Code**: Latest version with plugin support\n- **Bun**: JavaScript runtime (auto-installed if missing)\n\n---\n\n## Windows Notes\n\nIf you see `npm : The term 'npm' is not recognized`:\n\nInstall [Node.js](https://nodejs.org) and restart your terminal. Bun is auto-installed by the plugin setup script.\n\n---\n\n## Build\n\n```bash\nnpm install\nnpm run build-and-sync   # Build + sync to marketplace + restart worker\n```\n\nBuilt outputs land in `plugin/scripts/`:\n- `worker-service.cjs` — the worker daemon\n- `mcp-server.cjs` — MCP tools\n- `vl-cli.cjs` — the `vl` binary\n\n---\n\n## Contributing\n\n1. Fork the repository\n2. Create a feature branch\n3. Make your changes with tests\n4. Update documentation\n5. Submit a Pull Request\n\n---\n\n## License\n\nGNU Affero General Public License v3.0 (AGPL-3.0).\n\nSee the [LICENSE](LICENSE) file for full details.\n\n---\n\n## Support\n\n- **Issues**: [GitHub Issues](https://github.com/anergcorp/vibelearn/issues)\n- **Website**: [vibelearn.dev](https://vibelearn.dev)\n- **Repository**: [github.com/anergcorp/vibelearn](https://github.com/anergcorp/vibelearn)\n\n---\n\n**Built with Claude Agent SDK** | **Powered by Claude Code** | **Made with TypeScript**\n",
  "bytes": 8691,
  "sha": "4ecb0299c386504e759c16a06ca624c1e3a5d94273e058c645e95ff0c298e38d",
  "repo_slug": "anergcorp/vibelearn",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/plg_anergcorp_vibelearn_vibelearn_aec9b7e1/readme"
}