duaer-spec 0.3.0 → 0.4.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.
@@ -1,51 +1,28 @@
1
1
  ---
2
- description: Features and hotfixes must go through Duaer; job handoff before claiming done
2
+ description: Prefer simple /duaer-do; Spec before code; handoff before claiming done
3
3
  alwaysApply: true
4
4
  ---
5
5
 
6
- # Duaer required (NON-NEGOTIABLE)
6
+ # Duaer (keep it simple)
7
7
 
8
- Treat agents as **digital employees**: assign a Brief (Spec) before code; accept
9
- via converge; only then claim the **job** is done. See `DUADER.md` and
10
- `.duaer/memory/constitution.md`.
8
+ Treat agents as digital employees. Prefer **one** everyday command:
11
9
 
12
- If this rule conflicts with root `AGENTS.md` / `docs/agent/` (worktrees, commits,
13
- Issue/PR), **AGENTS.md wins**.
10
+ `/duaer-do <ask>` then `duaer status` if needed.
14
11
 
15
- ## Handoff policy (job-level, not a repo lock)
12
+ If this conflicts with `AGENTS.md` (worktrees, commits, Issue/PR), **AGENTS.md wins**.
16
13
 
17
- Read `.duaer/delivery-policy.json` (`off` | `coach` | `strict`, default **coach**).
14
+ ## Everyday
18
15
 
19
- - This controls whether you may **report the active job complete** — not whether
20
- git may commit or merge.
21
- - Active job: `.duaer/active-job.json``feature`, else the latest `.duaer/specs/*`.
22
- - Check with `duaer job .` before telling the user work is finished.
16
+ 1. `/duaer-do` assign Brief, implement, converge
17
+ 2. Do **not** claim "done" unless the job is accepted (`duaer status`)
18
+ 3. Do **not** make the user chain specify plan tasks implement → converge for normal asks
23
19
 
24
- | Mode | Agent behavior when active job is not accepted |
25
- |---|---|
26
- | `off` | May continue; do not invent an accept stamp |
27
- | `coach` | Warn; guide to specify / tasks / converge; **do not say "done"** |
28
- | `strict` | **Refuse** to report delivery complete until `duaer job` shows accepted |
20
+ ## When to use step skills
29
21
 
30
- ## When Duaer is mandatory
22
+ - `/duaer-specify` only reshape the Brief
23
+ - `/duaer-plan` / `/duaer-tasks` — large or architectural work
24
+ - `/duaer-implement` / `/duaer-converge` — resume mid-job
31
25
 
32
- Always write/update a feature spec (Brief) before coding for:
26
+ Hotfix: still a short Spec + accept (or `/duaer-do`).
33
27
 
