specrails-core 4.11.3 โ†’ 4.12.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 (53) hide show
  1. package/README.md +56 -20
  2. package/bin/specrails-core.mjs +343 -20
  3. package/bin/tui-installer.mjs +103 -52
  4. package/dist/installer/cli.js +1 -1
  5. package/dist/installer/cli.js.map +1 -1
  6. package/dist/installer/commands/doctor.js +486 -24
  7. package/dist/installer/commands/doctor.js.map +1 -1
  8. package/dist/installer/commands/framework.js +49 -7
  9. package/dist/installer/commands/framework.js.map +1 -1
  10. package/dist/installer/commands/init.js +423 -25
  11. package/dist/installer/commands/init.js.map +1 -1
  12. package/dist/installer/commands/update.js +36 -9
  13. package/dist/installer/commands/update.js.map +1 -1
  14. package/dist/installer/phases/framework-lifecycle.js +125 -0
  15. package/dist/installer/phases/framework-lifecycle.js.map +1 -0
  16. package/dist/installer/phases/install-config.js +157 -5
  17. package/dist/installer/phases/install-config.js.map +1 -1
  18. package/dist/installer/phases/manifest.js +27 -2
  19. package/dist/installer/phases/manifest.js.map +1 -1
  20. package/dist/installer/phases/prereqs.js +57 -2
  21. package/dist/installer/phases/prereqs.js.map +1 -1
  22. package/dist/installer/phases/provider-detect.js +116 -6
  23. package/dist/installer/phases/provider-detect.js.map +1 -1
  24. package/dist/installer/phases/scaffold.js +1222 -12
  25. package/dist/installer/phases/scaffold.js.map +1 -1
  26. package/dist/installer/runtime/kimi.js +255 -0
  27. package/dist/installer/runtime/kimi.js.map +1 -0
  28. package/dist/installer/util/paths.js +12 -0
  29. package/dist/installer/util/paths.js.map +1 -1
  30. package/dist/installer/util/registry.js +234 -14
  31. package/dist/installer/util/registry.js.map +1 -1
  32. package/docs/README.md +1 -0
  33. package/docs/deployment.md +6 -7
  34. package/docs/getting-started.md +11 -7
  35. package/docs/installation.md +34 -16
  36. package/docs/plugin-architecture.md +11 -8
  37. package/docs/updating.md +21 -3
  38. package/docs/user-docs/cli-reference.md +43 -22
  39. package/docs/user-docs/codex-vs-claude-code.md +11 -9
  40. package/docs/user-docs/faq.md +1 -1
  41. package/docs/user-docs/getting-started-codex.md +5 -8
  42. package/docs/user-docs/getting-started-kimi.md +423 -0
  43. package/docs/user-docs/installation.md +49 -14
  44. package/docs/user-docs/quick-start.md +11 -8
  45. package/docs/windows.md +29 -4
  46. package/integration-contract.json +85 -13
  47. package/package.json +9 -5
  48. package/schemas/profile.v1.json +67 -5
  49. package/templates/kimi/specrails/run-skill.mjs +3005 -0
  50. package/templates/kimi/specrails/vendor/js-yaml/LICENSE +21 -0
  51. package/templates/kimi/specrails/vendor/js-yaml/NOTICE.md +16 -0
  52. package/templates/kimi/specrails/vendor/js-yaml/js-yaml.mjs +3856 -0
  53. package/templates/profiles/kimi-default.json +15 -0
@@ -16,12 +16,173 @@
16
16
  *
17
17
  * Everything in this module is synchronous to fit the installer's sync flow.
18
18
  */
19
- import { closeSync, existsSync, fsyncSync, mkdirSync, openSync, readFileSync, realpathSync, renameSync, statSync, unlinkSync, writeFileSync, } from 'node:fs';
19
+ import { closeSync, existsSync, fsyncSync, lstatSync, mkdirSync, openSync, readFileSync, realpathSync, renameSync, statSync, unlinkSync, writeFileSync, } from 'node:fs';
20
20
  import os from 'node:os';
21
21
  import path from 'node:path';
22
22
  /** Registry schema version. A reader that sees a higher value MUST treat all
23
23
  * entries as absent (legacy fallback), never mis-parse. */
24
24
  export const REGISTRY_SCHEMA_VERSION = 1;
