Skip to content

v2.0.3

Latest

Choose a tag to compare

@rizukirr rizukirr released this 23 May 02:59
· 1 commit to main since this release

Codex marketplace, npm publish prep, disclosure modes

First stable release covering the disclosure-mode redesign (started in v2.0.3-beta01) and distribution reach to the Codex plugin marketplace and the npm registry.

Highlights

  • Codex marketplace install. codex plugin install no-vibe now works end-to-end. Codex moves from instruction-only soft-block to a real hard-block on apply_patch and shell write attempts — the existing Claude hook scripts are reused via Codex's ${PLUGIN_ROOT} / legacy ${CLAUDE_PLUGIN_ROOT}.
  • Disclosure modes (guided write vs. showcase). Guided write is now the default Phase 3 path: AI walks the user toward the code in English with graded help verbs (hint / analogy / pseudo / show / less) so the code the user types comes from a decision they made, not from transcribing a block. Showcase remains available as a fallback.
  • Prediction gate. Every Phase 3 layer now ends with a one-question prediction targeting an edge case, intermediate value, branch, or failure mode — never a value already named in the expected-output signature. The run becomes a self-test rather than passive verification.
  • Anti-sycophancy and locator-anchored critique. Phase 4 review now resists agreement spirals on user rebuttals and ties every critique line to a precise locator in the user's code.
  • First-class native install per CLI in the README. Claude Code, Codex, Pi, Gemini CLI, OpenCode — each now has a one-step install snippet using its native CLI command.
  • npm-publish ready. LICENSE (MIT), full package.json metadata (license, author, repository, homepage, bugs, main, expanded keywords), and an explicit files array scoping the tarball to plugin content only. `npm pack --dry-run`: 41 files, 74.4 kB — no project state, tests, or external vendored content leaks through.

Install

Claude Code

```
/plugin marketplace add rizukirr/no-vibe
/plugin install no-vibe@no-vibe
```

Codex (new — marketplace install)

```bash
codex plugin marketplace add rizukirr/no-vibe
codex plugin install no-vibe
```

Pi

```bash
pi install git:github.com/rizukirr/no-vibe
```

Gemini CLI

```bash
gemini extensions install https://github.com/rizukirr/no-vibe --ref=v2.0.3
```

OpenCode

Add to `~/.config/opencode/opencode.json`:
```json
{
"$schema": "https://opencode.ai/config.json\",
"plugin": ["no-vibe@git+https://github.com/rizukirr/no-vibe.git"]
}
```
Then fetch the command files (see `INSTALL.opencode.md`).

Changes since v2.0.2

Distribution & packaging

  • `3087dd2` test(codex): new `tests/test_codex_plugin.mjs` parity test (manifest fields, version parity with `package.json`, hook script existence + executable bit, write/bash matcher coverage for both Claude and Codex tool names, author URL regression guard). `test_validate_memory_write` also wired into CI (was running locally but never in CI). `workflow_dispatch` added for manual triggering.
  • `c7e6008` fix(consistency): unbroke the README platform-support table (footnote was splitting it; one row was orphaned below the footnote). Corrected a pre-existing `author.github` typo (`rizkirr` → `rizukirr`) in both `.claude-plugin/plugin.json` and `.codex-plugin/plugin.json`.
  • `d96d4c0` chore(release): version bumped to `2.0.3` across all six version-coupled manifests (`package.json`, `.claude-plugin/plugin.json`, `.claude-plugin/marketplace.json`, `gemini-extension.json`, `.pi-plugin/plugin.json`, `.codex-plugin/plugin.json`).
  • `e798297` feat(distribution): new `.codex-plugin/plugin.json` Codex marketplace manifest; promote native install commands per CLI in the README; `gemini extensions install` promoted as the recommended Gemini path; `LICENSE` (MIT) added; `package.json` filled out for npm publish.

Teaching redesign (originally v2.0.3-beta01)

  • `70009d5` feat(phase4): tutor failure-mode audit; level-dependent Block body; surface parity for the new disclosure-mode contract.
  • `c8733ec` fix(surfaces): align write-guard scope, PROFILE seed, and challenge spec across Claude / OpenCode / Pi / Codex / Gemini.
  • `6482be4` docs: align `AGENTS.md` test list and README platform row with current state.
  • `fdbc552` feat(phase4): locator-anchored critique and anti-sycophancy rebuttal handling.
  • `ea1aa8d` docs: frame no-vibe as pure for learning; emphasize that the user must contribute the thought process, not just keystrokes.
  • `fd45597` docs: propagate disclosure mode through README, `CLAUDE.md` / `AGENTS.md` / `GEMINI.md`, and all `INSTALL.*.md` guides.
  • `99c1f48` docs(commands): relabel `--mode` as voice mode; surface disclosure mode as a distinct axis.
  • `af6ee18` feat(hooks): sync canonical PROFILE.md headings to include the new Disclosure mode section.
  • `0d34829` feat(teaching): introduce disclosure modes (guided write vs. showcase) and the per-layer prediction gate.

Migration / breaking changes

None. All existing `/no-vibe`, `/no-vibe-btw`, `/no-vibe-challenge` invocations behave the same. New behavior — disclosure modes and the prediction gate — defaults on for new sessions; existing `PROFILE.md` files are read as-is and gain the `## Disclosure mode` section on the next AI write.

Verified

  • All 9 test suites pass: `test_block_writes`, `test_block_bash_writes`, `test_validate_memory_write`, `test_status`, `test_escape_hatch`, `test_gemini_guard`, `test_contract_injection`, `test_opencode_plugin`, `test_pi_plugin`, `test_codex_plugin` (148+ assertions, 0 failures).
  • CI green on PR #18 (initial distribution work) and PR #19 (release + Codex parity).
  • `npm pack --dry-run` clean: 41 files, 74.4 kB, no `.no-vibe/`, no tests, no docs, no `external/` leak through.
  • The plugin loads cleanly via `node -e 'import("./index.js")'` exporting `NoVibePlugin` + default.

Coming next

  • `pi install npm:no-vibe` and `"plugin": ["no-vibe"]` (OpenCode) — both unlocked the moment the npm publish lands.
  • Smoke-test the Codex hooks against a live Codex CLI build to confirm the stdin payload field names (`tool_name`, `tool_input.file_path`) match what `hooks/block-writes.sh` parses; if a Codex release uses different names, a small jq update covers both runtimes.