claude-code-arcane 2.9.9 → 2.10.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/CHANGELOG.md +12 -0
- package/README.md +40 -38
- package/dist/cli.js +64 -33
- package/docs/USER-GUIDE.md +23 -21
- package/package.json +1 -1
- package/profiles/ai.yaml +3 -0
- package/profiles/android-native.yaml +2 -0
- package/profiles/backend-go.yaml +0 -8
- package/profiles/backend-ts.yaml +2 -8
- package/profiles/backend-typescript.yaml +51 -0
- package/profiles/flutter.yaml +2 -0
- package/profiles/frontend-react-vite.yaml +39 -0
- package/profiles/frontend.yaml +2 -0
- package/profiles/integrations.yaml +6 -1
- package/profiles/ios-native.yaml +2 -0
- package/profiles/mobile-android-kotlin.yaml +36 -0
- package/profiles/mobile-flutter.yaml +37 -0
- package/profiles/mobile-ios-swift.yaml +37 -0
- package/profiles/mobile-react-native.yaml +39 -0
- package/profiles/mobile.yaml +2 -0
- package/skills/arcane-add/SKILL.md +1 -1
- package/skills/arcane-list/SKILL.md +3 -3
- package/skills/arcane-status/SKILL.md +1 -1
- package/skills/freelance-kickoff/SKILL.md +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
# [2.10.0](https://github.com/SebastianLuser/claude-code-arcane/compare/v2.9.9...v2.10.0) (2026-10-10)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* **profiles:** keep bridge files under the old names for pre-rename CLIs ([921c351](https://github.com/SebastianLuser/claude-code-arcane/commit/921c35119ea3b4bf5a25bbdabe369bc922e71a3f))
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* **profiles:** name stack profiles by platform and technology ([ce89d4a](https://github.com/SebastianLuser/claude-code-arcane/commit/ce89d4a25b1f6ba28d6efe7e84a27343b1e734f5))
|
|
12
|
+
|
|
1
13
|
## [2.9.9](https://github.com/SebastianLuser/claude-code-arcane/compare/v2.9.8...v2.9.9) (2026-10-10)
|
|
2
14
|
|
|
3
15
|
|
package/README.md
CHANGED
|
@@ -20,7 +20,7 @@ A configuration harness installable via `npx`. Pick a **profile** that matches y
|
|
|
20
20
|
cd ~/projects/my-app
|
|
21
21
|
|
|
22
22
|
# Install a profile (no clone needed)
|
|
23
|
-
npx claude-code-arcane install backend-
|
|
23
|
+
npx claude-code-arcane install backend-typescript+agile
|
|
24
24
|
|
|
25
25
|
# Open Claude Code
|
|
26
26
|
claude
|
|
@@ -38,7 +38,7 @@ explicitly first:
|
|
|
38
38
|
|
|
39
39
|
```bash
|
|
40
40
|
npm install -g claude-code-arcane
|
|
41
|
-
arcane install backend-
|
|
41
|
+
arcane install backend-typescript+agile # same as the npx line above
|
|
42
42
|
```
|
|
43
43
|
|
|
44
44
|
---
|
|
@@ -50,8 +50,8 @@ arcane install backend-ts+agile # same as the npx line above
|
|
|
50
50
|
Each profile is a YAML file that bundles skills, agents, rules, and permissions:
|
|
51
51
|
|
|
52
52
|
```yaml
|
|
53
|
-
# profiles/backend-
|
|
54
|
-
name: backend-
|
|
53
|
+
# profiles/backend-typescript.yaml
|
|
54
|
+
name: backend-typescript
|
|
55
55
|
category: backend
|
|
56
56
|
skills: [api-design, auth-strategy, jwt-strategy, ...]
|
|
57
57
|
rules:
|
|
@@ -66,7 +66,7 @@ permissions:
|
|
|
66
66
|
All profiles are equal — there is no "base vs addon" distinction. Combine as many as you need:
|
|
67
67
|
|
|
68
68
|
```bash
|
|
69
|
-
npx claude-code-arcane install backend-
|
|
69
|
+
npx claude-code-arcane install backend-typescript+agile+testing
|
|
70
70
|
```
|
|
71
71
|
|
|
72
72
|
The installer merges all profiles, deduplicates skills, and installs only what's needed.
|
|
@@ -104,7 +104,7 @@ my-project/.claude/
|
|
|
104
104
|
### Install a profile
|
|
105
105
|
|
|
106
106
|
```bash
|
|
107
|
-
npx claude-code-arcane install backend-
|
|
107
|
+
npx claude-code-arcane install backend-typescript+agile # Install profile combination
|
|
108
108
|
npx claude-code-arcane install # Show available profiles (interactive)
|
|
109
109
|
npx claude-code-arcane install unity-dev --dry-run # Preview without installing
|
|
110
110
|
```
|
|
@@ -184,12 +184,14 @@ Once installed, manage the installation from within a Claude Code session:
|
|
|
184
184
|
|
|
185
185
|
All profiles combine freely with `+` — there is no required "base". Grouped by category:
|
|
186
186
|
|
|
187
|
+
Older names still install and update: `backend-ts`, `frontend`, `mobile`, `flutter`, `ios-native` and `android-native` resolve to `backend-typescript`, `frontend-react-vite`, `mobile-react-native`, `mobile-flutter`, `mobile-ios-swift` and `mobile-android-kotlin`.
|
|
188
|
+
|
|
187
189
|
### Backend
|
|
188
190
|
|
|
189
191
|
| Profile | Stack | Skills | Agents |
|
|
190
192
|
|---------|-------|--------|--------|
|
|
191
|
-
| `backend-
|
|
192
|
-
| `backend-go` | Backend Go — Clean Arch, DB, auth, API, CI |
|
|
193
|
+
| `backend-typescript` | Backend TypeScript — Fastify, Prisma, Zod, API design | 25 | engineering |
|
|
194
|
+
| `backend-go` | Backend Go — Clean Arch, DB, auth, API, CI | 24 | engineering |
|
|
193
195
|
| `backend-dotnet` | Backend .NET — ASP.NET Core, Vertical Slice/Clean, EF Core, JWT | 25 | engineering |
|
|
194
196
|
| `backend-nestjs` | Backend NestJS — feature modules, DI, Prisma, JWT, microservices | 25 | engineering |
|
|
195
197
|
| `backend-nextjs` | Next.js full-stack — App Router, RSC, Server Actions, SEO, AI SDK | 22 | engineering |
|
|
@@ -198,48 +200,48 @@ All profiles combine freely with `+` — there is no required "base". Grouped by
|
|
|
198
200
|
|
|
199
201
|
| Profile | Stack | Skills | Agents |
|
|
200
202
|
|---------|-------|--------|--------|
|
|
201
|
-
| `frontend` | React + Vite + TypeScript |
|
|
202
|
-
| `design` | Figma, UX review, design system, handoff |
|
|
203
|
+
| `frontend-react-vite` | React + Vite + TypeScript | 17 | engineering |
|
|
204
|
+
| `design` | Figma, UX review, design system, handoff | 10 | product |
|
|
203
205
|
|
|
204
206
|
### Mobile
|
|
205
207
|
|
|
206
208
|
| Profile | Stack | Skills | Agents |
|
|
207
209
|
|---------|-------|--------|--------|
|
|
208
|
-
| `mobile` | React Native + Expo + TypeScript |
|
|
209
|
-
| `flutter` | Flutter + Dart cross-platform |
|
|
210
|
-
| `android-
|
|
211
|
-
| `ios-
|
|
210
|
+
| `mobile-react-native` | React Native + Expo + TypeScript | 17 | engineering |
|
|
211
|
+
| `mobile-flutter` | Flutter + Dart cross-platform | 15 | engineering |
|
|
212
|
+
| `mobile-android-kotlin` | Kotlin + Jetpack Compose + Material Design 3 | 14 | engineering |
|
|
213
|
+
| `mobile-ios-swift` | Swift + UIKit/SwiftUI + Apple HIG | 14 | engineering |
|
|
212
214
|
|
|
213
215
|
### Gamedev
|
|
214
216
|
|
|
215
217
|
| Profile | Stack | Skills | Agents |
|
|
216
218
|
|---------|-------|--------|--------|
|
|
217
|
-
| `unity-dev` | Unity programmer — C#, architecture, performance, builds |
|
|
218
|
-
| `unity-design` | Game designer — GDDs, balance, art bible, playtesting |
|
|
219
|
+
| `unity-dev` | Unity programmer — C#, architecture, performance, builds | 21 | game |
|
|
220
|
+
| `unity-design` | Game designer — GDDs, balance, art bible, playtesting | 18 | game |
|
|
219
221
|
| `meshy` | 3D asset production with Meshy AI — credit-gated generation, single master + cheap derivatives, printability | 5 | — |
|
|
220
222
|
| `blender` | Blender for game assets — tri budget and topology, materials with bake and color space, baked animation, validated export | 6 | — |
|
|
221
|
-
| `unreal-dev` | Unreal Engine 5 programmer — C++, Blueprints, GAS, replication, rendering, packaging |
|
|
222
|
-
| `visual-novel` | Visual novel developer — Ren'Py, narrative, branching |
|
|
223
|
+
| `unreal-dev` | Unreal Engine 5 programmer — C++, Blueprints, GAS, replication, rendering, packaging | 50 | game |
|
|
224
|
+
| `visual-novel` | Visual novel developer — Ren'Py, narrative, branching | 18 | visualnovel, game |
|
|
223
225
|
| `audio` | Game audio — direction, composition, sound design, middleware, VO, QA | 13 | audio |
|
|
224
226
|
|
|
225
227
|
### Platform & Quality
|
|
226
228
|
|
|
227
229
|
| Profile | Adds | Skills | Agents |
|
|
228
230
|
|---------|------|--------|--------|
|
|
229
|
-
| `infra` | Terraform, observability, secrets, rollback, K8s |
|
|
231
|
+
| `infra` | Terraform, observability, secrets, rollback, K8s | 24 | devops |
|
|
230
232
|
| `database` | Indexing, migrations, seeding, replicas, optimization | 8 | — |
|
|
231
|
-
| `security` | Audits, OWASP, secrets, backups |
|
|
233
|
+
| `security` | Audits, OWASP, secrets, backups | 10 | — |
|
|
232
234
|
| `testing` | Contract, performance, regression, flakiness | 11 | quality |
|
|
233
|
-
| `ai` | LLM cost optimization, RAG, ML, data engineering |
|
|
235
|
+
| `ai` | LLM cost optimization, RAG, ML, data engineering, agent and MCP design | 10 | ai |
|
|
234
236
|
|
|
235
237
|
### Project Management
|
|
236
238
|
|
|
237
239
|
| Profile | Adds | Skills | Agents |
|
|
238
240
|
|---------|------|--------|--------|
|
|
239
|
-
| `agile` | Sprints, standups, retros, estimates |
|
|
240
|
-
| `jira` | Jira via REST API — issues, sprints, boards |
|
|
241
|
-
| `clickup` | ClickUp via MCP — tasks, docs, time tracking |
|
|
242
|
-
| `integrations` | GitHub Projects, Slack, Postman |
|
|
241
|
+
| `agile` | Sprints, standups, retros, estimates | 39 | management, product |
|
|
242
|
+
| `jira` | Jira via REST API — issues, sprints, boards | 1 | — |
|
|
243
|
+
| `clickup` | ClickUp via MCP — tasks, docs, time tracking | 1 | — |
|
|
244
|
+
| `integrations` | GitHub Projects, Slack, Postman, Stripe, email templates, Microsoft 365, Snowflake, stack evaluation | 8 | integrations |
|
|
243
245
|
|
|
244
246
|
### Business
|
|
245
247
|
|
|
@@ -249,7 +251,7 @@ All profiles combine freely with `+` — there is no required "base". Grouped by
|
|
|
249
251
|
| `clevel` | C-suite advisors, board prep, strategic ops | 28 | clevel |
|
|
250
252
|
| `finance` | Investment analysis, financial modeling, SaaS metrics | 3 | business |
|
|
251
253
|
| `marketing` | Content, growth, SEO/CRO, strategy, analytics | 44 | marketing |
|
|
252
|
-
| `ecommerce` | Commerce end-to-end agnóstico de lenguaje — data model, checkout, inventario, órdenes, pagos, promociones, shipping/tax, listings, analytics, feeds, storefront, suscripciones |
|
|
254
|
+
| `ecommerce` | Commerce end-to-end agnóstico de lenguaje — data model, checkout, inventario, órdenes, pagos, promociones, shipping/tax, listings, analytics, feeds, storefront, suscripciones | 21 | ecommerce |
|
|
253
255
|
| `regulatory` | ISO 13485, GDPR, FDA, SOC 2, ISMS, QMS, MDR | 13 | regulatory |
|
|
254
256
|
|
|
255
257
|
### Personal
|
|
@@ -264,7 +266,7 @@ All profiles combine freely with `+` — there is no required "base". Grouped by
|
|
|
264
266
|
|
|
265
267
|
| Profile | Adds | Skills | Agents |
|
|
266
268
|
|---------|------|--------|--------|
|
|
267
|
-
| `docs` | PDF, PPTX, XLSX, DOCX, architecture decisions |
|
|
269
|
+
| `docs` | PDF, PPTX, XLSX, DOCX, architecture decisions | 5 | — |
|
|
268
270
|
| `self-improving` | Agent self-improvement and skill extraction | 2 | — |
|
|
269
271
|
| `statusline` | Claude Code status bar (branch, division, session info) | 0 | — |
|
|
270
272
|
|
|
@@ -323,28 +325,28 @@ npx claude-code-arcane install unity-dev+unity-design+agile+clickup
|
|
|
323
325
|
npx claude-code-arcane install backend-go+infra+agile+jira
|
|
324
326
|
|
|
325
327
|
# Full-stack monorepo
|
|
326
|
-
npx claude-code-arcane install backend-
|
|
328
|
+
npx claude-code-arcane install backend-typescript+frontend-react-vite+testing+database
|
|
327
329
|
|
|
328
330
|
# Mobile app with CI/CD
|
|
329
|
-
npx claude-code-arcane install mobile+agile+clickup+testing
|
|
331
|
+
npx claude-code-arcane install mobile-react-native+agile+clickup+testing
|
|
330
332
|
|
|
331
333
|
# Secure backend with docs
|
|
332
|
-
npx claude-code-arcane install backend-
|
|
334
|
+
npx claude-code-arcane install backend-typescript+security+docs+database
|
|
333
335
|
|
|
334
336
|
# AI/ML project with data pipelines
|
|
335
337
|
npx claude-code-arcane install backend-go+ai+infra
|
|
336
338
|
|
|
337
339
|
# SaaS with full marketing stack
|
|
338
|
-
npx claude-code-arcane install backend-
|
|
340
|
+
npx claude-code-arcane install backend-typescript+marketing+business+finance
|
|
339
341
|
|
|
340
342
|
# Regulated medical device
|
|
341
|
-
npx claude-code-arcane install backend-
|
|
343
|
+
npx claude-code-arcane install backend-typescript+regulatory+security+testing
|
|
342
344
|
|
|
343
345
|
# Founder advisory setup
|
|
344
346
|
npx claude-code-arcane install clevel+business+finance+marketing
|
|
345
347
|
|
|
346
348
|
# With status bar
|
|
347
|
-
npx claude-code-arcane install backend-
|
|
349
|
+
npx claude-code-arcane install backend-typescript+agile+statusline
|
|
348
350
|
```
|
|
349
351
|
|
|
350
352
|
---
|
|
@@ -353,7 +355,7 @@ npx claude-code-arcane install backend-ts+agile+statusline
|
|
|
353
355
|
|
|
354
356
|
```bash
|
|
355
357
|
# Start with a profile
|
|
356
|
-
npx claude-code-arcane install backend-
|
|
358
|
+
npx claude-code-arcane install backend-typescript
|
|
357
359
|
|
|
358
360
|
# Later, add testing and security
|
|
359
361
|
npx claude-code-arcane add +testing +security
|
|
@@ -372,7 +374,7 @@ npx claude-code-arcane status
|
|
|
372
374
|
|
|
373
375
|
# Start over
|
|
374
376
|
npx claude-code-arcane clean --force
|
|
375
|
-
npx claude-code-arcane install backend-
|
|
377
|
+
npx claude-code-arcane install backend-typescript+agile
|
|
376
378
|
```
|
|
377
379
|
|
|
378
380
|
---
|
|
@@ -385,7 +387,7 @@ Work on multiple features in parallel using git worktrees, each with its own Arc
|
|
|
385
387
|
|
|
386
388
|
```bash
|
|
387
389
|
# Create worktree + install Arcane in one step
|
|
388
|
-
npx claude-code-arcane worktree feat/new-api --profile backend-
|
|
390
|
+
npx claude-code-arcane worktree feat/new-api --profile backend-typescript+agile
|
|
389
391
|
|
|
390
392
|
# Inherits profile from current installation
|
|
391
393
|
npx claude-code-arcane worktree feat/new-api
|
|
@@ -410,7 +412,7 @@ When you run `npx claude-code-arcane install` inside a git worktree, Arcane auto
|
|
|
410
412
|
|
|
411
413
|
```bash
|
|
412
414
|
# Manual: share from a specific installation
|
|
413
|
-
npx claude-code-arcane install backend-
|
|
415
|
+
npx claude-code-arcane install backend-typescript --share-from /path/to/main/worktree
|
|
414
416
|
|
|
415
417
|
# Disable sharing
|
|
416
418
|
npx claude-code-arcane worktree feat/api --no-share
|
|
@@ -433,7 +435,7 @@ npx claude-code-arcane worktree feat/api --no-share
|
|
|
433
435
|
```bash
|
|
434
436
|
npx claude-code-arcane status
|
|
435
437
|
# === Arcane Status ===
|
|
436
|
-
# Profiles: backend-
|
|
438
|
+
# Profiles: backend-typescript + agile
|
|
437
439
|
# Worktree: yes (main: /path/to/main/checkout)
|
|
438
440
|
# Shared: hooks, docs (symlinked)
|
|
439
441
|
# ...
|
package/dist/cli.js
CHANGED
|
@@ -19,6 +19,7 @@ function parseProfile(filePath) {
|
|
|
19
19
|
const perms = raw.permissions ?? {};
|
|
20
20
|
return {
|
|
21
21
|
name: String(raw.name ?? path.basename(filePath, ".yaml")),
|
|
22
|
+
...raw.renamed_to ? { renamed_to: String(raw.renamed_to) } : {},
|
|
22
23
|
description: String(raw.description ?? ""),
|
|
23
24
|
category: String(raw.category ?? "other"),
|
|
24
25
|
skills: raw.skills ?? [],
|
|
@@ -58,9 +59,32 @@ function groupByCategory(profiles) {
|
|
|
58
59
|
}
|
|
59
60
|
return groups.filter((g) => g.profiles.length > 0);
|
|
60
61
|
}
|
|
62
|
+
var PROFILE_RENAMES = {
|
|
63
|
+
"backend-ts": "backend-typescript",
|
|
64
|
+
frontend: "frontend-react-vite",
|
|
65
|
+
mobile: "mobile-react-native",
|
|
66
|
+
flutter: "mobile-flutter",
|
|
67
|
+
"ios-native": "mobile-ios-swift",
|
|
68
|
+
"android-native": "mobile-android-kotlin"
|
|
69
|
+
};
|
|
70
|
+
function canonicalProfileName(name) {
|
|
71
|
+
return PROFILE_RENAMES[name] ?? name;
|
|
72
|
+
}
|
|
73
|
+
function sameProfile(a, b) {
|
|
74
|
+
return canonicalProfileName(a) === canonicalProfileName(b);
|
|
75
|
+
}
|
|
76
|
+
function resolveProfile(profilesDir, name) {
|
|
77
|
+
const canonical = canonicalProfileName(name);
|
|
78
|
+
const oldNames = Object.keys(PROFILE_RENAMES).filter((o) => PROFILE_RENAMES[o] === canonical);
|
|
79
|
+
for (const candidate of [canonical, name, ...oldNames]) {
|
|
80
|
+
const file = path.join(profilesDir, `${candidate}.yaml`);
|
|
81
|
+
if (fs.existsSync(file)) return { name: candidate, file };
|
|
82
|
+
}
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
61
85
|
function listProfiles(profilesDir) {
|
|
62
86
|
if (!fs.existsSync(profilesDir)) return [];
|
|
63
|
-
return fs.readdirSync(profilesDir).filter((f) => f.endsWith(".yaml") && f !== "core.yaml").map((f) => parseProfile(path.join(profilesDir, f))).sort((a, b) => a.name.localeCompare(b.name));
|
|
87
|
+
return fs.readdirSync(profilesDir).filter((f) => f.endsWith(".yaml") && f !== "core.yaml").map((f) => parseProfile(path.join(profilesDir, f))).filter((p3) => !p3.renamed_to).sort((a, b) => a.name.localeCompare(b.name));
|
|
64
88
|
}
|
|
65
89
|
function mergeProfiles(profilesDir, profileNames) {
|
|
66
90
|
const namesToLoad = ["core", ...profileNames];
|
|
@@ -80,13 +104,17 @@ function mergeProfiles(profilesDir, profileNames) {
|
|
|
80
104
|
const hooks = [];
|
|
81
105
|
const outputStyles = [];
|
|
82
106
|
for (const name of namesToLoad) {
|
|
83
|
-
const
|
|
84
|
-
if (!
|
|
107
|
+
const resolved = resolveProfile(profilesDir, name);
|
|
108
|
+
if (!resolved) {
|
|
85
109
|
console.warn(` WARN: Profile '${name}.yaml' not found, skipping`);
|
|
86
110
|
continue;
|
|
87
111
|
}
|
|
88
|
-
|
|
89
|
-
|
|
112
|
+
if (resolved.name !== name && resolved.name === canonicalProfileName(name)) {
|
|
113
|
+
console.warn(` NOTE: Profile '${name}' is now '${resolved.name}'`);
|
|
114
|
+
}
|
|
115
|
+
if (loaded.includes(resolved.name)) continue;
|
|
116
|
+
const profile = parseProfile(resolved.file);
|
|
117
|
+
loaded.push(resolved.name);
|
|
90
118
|
for (const s of profile.skills) {
|
|
91
119
|
if (!seenSkills.has(s)) {
|
|
92
120
|
seenSkills.add(s);
|
|
@@ -178,7 +206,7 @@ function detectStack(dir) {
|
|
|
178
206
|
}
|
|
179
207
|
const isFlutter = hasFile(dir, "pubspec.yaml");
|
|
180
208
|
if (isFlutter) {
|
|
181
|
-
out.push({ profile: "flutter", reason: "pubspec.yaml" });
|
|
209
|
+
out.push({ profile: "mobile-flutter", reason: "pubspec.yaml" });
|
|
182
210
|
}
|
|
183
211
|
if (hasFile(dir, "go.mod")) {
|
|
184
212
|
out.push({ profile: "backend-go", reason: "go.mod" });
|
|
@@ -192,13 +220,13 @@ function detectStack(dir) {
|
|
|
192
220
|
out.push({ profile: "backend-nextjs", reason: "package.json: next" });
|
|
193
221
|
} else if (deps["react-native"] || deps["expo"]) {
|
|
194
222
|
isReactNative = true;
|
|
195
|
-
out.push({ profile: "mobile", reason: "package.json: react-native/expo" });
|
|
223
|
+
out.push({ profile: "mobile-react-native", reason: "package.json: react-native/expo" });
|
|
196
224
|
} else if (deps["react"] || deps["vue"] || deps["svelte"]) {
|
|
197
|
-
out.push({ profile: "frontend", reason: "package.json: react/vue/svelte" });
|
|
225
|
+
out.push({ profile: "frontend-react-vite", reason: "package.json: react/vue/svelte" });
|
|
198
226
|
} else if (deps["fastify"] || deps["express"] || deps["koa"] || deps["hono"]) {
|
|
199
|
-
out.push({ profile: "backend-
|
|
227
|
+
out.push({ profile: "backend-typescript", reason: "package.json: server framework" });
|
|
200
228
|
} else if (deps["typescript"]) {
|
|
201
|
-
out.push({ profile: "backend-
|
|
229
|
+
out.push({ profile: "backend-typescript", reason: "package.json: typescript" });
|
|
202
230
|
}
|
|
203
231
|
}
|
|
204
232
|
if (!isUnity) {
|
|
@@ -209,11 +237,11 @@ function detectStack(dir) {
|
|
|
209
237
|
}
|
|
210
238
|
if (!isFlutter && !isReactNative) {
|
|
211
239
|
if ((hasFile(dir, "settings.gradle") || hasFile(dir, "settings.gradle.kts")) && hasFile(dir, "app")) {
|
|
212
|
-
out.push({ profile: "android-
|
|
240
|
+
out.push({ profile: "mobile-android-kotlin", reason: "settings.gradle + app/" });
|
|
213
241
|
}
|
|
214
242
|
const ios = topLevelMatch(dir, ".xcodeproj") ?? topLevelMatch(dir, ".xcworkspace") ?? (hasFile(dir, "Podfile") ? "Podfile" : void 0);
|
|
215
243
|
if (ios) {
|
|
216
|
-
out.push({ profile: "ios-
|
|
244
|
+
out.push({ profile: "mobile-ios-swift", reason: ios });
|
|
217
245
|
}
|
|
218
246
|
}
|
|
219
247
|
return out;
|
|
@@ -259,7 +287,7 @@ async function runInstallWizard(profiles, detections) {
|
|
|
259
287
|
if (names.length === 0) {
|
|
260
288
|
p.outro(
|
|
261
289
|
chalk.dim(
|
|
262
|
-
"Nothing selected. Run again, or install directly: npx claude-code-arcane install backend-
|
|
290
|
+
"Nothing selected. Run again, or install directly: npx claude-code-arcane install backend-typescript+testing"
|
|
263
291
|
)
|
|
264
292
|
);
|
|
265
293
|
return null;
|
|
@@ -1747,7 +1775,7 @@ async function installCommand(profileExpr, opts) {
|
|
|
1747
1775
|
console.log();
|
|
1748
1776
|
}
|
|
1749
1777
|
console.log(
|
|
1750
|
-
chalk2.dim(" Usage: npx claude-code-arcane install backend-
|
|
1778
|
+
chalk2.dim(" Usage: npx claude-code-arcane install backend-typescript+agile+testing\n")
|
|
1751
1779
|
);
|
|
1752
1780
|
return;
|
|
1753
1781
|
}
|
|
@@ -1859,14 +1887,15 @@ async function addCommand(items = []) {
|
|
|
1859
1887
|
process.exit(1);
|
|
1860
1888
|
}
|
|
1861
1889
|
if (items.length === 0) {
|
|
1890
|
+
const installedProfiles = manifest.profiles.map(canonicalProfileName);
|
|
1862
1891
|
if (!(process.stdin.isTTY && process.stdout.isTTY)) {
|
|
1863
|
-
printCatalog(root,
|
|
1892
|
+
printCatalog(root, installedProfiles, manifest.installed_skills);
|
|
1864
1893
|
return;
|
|
1865
1894
|
}
|
|
1866
1895
|
const selected = await runAddWizard({
|
|
1867
1896
|
profiles: listProfiles(path14.join(root, "profiles")),
|
|
1868
1897
|
skills: listSkills(path14.join(root, "skills")),
|
|
1869
|
-
installedProfiles
|
|
1898
|
+
installedProfiles,
|
|
1870
1899
|
installedSkills: manifest.installed_skills
|
|
1871
1900
|
});
|
|
1872
1901
|
if (!selected) return;
|
|
@@ -1881,13 +1910,14 @@ async function addCommand(items = []) {
|
|
|
1881
1910
|
let statuslineAdded = false;
|
|
1882
1911
|
for (const item of items) {
|
|
1883
1912
|
if (item.startsWith("+")) {
|
|
1884
|
-
const
|
|
1885
|
-
const
|
|
1886
|
-
if (!
|
|
1887
|
-
console.error(chalk3.red(` Profile '${
|
|
1913
|
+
const requested = item.slice(1);
|
|
1914
|
+
const resolved = resolveProfile(path14.join(root, "profiles"), requested);
|
|
1915
|
+
if (!resolved) {
|
|
1916
|
+
console.error(chalk3.red(` Profile '${requested}' not found`));
|
|
1888
1917
|
continue;
|
|
1889
1918
|
}
|
|
1890
|
-
const
|
|
1919
|
+
const profileName = resolved.name;
|
|
1920
|
+
const profile = parseProfile(resolved.file);
|
|
1891
1921
|
for (const skill of profile.skills) {
|
|
1892
1922
|
const result = addSkill(root, target, skill, manifest.installed_skills);
|
|
1893
1923
|
if (result === "added") added.push(skill);
|
|
@@ -1935,7 +1965,7 @@ async function addCommand(items = []) {
|
|
|
1935
1965
|
if (profile.permissions.allow.length > 0 || profile.permissions.deny.length > 0) {
|
|
1936
1966
|
mergePermissions(claudeDir, profile.permissions);
|
|
1937
1967
|
}
|
|
1938
|
-
if (!manifest.profiles.
|
|
1968
|
+
if (!manifest.profiles.some((p3) => sameProfile(p3, profileName))) {
|
|
1939
1969
|
manifest.profiles.push(profileName);
|
|
1940
1970
|
manifest.profile_command = manifest.profiles.filter((p3) => p3 !== "core").join("+");
|
|
1941
1971
|
}
|
|
@@ -2175,30 +2205,31 @@ function removeProfile(root, target, profileName, manifest) {
|
|
|
2175
2205
|
);
|
|
2176
2206
|
return { removed: false, skills: [], agents: [] };
|
|
2177
2207
|
}
|
|
2178
|
-
|
|
2208
|
+
const installedName = manifest.profiles.find((p3) => sameProfile(p3, profileName));
|
|
2209
|
+
if (!installedName) {
|
|
2179
2210
|
console.warn(
|
|
2180
2211
|
chalk4.yellow(` WARNING: Profile '${profileName}' is not installed.`)
|
|
2181
2212
|
);
|
|
2182
2213
|
return { removed: false, skills: [], agents: [] };
|
|
2183
2214
|
}
|
|
2184
|
-
const
|
|
2185
|
-
if (!
|
|
2215
|
+
const resolved = resolveProfile(path15.join(root, "profiles"), installedName);
|
|
2216
|
+
if (!resolved) {
|
|
2186
2217
|
console.warn(
|
|
2187
|
-
chalk4.yellow(` WARNING: Profile '${
|
|
2218
|
+
chalk4.yellow(` WARNING: Profile '${installedName}.yaml' not found.`)
|
|
2188
2219
|
);
|
|
2189
2220
|
return { removed: false, skills: [], agents: [] };
|
|
2190
2221
|
}
|
|
2191
|
-
const profile = parseProfile(
|
|
2222
|
+
const profile = parseProfile(resolved.file);
|
|
2192
2223
|
const remainingProfiles = manifest.profiles.filter(
|
|
2193
|
-
(p3) => p3 !==
|
|
2224
|
+
(p3) => p3 !== installedName
|
|
2194
2225
|
);
|
|
2195
2226
|
const sharedSkills = /* @__PURE__ */ new Set();
|
|
2196
2227
|
const sharedAgents = /* @__PURE__ */ new Set();
|
|
2197
2228
|
const sharedRules = /* @__PURE__ */ new Set();
|
|
2198
2229
|
for (const rp of remainingProfiles) {
|
|
2199
|
-
const
|
|
2200
|
-
if (!
|
|
2201
|
-
const rpDef = parseProfile(
|
|
2230
|
+
const rpResolved = resolveProfile(path15.join(root, "profiles"), rp);
|
|
2231
|
+
if (!rpResolved) continue;
|
|
2232
|
+
const rpDef = parseProfile(rpResolved.file);
|
|
2202
2233
|
rpDef.skills.forEach((s) => sharedSkills.add(s));
|
|
2203
2234
|
rpDef.agents.forEach((a) => sharedAgents.add(a));
|
|
2204
2235
|
rpDef.rules.universal.forEach((r) => sharedRules.add(r));
|
|
@@ -3059,7 +3090,7 @@ async function worktreeCommand(branch, opts) {
|
|
|
3059
3090
|
if (!profileExpr) {
|
|
3060
3091
|
console.error(
|
|
3061
3092
|
chalk9.red(
|
|
3062
|
-
"No profile specified and no existing installation to inherit from.\nUse --profile to specify one: npx claude-code-arcane worktree feat/api --profile backend-
|
|
3093
|
+
"No profile specified and no existing installation to inherit from.\nUse --profile to specify one: npx claude-code-arcane worktree feat/api --profile backend-typescript+agile"
|
|
3063
3094
|
)
|
|
3064
3095
|
);
|
|
3065
3096
|
process.exit(1);
|
|
@@ -3488,7 +3519,7 @@ program.name("arcane").description(
|
|
|
3488
3519
|
"Claude Code Arcane \u2014 Skills, agents, hooks and rules for Claude Code"
|
|
3489
3520
|
).version(getPackageVersion());
|
|
3490
3521
|
program.command("install [profile]").description(
|
|
3491
|
-
"Install profiles (e.g., backend-
|
|
3522
|
+
"Install profiles (e.g., backend-typescript+agile). Without args, opens an interactive picker."
|
|
3492
3523
|
).option("-t, --target <dir>", "Target project directory", process.cwd()).option("-n, --dry-run", "Show what would be installed without changing files").option("-f, --force", "Overwrite without backup prompt").option(
|
|
3493
3524
|
"-s, --share-from <dir>",
|
|
3494
3525
|
"Share hooks/docs from an existing Arcane installation (e.g., main worktree)"
|
package/docs/USER-GUIDE.md
CHANGED
|
@@ -37,7 +37,7 @@ Arcane is a configuration harness for [Claude Code](https://docs.anthropic.com/e
|
|
|
37
37
|
No installation needed — Arcane runs via `npx`:
|
|
38
38
|
|
|
39
39
|
```bash
|
|
40
|
-
npx claude-code-arcane install backend-
|
|
40
|
+
npx claude-code-arcane install backend-typescript+agile
|
|
41
41
|
```
|
|
42
42
|
|
|
43
43
|
That's it. `npx` downloads and runs the latest version automatically.
|
|
@@ -49,7 +49,7 @@ That's it. `npx` downloads and runs the latest version automatically.
|
|
|
49
49
|
cd ~/projects/my-app
|
|
50
50
|
|
|
51
51
|
# 2. Install a profile
|
|
52
|
-
npx claude-code-arcane install backend-
|
|
52
|
+
npx claude-code-arcane install backend-typescript+agile
|
|
53
53
|
|
|
54
54
|
# 3. Open Claude Code
|
|
55
55
|
claude
|
|
@@ -69,10 +69,10 @@ Your project now has skills, agents, hooks, rules, and permissions tailored for
|
|
|
69
69
|
npx claude-code-arcane install
|
|
70
70
|
|
|
71
71
|
# Install a specific profile
|
|
72
|
-
npx claude-code-arcane install backend-
|
|
72
|
+
npx claude-code-arcane install backend-typescript
|
|
73
73
|
|
|
74
74
|
# Combine profiles with +
|
|
75
|
-
npx claude-code-arcane install backend-
|
|
75
|
+
npx claude-code-arcane install backend-typescript+agile+testing
|
|
76
76
|
|
|
77
77
|
# Install to a specific directory (default: current dir)
|
|
78
78
|
npx claude-code-arcane install unity-dev --target ~/projects/my-game
|
|
@@ -178,7 +178,7 @@ Removes `.claude/` and `.claude.bak/` from the current directory. Requires `--fo
|
|
|
178
178
|
|
|
179
179
|
```bash
|
|
180
180
|
# Create worktree + install Arcane in one step
|
|
181
|
-
npx claude-code-arcane worktree feat/new-api --profile backend-
|
|
181
|
+
npx claude-code-arcane worktree feat/new-api --profile backend-typescript+agile
|
|
182
182
|
|
|
183
183
|
# Inherits profile from current installation
|
|
184
184
|
npx claude-code-arcane worktree feat/new-api
|
|
@@ -219,9 +219,9 @@ All profiles are equal — pick any combination that fits your work. They are gr
|
|
|
219
219
|
|
|
220
220
|
| Category | Profiles |
|
|
221
221
|
|----------|----------|
|
|
222
|
-
| **Backend** | `backend-
|
|
223
|
-
| **Frontend & Design** | `frontend`, `design` |
|
|
224
|
-
| **Mobile** | `mobile`, `flutter`, `android-
|
|
222
|
+
| **Backend** | `backend-typescript`, `backend-go`, `backend-dotnet`, `backend-nestjs`, `backend-nextjs` |
|
|
223
|
+
| **Frontend & Design** | `frontend-react-vite`, `design` |
|
|
224
|
+
| **Mobile** | `mobile-react-native`, `mobile-flutter`, `mobile-android-kotlin`, `mobile-ios-swift` |
|
|
225
225
|
| **Gamedev** | `unity-dev`, `unity-design`, `unreal-dev`, `visual-novel`, `audio`, `meshy`, `blender` |
|
|
226
226
|
| **Platform & Quality** | `infra`, `database`, `security`, `testing`, `ai` |
|
|
227
227
|
| **Project Management** | `agile`, `jira`, `clickup`, `integrations` |
|
|
@@ -229,6 +229,8 @@ All profiles are equal — pick any combination that fits your work. They are gr
|
|
|
229
229
|
| **Personal** | `second-brain`, `job-hunt`, `freelance` |
|
|
230
230
|
| **Utilities** | `docs`, `self-improving`, `statusline` |
|
|
231
231
|
|
|
232
|
+
Older names still install and update: `backend-ts`, `frontend`, `mobile`, `flutter`, `ios-native` and `android-native` resolve to `backend-typescript`, `frontend-react-vite`, `mobile-react-native`, `mobile-flutter`, `mobile-ios-swift` and `mobile-android-kotlin`.
|
|
233
|
+
|
|
232
234
|
### Core (always included)
|
|
233
235
|
|
|
234
236
|
Every installation automatically loads `core.yaml` first:
|
|
@@ -255,7 +257,7 @@ npx claude-code-arcane install <profile>[+<profile>][+<profile>...]
|
|
|
255
257
|
|
|
256
258
|
1. **Always explicit** — there is no "full" or "all" profile. You choose what you need.
|
|
257
259
|
2. **Core is automatic** — the 21 universal skills and all hooks are always included.
|
|
258
|
-
3. **All profiles combine freely** — `unity-dev+unity-design`, `backend-go+frontend`, or `backend-
|
|
260
|
+
3. **All profiles combine freely** — `unity-dev+unity-design`, `backend-go+frontend-react-vite`, or `backend-typescript+agile+testing`; there is no required "base".
|
|
259
261
|
4. **Deduplication is automatic** — overlapping skills across profiles are installed once.
|
|
260
262
|
5. **Replace, not merge** — installing a new profile replaces the previous one entirely (with backup).
|
|
261
263
|
|
|
@@ -269,7 +271,7 @@ After the initial install, you can incrementally add or remove skills and profil
|
|
|
269
271
|
|
|
270
272
|
```bash
|
|
271
273
|
# Start with a profile
|
|
272
|
-
npx claude-code-arcane install backend-
|
|
274
|
+
npx claude-code-arcane install backend-typescript
|
|
273
275
|
|
|
274
276
|
# Later, add testing and security
|
|
275
277
|
npx claude-code-arcane add +testing +security
|
|
@@ -292,7 +294,7 @@ npx claude-code-arcane remove docker-setup
|
|
|
292
294
|
|
|
293
295
|
# Start over completely
|
|
294
296
|
npx claude-code-arcane clean --force
|
|
295
|
-
npx claude-code-arcane install backend-
|
|
297
|
+
npx claude-code-arcane install backend-typescript+agile
|
|
296
298
|
```
|
|
297
299
|
|
|
298
300
|
---
|
|
@@ -305,7 +307,7 @@ Work on multiple features in parallel using git worktrees, each with its own Arc
|
|
|
305
307
|
|
|
306
308
|
```bash
|
|
307
309
|
# Create worktree + install Arcane in one step
|
|
308
|
-
npx claude-code-arcane worktree feat/new-api --profile backend-
|
|
310
|
+
npx claude-code-arcane worktree feat/new-api --profile backend-typescript+agile
|
|
309
311
|
|
|
310
312
|
# Inherits profile from current installation
|
|
311
313
|
npx claude-code-arcane worktree feat/new-api
|
|
@@ -368,25 +370,25 @@ npx claude-code-arcane install unity-dev+unity-design+agile+clickup
|
|
|
368
370
|
npx claude-code-arcane install backend-go+infra+agile+jira
|
|
369
371
|
|
|
370
372
|
# Full-stack monorepo
|
|
371
|
-
npx claude-code-arcane install backend-
|
|
373
|
+
npx claude-code-arcane install backend-typescript+frontend-react-vite+testing+database
|
|
372
374
|
|
|
373
375
|
# Mobile app with CI/CD
|
|
374
|
-
npx claude-code-arcane install mobile+agile+clickup+testing
|
|
376
|
+
npx claude-code-arcane install mobile-react-native+agile+clickup+testing
|
|
375
377
|
|
|
376
378
|
# Secure backend with docs
|
|
377
|
-
npx claude-code-arcane install backend-
|
|
379
|
+
npx claude-code-arcane install backend-typescript+security+docs+database
|
|
378
380
|
|
|
379
381
|
# AI/ML project with data pipelines
|
|
380
382
|
npx claude-code-arcane install backend-go+ai+infra
|
|
381
383
|
|
|
382
384
|
# SaaS with full marketing stack
|
|
383
|
-
npx claude-code-arcane install backend-
|
|
385
|
+
npx claude-code-arcane install backend-typescript+marketing+business+finance
|
|
384
386
|
|
|
385
387
|
# Regulated medical device
|
|
386
|
-
npx claude-code-arcane install backend-
|
|
388
|
+
npx claude-code-arcane install backend-typescript+regulatory+security+testing
|
|
387
389
|
|
|
388
390
|
# With status bar
|
|
389
|
-
npx claude-code-arcane install backend-
|
|
391
|
+
npx claude-code-arcane install backend-typescript+agile+statusline
|
|
390
392
|
```
|
|
391
393
|
|
|
392
394
|
---
|
|
@@ -450,8 +452,8 @@ Every installation creates `.claude/arcane-manifest.json`:
|
|
|
450
452
|
{
|
|
451
453
|
"arcane_version": "1.0.0",
|
|
452
454
|
"cli": "npm",
|
|
453
|
-
"profile_command": "backend-
|
|
454
|
-
"profiles": ["core", "backend-
|
|
455
|
+
"profile_command": "backend-typescript+agile",
|
|
456
|
+
"profiles": ["core", "backend-typescript", "agile"],
|
|
455
457
|
"installed_at": "2026-05-25T15:30:00Z",
|
|
456
458
|
"total_skills": 56,
|
|
457
459
|
"total_rules": 6,
|
|
@@ -523,7 +525,7 @@ mv ~/projects/my-game/.claude.bak ~/projects/my-game/.claude
|
|
|
523
525
|
|
|
524
526
|
### Can I combine multiple stack profiles?
|
|
525
527
|
|
|
526
|
-
Yes. `backend-go+frontend` gives you both Go backend and React frontend skills. Duplicate skills are automatically deduplicated.
|
|
528
|
+
Yes. `backend-go+frontend-react-vite` gives you both Go backend and React frontend skills. Duplicate skills are automatically deduplicated.
|
|
527
529
|
|
|
528
530
|
### Does the profile persist between Claude Code sessions?
|
|
529
531
|
|
package/package.json
CHANGED
package/profiles/ai.yaml
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
# Bridge for CLIs released before this profile was renamed: they look it up as 'android-native'. Keep identical to mobile-android-kotlin.yaml.
|
|
1
2
|
name: android-native
|
|
3
|
+
renamed_to: mobile-android-kotlin
|
|
2
4
|
description: "Android native — Kotlin + Jetpack Compose + Material Design 3"
|
|
3
5
|
category: mobile
|
|
4
6
|
|
package/profiles/backend-go.yaml
CHANGED
|
@@ -27,14 +27,6 @@ skills:
|
|
|
27
27
|
- audit-log
|
|
28
28
|
- slo-sli
|
|
29
29
|
- ci-cd-setup
|
|
30
|
-
- agent-designer
|
|
31
|
-
- agent-workflow-designer
|
|
32
|
-
- email-template-builder
|
|
33
|
-
- mcp-server-builder
|
|
34
|
-
- ms365-tenant-manager
|
|
35
|
-
- snowflake-development
|
|
36
|
-
- stripe-integration-expert
|
|
37
|
-
- tech-stack-evaluator
|
|
38
30
|
|
|
39
31
|
rules:
|
|
40
32
|
universal:
|
package/profiles/backend-ts.yaml
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
# Bridge for CLIs released before this profile was renamed: they look it up as 'backend-ts'. Keep identical to backend-typescript.yaml.
|
|
1
2
|
name: backend-ts
|
|
3
|
+
renamed_to: backend-typescript
|
|
2
4
|
description: "Backend TypeScript — Fastify, Prisma, Zod, API design, CI"
|
|
3
5
|
category: backend
|
|
4
6
|
|
|
@@ -28,14 +30,6 @@ skills:
|
|
|
28
30
|
- websocket-realtime-rooms
|
|
29
31
|
- search-setup
|
|
30
32
|
- ci-cd-setup
|
|
31
|
-
- agent-designer
|
|
32
|
-
- agent-workflow-designer
|
|
33
|
-
- email-template-builder
|
|
34
|
-
- mcp-server-builder
|
|
35
|
-
- ms365-tenant-manager
|
|
36
|
-
- snowflake-development
|
|
37
|
-
- stripe-integration-expert
|
|
38
|
-
- tech-stack-evaluator
|
|
39
33
|
|
|
40
34
|
rules:
|
|
41
35
|
universal:
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
name: backend-typescript
|
|
2
|
+
description: "Backend TypeScript — Fastify, Prisma, Zod, API design, CI"
|
|
3
|
+
category: backend
|
|
4
|
+
|
|
5
|
+
skills:
|
|
6
|
+
- testing
|
|
7
|
+
- deps-audit
|
|
8
|
+
- env-sync
|
|
9
|
+
- observability
|
|
10
|
+
- scaffold-fastify-ts
|
|
11
|
+
- database
|
|
12
|
+
- api-design
|
|
13
|
+
- api-docs
|
|
14
|
+
- api-versioning
|
|
15
|
+
- auth-strategy
|
|
16
|
+
- jwt-strategy
|
|
17
|
+
- mfa-setup
|
|
18
|
+
- oauth-setup
|
|
19
|
+
- rbac-abac
|
|
20
|
+
- performance
|
|
21
|
+
- async-ops
|
|
22
|
+
- audit-log
|
|
23
|
+
- monorepo-setup
|
|
24
|
+
- data-migrations
|
|
25
|
+
- caching-strategy
|
|
26
|
+
- webhooks
|
|
27
|
+
- rate-limiting
|
|
28
|
+
- websocket-realtime-rooms
|
|
29
|
+
- search-setup
|
|
30
|
+
- ci-cd-setup
|
|
31
|
+
|
|
32
|
+
rules:
|
|
33
|
+
universal:
|
|
34
|
+
- backend-code
|
|
35
|
+
- api-code
|
|
36
|
+
- migration-code
|
|
37
|
+
gamedev:
|
|
38
|
+
[]
|
|
39
|
+
|
|
40
|
+
agents:
|
|
41
|
+
- engineering
|
|
42
|
+
|
|
43
|
+
permissions:
|
|
44
|
+
allow:
|
|
45
|
+
- "Bash(npm *)"
|
|
46
|
+
- "Bash(yarn *)"
|
|
47
|
+
- "Bash(pnpm *)"
|
|
48
|
+
- "Bash(docker ps*)"
|
|
49
|
+
- "Bash(docker images*)"
|
|
50
|
+
deny:
|
|
51
|
+
[]
|
package/profiles/flutter.yaml
CHANGED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
name: frontend-react-vite
|
|
2
|
+
description: "Frontend React + Vite + TypeScript"
|
|
3
|
+
category: frontend
|
|
4
|
+
|
|
5
|
+
skills:
|
|
6
|
+
- testing
|
|
7
|
+
- i18n-setup
|
|
8
|
+
- deps-audit
|
|
9
|
+
- env-sync
|
|
10
|
+
- observability
|
|
11
|
+
- release
|
|
12
|
+
- onboard
|
|
13
|
+
- scaffold-react-vite
|
|
14
|
+
- state-management
|
|
15
|
+
- form-validation
|
|
16
|
+
- accessibility
|
|
17
|
+
- web-security
|
|
18
|
+
- ci-cd-setup
|
|
19
|
+
- cdn-setup
|
|
20
|
+
- file-uploads
|
|
21
|
+
- frontend-dev
|
|
22
|
+
- csp-headers
|
|
23
|
+
|
|
24
|
+
rules:
|
|
25
|
+
universal:
|
|
26
|
+
- frontend-code
|
|
27
|
+
gamedev:
|
|
28
|
+
[]
|
|
29
|
+
|
|
30
|
+
agents:
|
|
31
|
+
- engineering
|
|
32
|
+
|
|
33
|
+
permissions:
|
|
34
|
+
allow:
|
|
35
|
+
- "Bash(npm *)"
|
|
36
|
+
- "Bash(yarn *)"
|
|
37
|
+
- "Bash(pnpm *)"
|
|
38
|
+
deny:
|
|
39
|
+
[]
|
package/profiles/frontend.yaml
CHANGED
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
name: integrations
|
|
2
|
-
description: "Integraciones externas — GitHub Projects, Slack, Postman"
|
|
2
|
+
description: "Integraciones externas — GitHub Projects, Slack, Postman, Stripe, email templates, Microsoft 365, Snowflake, evaluación de stack"
|
|
3
3
|
category: management
|
|
4
4
|
|
|
5
5
|
skills:
|
|
6
6
|
- gh-projects
|
|
7
7
|
- slack
|
|
8
8
|
- postman
|
|
9
|
+
- stripe-integration-expert
|
|
10
|
+
- email-template-builder
|
|
11
|
+
- ms365-tenant-manager
|
|
12
|
+
- snowflake-development
|
|
13
|
+
- tech-stack-evaluator
|
|
9
14
|
|
|
10
15
|
rules:
|
|
11
16
|
universal:
|
package/profiles/ios-native.yaml
CHANGED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
name: mobile-android-kotlin
|
|
2
|
+
description: "Android native — Kotlin + Jetpack Compose + Material Design 3"
|
|
3
|
+
category: mobile
|
|
4
|
+
|
|
5
|
+
skills:
|
|
6
|
+
- testing
|
|
7
|
+
- deps-audit
|
|
8
|
+
- env-sync
|
|
9
|
+
- observability
|
|
10
|
+
- release
|
|
11
|
+
- onboard
|
|
12
|
+
- perf-profile
|
|
13
|
+
- android-native-dev
|
|
14
|
+
- state-management
|
|
15
|
+
- form-validation
|
|
16
|
+
- accessibility
|
|
17
|
+
- auth-strategy
|
|
18
|
+
- ci-cd-setup
|
|
19
|
+
- deploy-check
|
|
20
|
+
|
|
21
|
+
rules:
|
|
22
|
+
universal:
|
|
23
|
+
[]
|
|
24
|
+
gamedev:
|
|
25
|
+
[]
|
|
26
|
+
|
|
27
|
+
agents:
|
|
28
|
+
- engineering
|
|
29
|
+
|
|
30
|
+
permissions:
|
|
31
|
+
allow:
|
|
32
|
+
- "Bash(./gradlew *)"
|
|
33
|
+
- "Bash(gradle *)"
|
|
34
|
+
- "Bash(adb *)"
|
|
35
|
+
deny:
|
|
36
|
+
[]
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
name: mobile-flutter
|
|
2
|
+
description: "Flutter + Dart cross-platform development"
|
|
3
|
+
category: mobile
|
|
4
|
+
|
|
5
|
+
skills:
|
|
6
|
+
- testing
|
|
7
|
+
- i18n-setup
|
|
8
|
+
- deps-audit
|
|
9
|
+
- env-sync
|
|
10
|
+
- observability
|
|
11
|
+
- release
|
|
12
|
+
- onboard
|
|
13
|
+
- perf-profile
|
|
14
|
+
- flutter-dev
|
|
15
|
+
- state-management
|
|
16
|
+
- form-validation
|
|
17
|
+
- accessibility
|
|
18
|
+
- auth-strategy
|
|
19
|
+
- ci-cd-setup
|
|
20
|
+
- deploy-check
|
|
21
|
+
|
|
22
|
+
rules:
|
|
23
|
+
universal:
|
|
24
|
+
- frontend-code
|
|
25
|
+
gamedev:
|
|
26
|
+
[]
|
|
27
|
+
|
|
28
|
+
agents:
|
|
29
|
+
- engineering
|
|
30
|
+
|
|
31
|
+
permissions:
|
|
32
|
+
allow:
|
|
33
|
+
- "Bash(flutter *)"
|
|
34
|
+
- "Bash(dart *)"
|
|
35
|
+
- "Bash(pub *)"
|
|
36
|
+
deny:
|
|
37
|
+
[]
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
name: mobile-ios-swift
|
|
2
|
+
description: "iOS native — Swift + UIKit/SwiftUI + Apple HIG"
|
|
3
|
+
category: mobile
|
|
4
|
+
|
|
5
|
+
skills:
|
|
6
|
+
- testing
|
|
7
|
+
- deps-audit
|
|
8
|
+
- env-sync
|
|
9
|
+
- observability
|
|
10
|
+
- release
|
|
11
|
+
- onboard
|
|
12
|
+
- perf-profile
|
|
13
|
+
- ios-application-dev
|
|
14
|
+
- state-management
|
|
15
|
+
- form-validation
|
|
16
|
+
- accessibility
|
|
17
|
+
- auth-strategy
|
|
18
|
+
- ci-cd-setup
|
|
19
|
+
- deploy-check
|
|
20
|
+
|
|
21
|
+
rules:
|
|
22
|
+
universal:
|
|
23
|
+
[]
|
|
24
|
+
gamedev:
|
|
25
|
+
[]
|
|
26
|
+
|
|
27
|
+
agents:
|
|
28
|
+
- engineering
|
|
29
|
+
|
|
30
|
+
permissions:
|
|
31
|
+
allow:
|
|
32
|
+
- "Bash(xcodebuild *)"
|
|
33
|
+
- "Bash(swift *)"
|
|
34
|
+
- "Bash(pod *)"
|
|
35
|
+
- "Bash(xcrun *)"
|
|
36
|
+
deny:
|
|
37
|
+
[]
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
name: mobile-react-native
|
|
2
|
+
description: "Mobile React Native + Expo + TypeScript"
|
|
3
|
+
category: mobile
|
|
4
|
+
|
|
5
|
+
skills:
|
|
6
|
+
- testing
|
|
7
|
+
- i18n-setup
|
|
8
|
+
- deps-audit
|
|
9
|
+
- env-sync
|
|
10
|
+
- observability
|
|
11
|
+
- release
|
|
12
|
+
- onboard
|
|
13
|
+
- perf-profile
|
|
14
|
+
- scaffold-react-native
|
|
15
|
+
- react-native-dev
|
|
16
|
+
- state-management
|
|
17
|
+
- form-validation
|
|
18
|
+
- accessibility
|
|
19
|
+
- auth-strategy
|
|
20
|
+
- file-uploads
|
|
21
|
+
- ci-cd-setup
|
|
22
|
+
- deploy-check
|
|
23
|
+
|
|
24
|
+
rules:
|
|
25
|
+
universal:
|
|
26
|
+
- frontend-code
|
|
27
|
+
gamedev:
|
|
28
|
+
[]
|
|
29
|
+
|
|
30
|
+
agents:
|
|
31
|
+
- engineering
|
|
32
|
+
|
|
33
|
+
permissions:
|
|
34
|
+
allow:
|
|
35
|
+
- "Bash(npm *)"
|
|
36
|
+
- "Bash(yarn *)"
|
|
37
|
+
- "Bash(pnpm *)"
|
|
38
|
+
deny:
|
|
39
|
+
[]
|
package/profiles/mobile.yaml
CHANGED
|
@@ -27,7 +27,7 @@ Mismo criterio que el picker de `arcane install`: mostrar solo lo que **no** est
|
|
|
27
27
|
elegir. No listar los 400 skills.
|
|
28
28
|
|
|
29
29
|
1. Read `.claude/arcane-manifest.json` (`profiles`, `installed_skills`)
|
|
30
|
-
2. List `profiles/*.yaml` from the source, skip `core.yaml
|
|
30
|
+
2. List `profiles/*.yaml` from the source, skip `core.yaml`, the ones already in `profiles`, and bridge files (those with a `renamed_to` field: an old name kept for older CLIs). An installed old name counts as its `renamed_to` profile
|
|
31
31
|
3. Print the remaining profiles grouped by their `category` field, in the order of
|
|
32
32
|
`CATEGORY_ORDER` (Backend, Frontend & Design, Mobile, Gamedev, Platform & Quality,
|
|
33
33
|
Project Management, Business, Personal, Utilities), each with its description
|
|
@@ -15,7 +15,7 @@ List all profiles and skills available in the Arcane source repo, so you can see
|
|
|
15
15
|
1. Read `.claude/arcane-manifest.json` to find the `source` path (Arcane repo location)
|
|
16
16
|
2. If no manifest, ask the user for the Arcane repo path
|
|
17
17
|
3. From the source repo, list:
|
|
18
|
-
- **Profiles** from `profiles/*.yaml`, grouped by their `category` field (backend, frontend, mobile, gamedev, platform, management, business, personal, utilities)
|
|
18
|
+
- **Profiles** from `profiles/*.yaml`, skipping bridge files (those with a `renamed_to` field), grouped by their `category` field (backend, frontend, mobile, gamedev, platform, management, business, personal, utilities)
|
|
19
19
|
- **All skills** in `skills/` directory, grouped by category from SKILL.md frontmatter
|
|
20
20
|
4. Mark skills that are already installed in the current project with `[installed]`
|
|
21
21
|
5. Close with a one-line summary (`COMPLETE — N profiles, M skills, K installed`)
|
|
@@ -25,8 +25,8 @@ List all profiles and skills available in the Arcane source repo, so you can see
|
|
|
25
25
|
```
|
|
26
26
|
=== Available Profiles ===
|
|
27
27
|
Backend:
|
|
28
|
-
backend-
|
|
29
|
-
backend-go
|
|
28
|
+
backend-typescript Backend TypeScript — Fastify, Prisma, Zod
|
|
29
|
+
backend-go Backend Go — scaffold, DB, auth, API design
|
|
30
30
|
...
|
|
31
31
|
|
|
32
32
|
Project Management:
|
|
@@ -27,7 +27,7 @@ Show what profiles, skills, rules, and agents are installed in the current proje
|
|
|
27
27
|
|
|
28
28
|
```
|
|
29
29
|
=== Arcane Status ===
|
|
30
|
-
Profiles: backend-
|
|
30
|
+
Profiles: backend-typescript + agile + testing
|
|
31
31
|
Installed: 2026-05-01T12:00:00Z
|
|
32
32
|
Source: /path/to/Claude-Code-Arcane
|
|
33
33
|
|
|
@@ -77,7 +77,7 @@ Después **rutear al trabajo técnico**, que ya existe en el repo:
|
|
|
77
77
|
| Si el proyecto es | Seguí con |
|
|
78
78
|
|---|---|
|
|
79
79
|
| Historias y tickets | `/create-stories`, `/create-epics` |
|
|
80
|
-
| Backend, frontend, mobile | El perfil técnico que corresponda (`+backend-
|
|
80
|
+
| Backend, frontend, mobile | El perfil técnico que corresponda (`+backend-typescript`, `+frontend-react-vite`, ...) |
|
|
81
81
|
| Algo sin especificar del lado del cliente | `/product-discovery` antes de codear |
|
|
82
82
|
| Documentar lo que ya existe | `/reverse-document` |
|
|
83
83
|
|