25
+ const SUPPORTED_PROVIDERS = new Set(['claude', 'codex', 'gemini', 'kimi']);
26
+ const SAFE_SLUG = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
27
+ const REQUIRED_ENTRY_PATHS = [
28
+ 'workspaceDir',
29
+ 'artifactRoot',
30
+ 'stateDir',
31
+ 'ticketsPath',
32
+ 'backlogConfigPath',
33
+ 'profilesDir',
34
+ 'pluginsStateDir',
35
+ 'fileSummariesDir',
36
+ ];
37
+ function isRecord(value) {
38
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
39
+ }
40
+ function isNonEmptyString(value) {
41
+ return typeof value === 'string' && value.length > 0 && !value.includes('\0');
42
+ }
43
+ function isOptionalString(value) {
44
+ return value === undefined || isNonEmptyString(value);
45
+ }
46
+ function isSupportedProvider(value) {
47
+ return typeof value === 'string' && SUPPORTED_PROVIDERS.has(value);
48
+ }
49
+ function samePath(left, right) {
50
+ return normalizeKey(path.resolve(left)) === normalizeKey(path.resolve(right));
51
+ }
52
+ function isPathContained(root, candidate, allowRoot = true) {
53
+ const relative = path.relative(path.resolve(root), path.resolve(candidate));
54
+ if (relative === '')
55
+ return allowRoot;
56
+ return (relative !== '..' &&
57
+ !relative.startsWith(`..${path.sep}`) &&
58
+ !path.isAbsolute(relative));
59
+ }
60
+ /**
61
+ * Resolve every existing prefix while retaining a not-yet-created suffix.
62
+ * Unlike `realpathSafe`, a dangling symlink or an existing non-directory parent
63
+ * is invalid: treating either lexically would hide a later filesystem escape.
64
+ */
65
+ function resolveForContainment(candidate) {
66
+ let cursor = path.resolve(candidate);
67
+ const missingSuffix = [];
68
+ for (;;) {
69
+ try {
70
+ const metadata = lstatSync(cursor);
71
+ if (missingSuffix.length > 0) {
72
+ let followed;
73
+ try {
74
+ followed = statSync(cursor);
75
+ }
76
+ catch {
77
+ return undefined;
78
+ }
79
+ if (!followed.isDirectory())
80
+ return undefined;
81
+ }
82
+ else if (!metadata.isFile() && !metadata.isDirectory() && !metadata.isSymbolicLink()) {
83
+ return undefined;
84
+ }
85
+ let realPrefix;
86
+ try {
87
+ realPrefix = realpathSync(cursor);
88
+ }
89
+ catch {
90
+ return undefined;
91
+ }
92
+ return path.resolve(realPrefix, ...missingSuffix);
93
+ }
94
+ catch (error) {
95
+ const code = error.code;
96
+ if (code !== 'ENOENT' && code !== 'ENOTDIR')
97
+ return undefined;
98
+ const parent = path.dirname(cursor);
99
+ if (parent === cursor)
100
+ return undefined;
101
+ missingSuffix.unshift(path.basename(cursor));
102
+ cursor = parent;
103
+ }
104
+ }
105
+ }
106
+ function hasValidProviderSet(entry) {
107
+ if (!Array.isArray(entry.providers) || entry.providers.length === 0)
108
+ return false;
109
+ if (!entry.providers.every(isSupportedProvider))
110
+ return false;
111
+ if (new Set(entry.providers).size !== entry.providers.length)
112
+ return false;
113
+ return (isSupportedProvider(entry.primaryProvider) &&
114
+ entry.primaryProvider === entry.providers[0]);
115
+ }
116
+ /**
117
+ * Validate one untrusted registry row before it can influence resolution or a
118
+ * subsequent read-modify-write. The registry stores derived subpaths
119
+ * explicitly so Desktop's layout remains authoritative; Core only requires
120
+ * that those opaque paths stay lexically and physically inside the immutable
121
+ * per-slug workspace.
122
+ */
123
+ function isValidProjectEntry(key, value, home) {
124
+ if (!isRecord(value))
125
+ return false;
126
+ if (!isNonEmptyString(value.repoPath) ||
127
+ !path.isAbsolute(value.repoPath) ||
128
+ !isNonEmptyString(value.codeRoot) ||
129
+ !path.isAbsolute(value.codeRoot) ||
130
+ !isNonEmptyString(value.slug) ||
131
+ !SAFE_SLUG.test(value.slug) ||
132
+ (value.source !== 'desktop' && value.source !== 'core-standalone') ||
133
+ !hasValidProviderSet(value) ||
134
+ !isOptionalString(value.coreVersion) ||
135
+ !isOptionalString(value.createdAt) ||
136
+ !isOptionalString(value.lastInstallAt) ||
137
+ !isOptionalString(value.desktopProjectId) ||
138
+ !isOptionalString(value.updatedAt)) {
139
+ return false;
140
+ }
141
+ for (const field of REQUIRED_ENTRY_PATHS) {
142
+ const candidate = value[field];
143
+ if (!isNonEmptyString(candidate) || !path.isAbsolute(candidate))
144
+ return false;
145
+ }
146
+ const validatedPaths = value;
147
+ const canonicalRepo = canonicalizeRepoPath(value.repoPath);
148
+ if (!samePath(value.repoPath, canonicalRepo) ||
149
+ normalizeKey(canonicalRepo) !== key ||
150
+ !samePath(value.codeRoot, canonicalRepo) ||
151
+ !samePath(value.codeRoot, canonicalizeRepoPath(value.codeRoot))) {
152
+ return false;
153
+ }
154
+ const lexicalHome = path.resolve(resolveHome(home));
155
+ const lexicalSpecrailsRoot = path.join(lexicalHome, '.specrails');
156
+ const lexicalProjectsRoot = path.join(lexicalSpecrailsRoot, 'projects');
157
+ const lexicalWorkspace = path.join(lexicalProjectsRoot, value.slug, 'workspace');
158
+ if (!samePath(validatedPaths.workspaceDir, lexicalWorkspace) ||
159
+ !samePath(validatedPaths.artifactRoot, lexicalWorkspace)) {
160
+ return false;
161
+ }
162
+ const realHome = resolveForContainment(lexicalHome);
163
+ const realSpecrailsRoot = resolveForContainment(lexicalSpecrailsRoot);
164
+ const realProjectsRoot = resolveForContainment(lexicalProjectsRoot);
165
+ const realWorkspace = resolveForContainment(lexicalWorkspace);
166
+ if (realHome === undefined ||
167
+ realSpecrailsRoot === undefined ||
168
+ realProjectsRoot === undefined ||
169
+ realWorkspace === undefined ||
170
+ !isPathContained(realHome, realSpecrailsRoot, false) ||
171
+ !samePath(realProjectsRoot, path.join(realSpecrailsRoot, 'projects')) ||
172
+ !samePath(realWorkspace, path.join(realProjectsRoot, value.slug, 'workspace'))) {
173
+ return false;
174
+ }
175
+ for (const field of REQUIRED_ENTRY_PATHS) {
176
+ const candidate = validatedPaths[field];
177
+ const realCandidate = resolveForContainment(candidate);
178
+ if (!isPathContained(lexicalWorkspace, candidate) ||
179
+ realCandidate === undefined ||
180
+ !isPathContained(realWorkspace, realCandidate)) {
181
+ return false;
182
+ }
183
+ }
184
+ return true;
185
+ }
25
186
  /**
26
187
  * Slug derivation โ€” byte-identical to specrails-desktop's `slugify`
27
188
  * (`server/desktop-router.ts`). Do not "improve" it; parity is the contract.
@@ -77,7 +238,7 @@ export function canonicalizeRepoPath(repoPathInput) {
77
238
  }
78
239
  /** The per-project sub-path layout under a workspace dir. Single source of the
79
240
  * layout so writer and (allocation) reader never disagree. */
