Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
a3cf939
Add PRD and design document for ADE CLI
claude Mar 14, 2026
398159f
Revise PRD and design doc based on feedback
claude Mar 14, 2026
363435b
Fix PRD and design doc: agent not in config, tool→installable, multi-…
claude Mar 14, 2026
d7efe39
Add facet dependencies and resolution context for provision writers
claude Mar 14, 2026
2e4e1a9
Set up monorepo from template-typescript-monorepo and define v1 scope
claude Mar 14, 2026
f9c8bc5
Restructure design: two packages, interface-based writer registry
claude Mar 14, 2026
8031790
Add ADR 0001: Select @clack/prompts as TUI framework
claude Mar 14, 2026
0d0238e
Restructure packages: shared→core, ade→cli, remove mcp-server
claude Mar 14, 2026
5d7ae9d
Add .prettierignore to exclude dist directories from formatting checks
claude Mar 14, 2026
34e6333
feat(core): add writer registry with ProvisionWriterDef and AgentWrit…
claude Mar 14, 2026
55db837
chore(core): add .prettierignore to exclude dist from format checks
claude Mar 14, 2026
f2e1bf4
feat(core): add instruction provision writer
claude Mar 14, 2026
d8b07cf
feat(core): add workflows provision writer
claude Mar 14, 2026
2584b51
feat(core): add catalog module with process facet
claude Mar 14, 2026
5039605
feat(core): add config module for YAML read/write
claude Mar 14, 2026
1a71f47
feat(core): add resolver engine for config → LogicalConfig resolution
claude Mar 14, 2026
128d034
feat(cli): add setup command with @clack/prompts TUI
claude Mar 14, 2026
bbd9182
fix(cli): remove unused type imports flagged by root eslint
claude Mar 14, 2026
09bd02b
test(cli): add setup integration test in real temp dir
claude Mar 14, 2026
e08125c
chore(cli): add .prettierignore to exclude dist from format checks
claude Mar 14, 2026
45ec7bb
feat(cli): add CLI entry point with setup command
claude Mar 15, 2026
0c01011
feat: complete vertical slice with Claude Code agent writer
claude Mar 15, 2026
9b505f6
fix: point workflows option to @codemcp/workflows package
claude Mar 15, 2026
c05bd96
fix: configure workflows MCP server from responsible-vibe-mcp docs
claude Mar 15, 2026
c3a9651
feat: add real process instructions from responsible-vibe-mcp
claude Mar 15, 2026
6bde4c5
feat(cli): add install command to regenerate agent files from config.…
claude Mar 15, 2026
a8a6bb2
feat(core): add skills support to LogicalConfig and agent writer
claude Mar 15, 2026
a5fb2cd
feat: add conventions facet with TanStack, commits, TDD, and ADR options
claude Mar 15, 2026
0719c7a
fix: add skills field to all LogicalConfig test fixtures
claude Mar 15, 2026
f79245b
test: add conventions facet catalog tests
claude Mar 15, 2026
8cdd07c
refactor: use @codemcp/skills ecosystem for skill management
claude Mar 15, 2026
3799093
refactor: use @codemcp/skills programmatic API for skill installation
claude Mar 16, 2026
89190e3
fix: remove unused readUserConfig import to fix lint error
claude Mar 16, 2026
8fe850e
docs: rename cli docs
mrsimpson Mar 16, 2026
082f996
refactor: use @codemcp/skills@2.3.0 types instead of local .d.ts
claude Mar 16, 2026
62a2a8b
refactor: split conventions facet into architecture and practices
claude Mar 16, 2026
f4ab186
docs: keep conventions as the conceptual layer with architecture/prac…
claude Mar 16, 2026
c07b793
feat: add docsets as weak entity on Option for documentation layer
claude Mar 16, 2026
ddd4e07
feat: implement knowledge writer and installer for documentation layer
claude Mar 16, 2026
38c0b0d
refactor: use @codemcp/knowledge's own type declarations
claude Mar 16, 2026
a3838f9
fix: use .git URLs for docset origins and add knowledge integration t…
claude Mar 16, 2026
355c220
docs: align PRD and design doc with current implementation
claude Mar 16, 2026
a5456f5
refactor: install reads lock file only, setup re-runs with defaults
claude Mar 16, 2026
c855e2a
feat: add multi-harness support with @ade/harnesses package
claude Mar 17, 2026
e2715c4
fix: resolve lint errors in @ade/harnesses package
claude Mar 17, 2026
62cce32
fix: add .prettierignore to @ade/harnesses to exclude dist
claude Mar 17, 2026
7f09d01
fix: correct type error in install integration test
claude Mar 17, 2026
4039fc4
feat: add Kiro and OpenCode harness writers with tool permissions
claude Mar 17, 2026
4ae91cf
fix: remove unused readFile import in kiro writer
claude Mar 17, 2026
d0c5910
feat: add universal harness, custom agents, and improve tool fidelity
claude Mar 17, 2026
ad23cfb
fix: remove unused mkdir import in universal writer
claude Mar 17, 2026
13888c6
fix: update Copilot writer description to cover VS Code + CLI
claude Mar 17, 2026
fb954f2
refactor: clean up facet separation, knowledge init, and copilot output
claude Mar 17, 2026
49b72b1
Centralize agentskills MCP entry in resolver, remove duplication from…
claude Mar 17, 2026
f103c02
Replace hardcoded agent list in README with link to harness writers s…
claude Mar 17, 2026
5b866a0
Refactor harness writers for DRY, move skills-installer, remove depre…
claude Mar 17, 2026
a17072c
docs: position ADE within harness engineering landscape
claude Mar 17, 2026
a84fd71
docs: update tagline to reference harness engineering
claude Mar 17, 2026
5d423d5
feat: add extending-catalog skill for ADE contributors
claude Mar 17, 2026
8617db2
refactor: make extending-catalog skill more concise
claude Mar 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions .claude/skills/extending-catalog/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
---
name: extending-catalog
description: Extends the ADE catalog with new facets, options, or practices. Use when adding a new architecture (e.g. Next.js), a new practice (e.g. Trunk-Based Development), or a new facet to the catalog.
---

