@goodtek/vibeops 0.4.0 → 1.0.0

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.
Files changed (106) hide show
  1. package/CHANGELOG.md +198 -1
  2. package/README.md +62 -402
  3. package/dist/bootstrap/installer.js +4 -16
  4. package/dist/cli.js +52 -244
  5. package/dist/commands/init.js +3 -3
  6. package/dist/commands/status.js +145 -8
  7. package/dist/commands/task-add.js +100 -0
  8. package/dist/commands/task-done.js +117 -74
  9. package/dist/lib/config.js +2 -118
  10. package/dist/lib/git.js +190 -8
  11. package/dist/lib/llm-complete.js +62 -0
  12. package/dist/lib/paths.js +7 -3
  13. package/dist/lib/plan-llm-openai.js +0 -63
  14. package/dist/lib/resolve-task.js +34 -0
  15. package/dist/lib/slug.js +11 -0
  16. package/dist/lib/task-add-llm.js +81 -0
  17. package/dist/lib/task-context.js +68 -0
  18. package/dist/lib/task-done-llm.js +148 -0
  19. package/dist/lib/task-merge.js +115 -0
  20. package/dist/lib/task-scaffold.js +70 -92
  21. package/dist/lib/task-start.js +72 -0
  22. package/dist/lib/task-summary.js +12 -239
  23. package/dist/lib/task.js +80 -37
  24. package/dist/types/config.js +0 -16
  25. package/package.json +3 -4
  26. package/templates/.cursor/rules/01-task-source-of-truth.mdc +12 -0
  27. package/templates/.cursor/rules/02-git-safety.mdc +11 -0
  28. package/templates/.cursor/rules/03-docs-on-done.mdc +13 -0
  29. package/templates/.cursor/skills/implement-task/SKILL.md +22 -0
  30. package/templates/.cursor/skills/plan-task/SKILL.md +19 -0
  31. package/templates/AGENTS.md +26 -87
  32. package/templates/docs/logs/README.md +4 -35
  33. package/templates/docs/project/03-architecture.md +10 -29
  34. package/templates/docs/project/05-current-state.md +7 -27
  35. package/templates/docs/project/06-decisions.md +6 -17
  36. package/templates/docs/tasks/TASK-000-template.md +9 -44
  37. package/dist/agent/loader.js +0 -71
  38. package/dist/agent/prompt.js +0 -66
  39. package/dist/commands/agent-list.js +0 -32
  40. package/dist/commands/agent-prompt.js +0 -59
  41. package/dist/commands/agent-show.js +0 -26
  42. package/dist/commands/github-init.js +0 -554
  43. package/dist/commands/github-status.js +0 -164
  44. package/dist/commands/notion-init.js +0 -764
  45. package/dist/commands/notion-sync.js +0 -405
  46. package/dist/commands/notion-test.js +0 -595
  47. package/dist/commands/plan.js +0 -343
  48. package/dist/commands/task-check.js +0 -155
  49. package/dist/commands/task-generate.js +0 -206
  50. package/dist/commands/task-pull.js +0 -277
  51. package/dist/commands/task-rollback.js +0 -174
  52. package/dist/commands/task-start.js +0 -102
  53. package/dist/lib/brief.js +0 -356
  54. package/dist/lib/github-cli.js +0 -247
  55. package/dist/lib/notion-client.js +0 -459
  56. package/dist/lib/notion-discovery.js +0 -671
  57. package/dist/lib/notion-env.js +0 -140
  58. package/dist/lib/notion-mappers.js +0 -148
  59. package/dist/lib/notion-schema.js +0 -272
  60. package/dist/lib/notion-sync.js +0 -337
  61. package/dist/lib/notion-target.js +0 -247
  62. package/dist/lib/package-json.js +0 -133
  63. package/dist/lib/plan-apply-planner.js +0 -131
  64. package/dist/lib/plan-codex-pkce.js +0 -234
  65. package/dist/lib/plan-llm-models.js +0 -237
  66. package/dist/lib/plan-llm-normalize.js +0 -146
  67. package/dist/lib/plan-llm-session.js +0 -682
  68. package/dist/lib/plan-post-apply-setup.js +0 -116
  69. package/dist/lib/project-docs.js +0 -95
  70. package/dist/lib/prompt-builder.js +0 -135
  71. package/dist/lib/task-generator.js +0 -183
  72. package/dist/lib/task-prompt.js +0 -23
  73. package/dist/lib/task-pull.js +0 -354
  74. package/dist/status/collector.js +0 -103
  75. package/dist/status/format.js +0 -177
  76. package/dist/types/brief.js +0 -126
  77. package/templates/.cursor/rules/00-project-governance.mdc +0 -28
  78. package/templates/.cursor/rules/01-agent-orchestration.mdc +0 -48
  79. package/templates/.cursor/rules/02-task-workflow.mdc +0 -38
  80. package/templates/.cursor/rules/03-git-safety.mdc +0 -30
  81. package/templates/.cursor/rules/04-docs-update.mdc +0 -22
  82. package/templates/.vibeops/agents/architect.md +0 -47
  83. package/templates/.vibeops/agents/builder.md +0 -38
  84. package/templates/.vibeops/agents/docs.md +0 -54
  85. package/templates/.vibeops/agents/orchestrator.md +0 -40
  86. package/templates/.vibeops/agents/planner.md +0 -60
  87. package/templates/.vibeops/agents/recovery.md +0 -49
  88. package/templates/.vibeops/agents/reviewer.md +0 -47
  89. package/templates/.vibeops/agents/tester.md +0 -43
  90. package/templates/.vibeops/prompts/create-plan.md +0 -33
  91. package/templates/.vibeops/prompts/generate-tasks.md +0 -41
  92. package/templates/.vibeops/prompts/implement-task.md +0 -39
  93. package/templates/.vibeops/prompts/review-task.md +0 -34
  94. package/templates/.vibeops/prompts/rollback.md +0 -32
  95. package/templates/.vibeops/prompts/start-project.md +0 -39
  96. package/templates/.vibeops/workflows/notion-sync.md +0 -53
  97. package/templates/.vibeops/workflows/project-start.md +0 -73
  98. package/templates/.vibeops/workflows/rollback.md +0 -45
  99. package/templates/.vibeops/workflows/task-lifecycle.md +0 -71
  100. package/templates/docs/project/00-overview.md +0 -27
  101. package/templates/docs/project/01-requirements.md +0 -30
  102. package/templates/docs/project/02-mvp-scope.md +0 -36
  103. package/templates/docs/project/04-tech-stack.md +0 -29
  104. package/templates/docs/project/07-backlog.md +0 -23
  105. package/templates/docs/project/08-env.md +0 -29
  106. package/templates/docs/project/09-deployment.md +0 -28
