{"id":48751243,"url":"https://github.com/rizukirr/no-vibe","last_synced_at":"2026-05-23T04:05:40.355Z","repository":{"id":350292180,"uuid":"1206142707","full_name":"rizukirr/no-vibe","owner":"rizukirr","description":"A plugin that turns your AI coding assistant into a tutor that understands your struggles, adapts to how you learn and helps you complete your real projects on your own.","archived":false,"fork":false,"pushed_at":"2026-04-27T12:23:48.000Z","size":181,"stargazers_count":15,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-04-27T13:22:29.500Z","etag":null,"topics":["ai-agents","claude-code","codex","learning","llm","mentor","opencode","plugin","study","tutor","vibe-coding","vibecoding"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rizukirr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-04-09T16:08:42.000Z","updated_at":"2026-04-27T12:06:28.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/rizukirr/no-vibe","commit_stats":null,"previous_names":["rizukirr/no-vibe"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/rizukirr/no-vibe","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rizukirr%2Fno-vibe","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rizukirr%2Fno-vibe/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rizukirr%2Fno-vibe/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rizukirr%2Fno-vibe/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rizukirr","download_url":"https://codeload.github.com/rizukirr/no-vibe/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rizukirr%2Fno-vibe/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32459420,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-29T22:27:22.272Z","status":"online","status_checked_at":"2026-04-30T02:00:05.929Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-agents","claude-code","codex","learning","llm","mentor","opencode","plugin","study","tutor","vibe-coding","vibecoding"],"created_at":"2026-04-12T19:04:26.978Z","updated_at":"2026-05-23T04:05:40.349Z","avatar_url":"https://github.com/rizukirr.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# no-vibe\n\nTurn your AI assistant into a tutor. It plans, hints, reviews and adapts with you.\n\n\u003e Pair with [vibekit](https://github.com/rizukirr/vibekit): vibekit when you want speed, no-vibe when you want to learn.\n\n## Why no-vibe\n\nVibe-coding produces output without producing understanding and *copy-typing what the AI shows you* produces the same hollow result one keystroke at a time. The thing that actually transfers is the **thought process** and **manual code writing**: deciding what to do, predicting what will happen and naming what broke, no-vibe is built so you contribute that, not just keystrokes.\n\n- **You write every line of project code.** AI refuses to. Hard-guarded by hooks across all five surfaces.\n- **You think before you type.** Guided write is the default — AI walks you toward the code in English with graded hints (`hint` / `analogy` / `pseudo` / `show` / `less`), so the code you write comes from a decision you made, not a block you transcribed.\n- **You predict before you run.** Every layer ends with a one-question prediction gate: name the edge case, the failing branch, or the intermediate value *before* the program runs. The run becomes a self-test, not passive verification.\n- **AI is a Socratic guide, not a generator.** It asks, hints, reviews, and explains *when you're ready to integrate the explanation*.\n- **You learn from the project you're actually building** — not contrived exercises. Real code, real bugs, real decisions in your repo. Bottom-up and incremental: six phases, small layers, your diff is the proof of progress.\n\n## How it works\n\n- **Top-down, one layer at a time.** Minimal runnable skeleton first; each layer runs and shows output before the next.\n- **Where → code → why → run + verify.** Each step says exactly which file and line, then what runs and what should print.\n- **Real code, not hallucinations.** Attach `--ref \u003curl\u003e` and the AI quotes actual source with `file:line` citations.\n- **Adapts to you.** The AI keeps a `PROFILE.md` (global, stable identity) and a `SUMMARY.md` (per-project, running journey) it writes itself — observed strengths, known gaps, style notes, current focus, open questions. You can edit either, or layer explicit overrides via `user/*.md`.\n- **Your files stay yours.** Hard write-guards on Claude Code, OpenCode, and Pi block writes (file *and* Bash) outside `.no-vibe/**`. Codex/Gemini enforce the same rule via instruction.\n\n## How adaptation works\n\nno-vibe uses a four-layer stack, split by *write cadence* and *scope*:\n\n| Layer | Owner | What lives in it |\n|---|---|---|\n| **Default teaching style** | **Plugin** — defined in `skills/no-vibe/SKILL.md` | Plain words first, concrete-before-abstract, hint-before-answer, run + verify after every layer. The floor. |\n| `~/.no-vibe/PROFILE.md` (global, stable identity) | **AI** — created on first `/no-vibe`, rewritten *rarely* when cross-project identity / style shifts | Identity \u0026 expertise, learning style, disclosure mode, observed strengths, known gaps |\n| `.no-vibe/SUMMARY.md` (project, running journey) | **AI** — created at the first layer close worth recording, rewritten *often* (every closed layer is a candidate) | Current Focus, Accomplishments, Open Questions in *this* project |\n| `~/.no-vibe/user/*.md` and `.no-vibe/user/*.md` | **You** — AI never creates, edits, or deletes anything inside | Explicit overrides: instructions you want the AI to follow without inferring them |\n\n**Why the split.** Stable identity (the things that wouldn't change if you opened a different project tomorrow) and running journey (the things that only make sense inside *this* project) update on totally different cadences. Keeping them in one file forces the AI to decide on every rewrite whether *this* fact is stable or transient — and gets it wrong. PROFILE only holds cross-project-durable facts; SUMMARY only holds project-bound state.\n\n**PROFILE.md is the AI's global progression file.** On your first `/no-vibe` activation, the AI creates it with empty section headings (Identity \u0026 expertise, Learning style, Disclosure mode, Observed strengths, Known gaps). It's rewritten only when something durable about how you learn shifts — most layers produce no PROFILE update.\n\n**SUMMARY.md is the AI's per-project journey file.** It's not seeded on activation — the AI creates it the first time a layer close produces an outcome worth recording, then keeps it tight by pruning resolved Open Questions and old Accomplishments. The most valuable section is `Open Questions` — things you dodged with a workaround or didn't fully integrate, surfaced so the next session can revisit them.\n\n**The silent-default + NO_CHANGE rule.** Both files follow two disciplines: *most layer-closes produce no write* (silent default), and *the AI never rewrites a file with content equivalent to what's already there* (NO_CHANGE). A no-op write is treated as a bug. Read either file any time to see what the AI has learned; edit them yourself if something looks wrong.\n\n**`user/*.md` is your override layer.** Drop any `.md` file into `~/.no-vibe/user/` (global) or `.no-vibe/user/` (project) and the AI loads it sorted by filename. Anything in `user/` wins on conflict with PROFILE.md or the default style. The AI is forbidden from writing to `user/` — when it notices a pattern that belongs there, it shows you the exact line and lets you add it.\n\nPractical examples — anything in this style works in `user/*.md`:\n\n- *\"Use Rust analogies when you explain memory or ownership.\"* → global, applies everywhere\n- *\"I'm already solid on async/await — skip the basics.\"* → global, AI stops explaining what you know\n- *\"This project uses tabs not spaces; don't comment on it.\"* → project, kills repeated nudges\n- *\"Always show the failing run before the fix.\"* → global, changes how reviews happen\n\nPer-session cycle state (current phase, layer, resume hints) lives separately in `.no-vibe/data/sessions/\u003cslug\u003e.json` — you generally don't touch that.\n\n## Quick start\n\n### Claude Code\n\n```\n/plugin marketplace add rizukirr/no-vibe\n/plugin install no-vibe@no-vibe\n```\n\nRestart Claude Code.\n\n### Codex\n\n```bash\ncodex plugin marketplace add rizukirr/no-vibe\ncodex plugin install no-vibe\n```\n\n(Requires a Codex CLI build with plugin marketplace support. For older Codex builds, see `INSTALL.codex.md` for the manual symlink path — skills only, soft block.)\n\n### Pi\n\n```bash\npi install npm:no-vibe\n```\n\nOr pin to git: `pi install git:github.com/rizukirr/no-vibe`. See `INSTALL.pi.md` for verification steps.\n\n### Gemini CLI\n\n```bash\ngemini extensions install https://github.com/rizukirr/no-vibe\n```\n\nPin a version with `--ref=v2.0.3`. See `INSTALL.gemini.md` for the legacy manual-symlink path.\n\n### OpenCode\n\nAdd to `~/.config/opencode/opencode.json`:\n\n```json\n{\n  \"$schema\": \"https://opencode.ai/config.json\",\n  \"plugin\": [\"no-vibe\"]\n}\n```\n\nOpenCode has no `plugin install` CLI, so commands also need to be fetched once:\n\n```bash\nmkdir -p ~/.config/opencode/commands\nfor c in no-vibe no-vibe-challenge no-vibe-btw; do\n  curl -fsSL \"https://raw.githubusercontent.com/rizukirr/no-vibe/refs/heads/main/.opencode/commands/$c.md\" \\\n    -o \"$HOME/.config/opencode/commands/$c.md\"\ndone\n```\n\nSee `INSTALL.opencode.md` for verification steps and the cache-refresh tip.\n\n### Your first lesson\n\n```\n/no-vibe build a linear layer like pytorch's\n```\n\nCodex uses `$` instead of `/`.\n\n## Commands\n\n| Command | Effect |\n|---|---|\n| `/no-vibe on` / `off` | persistent mode toggle |\n| `/no-vibe \u003ctopic\u003e` | one-shot lesson |\n| `/no-vibe --ref \u003curl\u003e \u003ctopic\u003e` | attach a reference project |\n| `/no-vibe --mode concept\\|skill\\|debug \u003ctopic\u003e` | set voice mode |\n| `/no-vibe-btw \u003ctask\u003e` | one-shot escape hatch — AI may write for this task only |\n| `/no-vibe-challenge [\u003cfocus\u003e]` | get a coding challenge |\n\nFlags combine: `/no-vibe --ref pytorch --mode concept how does autograd work`.\n\n## Voice modes\n\n| Mode | Best for | Style |\n|------|----------|-------|\n| **concept** (default) | \"teach me how X works\" | more prose, deeper check-ins |\n| **skill** | \"I want to practice writing Y\" | muscle-memory repetition |\n| **debug** | \"why does Z behave like this\" | start from symptom, descend |\n\nVoice modes control *how AI talks*. A separate axis, **disclosure modes** (guided write vs. showcase), controls *how much AI reveals before the user writes code in a Phase 3 layer* — guided is the default and walks the user toward the code with English + graded hints on request; showcase shows the full code block upfront. Both default to running a one-question **prediction gate** before the user runs the code each layer, so the run becomes a self-test rather than passive verification. See `skills/no-vibe/SKILL.md` for the full disclosure-mode contract and the help verbs (`hint` / `analogy` / `pseudo` / `show` / `less`).\n\n## Platform support\n\n| Feature | Claude Code | OpenCode | Pi | Codex | Gemini CLI |\n|---|:-:|:-:|:-:|:-:|:-:|\n| File-write guard (hook) | ✓ | ✓ | ✓ | ✓ * | soft |\n| Bash-write guard (hook) | ✓ | ✓ | ✓ | ✓ * | soft |\n| Status + resume hint | ✓ | ✓ | ✓ | ✓ * | soft |\n| Commands | ✓ | ✓ | ✓ | ✓ | ✓ |\n| PROFILE.md + SUMMARY.md + user/ overrides | ✓ | ✓ | ✓ | ✓ | ✓ |\n\n\\* Codex hooks fire under the marketplace install (`codex plugin install no-vibe`). The legacy manual-symlink install path is soft-only.\n\n\"soft\" = instruction-enforced (no hook surface available); the rule still binds.\n\n## License\n\nMIT. Issues and PRs welcome at [github.com/rizukirr/no-vibe/issues](https://github.com/rizukirr/no-vibe/issues).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frizukirr%2Fno-vibe","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frizukirr%2Fno-vibe","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frizukirr%2Fno-vibe/lists"}