@govindchaudhary/vibekit 0.1.2 → 0.1.4

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.
package/README.md CHANGED
@@ -43,7 +43,12 @@ Vibe coding — letting an AI assistant drive most of the code while you steer
43
43
  npx @govindchaudhary/vibekit init
44
44
  ```
45
45
 
46
- Answer **one question** ("What's this project mostly?") and Vibekit creates four files in your current directory:
46
+ Answer **two short questions** and Vibekit is ready:
47
+
48
+ 1. **"What's this project mostly?"** — Dev / Data Engineering / Both / Skip → picks your principle packs
49
+ 2. **"Which AI tool(s) do you use?"** — GitHub Copilot / Claude Code / Windsurf / Cursor (multi-select) → creates *only* the mirror files those tools need
50
+
51
+ That's it. Four context files are created in your current directory:
47
52
 
48
53
  | File | Purpose | Read by AI? |
49
54
  |---|---|---|
@@ -52,7 +57,9 @@ Answer **one question** ("What's this project mostly?") and Vibekit creates four
52
57
  | `DECISIONS.md` | Architecture decisions not to re-debate | ✅ Yes — automatically |
53
58
  | `principles-catalog.md` | Human menu of available packs | ❌ No — docs only |
54
59
 
55
- Then fill in the `Project Stack` and `Conventions` sections of `AGENTS.md` once. That's it. Every AI session from that point forward has full, accurate context.
60
+ Plus the tool-specific mirror file(s) you selected (see [Tool integration](#tool-integration-no-clutter) below).
61
+
62
+ Then fill in the `Project Stack` and `Conventions` sections of `AGENTS.md` once. Every AI session from that point forward has full, accurate context.
56
63
 
57
64
  ---
58
65
 
@@ -179,18 +186,43 @@ See [`principles-catalog.md`](./principles-catalog.md) for the full pack menu an
179
186
 
180
187
  ---
181
188
 
189
+ ## Tool integration (no clutter)
190
+
191
+ Different AI assistants look for different filenames. `AGENTS.md` is the modern standard, but some tools still need their own filename:
192
+
193
+ | Tool | Reads `AGENTS.md` natively? | Needs mirror file |
194
+ |---|---|---|
195
+ | **Cursor** | ✅ Yes | none |
196
+ | **GitHub Copilot** | ⚠️ Setting-dependent — use mirror to be safe | `.github/copilot-instructions.md` |
197
+ | **Claude Code** | ⚠️ Partial | `CLAUDE.md` |
198
+ | **Windsurf** | ❌ No | `.windsurfrules` |
199
+
200
+ **`vibekit init` only creates the mirror files for tools you actually use** — no orphan files in your repo. The default is GitHub Copilot (most common VS Code setup).
201
+
202
+ **Add a tool later:**
203
+ ```bash
204
+ vibekit sync --claude # add Claude Code support
205
+ vibekit sync --windsurf # add Windsurf support
206
+ vibekit sync --copilot --claude # add multiple at once
207
+ vibekit sync # add all three (legacy default)
208
+ ```
209
+
210
+ ---
211
+
182
212
  ## CLI reference
183
213
 
184
214
  | Command | What it does |
185
215
  |---|---|
186
- | `vibekit init` | Scaffold `AGENTS.md`, `CHANGELOG.md`, `DECISIONS.md`, `principles-catalog.md` in one step. |
216
+ | `vibekit init` | Scaffold the 4 context files + auto-create mirror files for the AI tools you pick. Runs once per project. |
187
217
  | `vibekit log "<message>"` | Append a dated entry to `CHANGELOG.md` (newest on top, ISO date). |
188
218
  | `vibekit prune` | Remove `[DONE]` changelog entries, keeping the 5 most recent resolved ones. |
189
219
  | `vibekit packs add <name>` | Insert a pack block into `AGENTS.md` and update the active packs line. |
190
220
  | `vibekit packs remove <name>` | Remove a pack block from `AGENTS.md`. |
191
- | `vibekit sync` | Mirror `AGENTS.md` `CLAUDE.md`, `.windsurfrules`, `.github/copilot-instructions.md`. |
221
+ | `vibekit sync [--copilot] [--claude] [--windsurf]` | Mirror `AGENTS.md` to the chosen tool files. With no flags, mirrors to all three. |
192
222
 
193
- > **About `vibekit sync`:** Most modern tools (GitHub Copilot, Cursor, Windsurf) now read `AGENTS.md` natively. `sync` is a fallback for tools or older setups that use their own native filenames, or for teams who want all native filenames present simultaneously.
223
+ > **Install vs init they're different.**
224
+ > `npm install -g @govindchaudhary/vibekit` installs the CLI on your machine (one time per computer).
225
+ > `vibekit init` sets up the context files in a project (one time per project). You need both.
194
226
 
195
227
  ---
196
228
 
@@ -227,8 +259,12 @@ Drops the 4 files into any existing repo without touching your code.
227
259
  ## Recommended workflow
228
260
 
229
261
  ```bash