package/README.md CHANGED
@@ -1,445 +1,105 @@
1
1
  # VibeOps
2
2
 
3
- > Workflow rails for Cursor-based vibe coding projects.
3
+ > Minimal CLI rails for Cursor-based TASK-driven vibe coding.
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)
7
7
 
8
- VibeOps is a local CLI that installs and operates the project structure needed to run Cursor-based vibe coding as reproducible TASKs: `AGENTS.md`, Cursor rules, project docs, TASK files, agents/prompts/workflows, Git lifecycle helpers, and optional Notion dashboard sync.
8
+ VibeOps bootstraps a **Cursor-friendly repo**, starts numbered **TASK** files on Git branches, and closes them while updating **project memory** in Git. Cursor plans and implements; the CLI handles files, Git, and short LLM assists.
9
9
 
10
- VibeOps does not write product code for you. Cursor is the builder. VibeOps keeps the workflow on rails.
10
+ ## Four commands
11
11
 
12
- ## What Is VibeOps?
12
+ | Command | Purpose |
13
+ |---------|---------|
14
+ | `vibeops init` | Install AGENTS.md, Cursor rules/skills, docs layout, `.vibeops.json` |
15
+ | `vibeops task add` | New `TASK-NNN` file + task branch (blocks if another TASK is In Progress) |
16
+ | `vibeops task done` | LLM fills Result/Test + updates project docs; commit + merge |
17
+ | `vibeops status` | Briefing: active TASK, branch, doc health, next hint |
13
18
 