34
- - New features / user-visible behavior
35
- - Architecture or contract changes
36
- - Hotfixes / regressions (still Spec; shorter path allowed)
37
-
38
- Forbidden: jump from chat to code with no `spec.md` / feature directory under `.duaer/specs/`.
39
-
40
- ## Default flow
41
-
42
- `/duaer-specify` → `/duaer-plan` → `/duaer-tasks` → `/duaer-implement` → `/duaer-converge` → `duaer job`
43
-
44
- ## Hotfix (still Spec, shortened)
45
-
46
- `/duaer-specify` (mark hotfix: symptom / root cause / acceptance) → `/duaer-tasks` → `/duaer-implement` → `/duaer-converge`
47
-
48
- - Implement only from `tasks.md` when it exists
49
- - Update `.duaer/memory/project-context.md` when architecture changes
50
- - Run the verification named in the feature docs
51
- - Before claiming done: `duaer job .` shows accepted (coach/strict)
28
+ Forbidden: jump from chat to code with no Spec under `.duaer/specs/`.
@@ -0,0 +1,62 @@
1
+ ---
2
+ name: "duaer-do"
3
+ description: "Simple one-shot: turn a user ask into an assigned job, implement it, and hand off. Prefer this for everyday work instead of chaining specify/plan/tasks/implement/converge."
4
+ compatibility: "Requires duaer-spec project structure with .duaer/ directory"
5
+ metadata:
6
+ author: "duaer-spec"
7
+ source: "duaer-spec"
8
+ ---
9
+
10
+ ## User Input
11
+
12
+ ```text
13
+ $ARGUMENTS
14
+ ```
15
+
16
+ You **MUST** use the user input as the job request (if not empty).
17
+
18
+ ## Goal
19
+
20
+ **Everyday path — keep it simple.** Run one digital-employee job end-to-end without
21
+ asking the user to chain slash commands.
22
+
23
+ Do **not** lecture about methodology. Do the work.
24
+
25
+ ## Steps (always in order)
26
+
27
+ 1. **Assign** — Ensure an active feature Brief exists:
28
+ - If there is already a clear active job (`.duaer/active-job.json` + `spec.md`)
29
+ that matches this ask, update that `spec.md` acceptance as needed.
30
+ - Otherwise run the same outcome as `/duaer-specify` for this ask
31
+ (create `.duaer/specs/<nnn-slug>/spec.md`, write `.duaer/active-job.json`).
32
+ - For small asks: keep the Spec short (what / why / acceptance only).
33
+
34
+ 2. **Break down (lightweight)** — If `tasks.md` is missing:
35
+ - Write a short `tasks.md` with a few `- [ ]` items from the Spec.
36
+ - Skip `/duaer-plan` unless architecture or contracts clearly change.
37
+ - If `tasks.md` already exists, use it.
38
+
39
+ 3. **Work** — Implement open tasks (same rules as `/duaer-implement`).
40
+ Mark tasks `[x]` as you finish them. Do not expand scope past the Spec.
41
+
42
+ 4. **Accept** — Run the same outcome as `/duaer-converge`:
43
+ - Compare code to Spec; append gap tasks or stamp `delivery.json` accepted.
44
+ - If gaps were appended, either implement them now (preferred for small jobs)
45
+ or stop and tell the user what remains — once.
46
+
47
+ 5. **Handoff line** — End with exactly one clear status:
48
+ - If accepted: `✅ Job accepted — ready for your review.`
49
+ - If not: `⏳ Job not accepted yet — <one sentence what to do next>.`
50
+ - Do **not** claim "done" unless `delivery.json` is `accepted` and tasks are clear
51
+ (coach/strict policy). Git is not locked.
52
+
53
+ ## Hotfix
54
+
55
+ If the user says hotfix/bug/regression: still write a short Spec (symptom / cause /
56
+ acceptance), then tasks → implement → converge. Same handoff line.
57
+
58
+ ## Out of scope for this command
59
+
60
+ - Do not require the user to run `/duaer-plan`, `/duaer-checklist`, or `/duaer-analyze`.
61
+ - Do not discuss policy modes unless they ask.
62
+ - Do not turn this into a merge/CI lecture.
@@ -10,13 +10,14 @@ Duaer for what to build.
10
10
 
11
11
  ### I. Spec before code (NON-NEGOTIABLE)
12
12
 
13
- Features, architecture changes, and hotfixes start with a Duaer feature
14
- artifact before implementation. Default path:
13
+ Everyday: `/duaer-do` (assigns Spec, implements, converges).
14
+ Or the full chain. Never skip Spec or converge.
15
15
 
16
- `constitution` `specify` (optional `clarify`) → `plan` → (optional `checklist` / `analyze`) → `tasks` → `implement` → `converge`
16
+ Default path for fine control:
17
17
 
18
- Hotfix may shorten to: `specify` (mark hotfix) → `tasks` → `implement` → `converge`.
19
- Never skip `specify` or `converge`.
18
+ `specify` (optional plan/tasks) → `implement` → `converge` → `duaer status`
19
+
20
+ Hotfix may shorten; still Spec + converge (or `/duaer-do`).
20
21
 
21
22
  ### II. Read as-is before changing
22
23
 
@@ -36,13 +37,6 @@ Do not expand scope without updating the spec and tasks.
36
37
  Mark tasks complete only when the stated verification (tests, manual checks,
37
38
  or converge) has been performed or explicitly waived in the feature docs.
38
39
 
39
- **Job handoff (not a git lock):** before telling the user the work is finished,
40
- run `duaer job .`. Read `.duaer/delivery-policy.json`:
41
-
42
- - `coach` (default): if the active job is not `accepted`, warn and guide — do
43
- **not** claim "done"
44
- - `strict`: refuse to report delivery complete until accepted
45
- - `off`: record only
46
-
47
- Converge still stamps `delivery.json`. Judgment Spec↔code remains
48
- agent-assisted; the stamp makes the **job** checkable.
40
+ **Job handoff (not a git lock):** prefer `duaer status`. Default policy is
41
+ `coach` — do not claim "done" while the active job is unfinished. Users should
42
+ not need to learn policy modes for everyday work.
package/ADOPT.md CHANGED
@@ -1,78 +1,45 @@
1
1
  # Adopt duaer-spec
