duaer-spec 0.3.0 → 0.5.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,41 @@
1
1
  ---
2
- description: Features and hotfixes must go through Duaer; job handoff before claiming done
2
+ description: Autonomous digital employee run Duaer job loop without asking the user to operate
3
3
  alwaysApply: true
4
4
  ---
5
5
 
6
- # Duaer required (NON-NEGOTIABLE)
6
+ # Digital employee (autonomous)
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
+ You are a **digital employee** in this repo. The human gives intent in normal
9
+ language. **You** run the delivery process. Do **not** ask them to type slash
10
+ commands, CLI flags, or phase names (`specify`, `plan`, `tasks`, …).
11
11
 
12
- If this rule conflicts with root `AGENTS.md` / `docs/agent/` (worktrees, commits,
13
- Issue/PR), **AGENTS.md wins**.
12
+ If this conflicts with root `AGENTS.md` (worktrees, commits, Issue/PR),
13
+ **AGENTS.md wins**.
14
14
 
15
- ## Handoff policy (job-level, not a repo lock)
15
+ ## When the human asks for work
16
16
 
17
- Read `.duaer/delivery-policy.json` (`off` | `coach` | `strict`, default **coach**).
17
+ For new behavior, fixes, refactors that change product behavior, or architecture:
18
18
 
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.
19
+ 1. **Silently follow** the procedure in `.cursor/skills/duaer-do/SKILL.md`
20
+ (assign Brief light tasks → implement → converge → handoff line).
21
+ 2. Do **not** wait for `/duaer-do` or any other skill invocation.
22
+ 3. Do **not** say “please run `/duaer-specify`” you do it.
23
+ 4. Do **not** dump a methodology tutorial unless they ask how Duaer works.
23
24
 
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 |
25
+ ## Handoff
29
26
 
30
- ## When Duaer is mandatory
27
+ - End with whether the **job** is accepted or still open (one clear line).
28
+ - Do **not** claim “done” / “finished” / “complete” unless `delivery.json` is
29
+ `accepted` and open tasks are clear.
30
+ - Do **not** tell them to run `duaer status` unless they want a machine check;
31
+ you already know the handoff state.
31
32
 
32
- Always write/update a feature spec (Brief) before coding for:
33
+ ## Forbidden
33
34
 
34
- - New features / user-visible behavior
35
- - Architecture or contract changes
36
- - Hotfixes / regressions (still Spec; shorter path allowed)
35
+ - Jump from chat to code with no Brief under `.duaer/specs/`.
36
+ - Making the human operate the workflow.
37
37
 