14
- VibeOps is a **local CLI** for turning an idea into a repository that Cursor agents can work on safely and repeatably.
15
-
16
- It gives a project:
17
-
18
- - `docs/project/*` for product and architecture context.
19
- - `docs/tasks/TASK-*.md` as the AI execution source of truth.
20
- - `.cursor/rules/*` and `AGENTS.md` so Cursor knows how to behave.
21
- - `.vibeops/agents`, `.vibeops/prompts`, `.vibeops/workflows` for reusable agent instructions.
22
- - Git task lifecycle commands for start/check/done/rollback.
23
- - Notion metadata sync for a human dashboard.
24
-
25
- ## Why It Exists
26
-
27
- Vibe coding is fast, but chat history is a weak source of truth. Without a durable workflow, agents repeat work, drift outside scope, lose decision history, and leave teammates without a dashboard. VibeOps moves the durable context into Git files and uses CLI commands to keep each TASK bounded.
28
-
29
- ## Core Philosophy
30
-
31
- - **VibeOps = workflow rail**: it structures the work, validates state, and prints prompts.
32
- - **Cursor = builder**: Cursor reads the docs/TASKs and writes application code.
33
- - **Git `docs/tasks` = AI execution source of truth**: TASK markdown beats chat memory.
34
- - **Notion = human dashboard**: Notion shows metadata and progress, not canonical task bodies.
35
-
36
- | What | Source of truth |
37
- | --- | --- |
38
- | AI execution input | Git `docs/tasks/*.md` |
39
- | Project design/status | Git `docs/project/*.md` |
40
- | Change and rollback evidence | Git commits/branches |
41
- | Human dashboard | Notion Projects/Tasks DB |
42
- | Not a source of truth | Cursor chat, Slack, memory |
43
-
44
- ## Installation
45
-
46
- VibeOps requires Node.js 20+.
19
+ ## Workflow
47
20
 
48
21
  ```bash
49
- npm install -g @goodtek/vibeops
50
- vibeops --help
51
- ```
52
-
53
- The published package is `@goodtek/vibeops`. The installed CLI command is `vibeops`.
22
+ vibeops init --git --initial-commit # once per repo
54
23
 
55
- For local development from this repository:
24
+ vibeops task add # interactive: idea → TASK file + branch
25
+ # Plan in Cursor Ask: @docs/tasks/TASK-NNN-….md
26
+ # Build in Cursor Agent: same file + Scope / Acceptance Criteria
56
27
 
57
- ```bash
58
- pnpm install
59
- pnpm build
60
- node dist/cli.js --help
61
- ```
62
-
63
- ## Quick Start
64
-
65
- ```bash
66
- # 1. Install VibeOps workflow files into the current project.
67
- # Interactive mode can also initialize Git and create the first commit.
68
- vibeops init
69
-
70
- # Non-interactive Git bootstrap:
71
- vibeops init --git --initial-commit
72
-
73
- # 2. LLM planning session (OpenAI API key, Codex `codex login` / ~/.codex/auth.json, or Cursor `agent` CLI) → brief + planning prompt.
74
- # Use `vibeops plan --legacy-wizard` for the original 20-question flow.
75
- vibeops plan
76
-
77
- # 3. Generate a TASK prompt or scaffold TASK markdown.
78
- vibeops task generate --dry-run
79
-
80
- # 4. Start one TASK at a time.
81
- vibeops task start TASK-001
82
- vibeops task prompt TASK-001 --agent builder
83
-
84
- # 5. Review and move to human review.
85
- vibeops task check TASK-001
86
- vibeops task done TASK-001
87
-
88
- # 6. Optional Notion dashboard sync.
89
- vibeops notion init
90
- vibeops notion test
91
- vibeops notion sync --dry-run
28
+ vibeops task done # close TASK, update memory, merge branch
29
+ vibeops status # anytime snapshot
92
30
  ```
93
31
 
