specrails-core 1.7.2 → 2.0.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/VERSION +1 -1
- package/bin/doctor.sh +13 -4
- package/commands/setup.md +154 -30
- package/docs/changelog.md +1 -1
- package/docs/deployment.md +1 -1
- package/docs/getting-started.md +1 -1
- package/docs/installation.md +25 -1
- package/docs/research/codex-compatibility-analysis.md +365 -0
- package/docs/research/mcp-feasibility-analysis.md +382 -0
- package/docs/testing/test-matrix-codex.md +123 -0
- package/docs/user-docs/cli-reference.md +416 -0
- package/docs/user-docs/codex-vs-claude-code.md +146 -0
- package/docs/user-docs/faq.md +137 -0
- package/docs/user-docs/getting-started-codex.md +193 -0
- package/docs/user-docs/installation.md +177 -0
- package/docs/user-docs/quick-start.md +158 -0
- package/docs/workflows.md +65 -0
- package/install.sh +156 -49
- package/integration-contract.json +14 -3
- package/package.json +1 -1
- package/templates/settings/codex-config.toml +14 -0
- package/templates/settings/codex-rules.star +12 -0
- package/templates/skills/sr-batch-implement/SKILL.md +292 -0
- package/templates/skills/sr-compat-check/SKILL.md +275 -0
- package/templates/skills/sr-health-check/SKILL.md +531 -0
- package/templates/skills/sr-implement/SKILL.md +1109 -0
- package/templates/skills/sr-product-backlog/SKILL.md +199 -0
- package/templates/skills/sr-refactor-recommender/SKILL.md +216 -0
- package/templates/skills/sr-update-backlog/SKILL.md +275 -0
- package/templates/skills/sr-why/SKILL.md +106 -0
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
# MCP Server for specrails-core — Feasibility Analysis
|
|
2
|
+
|
|
3
|
+
**Date:** 2026-03-21
|
|
4
|
+
**Author:** CTO of Engineering
|
|
5
|
+
**Status:** Research Complete — Recommendation Included
|
|
6
|
+
**Task:** SPEA-480
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Executive Summary
|
|
11
|
+
|
|
12
|
+
This document evaluates whether building an MCP (Model Context Protocol) server for specrails-core is strategically sound. After thorough analysis of the current architecture, the MCP protocol capabilities, and the product roadmap, **the recommendation is YES — with a focused, phased scope**.
|
|
13
|
+
|
|
14
|
+
An MCP server should expose **read-only knowledge access** and **lightweight utility operations**, while the multi-agent orchestration pipeline stays in Claude Code commands. This approach maximizes cross-client reach with minimal maintenance overhead.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 1. What is MCP?
|
|
19
|
+
|
|
20
|
+
The **Model Context Protocol** is Anthropic's open standard for connecting AI models to external data sources and tools. It defines three primitives:
|
|
21
|
+
|
|
22
|
+
| Primitive | Purpose | Direction |
|
|
23
|
+
|-----------|---------|-----------|
|
|
24
|
+
| **Resources** | Expose read-only data (files, records, configs) | Server → Client |
|
|
25
|
+
| **Tools** | Actions that modify state or compute results | Client → Server → Client |
|
|
26
|
+
| **Prompts** | Parameterized prompt templates | Server → Client |
|
|
27
|
+
|
|
28
|
+
MCP servers run as local processes (stdio) or remote services (HTTP+SSE). Any MCP-compatible client can connect: Claude Desktop, Claude Code, Cursor, Windsurf, VS Code (Copilot), Zed, and others.
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## 2. Current specrails-core Architecture (No MCP)
|
|
33
|
+
|
|
34
|
+
### Distribution & Execution Model
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
npx specrails-core@latest init → install.sh (bash) → /setup (Claude Code command)
|
|
38
|
+
│ │
|
|
39
|
+
├── Copy templates ├── Detect codebase
|
|
40
|
+
├── Create dirs ├── Generate agents
|
|
41
|
+
└── Write manifest └── Substitute placeholders
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Runtime Architecture
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
Claude Code
|
|
48
|
+
├── Commands (/sr:implement, /sr:product-backlog, ...)
|
|
49
|
+
├── Skills (/opsx:new, /opsx:apply, /opsx:ff, ...)
|
|
50
|
+
├── Agents (sr-architect, sr-developer, sr-reviewer, ...)
|
|
51
|
+
├── Rules (.claude/rules/ — layer-specific conventions)
|
|
52
|
+
└── Agent Memory (.claude/agent-memory/ — explanations, failures)
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Key Characteristics
|
|
56
|
+
|
|
57
|
+
- **Zero-daemon**: No running processes — everything is files + CLI commands
|
|
58
|
+
- **Claude Code-native**: Tight integration with Agent tool, worktrees, Skills API
|
|
59
|
+
- **CLI-based integrations**: GitHub CLI, OpenSpec CLI, npm — no HTTP APIs
|
|
60
|
+
- **Local-first**: All state stored on filesystem (JSON, YAML, Markdown)
|
|
61
|
+
- **12 specialized agents** with orchestrated multi-phase pipeline
|
|
62
|
+
- **80+ template placeholders** for codebase-adaptive generation
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## 3. What Would an MCP Server Expose?
|
|
67
|
+
|
|
68
|
+
### 3.1 Resources (Read-Only Data)
|
|
69
|
+
|
|
70
|
+
| Resource | URI Pattern | Description |
|
|
71
|
+
|----------|-------------|-------------|
|
|
72
|
+
| Specs | `specrails://specs/{name}` | OpenSpec specifications (source of truth) |
|
|
73
|
+
| Active Changes | `specrails://changes/{name}` | Active OpenSpec changes with status |
|
|
74
|
+
| Archived Changes | `specrails://changes/archive/{name}` | Historical change records |
|
|
75
|
+
| Personas | `specrails://personas/{name}` | VPC persona profiles (jobs, pains, gains) |
|
|
76
|
+
| Agent Config | `specrails://agents/{name}` | Agent personality & configuration |
|
|
77
|
+
| Layer Rules | `specrails://rules/{layer}` | Per-layer coding conventions |
|
|
78
|
+
| Failure Records | `specrails://memory/failures` | CI failure patterns and prevention rules |
|
|
79
|
+
| Explanations | `specrails://memory/explanations` | Implementation decision records |
|
|
80
|
+
| Project Config | `specrails://config` | CLAUDE.md, integration contract, manifest |
|
|
81
|
+
|
|
82
|
+
### 3.2 Tools (Actions)
|
|
83
|
+
|
|
84
|
+
| Tool | Input | Output | Side Effects |
|
|
85
|
+
|------|-------|--------|--------------|
|
|
86
|
+
| `specrails_doctor` | (none) | Health check report | None (read-only) |
|
|
87
|
+
| `specrails_score_feature` | Feature description | VPC scores per persona | None |
|
|
88
|
+
| `specrails_analyze_codebase` | Project root path | Stack, architecture, conventions | None |
|
|
89
|
+
| `specrails_list_changes` | (optional filters) | Active changes with status | None |
|
|
90
|
+
| `specrails_get_change_status` | Change name | Artifact status, task progress | None |
|
|
91
|
+
| `specrails_query_failures` | File glob pattern | Matching failure records | None |
|
|
92
|
+
| `specrails_query_backlog` | (optional filters) | GitHub Issues with VPC scores | None |
|
|
93
|
+
| `specrails_check_compat` | Version string | Integration contract validation | None |
|
|
94
|
+
|
|
95
|
+
### 3.3 Prompts (Templates)
|
|
96
|
+
|
|
97
|
+
| Prompt | Parameters | Purpose |
|
|
98
|
+
|--------|------------|---------|
|
|
99
|
+
| `review_with_conventions` | `layer`, `files` | Review prompt with auto-loaded layer rules |
|
|
100
|
+
| `explore_feature` | `description` | VPC-aware feature exploration prompt |
|
|
101
|
+
| `implement_context` | `change_name` | Context bundle for a specific change |
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## 4. Strategic Analysis
|
|
106
|
+
|
|
107
|
+
### 4.1 Arguments FOR an MCP Server
|
|
108
|
+
|
|
109
|
+
#### A. Cross-Client Reach (High Impact)
|
|
110
|
+
|
|
111
|
+
Currently specrails-core **only works inside Claude Code**. An MCP server makes the knowledge layer accessible from:
|
|
112
|
+
|
|
113
|
+
- **Claude Desktop** — Product managers can query personas and backlog without a terminal
|
|
114
|
+
- **Cursor / Windsurf** — Developers in other IDEs get specrails context
|
|
115
|
+
- **VS Code (Copilot)** — Teams using GitHub Copilot can still access specs and conventions
|
|
116
|
+
- **Custom tooling** — Any MCP client can connect
|
|
117
|
+
|
|
118
|
+
This dramatically expands the addressable market beyond Claude Code-only users.
|
|
119
|
+
|
|
120
|
+
#### B. Tool Ecosystem Composability (Medium Impact)
|
|
121
|
+
|
|
122
|
+
MCP is becoming the standard protocol for AI tool integration. As an MCP server, specrails-core can be **composed** with:
|
|
123
|
+
|
|
124
|
+
- Database MCP servers (query production data alongside specs)
|
|
125
|
+
- Monitoring MCP servers (correlate failures with system metrics)
|
|
126
|
+
- CI/CD MCP servers (trigger builds with specrails context)
|
|
127
|
+
|
|
128
|
+
#### C. Structured API for Hub Integration (High Impact)
|
|
129
|
+
|
|
130
|
+
specrails-hub currently uses a rigid `integration-contract.json` for core↔hub communication. An MCP server provides a **dynamic, structured API** that hub can query:
|
|
131
|
+
|
|
132
|
+
```
|
|
133
|
+
Current: Hub reads static JSON contract → spawns CLI commands
|
|
134
|
+
With MCP: Hub connects as MCP client → queries resources, invokes tools
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
This eliminates the version-coupling problem where hub must know core's CLI interface.
|
|
138
|
+
|
|
139
|
+
#### D. Separation of Concerns (Medium Impact)
|
|
140
|
+
|
|
141
|
+
The current architecture tightly couples specrails to Claude Code's command/skill system. MCP creates a clean **knowledge API layer** separate from the **orchestration layer**:
|
|
142
|
+
|
|
143
|
+
```
|
|
144
|
+
┌─────────────────────────────────────────────┐
|
|
145
|
+
│ MCP Server (Knowledge) │
|
|
146
|
+
│ Specs, Personas, Memory, Config, Analysis │
|
|
147
|
+
├─────────────────────────────────────────────┤
|
|
148
|
+
│ Claude Code (Orchestration) │
|
|
149
|
+
│ /sr:implement, /sr:batch-implement, agents │
|
|
150
|
+
└─────────────────────────────────────────────┘
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
#### E. Remote/Multi-Repo Scenarios (Future Value)
|
|
154
|
+
|
|
155
|
+
MCP supports HTTP+SSE transport. A centralized specrails MCP server could:
|
|
156
|
+
|
|
157
|
+
- Serve specs across multiple repos from one instance
|
|
158
|
+
- Enable cross-repo knowledge queries
|
|
159
|
+
- Power a team-wide development dashboard
|
|
160
|
+
|
|
161
|
+
### 4.2 Arguments AGAINST an MCP Server
|
|
162
|
+
|
|
163
|
+
#### A. Current System Works Well
|
|
164
|
+
|
|
165
|
+
Skills and commands already provide strong Claude Code integration. MCP adds complexity for users who only use Claude Code.
|
|
166
|
+
|
|
167
|
+
**Counter:** MCP doesn't replace commands/skills — it supplements them with cross-client access.
|
|
168
|
+
|
|
169
|
+
#### B. Orchestration Can't Move to MCP
|
|
170
|
+
|
|
171
|
+
The `/sr:implement` pipeline requires Claude Code's Agent tool (subagent spawning, worktree isolation, background execution). MCP tools are request/response — they can't replicate multi-phase orchestration.
|
|
172
|
+
|
|
173
|
+
**Counter:** This is exactly why the recommendation is scoped. Orchestration stays in Claude Code; only knowledge access moves to MCP.
|
|
174
|
+
|
|
175
|
+
#### C. Maintenance Overhead
|
|
176
|
+
|
|
177
|
+
Two interfaces to maintain (skills + MCP). Template changes could require updates in both.
|
|
178
|
+
|
|
179
|
+
**Counter:** MCP resources are read-only wrappers around existing files. No template duplication — the MCP server reads the same files that skills read.
|
|
180
|
+
|
|
181
|
+
#### D. MCP Server Process Overhead
|
|
182
|
+
|
|
183
|
+
Currently specrails-core is zero-daemon. Adding an MCP server means a running process.
|
|
184
|
+
|
|
185
|
+
**Counter:** MCP stdio servers start on-demand (launched by the client). No persistent daemon needed. The MCP server binary can ship with the npm package.
|
|
186
|
+
|
|
187
|
+
#### E. Protocol Maturity
|
|
188
|
+
|
|
189
|
+
MCP is still evolving. Breaking changes in the protocol could require updates.
|
|
190
|
+
|
|
191
|
+
**Counter:** MCP has reached stable specification status. Core primitives (resources, tools, prompts) are unlikely to change fundamentally.
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## 5. Competitive Landscape
|
|
196
|
+
|
|
197
|
+
| Product | MCP Support | Notes |
|
|
198
|
+
|---------|-------------|-------|
|
|
199
|
+
| **Cursor** | MCP client | Users can connect to any MCP server |
|
|
200
|
+
| **Windsurf** | MCP client | Growing MCP ecosystem |
|
|
201
|
+
| **Continue.dev** | MCP client | Open-source IDE extension |
|
|
202
|
+
| **Cline** | MCP client | VS Code extension with MCP |
|
|
203
|
+
| **aider** | No MCP | CLI-only, no extensibility protocol |
|
|
204
|
+
| **Devin** | No MCP | Closed platform |
|
|
205
|
+
| **specrails-core** | **No MCP (current)** | Claude Code-only |
|
|
206
|
+
|
|
207
|
+
Having MCP support positions specrails-core as the **only product-driven development framework accessible from any MCP client**.
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
## 6. Recommended Architecture
|
|
212
|
+
|
|
213
|
+
### 6.1 Server Design
|
|
214
|
+
|
|
215
|
+
```
|
|
216
|
+
specrails-core/
|
|
217
|
+
├── src/
|
|
218
|
+
│ └── mcp/
|
|
219
|
+
│ ├── server.ts # MCP server entry point
|
|
220
|
+
│ ├── resources/
|
|
221
|
+
│ │ ├── specs.ts # OpenSpec spec resources
|
|
222
|
+
│ │ ├── changes.ts # Change status resources
|
|
223
|
+
│ │ ├── personas.ts # VPC persona resources
|
|
224
|
+
│ │ ├── agents.ts # Agent config resources
|
|
225
|
+
│ │ ├── memory.ts # Memory/failure resources
|
|
226
|
+
│ │ └── config.ts # Project config resources
|
|
227
|
+
│ ├── tools/
|
|
228
|
+
│ │ ├── doctor.ts # Health check tool
|
|
229
|
+
│ │ ├── score-feature.ts # VPC scoring tool
|
|
230
|
+
│ │ ├── analyze.ts # Codebase analysis tool
|
|
231
|
+
│ │ ├── query-backlog.ts # Backlog query tool
|
|
232
|
+
│ │ └── change-status.ts # Change status tool
|
|
233
|
+
│ └── prompts/
|
|
234
|
+
│ ├── review.ts # Review with conventions
|
|
235
|
+
│ └── explore.ts # VPC-aware exploration
|
|
236
|
+
├── bin/
|
|
237
|
+
│ └── specrails-mcp.js # MCP stdio entry point
|
|
238
|
+
└── package.json # Add "specrails-mcp" bin entry
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
### 6.2 Transport & Distribution
|
|
242
|
+
|
|
243
|
+
```json
|
|
244
|
+
// Client configuration (e.g., claude_desktop_config.json)
|
|
245
|
+
{
|
|
246
|
+
"mcpServers": {
|
|
247
|
+
"specrails": {
|
|
248
|
+
"command": "npx",
|
|
249
|
+
"args": ["specrails-core@latest", "mcp"],
|
|
250
|
+
"env": {
|
|
251
|
+
"SPECRAILS_PROJECT_ROOT": "/path/to/project"
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
- **Transport**: stdio (launched by client on-demand)
|
|
259
|
+
- **Distribution**: Ships with existing npm package — no separate install
|
|
260
|
+
- **CLI entry**: `specrails-core mcp` starts the MCP server
|
|
261
|
+
- **Project detection**: Uses `SPECRAILS_PROJECT_ROOT` env var or auto-detects from cwd
|
|
262
|
+
|
|
263
|
+
### 6.3 Technology Choice
|
|
264
|
+
|
|
265
|
+
| Option | Pros | Cons |
|
|
266
|
+
|--------|------|------|
|
|
267
|
+
| **TypeScript (recommended)** | Same language as rest of specrails ecosystem, official `@modelcontextprotocol/sdk` package, type safety | Build step required |
|
|
268
|
+
| Python | Official SDK, large MCP community | Different language from rest of stack |
|
|
269
|
+
| Bash | Consistent with install.sh | No MCP SDK, painful to implement |
|
|
270
|
+
|
|
271
|
+
**Recommendation: TypeScript** using `@modelcontextprotocol/sdk`.
|
|
272
|
+
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
## 7. Implementation Phases
|
|
276
|
+
|
|
277
|
+
### Phase 1 — Core Resources (MVP)
|
|
278
|
+
|
|
279
|
+
**Effort:** ~2-3 days
|
|
280
|
+
**Value:** Immediate cross-client access to specrails knowledge
|
|
281
|
+
|
|
282
|
+
| Deliverable | Description |
|
|
283
|
+
|-------------|-------------|
|
|
284
|
+
| MCP server scaffold | TypeScript server with stdio transport |
|
|
285
|
+
| Spec resources | Read OpenSpec specs by name |
|
|
286
|
+
| Change resources | List active changes, get status |
|
|
287
|
+
| Persona resources | Read VPC personas |
|
|
288
|
+
| Config resource | Read project CLAUDE.md and layer rules |
|
|
289
|
+
| `specrails-core mcp` CLI | Start MCP server from existing npm package |
|
|
290
|
+
|
|
291
|
+
### Phase 2 — Tools & Memory
|
|
292
|
+
|
|
293
|
+
**Effort:** ~2-3 days
|
|
294
|
+
**Value:** Actionable intelligence from any MCP client
|
|
295
|
+
|
|
296
|
+
| Deliverable | Description |
|
|
297
|
+
|-------------|-------------|
|
|
298
|
+
| `specrails_doctor` | Health check tool |
|
|
299
|
+
| `specrails_score_feature` | VPC scoring tool |
|
|
300
|
+
| `specrails_query_failures` | Failure pattern queries |
|
|
301
|
+
| `specrails_query_memory` | Agent memory search |
|
|
302
|
+
| `specrails_list_changes` | Change listing with filters |
|
|
303
|
+
|
|
304
|
+
### Phase 3 — Hub Integration
|
|
305
|
+
|
|
306
|
+
**Effort:** ~3-5 days
|
|
307
|
+
**Value:** Replace rigid integration contract with dynamic MCP API
|
|
308
|
+
|
|
309
|
+
| Deliverable | Description |
|
|
310
|
+
|-------------|-------------|
|
|
311
|
+
| Hub MCP client | specrails-hub connects as MCP client |
|
|
312
|
+
| Dynamic command discovery | Hub queries available commands via MCP |
|
|
313
|
+
| Real-time spec access | Hub reads specs through MCP resources |
|
|
314
|
+
| Status streaming | Change progress via MCP notifications |
|
|
315
|
+
|
|
316
|
+
### Phase 4 — Advanced Features
|
|
317
|
+
|
|
318
|
+
**Effort:** ~3-5 days
|
|
319
|
+
**Value:** Full ecosystem integration
|
|
320
|
+
|
|
321
|
+
| Deliverable | Description |
|
|
322
|
+
|-------------|-------------|
|
|
323
|
+
| `specrails_analyze_codebase` | Codebase analysis tool |
|
|
324
|
+
| `specrails_query_backlog` | VPC-scored backlog queries |
|
|
325
|
+
| Prompt templates | Review and explore prompts with context |
|
|
326
|
+
| Remote transport | HTTP+SSE for multi-repo scenarios |
|
|
327
|
+
|
|
328
|
+
---
|
|
329
|
+
|
|
330
|
+
## 8. What Stays in Claude Code (NOT in MCP)
|
|
331
|
+
|
|
332
|
+
These capabilities require Claude Code's runtime and should NOT be exposed via MCP:
|
|
333
|
+
|
|
334
|
+
| Capability | Reason |
|
|
335
|
+
|------------|--------|
|
|
336
|
+
| `/sr:implement` pipeline | Requires Agent tool (subagent spawning) |
|
|
337
|
+
| `/sr:batch-implement` | Requires git worktree isolation |
|
|
338
|
+
| Agent invocation (sr-*) | Requires Claude Code's Agent subagent system |
|
|
339
|
+
| OpenSpec artifact creation | Interactive, context-heavy (requires conversation) |
|
|
340
|
+
| `/setup` wizard | Multi-step interactive configuration |
|
|
341
|
+
| Template substitution (write) | Modifies project files, requires user consent |
|
|
342
|
+
|
|
343
|
+
**Principle:** MCP = knowledge access. Claude Code = orchestration engine.
|
|
344
|
+
|
|
345
|
+
---
|
|
346
|
+
|
|
347
|
+
## 9. Risk Assessment
|
|
348
|
+
|
|
349
|
+
| Risk | Probability | Impact | Mitigation |
|
|
350
|
+
|------|-------------|--------|------------|
|
|
351
|
+
| MCP protocol breaking changes | Low | Medium | Pin SDK version, follow changelog |
|
|
352
|
+
| Maintenance burden (two interfaces) | Medium | Low | MCP reads same files as skills — no duplication |
|
|
353
|
+
| User confusion (MCP vs commands) | Medium | Low | Clear docs: "MCP for access, commands for action" |
|
|
354
|
+
| Security (exposing project data) | Low | Medium | Local stdio only (no remote by default), respect .gitignore |
|
|
355
|
+
| Scope creep (adding orchestration to MCP) | Medium | High | Strict scope boundary: no write operations in Phase 1-2 |
|
|
356
|
+
|
|
357
|
+
---
|
|
358
|
+
|
|
359
|
+
## 10. Success Metrics
|
|
360
|
+
|
|
361
|
+
| Metric | Target | Measurement |
|
|
362
|
+
|--------|--------|-------------|
|
|
363
|
+
| Cross-client usage | 3+ MCP clients connect in first month | MCP server logs |
|
|
364
|
+
| Hub integration latency | 50% reduction vs CLI spawning | Hub performance metrics |
|
|
365
|
+
| Developer adoption | 20% of users configure MCP alongside commands | npm download analytics |
|
|
366
|
+
| Knowledge query volume | 100+ resource reads/day across users | MCP server telemetry |
|
|
367
|
+
|
|
368
|
+
---
|
|
369
|
+
|
|
370
|
+
## 11. Conclusion
|
|
371
|
+
|
|
372
|
+
Building an MCP server for specrails-core is **strategically sound** because:
|
|
373
|
+
|
|
374
|
+
1. **It opens a new distribution channel** — any MCP client becomes a specrails client
|
|
375
|
+
2. **It improves hub integration** — dynamic API replaces rigid contract
|
|
376
|
+
3. **It positions specrails uniquely** — only product-driven dev framework with MCP support
|
|
377
|
+
4. **It's low-risk** — read-only resources, no orchestration duplication, ships with existing package
|
|
378
|
+
5. **The effort is proportional** — Phase 1 MVP in 2-3 days, full implementation in ~2 weeks
|
|
379
|
+
|
|
380
|
+
The key insight is that specrails-core has two layers: **knowledge** (specs, personas, memory, config) and **orchestration** (agent pipeline, worktrees, CI). MCP is the perfect fit for the knowledge layer, while Claude Code commands remain the right tool for orchestration.
|
|
381
|
+
|
|
382
|
+
**Recommendation: Proceed with Phase 1 (Core Resources MVP).**
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# Test Matrix — specrails Cross-Platform (Claude Code + Codex)
|
|
2
|
+
|
|
3
|
+
Last updated: 2026-03-21
|
|
4
|
+
Epic: [SPEA-505](/SPEA/issues/SPEA-505) — Codex Compatibility Approach B
|
|
5
|
+
|
|
6
|
+
## Legend
|
|
7
|
+
|
|
8
|
+
| Symbol | Meaning |
|
|
9
|
+
|--------|---------|
|
|
10
|
+
| ✅ | Works / tested |
|
|
11
|
+
| ❌ | Not supported |
|
|
12
|
+
| 🔄 | In progress (implementation pending) |
|
|
13
|
+
| ⚠️ | Partial / with caveats |
|
|
14
|
+
| — | Not applicable |
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Feature Coverage by CLI
|
|
19
|
+
|
|
20
|
+
### Installation & Provider Detection (SPEA-506)
|
|
21
|
+
|
|
22
|
+
| Feature | Claude Code only | Codex only | Both CLIs | Neither CLI |
|
|
23
|
+
|---------|:-:|:-:|:-:|:-:|
|
|
24
|
+
| Auto-detect `claude` binary | ✅ | — | ✅ | — |
|
|
25
|
+
| Auto-detect `codex` binary | — | ✅ | ✅ | — |
|
|
26
|
+
| Prompt user to choose CLI (dual) | — | — | 🔄 | — |
|
|
27
|
+
| Exit with clear error message | — | — | — | 🔄 |
|
|
28
|
+
| Output dir `.claude/` created | ✅ | ❌ | 🔄 | — |
|
|
29
|
+
| Output dir `.codex/` created | ❌ | 🔄 | 🔄 | — |
|
|
30
|
+
| `CLAUDE.md` instruction file | ✅ | ❌ | 🔄 | — |
|
|
31
|
+
| `AGENTS.md` instruction file | ❌ | 🔄 | 🔄 | — |
|
|
32
|
+
| `--provider claude` flag override | ✅ | — | 🔄 | — |
|
|
33
|
+
| `--provider codex` flag override | — | ✅ | 🔄 | — |
|
|
34
|
+
|
|
35
|
+
### Skills & Commands (SPEA-507)
|
|
36
|
+
|
|
37
|
+
| Feature | Claude Code | Codex |
|
|
38
|
+
|---------|:-:|:-:|
|
|
39
|
+
| Legacy slash commands `.claude/commands/sr/` | ✅ | ❌ |
|
|
40
|
+
| SKILL.md format `.claude/skills/sr-*/` | 🔄 | 🔄 |
|
|
41
|
+
| `sr:implement` skill | ✅ | 🔄 |
|
|
42
|
+
| `sr:product-backlog` skill | ✅ | 🔄 |
|
|
43
|
+
| `sr:health-check` skill | ✅ | 🔄 |
|
|
44
|
+
| `sr:compat-check` skill | ✅ | 🔄 |
|
|
45
|
+
| `sr:why` skill | ✅ | 🔄 |
|
|
46
|
+
| `sr:refactor-recommender` skill | ✅ | 🔄 |
|
|
47
|
+
| `sr:batch-implement` skill | ✅ | 🔄 |
|
|
48
|
+
| `sr:update-product-driven-backlog` skill | ✅ | 🔄 |
|
|
49
|
+
| Backward compat: slash commands still invoke correctly | ✅ | — |
|
|
50
|
+
|
|
51
|
+
### Permissions Configuration (SPEA-508)
|
|
52
|
+
|
|
53
|
+
| Feature | Claude Code | Codex |
|
|
54
|
+
|---------|:-:|:-:|
|
|
55
|
+
| `.claude/settings.json` generated | ✅ | ❌ |
|
|
56
|
+
| `.codex/config.toml` generated | ❌ | 🔄 |
|
|
57
|
+
| `.codex/rules/default.rules` (Starlark) generated | ❌ | 🔄 |
|
|
58
|
+
| Git permission granted | ✅ | 🔄 |
|
|
59
|
+
| GitHub CLI (gh) permission granted | ✅ | 🔄 |
|
|
60
|
+
| Read/Write filesystem permission | ✅ | 🔄 |
|
|
61
|
+
| Bash tool allowed | ✅ | 🔄 |
|
|
62
|
+
|
|
63
|
+
### Agent Definitions (SPEA-509)
|
|
64
|
+
|
|
65
|
+
| Agent | Claude Code (`.md`) | Codex (`.toml`) |
|
|
66
|
+
|-------|:-:|:-:|
|
|
67
|
+
| `sr-architect` | ✅ | 🔄 |
|
|
68
|
+
| `sr-developer` | ✅ | 🔄 |
|
|
69
|
+
| `sr-reviewer` | ✅ | 🔄 |
|
|
70
|
+
| `sr-product-manager` | ✅ | 🔄 |
|
|
71
|
+
| Prompt content identical across formats | ✅ | 🔄 |
|
|
72
|
+
| YAML frontmatter valid (Claude Code) | ✅ | — |
|
|
73
|
+
| TOML frontmatter valid (Codex) | — | 🔄 |
|
|
74
|
+
|
|
75
|
+
### Hub Integration (SPEA-510, SPEA-511)
|
|
76
|
+
|
|
77
|
+
| Feature | Claude Code | Codex |
|
|
78
|
+
|---------|:-:|:-:|
|
|
79
|
+
| Hub detects claude binary | 🔄 | — |
|
|
80
|
+
| Hub detects codex binary | — | 🔄 |
|
|
81
|
+
| `integration-contract.json` v2 schema valid | 🔄 | 🔄 |
|
|
82
|
+
| Hub invokes CLI with correct args | 🔄 | 🔄 |
|
|
83
|
+
| Hub dashboard shows CLI badge | 🔄 | 🔄 |
|
|
84
|
+
| Hub handles "no CLI detected" state | 🔄 | 🔄 |
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Edge Case Coverage
|
|
89
|
+
|
|
90
|
+
| Scenario | Test Coverage | Notes |
|
|
91
|
+
|----------|:-:|-------|
|
|
92
|
+
| User has both CLIs, picks Claude Code | 🔄 | Interactive prompt or `--provider` flag |
|
|
93
|
+
| User has both CLIs, picks Codex | 🔄 | Interactive prompt or `--provider` flag |
|
|
94
|
+
| User has neither CLI | 🔄 | Must print install instructions |
|
|
95
|
+
| Re-install after switch from claude → codex | 🔄 | Old `.claude/` must not corrupt `.codex/` |
|
|
96
|
+
| Re-install after switch from codex → claude | 🔄 | Old `.codex/` must not corrupt `.claude/` |
|
|
97
|
+
| Version upgrade: CLI format unchanged | ✅ | Existing regression suite covers this |
|
|
98
|
+
| Version upgrade: provider mismatch | 🔄 | New behavior in SPEA-506 |
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## Test Files
|
|
103
|
+
|
|
104
|
+
| File | Suite | Covers |
|
|
105
|
+
|------|-------|--------|
|
|
106
|
+
| `tests/test-install.sh` | Install | Existing install flow (Claude Code only) |
|
|
107
|
+
| `tests/test-update.sh` | Update | Update flow (existing) |
|
|
108
|
+
| `tests/test-cli.sh` | CLI | Argument validation, injection safety |
|
|
109
|
+
| `tests/test-codex-compat.sh` | Codex compat | Provider detection, dual-output structure, edge cases |
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## Acceptance Criteria
|
|
114
|
+
|
|
115
|
+
Before SPEA-505 can be merged and released:
|
|
116
|
+
|
|
117
|
+
1. `tests/test-codex-compat.sh` — all tests green
|
|
118
|
+
2. `tests/test-install.sh` — all existing tests still green (regression)
|
|
119
|
+
3. `tests/test-update.sh` — all existing tests still green (regression)
|
|
120
|
+
4. `tests/test-cli.sh` — all existing tests still green (regression)
|
|
121
|
+
5. No broken placeholders: `grep -r '{{[A-Z_]*}}' .claude/agents/ .codex/agents/ 2>/dev/null` returns empty
|
|
122
|
+
6. Skills valid: every `SKILL.md` in `.claude/skills/` has required frontmatter
|
|
123
|
+
7. Agent TOML valid: every `.toml` in `.codex/agents/` is parseable TOML
|