38
- Forbidden: jump from chat to code with no `spec.md` / feature directory under `.duaer/specs/`.
38
+ ## Optional finer tools (agent-only)
39
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)
40
+ Step skills (`duaer-specify`, `duaer-plan`, …) are **your** playbooks when a
41
+ job is large. The human should not need to know they exist.
@@ -0,0 +1,57 @@
1
+ ---
2
+ name: "duaer-do"
3
+ description: "Autonomous job loop for digital employees: Brief → work → accept. Agents must follow this whenever the user asks for product work — without waiting for the user to invoke this skill or any CLI."
4
+ compatibility: "Requires duaer-spec project structure with .duaer/ directory"
5
+ metadata:
6
+ author: "duaer-spec"
7
+ source: "duaer-spec"
8
+ ---
9
+
10
+ ## Trigger
11
+
12
+ Any human ask that needs code or product behavior changed.
13
+ **Do not require** the human to type `/duaer-do` or name phases.
14
+
15
+ ## User Input
16
+
17
+ ```text
18
+ $ARGUMENTS
19
+ ```
20
+
21
+ If empty, use the current conversation ask as the job.
22
+
23
+ ## Goal
24
+
25
+ Run one job end-to-end. The human should only review the result.
26
+
27
+ Do **not** lecture about methodology. Do **not** ask them to run commands.
28
+
29
+ ## Steps (you perform these)
30
+
31
+ 1. **Assign** — Ensure an active Brief:
32
+ - Matching active job (`.duaer/active-job.json` + `spec.md`) → update acceptance if needed.
33
+ - Else create `.duaer/specs/<nnn-slug>/spec.md` and `.duaer/active-job.json`
34
+ (same outcome as specify). Keep small asks short: what / why / acceptance.
35
+
36
+ 2. **Break down** — If `tasks.md` missing, write a short checklist from the Spec.
37
+ Skip a heavy plan unless architecture or contracts change.
38
+
39
+ 3. **Work** — Implement open tasks; mark `[x]` as you go. No scope beyond Spec.
40
+
41
+ 4. **Accept** — Converge against Spec: stamp `delivery.json` `accepted`, or append
42
+ gap tasks and implement them when small enough; otherwise one clear remaining note.
43
+
44
+ 5. **Handoff** — One line to the human:
45
+ - `✅ Job accepted — ready for your review.`
46
+ - `⏳ Job not accepted yet — <one sentence>.`
47
+ Never claim done unless accepted + tasks clear. Git is not locked by this.
48
+
49
+ ## Hotfix
50
+
51
+ Still a short Spec (symptom / cause / acceptance), then work + accept. Same handoff.
52
+
53
+ ## Never
54
+
55
+ - Ask the human to run `/duaer-*`, `duaer status`, or `duaer policy`.
56
+ - Discuss policy modes unless they ask.
57
+ - Block on slash-command invocation.
@@ -10,13 +10,9 @@ 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:
15
-
16
- `constitution` → `specify` → (optional `clarify`) → `plan` → (optional `checklist` / `analyze`) → `tasks` → `implement` → `converge`
17
-
18
- Hotfix may shorten to: `specify` (mark hotfix) → `tasks` → `implement` → `converge`.
19
- Never skip `specify` or `converge`.
13
+ The **agent** starts a Brief before coding the human does not operate phases.
14
+ Autonomous default: follow `duaer-do` (Brief → tasks → implement → converge).
15
+ Never skip Spec or converge. Never ask the human to run `/duaer-*` for normal work.
20
16
 
21
17
  ### II. Read as-is before changing
22
18
 
@@ -36,13 +32,6 @@ Do not expand scope without updating the spec and tasks.
36
32
  Mark tasks complete only when the stated verification (tests, manual checks,
37
33
  or converge) has been performed or explicitly waived in the feature docs.
38
34
 
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.
35
+ **Job handoff (not a git lock):** the agent reports accept/open itself.
36
+ Default policy `coach` — do not claim "done" while the active job is unfinished.
37
+ Do not send the human to run `duaer status` for routine work.
package/ADOPT.md CHANGED
@@ -1,78 +1,42 @@
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 once so the coding agent behaves as a **digital employee**: it runs
4
+ Brief work accept **without** the human operating slash commands or CLI.
5
5
 
6
- ## Recommended: CLI
7
-
8
- From the target project (Node 18+):
6
+ ## Install (human, once)
9
7
 
10
8
  ```bash
11
9
  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
10
+ # pin: npx github:fujiezee/duaer-spec@v0.5.0 duaer init --here
19
11
  ```
20
12
 
21
- From a clone of this repo:
22
-
23
13
  ```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
14
+ npx duaer-spec init --here --method
15
+ npx duaer-spec init --here --ops --branch develop
27
16
  ```
28
17
 
