@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.
- package/.ade/skills/adr-nygard/SKILL.md +45 -0
- package/.ade/skills/conventional-commits/SKILL.md +36 -0
- package/.ade/skills/tanstack-architecture/SKILL.md +25 -0
- package/.ade/skills/tanstack-code/SKILL.md +25 -0
- package/.ade/skills/tanstack-design/SKILL.md +24 -0
- package/.ade/skills/tanstack-testing/SKILL.md +24 -0
- package/.agentskills/skills/adr-nygard/SKILL.md +45 -0
- package/.agentskills/skills/commit/SKILL.md +20 -0
- package/.agentskills/skills/tdd/SKILL.md +10 -0
- package/.beads/README.md +85 -0
- package/.beads/config.yaml +63 -0
- package/.beads/interactions.jsonl +0 -0
- package/.beads/issues.jsonl +46 -0
- package/.beads/last-touched +1 -0
- package/.beads/metadata.json +4 -0
- package/.claude/settings.json +16 -0
- package/.claude/skills/extending-catalog/SKILL.md +41 -0
- package/.cursor/mcp.json +16 -0
- package/.cursor/rules/ade.mdc +10 -0
- package/.github/agents/ade.agent.md +28 -0
- package/.github/copilot-instructions.md +11 -0
- package/.github/workflows/pr.yml +38 -0
- package/.github/workflows/release.yml +124 -0
- package/.husky/post-checkout +2 -0
- package/.husky/post-merge +2 -0
- package/.husky/pre-commit +2 -0
- package/.husky/pre-push +8 -0
- package/.kiro/agents/ade.json +20 -0
- package/.kiro/settings/mcp.json +14 -0
- package/.knowledge/.prettierignore +1 -0
- package/.knowledge/config.yaml +9 -0
- package/.lintstagedrc.js +4 -0
- package/.mcp.json +20 -0
- package/.opencode/agents/ade.md +118 -0
- package/.prettierignore +2 -0
- package/.prettierrc.yaml +3 -0
- package/.vibe/beads-state-ade-autonomy-facet-46zodk.json +29 -0
- package/.vibe/beads-state-ade-fix-no-arch-selected-hvfiio.json +34 -0
- package/.vibe/development-plan-autonomy-facet.md +214 -0
- package/.vibe/development-plan-fix-no-arch-selected.md +103 -0
- package/.vscode/mcp.json +24 -0
- package/LICENSE +21 -0
- package/README.md +293 -0
- package/config.lock.yaml +118 -0
- package/config.yaml +10 -0
- package/docs/CLI-PRD.md +251 -0
- package/docs/CLI-design.md +646 -0
- package/docs/adrs/0001-tui-framework-selection.md +77 -0
- package/eslint.config.mjs +38 -0
- package/opencode.json +17 -0
- package/package.json +79 -0
- package/packages/cli/.prettierignore +1 -0
- package/packages/cli/dist/commands/install.js +39 -0
- package/packages/cli/dist/commands/setup.js +177 -0
- package/packages/cli/dist/index.js +43 -0
- package/packages/cli/dist/knowledge-installer.js +38 -0
- package/packages/cli/dist/version.js +1 -0
- package/packages/cli/eslint.config.mjs +40 -0
- package/packages/cli/nodemon.json +7 -0
- package/packages/cli/package.json +40 -0
- package/packages/cli/src/commands/conventions.integration.spec.ts +267 -0
- package/packages/cli/src/commands/install.integration.spec.ts +123 -0
- package/packages/cli/src/commands/install.spec.ts +169 -0
- package/packages/cli/src/commands/install.ts +63 -0
- package/packages/cli/src/commands/knowledge.integration.spec.ts +129 -0
- package/packages/cli/src/commands/setup.integration.spec.ts +148 -0
- package/packages/cli/src/commands/setup.spec.ts +442 -0
- package/packages/cli/src/commands/setup.ts +252 -0
- package/packages/cli/src/index.ts +52 -0
- package/packages/cli/src/knowledge-installer.spec.ts +111 -0
- package/packages/cli/src/knowledge-installer.ts +54 -0
- package/packages/cli/src/version.ts +1 -0
- package/packages/cli/tsconfig.build.json +8 -0
- package/packages/cli/tsconfig.json +10 -0
- package/packages/cli/tsconfig.vitest.json +7 -0
- package/packages/cli/vitest.config.ts +5 -0
- package/packages/core/.prettierignore +1 -0
- package/packages/core/eslint.config.mjs +40 -0
- package/packages/core/nodemon.json +7 -0
- package/packages/core/package.json +34 -0
- package/packages/core/src/catalog/catalog.spec.ts +570 -0
- package/packages/core/src/catalog/facets/architecture.ts +438 -0
- package/packages/core/src/catalog/facets/autonomy.ts +106 -0
- package/packages/core/src/catalog/facets/backpressure.ts +143 -0
- package/packages/core/src/catalog/facets/practices.ts +173 -0
- package/packages/core/src/catalog/facets/process.ts +50 -0
- package/packages/core/src/catalog/index.ts +93 -0
- package/packages/core/src/config.spec.ts +165 -0
- package/packages/core/src/config.ts +39 -0
- package/packages/core/src/index.ts +55 -0
- package/packages/core/src/registry.spec.ts +145 -0
- package/packages/core/src/registry.ts +70 -0
- package/packages/core/src/resolver.spec.ts +626 -0
- package/packages/core/src/resolver.ts +214 -0
- package/packages/core/src/types.ts +179 -0
- package/packages/core/src/writers/git-hooks.ts +9 -0
- package/packages/core/src/writers/instruction.spec.ts +42 -0
- package/packages/core/src/writers/instruction.ts +8 -0
- package/packages/core/src/writers/knowledge.spec.ts +26 -0
- package/packages/core/src/writers/knowledge.ts +15 -0
- package/packages/core/src/writers/permission-policy.ts +8 -0
- package/packages/core/src/writers/setup-note.ts +9 -0
- package/packages/core/src/writers/skills.spec.ts +109 -0
- package/packages/core/src/writers/skills.ts +9 -0
- package/packages/core/src/writers/workflows.spec.ts +72 -0
- package/packages/core/src/writers/workflows.ts +26 -0
- package/packages/core/tsconfig.build.json +8 -0
- package/packages/core/tsconfig.json +7 -0
- package/packages/core/tsconfig.vitest.json +7 -0
- package/packages/core/vitest.config.ts +5 -0
- package/packages/harnesses/.prettierignore +1 -0
- package/packages/harnesses/eslint.config.mjs +40 -0
- package/packages/harnesses/package.json +35 -0
- package/packages/harnesses/src/index.spec.ts +45 -0
- package/packages/harnesses/src/index.ts +47 -0
- package/packages/harnesses/src/permission-policy.ts +173 -0
- package/packages/harnesses/src/skills-installer.ts +54 -0
- package/packages/harnesses/src/types.ts +12 -0
- package/packages/harnesses/src/util.ts +221 -0
- package/packages/harnesses/src/writers/claude-code.spec.ts +320 -0
- package/packages/harnesses/src/writers/claude-code.ts +107 -0
- package/packages/harnesses/src/writers/cline.spec.ts +212 -0
- package/packages/harnesses/src/writers/cline.ts +24 -0
- package/packages/harnesses/src/writers/copilot.spec.ts +258 -0
- package/packages/harnesses/src/writers/copilot.ts +105 -0
- package/packages/harnesses/src/writers/cursor.spec.ts +219 -0
- package/packages/harnesses/src/writers/cursor.ts +95 -0
- package/packages/harnesses/src/writers/kiro.spec.ts +228 -0
- package/packages/harnesses/src/writers/kiro.ts +89 -0
- package/packages/harnesses/src/writers/opencode.spec.ts +258 -0
- package/packages/harnesses/src/writers/opencode.ts +67 -0
- package/packages/harnesses/src/writers/roo-code.spec.ts +197 -0
- package/packages/harnesses/src/writers/roo-code.ts +71 -0
- package/packages/harnesses/src/writers/universal.spec.ts +134 -0
- package/packages/harnesses/src/writers/universal.ts +84 -0
- package/packages/harnesses/src/writers/windsurf.spec.ts +178 -0
- package/packages/harnesses/src/writers/windsurf.ts +89 -0
- package/packages/harnesses/tsconfig.build.json +8 -0
- package/packages/harnesses/tsconfig.json +7 -0
- package/packages/harnesses/tsconfig.vitest.json +7 -0
- package/packages/harnesses/vitest.config.ts +5 -0
- package/pnpm-workspace.yaml +2 -0
- package/scripts/rename-packages.sh +23 -0
- package/skills-lock.json +20 -0
- package/tsconfig.base.json +25 -0
- package/tsconfig.build.json +7 -0
- package/tsconfig.json +13 -0
- package/turbo.json +47 -0
- package/vitest.config.ts +22 -0
- package/vitest.setup.ts +0 -0
package/config.lock.yaml
ADDED
|
@@ -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
package/docs/CLI-PRD.md
ADDED
|
@@ -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.
|