syntaur 0.3.3 → 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.
Files changed (33) hide show
  1. package/README.md +236 -49
  2. package/dist/index.js +886 -162
  3. package/dist/index.js.map +1 -1
  4. package/package.json +9 -2
  5. package/platforms/claude-code/.claude-plugin/plugin.json +1 -5
  6. package/platforms/claude-code/agents/syntaur-expert.md +30 -18
  7. package/platforms/claude-code/commands/complete-assignment/complete-assignment.md +20 -0
  8. package/platforms/claude-code/commands/create-assignment/create-assignment.md +20 -0
  9. package/platforms/claude-code/commands/create-project/create-project.md +20 -0
  10. package/platforms/claude-code/commands/grab-assignment/grab-assignment.md +20 -0
  11. package/platforms/claude-code/commands/plan-assignment/plan-assignment.md +20 -0
  12. package/statusline/statusline.sh +224 -0
  13. package/vendor/syntaur-skills/LICENSE +21 -0
  14. package/vendor/syntaur-skills/README.md +43 -0
  15. package/vendor/syntaur-skills/skills/complete-assignment/SKILL.md +146 -0
  16. package/vendor/syntaur-skills/skills/create-assignment/SKILL.md +72 -0
  17. package/vendor/syntaur-skills/skills/create-project/SKILL.md +56 -0
  18. package/vendor/syntaur-skills/skills/grab-assignment/SKILL.md +158 -0
  19. package/vendor/syntaur-skills/skills/plan-assignment/SKILL.md +137 -0
  20. package/vendor/syntaur-skills/skills/syntaur-protocol/SKILL.md +119 -0
  21. package/vendor/syntaur-skills/skills/syntaur-protocol/references/file-ownership.md +67 -0
  22. package/vendor/syntaur-skills/skills/syntaur-protocol/references/protocol-summary.md +82 -0
  23. package/platforms/claude-code/hooks/statusline.sh +0 -110
  24. package/platforms/claude-code/skills/complete-assignment/SKILL.md +0 -155
  25. package/platforms/claude-code/skills/create-assignment/SKILL.md +0 -67
  26. package/platforms/claude-code/skills/grab-assignment/SKILL.md +0 -202
  27. package/platforms/claude-code/skills/plan-assignment/SKILL.md +0 -156
  28. package/platforms/claude-code/skills/syntaur-protocol/SKILL.md +0 -86
  29. package/platforms/codex/skills/complete-assignment/SKILL.md +0 -64
  30. package/platforms/codex/skills/create-assignment/SKILL.md +0 -49
  31. package/platforms/codex/skills/grab-assignment/SKILL.md +0 -73
  32. package/platforms/codex/skills/plan-assignment/SKILL.md +0 -61
  33. package/platforms/codex/skills/syntaur-protocol/SKILL.md +0 -102
package/README.md CHANGED
@@ -1,113 +1,300 @@
1
1
  # Syntaur
2
2
 
3
- Syntaur is a local mission and assignment workflow for coding agents. It ships a CLI, a dashboard, a Claude Code plugin, and a Codex plugin.
3
+ Syntaur is a local project and assignment workflow for coding agents. It ships a CLI, a dashboard, a Claude Code plugin, and a Codex plugin.
4
4
 
5
- ## Install and Run
6
-
7
- Requirements:
5
+ ## Requirements
8
6
 
9
7
  - Node.js 20+