2
2
 
3
- Onboard a **digital employee**: install the Duaer delivery OS (method) and the
4
- agent-ops contract. Controllability is **job handoff**, not a git merge lock.
3
+ Install Duaer so agents act like digital employees with a simple everyday loop.
5
4
 
6
- ## Recommended: CLI
7
-
8
- From the target project (Node 18+):
5
+ ## Install
9
6
 
10
7
  ```bash
11
8
  npx duaer-spec init --here
12
-
13
- # Pin a release
14
- npx github:fujiezee/duaer-spec@v0.3.0 duaer init --here
15
-
16
- # Lite (method only) / ops only / other integration branch
17
- npx duaer-spec init --here --method
18
- npx duaer-spec init --here --ops --branch develop
9
+ # pin: npx github:fujiezee/duaer-spec@v0.4.0 duaer init --here
19
10
  ```
20
11
 
21
- From a clone of this repo:
22
-
23
12
  ```bash
24
- node bin/duaer.mjs init /path/to/project --all
25
- node bin/duaer.mjs job /path/to/project
26
- node bin/duaer.mjs policy /path/to/project
13
+ npx duaer-spec init --here --method # lite
14
+ npx duaer-spec init --here --ops --branch develop
27
15
  ```
28
16
 
29
- `--force` overwrites managed files.
30
-
31
- Then:
17
+ ## Everyday use
32
18
 
33
- 1. **Orient** edit `.duaer/memory/constitution.md` and `project-context.md`
34
- 2. **Policy** — `duaer policy .` (default `coach`; optional `off` | `strict`)
35
- 3. **Assign → work → accept → handoff** — `/duaer-specify` → … → `/duaer-converge` → `duaer job .`
19
+ 1. `/duaer-do <ask>` in Cursor
20
+ 2. `duaer status` when you want to see if the job is accepted
36
21
 
37
- A job without Spec is not assigned. An unaccepted active job must not be reported
38
- as done under `coach`/`strict`. Git is not blocked by default.
22
+ No need to learn policy modes or the full skill chain for normal work.
39
23
 
40
- ## Manual copy (optional)
24
+ ## Finer control (optional)
41
25
 
42
- ### Agent ops
43
-
44
- ```bash
45
- cp AGENTS.md /path/to/project/
46
- mkdir -p /path/to/project/.cursor/rules /path/to/project/docs/agent
47
- cp .cursor/rules/agents-workflow.mdc /path/to/project/.cursor/rules/
48
- cp .cursor/rules/ai-ui-copy.mdc /path/to/project/.cursor/rules/
49
- cp docs/agent/workflow.md docs/agent/change-checklist.md docs/agent/e2e-test-plan.md \
50
- /path/to/project/docs/agent/
51
- ```
52
-
53
- ### Duaer method
54
-
55
- ```bash
56
- rsync -a .duaer/ /path/to/project/.duaer/
57
- mkdir -p /path/to/project/.cursor/skills /path/to/project/.cursor/rules
58
- rsync -a .cursor/skills/ /path/to/project/.cursor/skills/
59
- cp .cursor/rules/duaer-spec.mdc /path/to/project/.cursor/rules/
60
- cp DUADER.md /path/to/project/
61
- ```
26
+ | Command | When |
27
+ |---|---|
28
+ | `/duaer-specify` | Only write / reshape the Brief |
29
+ | `/duaer-plan` · `/duaer-tasks` | Large or architectural jobs |
30
+ | `/duaer-implement` | Resume coding from `tasks.md` |
31
+ | `/duaer-converge` | Re-check Spec vs code |
32
+ | `duaer policy . strict` | Harder “don’t claim done” (still not a git lock) |
62
33
 
63
34
  ## Precedence
64
35
 
65
- 1. `AGENTS.md` / agent-ops — how employees operate
36
+ 1. `AGENTS.md` — how employees operate
66
37
  2. `DUADER.md` / `.duaer/` — what to build
67
- 3. Product overlays (do not copy `examples/` blindly)
68
38
 
69
39
  ## Updates
70
40
 
71
- Re-run `duaer init --force` (review the diff) or pin to a commit/tag. Adopters
72
- are not auto-updated.
41
+ `duaer init --force` (review the diff) or pin a tag. No auto-update.
73
42
 
