- Add the plugin to your OpenCode config (
~/.config/opencode/opencode.json):
{
"$schema": "https://opencode.ai/config.json",
"plugin": [
"superpowers@git+https://github.com/obra/superpowers.git",
"no-vibe@git+https://github.com/rizukirr/no-vibe.git"
]
}- Install global commands:
mkdir -p ~/.config/opencode/commands
curl -fsSL https://raw.githubusercontent.com/rizukirr/no-vibe/refs/heads/main/.opencode/commands/no-vibe.md -o ~/.config/opencode/commands/no-vibe.md
curl -fsSL https://raw.githubusercontent.com/rizukirr/no-vibe/refs/heads/main/.opencode/commands/no-vibe-challenge.md -o ~/.config/opencode/commands/no-vibe-challenge.md
curl -fsSL https://raw.githubusercontent.com/rizukirr/no-vibe/refs/heads/main/.opencode/commands/no-vibe-btw.md -o ~/.config/opencode/commands/no-vibe-btw.md- Refresh plugin cache (recommended on install/update):
rm -rf ~/.cache/opencode/packages/no-vibe@git+https:/github.com/rizukirr/no-vibe.git
opencode run --print-logs "check no-vibe plugin"- Restart OpenCode.
- Run
/no-vibe on. This creates.no-vibe/active; PROFILE.md is not created yet (it is created by the AI on its first reply). - Start a lesson topic (for example
/no-vibe build a linear layer) - On the AI's first reply, confirm
~/.no-vibe/PROFILE.mdexists with the schema headings (## Identity & expertise,## Learning style,## Disclosure mode,## Observed strengths,## Known gaps) and empty bullets under each..no-vibe/SUMMARY.mdshould NOT exist yet — it appears at the first layer close worth recording, with sections## Current Focus,## Accomplishments,## Open Questions. - Confirm the assistant teaches in chat and does not write project files directly.
CLI note: when using opencode run, invoke commands with --command (for example opencode run --command no-vibe on). Do not pass /no-vibe on as a plain message if you expect command execution.
no-vibe uses a four-layer adaptation stack, split by write cadence and scope:
- Default teaching style — the floor. Defined in
skills/no-vibe/SKILL.md. Ships with the plugin; you never edit this directly. ~/.no-vibe/PROFILE.md— global, stable identity (AI-managed): identity, expertise, learning style, disclosure mode (guided vs. showcase default), observed strengths, known gaps. AI-created on your first/no-vibeactivation, rewritten only when something cross-project durable shifts..no-vibe/SUMMARY.md— project, running journey (AI-managed): current focus, accomplishments, open questions in this project. AI-created at the first layer close worth recording, updated frequently, pruned aggressively.user/*.md— your override files (user-managed, AI never touches):~/.no-vibe/user/*.md— global overrides.no-vibe/user/*.md— project overrides
The OpenCode bootstrap hook is gated on .no-vibe/active, so projects without no-vibe never get a stray .no-vibe/ directory. The hook injects ~/.no-vibe/PROFILE.md, .no-vibe/SUMMARY.md (when present), and every user/*.md into the system prompt under a ## Background Memory block prefaced with "Use this memory sparingly — only when directly relevant". It does NOT create PROFILE.md, SUMMARY.md, or user/ — AI creates the first two when needed; you create files under user/ if you want explicit overrides.
Example explicit override:
mkdir -p ~/.no-vibe/user
cat > ~/.no-vibe/user/style.md <<'EOF'
- Skip the 12-year-old framing — I have a CS background; technical vocab is fine.
- Prefer direct mechanism over kitchen/sports analogies.
EOFThe filename is yours to choose; the AI loads every .md file in user/ sorted by filename. Anything in user/ is read-only for the AI.
- Check logs:
opencode run --print-logs "hello" 2>&1 | rg -i "no-vibe|plugin|error" - Requires
rg(ripgrep) for the troubleshooting command above - If install fails, look for
ENOENT ... package.jsononno-vibe@git+... - If
/no-vibeis unknown, command files were not installed in~/.config/opencode/commands/ - If installed version looks stale, clear only the no-vibe cache path above, run
opencode run --print-logs "check no-vibe plugin", then restart OpenCode