minimal-vibe-coding-kit 0.4.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: coding-level
3
- description: Set the coding-explanation register. /coding-level N (0=ELI5, 1=Junior, 2=Mid, 3=Senior, 4=Tech Lead, 5=God); active until reinvoked.
3
+ description: Set the coding-explanation register. /coding-level N (0=ELI5, 1=Junior, 2=Mid, 3=Senior, 4=Tech Lead, 5=God); active until reinvoked. A project default may be recorded in backbone.yml conventions.custom_rules.
4
4
  disable-model-invocation: true
5
5
  argument-hint: "[0-5]"
6
6
  ---
@@ -20,6 +20,13 @@ argument-hint: "[0-5]"
20
20
 
21
21
  1. Read `$ARGUMENTS` as N. If N is not an integer 0–5, reply with the table above and ask for a valid N.
22
22
  2. Read `references/level-<N>.md`, state once which level is now active, and apply that persona to every reply until `/coding-level` is invoked again.
23
+ 3. Ask once: "Save level N as the project default?" If yes, add or update the `Default coding level: N` entry in `backbone.yml` `conventions.custom_rules` (show the diff and wait for approval, per kit rules).
24
+
25
+ ## Project default
26
+
27
+ - First-time init records a default as a `backbone.yml` `conventions.custom_rules` entry: `Default coding level: N (<Register>)`.
28
+ - Sessions without an explicit `/coding-level` start from that default level.
29
+ - `/coding-level N` overrides the default for the current session only, unless the user saves it in step 3.
23
30
 
24
31
  ## Scope
25
32
 
@@ -48,6 +48,7 @@ No empty, unset, broad, symlinked, or unintended path may reach a destructive co
48
48
 
49
49
  ## Required outcomes
50
50
 
51
+ - Prefer a recoverable delete (`trash`) over permanent `rm` for user files; permanent deletion requires explicit confirmation of the exact paths. If `trash` is missing, recommend installing it (macOS 14+ built-in; older macOS `brew install trash`; Linux `sudo apt install trash-cli`; any OS with Node `npm i -g trash-cli`).
51
52
  - A blank branch may follow the documented default-branch fallback policy.
52
53
  - An explicit branch must fail if missing; never silently deploy another branch.
53
54
  - A blank folder/base value must fail before any `rm`, `mv`, `cp`, `rsync`, `find`, Docker, or Git cleanup command runs.