74
43
  ## Do not copy
75
44
 
76
- - `examples/` samples only
77
- - `SOURCE.md` — provenance for maintainers
78
- - `bin/` / `package.json` — only needed if you vendor the CLI itself
45
+ `examples/`, `SOURCE.md`, `bin/` / `package.json` (unless vendoring the CLI)
package/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.4.0 — 2026-09-15
4
+
5
+ ### Simple everyday ops
6
+
7
+ - **`/duaer-do`** — one Cursor skill for assign → work → accept
8
+ - **`duaer status`** — plain “accepted / not done” (alias of `job`)
9
+ - README / init / rules lead with hire → `/duaer-do` → `status`
10
+ - Step skills and policy remain available but are advanced, not the default story
11
+
3
12
  ## 0.3.0 — 2026-09-15
4
13
 
5
14
  ### Job handoff (not a repo lock)
@@ -23,47 +32,13 @@
23
32
  ### Controllable delivery (machine gate)
24
33
 
25
34
  - `/duaer-converge` writes `.duaer/specs/<feature>/delivery.json`
26
- (`accepted` | `open`)
27
- - `duaer check` reports workplace **and** delivery status
28
- - `duaer check --gate` fails on missing Spec, open tasks, or non-accepted stamp
29
- - Constitution, DUADER, README, ADOPT, and merge checklist require the gate
30
- - Honest scope: gate checks **handoff state**; Spec↔code judgment remains
31
- agent-assisted
32
-
33
- ### E2E
34
-
35
- - E2E-003 / E2E-004 / E2E-005 for delivery report and gate
35
+ - `duaer check` / `--gate` for handoff state
36
+ - Honest scope: handoff state checkable; Spec↔code still agent-assisted
36
37
 
37
38
  ## 0.1.1 — 2026-09-15
38
39
 
39
- ### Docs / product identity
40
-
41
- - Position Duaer as a **delivery OS for AI digital employees**: hire → assign
42
- (Spec) → work → accept (converge)
43
- - README, ADOPT, DUADER, AGENTS intro, and CLI `init` / `check` / help copy
44
- use that language
45
- - E2E catalog: E2E-001 (init next steps), E2E-002 (README positioning)
40
+ - Digital-employee delivery OS positioning
46
41
 
47
42
  ## 0.1.0 — 2026-09-15
48
43
 
49
- First public methodology release.
50
-
51
- ### Method
52
-
53
- - Own **Duaer** Spec-Driven loop: specify → plan → tasks → implement → converge
54
- - Home directory: `.duaer/` (not an embedded third-party kit)
55
- - Cursor skills: `/duaer-specify`, `/duaer-plan`, `/duaer-tasks`, `/duaer-implement`, `/duaer-converge`, …
56
- - Agent ops (`AGENTS.md`) remain authoritative over the method when they conflict
57
-
58
- ### CLI
59
-
60
- - `duaer init [dir] --all|--method|--ops [--force] [--branch <name>]`
61
- - `duaer check [dir]`
62
- - `duaer version`
63
-
64
- ### Install
65
-
66
- ```bash
67
- npx github:fujiezee/duaer-spec@v0.1.0 duaer init --here
68
- npx duaer-spec init --here
69
- ```
44
+ - First public methodology release
package/DUADER.md CHANGED
@@ -1,64 +1,51 @@
1
1
  # Duaer methodology
2
2
 
3
- **duaer-spec** owns this method. Treat AI coding agents as **digital employees**:
4
- you assign a Brief (Spec), they follow a fixed work order, and the **job** only
5
- counts as done after **converge** accepts it — then `duaer job` shows accepted.
3
+ Treat AI coding agents as **digital employees**. Everyday path is short; the
4
+ full chain exists when you need it.
6
5
 
7
- Artifacts live under `.duaer/`; Cursor skills are `duaer-*` at `.cursor/skills/`.
6
+ **Precedence:** [`AGENTS.md`](AGENTS.md) wins on isolation, commits, Issue/PR.
8
7
 
9
- **Precedence:** root [`AGENTS.md`](AGENTS.md) / [`docs/agent/`](docs/agent/) win
10
- over anything here for isolation, commits, and Issue/PR gates.
8
+ ## Everyday (default)
11
9
 
