duaer-spec 0.1.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 (75) hide show
  1. package/.cursor/rules/agents-workflow.mdc +50 -0
  2. package/.cursor/rules/ai-ui-copy.mdc +12 -0
  3. package/.cursor/rules/duaer-spec.mdc +33 -0
  4. package/.cursor/skills/duaer-analyze/SKILL.md +259 -0
  5. package/.cursor/skills/duaer-checklist/SKILL.md +383 -0
  6. package/.cursor/skills/duaer-clarify/SKILL.md +291 -0
  7. package/.cursor/skills/duaer-constitution/SKILL.md +177 -0
  8. package/.cursor/skills/duaer-converge/SKILL.md +277 -0
  9. package/.cursor/skills/duaer-git-commit/SKILL.md +68 -0
  10. package/.cursor/skills/duaer-git-feature/SKILL.md +94 -0
  11. package/.cursor/skills/duaer-git-initialize/SKILL.md +54 -0
  12. package/.cursor/skills/duaer-git-remote/SKILL.md +50 -0
  13. package/.cursor/skills/duaer-git-validate/SKILL.md +54 -0
  14. package/.cursor/skills/duaer-implement/SKILL.md +226 -0
  15. package/.cursor/skills/duaer-plan/SKILL.md +166 -0
  16. package/.cursor/skills/duaer-specify/SKILL.md +345 -0
  17. package/.cursor/skills/duaer-tasks/SKILL.md +214 -0
  18. package/.cursor/skills/duaer-taskstoissues/SKILL.md +109 -0
  19. package/.duaer/extensions/.registry +23 -0
  20. package/.duaer/extensions/git/README.md +119 -0
  21. package/.duaer/extensions/git/commands/duaer.git.commit.md +63 -0
  22. package/.duaer/extensions/git/commands/duaer.git.feature.md +82 -0
  23. package/.duaer/extensions/git/commands/duaer.git.initialize.md +49 -0
  24. package/.duaer/extensions/git/commands/duaer.git.remote.md +45 -0
  25. package/.duaer/extensions/git/commands/duaer.git.validate.md +49 -0
  26. package/.duaer/extensions/git/config-template.yml +79 -0
  27. package/.duaer/extensions/git/extension.yml +142 -0
  28. package/.duaer/extensions/git/git-config.yml +79 -0
  29. package/.duaer/extensions/git/scripts/bash/auto-commit.sh +211 -0
  30. package/.duaer/extensions/git/scripts/bash/create-new-feature-branch.sh +626 -0
  31. package/.duaer/extensions/git/scripts/bash/git-common.sh +56 -0
  32. package/.duaer/extensions/git/scripts/bash/initialize-repo.sh +54 -0
  33. package/.duaer/extensions/git/scripts/powershell/auto-commit.ps1 +230 -0
  34. package/.duaer/extensions/git/scripts/powershell/create-new-feature-branch.ps1 +592 -0
  35. package/.duaer/extensions/git/scripts/powershell/git-common.ps1 +52 -0
  36. package/.duaer/extensions/git/scripts/powershell/initialize-repo.ps1 +69 -0
  37. package/.duaer/extensions/git/scripts/python/auto_commit.py +195 -0
  38. package/.duaer/extensions/git/scripts/python/create_new_feature_branch.py +634 -0
  39. package/.duaer/extensions/git/scripts/python/git_common.py +81 -0
  40. package/.duaer/extensions/git/scripts/python/initialize_repo.py +89 -0
  41. package/.duaer/extensions.yml +167 -0
  42. package/.duaer/init-options.json +9 -0
  43. package/.duaer/integration.json +15 -0
  44. package/.duaer/integrations/cursor-agent.manifest.json +17 -0
  45. package/.duaer/integrations/duaer.manifest.json +19 -0
  46. package/.duaer/memory/.constitution-template.json +4 -0
  47. package/.duaer/memory/constitution.md +37 -0
  48. package/.duaer/memory/project-context.md +24 -0
  49. package/.duaer/memory/testing.md +14 -0
  50. package/.duaer/scripts/bash/check-prerequisites.sh +243 -0
  51. package/.duaer/scripts/bash/common.sh +926 -0
  52. package/.duaer/scripts/bash/create-new-feature.sh +407 -0
  53. package/.duaer/scripts/bash/resolve-template.sh +57 -0
  54. package/.duaer/scripts/bash/setup-plan.sh +85 -0
  55. package/.duaer/scripts/bash/setup-tasks.sh +94 -0
  56. package/.duaer/templates/checklist-template.md +45 -0
  57. package/.duaer/templates/constitution-template.md +50 -0
  58. package/.duaer/templates/plan-template.md +113 -0
  59. package/.duaer/templates/spec-template.md +131 -0
  60. package/.duaer/templates/tasks-template.md +252 -0
  61. package/.duaer/workflows/duaer/workflow.yml +78 -0
  62. package/.duaer/workflows/workflow-registry.json +13 -0
  63. package/ADOPT.md +75 -0
  64. package/AGENTS.md +290 -0
  65. package/CHANGELOG.md +28 -0
  66. package/DUADER.md +57 -0
  67. package/LICENSE +21 -0
  68. package/README.md +74 -0
  69. package/bin/duaer.mjs +298 -0
  70. package/docs/agent/README.md +12 -0
  71. package/docs/agent/change-checklist.md +130 -0
  72. package/docs/agent/e2e-test-plan.md +33 -0
  73. package/docs/agent/workflow.md +127 -0
  74. package/docs/baseline.md +10 -0
  75. package/package.json +49 -0