@@ -0,0 +1,11 @@
1
+ # Safe delete rules
2
+
3
+ - Never delete permanently by default. Prefer `trash` over `rm`, `rm -rf`, `rmdir`, and `find -delete` so deletions stay recoverable.
4
+ - Before deleting, check availability with `command -v trash`. If available, use `trash <path>`.
5
+ - If `trash` is missing, recommend installing it instead of falling back to `rm`:
6
+ - macOS 14 or newer: built in at `/usr/bin/trash`, nothing to install.
7
+ - Older macOS: `brew install trash` (https://formulae.brew.sh/formula/trash).
8
+ - Linux: `sudo apt install trash-cli` or `pip install trash-cli` (https://github.com/andreafrancia/trash-cli).
9
+ - Any OS with Node.js: `npm install --global trash-cli` (https://github.com/sindresorhus/trash-cli).
10
+ - Permanent deletion requires the user's explicit approval of the exact paths, and the `path-sensitive-shell-safety` skill first when paths come from variables.
11
+ - Honor the deletion preference recorded in `backbone.yml` `conventions.custom_rules` during first-time init.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: coding-level
3
- description: Set the coding-explanation register. /coding-level N (0=ELI5, 1=Junior, 2=Mid, 3=Senior, 4=Tech Lead, 5=God); active until reinvoked.
3
+ description: Set the coding-explanation register. /coding-level N (0=ELI5, 1=Junior, 2=Mid, 3=Senior, 4=Tech Lead, 5=God); active until reinvoked. A project default may be recorded in backbone.yml conventions.custom_rules.
4
4
  disable-model-invocation: true
5
5
  argument-hint: "[0-5]"
6
6
  ---
@@ -20,6 +20,13 @@ argument-hint: "[0-5]"
20
20
 
21
21
  1. Read `$ARGUMENTS` as N. If N is not an integer 0–5, reply with the table above and ask for a valid N.
22
22
  2. Read `references/level-<N>.md`, state once which level is now active, and apply that persona to every reply until `/coding-level` is invoked again.
23
+ 3. Ask once: "Save level N as the project default?" If yes, add or update the `Default coding level: N` entry in `backbone.yml` `conventions.custom_rules` (show the diff and wait for approval, per kit rules).
24
+
25
+ ## Project default
26
+
27
+ - First-time init records a default as a `backbone.yml` `conventions.custom_rules` entry: `Default coding level: N (<Register>)`.
28
+ - Sessions without an explicit `/coding-level` start from that default level.
29
+ - `/coding-level N` overrides the default for the current session only, unless the user saves it in step 3.
23
30
 
24
31
  ## Scope
25
32
 
@@ -48,6 +48,7 @@ No empty, unset, broad, symlinked, or unintended path may reach a destructive co
48
48
 
49
49
  ## Required outcomes
50
50
 
51
+ - Prefer a recoverable delete (`trash`) over permanent `rm` for user files; permanent deletion requires explicit confirmation of the exact paths. If `trash` is missing, recommend installing it (macOS 14+ built-in; older macOS `brew install trash`; Linux `sudo apt install trash-cli`; any OS with Node `npm i -g trash-cli`).
51
52
  - A blank branch may follow the documented default-branch fallback policy.
52
53
  - An explicit branch must fail if missing; never silently deploy another branch.
53
54
  - A blank folder/base value must fail before any `rm`, `mv`, `cp`, `rsync`, `find`, Docker, or Git cleanup command runs.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "minimal-vibe-coding-kit",
3
- "version": "0.4.0",
3
+ "version": "0.4.1",
4
4
  "description": "Reusable vibe coding skills and workflows for Codex-compatible repositories.",
5
5
  "author": {
6
6
  "name": "Minimal Vibe Coding Kit"
@@ -0,0 +1,16 @@
1
+ ---
2
+ description: Safe-delete guardrail - prefer trash over rm so deletions stay recoverable.
3
+ alwaysApply: true
4
+ ---
5
+
6
+ # Safe delete rules
7
+
8
+ - Never delete permanently by default. Prefer `trash` over `rm`, `rm -rf`, `rmdir`, and `find -delete` so deletions stay recoverable.
9
+ - Before deleting, check availability with `command -v trash`. If available, use `trash <path>`.
10
+ - If `trash` is missing, recommend installing it instead of falling back to `rm`:
11
+ - macOS 14 or newer: built in at `/usr/bin/trash`, nothing to install.
12
+ - Older macOS: `brew install trash` (https://formulae.brew.sh/formula/trash).
13
+ - Linux: `sudo apt install trash-cli` or `pip install trash-cli` (https://github.com/andreafrancia/trash-cli).
14
+ - Any OS with Node.js: `npm install --global trash-cli` (https://github.com/sindresorhus/trash-cli).
15
+ - Permanent deletion requires the user's explicit approval of the exact paths, and the `path-sensitive-shell-safety` skill first when paths come from variables.
16
+ - Honor the deletion preference recorded in `backbone.yml` `conventions.custom_rules` during first-time init.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: coding-level
3
- description: Set the coding-explanation register. /coding-level N (0=ELI5, 1=Junior, 2=Mid, 3=Senior, 4=Tech Lead, 5=God); active until reinvoked.
3
+ description: Set the coding-explanation register. /coding-level N (0=ELI5, 1=Junior, 2=Mid, 3=Senior, 4=Tech Lead, 5=God); active until reinvoked. A project default may be recorded in backbone.yml conventions.custom_rules.
4
4
  disable-model-invocation: true
5
5
  argument-hint: "[0-5]"
6
6
  ---
@@ -20,6 +20,13 @@ argument-hint: "[0-5]"
20
20
 
21
21
  1. Read `$ARGUMENTS` as N. If N is not an integer 0–5, reply with the table above and ask for a valid N.
22
22
  2. Read `references/level-<N>.md`, state once which level is now active, and apply that persona to every reply until `/coding-level` is invoked again.
23
+ 3. Ask once: "Save level N as the project default?" If yes, add or update the `Default coding level: N` entry in `backbone.yml` `conventions.custom_rules` (show the diff and wait for approval, per kit rules).
24
+
25
+ ## Project default
26
+
27
+ - First-time init records a default as a `backbone.yml` `conventions.custom_rules` entry: `Default coding level: N (<Register>)`.
28
+ - Sessions without an explicit `/coding-level` start from that default level.
29
+ - `/coding-level N` overrides the default for the current session only, unless the user saves it in step 3.
23
30
 
24
31
  ## Scope
25
32
 
@@ -48,6 +48,7 @@ No empty, unset, broad, symlinked, or unintended path may reach a destructive co
48
48
 
49
49
  ## Required outcomes
50
50
 
51
+ - Prefer a recoverable delete (`trash`) over permanent `rm` for user files; permanent deletion requires explicit confirmation of the exact paths. If `trash` is missing, recommend installing it (macOS 14+ built-in; older macOS `brew install trash`; Linux `sudo apt install trash-cli`; any OS with Node `npm i -g trash-cli`).
51
52
  - A blank branch may follow the documented default-branch fallback policy.
52
53
  - An explicit branch must fail if missing; never silently deploy another branch.
53
54
  - A blank folder/base value must fail before any `rm`, `mv`, `cp`, `rsync`, `find`, Docker, or Git cleanup command runs.
@@ -1,5 +1,17 @@
1
1
  # Install guide
2
2
 
3
+ ## Install from npm
4
+
5
+ ```bash
6
+ # one-shot (recommended) — adds nothing to the project's dependencies:
7
+ npx --yes minimal-vibe-coding-kit@latest install /path/to/project
8
+
9
+ # or, after `npm i -D minimal-vibe-coding-kit` inside the project:
10
+ npx mvck install .
11
+ ```
12
+
13
+ `npm i` alone only places the kit in `node_modules/` and nothing is active yet; `mvck install` (alias: `vibe-kit`) is the step that copies the kit files into the repo root.
14
+
3
15
  ## Local install
4
16
 
5
17
  ```bash
@@ -16,11 +16,13 @@ This file is intentionally small. Shared rules live in `AGENTS.md`, project fact
16
16
  - `/autoresearch-coding` - run a metric-driven improvement loop.
17
17
  - `/security-scan` - run AgentShield-style review.
18
18
  - `/daily-enhance` - propose rule, skill, and workflow improvements.
19
+ - `/coding-level N` - set explanation depth 0-5; the project default lives in `backbone.yml` `conventions.custom_rules`.
19
20
 
20
21
  ## Hard rules
21
22
 
22
23
  - Show a diff and wait for explicit approval before changing root instruction files, `backbone.yml`, rules, skills, or workflows.
23
24
  - Do not deploy, rotate secrets, run migrations, delete data, or rewrite remote history without explicit approval.
25
+ - Prefer `trash` over `rm` for deletions; permanent deletes need explicit approval of the exact paths (see `.claude/rules/safe-delete.md`).
24
26
  - Keep `.autoresearch/`, `results.tsv`, and `.vibekit/reports/` local unless the user asks to commit them.
25
27
 
26
28
  ## English Learning & Grammar Correction
@@ -69,6 +69,38 @@ Then:
69
69
  - Record domain terms and acronyms in `.vibekit/docs/CONTEXT.md` (scaffold from `.vibekit/docs/templates/CONTEXT_TEMPLATE.md`) and link it in `project.context`, so future agents stay concise.
70
70
  - Keep the PRD short: it captures intent and focus, not a full specification.
71
71
 
72
+ ## Setup preferences
73
+
74
+ Ask these two questions right after the PRD interview. Persist both answers as `backbone.yml` `conventions.custom_rules` entries in the same proposed diff.
75
+
76
+ ### 1. Safe delete (trash instead of rm)
77
+
78
+ 1. Detect first: run `command -v trash` (read-only).
79
+ 2. If `trash` is available, ask: "Use `trash` instead of `rm` for deletions so they are recoverable? (recommended: yes)"
80
+ 3. If `trash` is missing, recommend installing it, then ask the same question:
81
+ - macOS 14 or newer: already built in at `/usr/bin/trash`, nothing to install.
82
+ - Older macOS: `brew install trash` (https://formulae.brew.sh/formula/trash)
83
+ - Linux: `sudo apt install trash-cli` or `pip install trash-cli` (https://github.com/andreafrancia/trash-cli)
84
+ - Any OS with Node.js: `npm install --global trash-cli` (https://github.com/sindresorhus/trash-cli)
85
+ 4. Record the answer as a custom rule:
86
+ - yes: `Deletion safety: use trash instead of rm; permanent deletes require explicit approval of the exact paths.`
87
+ - no: `Deletion safety: user declined trash; list the exact paths and wait for approval before any rm.`
88
+
89
+ ### 2. Default coding level
90
+
91
+ Show this table exactly and ask: "Which explanation level should I use by default? Reply 0-5. You can change it anytime with `/coding-level N`."
92
+
93
+ | N | Level | Short description |
94
+ | --- | --- | --- |
95
+ | 0 | ELI5 | New to code. Everything in plain words, no jargon. |
96
+ | 1 | Junior | Knows the basics. Explains the why behind every step. |
97
+ | 2 | Mid-level | Comfortable coder. Patterns, architecture, trade-offs. |
98
+ | 3 | Senior | Concise. Trade-offs, edge cases, operational concerns. |
99
+ | 4 | Tech Lead | Strategic. Risk, ROI, team and organizational impact. |
100
+ | 5 | God | Expert peer. Minimal explanation, maximum signal. |
101
+
102
+ Record the answer as a custom rule: `Default coding level: N (<Level>) - apply this explanation depth every session; change with /coding-level N.`
103
+
72
104
  ## FIRST_TIME_INIT_RULES
73
105
 
74
106
  Create project rules from evidence in the existing repo, not from a fixed language or framework template.
@@ -153,6 +153,13 @@ function statusLine(ok, label, detail) {
153
153
  return `${ok ? 'PASS' : 'WARN'} ${label}${detail ? ` - ${detail}` : ''}`;
154
154
  }
155
155
 
156
+ const TRASH_INSTALL_HINT = 'macOS 14+ has it built in; older macOS: brew install trash; Linux: sudo apt install trash-cli; any OS with Node: npm i -g trash-cli';
157
+
158
+ function trashAvailable() {
159
+ const result = spawnSync('trash', ['--help'], { encoding: 'utf8' });
160
+ return !(result.error && result.error.code === 'ENOENT');
161
+ }
162
+
156
163
  const backbone = parseBackbone();
157
164
  const packageJson = readJson('package.json');
158
165
  const isKitTemplate = packageJson?.name === 'minimal-vibe-coding-kit';
@@ -194,8 +201,11 @@ for (const [surface, dir] of Object.entries(nativeSkillSurfaces)) {
194
201
  const commands = commandMap();
195
202
  const validation = runNodeScript('.vibekit/scripts/validate-kit.mjs');
196
203
  const probe = runProbe();
204
+ const hasTrash = trashAvailable();
197
205
  const risks = [];
198
206
 
207
+ if (!hasTrash) risks.push(`trash command not found; agents fall back to asking before rm. Install it for recoverable deletes (${TRASH_INSTALL_HINT}).`);
208
+
199
209
  if (!backbone) risks.push('backbone.yml is missing.');
200
210
  else if (backbone.templateStatus !== 'initialized' && !isKitTemplate) risks.push(`backbone.yml is ${backbone.templateStatus || 'unknown'}; run init before relying on it.`);
201
211
  if (!Object.values(surfaces).some(Boolean)) risks.push('No AI agent surfaces were detected.');
@@ -238,6 +248,10 @@ const report = {
238
248
  command: probe.command,
239
249
  status: probe.status
240
250
  },
251
+ safeDelete: {
252
+ trashAvailable: hasTrash,
253
+ installHint: hasTrash ? null : TRASH_INSTALL_HINT
254
+ },
241
255
  aiRulesLoaded: {
242
256
  sharedSkills: listFiles('.vibekit/skills').filter((f) => f.endsWith('SKILL.md')).length,
243
257
  claudeSkills: listFiles('.claude/skills').filter((f) => f.endsWith('SKILL.md')).length,
@@ -256,7 +270,8 @@ function renderMarkdown(data) {
256
270
  statusLine(Boolean(commands.validate), 'validation command detected', commands.validate || 'missing'),
257
271
  statusLine(protectedSane, 'protected paths are sane', `${data.protectedPaths.length} entries`),
258
272
  statusLine(validation.found && validation.status === 0, 'validation runs', validation.found ? `exit ${validation.status}` : 'missing'),
259
- statusLine(probe.found && probe.status === 0, 'AgentShield probe runs', probe.found ? `exit ${probe.status}` : 'missing')
273
+ statusLine(probe.found && probe.status === 0, 'AgentShield probe runs', probe.found ? `exit ${probe.status}` : 'missing'),
274
+ statusLine(hasTrash, 'trash command available for safe deletes', hasTrash ? 'deletions are recoverable' : TRASH_INSTALL_HINT)
260
275
  ];
261
276
 
262
277
  return `# Vibe Report
@@ -1,8 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import fs from 'node:fs';
3
3
  import path from 'node:path';
4
+ import { spawnSync } from 'node:child_process';
4
5
 
5
6
  const args = process.argv.slice(2);
7
+
8
+ function trashAvailable() {
9
+ const result = spawnSync('trash', ['--help'], { encoding: 'utf8' });
10
+ return !(result.error && result.error.code === 'ENOENT');
11
+ }
6
12
  const shouldWrite = args.includes('--write');
7
13
  const yes = args.includes('--yes');
8
14
 
@@ -619,6 +625,9 @@ if (shouldWrite) {
619
625
  console.log(inferred.context === 'none'
620
626
  ? '- Offer to create .vibekit/docs/CONTEXT.md (glossary) from .vibekit/docs/templates/CONTEXT_TEMPLATE.md.'
621
627
  : `- CONTEXT glossary found at ${inferred.context}; keep it current.`);
628
+ console.log('\nSetup preferences (record answers in conventions.custom_rules; see FIRST_TIME_INIT.md "Setup preferences"):');
629
+ console.log(`- Safe delete: trash command ${trashAvailable() ? 'available' : 'NOT found (recommend: macOS 14+ built-in; older macOS `brew install trash`; Linux `sudo apt install trash-cli`; any OS `npm i -g trash-cli`)'} - ask: use trash instead of rm? (recommended: yes)`);
630
+ console.log('- Default coding level: ask 0-5 (0 ELI5, 1 Junior, 2 Mid-level, 3 Senior, 4 Tech Lead, 5 God); changeable later with /coding-level N.');
622
631
  console.log('\nConvention review questions:');
623
632
  for (const question of inferred.conventions.reviewQuestions) console.log(`- ${question}`);
624
633
  console.log('\nProposed backbone.yml:\n');
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: coding-level
3
- description: Set the coding-explanation register. /coding-level N (0=ELI5, 1=Junior, 2=Mid, 3=Senior, 4=Tech Lead, 5=God); active until reinvoked.
3
+ description: Set the coding-explanation register. /coding-level N (0=ELI5, 1=Junior, 2=Mid, 3=Senior, 4=Tech Lead, 5=God); active until reinvoked. A project default may be recorded in backbone.yml conventions.custom_rules.
4
4
  disable-model-invocation: true
5
5
  argument-hint: "[0-5]"
6
6
  ---
@@ -20,6 +20,13 @@ argument-hint: "[0-5]"
20
20
 
21
21
  1. Read `$ARGUMENTS` as N. If N is not an integer 0–5, reply with the table above and ask for a valid N.
22
22
  2. Read `references/level-<N>.md`, state once which level is now active, and apply that persona to every reply until `/coding-level` is invoked again.
23
+ 3. Ask once: "Save level N as the project default?" If yes, add or update the `Default coding level: N` entry in `backbone.yml` `conventions.custom_rules` (show the diff and wait for approval, per kit rules).
24
+
25
+ ## Project default
26
+
27
+ - First-time init records a default as a `backbone.yml` `conventions.custom_rules` entry: `Default coding level: N (<Register>)`.
28
+ - Sessions without an explicit `/coding-level` start from that default level.
29
+ - `/coding-level N` overrides the default for the current session only, unless the user saves it in step 3.
23
30
 
24
31
  ## Scope
25
32
 
@@ -48,6 +48,7 @@ No empty, unset, broad, symlinked, or unintended path may reach a destructive co
48
48
 
49
49
  ## Required outcomes
50
50
 
51
+ - Prefer a recoverable delete (`trash`) over permanent `rm` for user files; permanent deletion requires explicit confirmation of the exact paths. If `trash` is missing, recommend installing it (macOS 14+ built-in; older macOS `brew install trash`; Linux `sudo apt install trash-cli`; any OS with Node `npm i -g trash-cli`).
51
52
  - A blank branch may follow the documented default-branch fallback policy.
52
53
  - An explicit branch must fail if missing; never silently deploy another branch.
53
54
  - A blank folder/base value must fail before any `rm`, `mv`, `cp`, `rsync`, `find`, Docker, or Git cleanup command runs.
package/AGENTS.md CHANGED
@@ -31,6 +31,7 @@ Track every loop in `/tmp/design-{project_slug}.md`. Each loop entry must includ
31
31
  ### Safety
32
32
 
33
33
  - Never print full secrets.
34
+ - Prefer `trash` over `rm` for deletions so they stay recoverable. Check `command -v trash` first; if missing, recommend installing it (macOS 14+ built-in; older macOS `brew install trash`; Linux `sudo apt install trash-cli`; any OS with Node `npm i -g trash-cli`) instead of falling back to `rm`. Permanent deletes require explicit user approval of the exact paths.
34
35
  - Do not run untrusted hooks, MCP servers, deploy scripts, package lifecycle scripts, migrations, or destructive shell commands just to inspect a repo.
35
36
  - Do not modify protected paths from `backbone.yml` without explicit approval.
36
37
  - Before editing or approving shell/deploy/installer/repair logic that uses path variables or destructive commands (`rm`, `mv`, `cp -a`, `rsync --delete`, `find -delete`, `git clean`, checkout replacement), use `path-sensitive-shell-safety` and prove base/folder/repo values are non-empty, contained, quoted, and not broad system paths.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.4.1 — 2026-07-17
4
+
5
+ - Added a safe-delete guardrail across all three surfaces: new `.claude/rules/safe-delete.md` and `.cursor/rules/040-safe-delete.mdc` (always-on), a `### Safety` bullet in the `AGENTS.md` managed block for Codex, and a trash-first outcome in the `path-sensitive-shell-safety` skill (all mirrors). Agents prefer the recoverable `trash` command over `rm`, check `command -v trash` first, and recommend an install when missing (macOS 14+ built-in; older macOS `brew install trash`; Linux `sudo apt install trash-cli`; any OS with Node `npm i -g trash-cli`). `rm` was already deny-listed for Claude Code and Cursor in the kit settings.
6
+ - First-time init now asks two setup preferences and records them in `backbone.yml` `conventions.custom_rules`: use `trash` instead of `rm` (with availability detection and install hints), and a default coding level chosen from a 0–5 table with one-line descriptions. Mirrored in the `init-backbone.mjs --propose` interview output.
7
+ - `coding-level` skill (all mirrors): sessions now start from the `Default coding level: N` entry in `backbone.yml` when present; `/coding-level N` still overrides per session and can save a new default with approval. `CLAUDE-template.md` now lists `/coding-level` and the safe-delete rule.
8
+ - `mvck doctor` reports a new safe-delete check: whether the `trash` command is available, with the per-OS install hint when it is not.
9
+ - Fixed the npm package page rendering the Vietnamese README: moved `README.vi.md` to `docs/README.vi.md` so npm's readme detection always picks `README.md`.
10
+ - Added an "Install from npm" section to `README.md`, `docs/README.vi.md`, and `.vibekit/docs/INSTALL.md`: one-shot `npx --yes minimal-vibe-coding-kit@latest install <path>`, or `npm i -D minimal-vibe-coding-kit` followed by `npx mvck install .`, with a note that files in `node_modules/` stay inactive until `mvck install` copies them into the repo root.
11
+ - Switched README install/update/profile examples to the published npm package; the `github:` form and local `install.sh` remain documented as alternatives.
12
+ - Synced version to 0.4.1 in `package.json`, both README badges, and `.codex-plugin/plugin.json`; added an npm badge.
13
+
3
14
  ## 0.4.0 — 2026-07-16
4
15
 
5
16
  - Trimmed the end-user install payload: `mvck install`/`update` no longer copy kit-maintainer files (`test-install.mjs`, `pack-dry-run.mjs`, `.vibekit/docs/RESEARCH_NOTES.md`, `.vibekit/docs/AUTORESEARCH_LEDGER.md`); `validate-kit` requires them only in the kit source repo.
package/README.md CHANGED
@@ -1,11 +1,12 @@
1
1
  <div align="center">
2
2
 
3
- **Read in:** **English** · [Tiếng Việt](README.vi.md)
3
+ **Read in:** **English** · [Tiếng Việt](docs/README.vi.md)
4
4
 
5
5
  # Minimal Vibe Coding Kit
6
6
 
7
7
  [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
8
- [![Version](https://img.shields.io/badge/version-0.4.0-2ea44f.svg)](CHANGELOG.md)
8
+ [![npm](https://img.shields.io/badge/npm-minimal--vibe--coding--kit-cb3837?logo=npm)](https://www.npmjs.com/package/minimal-vibe-coding-kit)
9
+ [![Version](https://img.shields.io/badge/version-0.4.1-2ea44f.svg)](CHANGELOG.md)
9
10
  ![Claude](https://img.shields.io/badge/Claude%20Code-Commands%20%26%20Skills-111111)
10
11
  ![Cursor](https://img.shields.io/badge/Cursor-Rules%20%26%20Commands-1f6feb)
11
12
  ![Codex](https://img.shields.io/badge/Codex-AGENTS.md%20%26%20Plugin-6f42c1)
@@ -27,6 +28,8 @@ A small kit of shared **rules**, **skills**, and **commands**, plus one **`backb
27
28
  - Never overwrites your existing `CLAUDE.md` / `AGENTS.md` — it only adds managed blocks.
28
29
  - Every setup write waits for your explicit approval.
29
30
  - Security review of agent surfaces (AgentShield) is part of the normal workflow.
31
+ - Safe deletes by default: `rm` is deny-listed for Claude Code and Cursor, and all agents prefer the recoverable `trash` command (init checks it and recommends an install if missing).
32
+ - First-time init asks two setup preferences — use `trash` instead of `rm`, and your default explanation level (0–5, changeable anytime with `/coding-level N`) — and records both in `backbone.yml`.
30
33
 
31
34
  ## Quick Start
32
35
 
@@ -35,10 +38,10 @@ Three steps, about two minutes.
35
38
  **1. Install into your project** (no clone needed):
36
39
 
37
40
  ```bash
38
- npx github:giang6283623/minimal-vibe-coding-kit install /path/to/your-project
41
+ npx --yes minimal-vibe-coding-kit@latest install /path/to/your-project
39
42
  ```
40
43
 
41
- From a local clone instead: `./install.sh /path/to/your-project` (Windows: `./install.ps1 -Target C:\path\to\your-project`).
44
+ Already ran `npm i minimal-vibe-coding-kit`, or prefer GitHub or a local clone? See [Install from npm](#install-from-npm).
42
45
 
43
46
  **2. Open the project in Claude Code, Cursor, or Codex and paste:**
44
47
 
@@ -58,6 +61,39 @@ Optional health check any time:
58
61
  node .vibekit/scripts/mvck.mjs doctor .
59
62
  ```
60
63
 
64
+ ## Install from npm
65
+
66
+ The kit is published on npm as [`minimal-vibe-coding-kit`](https://www.npmjs.com/package/minimal-vibe-coding-kit). It is a **scaffolding CLI, not a library** — files sitting in `node_modules/` do nothing by themselves. Running `install` once copies the kit into your repo root, exactly like the GitHub installer does.
67
+
68
+ **Option A — one-shot (recommended).** Nothing is added to your project's dependencies:
69
+
70
+ ```bash
71
+ npx --yes minimal-vibe-coding-kit@latest install /path/to/your-project
72
+ ```
73
+
74
+ **Option B — as a dependency.** If the package is (or will be) in your `package.json`, one more command is required:
75
+
76
+ ```bash
77
+ npm i -D minimal-vibe-coding-kit
78
+ npx mvck install . # required — copies the kit out of node_modules into your repo
79
+ ```
80
+
81
+ > **Important:** `npm i` alone only downloads the kit into `node_modules/` — nothing is active yet.
82
+ > `mvck install` is the step that copies `.claude/`, `.cursor/`, `.agents/`, `.vibekit/`, and `backbone.yml` into your repo root.
83
+
84
+ Either way, the short `mvck` command (alias: `vibe-kit`) is then available via `npx`:
85
+
86
+ | Short command | What it does |
87
+ | --- | --- |
88
+ | `npx mvck install .` | Copy the kit into the repo (`--profile`, `--dry-run`, `--force`) |
89
+ | `npx mvck update .` | Refresh kit-owned files after a new kit release |
90
+ | `npx mvck doctor .` | Read-only health check |
91
+ | `npx mvck validate .` | Structure validation |
92
+
93
+ Then continue with **step 2** of the Quick Start (paste the init prompt).
94
+
95
+ Other install paths: `npx github:giang6283623/minimal-vibe-coding-kit install /path/to/your-project`, or from a local clone `./install.sh /path/to/your-project` (Windows: `./install.ps1 -Target C:\path\to\your-project`).
96
+
61
97
  ## What lands in your repo
62
98
 
63
99
  Install adds exactly this — nothing else in your project is touched:
@@ -149,9 +185,9 @@ All 12 skills live in `.vibekit/skills/` and are mirrored for each tool. Invoke
149
185
  Install only the surfaces you use (default is `all`):
150
186
 
151
187
  ```bash
152
- npx github:giang6283623/minimal-vibe-coding-kit install . --profile claude # Claude Code only
153
- npx github:giang6283623/minimal-vibe-coding-kit install . --profile claude,cursor # Claude + Cursor
154
- npx github:giang6283623/minimal-vibe-coding-kit install . --profile codex # Codex / AGENTS.md agents
188
+ npx --yes minimal-vibe-coding-kit@latest install . --profile claude # Claude Code only
189
+ npx --yes minimal-vibe-coding-kit@latest install . --profile claude,cursor # Claude + Cursor
190
+ npx --yes minimal-vibe-coding-kit@latest install . --profile codex # Codex / AGENTS.md agents
155
191
  ```
156
192
 
157
193
  Flags: `--force` (overwrite existing kit files), `--dry-run` (preview), `--json` (machine-readable plan).
@@ -161,8 +197,8 @@ Flags: `--force` (overwrite existing kit files), `--dry-run` (preview), `--json`
161
197
  Run inside your project when the kit ships new skills or scripts:
162
198
 
163
199
  ```bash
164
- npx github:giang6283623/minimal-vibe-coding-kit update . --dry-run # preview
165
- npx github:giang6283623/minimal-vibe-coding-kit update . # apply
200
+ npx --yes minimal-vibe-coding-kit@latest update . --dry-run # preview
201
+ npx --yes minimal-vibe-coding-kit@latest update . # apply
166
202
  ```
167
203
 
168
204
  `update` refreshes **kit-owned files only**, never touches `backbone.yml` or your own content, updates managed blocks in place, and backs up changed files to `.vibekit/update-backup/<timestamp>/`. Details: [.vibekit/docs/INSTALL.md](.vibekit/docs/INSTALL.md).
@@ -1,11 +1,12 @@
1
1
  <div align="center">
2
2
 
3
- **Đọc bằng:** [English](README.md) · **Tiếng Việt**
3
+ **Đọc bằng:** [English](../README.md) · **Tiếng Việt**
4
4
 
5
5
  # Minimal Vibe Coding Kit
6
6
 
7
- [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
8
- [![Version](https://img.shields.io/badge/version-0.4.0-2ea44f.svg)](CHANGELOG.md)
7
+ [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](../LICENSE)
8
+ [![npm](https://img.shields.io/badge/npm-minimal--vibe--coding--kit-cb3837?logo=npm)](https://www.npmjs.com/package/minimal-vibe-coding-kit)
9
+ [![Version](https://img.shields.io/badge/version-0.4.1-2ea44f.svg)](../CHANGELOG.md)
9
10
  ![Claude](https://img.shields.io/badge/Claude%20Code-Commands%20%26%20Skills-111111)
10
11
  ![Cursor](https://img.shields.io/badge/Cursor-Rules%20%26%20Commands-1f6feb)
11
12
  ![Codex](https://img.shields.io/badge/Codex-AGENTS.md%20%26%20Plugin-6f42c1)
@@ -27,6 +28,8 @@ Một bộ kit nhỏ gồm **rules**, **skills**, **commands** dùng chung, cộ
27
28
  - Không bao giờ ghi đè `CLAUDE.md` / `AGENTS.md` sẵn có — chỉ thêm managed block.
28
29
  - Mọi thao tác ghi khi setup đều chờ bạn duyệt.
29
30
  - Rà soát bảo mật bề mặt agent (AgentShield) là một phần của workflow bình thường.
31
+ - Xóa an toàn mặc định: `rm` bị deny-list cho Claude Code và Cursor, mọi agent ưu tiên lệnh `trash` (khôi phục được; init sẽ kiểm tra và gợi ý cách cài nếu thiếu).
32
+ - Init lần đầu hỏi hai tùy chọn — dùng `trash` thay `rm`, và mức giải thích mặc định (0–5, đổi bất cứ lúc nào với `/coding-level N`) — rồi lưu cả hai vào `backbone.yml`.
30
33
 
31
34
  ## Bắt đầu nhanh
32
35
 
@@ -35,10 +38,10 @@ Ba bước, khoảng hai phút.
35
38
  **1. Cài vào project của bạn** (không cần clone):
36
39
 
37
40
  ```bash
38
- npx github:giang6283623/minimal-vibe-coding-kit install /path/to/your-project
41
+ npx --yes minimal-vibe-coding-kit@latest install /path/to/your-project
39
42
  ```
40
43
 
41
- Hoặc từ bản clone của repo này: `./install.sh /path/to/your-project` (Windows: `./install.ps1 -Target C:\path\to\your-project`).
44
+ Đã chạy `npm i minimal-vibe-coding-kit`, hoặc muốn cài từ GitHub / bản clone? Xem [Cài từ npm](#cài-từ-npm).
42
45
 
43
46
  **2. Mở project trong Claude Code, Cursor hoặc Codex và dán:**
44
47
 
@@ -58,6 +61,39 @@ Kiểm tra sức khỏe bất cứ lúc nào:
58
61
  node .vibekit/scripts/mvck.mjs doctor .
59
62
  ```
60
63
 
64
+ ## Cài từ npm
65
+
66
+ Kit được publish trên npm với tên [`minimal-vibe-coding-kit`](https://www.npmjs.com/package/minimal-vibe-coding-kit). Đây là **CLI scaffolding, không phải library** — file nằm trong `node_modules/` tự nó không làm gì cả. Chạy `install` một lần sẽ copy kit vào repo root của bạn, giống hệt installer từ GitHub.
67
+
68
+ **Cách A — chạy một phát (khuyến nghị).** Không thêm gì vào dependencies của project:
69
+
70
+ ```bash
71
+ npx --yes minimal-vibe-coding-kit@latest install /path/to/your-project
72
+ ```
73
+
74
+ **Cách B — cài như dependency.** Nếu bạn đã (hoặc muốn) `npm i` package, cần thêm đúng một lệnh nữa:
75
+
76
+ ```bash
77
+ npm i -D minimal-vibe-coding-kit
78
+ npx mvck install . # bắt buộc — copy kit từ node_modules ra repo của bạn
79
+ ```
80
+
81
+ > **Quan trọng:** `npm i` một mình chỉ tải kit vào `node_modules/` — chưa có gì hoạt động.
82
+ > `mvck install` mới là bước copy `.claude/`, `.cursor/`, `.agents/`, `.vibekit/` và `backbone.yml` vào repo root.
83
+
84
+ Sau đó, lệnh ngắn `mvck` (alias: `vibe-kit`) dùng được qua `npx`:
85
+
86
+ | Lệnh ngắn | Chức năng |
87
+ | --- | --- |
88
+ | `npx mvck install .` | Copy kit vào repo (`--profile`, `--dry-run`, `--force`) |
89
+ | `npx mvck update .` | Làm mới file thuộc kit khi có bản phát hành mới |
90
+ | `npx mvck doctor .` | Health check chỉ-đọc |
91
+ | `npx mvck validate .` | Validate cấu trúc |
92
+
93
+ Rồi tiếp tục **bước 2** của Bắt đầu nhanh (dán prompt init).
94
+
95
+ Các cách cài khác: `npx github:giang6283623/minimal-vibe-coding-kit install /path/to/your-project`, hoặc từ bản clone `./install.sh /path/to/your-project` (Windows: `./install.ps1 -Target C:\path\to\your-project`).
96
+
61
97
  ## Những gì được cài vào repo của bạn
62
98
 
63
99
  Cài đặt chỉ thêm đúng những mục sau — không đụng vào bất cứ thứ gì khác:
@@ -149,9 +185,9 @@ Cả 12 skill nằm trong `.vibekit/skills/` và được mirror cho từng tool
149
185
  Chỉ cài các bề mặt bạn dùng (mặc định là `all`):
150
186
 
151
187
  ```bash
152
- npx github:giang6283623/minimal-vibe-coding-kit install . --profile claude # chỉ Claude Code
153
- npx github:giang6283623/minimal-vibe-coding-kit install . --profile claude,cursor # Claude + Cursor
154
- npx github:giang6283623/minimal-vibe-coding-kit install . --profile codex # Codex / agent dùng AGENTS.md
188
+ npx --yes minimal-vibe-coding-kit@latest install . --profile claude # chỉ Claude Code
189
+ npx --yes minimal-vibe-coding-kit@latest install . --profile claude,cursor # Claude + Cursor
190
+ npx --yes minimal-vibe-coding-kit@latest install . --profile codex # Codex / agent dùng AGENTS.md
155
191
  ```
156
192
 
157
193
  Cờ: `--force` (ghi đè file kit sẵn có), `--dry-run` (xem trước), `--json` (kế hoạch dạng máy đọc).
@@ -161,11 +197,11 @@ Cờ: `--force` (ghi đè file kit sẵn có), `--dry-run` (xem trước), `--js
161
197
  Chạy trong project của bạn khi kit có skill hoặc script mới:
162
198
 
163
199
  ```bash
164
- npx github:giang6283623/minimal-vibe-coding-kit update . --dry-run # xem trước
165
- npx github:giang6283623/minimal-vibe-coding-kit update . # áp dụng
200
+ npx --yes minimal-vibe-coding-kit@latest update . --dry-run # xem trước
201
+ npx --yes minimal-vibe-coding-kit@latest update . # áp dụng
166
202
  ```
167
203
 
168
- `update` chỉ làm mới **file thuộc kit**, không bao giờ đụng `backbone.yml` hay nội dung của bạn, cập nhật managed block tại chỗ, và backup file bị thay vào `.vibekit/update-backup/<timestamp>/`. Chi tiết: [.vibekit/docs/INSTALL.md](.vibekit/docs/INSTALL.md).
204
+ `update` chỉ làm mới **file thuộc kit**, không bao giờ đụng `backbone.yml` hay nội dung của bạn, cập nhật managed block tại chỗ, và backup file bị thay vào `.vibekit/update-backup/<timestamp>/`. Chi tiết: [.vibekit/docs/INSTALL.md](../.vibekit/docs/INSTALL.md).
169
205
 
170
206
  ### Vòng lặp Autoresearch
171
207
 
@@ -185,7 +221,7 @@ node .vibekit/scripts/agentshield-probe.mjs . # probe c
185
221
  npx ecc-agentshield scan --path . --format text --min-severity medium # scan đầy đủ, tùy chọn
186
222
  ```
187
223
 
188
- Mọi thay đổi tới `CLAUDE.md`, `AGENTS.md`, `.claude/**`, `.cursor/**`, `.agents/**`, `.codex-plugin/**`, hoặc `.vibekit/skills|commands|scripts/**` đều nên kích hoạt review. Mô hình: [.vibekit/docs/SECURITY_MODEL.md](.vibekit/docs/SECURITY_MODEL.md).
224
+ Mọi thay đổi tới `CLAUDE.md`, `AGENTS.md`, `.claude/**`, `.cursor/**`, `.agents/**`, `.codex-plugin/**`, hoặc `.vibekit/skills|commands|scripts/**` đều nên kích hoạt review. Mô hình: [.vibekit/docs/SECURITY_MODEL.md](../.vibekit/docs/SECURITY_MODEL.md).
189
225
 
190
226
  ### Doctor và báo cáo
191
227
 
@@ -202,14 +238,14 @@ npm test # syntax + test cài đặt thật vào thư mục tạm
202
238
  npm run validate:all # npm test + AgentShield probe + npm pack dry-run
203
239
  ```
204
240
 
205
- Checklist publish: [.vibekit/init/PUSH_TO_GITHUB.md](.vibekit/init/PUSH_TO_GITHUB.md). Tài liệu sâu hơn: [.vibekit/docs/](.vibekit/docs/).
241
+ Checklist publish: [.vibekit/init/PUSH_TO_GITHUB.md](../.vibekit/init/PUSH_TO_GITHUB.md). Tài liệu sâu hơn: [.vibekit/docs/](../.vibekit/docs/).
206
242
 
207
243
  <details>
208
244
  <summary><strong>Khắc phục sự cố</strong></summary>
209
245
 
210
246
  | Triệu chứng | Cách xử lý |
211
247
  | --- | --- |
212
- | Agent bỏ qua luồng init | Chạy lại installer, hoặc copy [.vibekit/init/CLAUDE-template.md](.vibekit/init/CLAUDE-template.md) thành `CLAUDE.md`. |
248
+ | Agent bỏ qua luồng init | Chạy lại installer, hoặc copy [.vibekit/init/CLAUDE-template.md](../.vibekit/init/CLAUDE-template.md) thành `CLAUDE.md`. |
213
249
  | Agent hỏi init lại mỗi phiên | Chạy init và duyệt; xác nhận `meta.template_status: initialized` trong `backbone.yml`. |
214
250
  | Dò sai stack | Xóa lockfile cũ, hoặc sửa `backbone.yml` trực tiếp. |
215
251
  | Agent chạm path không nên | Thêm path vào `policy.protected_paths` trong `backbone.yml` (hỗ trợ glob). |
@@ -220,13 +256,13 @@ Checklist publish: [.vibekit/init/PUSH_TO_GITHUB.md](.vibekit/init/PUSH_TO_GITHU
220
256
 
221
257
  ## Đóng góp
222
258
 
223
- Issue và PR luôn welcome tại [`giang6283623/minimal-vibe-coding-kit`](https://github.com/giang6283623/minimal-vibe-coding-kit). Trước khi mở PR: mirror thay đổi skill giữa `.claude/`, `.cursor/`, `.agents/`, giữ template trung lập, và chạy `npm run validate:all`. Xem [CONTRIBUTING.md](CONTRIBUTING.md), [SECURITY.md](SECURITY.md), [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md).
259
+ Issue và PR luôn welcome tại [`giang6283623/minimal-vibe-coding-kit`](https://github.com/giang6283623/minimal-vibe-coding-kit). Trước khi mở PR: mirror thay đổi skill giữa `.claude/`, `.cursor/`, `.agents/`, giữ template trung lập, và chạy `npm run validate:all`. Xem [CONTRIBUTING.md](../CONTRIBUTING.md), [SECURITY.md](../SECURITY.md), [CODE_OF_CONDUCT.md](../CODE_OF_CONDUCT.md).
224
260
 
225
261
  **Tác giả:** [GiangBV](https://www.linkedin.com/in/buivangiang1992), [AuPMH](https://www.linkedin.com/in/pham-au-2a1bb1162)
226
262
  **Powered by:** Caffeine, Determination, AI Collaboration, và những đêm code cuối tuần.
227
263
 
228
264
  ## Giấy phép
229
265
 
230
- MIT. Xem [LICENSE](LICENSE).
266
+ MIT. Xem [LICENSE](../LICENSE).
231
267
 
232
268
  > 🇻🇳 *Nếu bạn yêu Việt Nam và con người Việt Nam, bạn hoàn toàn được dùng miễn phí mọi thứ trong đây.*
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "minimal-vibe-coding-kit",
3
- "version": "0.4.0",
3
+ "version": "0.4.1",
4
4
  "description": "Project-agnostic AI coding workflow kit for Claude Code, Cursor, and Codex with AgentShield security review.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -78,7 +78,7 @@
78
78
  "install.sh",
79
79
  "install.ps1",
80
80
  "README.md",
81
- "README.vi.md",
81
+ "docs/README.vi.md",
82
82
  "SECURITY.md",
83
83
  "CONTRIBUTING.md",
84
84
  "CODE_OF_CONDUCT.md",