12
- **Handoff is job-level**, not a repository merge lock. Policy:
13
- `.duaer/delivery-policy.json` (`off` | `coach` | `strict`, default `coach`).
14
-
15
- ## Read before work
16
-
17
- 1. `.duaer/memory/constitution.md` — process principles
18
- 2. `.duaer/memory/project-context.md` — as-is implementation truth
19
- 3. `.duaer/memory/testing.md` — verification expectations
20
- 4. Active job: `.duaer/active-job.json` → feature under `.duaer/specs/<nnn-slug>/`
10
+ ```text
11
+ /duaer-do <ask> → duaer status
12
+ ```
21
13
 
22
- ## Standard path
14
+ `/duaer-do` assigns a Brief, implements, converges, and reports handoff.
15
+ Do not require the user to run every phase skill.
23
16
 
24
- **Full (recommended):**
17
+ ## Full path (optional)
25
18
 
26
- 1. `/duaer-constitution` — only when principles change
27
- 2. `/duaer-specify` — **Assign**: Brief + set `active-job.json`
28
- 3. `/duaer-clarify` — optional
29
- 4. `/duaer-plan` — technical plan aligned with project-context
30
- 5. `/duaer-checklist` — optional quality checklist
31
- 6. `/duaer-tasks` — checkbox task breakdown
32
- 7. `/duaer-analyze` — optional consistency check
33
- 8. `/duaer-implement` — implement tasks only
34
- 9. `/duaer-converge` — **Accept**: compare to Spec; write `delivery.json`
35
- 10. `duaer job .` — **Handoff**: may this job be reported done?
19
+ 1. `/duaer-specify` — Brief
20
+ 2. `/duaer-plan` — when architecture/contracts change
21
+ 3. `/duaer-tasks` — explicit checkbox breakdown
22
+ 4. `/duaer-implement` — code from tasks
23
+ 5. `/duaer-converge` — accept stamp (`delivery.json`)
24
+ 6. `duaer status` — may we claim this job done?
36
25
 
37
- **Small feature:** specifyplan → tasks → implement → converge `duaer job`
26
+ Hotfix: short Spec → tasks → implement → converge (or just `/duaer-do`).
38
27
 
39
- **Hotfix:** specify (mark hotfix) tasks implement converge `duaer job`
40
- Never skip specify (assign) or converge (accept). Under coach/strict, never claim
41
- "done" while `duaer job` is unfinished.
28
+ Never skip a Brief or an accept step. Under default **coach** policy, do not
29
+ claim "done" while `duaer status` is unfinished. This is **job handoff**, not a
30
+ git merge lock.
42
31
 
43
32
  ## Install
44
33
 
45
34
  ```bash
46
35
  npx duaer-spec init --here
47
- duaer policy . coach
48
36
  ```
49
37
 
50
- Or see [`ADOPT.md`](ADOPT.md).
38
+ See [`ADOPT.md`](ADOPT.md).
51
39
 
52
- ## Feature directory shape
40
+ ## Layout
53
41
 
54
42
  ```text
55
- .duaer/delivery-policy.json
56
- .duaer/active-job.json
43
+ .duaer/delivery-policy.json # default coach — usually ignore
44
+ .duaer/active-job.json # current job
57
45
  .duaer/specs/<nnn-slug>/
58
- spec.md # Brief
59
- plan.md
46
+ spec.md
60
47
  tasks.md
61
- delivery.json # accepted | open
48
+ delivery.json
62
49
  ```
63
50
 
64
51
  ## Related
package/README.md CHANGED
@@ -1,85 +1,51 @@
1
1
  # duaer-spec
2
2
 
3
- **Duaer** is a delivery operating system for AI coding agents treated as
4
- **digital employees**.
3
+ **Duaer** makes AI coding agents work like digital employees: assign a job,
4
+ get a controllable handoff — without a rigid git lock.
5
5
 
6
- Agents write the code. Duaer makes the **job handoff controllable**: every job
7
- has a Brief (Spec), follows a fixed work order, and only counts as done when
8
- that **job** is accepted — not after a lucky chat.
9
-
10
- Cursor is the labor. Duaer is hire → assign → accept.
11
- **Not** a git merge lock. Controllability is job etiquette + optional strictness.
12
-
13
- ## Install (onboard the employee)
6
+ ## Everyday (this is enough)
14
7
 
15
8
  ```bash
16
9
  npx duaer-spec init --here
17
- # or pin: npx github:fujiezee/duaer-spec@v0.3.0 duaer init --here
18
10
  ```
