@codemcp/ade 0.2.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 (150) hide show
  1. package/.ade/skills/adr-nygard/SKILL.md +45 -0
  2. package/.ade/skills/conventional-commits/SKILL.md +36 -0
  3. package/.ade/skills/tanstack-architecture/SKILL.md +25 -0
  4. package/.ade/skills/tanstack-code/SKILL.md +25 -0
  5. package/.ade/skills/tanstack-design/SKILL.md +24 -0
  6. package/.ade/skills/tanstack-testing/SKILL.md +24 -0
  7. package/.agentskills/skills/adr-nygard/SKILL.md +45 -0
  8. package/.agentskills/skills/commit/SKILL.md +20 -0
  9. package/.agentskills/skills/tdd/SKILL.md +10 -0
  10. package/.beads/README.md +85 -0
  11. package/.beads/config.yaml +63 -0
  12. package/.beads/interactions.jsonl +0 -0
  13. package/.beads/issues.jsonl +46 -0
  14. package/.beads/last-touched +1 -0
  15. package/.beads/metadata.json +4 -0
  16. package/.claude/settings.json +16 -0
  17. package/.claude/skills/extending-catalog/SKILL.md +41 -0
  18. package/.cursor/mcp.json +16 -0
  19. package/.cursor/rules/ade.mdc +10 -0
  20. package/.github/agents/ade.agent.md +28 -0
  21. package/.github/copilot-instructions.md +11 -0
  22. package/.github/workflows/pr.yml +38 -0
  23. package/.github/workflows/release.yml +124 -0
  24. package/.husky/post-checkout +2 -0
  25. package/.husky/post-merge +2 -0
  26. package/.husky/pre-commit +2 -0
  27. package/.husky/pre-push +8 -0
  28. package/.kiro/agents/ade.json +20 -0
  29. package/.kiro/settings/mcp.json +14 -0
  30. package/.knowledge/.prettierignore +1 -0
  31. package/.knowledge/config.yaml +9 -0
  32. package/.lintstagedrc.js +4 -0
  33. package/.mcp.json +20 -0
  34. package/.opencode/agents/ade.md +118 -0
  35. package/.prettierignore +2 -0
  36. package/.prettierrc.yaml +3 -0
  37. package/.vibe/beads-state-ade-autonomy-facet-46zodk.json +29 -0
  38. package/.vibe/beads-state-ade-fix-no-arch-selected-hvfiio.json +34 -0
  39. package/.vibe/development-plan-autonomy-facet.md +214 -0
  40. package/.vibe/development-plan-fix-no-arch-selected.md +103 -0
  41. package/.vscode/mcp.json +24 -0
  42. package/LICENSE +21 -0
  43. package/README.md +293 -0
  44. package/config.lock.yaml +118 -0
  45. package/config.yaml +10 -0
  46. package/docs/CLI-PRD.md +251 -0
  47. package/docs/CLI-design.md +646 -0
  48. package/docs/adrs/0001-tui-framework-selection.md +77 -0
  49. package/eslint.config.mjs +38 -0
  50. package/opencode.json +17 -0
  51. package/package.json +79 -0
  52. package/packages/cli/.prettierignore +1 -0
  53. package/packages/cli/dist/commands/install.js +39 -0
  54. package/packages/cli/dist/commands/setup.js +177 -0
  55. package/packages/cli/dist/index.js +43 -0
  56. package/packages/cli/dist/knowledge-installer.js +38 -0
  57. package/packages/cli/dist/version.js +1 -0
  58. package/packages/cli/eslint.config.mjs +40 -0
  59. package/packages/cli/nodemon.json +7 -0
  60. package/packages/cli/package.json +40 -0
  61. package/packages/cli/src/commands/conventions.integration.spec.ts +267 -0
  62. package/packages/cli/src/commands/install.integration.spec.ts +123 -0
  63. package/packages/cli/src/commands/install.spec.ts +169 -0
  64. package/packages/cli/src/commands/install.ts +63 -0
  65. package/packages/cli/src/commands/knowledge.integration.spec.ts +129 -0
  66. package/packages/cli/src/commands/setup.integration.spec.ts +148 -0
  67. package/packages/cli/src/commands/setup.spec.ts +442 -0
  68. package/packages/cli/src/commands/setup.ts +252 -0
  69. package/packages/cli/src/index.ts +52 -0
  70. package/packages/cli/src/knowledge-installer.spec.ts +111 -0
  71. package/packages/cli/src/knowledge-installer.ts +54 -0
  72. package/packages/cli/src/version.ts +1 -0
  73. package/packages/cli/tsconfig.build.json +8 -0
  74. package/packages/cli/tsconfig.json +10 -0
  75. package/packages/cli/tsconfig.vitest.json +7 -0
  76. package/packages/cli/vitest.config.ts +5 -0
  77. package/packages/core/.prettierignore +1 -0
  78. package/packages/core/eslint.config.mjs +40 -0
  79. package/packages/core/nodemon.json +7 -0
  80. package/packages/core/package.json +34 -0
  81. package/packages/core/src/catalog/catalog.spec.ts +570 -0
  82. package/packages/core/src/catalog/facets/architecture.ts +438 -0
  83. package/packages/core/src/catalog/facets/autonomy.ts +106 -0
  84. package/packages/core/src/catalog/facets/backpressure.ts +143 -0
  85. package/packages/core/src/catalog/facets/practices.ts +173 -0
  86. package/packages/core/src/catalog/facets/process.ts +50 -0
  87. package/packages/core/src/catalog/index.ts +93 -0
  88. package/packages/core/src/config.spec.ts +165 -0
  89. package/packages/core/src/config.ts +39 -0
  90. package/packages/core/src/index.ts +55 -0
  91. package/packages/core/src/registry.spec.ts +145 -0
  92. package/packages/core/src/registry.ts +70 -0
  93. package/packages/core/src/resolver.spec.ts +626 -0
  94. package/packages/core/src/resolver.ts +214 -0
  95. package/packages/core/src/types.ts +179 -0
  96. package/packages/core/src/writers/git-hooks.ts +9 -0
  97. package/packages/core/src/writers/instruction.spec.ts +42 -0
  98. package/packages/core/src/writers/instruction.ts +8 -0
  99. package/packages/core/src/writers/knowledge.spec.ts +26 -0
  100. package/packages/core/src/writers/knowledge.ts +15 -0
  101. package/packages/core/src/writers/permission-policy.ts +8 -0
  102. package/packages/core/src/writers/setup-note.ts +9 -0
  103. package/packages/core/src/writers/skills.spec.ts +109 -0
  104. package/packages/core/src/writers/skills.ts +9 -0
  105. package/packages/core/src/writers/workflows.spec.ts +72 -0
  106. package/packages/core/src/writers/workflows.ts +26 -0
  107. package/packages/core/tsconfig.build.json +8 -0
  108. package/packages/core/tsconfig.json +7 -0
  109. package/packages/core/tsconfig.vitest.json +7 -0
  110. package/packages/core/vitest.config.ts +5 -0
  111. package/packages/harnesses/.prettierignore +1 -0
  112. package/packages/harnesses/eslint.config.mjs +40 -0
  113. package/packages/harnesses/package.json +35 -0
  114. package/packages/harnesses/src/index.spec.ts +45 -0
  115. package/packages/harnesses/src/index.ts +47 -0
  116. package/packages/harnesses/src/permission-policy.ts +173 -0
  117. package/packages/harnesses/src/skills-installer.ts +54 -0
  118. package/packages/harnesses/src/types.ts +12 -0
  119. package/packages/harnesses/src/util.ts +221 -0
  120. package/packages/harnesses/src/writers/claude-code.spec.ts +320 -0
  121. package/packages/harnesses/src/writers/claude-code.ts +107 -0
  122. package/packages/harnesses/src/writers/cline.spec.ts +212 -0
  123. package/packages/harnesses/src/writers/cline.ts +24 -0
  124. package/packages/harnesses/src/writers/copilot.spec.ts +258 -0
  125. package/packages/harnesses/src/writers/copilot.ts +105 -0
  126. package/packages/harnesses/src/writers/cursor.spec.ts +219 -0
  127. package/packages/harnesses/src/writers/cursor.ts +95 -0
  128. package/packages/harnesses/src/writers/kiro.spec.ts +228 -0
  129. package/packages/harnesses/src/writers/kiro.ts +89 -0
  130. package/packages/harnesses/src/writers/opencode.spec.ts +258 -0
  131. package/packages/harnesses/src/writers/opencode.ts +67 -0
  132. package/packages/harnesses/src/writers/roo-code.spec.ts +197 -0
  133. package/packages/harnesses/src/writers/roo-code.ts +71 -0
  134. package/packages/harnesses/src/writers/universal.spec.ts +134 -0
  135. package/packages/harnesses/src/writers/universal.ts +84 -0
  136. package/packages/harnesses/src/writers/windsurf.spec.ts +178 -0
  137. package/packages/harnesses/src/writers/windsurf.ts +89 -0
  138. package/packages/harnesses/tsconfig.build.json +8 -0
  139. package/packages/harnesses/tsconfig.json +7 -0
  140. package/packages/harnesses/tsconfig.vitest.json +7 -0
  141. package/packages/harnesses/vitest.config.ts +5 -0
  142. package/pnpm-workspace.yaml +2 -0
  143. package/scripts/rename-packages.sh +23 -0
  144. package/skills-lock.json +20 -0
  145. package/tsconfig.base.json +25 -0
  146. package/tsconfig.build.json +7 -0
  147. package/tsconfig.json +13 -0
  148. package/turbo.json +47 -0
  149. package/vitest.config.ts +22 -0
  150. package/vitest.setup.ts +0 -0