# Extending the ADE catalog

Catalog: `packages/core/src/catalog/`. Facets: one file each under `facets/`. Types: `packages/core/src/types.ts`.

## Adding an option

Single-file change. Append an `Option` to the facet's `options` array. Read the existing facet file for the shape — follow the pattern already there.

- Architecture options go in `facets/architecture.ts` (single-select)
- Practice options go in `facets/practices.ts` (multi-select, stack-independent)
- Each option's `recipe` uses existing writers: `skills`, `workflows`, `instruction`, `mcp-server`, `knowledge`, `installable`
- Inline skill bodies should be concise — only add context Claude doesn't already have
- For third-party skills use `ExternalSkill`: `{ name, source }` instead of `{ name, description, body }`
- `docsets` are optional — only add repos with genuinely useful reference docs

## Adding a facet

1. Create `facets/<name>.ts` — export a `Facet` object. Read an existing facet for the shape
2. Register it in `packages/core/src/catalog/index.ts` — add to the `facets` array
3. The CLI auto-discovers facets from the array — no UI changes needed

Key decisions: `required` (must every project choose?), `multiSelect` (composable or mutually exclusive?), `dependsOn` (resolved after which facets?).

## Adding a provision writer

Expensive — touches types, registry, resolver, and every harness writer. Avoid unless existing writers cannot express the output.

1. Extend `ProvisionWriter` union in `types.ts`
2. Implement `ProvisionWriterDef` with `write(config, context) → Partial<LogicalConfig>`
3. Register in `WriterRegistry`
4. If needed, extend `LogicalConfig` and update merge logic in `resolver.ts`
5. Update every harness writer in `packages/harnesses/src/writers/`

## Resolution flow

`UserConfig.choices` → `resolve()` iterates facets → matches options → runs each provision's writer → merges into `LogicalConfig` → harness writers emit agent-specific files. See `packages/core/src/resolver.ts`.
38 changes: 38 additions & 0 deletions .github/workflows/pr.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
name: PR

on:
pull_request:
branches: [main]

jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v5
with:
fetch-depth: 0

- name: Setup pnpm
uses: pnpm/action-setup@v4

- name: Setup Node.js
uses: actions/setup-node@v5
with:
node-version: "22"
cache: "pnpm"

- name: Install dependencies
run: pnpm install

- name: Check formatting
run: pnpm run format:check:all

