{
  "markdown": "# no-vibe\n\nTurn your AI assistant into a tutor. It plans, hints, reviews and adapts while **you** write every line.\n\n- **Is:** a guide that works beside your real project in your editor\n- **Is not:** a chat only window you ask for answers\n- **Needs:** a project open and an editor where you type the code\n\n> 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 <url>` 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 & 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 & 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/<slug>.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 add no-vibe --marketplace 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 <topic>` | one-shot lesson |\n| `/no-vibe --ref <url> <topic>` | attach a reference project |\n| `/no-vibe --mode concept\\|skill\\|debug <topic>` | set voice mode |\n| `/no-vibe-btw <task>` | one-shot escape hatch — AI may write for this task only |\n| `/no-vibe-challenge [<focus>]` | 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 add no-vibe --marketplace 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",
  "bytes": 9778,
  "sha": "ffa24fca7bc4b48c5efe9d9870fcce8280ba55bbdd446f88d9643e38b838774e",
  "repo_slug": "rizukirr/no-vibe",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/plg_rizukirr_no_vibe_87f21045/readme"
}