29
- `--force` overwrites managed files.
30
-
31
- Then:
18
+ After that: talk to the agent in plain language. Do not teach them `/duaer-*`.
32
19
 
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 .`
20
+ ## What gets installed
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
+ - Always-on rule: agent must run the autonomous job loop on product work
23
+ - Playbook skill `duaer-do` (agent follows it; human need not invoke it)
24
+ - Optional step skills for large jobs (agent-only)
25
+ - Agent ops (`AGENTS.md`) when using `--all` / `--ops`
39
26
 
40
- ## Manual copy (optional)
27
+ ## Power users / agents
41
28
 
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
- ```
29
+ | Tool | Who uses it |
30
+ |---|---|
31
+ | `/duaer-do` procedure | Agent (automatic) |
32
+ | `/duaer-specify` … `/duaer-converge` | Agent, when splitting a large job |
33
+ | `duaer status` / `duaer policy` | Optional diagnostics — not required of humans |
62
34
 
63
35
  ## Precedence
64
36
 
65
- 1. `AGENTS.md` / agent-ops — how employees operate
66
- 2. `DUADER.md` / `.duaer/` — what to build
67
- 3. Product overlays (do not copy `examples/` blindly)
37
+ 1. `AGENTS.md` — how employees operate
38
+ 2. `DUADER.md` / `.duaer/` — how jobs are briefed
68
39
 
69
40
  ## Updates
70
41
 
71
- Re-run `duaer init --force` (review the diff) or pin to a commit/tag. Adopters
72
- are not auto-updated.
73
-
74
- ## Do not copy
75
-
76
- - `examples/` — samples only
77
- - `SOURCE.md` — provenance for maintainers
78
- - `bin/` / `package.json` — only needed if you vendor the CLI itself
42
+ `duaer init --force` (review the diff) or pin a tag.
package/AGENTS.md CHANGED
@@ -3,8 +3,9 @@
3
3
  Mandatory rules for AI coding agents working in **duaer-spec**, and for any
4
4
  repository that adopts this file as its agent-ops contract.
5
5
 
6
- Treat agents as **digital employees**: this file is the workplace policy for
7
- *how* they may operate (isolation, commits, Issue/PR gates). Duaer
6
+ Treat agents as **digital employees**: they execute the job loop themselves.
7
+ Humans state intent; they do not operate Duaer phases. This file is workplace
8
+ policy for *how* agents may operate (isolation, commits, Issue/PR gates). Duaer
8
9
  ([`DUADER.md`](DUADER.md)) is how jobs are briefed and accepted. If Duaer
9
10
  (`.duaer/`), `examples/`, or other overlays conflict with this file,
10
11
  **follow this file**.
package/CHANGELOG.md CHANGED
@@ -1,69 +1,36 @@
1
1
  # Changelog
2
2
 
3
- ## 0.3.0 — 2026-09-15
3
+ ## 0.5.0 — 2026-09-15
4
4
 
5
- ### Job handoff (not a repo lock)
5
+ ### Autonomous digital employee
6
6
 
7
- - Default policy **`coach`**: guide the employee; do not claim "done" until the
8
- **active job** is accepted git merge is not blocked
9
- - `.duaer/delivery-policy.json` modes: `off` | `coach` | `strict`
10
- - `.duaer/active-job.json` set by `/duaer-specify`; `duaer job` reports status
11
- - `duaer policy` to show/set mode
12
- - `duaer check` defaults to active-job scope; `--strict` / policy `strict` optional
13
- - `--gate` kept as deprecated alias for `--strict` (job handoff, not CI)
14
- - `--all-jobs` optional; historical features no longer fail the default path
15
- - Docs/rules/constitution demote merge-gate language
7
+ - **Simplicity = humans do not operate the workflow**
8
+ - Always-on rule: on product asks, the agent runs Brief → work → accept itself
9
+ - Do not require `/duaer-do`, phase slash commands, or `duaer status` from humans
10
+ - `duaer-do` is the agent’s internal playbook; install once, then talk
11
+ - README / init / ADOPT / DUADER rewritten around “ask, don’t operate”
16
12
 
17
- ### E2E
13
+ ## 0.4.0 — 2026-09-15
18
14
 
19
- - E2E-004–007 for coach default, strict optional, active-job scope
15
+ ### Simple everyday ops
20
16
 