10
- - `npx` from npm
8
+ - `npm` 7+ (ships with Node 20); `npx` is used for zero-install runs
9
+
10
+ ---
11
+
12
+ ## Install
13
+
14
+ Two supported install styles. Both pull the same package from npm; the only difference is whether the `syntaur` binary lives on your `$PATH` or inside npm's cache.
15
+
16
+ ### Option A — `npx` (no global install)
17
+
18
+ Best for trying Syntaur once, or for users who don't want anything on their `$PATH`.
19
+
20
+ ```bash
21
+ npx syntaur@latest # first run: initializes ~/.syntaur/ and walks setup
22
+ npx syntaur@latest dashboard
23
+ npx syntaur@latest doctor
24
+ ```
25
+
26
+ Every `npx syntaur@latest <cmd>` resolves against the npm registry (so you stay up to date), then runs from the cache at `~/.npm/_npx/<hash>/`. The CLI is not on your `$PATH` — you must type `npx syntaur@latest ...` each time.
27
+
28
+ ### Option B — Global install
29
+
30
+ Best for day-to-day use. You can run `syntaur ...` directly.
31
+
32
+ ```bash
33
+ npm install -g syntaur
34
+ syntaur # first run: initializes ~/.syntaur/ and walks setup
35
+ syntaur dashboard
36
+ ```
37
+
38
+ To upgrade: `npm install -g syntaur@latest`.
39
+
40
+ ### Option C — Upgrade from `npx` to global
41
+
42
+ If you start on `npx`, the CLI notices and offers to install globally on the first interactive run:
43
+
44
+ ```
45
+ You're running syntaur via npx. Install it globally for faster startup?
46
+ 1) Yes — install now
47
+ 2) Maybe later — just start it for now
48
+ 3) Never — don't ask again
49
+ ```
50
+
51
+ - **1** runs `npm install -g syntaur` for you and records the decision in `~/.syntaur/npx-install.json`.
52
+ - **2** does nothing permanent; you'll be asked again on the next `npx` run.
53
+ - **3** writes `decision: never` to that same state file so the prompt never reappears.
11
54
 
12
- Run Syntaur directly with `npx`:
55
+ The prompt is automatically suppressed when:
56
+
57
+ - stdin or stdout isn't a TTY (piped commands, CI)
58
+ - the invocation is a meta command (`--help`, `--version`, `help`)
59
+ - `SYNTAUR_SKIP_INSTALL_PROMPT=1` is set
60
+ - `~/.syntaur/npx-install.json` already records a decision
61
+
62
+ To re-trigger the prompt after you've dismissed it, delete the state file:
13
63
 
14
64
  ```bash
15
- npx syntaur@latest
65
+ rm ~/.syntaur/npx-install.json
16
66
  ```
17
67
 
18
- This downloads the published `syntaur` package into npm's cache and runs the CLI. It does not do a global install unless you choose to install it globally yourself.
68
+ If you're already globally installed and later run a newer `npx syntaur@latest`, the CLI instead offers to upgrade your global install to match.
69
+
70
+ ---
19
71
 
20
- On first run, Syntaur will:
72
+ ## First-Run Setup
21
73
 
22
- 1. Initialize `~/.syntaur/`
23
- 2. Offer to install the Claude Code plugin
24
- 3. Offer to install the Codex plugin
25
- 4. Ask where those plugins should be installed, with recommended defaults based on your current machine
74
+ The first time you run `syntaur` or `npx syntaur@latest`, it walks through:
75
+
76
+ 1. Initialize `~/.syntaur/` (config, SQLite session registry, playbooks dir)
77
+ 2. Offer to install the Claude Code plugin (copies vendored protocol skills into `~/.claude/skills/` too)
78
+ 3. Offer to install the Codex plugin (copies vendored protocol skills into `~/.codex/skills/` too)
79
+ 4. Ask where those plugins should live, with sensible defaults based on your machine
26
80
  5. Offer to launch the dashboard
27
81
 
28
- You can also run setup explicitly:
82
+ Run setup explicitly any time:
29
83
 
30
84
  ```bash
31
- npx syntaur@latest setup
85
+ syntaur setup # or: npx syntaur@latest setup
32
86
  ```
33
87
 
34
- Non-interactive setup:
88
+ Non-interactive setup (useful in dotfile bootstrap scripts):
35
89
 
36
90
  ```bash
37
- npx syntaur@latest setup --yes
38
- npx syntaur@latest setup --yes --claude
39
- npx syntaur@latest setup --yes --codex
40
- npx syntaur@latest setup --yes --dashboard
91
+ syntaur setup --yes
92
+ syntaur setup --yes --claude
93
+ syntaur setup --yes --codex
94
+ syntaur setup --yes --dashboard
41
95
  ```
42
96
 
43
- ## Plugin Install Paths
97
+ ---
98
+
99
+ ## What Gets Installed Where
100
+
101
+ A full install (CLI + both plugins + skills) touches the following locations:
44
102
 