@@ -0,0 +1,118 @@
1
+ version: 1
2
+ generated_at: 2026-03-18T11:52:51.718Z
3
+ choices:
4
+ process: codemcp-workflows
5
+ practices:
6
+ - adr-nygard
7
+ autonomy: sensible-defaults
8
+ harnesses:
9
+ - universal
10
+ - opencode
11
+ - copilot
12
+ - kiro
13
+ logical_config:
14
+ mcp_servers:
15
+ - ref: workflows
16
+ command: npx
17
+ args:
18
+ - "@codemcp/workflows-server@latest"
19
+ env: {}
20
+ - ref: agentskills
21
+ command: npx
22
+ args:
23
+ - -y
24
+ - "@codemcp/skills-server"
25
+ env: {}
26
+ instructions:
27
+ - >-
28
+ You are an AI assistant that helps users develop software features using
29
+ the workflows server.
30
+
31
+ IMPORTANT: Call whats_next() after each user message to get phase-specific
32
+ instructions and maintain the development workflow.
33
+
34
+ Each tool call returns a JSON response with an "instructions" field.
35
+ Follow these instructions immediately after you receive them.
36
+
37
+ Use the development plan which you will retrieve via whats_next() to
38
+ record important insights and decisions as per the structure of the plan.
39
+
40
+ Do not use your own task management tools.
41
+ cli_actions: []
42
+ knowledge_sources: []
43
+ skills:
44
+ - name: adr-nygard
45
+ description: Architecture Decision Records following Nygard's lightweight template
46
+ body: >-
47
+ # Architecture Decision Records (Nygard)
48
+
49
+
50
+ ## When to Write an ADR
51
+
52
+ - When making a significant architectural decision
53
+
54
+ - When choosing between multiple viable options
55
+
56
+ - When the decision will be hard to reverse
57
+
58
+ - When future developers will ask "why did we do this?"
59
+
60
+
61
+ ## Template
62
+
63
+ Store ADRs in `docs/adr/` as numbered markdown files:
64
+ `NNNN-title-with-dashes.md`
65
+
66
+
67
+ ```markdown
68
+
69
+ # N. Title
70
+
71
+
72
+ ## Status
73
+
74
+ Proposed | Accepted | Deprecated | Superseded by [ADR-NNNN]
75
+
76
+
77
+ ## Context
78
+
79
+ What is the issue that we're seeing that is motivating this decision or
80
+ change?
81
+
82
+
83
+ ## Decision
84
+
85
+ What is the change that we're proposing and/or doing?
86
+
87
+
88
+ ## Consequences
89
+
90
+ What becomes easier or more difficult to do because of this change?
91
+
92
+ ```
93
+
94
+
95
+ ## Rules
96
+
97
+ - ADRs are immutable once accepted — supersede, don't edit
98
+
99
+ - Keep context focused on forces at play at the time of the decision
100
+
101
+ - Write consequences as both positive and negative impacts
102
+
103
+ - Number sequentially, never reuse numbers
104
+
105
+ - Title should be a short noun phrase (e.g. "Use PostgreSQL for
106
+ persistence")
107
+ git_hooks: []
108
+ setup_notes: []
109
+ permission_policy:
110
+ profile: sensible-defaults
111
+ capabilities:
112
+ read: allow
113
+ edit_write: allow
114
+ search_list: allow
115
+ bash_safe: allow
116
+ bash_unsafe: ask
117
+ web: ask
118
+ task_agent: allow
package/config.yaml ADDED
@@ -0,0 +1,10 @@
1
+ choices:
2
+ process: codemcp-workflows
3
+ practices:
4
+ - adr-nygard
5
+ autonomy: sensible-defaults
6
+ harnesses:
7
+ - universal
8
+ - opencode
9
+ - copilot
10
+ - kiro
@@ -0,0 +1,251 @@
1
+ # ADE CLI — Product Requirements Document
2
+
3
+ > **Scope.** This document covers the **ADE CLI** (`packages/cli`) — the
4
+ > setup and configuration tool. It does not cover the broader ADE information
5
+ > architecture (process, practices, documentation layers) or the runtime
6
+ > MCP servers. For the overall ADE vision, see the project README.
7
+
8
+ ## Problem
9
+
10
+ Coding agents (Claude Code, Copilot, Kiro, etc.) each require their own
11
+ configuration format to wire in MCP servers, instructions, and documentation.
12
+ Teams manually maintain these per-agent config files, leading to drift,
13
+ duplication, and onboarding friction. Adding a new MCP server or skill means
14
+ editing multiple agent-specific files by hand.
15
+
16
+ ADE's information architecture (process, practices, documentation) is
17
+ agent-agnostic, but the last mile — getting it into an agent's config — is not.
18
+
19
+ ## Goal
20
+
21
+ Provide a single CLI that lets engineers declare _what_ their project needs
22
+ (workflows, skills, knowledge, tools) in one place, and generates the correct
23
+ agent-specific configuration for whichever coding agent they use.
24
+
25
+ ## Users
26
+
27
+ - **Individual developers** setting up a project for agentic development.
28
+ - **Tech leads** standardizing agent configuration across a team.
29
+ - **CI/CD pipelines** that need reproducible agent environments.
30
+
31
+ ## Core Concepts
32
+
33
+ ### Facet
34
+
35
+ A user-facing configuration question representing a single concern (e.g.
36
+ "Which workflow framework?" or "Which architecture stack?"). Each facet offers
37
+ a set of options, exactly one of which is selected (or multiple, if the facet
38
+ allows multi-select). Facets can be skippable (no selection = no provisions
39
+ from that facet).
40
+
41
+ ### Option
42
+
43
+ One possible answer to a facet. Each option carries a recipe and optionally
44
+ a list of recommended docsets.
45
+
46
+ ### Recipe
47
+
48
+ A list of provisions that an option brings into the project. A recipe is
49
+ never referenced directly by the user — it is the payload behind an option.
50
+
51
+ A single option often produces **multiple provisions targeting different
52
+ writers**. For example, the "codemcp-workflows" option's recipe contains both
53
+ a `workflows` provision (registers the MCP server) and an `instruction`
54
+ provision (adds workflow guidance to the agent's instructions). This is how
55
+ one logical concept (e.g. "use codemcp workflows") materializes as both
56
+ runtime config and agent instructions.
57
+
58
+ ### Docset
59
+
60
+ Documentation sources recommended by an option. Docsets are a **weak entity
61
+ on Option** — they are always implied by an upstream selection (e.g. picking
62
+ "TanStack" implies TanStack Router/Query/Form/Table docs). The TUI presents
63
+ all implied docsets as pre-selected defaults and allows the user to deselect
64
+ (opt-out, not opt-in). The resolver collects docsets from all selected
65
+ options, deduplicates by id, filters by `excluded_docsets`, and maps them to
66
+ `knowledge_sources` in LogicalConfig. When any knowledge sources are present,
67
+ the resolver automatically adds a `@codemcp/knowledge-server` MCP server
68
+ entry.
69
+
70
+ ### Provision
71
+
72
+ An atomic unit of configuration. Each provision names a **writer** and
73
+ carries writer-specific config. Provision types:
74
+
75
+ | Writer | What it produces |
76
+ | ------------- | ------------------------------------------------------------ |
77
+ | `workflows` | MCP server entry for `@codemcp/workflows-server` |
78
+ | `skills` | Skill definitions (inline or external) for `@codemcp/skills` |
79
+ | `knowledge` | Knowledge source entry for `@codemcp/knowledge` |
80
+ | `instruction` | Raw instruction text for the agent |
81
+
82
+ ### KnowledgeSource
83
+
84
+ Describes the origin of documentation content (a git repository URL ending
85
+ in `.git`). The `@codemcp/knowledge` package manages the physical docset
86
+ artifacts via its programmatic API (`createDocset` + `initDocset`); ADE
87
+ tracks the sources in LogicalConfig.
88
+
89
+ ### LogicalConfig (intermediate representation)
90
+
91
+ Agent-agnostic resolved configuration. This is the contract between the
92
+ resolution step and the agent writers:
93
+
94
+ ```
95
+ mcp_servers: [{ref, command, args, env}]
96
+ instructions: [string]
97
+ skills: [SkillDefinition]
98
+ knowledge_sources: [{name, origin, description}]
99
+ ```
100
+
101
+ ### Agent Writer
102
+
103
+ Translates LogicalConfig into agent-specific files. ADE owns the knowledge of
104
+ every supported agent's config format. When an agent changes its format, only
105
+ its writer needs updating.
106
+
107
+ Supported agents (v1):
108
+
109
+ | Agent | Output files |
110
+ | ----------- | ------------------------------------------------- |
111
+ | Claude Code | `.claude/settings.json`, `AGENTS.md`, skill files |
112
+
113
+ ## User-Facing Files
114
+
115
+ ### `config.yaml` (checked into repo)
116
+
117
+ Records facet selections. The CLI manages most of this file via commands;
118
+ users may add manual entries in the `custom` section.
119
+
120
+ ```yaml
121
+ choices:
122
+ process: codemcp-workflows # single-select facet
123
+ architecture: tanstack # single-select facet
124
+ practices: # multi-select facet
125
+ - conventional-commits
126
+ - tdd-london
127
+ excluded_docsets: # docsets the user opted out of
128
+ - tanstack-table-docs
129
+ custom: # user-managed section (not touched by CLI)
130
+ mcp_servers:
131
+ - ref: custom-server
132
+ command: npx
133
+ args: ["-y", "@acme/mcp-server"]
134
+ instructions:
135
+ - "Always use pnpm, never npm."
136
+ ```
137
+
138
+ The `custom` section is the only part users edit by hand. All other sections
139
+ are maintained exclusively through CLI commands, which simplifies merge
140
+ conflicts and keeps the file structure predictable.
141
+
142
+ ### `config.lock.yaml` (checked into repo)
143
+
144
+ Fully resolved LogicalConfig snapshot. Deterministic — same `config.yaml`
145
+ always produces the same lock file. Enables diffing what actually changed
146
+ when a facet selection or catalog version is updated.
147
+
148
+ ## CLI Commands
149
+
150
+ ```
151
+ ade setup Interactive TUI: walk through facets, confirm docsets,
152
+ write config.yaml + config.lock.yaml + agent files,
153
+ install skills and knowledge sources.
154
+ Re-running setup on an existing project pre-selects
155
+ previous choices as defaults. Warns if a previous
156
+ selection references an option no longer in the catalog.
157
+
158
+ ade install Apply config.lock.yaml → agent files + skills + knowledge.
159
+ Non-interactive. Idempotent. Does not re-resolve — uses
160
+ the lock file as-is.
161
+ ```
162
+
163
+ ## Catalog
164
+
165
+ Facets, options, and recipes live in a **catalog** — TypeScript code shipped
166
+ with ADE. Using code (not data files) gives us type safety, registry
167
+ patterns, and explicit references between options. The catalog is the single
168
+ place that knows which provisions each option requires, and it versions
169
+ naturally with the ADE package.
170
+
171
+ ## V1 Catalog
172
+
173
+ Three facets ship in v1:
174
+
175
+ ### 1. Process Guidance (`process`)
176
+
177
+ How the agent receives workflow and process instructions.
178
+
179
+ | Option | Description |
180
+ | ------------------- | ------------------------------------------------------------------ |
181
+ | `codemcp-workflows` | Uses `@codemcp/workflows-server` MCP for structured EPCC workflows |
182
+ | `native-agents-md` | Uses `AGENTS.md` with inline EPCC instructions (no MCP dependency) |
183
+
184
+ ### 2. Architecture (`architecture`)
185
+
186
+ Stack and framework conventions that shape the project structure.
187
+
188
+ | Option | Description |
189
+ | ---------- | ---------------------------------------------------------------- |
190
+ | `tanstack` | Full-stack conventions for TanStack (Router, Query, Form, Table) |
191
+
192
+ Each architecture option carries inline skills (conventions, design patterns,
193
+ code style, testing) and recommended docsets (git repos for each library's
194
+ documentation).
195
+
196
+ ### 3. Practices (`practices`) — multi-select
197
+
198
+ Composable development practices. Multiple selections allowed.
199
+
200
+ | Option | Description |
201
+ | ---------------------- | ------------------------------------------------------------------ |
202
+ | `conventional-commits` | Structured commit messages following the Conventional Commits spec |
203
+ | `tdd-london` | London-school (mockist) Test-Driven Development |
204
+ | `adr-nygard` | Architecture Decision Records following Nygard's template |
205
+
206
+ Practices with associated documentation (e.g. Conventional Commits) carry
207
+ docsets that are collected alongside architecture docsets.
208
+
209
+ ### Documentation Layer (derived)
210
+
211
+ Documentation is **not** a standalone facet. Instead, each option in
212
+ architecture and practices declares recommended `docsets[]`. The setup TUI
213
+ collects all implied docsets and presents them as an opt-out confirmation
214
+ step. Accepted docsets become `knowledge_sources` in LogicalConfig, which
215
+ triggers:
216
+
217
+ 1. Automatic addition of the `@codemcp/knowledge-server` MCP server entry
218
+ 2. Installation via `@codemcp/knowledge` API (`createDocset` + `initDocset`)
219
+
220
+ ## Non-Goals (initial release)
221
+
222
+ - Runtime agent behavior (that is the MCP servers' job).
223
+ - Managing MCP server lifecycles or health checks.
224
+ - Supporting agent-specific features beyond config file generation.
225
+ - Plugin API for third-party provision writers (keep it internal first).
226
+
227
+ ## Key Design Decisions
228
+
229
+ 1. **ADE CLI owns agent config format knowledge.** MCP servers are pure
230
+ runtime; they do not know or care which agent invoked them.
231
+
232
+ 2. **Provision writers may call package APIs directly.** The `skills` and
233
+ `knowledge` writers import `@codemcp/skills` and `@codemcp/knowledge` as
234
+ TypeScript dependencies. This gives type safety over subprocess invocation.
235
+ CLI fallback remains an option where direct import is impractical.
236
+
237
+ 3. **LogicalConfig is the stable contract.** Provision writers produce it,
238
+ agent writers consume it. Neither side knows about the other.
239
+
240
+ 4. **Lock file is mandatory.** It makes the resolved state explicit,
241
+ reviewable, and reproducible.
242
+
243
+ 5. **User edits are confined to `custom`.** The rest of `config.yaml` is
244
+ CLI-managed, eliminating merge conflicts in the structured sections.
245
+
246
+ 6. **Docsets are a weak entity on Option, not a separate facet.** Documentation
247
+ sources are always implied by an upstream selection. Making documentation a
248
+ standalone facet would create a hollow indirection whose options just mirror
249
+ upstream choices 1:1. Config stores `excluded_docsets` (what the user opted
250
+ out of) rather than selected docsets, keeping the common case (accept all
251
+ recommendations) zero-config.