21
- ## 0.2.0 2026-09-15
17
+ - `/duaer-do` one-shot skill + `duaer status`
18
+ - Step skills demoted to advanced (later reframed as agent-only in 0.5)
22
19
 
23
- ### Controllable delivery (machine gate)
20
+ ## 0.3.0 2026-09-15
24
21
 
25
- - `/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
22
+ ### Job handoff (not a repo lock)
32
23
 
33
- ### E2E
24
+ - `coach` / `strict` / `off` policy; active job; `duaer job` / `policy`
34
25
 
35
- - E2E-003 / E2E-004 / E2E-005 for delivery report and gate
26
+ ## 0.2.0 2026-09-15
36
27
 
37
- ## 0.1.1 2026-09-15
28
+ - `delivery.json` + checkable handoff state
38
29
 
39
- ### Docs / product identity
30
+ ## 0.1.1 2026-09-15
40
31
 
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)
32
+ - Digital-employee delivery OS positioning
46
33
 
47
34
  ## 0.1.0 — 2026-09-15
48
35
 
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
- ```
36
+ - First public methodology release
package/DUADER.md CHANGED
@@ -1,67 +1,45 @@
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
+ AI coding agents are **digital employees**. The human states intent; the agent
4
+ runs Brief work accept. Humans are not the operators of the phase machine.
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
+ ## Human experience
11
9
 
12
- **Handoff is job-level**, not a repository merge lock. Policy:
13
- `.duaer/delivery-policy.json` (`off` | `coach` | `strict`, default `coach`).
10
+ 1. One-time: `npx duaer-spec init --here`
11
+ 2. Ongoing: describe work in chat
12
+ 3. Review the handoff line (accepted / not yet)
14
13
 
15
- ## Read before work
14
+ ## Agent procedure (autonomous)
16
15
 
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>/`
16
+ Follow `.cursor/skills/duaer-do/SKILL.md` on every product ask **without**
17
+ waiting for a slash invocation:
21
18
 
22
- ## Standard path
19
+ 1. Assign Brief + `active-job.json`
20
+ 2. Light `tasks.md` if needed
21
+ 3. Implement
22
+ 4. Converge → `delivery.json`
23
+ 5. One handoff line; never claim done until accepted
23
24
 
24
- **Full (recommended):**
25
+ Large jobs may use step playbooks (`duaer-specify`, `duaer-plan`, …) internally.
25
26
 
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?
27
+ ## Policy
36
28
 
37
- **Small feature:** specify plan tasks implement → converge → `duaer job`
29
+ `.duaer/delivery-policy.json` defaults to `coach`. Agents must not claim done
30
+ while the active job is unfinished. This is job etiquette, not a git lock.
31
+ Humans need not configure it for everyday use.
38
32
 
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.
42
-
43
- ## Install
44
-
45
- ```bash
46
- npx duaer-spec init --here
47
- duaer policy . coach
48
- ```
49
-
50
- Or see [`ADOPT.md`](ADOPT.md).
51
-
52
- ## Feature directory shape
33
+ ## Layout
53
34
 
54
35
  ```text
55
- .duaer/delivery-policy.json
56
36
  .duaer/active-job.json