45
- Syntaur remembers the plugin install locations you choose in `~/.syntaur/config.md`.
103
+ | Location | What lives there | Managed by |
104
+ |---|---|---|
105
+ | `~/.syntaur/` | Your data: `projects/`, `assignments/`, `playbooks/`, `config.md`, `syntaur.db` | You (via CLI). Never deleted by `syntaur uninstall` unless `--all` is passed. |
106
+ | `~/.syntaur/npx-install.json` | Remembers your answer to the "install globally?" prompt | CLI |
107
+ | `~/.npm/_npx/<hash>/` | npx-cached copy of the `syntaur` package | npm |
108
+ | `$(npm root -g)/syntaur/` | Globally-installed copy of the `syntaur` package | `npm install -g` |
109
+ | `~/.claude/plugins/.../syntaur/` | Claude Code plugin directory (slash commands, hooks, agent, marketplace entry) | `syntaur install-plugin` |
110
+ | `~/.claude/skills/<skill>/` | Protocol skills (six of them) | `syntaur install-plugin` copies from the vendored `syntaur-skills` |
111
+ | `~/.codex/plugins/syntaur/` (or chosen dir) | Codex plugin directory (`track-session` skill, hooks) | `syntaur install-codex-plugin` |
112
+ | `~/.codex/skills/<skill>/` | Protocol skills (same six) | `syntaur install-codex-plugin` copies from the vendored `syntaur-skills` |
113
+ | `~/.agents/plugins/marketplace.json` | Codex marketplace entry | `syntaur install-codex-plugin` |
114
+ | `<repo>/.syntaur/context.json` | Per-workspace agent context (current assignment, session id, transcript path) | Written by the `grab-assignment` skill and SessionStart hooks |
46
115
 
47
- For Claude Code, Syntaur will detect the machine's local plugin marketplace when one exists and recommend installing into that marketplace's `plugins/` directory.
116
+ ### Plugin install paths
48
117
 
49
- Interactive commands will prompt for install locations:
118
+ Syntaur remembers the plugin install locations you choose in `~/.syntaur/config.md`. For Claude Code, Syntaur will detect the machine's local plugin marketplace when one exists and recommend installing into that marketplace's `plugins/` directory.
119
+
120
+ Interactive install (prompts for paths):
50
121
 
51
122
  ```bash
52
- npx syntaur@latest install-plugin
53
- npx syntaur@latest install-codex-plugin
123
+ syntaur install-plugin
124
+ syntaur install-codex-plugin
54
125
  ```
55
126
 
56
- You can also set paths explicitly:
127
+ Explicit paths:
57
128
 
58
129
  ```bash
59
- npx syntaur@latest install-plugin --target-dir ~/.claude/plugins/marketplaces/user-plugins/plugins/syntaur
60
- npx syntaur@latest install-codex-plugin \
130
+ syntaur install-plugin --target-dir ~/.claude/plugins/marketplaces/user-plugins/plugins/syntaur
131
+ syntaur install-codex-plugin \
61
132
  --target-dir ~/plugins/syntaur \
62
133
  --marketplace-path ~/.agents/plugins/marketplace.json
63
134
  ```
64
135
 
65
- Setup supports the same path overrides:
136
+ Setup accepts the same overrides:
66
137
 
67
138
  ```bash
68
- npx syntaur@latest setup \
69
- --claude \
70
- --claude-dir ~/.claude/plugins/marketplaces/user-plugins/plugins/syntaur \
71
- --codex \
72
- --codex-dir ~/plugins/syntaur \
139
+ syntaur setup \
140
+ --claude --claude-dir ~/.claude/plugins/marketplaces/user-plugins/plugins/syntaur \
141
+ --codex --codex-dir ~/plugins/syntaur \
73
142
  --codex-marketplace-path ~/.agents/plugins/marketplace.json
74
143
  ```
75
144
 
145
+ ---
146
+
76
147
  ## Common Commands
77
148
 
78
149
  ```bash
79
- npx syntaur@latest dashboard
80
- npx syntaur@latest create-mission "My First Mission"
81
- npx syntaur@latest create-assignment "Implement feature" --mission my-first-mission
82
- npx syntaur@latest doctor
83
- npx syntaur@latest uninstall
84
- npx syntaur@latest uninstall --all
150
+ syntaur dashboard
151
+ syntaur create-project "My First Project"
152
+ syntaur create-assignment "Implement feature" --project my-first-project
153
+ syntaur doctor
154
+ syntaur uninstall
155
+ syntaur uninstall --all
85
156
  ```