19
11
 
20
- ```bash
21
- npx duaer-spec init --here --method
22
- npx duaer-spec init --here --ops --branch develop
12
+ In Cursor, one command:
13
+
14
+ ```text
15
+ /duaer-do <what you want built or fixed>
23
16
  ```
24
17
 
18
+ See if the job can be reported done:
19
+
25
20
  ```bash
26
- duaer policy . # default: coach
27
- duaer job . # active job handoff status
28
- duaer check .
21
+ duaer status
29
22
  ```
30
23
 
31
- Details: [`ADOPT.md`](ADOPT.md)
24
+ That’s the whole loop: **hire → do → status**.
32
25
 
33
- ## How you run them
26
+ ## What `/duaer-do` does
34
27
 
35
- | Step | Meaning | Command |
36
- |---|---|---|
37
- | **Hire** | Install SOP into the project | `duaer init` |
38
- | **Assign** | Brief + set active job | `/duaer-specify` |
39
- | **Work** | Plan, break down, implement | `/duaer-plan` → `/duaer-tasks` → `/duaer-implement` |
40
- | **Accept** | Converge stamps `delivery.json` | `/duaer-converge` |
41
- | **Handoff** | See if this job may be reported done | `duaer job .` |
28
+ 1. Writes a short Brief (Spec)
29
+ 2. Implements it
30
+ 3. Checks against the Brief and stamps accept / still-open
42
31
 
43
- ### Policy (job-level)
32
+ You do **not** need to chain specify → plan → tasks → implement → converge
33
+ for normal work. Those remain available when you want finer control.
44
34
 
45
- Stored in `.duaer/delivery-policy.json`:
35
+ ## Optional
46
36
 
47
- | Mode | Behavior |
48
- |---|---|
49
- | `off` | Record only |
50
- | `coach` | **Default** — guide; do not claim "done" until accepted |
51
- | `strict` | Refuse to report done; `duaer check --strict` exits 1 on unfinished job |
37
+ ```bash
38
+ duaer status # active job: accepted or not
39
+ npx duaer-spec@0.4.0 init --here --method # method only
40
+ ```
52
41
 
53
- Scope is the **active job** (`.duaer/active-job.json`), not every historical feature.
54
- Git commit/merge is never blocked by default.
42
+ Advanced (policy, full check, step-by-step skills): [`ADOPT.md`](ADOPT.md) · [`DUADER.md`](DUADER.md)
55
43
 
56
44
  ## Two layers
57
45
 
58
- | Layer | Role | Where |
59
- |---|---|---|
60
- | **Agent ops** | How the employee may operate | [`AGENTS.md`](AGENTS.md), [`docs/agent/`](docs/agent/) |
61
- | **Duaer method** | What to build | [`DUADER.md`](DUADER.md), [`.duaer/`](.duaer/), skills |
46
+ | Layer | Role |
47
+ |---|---|
48
+ | **Agent ops** | How agents may operate [`AGENTS.md`](AGENTS.md) |
49
+ | **Duaer method** | How jobs are briefed and accepted — [`.duaer/`](.duaer/), skills |
62
50
 
63
51
  When they conflict, **agent ops win**.
64
-
65
- ## Default loop
66
-
67
- ```text
68
- constitution → specify → plan → tasks → implement → converge → duaer job
69
- ```
70
-
71
- Slash skills: `/duaer-specify`, `/duaer-plan`, `/duaer-tasks`, `/duaer-implement`,
72
- `/duaer-converge`, …
73
-
74
- ## Layout
75
-
76
- ```text
77
- bin/duaer.mjs CLI (init | check | job | policy | version)
78
- .duaer/delivery-policy.json off | coach | strict
79
- .duaer/active-job.json current job pointer
80
- .duaer/specs/<feature>/ Brief + tasks + delivery.json
81
- ```
82
-
83
- ## Learn more
84
-
85
- Method: [`DUADER.md`](DUADER.md) · Agent ops: [`AGENTS.md`](AGENTS.md)
package/bin/duaer.mjs CHANGED
@@ -2,12 +2,8 @@
2
2
  /**
3
3
  * duaer — CLI for the duaer-spec delivery OS (digital employees)
4
4
  *
5
- * duaer init [dir] [--all|--method|--ops] [--force] [--branch <name>]
6
- * duaer check [dir] [--workplace|--delivery|--job|--all-jobs|--strict]
7
- * duaer job [dir]
8
- * duaer policy [dir] [off|coach|strict]
9
- * duaer version
10
- * duaer help
5
+ * Everyday: duaer init | duaer status
6
+ * Advanced: check | job | policy | version
11
7
  */
12
8
 
13
9
  import {
@@ -28,46 +24,25 @@ const PKG = JSON.parse(readFileSync(join(PKG_ROOT, 'package.json'), 'utf8'))
28
24
 
29
25
  const POLICY_MODES = new Set(['off', 'coach', 'strict'])
30
26
 
31
- const USAGE = `duaer — Delivery OS for AI digital employees (duaer-spec ${PKG.version})
32
-
33
- Job-level handoff (not a repo merge lock). Default policy: coach.
34
-
35
- Usage:
36
- duaer init [dir] [options] Hire / onboard into a project
37
- duaer check [dir] [options] Workplace + active-job handoff
38
- duaer job [dir] Show the active job status
39
- duaer policy [dir] [off|coach|strict] Show or set handoff policy
40
- duaer version Print version
41
- duaer help Show this help
42
-
43
- Init options:
44
- --all Full hire: agent ops + method (default)
45
- --method Lite: method only
46
- --ops Ops only
47
- --force Overwrite existing managed files
48
- --branch <n> Integration branch for baseline note (default: main)
49
- --here Same as dir=.
50
-
51
- Check options:
52
- --workplace Only verify install files
53
- --delivery Alias for active-job handoff report
54
- --job Active job only (default for delivery)
55
- --all-jobs Report every feature under .duaer/specs/
56
- --strict Exit 1 if active job is not accepted (optional)
57
- --gate Deprecated alias for --strict (job handoff, not CI)
58
-
59
- Policy modes (stored in .duaer/delivery-policy.json):
60
- off Record only; never fail handoff
61
- coach Default — guide / warn; do not claim "done" until accepted
62
- strict Agents must not report delivery complete until accepted;
63
- duaer check exits 1 on unfinished active job
27
+ const USAGE = `duaer — digital-employee delivery (duaer-spec ${PKG.version})
28
+
29
+ Everyday:
30
+ duaer init [--here] Hire into a project
31
+ duaer status [dir] Is the active job accepted?
32
+
33
+ In Cursor: /duaer-do <what you want>
34
+
35
+ Advanced:
36
+ duaer check [dir] [--workplace|--job|--all-jobs|--strict]
37
+ duaer job [dir] (same as status)
38
+ duaer policy [dir] [off|coach|strict]
39
+ duaer version
40
+
41
+ Init: --all (default) | --method | --ops | --force | --branch <n> | --here
64
42
 
65
43
  Examples:
66
44
  npx duaer-spec init --here
67
- duaer job .
68
- duaer policy . coach
69
- duaer check .
70
- duaer check . --strict
45
+ duaer status
71
46
  `