94
- ## Quick Tutorial: Acme Automator
95
-
96
- Suppose the idea is: “Build **Acme Automator**, a SaaS that schedules and runs browser automation jobs for marketing teams.”
97
-
98
- ```bash
99
- mkdir acme-automator
100
- cd acme-automator
101
-
102
- vibeops init --name "Acme Automator" --git --initial-commit
103
- vibeops plan --idea "Acme Automator: schedule and run browser automation jobs for marketing teams"
104
- vibeops task generate --dry-run
105
-
106
- vibeops task start TASK-001
107
- vibeops task prompt TASK-001 --agent builder
108
- # Paste the prompt into Cursor and let Cursor implement the TASK.
109
- vibeops task check TASK-001
110
- vibeops task done TASK-001
111
- ```
112
-
113
- If a Notion dashboard is enabled:
114
-
115
- ```bash
116
- vibeops notion init
117
- vibeops notion test
118
- vibeops notion sync --dry-run
119
- vibeops notion sync
120
- ```
121
-
122
- ## Full Command Flow
123
-
124
- ```text
125
- vibeops
126
- ├─ init [--dry-run] [--force] [--cwd <path>] [--name <projectName>]
127
- │ [--git|--no-git] [--initial-commit|--no-initial-commit]
128
- │ [--default-branch <name>] [--commit-message <message>]
129
- ├─ status [--json] [--cwd <path>]
130
- ├─ plan [--idea <text>] [--from <path>] [--output <path>] [--non-interactive] [--legacy-wizard] [--provider <id>] [--cwd <path>]
131
- ├─ agent
132
- │ ├─ list [--json] [--cwd <path>]
133
- │ ├─ show <name> [--raw] [--cwd <path>]
134
- │ └─ prompt <name> <taskId> [--context <path...>] [--cwd <path>]
135
- ├─ task
136
- │ ├─ generate [--from <path>] [--output <path>] [--count <n>] [--phase <name>] [--scaffold] [--dry-run] [--cwd <path>]
137
- │ ├─ start <taskId> [--dry-run] [--allow-dirty] [--agent <name>] [--cwd <path>]
138
- │ ├─ prompt <taskId> --agent <name> [--context <path...>] [--cwd <path>]
139
- │ ├─ check <taskId> [--strict] [--agent <name>] [--cwd <path>]
140
- │ ├─ done <taskId> [--dry-run] [--finalize] [--cwd <path>]
141
- │ ├─ rollback <taskId> [--confirm | --confirm-destructive] [--strategy <name>] [--keep-branch] [--dry-run] [--cwd <path>]
142
- │ └─ pull [--dry-run] [--json] [--status <list>] [--limit <n>] [--cwd <path>] [--verbose]
143
- ├─ notion
144
- │ ├─ init [--dry-run] [--enable] [--projects-db <id>] [--tasks-db <id>] [--non-interactive] [--cwd <path>]
145
- │ ├─ test [--json] [--debug-shape] [--cwd <path>]
146
- │ └─ sync [--dry-run] [--json] [--only-tasks] [--only-project] [--cwd <path>]
147
- └─ github
148
- ├─ status [--json] [--cwd <path>]
149
- └─ init [--dry-run] [--yes] [--owner <user>] [--repo <name>] [--public|--private]
150
- [--remote <name>] [--connect <owner/repo or url>] [--no-package-update] [--cwd <path>]
151
- ```
152
-
153
- Run any command with `--help` for the option details.
154
-
155
- ## Features
156
-
157
- ### Project Bootstrapper
158
-
159
- `vibeops init` installs a project operating system: `AGENTS.md`, `.cursor/rules`, `docs/project`, `docs/tasks`, `.vibeops/agents`, `.vibeops/prompts`, `.vibeops/workflows`, `.vibeops.json`, and `.vibeops.env.example`. It is idempotent by default and only overwrites when `--force` is used.
160
-
161
- ### Interactive Planner
162
-
163
- `vibeops plan` runs only inside a **VibeOps project** (expects **`.vibeops.json`** from `vibeops init`). It writes `.vibeops/brief/project-brief.md` and `.vibeops/generated/plan-prompt.md`; with **`--apply-planner`** it also writes `docs/project/*` and `docs/tasks/*` via the LLM. The command uses **OpenAI** (`OPENAI_API_KEY`), **Codex (ChatGPT OAuth)** via tokens from `codex login` (`~/.codex/auth.json`, same OAuth client as Hermes/OpenClaw `openai-codex`), or the **Cursor Agent CLI** (`agent login`). With a TTY you **always pick** among those three (each line shows ✓ or “needs setup”; Codex can start browser OAuth from that menu). Pass `--provider` to skip the menu when that path is already ready. Then pick a **model** from the provider catalog (or `--model`). Next you pick the **planning dialogue language** (preset list + Other); the LLM asks **one question per turn** in that language. Each question header shows a **rough ASCII progress line** and **ETA hint** (assumes up to ~14 steps; not a guarantee). **Multi**-choice suggestions use **checkboxes** (Space, Other, **Wrap up — draft summary now** when allowed, then **Go back** last when you can undo); **single**-choice uses **arrow select** with **Other**, wrap-up, and **Go back** last (no extra Continue step). **Text** answers: type `back` alone to go back when allowed, or `wrap` / `enough` to stop questions and ask for a draft summary from the thread so far. When the model is ready, it shows a **readable markdown summary**; you must **confirm** before the `ProjectBrief` is written. After that, **`--apply-planner`** runs the planner pass via the same provider: fills `docs/project/*` and initial `docs/tasks/*`. With a **TTY** and without **`--non-interactive`**, you are then asked **in order**: create a **git commit** (default Yes; if Git is not initialized yet, you can run **`git init`** + branch **`main`** from the same prompts), **git push** (default No; use **`--push`** to skip the question and push after a successful commit; after you choose push, you can run **`vibeops github init`** to connect or create a GitHub repo / set **`origin`**, same as the standalone command), and **Notion sync** when the brief enables it (default Yes; **`--no-notion-sync`** skips; if Notion is not configured, you can run **`vibeops notion init`** from the same flow, then sync retries once ready). In **`--non-interactive`** mode, commit runs automatically (unless **`--no-git-commit`**), push only with **`--push`**, and Notion runs when the brief enables it (unless **`--no-notion-sync`**). **`--apply-dry-run`** asks the model which files it would emit without writing. Codex defaults to ChatGPT-account models (`gpt-5.4`; override with `VIBEOPS_CODEX_MODEL`). Use `--legacy-wizard` for the fixed 20-question flow. `--non-interactive` and `--from` never call an LLM for the brief unless you add `--apply-planner` with `--provider` (and optional `--model`) for the apply step.
164
-
165
- ### Task Generator
166
-
167
- `vibeops task generate` builds a Cursor prompt for generating TASK files. With `--scaffold`, it creates placeholder TASK markdown directly. It does not call an LLM.
168
-
169
- ### Git Task Lifecycle
170
-
171
- `task start`, `task prompt`, `task check`, and `task done` keep one TASK moving through `Planned → In Progress → Review → Done`. `task done` defaults to `Review`; use `--finalize` only after human review. `task start` still expects a clean tree for application code, but if the only uncommitted changes live under `docs/tasks/`, `docs/project/`, `docs/logs/`, or `.vibeops/state/`, it warns and continues so a prior doc-only finalize does not block the next TASK.
172
-
173
- ### Rollback Safety
174
-
175
- `task rollback` prints recovery options by default. Destructive Git actions require explicit confirmation (`--confirm` or `--confirm-destructive`) and should be reviewed before use.
176
-
177
- ### Notion Dashboard Sync
178
-
179
- `notion init/test/sync` and `task pull` keep Notion as a metadata dashboard. VibeOps syncs project/task metadata only and never updates Notion page bodies.
180
-
181
- ## Runner Modes
182
-
183
- - **Prompt mode (default)**: VibeOps prints Cursor-ready prompts. Cursor executes the code changes.
184
- - VibeOps does not call LLM APIs and does not invoke Cursor CLI directly today; it works as a workflow rail around the human + Cursor loop.
185
-
186
- ## Notion Setup
187
-
188
- Notion is optional. If enabled:
189
-
190
- - `NOTION_TOKEN` is the **only** environment variable VibeOps reads. It lives in `.vibeops.env` (gitignored) or in `process.env`.
191
- - Target IDs live in `.vibeops.json`, not in `.vibeops.env`.
192
- - `projectsTargetId` / `tasksTargetId` are preferred resolved **data_source** IDs.
193
- - `projectsDatabaseId` / `tasksDatabaseId` remain legacy/container fallbacks.
194
- - `notion init` uses data_source-first discovery. If no data sources are found, it can search accessible pages, scan 1-depth inline database blocks, then resolve child databases to data source IDs.
195
- - Legacy `NOTION_API_KEY` / `NOTION_PROJECT_DB` / `NOTION_TASK_DB` environment variables are no longer used. The `.vibeops.env.example` that `vibeops init` writes contains only `NOTION_TOKEN=`.
32
+ If a TASK is already **In Progress**, `task add` prints a guide and exits with code 1 — it does **not** auto-run `task done`.
196
33
 