package/ADOPT.md ADDED
@@ -0,0 +1,75 @@
1
+ # Adopt duaer-spec
2
+
3
+ Install the **Duaer** methodology and agent-ops contract into another
4
+ repository.
5
+
6
+ ## Recommended: CLI
7
+
8
+ From the target project (Node 18+):
9
+
10
+ ```bash
11
+ # GitHub pin
12
+ npx github:fujiezee/duaer-spec@v0.1.0 duaer init --here
13
+
14
+ # npm (after publish)
15
+ npx duaer-spec init --here
16
+
17
+ # method only / ops only / other integration branch
18
+ npx github:fujiezee/duaer-spec@v0.1.0 duaer init --here --method
19
+ npx github:fujiezee/duaer-spec@v0.1.0 duaer init --here --ops --branch develop
20
+ ```
21
+
22
+ From a clone of this repo:
23
+
24
+ ```bash
25
+ node bin/duaer.mjs init /path/to/project --all
26
+ node bin/duaer.mjs check /path/to/project
27
+ ```
28
+
29
+ `--force` overwrites managed files.
30
+
31
+ Then:
32
+
33
+ 1. Edit `.duaer/memory/constitution.md` and `project-context.md` for the product
34
+ 2. Confirm `docs/baseline.md` (integration branch)
35
+ 3. Use `/duaer-specify` → `/duaer-plan` → `/duaer-tasks` → `/duaer-implement` → `/duaer-converge`
36
+
37
+ ## Manual copy (optional)
38
+
39
+ ### Agent ops
40
+
41
+ ```bash
42
+ cp AGENTS.md /path/to/project/
43
+ mkdir -p /path/to/project/.cursor/rules /path/to/project/docs/agent
44
+ cp .cursor/rules/agents-workflow.mdc /path/to/project/.cursor/rules/
45
+ cp .cursor/rules/ai-ui-copy.mdc /path/to/project/.cursor/rules/
46
+ cp docs/agent/workflow.md docs/agent/change-checklist.md docs/agent/e2e-test-plan.md \
47
+ /path/to/project/docs/agent/
48
+ ```
49
+
50
+ ### Duaer method
51
+
52
+ ```bash
53
+ rsync -a .duaer/ /path/to/project/.duaer/
54
+ mkdir -p /path/to/project/.cursor/skills /path/to/project/.cursor/rules
55
+ rsync -a .cursor/skills/ /path/to/project/.cursor/skills/
56
+ cp .cursor/rules/duaer-spec.mdc /path/to/project/.cursor/rules/
57
+ cp DUADER.md /path/to/project/
58
+ ```
59
+
60
+ ## Precedence
61
+
62
+ 1. `AGENTS.md` / agent-ops — how agents operate
63
+ 2. `DUADER.md` / `.duaer/` — what to build
64
+ 3. Product overlays (do not copy `examples/` blindly)
65
+
66
+ ## Updates
67
+
68
+ Re-run `duaer init --force` (review the diff) or pin to a commit/tag. Adopters
69
+ are not auto-updated.
70
+
71
+ ## Do not copy
72
+
73
+ - `examples/` — samples only
74
+ - `SOURCE.md` — provenance for maintainers
75
+ - `bin/` / `package.json` — only needed if you vendor the CLI itself
package/AGENTS.md ADDED
@@ -0,0 +1,290 @@
1
+ # AGENTS.md
2
+
3
+ Mandatory rules for AI coding agents working in **duaer-spec**, and for any
4
+ repository that adopts this file as its agent-ops contract.
5
+
6
+ This file is authoritative for *how* agents operate. If Duaer (`.duaer/`,
7
+ `DUADER.md`), `examples/`, or other overlays conflict with this file,
8
+ **follow this file**.
9
+
10
+ See also: [workflow](docs/agent/workflow.md) · [change checklist](docs/agent/change-checklist.md) · [ADOPT](ADOPT.md)
11
+
12
+ ## Language
13
+
14
+ Use English for code, identifiers, comments, commits, specifications, and
15
+ documentation unless the adopting project explicitly overrides.
16
+
17
+ Follow the project's [baseline](docs/baseline.md) (or its local equivalent).
18
+
19
+ ## GitHub Issue Handling
20
+
21
+ When the user provides a GitHub issue URL (or an unambiguous issue number for
22
+ this repository), treat it as an intake gate. Do not start implementation
23
+ until the reported problem has been independently verified.
24
+
25
+ 1. Fetch the issue (title, body, labels, comments, and state).
26
+ 2. Decide whether the claim is real in the current codebase:
27
+ - Bug: reproduce it, or show concrete code/spec evidence that it exists.
28
+ - Feature or improvement: confirm the requested behavior is actually missing
29
+ or incomplete, and in scope.
30
+ 3. If the problem does **not** exist (already fixed, invalid, or a
31
+ misunderstanding): comment on the issue with the verification evidence, and
32
+ close the issue when the conclusion is clear. If verification is
33
+ inconclusive, comment with what was tried and leave the issue open.
34
+ 4. If the problem **does** exist: follow the isolated development workflow,
35
+ implement the smallest coherent fix, merge into local `main`, then comment
36
+ on the issue and close it.
37
+ 5. Write the issue comment in the issue's language (the language of the
38
+ original title and body). Repository docs, code, and commits stay English
39
+ unless the project overrides.
40
+ 6. An issue link authorizes commenting on and closing **that** issue. It does
41
+ not authorize a git push. Remote publishing remains opt-in.
42
+
43
+ Do not comment on or close unrelated issues. Do not reopen a closed issue
44
+ unless the user explicitly asks.
45
+
46
+ See [R5](docs/agent/workflow.md#r5--verify-linked-github-issues-before-work-then-reply-and-close).
47
+
48
+ ## GitHub Pull Request Handling
49
+
50
+ When the user provides a GitHub pull request URL (or an unambiguous pull
51
+ request number for this repository), treat it as an intake gate. Review the
52
+ principle first. Do not rewrite the pull request as a replacement for the
53
+ contributor's work. Do not create a replacement request branch or worktree
54
+ until that decision is made. If merging, start follow-up only after the pull
55
+ request is in `main`.
56
+
57
+ 1. Fetch the pull request (title, body, files, commits, comments, checks,
58
+ draft state, base/head, and linked issues).
59
+ 2. Decide whether the **principle** is sound in the current codebase:
60
+ - The change addresses a real, in-scope problem.
61
+ - The approach is compatible with the baseline, security boundaries, and
62
+ architecture (or is a justified spec-backed amendment).
63
+ - Judge the direction, not whether the pull request already satisfies
64
+ spec-sync, tests, style, or other completeness rules.
65
+ 3. If the principle is sound: merge **that** pull request first, preserving
66
+ the contributor's commits. If the head branch lives in a fork (third-party
67
+ contributor), run the project's relevant local automated suites against the
68
+ head first when the project has them; a failing required suite is a landing
69
+ blocker, not a follow-up. Completeness gaps (specs, tests, i18n, e2e docs,
70
+ style, naming, commit-message nits) are follow-up work after merge, not
71
+ merge blockers. Landing blockers that would break `main` may receive the
72
+ smallest commits on top of the author's work so the pull request can land.
73
+ Then follow the isolated development workflow for any follow-up.
74
+ 4. If the principle is not sound, or a harm blocker exists (secrets, sandbox
75
+ or privilege bypass, malicious or clearly destructive changes, out-of-scope
76
+ reversal of a frozen decision): do not merge. Comment with the evidence.
77
+ Do not silently reimplement the same idea as if the pull request never
78
+ existed.
79
+ 5. Do not merge a draft pull request the author has not marked ready, unless
80
+ the user explicitly asks to merge the draft.
81
+ 6. Write the pull request comment in the pull request's language. Repository
82
+ docs, code, and commits stay English unless the project overrides.
83
+ 7. A pull request link authorizes reviewing, commenting on, and merging
84
+ **that** pull request. It does not authorize a force-push of the
85
+ contributor's branch or publishing unrelated branches. Follow-up remote
86
+ publishing remains opt-in.
87
+
88
+ Do not comment on or merge unrelated pull requests.
89
+
90
+ See [R6](docs/agent/workflow.md#r6--merge-a-linked-pull-request-whose-principle-is-sound-then-follow-up).
91
+
92
+ ## AI-Generated Page Content
93
+
94
+ AI-generated pages must not contain redundant explanatory text. Keep visible
95
+ copy limited to the information and actions users need to complete the task:
96
+
97
+ * Do not add filler introductions, repeated summaries, implementation notes,
98
+ or prose that merely explains an obvious control or layout.
99
+ * Prefer concise labels, headings, helper text, and empty states.
100
+ * Put rationale and implementation detail in documentation or code comments,
101
+ not in the page UI, unless the user explicitly requests explanatory content.
102
+
103
+ ## Mandatory Isolated Development
104
+
105
+ Every request must use its own dedicated branch and worktree.
106
+
107
+ A linked GitHub pull request is reviewed and, when the principle is sound,
108
+ merged before any replacement implementation worktree is created (R6).
109
+ Landing-blocker commits, if needed, go on top of the author's branch.
110
+
111
+ Before modifying any file, the agent must:
112
+
113
+ 1. Update the primary checkout's local `main`
114
+ 2. Create a unique branch from the updated `main`
115
+ 3. Create a dedicated worktree for that branch
116
+ 4. Enter the new worktree
117
+ 5. Only then begin development
118
+
119
+ Example:
120
+
121
+ ```bash
122
+ git switch main
123
+ git pull --ff-only
124
+ git worktree add ../worktrees/<request-id> -b <type>/<request-id> main
125
+ cd ../worktrees/<request-id>
126
+ ```
127
+
128
+ Branch and worktree names must be unique and clearly associated with the request.
129
+
130
+ **This repository's default integration branch is `main`.** Adopting projects
131
+ may substitute another long-lived branch (for example `develop`); document that
132
+ override in the project baseline. Do not inherit git policy from `examples/`.
133
+
134
+ ## Multi-Agent Isolation
135
+
136
+ * Each agent must use its own branch and worktree
137
+ * Never develop directly in the primary checkout
138
+ * Never develop directly on `main` (or the project's integration branch)
139
+ * Never reuse another agent's branch or worktree
140
+ * Never modify files inside another request's worktree
141
+ * Never switch another agent's branch
142
+ * Never delete another agent's branch or worktree
143
+ * Never include unrelated changes from another request
144
+ * Do not commit local environment files, caches, databases, or secrets
145
+
146
+ The primary checkout is reserved for synchronizing and merging the integration
147
+ branch. Shared toolchains and caches may be reused when that cannot modify
148
+ tracked files or interfere with another worktree.
149
+
150
+ ## Immutable Rules
151
+
152
+ ### 1. Keep Specs Synchronized
153
+
154
+ Every behavior change must update the relevant project specification
155
+ (commonly under `docs/spec/`, Duaer feature specs, or this repo's
156
+ `docs/agent/` when changing duaer-spec itself).
157
+
158
+ Add an ADR under `docs/adr/` when changing architecture, public interfaces,
159
+ data ownership, security boundaries, or frozen decisions.
160
+
161
+ ### 2. Commit Every Logical Change
162
+
163
+ * One logical change per commit
164
+ * No large uncommitted diffs
165
+ * No unrelated cleanup
166
+ * Leave the request worktree clean
167
+
168
+ ### 3. Keep E2E Documentation Synchronized
169
+
170
+ Every user-visible or protocol-visible behavior change must add or update a
171
+ scenario in the project's E2E catalog (template:
172
+ [e2e-test-plan](docs/agent/e2e-test-plan.md)).
173
+
174
+ Do not run local E2E commands or manually trigger remote E2E jobs unless
175
+ explicitly requested by the user, **except** for forked third-party pull
176
+ request heads when the project requires local suites before merge. Record the
177
+ result in the pull request comment.
178
+
179
+ ### 4. Merge Back into Local `main`
180
+
181
+ After development:
182
+
183
+ 1. Complete targeted validation
184
+ 2. Review the complete diff
185
+ 3. Commit all logical changes
186
+ 4. Update the request branch with the latest local `main`
187
+ 5. Resolve conflicts inside the request worktree
188
+ 6. Return to the primary checkout
189
+ 7. Merge the request branch into local `main`
190
+ 8. Verify the expected commits are present
191
+ 9. Remove the request worktree
192
+ 10. Delete the merged request branch
193
+ 11. Push only when the user explicitly requested remote publishing for the
194
+ current request
195
+
196
+ If another agent has updated `main`, refresh the request branch before merging
197
+ (`git fetch` then `git rebase main`, or merge if project policy requires it).
198
+
199
+ Do not overwrite, reset, or discard changes already merged by another agent.
200
+
201
+ Remote publishing is opt-in. Never infer a push from ordinary development,
202
+ commit, merge, or completion requests. Never force-push unless the user
203
+ explicitly requests that exact operation.
204
+
205
+ ### 5. Clean Up the Request Worktree
206
+
207
+ Once the request branch is merged into local `main`, remove its worktree and
208
+ delete the merged branch. Never leave a merged worktree on disk.
209
+
210
+ ```bash
211
+ git worktree remove ../worktrees/<request-id>
212
+ git branch -d <type>/<request-id>
213
+ git worktree prune
214
+ ```
215
+
216
+ * Remove only after verifying merge commits are present in local `main`
217
+ * The worktree must be clean first
218
+ * Use `git branch -d` (not `-D`)
219
+ * Delete only your own worktree and branch
220
+
221
+ ## Development Workflow
222
+
223
+ 1. Update local `main`
224
+ 2. Create a unique request branch
225
+ 3. Create and enter a dedicated worktree
226
+ 4. Read the baseline and relevant specs (and Duaer memory when present)
227
+ 5. Identify affected specs, ADRs, E2E scenarios, and validation
228
+ 6. Implement the smallest coherent change
229
+ 7. Update documentation as required
230
+ 8. Run targeted, risk-based checks
231
+ 9. Review the complete diff
232
+ 10. Commit each logical change
233
+ 11. Refresh the branch against the latest local `main`
234
+ 12. Merge into local `main`
235
+ 13. Remove the request worktree and delete the merged branch
236
+ 14. Push only when explicitly requested for the current request
237
+
238
+ Development must not begin before steps 1–3 are complete.
239
+
240
+ For feature work that uses Duaer, prefer
241
+ `specify → plan → tasks → implement → converge` (or the hotfix short path).
242
+ Agent ops in this file still govern isolation, commits, and merge.
243
+
244
+ ## Commit Format
245
+
246
+ ```text
247
+ type(scope): description
248
+ ```
249
+
250
+ Allowed types: `feat fix docs test chore refactor perf build ci`
251
+
252
+ * English only
253
+ * Concise, imperative description
254
+ * One logical change per commit
255
+
256
+ ## Completion Checklist
257
+
258
+ * [ ] Local `main` was updated before development
259
+ * [ ] A unique request branch was created
260
+ * [ ] A dedicated worktree was created
261
+ * [ ] All development occurred inside that worktree
262
+ * [ ] No other agent's branch or worktree was modified
263
+ * [ ] Relevant specs and E2E scenarios were updated
264
+ * [ ] Targeted validation passed or was documented as unnecessary
265
+ * [ ] No secrets, local data, or unrelated changes are included
266
+ * [ ] All logical changes were committed
267
+ * [ ] The branch was refreshed against the latest local `main`
268
+ * [ ] Changes were merged into local `main`
269
+ * [ ] The request worktree was removed after the merge
270
+ * [ ] The merged request branch was deleted
271
+ * [ ] Remote publishing was skipped unless explicitly requested
272
+ * [ ] If pushed, the remote, branch, commit set, and Git identity were verified
273
+ * [ ] If a GitHub issue was linked: verified before work; commented in its
274
+ language; closed when conclusive
275
+ * [ ] If a GitHub pull request was linked: principle reviewed; merged first
276
+ when sound; follow-up after merge; contributor work not discarded
277
+
278
+ ## Final Report
279
+
280
+ Report:
281
+
282
+ * Branch and worktree used
283
+ * What changed
284
+ * Documentation updated
285
+ * Validation performed or skipped
286
+ * Commit hashes and messages
287
+ * Merge result
288
+ * Worktree and branch cleanup result
289
+ * Push target and result, or confirmation that nothing was pushed
290
+ * Linked GitHub issue / PR outcomes (or N/A)
package/CHANGELOG.md ADDED
@@ -0,0 +1,28 @@
1
+ # Changelog
2
+
3
+ ## 0.1.0 — 2026-09-15
4
+
5
+ First public methodology release.
6
+
7
+ ### Method
8
+
9
+ - Own **Duaer** Spec-Driven loop: specify → plan → tasks → implement → converge
10
+ - Home directory: `.duaer/` (not an embedded third-party kit)
11
+ - Cursor skills: `/duaer-specify`, `/duaer-plan`, `/duaer-tasks`, `/duaer-implement`, `/duaer-converge`, …
12
+ - Agent ops (`AGENTS.md`) remain authoritative over the method when they conflict
13
+
14
+ ### CLI
15
+
16
+ - `duaer init [dir] --all|--method|--ops [--force] [--branch <name>]`
17
+ - `duaer check [dir]`
18
+ - `duaer version`
19
+
20
+ ### Install
21
+
22
+ ```bash
23
+ # From GitHub (works now)
24
+ npx github:fujiezee/duaer-spec@v0.1.0 duaer init --here
25
+
26
+ # From npm (after publish)
27
+ npx duaer-spec init --here
28
+ ```
package/DUADER.md ADDED
@@ -0,0 +1,57 @@
1
+ # Duaer methodology
2
+
3
+ **duaer-spec** owns this method. Artifacts live under `.duaer/`; Cursor skills
4
+ are `duaer-*` at `.cursor/skills/`.
5
+
6
+ **Precedence:** root [`AGENTS.md`](AGENTS.md) / [`docs/agent/`](docs/agent/) win
7
+ over anything here for isolation, commits, and Issue/PR gates.
8
+
9
+ ## Read before work
10
+
11
+ 1. `.duaer/memory/constitution.md` — process principles
12
+ 2. `.duaer/memory/project-context.md` — as-is implementation truth
13
+ 3. `.duaer/memory/testing.md` — verification expectations
14
+ 4. Active feature under `.duaer/specs/<nnn-slug>/` when one exists
15
+
16
+ ## Standard path
17
+
18
+ **Full (recommended):**
19
+
20
+ 1. `/duaer-constitution` — only when principles change
21
+ 2. `/duaer-specify` — what / why / acceptance (not stack trivia)
22
+ 3. `/duaer-clarify` — optional
23
+ 4. `/duaer-plan` — technical plan aligned with project-context
24
+ 5. `/duaer-checklist` — optional quality checklist
25
+ 6. `/duaer-tasks` — checkbox task breakdown
26
+ 7. `/duaer-analyze` — optional consistency check
27
+ 8. `/duaer-implement` — implement tasks only
28
+ 9. `/duaer-converge` — compare result to spec; append remaining tasks if gaps
29
+
30
+ **Small feature:** specify → plan → tasks → implement → converge
31
+
32
+ **Hotfix:** specify (mark hotfix) → tasks → implement → converge
33
+ Never skip specify or converge.
34
+
35
+ ## Install
36
+
37
+ ```bash
38
+ npx github:fujiezee/duaer-spec duaer init --here
39
+ ```
40
+
41
+ Or see [`ADOPT.md`](ADOPT.md). No third-party Spec CLI is required — `duaer`
42
+ installs this repository's method files into the target project.
43
+
44
+ ## Feature directory shape
45
+
46
+ ```text
47
+ .duaer/specs/<nnn-slug>/
48
+ spec.md
49
+ plan.md # after /duaer-plan
50
+ tasks.md # after /duaer-tasks
51
+ … # research / contracts as needed
52
+ ```
53
+
54
+ ## Related
55
+
56
+ - Agent ops: [`AGENTS.md`](AGENTS.md)
57
+ - Maintainer notes: [`docs/maintaining.md`](docs/maintaining.md)
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 duaer-spec contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,74 @@
1
+ # duaer-spec
2
+
3
+ **Duaer** is a Spec-Driven Development methodology for AI coding agents
4
+ (Cursor first), plus enforceable **agent ops** for isolation, commits, and
5
+ Issue/PR gates.
6
+
7
+ Not a wrapper around another toolkit. The method, directories, skills, and rules
8
+ in this repository **are** duaer-spec.
9
+
10
+ ## Install into a project
11
+
12
+ ```bash
13
+ # GitHub (available now)
14
+ npx github:fujiezee/duaer-spec@v0.1.0 duaer init --here
15
+
16
+ # npm (after the package is published)
17
+ npx duaer-spec init --here
18
+ ```
19
+
20
+ ```bash
21
+ # method only / ops only / other integration branch
22
+ npx github:fujiezee/duaer-spec duaer init --here --method
23
+ npx github:fujiezee/duaer-spec duaer init --here --ops --branch develop
24
+ ```
25
+
26
+ Verify: `npx github:fujiezee/duaer-spec duaer check .`
27
+ Details: [`ADOPT.md`](ADOPT.md)
28
+
29
+ ## Two layers
30
+
31
+ | Layer | Role | Where |
32
+ |---|---|---|
33
+ | **Agent ops** | How agents operate | [`AGENTS.md`](AGENTS.md), [`docs/agent/`](docs/agent/) |
34
+ | **Duaer method** | What to build (Spec → Plan → Tasks → Implement → Converge) | [`DUADER.md`](DUADER.md), [`.duaer/`](.duaer/), [`.cursor/skills/`](.cursor/skills/) |
35
+
36
+ When they conflict, **agent ops win**.
37
+
38
+ ## Default loop
39
+
40
+ ```text
41
+ constitution → specify → plan → tasks → implement → converge
42
+ ```
43
+
44
+ Small change: `specify → plan → tasks → implement → converge`
45
+ Hotfix: `specify (hotfix) → tasks → implement → converge`
46
+
47
+ Slash skills: `/duaer-specify`, `/duaer-plan`, `/duaer-tasks`, `/duaer-implement`,
48
+ `/duaer-converge`, …
49
+
50
+ ## Layout
51
+
52
+ ```text
53
+ bin/duaer.mjs CLI (duaer init | check | version)
54
+ package.json npm package metadata
55
+ AGENTS.md Agent-ops contract
56
+ DUADER.md Methodology conventions
57
+ ADOPT.md Install guide
58
+ .duaer/ Memory, templates, workflows, scripts
59
+ .cursor/rules/ Agent-ops + Duaer rules
60
+ .cursor/skills/ duaer-* skills
61
+ docs/agent/ Workflow detail + checklists
62
+ docs/maintaining.md How maintainers evolve the method
63
+ examples/ Optional product overlays (not defaults)
64
+ ```
65
+
66
+ ## Defaults (this repo)
67
+
68
+ - Integration branch: **`main`**
69
+ - One request → one branch + one worktree → merge → delete worktree
70
+ - Push only when explicitly requested
71
+
72
+ ## Learn more
73
+
74
+ Method: [`DUADER.md`](DUADER.md) · Agent ops: [`AGENTS.md`](AGENTS.md)