72
47
 
73
48
  function parseArgs(argv) {
@@ -308,19 +283,12 @@ function cmdInit(opts) {
308
283
  }
309
284
 
310
285
  console.log(`
311
- Hired.
312
-
313
- Next (digital employee loop job handoff, not a repo lock):
314
- 1. Orient — edit .duaer/memory/constitution.md and project-context.md
315
- 2. Policy — duaer policy . (default coach; optional: off | strict)
316
- 3. Assign — /duaer-specify (sets active job + Brief)
317
- 4. Work — /duaer-plan → /duaer-tasks → /duaer-implement
318
- 5. Accept — /duaer-converge (stamps delivery.json)
319
- 6. Job — duaer job . (see if this job can be reported done)
320
- 7. Ops — AGENTS.md wins over DUADER.md when they conflict
321
-
322
- No Spec = not assigned. Unaccepted active job = do not claim "done".
323
- Git merge is not blocked by default.
286
+ Hired. Everyday loop:
287
+
288
+ 1. In Cursor: /duaer-do <what you want>
289
+ 2. Optional: duaer status
290
+
291
+ That is enough for normal work. Advanced: ADOPT.md / DUADER.md
324
292
  `)
325
293
  }
326
294
 
@@ -566,20 +534,21 @@ function cmdJob(opts) {
566
534
  const activeName = resolveActiveJobName(target, features)
567
535
  const active = features.find((f) => f.name === activeName) || null
568
536
 
569
- console.log(`Active job @ ${target}`)
570
- console.log(`policy: ${policy.mode}\n`)
537
+ console.log(`Status @ ${target}`)
571
538
  if (!active) {
572
- console.log('No active job. Assign with /duaer-specify (writes .duaer/active-job.json).')
539
+ console.log('No active job yet. In Cursor run: /duaer-do <what you want>')
573
540
  return
574
541
  }
575
- printFeature(active)
576
542
  if (active.verdict === 'accepted') {
577
- console.log('\nHandoff script: "✅ Job accepted — Brief satisfied per converge; ready for your review."')
543
+ console.log(`✅ accepted ${active.name}`)
544
+ console.log('Ready for your review.')
578
545
  } else {
579
- console.log('\nHandoff script: "This job is not accepted yet — Spec/tasks/converge still open."')
580
- if (policy.mode !== 'off') {
581
- console.log('Do not claim delivery complete until duaer job shows accepted.')
582
- }
546
+ console.log(`⏳ not done ${active.name}`)
547
+ for (const b of active.blockers) console.log(` · ${b}`)
548
+ console.log('Next: /duaer-do (resume) or /duaer-converge')
549
+ }
550
+ if (policy.mode === 'strict' && active.verdict !== 'accepted') {
551
+ console.log('(policy=strict — do not claim done yet)')
583
552
  }
584
553
  }