197
- Required Projects DB properties:
34
+ ## What `init` creates
198
35
 
199
- | Property | Type |
200
- | --- | --- |
201
- | `Name` | `title` |
202
- | `Project ID` | `rich_text` |
203
- | `Status` | `status` |
204
- | `Local Path` | `rich_text` |
205
- | `Git Repo` | `rich_text` or `url` |
206
- | `Current Phase` | `select` |
207
- | `Docs Path` | `rich_text` |
208
- | `Summary` | `rich_text` |
36
+ | Path | Role |
37
+ |------|------|
38
+ | `AGENTS.md` | Source of truth, read order, four CLI commands |
39
+ | `.cursor/rules/` | Task source of truth, Git safety, docs on done |
40
+ | `.cursor/skills/` | Optional `plan-task` and `implement-task` skills |
41
+ | `docs/tasks/TASK-000-template.md` | Section template for new TASKs |
42
+ | `docs/project/05-current-state.md` | Facts: stage, active TASK, next step |
43
+ | `docs/project/06-decisions.md` | Append-only decision log |
44
+ | `docs/project/03-architecture.md` | Living architecture |
45
+ | `docs/logs/README.md` | Daily log convention |
46
+ | `.vibeops.json` | Project metadata (no Notion) |
209
47
 
210
- Required Tasks DB properties:
48
+ ## Source of truth
211
49
 