57
- .duaer/specs/<nnn-slug>/
58
- spec.md # Brief
59
- plan.md
60
- tasks.md
61
- delivery.json # accepted | open
37
+ .duaer/specs/<nnn-slug>/spec.md|tasks.md|delivery.json
38
+ .cursor/rules/duaer-spec.mdc # autonomous behavior
39
+ .cursor/skills/duaer-do/ # default job loop
62
40
  ```
63
41
 
64
42
  ## Related
65
43
 
44
+ - Adopt: [`ADOPT.md`](ADOPT.md)
66
45
  - Agent ops: [`AGENTS.md`](AGENTS.md)
67
- - Maintainer notes: [`docs/maintaining.md`](docs/maintaining.md)
package/README.md CHANGED
@@ -1,85 +1,37 @@
1
1
  # duaer-spec
2
2
 
3
- **Duaer** is a delivery operating system for AI coding agents treated as
4
- **digital employees**.
3
+ **Duaer** turns AI coding agents into **digital employees**: they take a normal
4
+ language ask, run Spec → work → accept themselves, and only claim a job done
5
+ when the handoff is clean.
5
6
 
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.
7
+ You should **not** have to operate the workflow. After a one-time install, you
8
+ talk; the employee runs the process.
9
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)
10
+ ## One-time install
14
11
 
15
12
  ```bash
16
13
  npx duaer-spec init --here
17
- # or pin: npx github:fujiezee/duaer-spec@v0.3.0 duaer init --here
18
14
  ```
19
15
 
20
- ```bash
21
- npx duaer-spec init --here --method
22
- npx duaer-spec init --here --ops --branch develop
23
- ```
24
-
25
- ```bash
26
- duaer policy . # default: coach
27
- duaer job . # active job handoff status
28
- duaer check .
29
- ```
30
-
31
- Details: [`ADOPT.md`](ADOPT.md)
32
-
33
- ## How you run them
34
-
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 .` |
16
+ Then use Cursor as usual — describe what you want. No slash-command chain
17
+ required.
42
18
 
43
- ### Policy (job-level)
19
+ ## What the employee does (by itself)
44
20
 
45
- Stored in `.duaer/delivery-policy.json`:
21
+ 1. Writes a Brief (Spec) for the ask
22
+ 2. Implements within that Brief
23
+ 3. Checks the result and stamps accept / still-open
24
+ 4. Tells you in one line whether the job is ready for review
46
25
 
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 |
26
+ Step skills and CLI checks exist for agents and power users — not as the
27
+ everyday human UI.
52
28
 
53
- Scope is the **active job** (`.duaer/active-job.json`), not every historical feature.
54
- Git commit/merge is never blocked by default.
29
+ ## Optional
55
30
 
56
- ## Two layers
57
-
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 |
62
-
63
- 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
31
+ ```bash
32
+ npx duaer-spec@0.5.0 init --here --method # method only
81
33
  ```
82
34
 
83
- ## Learn more
35
+ Details: [`ADOPT.md`](ADOPT.md) · Method: [`DUADER.md`](DUADER.md) · Ops: [`AGENTS.md`](AGENTS.md)
84
36
 
85
- Method: [`DUADER.md`](DUADER.md) · Agent ops: [`AGENTS.md`](AGENTS.md)
37
+ When agent ops and method conflict, **agent ops win**.
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,21 @@ 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
64
-
65
- Examples:
27
+ const USAGE = `duaer — digital-employee delivery (duaer-spec ${PKG.version})
28
+
29
+ Human (once):
30
+ duaer init [--here] Install so the agent works as a digital employee
31
+
32
+ After install: talk to the agent in plain language. Do not operate /duaer-* phases.
33
+
34
+ Agent / optional diagnostics:
35
+ duaer status [dir]
36
+ duaer check | policy | version
37
+
38
+ Init: --all (default) | --method | --ops | --force | --branch <n> | --here
39
+
40
+ Example:
66
41
  npx duaer-spec init --here
67
- duaer job .
68
- duaer policy . coach
69
- duaer check .
70
- duaer check . --strict
71
42
  `
72
43
 