86
157
 
87
- ## Troubleshooting
158
+ Any of these can be prefixed with `npx syntaur@latest` if you chose not to install globally.
159
+
160
+ ---
161
+
162
+ ## Protocol Skills
163
+
164
+ The six protocol skills (`syntaur-protocol`, `grab-assignment`, `plan-assignment`, `complete-assignment`, `create-assignment`, `create-project`) are maintained in a separate agent-agnostic repo — [`prong-horn/syntaur-skills`](https://github.com/prong-horn/syntaur-skills) — and vendored into this repo as a git submodule at `vendor/syntaur-skills/`.
165
+
166
+ `syntaur install-plugin` and `syntaur install-codex-plugin` automatically copy them into `~/.claude/skills/` or `~/.codex/skills/`. Per-skill copy behavior:
167
+
168
+ - **Target absent** → skill is installed.
169
+ - **Target matches the vendored version byte-for-byte** → no-op.
170
+ - **Target differs (you edited it)** → skill is preserved and you get a warning. Pass `--force-skills` to overwrite.
171
+
172
+ To manage the skills without touching the plugin:
173
+
174
+ ```bash
175
+ syntaur install-plugin --skip-skills # install plugin, leave ~/.claude/skills alone
176
+ syntaur install-plugin --force-skills # overwrite any user-edited skills
177
+ syntaur uninstall-skills --all # remove the 6 skills from both dirs
178
+ syntaur uninstall-skills --claude # only ~/.claude/skills
179
+ syntaur uninstall-skills --codex # only ~/.codex/skills
180
+ ```
181
+
182
+ `uninstall-skills` is safe: it only removes a skill directory if its `SKILL.md` `name:` field matches one of the six protocol skills we ship. A user-authored skill that happens to share a directory name is left alone.
183
+
184
+ For non-Claude, non-Codex agents (Cursor, OpenCode, etc.), install the skills directly from the standalone repo:
185
+
186
+ ```bash
187
+ npx skills add prong-horn/syntaur-skills
188
+ ```
189
+
190
+ Installing both the `syntaur` plugin AND `npx skills add prong-horn/syntaur-skills` on the same machine is safe — the names match exactly, and per-file detection prevents double-install.
191
+
192
+ ---
193
+
194
+ ## Upgrade
195
+
196
+ | Install style | Command |
197
+ |---|---|
198
+ | Global | `npm install -g syntaur@latest` |
199
+ | npx | Nothing to do — `npx syntaur@latest ...` always consults the registry. To force a refetch: `rm -rf ~/.npm/_npx` |
200
+ | Mixed | `syntaur` (global) stays pinned; `npx syntaur@latest` uses whatever's live. The CLI will prompt to upgrade the global install when the npx version is newer. |
88
201
 
89
- If Syntaur state looks inconsistent (missing files, stale manifests, hook blocks, etc.), run `syntaur doctor` to diagnose. Pass `--json` for structured output suitable for agents; the `/doctor-syntaur` slash command in the Claude Code plugin wraps it with interactive remediation.
202
+ When you upgrade, the vendored skills under `~/.claude/skills/` and `~/.codex/skills/` are NOT automatically re-copied. Run `syntaur install-plugin` / `syntaur install-codex-plugin` again to refresh them (it'll skip any you've edited unless you pass `--force-skills`).
203
+
204
+ ---
90
205
 
91
206
  ## Uninstall
92
207
 
93
- Remove Syntaur-managed Claude and Codex integrations:
208
+ Two levels, matching the install. **Neither deletes your projects or assignments unless you explicitly pass `--all`.**
209
+
210
+ ### Standard uninstall — keep your data
211
+
212
+ ```bash
213
+ syntaur uninstall
214
+ ```
215
+
216
+ Removes:
217
+
218
+ - Claude Code plugin directory + marketplace entry
219
+ - Codex plugin directory + marketplace entry
220
+ - Pointers to those locations in `~/.syntaur/config.md`
221
+
222
+ Preserves: `~/.syntaur/` (projects, assignments, syntaur.db, playbooks, config), all skills under `~/.claude/skills/` and `~/.codex/skills/`, and the `syntaur` CLI itself.
223
+
224
+ To also remove the installed protocol skills:
225
+
226
+ ```bash
227
+ syntaur uninstall-skills --all
228
+ ```
229
+
230
+ To also uninstall the CLI:
94
231
 
95
232
  ```bash
96
- npx syntaur@latest uninstall
233
+ npm uninstall -g syntaur # if globally installed
234
+ rm -rf ~/.npm/_npx # if you want to clear npx cache too
97
235
  ```
98
236
 
99
- Remove plugins and `~/.syntaur` data:
237
+ ### Full uninstall delete everything including data
100
238
 
101
239
  ```bash
102
- npx syntaur@latest uninstall --all
240
+ syntaur uninstall --all
103
241
  ```
104
242
 
105
- If your config points missions somewhere outside `~/.syntaur`, Syntaur will warn and leave that external directory alone.
243
+ Removes everything above **plus** `~/.syntaur/` (projects, assignments, database, playbooks, config). If your config points project storage somewhere outside `~/.syntaur`, Syntaur will warn and leave that external directory alone — you're responsible for removing it yourself.
244
+
245
+ ---
246
+
247
+ ## Fresh Reinstall Without Losing Data
248
+
249
+ If you want to completely reset the installation while keeping all projects and assignments:
250
+
251
+ ```bash
252
+ # 1. Safety backup (optional but recommended)
253
+ cp -a ~/.syntaur ~/.syntaur.backup-$(date +%Y%m%d)
254
+ # or: syntaur backup (if you've configured the GitHub backup)
255
+
256
+ # 2. Remove skills from both agent dirs
257
+ syntaur uninstall-skills --all
258
+
259
+ # 3. Remove plugins + marketplace entries (but keep ~/.syntaur/)
260
+ syntaur uninstall
261
+
262
+ # 4. Remove the CLI
263
+ npm uninstall -g syntaur # global install path
264
+ rm -f ~/.syntaur/npx-install.json # lets the "install globally?" prompt re-fire
265
+
266
+ # 5. Fresh install
267
+ npm install -g syntaur@latest # or stay on npx and skip this
268
+
269
+ # 6. Reinstall plugins + skills
270
+ syntaur install-plugin
271
+ syntaur install-codex-plugin
272
+ syntaur doctor
273
+ ```
274
+
275
+ Your projects, assignments, syntaur.db, playbooks, and config.md all survive the cycle. Live agent sessions won't get the new SessionStart hook until you close and reopen them.
276
+
277
+ ---
278
+
279
+ ## Troubleshooting
280
+
281
+ Run `syntaur doctor` to diagnose inconsistent state (missing files, stale manifests, hook block, schema drift). Pass `--json` for structured output suitable for agents. The `/doctor-syntaur` slash command in the Claude Code plugin wraps it with interactive remediation.
282
+
283
+ Common issues:
284
+
285
+ - **"Error: no such column: project_slug"** — pre-v0.2.0 database. Upgrade to the latest `syntaur` (0.3.1+) — the auto-migration runs on next init.
286
+ - **Plugin installed but Claude Code doesn't see slash commands** — re-run `syntaur install-plugin` and restart Claude Code. Check `~/.claude/plugins/marketplaces/` has a `user-plugins` (or equivalent) marketplace entry.
287
+ - **Skills missing in Claude Code after plugin install** — verify `ls ~/.claude/skills/` shows the six protocol skills. If empty, re-run `syntaur install-plugin --force-skills`.
288
+ - **`npx syntaur` keeps asking to install globally** — choose "3) Never", or `export SYNTAUR_SKIP_INSTALL_PROMPT=1`.
289
+ - **Want to revert the global install to the published version** — `npm run untry` in the syntaur repo, which runs `npm unlink -g syntaur && npm install -g syntaur@latest`.
106
290
 
107
291
  ## Development
108
292
 
109
293
  ```bash
110
- npm install
294
+ git clone git@github.com:prong-horn/syntaur.git
295
+ cd syntaur
296
+ git submodule update --init --recursive # clones vendor/syntaur-skills
297
+ npm install # postinstall hook re-runs submodule init if needed
111
298
  npm run typecheck
112
299
  npm test
113
300
  npx vitest run src/__tests__/adapter-templates.test.ts