212
- | Property | Type |
213
- | --- | --- |
214
- | `Name` | `title` |
215
- | `Task ID` | `rich_text` |
216
- | `Project ID` | `rich_text` |
217
- | `Status` | `status` |
218
- | `Priority` | `select` |
219
- | `MVP Phase` | `select` |
220
- | `Git Branch` | `rich_text` |
221
- | `Docs Path` | `rich_text` |
222
- | `Summary` | `rich_text` |
223
- | `Result Summary` | `rich_text` |
50
+ | What | Where |
51
+ |------|--------|
52
+ | Current work | `docs/tasks/TASK-NNN-*.md` |
53
+ | Project memory | `docs/project/05-current-state.md`, `03-architecture.md`, `06-decisions.md` |
54
+ | Change history | Git commits on task branches |
55
+ | **Not** trusted | Cursor chat, Slack |
224
56
 
225
- > `MVP Phase` here is a Notion property name kept for compatibility with existing dashboards. It is a free-form label column and is not an internal release-phase tag.
57
+ ## LLM (optional)
226
58
 
227
- Required Status options:
59
+ Used only for **`task add`** (scaffold title/slug/sections) and **`task done`** (Result, Test Result, project doc patches).
228
60
 
229
- - Projects DB: `Building`, `Planning`, `Paused`, `Done`, `Archived`
230
- - Tasks DB: `Planned`, `In Progress`, `Review`, `Done`, `Blocked`
61
+ Providers (first match wins): Codex OAuth (`~/.codex/auth.json`), Cursor Agent CLI, `OPENAI_API_KEY` in `.vibeops.env`.
231
62
 
232
- VibeOps validates these options in `notion test` and `notion sync --dry-run`, but it never creates or mutates Notion schema.
63
+ Without LLM, `task add` falls back to a minimal template; `task done` uses a git-diff fallback for Result sections.
233
64
 