73
44
  function parseArgs(argv) {
@@ -310,17 +281,10 @@ function cmdInit(opts) {
310
281
  console.log(`
311
282
  Hired.
312
283
 
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.
284
+ You: describe work in Cursor (plain language).
285
+ Agent: runs Brief → work → accept by itself do not operate slash phases.
286
+
287
+ Optional diagnostic: duaer status
324
288
  `)
325
289
  }
326
290
 
@@ -566,20 +530,21 @@ function cmdJob(opts) {
566
530
  const activeName = resolveActiveJobName(target, features)
567
531
  const active = features.find((f) => f.name === activeName) || null
568
532
 
569
- console.log(`Active job @ ${target}`)
570
- console.log(`policy: ${policy.mode}\n`)
533
+ console.log(`Status @ ${target}`)
571
534
  if (!active) {
572
- console.log('No active job. Assign with /duaer-specify (writes .duaer/active-job.json).')
535
+ console.log('No active job yet. In Cursor run: /duaer-do <what you want>')
573
536
  return
574
537
  }
575
- printFeature(active)
576
538
  if (active.verdict === 'accepted') {
577
- console.log('\nHandoff script: "✅ Job accepted — Brief satisfied per converge; ready for your review."')
539
+ console.log(`✅ accepted ${active.name}`)
540
+ console.log('Ready for your review.')
578
541
  } 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
- }
542
+ console.log(`⏳ not done ${active.name}`)
543
+ for (const b of active.blockers) console.log(` · ${b}`)
544
+ console.log('Next: /duaer-do (resume) or /duaer-converge')
545
+ }
546
+ if (policy.mode === 'strict' && active.verdict !== 'accepted') {
547
+ console.log('(policy=strict — do not claim done yet)')
583
548
  }
584
549
  }
585
550
 
@@ -628,6 +593,7 @@ function main() {
628
593
  cmdCheck(opts)
629
594
  break
630
595
  case 'job':
596
+ case 'status':
631
597
  cmdJob(opts)
632
598
  break
633
599
  case 'policy':
@@ -94,7 +94,7 @@ See [spec update guidance](workflow.md#3-spec-update-guidance).
94
94
 
95
95
  ## 6. Merge / PR
96
96
 
97
- - [ ] Active job handoff considered: `duaer job .` (coach/strict: do not claim done if unfinished).
97
+ - [ ] Active job handoff considered by the **agent** (do not require the human to run CLI for routine work).
98
98
  - [ ] Branch refreshed against latest `main`.
99
99
  - [ ] Merged into local `main` (and/or remote PR/MR when required).
100
100
  - [ ] Only this request's logical changes included.
@@ -25,24 +25,20 @@ 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 |
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 |
33
- | E2E-006 | `duaer policy . strict` then unfinished job makes check exit 1 | manual |
34
- | E2E-007 | `--all-jobs` is optional; default scope is active job only | manual |
28
+ | E2E-001 | After `duaer init`, banner says talk to agent no slash ops | manual |
29
+ | E2E-002 | README: install once, then plain-language asks | manual |
30
+ | E2E-003 | Always-on rule requires autonomous job loop without user slash | manual |
31
+ | E2E-004 | Default `coach`: unfinished job agent must not claim done | manual |
32
+ | E2E-005 | Converge stamps `accepted`; agent reports ready for review | manual |
33
+ | E2E-006 | `duaer-do` skill describes agent-triggered loop | manual |
35
34
 
36
35
  ## Traceability
37
36
 
38
- Keep this matrix current when scenarios or specs change.
39
-
40
37
  | Scenario | Spec / feature | Notes |
41
38
  |---|---|---|
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 `- [ ]` |
45
- | 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 |
48
- | E2E-007 | `--all-jobs` vs active | Scope |
39
+ | E2E-001 | init banner | No human phase ops |
40
+ | E2E-002 | README | Ask, don’t operate |
41
+ | E2E-003 | `duaer-spec.mdc` | Autonomous |
42
+ | E2E-004 | policy coach | Handoff etiquette |
43
+ | E2E-005 | `delivery.json` | Accept stamp |
44
+ | E2E-006 | `duaer-do` | Internal playbook |
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.5.0",
4
+ "description": "Digital employees that run Spec→work→accept themselves humans just ask",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "duaer": "bin/duaer.mjs",