80
- export function workspaceLayout(home, slug, canon) {
241
+ export function workspaceLayout(home, slug, canon, primaryProvider = 'claude') {
81
242
  const workspaceDir = path.join(resolveHome(home), '.specrails', 'projects', slug, 'workspace');
82
243
  const specrailsDir = path.join(workspaceDir, '.specrails');
83
244
  return {
@@ -86,7 +247,7 @@ export function workspaceLayout(home, slug, canon) {
86
247
  workspaceDir,
87
248
  artifactRoot: workspaceDir,
88
249
  codeRoot: canon,
89
- stateDir: path.join(workspaceDir, '.claude'),
250
+ stateDir: path.join(workspaceDir, providerStateDirectory(primaryProvider)),
90
251
  ticketsPath: path.join(specrailsDir, 'local-tickets.json'),
91
252
  backlogConfigPath: path.join(specrailsDir, 'backlog-config.json'),
92
253
  profilesDir: path.join(specrailsDir, 'profiles'),
@@ -94,6 +255,15 @@ export function workspaceLayout(home, slug, canon) {
94
255
  fileSummariesDir: path.join(specrailsDir, 'file-summaries'),
95
256
  };
96
257
  }
258
+ function providerStateDirectory(provider) {
259
+ if (provider === 'codex')
260
+ return '.codex';
261
+ if (provider === 'gemini')
262
+ return '.gemini';
263
+ if (provider === 'kimi')
264
+ return '.kimi-code';
265
+ return '.claude';
266
+ }
97
267
  /** The in-repo layout, used when there is no registry entry (legacy fallback). */
98
268
  export function legacyResolution(canon) {
99
269
  const specrailsDir = path.join(canon, '.specrails');
@@ -151,15 +321,35 @@ export function readRegistryOrEmpty(home) {
151
321
  return empty;
152
322
  try {
153
323
  const parsed = JSON.parse(readFileSync(p, 'utf8'));
154
- if (!parsed ||
155
- typeof parsed !== 'object' ||
156
- typeof parsed.schemaVersion !== 'number' ||
157
- parsed.schemaVersion > REGISTRY_SCHEMA_VERSION ||
158
- typeof parsed.projects !== 'object' ||
159
- parsed.projects === null) {
324
+ if (!isRecord(parsed) ||
325
+ parsed.schemaVersion !== REGISTRY_SCHEMA_VERSION ||
326
+ !isRecord(parsed.projects)) {
160
327
  return empty;
161
328
  }
162
- return parsed;
329
+ const candidates = [];
330
+ const slugCounts = new Map();
331
+ for (const [key, entry] of Object.entries(parsed.projects)) {
332
+ if (!isValidProjectEntry(key, entry, home))
333
+ continue;
334
+ candidates.push([key, entry]);
335
+ slugCounts.set(entry.slug, (slugCounts.get(entry.slug) ?? 0) + 1);
336
+ }
337
+ const projects = {};
338
+ for (const [key, entry] of candidates) {
339
+ // Two repos must never resolve to the same writable workspace. Treat
340
+ // every side of an ambiguous slug as absent instead of choosing a winner.
341
+ if (slugCounts.get(entry.slug) === 1)
342
+ projects[key] = entry;
343
+ }
344
+ const result = {
345
+ schemaVersion: REGISTRY_SCHEMA_VERSION,
346
+ projects,
347
+ };
348
+ if (typeof parsed.generator === 'string')
349
+ result.generator = parsed.generator;
350
+ if (typeof parsed.updatedAt === 'string')
351
+ result.updatedAt = parsed.updatedAt;
352
+ return result;
163
353
  }
164
354
  catch {
165
355
  return empty;
@@ -286,9 +476,9 @@ export function allocateSlug(canon, existing) {
286
476
  return `${base}-${n}`;
287
477
  }
288
478
  function buildEntry(home, canon, slug, opts) {
289
- const providers = opts.providers && opts.providers.length > 0 ? opts.providers : ['claude'];
479
+ const providers = validateProvidersForWrite(opts.providers, true);
290
480
  const now = opts.now ?? new Date().toISOString();
291
- const layout = workspaceLayout(home, slug, canon);
481
+ const layout = workspaceLayout(home, slug, canon, providers[0]);
292
482
  const entry = {
293
483
  ...layout,
294
484
  providers,
@@ -302,6 +492,15 @@ function buildEntry(home, canon, slug, opts) {
302
492
  entry.desktopProjectId = opts.desktopProjectId;
303
493
  return entry;
304
494
  }
495
+ function validateProvidersForWrite(providers, useDefault) {
496
+ if (providers === undefined || providers.length === 0) {
497
+ return useDefault ? ['claude'] : [];
498
+ }
499
+ if (!providers.every(isSupportedProvider)) {
500
+ throw new Error(`Unsupported registry provider: ${providers.find((provider) => !isSupportedProvider(provider)) ?? ''}`);
501
+ }
502
+ return [...new Set(providers)];
503
+ }
305
504
  /**
306
505
  * The shared resolver both tools run. Given a repo path, returns where that
307
506
  * repo's artifacts live. With `allocate:true`, creates + persists an entry when
@@ -312,11 +511,32 @@ export function resolveArtifacts(repoPathInput, opts = {}) {
312
511
  const home = opts.home;
313
512
  const canon = canonicalizeRepoPath(repoPathInput);
314
513
  const key = normalizeKey(canon);
514
+ const requestedProviders = validateProvidersForWrite(opts.providers, false);
315
515
  // Fast path: lock-free read for a pure lookup.
316
516
  const reg = readRegistryOrEmpty(home);
317
517
  const existing = reg.projects[key];
318
- if (existing)
319
- return entryToResolution(key, existing);
518
+ if (existing) {
519
+ const needsProviderMerge = opts.allocate === true &&
520
+ existing.source === 'core-standalone' &&
521
+ requestedProviders.some((provider) => !existing.providers.includes(provider));
522
+ if (!needsProviderMerge)
523
+ return entryToResolution(key, existing);
524
+ return withFileLock(home, () => {
525
+ const fresh = readRegistryOrEmpty(home);
526
+ const current = fresh.projects[key];
527
+ if (!current)
528
+ return legacyResolution(canon);
529
+ const providers = [...new Set([...current.providers, ...requestedProviders])];
530
+ current.providers = providers;
531
+ current.primaryProvider = current.primaryProvider || providers[0] || 'claude';
532
+ current.lastInstallAt = opts.now ?? new Date().toISOString();
533
+ if (opts.coreVersion)
534
+ current.coreVersion = opts.coreVersion;
535
+ fresh.updatedAt = current.lastInstallAt;
536
+ atomicWrite(registryPath(home), JSON.stringify(fresh, null, 2) + '\n');
537
+ return entryToResolution(key, current);
538
+ });
539
+ }
320
540
  if (!opts.allocate)
321
541
  return legacyResolution(canon);
322
542
  // Allocation path: lock, re-read, double-check, atomic write.
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/installer/util/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/installer/util/registry.ts"],"names":[],"mappings":"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"}
package/docs/README.md CHANGED
@@ -14,6 +14,7 @@ Welcome to the SpecRails docs. This guide will take you from zero to a fully aut
14
14
  | Guide | What it covers |
15
15
  |-------|----------------|
16
16
  | [Installation & Setup](installation.md) | Detailed setup, prerequisites, the `/specrails:enrich` wizard, TUI installer |
17
+ | [Kimi Code Setup](user-docs/getting-started-kimi.md) | Install Kimi, scaffold `.kimi-code`, models, sessions, MCP, and troubleshooting |
17
18
  | [Plugin Architecture](plugin-architecture.md) | Plugin vs scaffold, what lives where, how updates work |
18
19
  | [Agents](agents.md) | Every agent explained โ€” role, when it runs, why it exists |
19
20
  | [Workflows & Commands](workflows.md) | How to use `/specrails:implement`, `/specrails:get-backlog-specs`, and more |
@@ -1,7 +1,5 @@
1
1
  # Deployment
2
2
 
3
- > **๐Ÿงช Codex (OpenAI) Support โ€” Coming Soon (in Lab).** Any Codex-specific option or step below describes the planned behaviour. Codex installation is currently disabled; the installer will guide you to Claude Code instead.
4
-
5
3
  SpecRails runs locally โ€” no cloud infrastructure required. Choose the setup that fits your workflow.
6
4
 
7
5
  ## Options at a glance
@@ -9,7 +7,7 @@ SpecRails runs locally โ€” no cloud infrastructure required. Choose the setup th
9
7
  | Option | Best for | Setup time |
10
8
  |--------|----------|------------|
11
9
  | [Plugin](#plugin-recommended) | Quick start, individual developers | ~1 minute |
12
- | [Local (npx)](#local-npx) | Scaffold/Codex, full offline control | ~2 minutes |
10
+ | [Local (npx)](#local-npx) | Any supported provider, full offline control | ~2 minutes |
13
11
  | [Local (git clone)](#local-git-clone) | Customization, contributing | ~5 minutes |
14
12
  | [Docker](#docker) | Reproducible environments, teams | ~5 minutes |
15
13
  | [CI/CD](#cicd-github-actions) | Automated workflows, GitHub Actions | ~10 minutes |
@@ -31,7 +29,8 @@ claude plugin install sr
31
29
 
32
30
  ## Local โ€” npx
33
31
 
34
- For Codex users or when you need full control over agent files.
32
+ For Claude Code, Codex CLI, Gemini CLI, or Kimi Code users who need full
33
+ control over agent files.
35
34
 
36
35
  ```bash
37
36
  npx specrails-core@latest init --root-dir .
@@ -43,7 +42,7 @@ This will:
43
42
 
44
43
  After install, open Claude Code or Codex and run `/specrails:setup` to configure.
45
44
 
46
- **Requirements:** Node.js โ‰ฅ18, Claude Code or Codex CLI
45
+ **Requirements:** Node.js โ‰ฅ20.19.0 and one supported AI CLI
47
46
 
48
47
  ---
49
48
 
@@ -147,7 +146,7 @@ jobs:
147
146
  - name: Setup Node.js
148
147
  uses: actions/setup-node@v4
149
148
  with:
150
- node-version: '20'
149
+ node-version: '20.19.0'
151
150
 
152
151
  - name: Install SpecRails
153
152
  run: npm install -g specrails
@@ -180,7 +179,7 @@ jobs:
180
179
  - name: Setup Node.js
181
180
  uses: actions/setup-node@v4
182
181
  with:
183
- node-version: '20'
182
+ node-version: '20.19.0'
184
183
 
185
184
  - name: Install SpecRails
186
185
  run: npm install -g specrails
@@ -4,7 +4,11 @@ Get SpecRails running in your project in under 5 minutes.
4
4
 
5
5
  ## What is SpecRails?
6
6
 
7
- SpecRails installs a **product-driven development workflow** into any repository. It gives Claude Code a team of **12 specialized AI agents** โ€” an architect, developers, layer reviewers, a reviewer, a product manager โ€” that work together to go from idea to shipped PR automatically.
7
+ SpecRails installs a **product-driven development workflow** into any
8
+ repository. It gives Claude Code, Codex CLI, Gemini CLI, or Kimi Code a team of
9
+ specialized AI roles โ€” an architect, developers, layer reviewers, a reviewer,
10
+ and a product manager โ€” that work together to go from idea to shipped PR
11
+ automatically.
8
12
 
9
13
  Think of it as hiring a full engineering team that lives inside your CLI.
10
14
 
@@ -13,15 +17,14 @@ Think of it as hiring a full engineering team that lives inside your CLI.
13
17
  You need:
14
18
 
15
19
  - **Git** โ€” your project must be a git repository
16
- - **[Claude Code](https://claude.ai/claude-code)** โ€” Anthropic's CLI tool
17
-
18
- > **๐Ÿงช Codex (OpenAI) Support โ€” Coming Soon (in Lab).** OpenAI Codex integration is currently being tested in our lab. The installer will only install with Claude Code for now โ€” Codex support will ship shortly.
20
+ - One supported AI CLI: Claude Code, Codex CLI, Gemini CLI, or Kimi Code
19
21
 
20
22
  Optional (recommended):
21
23
 
22
24
  - **[GitHub CLI](https://cli.github.com/)** (`gh`) โ€” for automatic PR creation and issue tracking
23
25
 
24
- > **Using OpenAI Codex instead of Claude Code?** See [getting-started-codex.md](user-docs/getting-started-codex.md) for Codex-specific setup.
26
+ See the [Codex guide](user-docs/getting-started-codex.md) or
27
+ [Kimi guide](user-docs/getting-started-kimi.md) for provider-specific setup.
25
28
 
26
29
  ## Install
27
30
 
@@ -31,7 +34,7 @@ Optional (recommended):
31
34
  claude plugin install sr
32
35
  ```
33
36
 
34
- **Scaffold method (for Codex users or full offline control)**
37
+ **Scaffold method (all providers, or full offline control)**
35
38
 
36
39
  ```bash
37
40
  npx specrails-core@latest init --root-dir <your-project>
@@ -49,7 +52,8 @@ When you run `npx specrails-core@latest init`, the TUI installer lets you choose
49
52
  2. Choose a model preset
50
53
  3. Provide a brief product description
51
54
 
52
- Agents are ready to use immediately after install. Open Claude Code and start working.
55
+ Agents are ready to use immediately after install. Open the selected provider
56
+ CLI and start working.
53
57
 
54
58
  > Quick install excludes VPC personas and persona-dependent agents/commands (sr-product-manager, sr-product-analyst). These require the full enrichment process.
55
59
 
@@ -2,19 +2,15 @@
2
2
 
3
3
  This guide covers the complete installation process in detail. For the quick version, see [Getting Started](getting-started.md).
4
4
 
5
- > ## ๐Ÿงช Codex (OpenAI) Support โ€” Coming Soon (in Lab)
6
- >
7
- > OpenAI Codex integration is currently being **tested in our lab** and **cannot be installed yet**. The installer will refuse any attempt to install with `--provider codex` and will guide you to use Claude Code instead. Codex-specific sections below describe the **planned behaviour** and will be activated when the feature ships.
8
-
9
5
  ## Installation methods
10
6
 
11
- SpecRails supports two distribution channels today, with a third coming soon:
7
+ SpecRails offers a Claude plugin and a provider-independent scaffold:
12
8
 
13
9
  | Method | Command | Best for |
14
10
  |--------|---------|----------|
15
11
  | **Claude Code plugin** (recommended) | `claude plugin install sr` | Most projects โ€” no Node.js required, auto-updates |
16
12
  | **Claude Code scaffold** | `npx specrails-core@latest init` | Full offline control, custom agent edits |
17
- | **Codex project** ๐Ÿงช _Coming Soon (in lab)_ | `npx specrails-core@latest init` | OpenAI Codex CLI users (not yet available) |
13
+ | **Provider scaffold** | `npx specrails-core@latest init` | Claude, Codex, Gemini, or Kimi Code projects |
18
14
 
19
15
  ---
20
16
 
@@ -59,9 +55,9 @@ The plugin bundles the logic layer โ€” agents, skills, commands, hooks, and refe
59
55
 
60
56
  | Tool | Why | Install |
61
57
  |------|-----|---------|
62
- | **Node.js 20+** | Required for the installer (macOS, Linux, Windows) | [nodejs.org](https://nodejs.org/) or via [nvm](https://github.com/nvm-sh/nvm) |
58
+ | **Node.js 20.19.0+** | Required for the installer and pinned OpenSpec 1.4.1 CLI (macOS, Linux, Windows) | [nodejs.org](https://nodejs.org/) or via [nvm](https://github.com/nvm-sh/nvm) |
63
59
  | **Git** | SpecRails operates on git repositories | [git-scm.com](https://git-scm.com/) |
64
- | **Claude Code** or **Codex CLI** | The AI CLI that runs the agents | See [codex-vs-claude-code.md](user-docs/codex-vs-claude-code.md) |
60
+ | **Supported AI CLI** | The runtime that runs the agents | Claude, Codex, Gemini, or [Kimi Code](user-docs/getting-started-kimi.md) |
65
61
 
66
62
  ### Install
67
63
 
@@ -88,7 +84,8 @@ node bin/specrails-core.mjs init --root-dir <your-project>
88
84
  The `npx specrails-core@latest init` command now includes a **TUI installer** that runs before copying files:
89
85
 
90
86
  1. **TUI agent selection** โ€” Interactive terminal UI lets you select which agents to install and choose a model preset (balanced/budget/max). Writes `.specrails/install-config.yaml`.
91
- 2. **Checks prerequisites** โ€” validates Git, Claude Code; optionally installs npm and gh
87
+ 2. **Checks prerequisites** โ€” validates Git and the selected provider CLI;
88
+ optionally installs npm and gh
92
89
  3. **Detects existing setup** โ€” warns if SpecRails artifacts already exist
93
90
  4. **Installs artifacts:**
94
91
  - `.claude/commands/specrails/enrich.md` โ€” the `/specrails:enrich` wizard
@@ -105,12 +102,26 @@ The scaffold installer only copies files. It does not modify your existing code,
105
102
 
106
103
  ## The Enrich Wizard
107
104
 
108
- After either installation method, open Claude Code (or Codex) in your project and run:
105
+ After either installation method, open the selected AI CLI. Claude and Gemini
106
+ use:
109
107
 
110
108
  ```
111
109
  /specrails:enrich
112
110
  ```
113
111
 
112
+ Kimi uses:
113
+
114
+ ```text
115
+ /skill:specrails-enrich
116
+ ```
117
+
118
+ That slash form is Kimi TUI syntax. Automated callers use the managed
119
+ `.kimi-code/specrails/run-skill.mjs` helper installed beside the skills; passing
120
+ the slash form directly to `kimi -p` does not activate it in Kimi 0.27.
121
+ Generated multi-role workflows give that helper one structured foreground
122
+ role wave. It owns parallel child processes and reusable worktrees, so no
123
+ Kimi daemon or bundled provider binary is required.
124
+
114
125
  There are three modes:
115
126
 
116
127
  | Mode | Command | When to use |
@@ -274,28 +285,35 @@ Runs a fully automated installation using `.specrails/install-config.yaml`. No i
274
285
 
275
286
  ```yaml
276
287
  version: 1
277
- provider: claude # claude | codex | auto
288
+ provider: claude # claude | codex | gemini | kimi
278
289
  tier: full # full (requires /specrails:enrich) | quick (agents placed directly)
279
290
  agents:
280
- selected: # list of agent names to install
291
+ selected: # unique lowercase kebab-case ids (1-64 chars)
281
292
  - sr-architect
282
293
  - sr-developer
283
294
  - sr-reviewer
284
295
  - sr-test-writer
285
296
  - sr-product-manager
286
- excluded: [] # agent names to skip
297
+ excluded: [] # unique ids to skip; must not overlap selected
287
298
  models:
288
299
  preset: balanced # balanced | budget | max
289
- overrides: {} # per-agent overrides: { sr-architect: opus }
300
+ defaults:
301
+ model: sonnet # exact provider model/alias; Kimi defaults to k3
302
+ overrides: {} # exact per-agent models: { sr-architect: opus }
290
303
  ```
291
304
 
292
305
  **Model presets:**
293
306
 
294
307
  | Preset | Description |
295
308
  |--------|-------------|
296
- | `balanced` (default) | Opus for architect + PM, Sonnet for all others |
309
+ | `balanced` (default) | Sonnet for all Claude agents |
297
310
  | `budget` | Haiku for all agents |
298
- | `max` | Opus for all agents |
311
+ | `max` | Opus for Claude architect + PM, Sonnet for all others |
312
+
313
+ Other providers resolve the same preset names within their own catalog. Kimi
314
+ presets default to `k3`; exact official ids and configured aliases are retained.
315
+ Kimi ids must be 1โ€“128 characters matching
316
+ `[A-Za-z0-9][A-Za-z0-9._/:-]*`, the same grammar enforced at process launch.
299
317
 
300
318
  ---
301
319
 
@@ -74,19 +74,22 @@ The scaffold copies the full agent+command set into `.claude/` โ€” you own and v
74
74
 
75
75
  **Best for:** Teams that want to version the agent prompts themselves, or projects that need full offline control.
76
76
 
77
- ### 3. Codex project ๐Ÿงช _Coming Soon (in Lab)_
78
-
79
- > **Codex installation is not yet available.** OpenAI Codex integration is being tested in our lab and will ship shortly. The block below describes the **planned behaviour** for when the feature is released.
77
+ ### 3. Provider scaffold
80
78
 
81
79
  ```bash
82
- npx specrails-core@latest init --root-dir . # same as scaffold (Codex path โ€” not yet available)
83
- codex # open Codex
84
- /specrails:enrich # configure
80
+ npx specrails-core@latest init --root-dir . --provider codex
81
+ npx specrails-core@latest init --root-dir . --provider gemini
82
+ npx specrails-core@latest init --root-dir . --provider kimi
85
83
  ```
86
84
 
87
- Codex does not support the Claude Code plugin system. When Codex support ships, use the scaffold method.
85
+ Codex, Gemini, and Kimi do not use the Claude Code plugin package. The
86
+ scaffold renders their native project surfaces under `.codex/`, `.gemini/`,
87
+ and `.kimi-code/` respectively. Kimi interactive workflows use
88
+ `/skill:specrails-*`; its headless workflows use the managed runner installed
89
+ under `.kimi-code/specrails/`.
88
90
 
89
- **Best for (when available):** OpenAI Codex CLI users.
91
+ **Best for:** Codex, Gemini, or Kimi users and teams that version generated
92
+ provider artifacts.
90
93
 
91
94
  ## The `/specrails:enrich` wizard
92
95