234
- ## GitHub Setup
235
-
236
- GitHub integration runs on top of the GitHub CLI (`gh`). VibeOps never stores `GITHUB_TOKEN` — authentication is owned by `gh auth login`.
237
-
238
- 1. Install `gh`:
239
-
240
- ```bash
241
- brew install gh
242
- # or follow https://cli.github.com/
243
- ```
244
-
245
- 2. Authenticate:
246
-
247
- ```bash
248
- gh auth login
249
- ```
250
-
251
- 3. Probe state:
252
-
253
- ```bash
254
- vibeops github status
255
- ```
256
-
257
- 4. Connect or create a repo interactively:
258
-
259
- ```bash
260
- # plan only — no gh / git / file mutation
261
- vibeops github init --dry-run
262
-
263
- # plan a new public repo
264
- vibeops github init --dry-run --owner <user> --repo <name> --public
265
-
266
- # connect to an existing repo by slug or URL
267
- vibeops github init --dry-run --connect <owner>/<repo>
268
- vibeops github init --dry-run --connect https://github.com/<owner>/<repo>.git
269
- vibeops github init --dry-run --connect git@github.com:<owner>/<repo>.git
270
- ```
271
-
272
- `vibeops github init` applies four things in sequence:
273
-
274
- - (optional) `gh repo create <owner>/<repo> --public|--private --source=. --remote=origin` for new repos.
275
- - `git remote add origin <url>` (or `git remote set-url`) for the `--connect` path. Existing remotes are never silently overwritten — VibeOps asks first and defaults to No.
276
- - Updates `package.json` `repository.url`, `homepage`, `bugs.url` (skip with `--no-package-update`).
277
- - Writes the `github` section of `.vibeops.json`: `enabled`, `mode = "gh-cli"`, `owner`, `repo`, `remote`, `visibility`, `url`.
278
-
279
- VibeOps never runs `git push`. Push your branch manually with `git push -u <remote> <branch>`.
280
-
281
- ## Init Git Bootstrap
282
-
283
- `vibeops init` can optionally do the first local Git setup while installing the workflow files. In interactive mode it asks:
284
-
285
- - Initialize Git repository?
286
- - Use `main` as default branch?
287
- - Create initial commit?
288
- - Initial commit message
289
-
290
- For non-interactive setup:
291
-
292
- ```bash
293
- vibeops init --git --initial-commit
294
- vibeops init --git --no-initial-commit
295
- vibeops init --git --default-branch main --commit-message "chore: initialize vibeops project"
296
- ```
297
-
298
- Safety rules:
299
-
300
- - Existing Git repositories skip `git init`.
301
- - Existing repositories with commits skip the initial commit path.
302
- - `--dry-run` runs no Git commands.
303
- - VibeOps never pushes and never changes remotes during `init`.
304
- - Before the initial commit, VibeOps prints how many files will be included.
305
-
306
- Before the first commit, `vibeops status` distinguishes an unborn branch from a detached HEAD:
307
-
308
- ```text
309
- Git
310
- branch main (unborn, no commits yet)
311
- status dirty
312
- hint create the first commit or run `vibeops init --git --initial-commit`
313
- ```
314
-
315
- ## Status Output
316
-
317
- `vibeops status` summarizes the local project surface only. It never calls the Notion API and never spawns `gh`. The Notion section reads from `.vibeops.env` / `process.env` (for `NOTION_TOKEN` presence) and `.vibeops.json` (for target IDs). The GitHub section reads from `.vibeops.json`. The Package section reads from `package.json`.
318
-
319
- Example output for a fully-configured project:
320
-
321
- ```text
322
- Git
323
- branch main
324
- status clean
325
-
326
- Notion
327
- enabled yes
328
- token configured (.vibeops.env)
329
- projects target configured
330
- tasks target configured
331
- hint run `vibeops notion test`
332
-
333
- GitHub
334
- enabled yes
335
- mode gh-cli
336
- owner/repo goodtekxyz/vibeops
337
- remote origin
338
- url https://github.com/goodtekxyz/vibeops
339
-
340
- Package
341
- name @goodtek/vibeops
342
- version 0.2.0
343
- bin vibeops
344
- ```
345
-
346
- For a fresh project that has not been wired to Notion or GitHub yet:
347
-
348
- ```text
349
- Notion
350
- enabled no
351
- token missing
352
- projects target missing
353
- tasks target missing
354
- hint run `vibeops notion init`
355
-
356
- GitHub
357
- enabled no
358
- hint run `vibeops github init`
359
- ```
360
-
361
- If the project has no `package.json`, the Package section degrades gracefully:
362
-
363
- ```text
364
- Package
365
- package.json missing
366
- ```
367
-
368
- `vibeops status --json` exposes the same surface programmatically, including `notion.tokenSource`, `notion.hasProjectsTarget`, `notion.hasTasksTarget`, the entire `github` object, and the entire `package` object. Legacy environment variables (`NOTION_API_KEY`, `NOTION_PROJECT_DB`, `NOTION_TASK_DB`) are no longer surfaced — VibeOps only uses `NOTION_TOKEN`.
369
-
370
- ## Git Rollback Safety
371
-
372
- - `task start` records base branch, base commit, and task branch in task state.
373
- - `task check` is read-only and reports working tree + committed changes.
374
- - `task done` validates TASK Result/Test Result and moves to Review by default.
375
- - `task rollback` is advisory unless explicit confirmation flags are supplied.
376
-
377
- ## Agent Workflow
65
+ ## Installation
378
66
 
379
- Agents are Markdown files under `.vibeops/agents`. Use:
67
+ Node.js 20+ required.
380
68
 
381
69
  ```bash
382
- vibeops agent list
383
- vibeops agent show builder
384
- vibeops task prompt TASK-001 --agent builder
385
- ```
386
-
387
- The default project template includes agents such as `orchestrator`, `planner`, `architect`, `builder`, `reviewer`, `tester`, `docs`, and `recovery`.
388
-
389
- ## Packaging / npm Usage
390
-
391
- This package exposes the `vibeops` binary:
392
-
393
- ```json
394
- {
395
- "bin": {
396
- "vibeops": "dist/cli.js"
397
- }
398
- }
70
+ npm install -g @goodtek/vibeops
71
+ vibeops --help
399
72
  ```
400
73
 
401
- Package contents are limited by `package.json#files` to built output, templates, and top-level docs/license files. `dist/` is generated by `pnpm build` / `prepack` and is not committed.
402
-
403
- Useful maintainer commands:
74
+ Local development:
404
75
 
405
76
  ```bash
406
- pnpm typecheck
77
+ pnpm install
407
78
  pnpm build
408
- pnpm smoke
409
- pnpm pack
410
- pnpm publish --dry-run --access public --no-git-checks
79
+ pnpm smoke # typecheck + build + smoke cases
80
+ node dist/cli.js --help
411
81
  ```
412
82
 
413
- Actual `npm publish` is a manual release action and is not performed by this repository workflow.
83
+ ## Flags (common)
414
84
 
