@goodtek/vibeops 3.3.0 → 3.3.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.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,12 @@ All notable changes to VibeOps are documented here.
4
4
 
5
5
  ## Unreleased
6
6
 
7
+ ## 3.3.1 - 2026-10-18
8
+
9
+ ### Changed
10
+
11
+ - **`init` lists the coding agents as Claude Code, Codex CLI, Cursor** (was Cursor, Claude Code, Codex) — in the prompt, the `init` / `--clients` help, the `--clients` error messages and the README. Cursor stays the pre-checked default. The selection keeps the prompt order, so an interactive init now writes `.vibeops.json` `clients` in that order (e.g. `["claude", "cursor"]`) and lists the shared-skill lines of the install report in it (installed files unchanged); `--clients` keeps the order typed (TASK-054).
12
+
7
13
  ## 3.3.0 - 2026-10-18
8
14
 
9
15
  ### Added
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # VibeOps
2
2
 
3
- > Minimal CLI rails for TASK-driven vibe coding (Cursor, Claude Code, Codex).
3
+ > Minimal CLI rails for TASK-driven vibe coding (Claude Code, Codex, Cursor).
4
4
 
5
5
  [![npm version](https://img.shields.io/npm/v/@goodtek/vibeops.svg)](https://www.npmjs.com/package/@goodtek/vibeops)
6
6
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
@@ -59,7 +59,7 @@ Interactive init asks which agents to install, Git branch policy, then **where t
59
59
  vibeops init
60
60
 
61
61
  # Non-interactive (GitFlow: develop + main, origin required unless CI)
62
- vibeops init --clients cursor,claude,codex --git --initial-commit --git-policy gitflow --allow-no-remote
62
+ vibeops init --clients claude,codex,cursor --git --initial-commit --git-policy gitflow --allow-no-remote
63
63
 
64
64
  # Re-init templates on an existing project
65
65
  vibeops init --clients cursor --yes
@@ -68,9 +68,9 @@ vibeops init --clients cursor --yes
68
68
  | Pack | Installed |
69
69
  |------|-----------|
70
70
  | **core** (always) | `AGENTS.md`, `docs/tasks`, `docs/project`, `docs/logs` |
71
- | **cursor** | `.cursor/rules/`, `.cursor/skills/` |
72
71
  | **claude** | `CLAUDE.md`, `.claude/skills/` |
73
72
  | **codex** | `.agents/skills/` |
73
+ | **cursor** | `.cursor/rules/`, `.cursor/skills/` |
74
74
 
75
75
  Re-init **overwrites** templates (rules, skills, doc stubs). **`docs/tasks/TASK-*.md` are kept.**
76
76
 
package/dist/cli.js CHANGED
@@ -24,13 +24,13 @@ program.hook("preAction", async (_thisCommand, actionCommand) => {
24
24
  });
25
25
  program
26
26
  .command("init")
27
- .description("Install core + agent client packs (cursor, claude, codex)")
27
+ .description("Install core + agent client packs (claude, codex, cursor)")
28
28
  .option("--dry-run", "Show what would be created")
29
29
  .option("--force", "Overwrite existing template files (also implied when re-initializing with --yes)")
30
30
  .option("--yes", "Re-init an existing project without prompting")
31
31
  .option("--cwd <path>", "Target directory")
32
32
  .option("--name <projectName>", "Project name in .vibeops.json")
33
- .option("--clients <list>", "Agent packs: comma-separated cursor, claude, codex (required in non-interactive mode)")
33
+ .option("--clients <list>", "Agent packs: comma-separated claude, codex, cursor (required in non-interactive mode)")
34
34
  .option("--git", "Initialize Git (always on; flag kept for scripts)")
35
35
  .option("--initial-commit", "Create initial commit")
36
36
  .option("--no-initial-commit", "Skip initial commit")
@@ -59,7 +59,7 @@ async function confirmReinitIfNeeded(projectRoot, options) {
59
59
  async function resolveClients(options, interactive) {
60
60
  const fromFlag = parseClientsArg(options.clients);
61
61
  if (options.clients !== undefined && fromFlag === null) {
62
- log.error('Invalid --clients. Use comma-separated: cursor, claude, codex (e.g. --clients cursor,claude)');
62
+ log.error('Invalid --clients. Use comma-separated: claude, codex, cursor (e.g. --clients claude,cursor)');
63
63
  process.exitCode = 1;
64
64
  return null;
65
65
  }
@@ -73,7 +73,7 @@ async function resolveClients(options, interactive) {
73
73
  if (options.dryRun) {
74
74
  return ["cursor"];
75
75
  }
76
- log.error("Select at least one agent: --clients cursor,claude,codex (non-interactive mode).");
76
+ log.error("Select at least one agent: --clients claude,codex,cursor (non-interactive mode).");
77
77
  process.exitCode = 1;
78
78
  return null;
79
79
  }
@@ -1,15 +1,16 @@
1
1
  import { checkbox } from "@inquirer/prompts";
2
- export const VIBEOPS_CLIENT_IDS = ["cursor", "claude", "codex"];
2
+ /** Display order of the `init` agent prompt (and so of the selection it returns). */
3
+ export const VIBEOPS_CLIENT_IDS = ["claude", "codex", "cursor"];
3
4
  export const CLIENT_LABELS = {
4
- cursor: "Cursor (.cursor/rules, .cursor/skills)",
5
5
  claude: "Claude Code (CLAUDE.md, .claude/skills)",
6
6
  codex: "Codex CLI (.agents/skills)",
7
+ cursor: "Cursor (.cursor/rules, .cursor/skills)",
7
8
  };
8
9
  /** Relative skill root per client (under project root). */
9
10
  export const CLIENT_SKILL_ROOT = {
10
- cursor: ".cursor/skills",
11
11
  claude: ".claude/skills",
12
12
  codex: ".agents/skills",
13
+ cursor: ".cursor/skills",
13
14
  };
14
15
  export function parseClientsArg(raw) {
15
16
  if (raw === undefined || raw.trim().length === 0)
@@ -37,16 +38,20 @@ function parseOneClient(token) {
37
38
  export function isVibeopsClientId(value) {
38
39
  return VIBEOPS_CLIENT_IDS.includes(value);
39
40
  }
41
+ /** Choices of the `init` agent prompt, in `VIBEOPS_CLIENT_IDS` order; Cursor is pre-checked. */
42
+ export function initClientChoices() {
43
+ return VIBEOPS_CLIENT_IDS.map((id) => ({
44
+ name: CLIENT_LABELS[id],
45
+ value: id,
46
+ checked: id === "cursor",
47
+ }));
48
+ }
40
49
  export async function askInitClients() {
41
50
  const selected = await checkbox({
42
51
  message: "Which coding agents will you use? (Space toggle · Enter confirm)",
43
- choices: VIBEOPS_CLIENT_IDS.map((id) => ({
44
- name: CLIENT_LABELS[id],
45
- value: id,
46
- checked: id === "cursor",
47
- })),
52
+ choices: initClientChoices(),
48
53
  loop: false,
49
- validate: (answer) => answer.length > 0 ? true : "Select at least one agent (Cursor, Claude Code, and/or Codex).",
54
+ validate: (answer) => answer.length > 0 ? true : "Select at least one agent (Claude Code, Codex, and/or Cursor).",
50
55
  });
51
56
  return selected;
52
57
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@goodtek/vibeops",
3
- "version": "3.3.0",
3
+ "version": "3.3.1",
4
4
  "description": "Minimal CLI rails for Cursor-based TASK-driven vibe coding.",
5
5
  "type": "module",
6
6
  "packageManager": "pnpm@9.15.9",