- name: Run linting
run: pnpm run lint:all

- name: Build project
run: pnpm run build

- name: Run tests
run: pnpm test
124 changes: 124 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
name: Release and Publish

on:
push:
branches: [main]

permissions:
contents: write
packages: write

jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v5
with:
fetch-depth: 0

- name: Setup pnpm
uses: pnpm/action-setup@v4

- name: Setup Node.js
uses: actions/setup-node@v5
with:
node-version: "22"
cache: "pnpm"

- name: Install dependencies
run: pnpm install

- name: Check formatting
run: pnpm run format:check:all

- name: Run linting
run: pnpm run lint:all

- name: Build project
run: pnpm run build

- name: Run tests
run: pnpm test

release:
needs: test
runs-on: ubuntu-latest
steps:
- name: Generate GitHub App Token
id: generate_token
uses: tibdex/github-app-token@v1
with:
app_id: ${{ vars.VERSION_BUMPER_APPID }}
private_key: ${{ secrets.VERSION_BUMPER_SECRET }}

- name: Checkout
uses: actions/checkout@v5
with:
fetch-depth: 0
token: ${{ steps.generate_token.outputs.token }}

- name: Setup pnpm
uses: pnpm/action-setup@v4

- name: Setup Node.js
uses: actions/setup-node@v5
with:
node-version: "22"
cache: "pnpm"
registry-url: "https://registry.npmjs.org"

- name: Install dependencies
run: pnpm install

- name: Build project
run: pnpm run build

- name: Bump version and create tag
id: version
uses: mathieudutour/github-tag-action@v6.2
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
default_bump: patch
tag_prefix: v

- name: Update package.json version
if: steps.version.outputs.new_tag
run: |
NEW_VERSION=${{ steps.version.outputs.new_version }}

# Update root package.json
pnpm version $NEW_VERSION --no-git-tag-version

# Update all workspace package versions
pnpm -r exec pnpm version $NEW_VERSION --no-git-tag-version

git config --local user.email "action@github.com"
git config --local user.name "GitHub Action"
git add package.json packages/*/package.json pnpm-lock.yaml
git commit -m "chore: bump version to $NEW_VERSION [skip ci]" || exit 0
git push
env:
GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }}

- name: Create GitHub Release
if: steps.version.outputs.new_tag
uses: softprops/action-gh-release@v1
with:
tag_name: ${{ steps.version.outputs.new_tag }}
name: Release ${{ steps.version.outputs.new_tag }}
body: ${{ steps.version.outputs.changelog }}
draft: false
prerelease: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Publish to npm
if: steps.version.outputs.new_tag
run: |
# Publish all packages in workspace
# pnpm -r publishes packages in topological order (dependencies first)
# Root package is private and will be skipped automatically
pnpm -r publish --no-git-checks
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
23 changes: 23 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Generated files
node_modules
dist
.DS_Store
.crowd

# Typescript
*.tsbuildinfo
*.d.ts

# Turborepo
.turbo

# Jest
coverage
.coverage

# Env files
.env*
!.env.example

# vitepress
docs/.vitepress/cache
2 changes: 2 additions & 0 deletions .husky/post-checkout
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Automate and ensure dependencies are installed/synced with the branch's codebase
pnpm install
2 changes: 2 additions & 0 deletions .husky/post-merge
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Automate and ensure dependencies are installed/synced with the branch's codebase
pnpm install
2 changes: 2 additions & 0 deletions .husky/pre-commit
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Ensure files are linted before commit
pnpm lint-staged
8 changes: 8 additions & 0 deletions .husky/pre-push
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# Ensure Typescript files have no errors before pushing
# Ensure there is no linting or formatting errors before pushing
pnpm run lint:all
pnpm run format:check:all
pnpm run typecheck:all

# Run unit tests
pnpm test
4 changes: 4 additions & 0 deletions .lintstagedrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
export default {
"*": "prettier --write --ignore-unknown",
"*.js,*.ts": "eslint --fix"
};
1 change: 1 addition & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
dist
3 changes: 3 additions & 0 deletions .prettierrc.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
tabWidth: 2
trailingComma: "none"
useTabs: false
21 changes: 21 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
MIT License

Copyright (c) 2023 Luke Baker

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Loading