415
- ## Security Notes
85
+ - **`init`**: `--dry-run`, `--cwd`, `--name`, `--git`, `--no-git`, `--initial-commit`, `--force`
86
+ - **`task add`**: `--dry-run`, `--non-interactive --idea "…"` (CI/smoke)
87
+ - **`task done`**: `--dry-run`, `--no-merge`, `--allow-dirty`, `--yes`, `--cwd`
88
+ - **`status`**: `--json`, `--cwd`
416
89
 
417
- - `.vibeops.env` is gitignored and must contain secrets such as `NOTION_TOKEN`.
418
- - VibeOps masks tokens in CLI output.
419
- - Notion test/debug output is token-safe.
420
- - `notion sync --dry-run` performs no mutation.
421
- - `task pull --dry-run` performs no file or Notion mutation.
422
- - Notion page bodies are never synced.
423
- - Git destructive rollback paths require explicit confirmation.
424
- - `github init` uses `gh` CLI auth — VibeOps never stores `GITHUB_TOKEN`.
425
- - `github init --dry-run` runs zero `gh` / `git remote` / file mutations and produces only a plan.
90
+ ## Git conventions
426
91
 
427
- ## Support
92
+ - Task branch: `task/<slug>` from current HEAD
93
+ - Commit message: `feat(task-nnn): <short title>`
94
+ - Merge via `task done` (confirm in TTY; `--yes` to skip prompt)
95
+ - No force-push
428
96
 
429
- - Bugs, setup issues, and usage questions: [support@goodtek.xyz](mailto:support@goodtek.xyz)
430
- - Collaboration and feedback: [hello@goodtek.xyz](mailto:hello@goodtek.xyz)
431
- - Issue tracker: [github.com/goodtekxyz/vibeops/issues](https://github.com/goodtekxyz/vibeops/issues)
97
+ ## Breaking change: 1.0.0
432
98
 
433
- ## Documentation
99
+ v1.0 removes `plan`, `start`, `next`, `rollback`, `notion`, `github`, and legacy task subcommands. Pin `@goodtek/vibeops@0.7` if you still need them.
434
100
 
435
- - [`AGENTS.md`](AGENTS.md) — agent operating guide.
436
- - [`docs/project/00-overview.md`](docs/project/00-overview.md) — vision and scope.
437
- - [`docs/project/01-architecture.md`](docs/project/01-architecture.md) — CLI / config / data flow.
438
- - [`docs/project/03-current-state.md`](docs/project/03-current-state.md) — current implementation state.
439
- - [`docs/project/04-decisions.md`](docs/project/04-decisions.md) — decisions already made.
440
- - [`docs/project/05-backlog.md`](docs/project/05-backlog.md) — task order.
441
- - [`docs/tasks/`](docs/tasks/) — TASK files used by Cursor.
101
+ See [CHANGELOG.md](CHANGELOG.md) and [docs/project/v3-scope.md](docs/project/v3-scope.md).
442
102
 
443
103
  ## License
444
104
 
445
- MIT © VibeOps contributors
105
+ MIT
@@ -6,24 +6,12 @@ import { loadManifest, resolveDestination } from "./manifest.js";
6
6
  import { applySubstitutions, buildSubstitutions, isTextPath, } from "./substitute.js";
7
7
  import { configToJson } from "../lib/config.js";
8
8
  function envExampleContents() {
9
- // Modern VibeOps reads exactly one Notion secret: NOTION_TOKEN.
10
- // Notion Projects / Tasks target IDs live in `.vibeops.json` under
11
- // `notion.projectsTargetId` / `notion.tasksTargetId` (configured by
12
- // `vibeops notion init`), so they are NOT environment variables.
13
- //
14
- // We intentionally do NOT seed GITHUB_TOKEN / OPENAI_* here:
15
- // - GitHub integration uses `gh` CLI auth.
16
- // - VibeOps' default runner is prompt mode and does not call LLM APIs.
17
9
  return [
18
- "# VibeOps · environment example",
19
- "# Copy this file to .vibeops.env and fill in the value.",
20
- "# Never commit .vibeops.env — it is added to .gitignore by `vibeops init`.",
10
+ "# VibeOps · optional environment",
11
+ "# Copy to .vibeops.env (gitignored). Never commit secrets.",
21
12
  "#",
22
- "# NOTION_TOKEN is the only secret VibeOps reads. Get it from",
23
- "# https://www.notion.so/profile/integrations after creating an internal",
24
- "# integration and sharing the target databases with it.",
25
- "",
26
- "NOTION_TOKEN=",
13
+ "# LLM for task add / task done (optional — Codex OAuth and Cursor Agent CLI also work):",
14
+ "# OPENAI_API_KEY=",
27
15
  "",
28
16
  ].join("\n");
29
17
  }