230
- # Day 1 initialize
231
- npx @govindchaudhary/vibekit init
262
+ # One time per machine
263
+ npm install -g @govindchaudhary/vibekit
264
+
265
+ # Day 1 of a new project — initialize (auto-creates mirror files for your tools)
266
+ cd my-project
267
+ vibekit init
232
268
  # → fill in AGENTS.md: Project Stack + Conventions sections
233
269
 
234
270
  # Add security if your project has auth/APIs/user data
@@ -238,14 +274,12 @@ vibekit packs add security
238
274
  vibekit log "Added rate limiting to /api/auth — middleware/rateLimit.ts"
239
275
  vibekit log "Switched from JWT to httpOnly session cookies — security decision"
240
276
 
241
- # When a change is complete, mark it done
242
- # Edit CHANGELOG.md: add [DONE] to the entry
243
-
244
- # Periodically keep the changelog lean
277
+ # When a change is complete, mark it [DONE] in CHANGELOG.md by hand,
278
+ # then keep the file lean:
245
279
  vibekit prune
246
280
 
247
- # If you use Claude, Cursor, or Windsurf with their native filenames
248
- vibekit sync
281
+ # Add a new AI tool later
282
+ vibekit sync --claude
249
283
  ```
250
284
 
251
285
  ---
@@ -267,148 +301,3 @@ Please keep pack principles **specific, verifiable, and actionable** — not vag
267
301
 
268
302
  [MIT](./LICENSE) © 2026 Vibekit contributors
269
303
 
270
-
271
- **Vibe code without losing the plot.** Vibekit keeps fast, AI-driven "vibe
272
- coding" accurate by giving your assistant lean, *verifiable* context — a
273
- lightweight alternative to heavyweight Spec-Driven Development (SDD). Instead of
274
- generating a spec/plan/tasks document set for every feature, Vibekit maintains
275
- **3 persistent markdown files** that any AI coding assistant — Copilot, Claude,
276
- Cursor, Windsurf — reads automatically. No per-feature ceremony, no token bloat,
277
- and a working setup in **under 2 minutes**. It's tool-agnostic by design: the
278
- canonical file is `AGENTS.md`, and everything else mirrors from it.
279
-
280
- > **Motto:** *vibe fast, stay grounded.* The `AGENTS.md` Verify-before-trust
281
- > rule means the AI treats notes as hints and the current code as ground truth.
282
-
283
- ---
284
-
285
- ## Quickstart
286
-
287
- ```bash
288
- npx @govindchaudhary/vibekit init
289
- ```
290
-
291
- Answer one question ("What's this project mostly?") and you're done — under two
292
- minutes to a working setup. Vibekit creates four files in your current
293
- directory:
294
-
295
- | File | Purpose |
296
- | --- | --- |
297
- | `AGENTS.md` | Stable context + coding principles (the file AI actually reads) |
298
- | `CHANGELOG.md` | Rolling log of recent changes |
299
- | `DECISIONS.md` | Architecture decisions worth not re-litigating |
300
- | `principles-catalog.md` | Human reference menu — **never loaded by AI** |
301
-
302
- ---
303
-
304
- ## Two ways to adopt it
305
-
306
- **(a) Use this template (zero install).** Click **"Use this template"** at the
307
- top of this GitHub repo to clone the structure into a fresh repository. Good for
308
- brand-new projects.
309
-
310
- **(b) npx CLI (add to an existing repo).** Run `npx @govindchaudhary/vibekit init` inside any
311
- existing project to drop the files in without touching the rest of your code.
312
-
313
- ---
314
-
315
- ## Vibekit vs. typical SDD tools
316
-
317
- | | Vibekit | Typical SDD tool (Spec-Kit, BMAD) |
318
- | --- | --- | --- |
319
- | Setup time | < 2 minutes | 15–60 minutes |
320
- | Files per feature | 0 (3 persistent files total) | 3+ (spec, plan, tasks) per feature |
321
- | Token overhead | Low — one stable context file | High — large generated specs reloaded |
322
- | Best when | Solo devs / small teams wanting fast AI context | Large teams needing formal, auditable specs for complex features |
323
-
324
- Use a full SDD framework when you genuinely need formal, reviewable
325
- specifications per feature. Reach for Vibekit when you just want your AI
326
- assistant to have accurate, lightweight context without the overhead.
327
-
328
- ---
329
-
330
- ## The 3 files
331
-
332
- ### `AGENTS.md` — stable context
333
- The one file AI tools read by default. It holds your active principle packs, a
334
- **Verify-before-trust** safeguard, your project stack, and your conventions.
335
- Keep it accurate; it's the source of durable context.
336
-
337
- ### `CHANGELOG.md` — rolling log
338
- Newest entry first. Each entry has an exact ISO date, what changed and why, and
339
- the files/functions touched. Mark resolved entries `[DONE]`; `vibekit prune`
340
- trims old resolved entries so the file stays small (~10 active entries max).
341
-
342
- ### `DECISIONS.md` — architecture decisions
343
- Only record choices a future session would otherwise guess wrong or re-debate —
344
- architecture and library choices, not routine bug fixes.
345
-
346
- > **Verify-before-trust:** CHANGELOG and DECISIONS are *hints, not ground truth*.
347
- > Before relying on an entry, confirm the referenced code still matches. If it
348
- > doesn't, the current code wins.
349
-
350
- ---
351
-
352
- ## How packs work
353
-
354
- A **pack** is a small, reusable block of coding principles wrapped in markers:
355
-
356
- ```markdown
357
- <!-- pack:dev:start -->
358
- ### SOLID Principles
359
- - ...
360
- <!-- pack:dev:end -->
361
- ```
362
-
363
- Built-in packs:
364
-
365
- - **`core`** — always included (SRP, DRY, KISS, fail fast)
366
- - **`dev`** — SOLID principles for application development
367
- - **`data-eng`** — idempotency, schema validation, ETL separation, immutable raw data, reproducibility
368
-
369
- Manage packs at any time:
370
-
371
- ```bash
372
- vibekit packs add data-eng
373
- vibekit packs remove dev
374
- ```
375
-
376
- ### Add a custom pack
377
-
378
- 1. Create `packs/<name>.md`, e.g. `packs/security.md`.
379
- 2. Wrap the content in markers whose name matches the file:
380
-
381
- ```markdown
382
- <!-- pack:security:start -->
383
- ### Security Principles
384
- - Least privilege: grant the minimum access required
385
- - Never trust client input: validate at every boundary
386
- <!-- pack:security:end -->
387
- ```
388
-
389
- 3. Activate it: `vibekit packs add security`.
390
-
391
- See [`principles-catalog.md`](./principles-catalog.md) for the full menu.
392
-
393
- ---
394
-
395
- ## Commands
396
-
397
- | Command | What it does |
398
- | --- | --- |
399
- | `vibekit init` | Scaffold the 4 files (asks one question). |
400
- | `vibekit log "<message>"` | Append a dated changelog entry (newest on top). |
401
- | `vibekit prune` | Remove `[DONE]` entries except the 5 most recent. |
402
- | `vibekit packs add <name>` | Insert a pack block into `AGENTS.md`. |
403
- | `vibekit packs remove <name>` | Remove a pack block from `AGENTS.md`. |
404
- | `vibekit sync` | Mirror `AGENTS.md` to `CLAUDE.md`, `.windsurfrules`, `.github/copilot-instructions.md`. |
405
-
406
- > **About `sync`:** most modern tools (Copilot, Cursor, Windsurf) now read
407
- > `AGENTS.md` natively. `sync` is a fallback for tools/older setups that don't
408
- > yet, or for teams who want the explicit native filename present.
409
-
410
- ---
411
-
412
- ## License
413
-
414
- [MIT](./LICENSE)
package/dist/cli.js CHANGED
@@ -13,7 +13,7 @@ program
13
13
  .description('Lean, AI-tool-agnostic project context: 3 persistent markdown files ' +
14
14
  '(AGENTS.md, CHANGELOG.md, DECISIONS.md) that keep vibe coding accurate, ' +
15
15
  'instead of heavyweight SDD specs.')
16
- .version('0.1.2');
16
+ .version('0.1.4');
17
17
  program
18
18
  .command('init')
19
19
  .description('Scaffold AGENTS.md, CHANGELOG.md, DECISIONS.md, and principles-catalog.md in the current directory.')
@@ -52,13 +52,22 @@ packs
52
52
  });
53
53
  program
54
54
  .command('sync')
55
- .description('Mirror AGENTS.md to CLAUDE.md, .windsurfrules, and ' +
56
- '.github/copilot-instructions.md. Most modern tools (Copilot, Cursor, ' +
57
- 'Windsurf) now read AGENTS.md natively — sync is a fallback for older ' +
58
- 'setups that don\'t yet, or for teams who want the explicit native ' +
59
- 'filename present.')
60
- .action(() => {
61
- (0, sync_1.syncCommand)();
55
+ .description('Mirror AGENTS.md to tool-specific files. Use flags to pick which tools ' +
56
+ '(e.g. --copilot --claude). With no flags, syncs to all three (Copilot, ' +
57
+ 'Claude, Windsurf). `vibekit init` runs sync automatically for the ' +
58
+ 'tools you picked, so this is mainly for adding a new tool later.')
59
+ .option('--copilot', 'mirror to .github/copilot-instructions.md')
60
+ .option('--claude', 'mirror to CLAUDE.md')
61
+ .option('--windsurf', 'mirror to .windsurfrules')
62
+ .action((opts) => {
63
+ const picked = [];
64
+ if (opts.copilot)
65
+ picked.push('copilot');
66
+ if (opts.claude)
67
+ picked.push('claude');
68
+ if (opts.windsurf)
69
+ picked.push('windsurf');
70
+ (0, sync_1.syncCommand)(picked.length > 0 ? picked : sync_1.ALL_TOOLS);
62
71
  });
63
72
  async function main() {
64
73
  try {
@@ -41,6 +41,7 @@ const path = __importStar(require("path"));
41
41
  const prompts_1 = __importDefault(require("prompts"));
42
42
  const fileio_1 = require("../utils/fileio");
43
43
  const markers_1 = require("../utils/markers");
44
+ const sync_1 = require("./sync");
44
45
  const KIND_TO_PACKS = {
45
46
  dev: ['core', 'dev'],
46
47
  data: ['core', 'data-eng'],
@@ -77,6 +78,41 @@ async function initCommand() {
77
78
  // Handle abort (Ctrl+C) gracefully.
78
79
  const selected = kind ?? 'skip';
79
80
  const packs = KIND_TO_PACKS[selected];
81
+ // Ask which AI tool(s) the user runs. Only those will get mirror files.
82
+ // GitHub Copilot is the default selection because it's the most common
83
+ // VS Code setup and Copilot doesn't read AGENTS.md natively yet.
84
+ const { tools } = await (0, prompts_1.default)({
85
+ type: 'multiselect',
86
+ name: 'tools',
87
+ message: 'Which AI tool(s) do you use? (space to toggle, enter to confirm)',
88
+ instructions: false,
89
+ choices: [
90
+ {
91
+ title: 'GitHub Copilot',
92
+ value: 'copilot',
93
+ selected: true,
94
+ description: 'creates .github/copilot-instructions.md',
95
+ },
96
+ {
97
+ title: 'Claude Code',
98
+ value: 'claude',
99
+ description: 'creates CLAUDE.md',
100
+ },
101
+ {
102
+ title: 'Windsurf',
103
+ value: 'windsurf',
104
+ description: 'creates .windsurfrules',
105
+ },
106
+ {
107
+ title: 'Cursor / other (reads AGENTS.md natively)',
108
+ value: 'none',
109
+ description: 'no extra file needed',
110
+ },
111
+ ],
112
+ });
113
+ const selectedTools = Array.isArray(tools)
114
+ ? tools.filter((t) => sync_1.ALL_TOOLS.includes(t))
115
+ : [];
80
116
  // Build AGENTS.md from the template.
81
117
  let agents = (0, fileio_1.readFile)((0, fileio_1.assetPath)('templates', 'AGENTS.md.template'));
82
118
  if (selected === 'skip') {
@@ -104,9 +140,20 @@ async function initCommand() {
104
140
  console.log(' - CHANGELOG.md (rolling log of recent changes)');
105
141
  console.log(' - DECISIONS.md (architecture decisions worth keeping)');
106
142
  console.log(' - principles-catalog.md (reference only — never loaded by AI)');
143
+ // Auto-sync to the tool files the user picked so they don't have to
144
+ // remember to run `vibekit sync` separately.
145
+ if (selectedTools.length > 0) {
146
+ console.log('');
147
+ (0, sync_1.syncCommand)(selectedTools);
148
+ }
107
149
  console.log('');
108
150
  console.log("What's next:");
109
151
  console.log(' 1. Fill in the Project Stack & Conventions sections of AGENTS.md.');
110
152
  console.log(' 2. Record changes with: vibekit log "what you changed"');
111
- console.log(' 3. (Optional) mirror AGENTS.md for older tools: vibekit sync');
153
+ if (selectedTools.length === 0) {
154
+ console.log(' 3. (Optional) mirror AGENTS.md for older tools: vibekit sync');
155
+ }
156
+ else {
157
+ console.log(' 3. Add more tools later with: vibekit sync --claude (or --windsurf, --copilot)');
158
+ }
112
159
  }
@@ -33,31 +33,43 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ALL_TOOLS = void 0;
36
37
  exports.syncCommand = syncCommand;
37
38
  const path = __importStar(require("path"));
38
39
  const fileio_1 = require("../utils/fileio");
40
+ exports.ALL_TOOLS = ['copilot', 'claude', 'windsurf'];
41
+ const TOOL_FILES = {
42
+ copilot: '.github/copilot-instructions.md',
43
+ claude: 'CLAUDE.md',
44
+ windsurf: '.windsurfrules',
45
+ };
46
+ const TOOL_LABELS = {
47
+ copilot: 'GitHub Copilot',
48
+ claude: 'Claude Code',
49
+ windsurf: 'Windsurf',
50
+ };
39
51
  /**
40
52
  * Mirror AGENTS.md to the filenames used by tools that don't yet read
41
- * AGENTS.md natively.
53
+ * AGENTS.md natively. If no tools are specified, syncs to all three
54
+ * (legacy behavior, preserved for backwards compatibility).
42
55
  */
43
- function syncCommand() {
56
+ function syncCommand(tools = exports.ALL_TOOLS) {
44
57
  const cwd = process.cwd();
45
58
  const agentsPath = path.join(cwd, 'AGENTS.md');
46
59
  if (!(0, fileio_1.exists)(agentsPath)) {
47
60
  throw new Error('AGENTS.md not found. Run `vibekit init` first.');
48
61
  }
62
+ if (tools.length === 0) {
63
+ console.log('No tools selected — nothing to sync.');
64
+ return;
65
+ }
49
66
  const content = (0, fileio_1.readFile)(agentsPath);
50
- const targets = [
51
- path.join(cwd, 'CLAUDE.md'),
52
- path.join(cwd, '.windsurfrules'),
53
- path.join(cwd, '.github', 'copilot-instructions.md'),
54
- ];
55
- (0, fileio_1.ensureDir)(path.join(cwd, '.github'));
56
- for (const target of targets) {
67
+ console.log('Synced AGENTS.md to:');
68
+ for (const tool of tools) {
69
+ const relPath = TOOL_FILES[tool];
70
+ const target = path.join(cwd, relPath);
71
+ (0, fileio_1.ensureDir)(path.dirname(target));
57
72
  (0, fileio_1.writeFile)(target, content);
73
+ console.log(` - ${relPath} (${TOOL_LABELS[tool]})`);
58
74
  }
59
- console.log('Synced AGENTS.md to:');
60
- console.log(' - CLAUDE.md');
61
- console.log(' - .windsurfrules');
62
- console.log(' - .github/copilot-instructions.md');
63
75
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@govindchaudhary/vibekit",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "description": "Make vibe coding accurate: 3 persistent markdown files (AGENTS.md, CHANGELOG.md, DECISIONS.md) that give any AI coding assistant lean, verifiable context — a lightweight alternative to heavyweight Spec-Driven Development.",
5
5
  "keywords": [
6
6
  "vibe-coding",
@@ -11,6 +11,24 @@ Treat CHANGELOG.md and DECISIONS.md as hints, not ground truth. Before relying
11
11
  on an entry, confirm the referenced file/function still matches what's described.
12
12
  If it doesn't, the current code is the source of truth — not the note.
13
13
 
14
+ ### For AI assistants — automation rules
15
+ When you make changes in this repo, you are responsible for keeping these context
16
+ files accurate. Do not wait to be asked. Run these terminal commands yourself:
17
+
18
+ - After completing any meaningful code change, run:
19
+ `vibekit log "<one-line summary of what changed and why>"`
20
+ Be specific. Include the file or function touched. Skip trivial edits (typos, formatting).
21
+ - When you finish a feature or fix that was previously logged, edit that CHANGELOG.md
22
+ line to insert ` [DONE]` right after the date — e.g. `### 2026-06-28 [DONE] — ...`
23
+ - If CHANGELOG.md has more than 8 active (non-[DONE]) entries, run: `vibekit prune`
24
+ - If you add code that touches auth, encryption, secrets, user input, or DB queries
25
+ and the `security` pack is not already active, run: `vibekit packs add security`
26
+ - If you make a non-obvious architectural choice (library swap, pattern change,
27
+ schema decision), append a short entry to DECISIONS.md with the date, the
28
+ decision, and one sentence of rationale.
29
+ - Never invent file paths, function names, or API shapes. Read the file first
30
+ to verify before referencing it in a log or decision entry.
31
+
14
32
  {{PACK_BLOCKS_INSERTED_HERE}}
15
33
 
16
34
  ### Project Stack