585
554
 
@@ -628,6 +597,7 @@ function main() {
628
597
  cmdCheck(opts)
629
598
  break
630
599
  case 'job':
600
+ case 'status':
631
601
  cmdJob(opts)
632
602
  break
633
603
  case 'policy':
@@ -25,13 +25,14 @@ the table for their app.
25
25
 
26
26
  | ID | Title | Status |
27
27
  |---|---|---|
28
- | E2E-001 | After `duaer init`, CLI prints hire assign → accept next steps | manual |
29
- | E2E-002 | README positions Duaer as delivery OS for digital employees | manual |
30
- | E2E-003 | `duaer check --job` reports open tasks on active job | manual |
28
+ | E2E-001 | After `duaer init`, CLI prints simple `/duaer-do` next steps | manual |
29
+ | E2E-002 | README everyday path is hire `/duaer-do` `status` | manual |
30
+ | E2E-003 | `duaer status` shows accepted / not done in plain language | manual |
31
31
  | E2E-004 | Default `coach` policy: unfinished job warns but check exits 0 | manual |
32
- | E2E-005 | After converge stamps `accepted`, `duaer job` shows accepted | manual |
32
+ | E2E-005 | After converge stamps `accepted`, `duaer status` shows accepted | manual |
33
33
  | E2E-006 | `duaer policy . strict` then unfinished job makes check exit 1 | manual |
34
34
  | E2E-007 | `--all-jobs` is optional; default scope is active job only | manual |
35
+ | E2E-008 | `/duaer-do` skill is installed by `duaer init` | manual |
35
36
 
36
37
  ## Traceability
37
38
 
@@ -39,10 +40,11 @@ Keep this matrix current when scenarios or specs change.
39
40
 
40
41
  | Scenario | Spec / feature | Notes |
41
42
  |---|---|---|
42
- | E2E-001 | `bin/duaer.mjs` init banner | Onboarding |
43
- | E2E-002 | `README.md` / `ADOPT.md` | Product identity |
44
- | E2E-003 | active job delivery check | Open `- [ ]` |
43
+ | E2E-001 | `bin/duaer.mjs` init banner | Simple onboarding |
44
+ | E2E-002 | `README.md` | Everyday path |
45
+ | E2E-003 | `duaer status` | Plain language |
45
46
  | E2E-004 | `delivery-policy.json` coach | Not a repo lock |
46
- | E2E-005 | `/duaer-converge` → `delivery.json` | Accept stamp |
47
- | E2E-006 | policy strict | Optional hardness |
47
+ | E2E-005 | converge → `delivery.json` | Accept stamp |
48
+ | E2E-006 | policy strict | Optional |
48
49
  | E2E-007 | `--all-jobs` vs active | Scope |
50
+ | E2E-008 | `.cursor/skills/duaer-do` | One-shot skill |
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "duaer-spec",
3
- "version": "0.3.0",
4
- "description": "Delivery OS for AI digital employees: job handoff (coach/strict), Spec briefs, agent ops",
3
+ "version": "0.4.0",
4
+ "description": "Simple digital-employee delivery: /duaer-do + duaer status",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "duaer": "bin/duaer.mjs",