arcanea 3.1.0 → 3.3.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/dist/cli/index.js +234 -16
- package/dist/index.d.ts +1 -1
- package/dist/index.js +114 -5
- package/package.json +1 -1
- package/skills/{ai-symbiosis.md → arcanea/ai-symbiosis/SKILL.md} +13 -0
- package/skills/arcanea/{arcanea-anti-trope.md → anti-trope/SKILL.md} +8 -0
- package/skills/{luminor-council.md → arcanea/luminor-council/SKILL.md} +15 -0
- package/skills/{character-alchemist.md → creative/character-alchemist/SKILL.md} +14 -0
- package/skills/{creative-bestiary.md → creative/creative-bestiary/SKILL.md} +14 -0
- package/skills/{story-weaver.md → creative/story-weaver/SKILL.md} +14 -0
- package/skills/{world-architect.md → creative/world-architect/SKILL.md} +14 -0
package/dist/cli/index.js
CHANGED
|
@@ -2312,7 +2312,13 @@ async function installForPlatform(targetDir, packageRoot, platform, force) {
|
|
|
2312
2312
|
}
|
|
2313
2313
|
if (platform === "claude-code") {
|
|
2314
2314
|
await installClaudeCodeSettings(platformPath, force);
|
|
2315
|
-
} else if (platform === "
|
|
2315
|
+
} else if (platform === "cursor") {
|
|
2316
|
+
await installCursorRules(targetDir, packageRoot, force);
|
|
2317
|
+
} else if (platform === "codex") {
|
|
2318
|
+
await installCodexConfig(targetDir, packageRoot, force);
|
|
2319
|
+
} else if (platform === "gemini") {
|
|
2320
|
+
await installGeminiConfig(targetDir, packageRoot, force);
|
|
2321
|
+
}
|
|
2316
2322
|
}
|
|
2317
2323
|
async function installClaudeCodeSettings(platformPath, force) {
|
|
2318
2324
|
const settingsPath = join(platformPath, "settings.json");
|
|
@@ -2322,15 +2328,38 @@ async function installClaudeCodeSettings(platformPath, force) {
|
|
|
2322
2328
|
UserPromptSubmit: [
|
|
2323
2329
|
{
|
|
2324
2330
|
matcher: "ultraworld|ulw",
|
|
2325
|
-
hooks: [{
|
|
2331
|
+
hooks: [{
|
|
2332
|
+
type: "command",
|
|
2333
|
+
command: "echo '[ARCANEA_MODE=ultraworld] Fire ALL world-building agents: arcanea-story-master, arcanea-character-crafter, arcanea-world-expander, arcanea-lore-master, creation-architect. Use Task tool with run_in_background=true for each agent. Respond with parallel results.'"
|
|
2334
|
+
}]
|
|
2326
2335
|
},
|
|
2327
2336
|
{
|
|
2328
2337
|
matcher: "ultrawrite|ulwr",
|
|
2329
|
-
hooks: [{
|
|
2338
|
+
hooks: [{
|
|
2339
|
+
type: "command",
|
|
2340
|
+
command: "echo '[ARCANEA_MODE=ultrawrite] Fire ALL writing agents: story-architect, prose-weaver, voice-alchemist, line-editor, continuity-guardian. Use Task tool with run_in_background=true for each agent. Respond with parallel results.'"
|
|
2341
|
+
}]
|
|
2342
|
+
},
|
|
2343
|
+
{
|
|
2344
|
+
matcher: "ultracode|ulc",
|
|
2345
|
+
hooks: [{
|
|
2346
|
+
type: "command",
|
|
2347
|
+
command: "echo '[ARCANEA_MODE=ultracode] Fire ALL coding agents: arcanea-architect, arcanea-coder, arcanea-reviewer, arcanea-debugger. Use Task tool with run_in_background=true for each agent. Respond with parallel results.'"
|
|
2348
|
+
}]
|
|
2330
2349
|
},
|
|
2331
2350
|
{
|
|
2332
2351
|
matcher: "ultrabook|ulb",
|
|
2333
|
-
hooks: [{
|
|
2352
|
+
hooks: [{
|
|
2353
|
+
type: "command",
|
|
2354
|
+
command: "echo '[ARCANEA_MODE=ultrabook] Complete book pipeline: world-building → story structure → chapter drafts → editing → production. Run sequentially, with parallel agents within each phase.'"
|
|
2355
|
+
}]
|
|
2356
|
+
},
|
|
2357
|
+
{
|
|
2358
|
+
matcher: "ultrawork|ulwk",
|
|
2359
|
+
hooks: [{
|
|
2360
|
+
type: "command",
|
|
2361
|
+
command: "echo '[ARCANEA_MODE=ultrawork] Maximum parallel execution. Spawn all relevant agents simultaneously using Task tool with run_in_background=true.'"
|
|
2362
|
+
}]
|
|
2334
2363
|
}
|
|
2335
2364
|
]
|
|
2336
2365
|
}
|
|
@@ -2339,6 +2368,78 @@ async function installClaudeCodeSettings(platformPath, force) {
|
|
|
2339
2368
|
console.log(import_picocolors.default.green(" ✓ Created Claude Code settings with magic word hooks"));
|
|
2340
2369
|
}
|
|
2341
2370
|
}
|
|
2371
|
+
async function installCursorRules(targetDir, packageRoot, force) {
|
|
2372
|
+
const rulesPath = join(targetDir, ".cursorrules");
|
|
2373
|
+
if (!existsSync(rulesPath) || force) {
|
|
2374
|
+
const claudeMdSource = join(packageRoot, "CLAUDE.md");
|
|
2375
|
+
if (existsSync(claudeMdSource)) {
|
|
2376
|
+
const claudeContent = readFileSync(claudeMdSource, "utf-8");
|
|
2377
|
+
const cursorRules = `# Cursor Rules — Generated by Arcanea v${VERSION}
|
|
2378
|
+
|
|
2379
|
+
${claudeContent}`;
|
|
2380
|
+
writeFileSync(rulesPath, cursorRules);
|
|
2381
|
+
console.log(import_picocolors.default.green(" ✓ Created .cursorrules with Arcanea identity"));
|
|
2382
|
+
}
|
|
2383
|
+
}
|
|
2384
|
+
}
|
|
2385
|
+
async function installCodexConfig(targetDir, packageRoot, force) {
|
|
2386
|
+
const codexMdPath = join(targetDir, "codex.md");
|
|
2387
|
+
if (!existsSync(codexMdPath) || force) {
|
|
2388
|
+
const claudeMdSource = join(packageRoot, "CLAUDE.md");
|
|
2389
|
+
if (existsSync(claudeMdSource)) {
|
|
2390
|
+
const content = readFileSync(claudeMdSource, "utf-8");
|
|
2391
|
+
const codexMd = [
|
|
2392
|
+
`# Codex Instructions — Generated by Arcanea v${VERSION}`,
|
|
2393
|
+
"",
|
|
2394
|
+
"> These instructions transform Codex into Arcanea, the Creative Intelligence Platform.",
|
|
2395
|
+
"> Agent definitions: `.codex/agents/` | Skills: `.codex/skills/` | Commands: `.codex/commands/`",
|
|
2396
|
+
"",
|
|
2397
|
+
content,
|
|
2398
|
+
"",
|
|
2399
|
+
"## Codex-Specific Notes",
|
|
2400
|
+
"",
|
|
2401
|
+
"- Read agent definitions from `.codex/agents/` for available specialist agents",
|
|
2402
|
+
"- Read skill definitions from `.codex/skills/` for creative and technical skills",
|
|
2403
|
+
"- Read command definitions from `.codex/commands/` for slash commands",
|
|
2404
|
+
"- MCP servers are configured in `.mcp.json`",
|
|
2405
|
+
"- When magic words (ultraworld, ultracode, etc.) are used, read the relevant agent files and apply their instructions",
|
|
2406
|
+
""
|
|
2407
|
+
].join(`
|
|
2408
|
+
`);
|
|
2409
|
+
writeFileSync(codexMdPath, codexMd);
|
|
2410
|
+
console.log(import_picocolors.default.green(" ✓ Created codex.md (Arcanea instructions for Codex CLI)"));
|
|
2411
|
+
}
|
|
2412
|
+
}
|
|
2413
|
+
}
|
|
2414
|
+
async function installGeminiConfig(targetDir, packageRoot, force) {
|
|
2415
|
+
const geminiMdPath = join(targetDir, "GEMINI.md");
|
|
2416
|
+
if (!existsSync(geminiMdPath) || force) {
|
|
2417
|
+
const claudeMdSource = join(packageRoot, "CLAUDE.md");
|
|
2418
|
+
if (existsSync(claudeMdSource)) {
|
|
2419
|
+
const content = readFileSync(claudeMdSource, "utf-8");
|
|
2420
|
+
const geminiMd = [
|
|
2421
|
+
`# Gemini Instructions — Generated by Arcanea v${VERSION}`,
|
|
2422
|
+
"",
|
|
2423
|
+
"> These instructions transform Gemini into Arcanea, the Creative Intelligence Platform.",
|
|
2424
|
+
"> Agent definitions: `.gemini/agents/` | Skills: `.gemini/skills/` | Commands: `.gemini/commands/`",
|
|
2425
|
+
"",
|
|
2426
|
+
content,
|
|
2427
|
+
"",
|
|
2428
|
+
"## Gemini-Specific Notes",
|
|
2429
|
+
"",
|
|
2430
|
+
"- Read agent definitions from `.gemini/agents/` for available specialist agents",
|
|
2431
|
+
"- Read skill definitions from `.gemini/skills/` for creative and technical skills",
|
|
2432
|
+
"- Read command definitions from `.gemini/commands/` for slash commands",
|
|
2433
|
+
"- MCP servers are configured in `.mcp.json`",
|
|
2434
|
+
"- When magic words (ultraworld, ultracode, etc.) are used, read the relevant agent files and apply their instructions",
|
|
2435
|
+
""
|
|
2436
|
+
].join(`
|
|
2437
|
+
`);
|
|
2438
|
+
writeFileSync(geminiMdPath, geminiMd);
|
|
2439
|
+
console.log(import_picocolors.default.green(" ✓ Created GEMINI.md (Arcanea instructions for Gemini CLI)"));
|
|
2440
|
+
}
|
|
2441
|
+
}
|
|
2442
|
+
}
|
|
2342
2443
|
async function installMcpConfig(targetDir, force) {
|
|
2343
2444
|
const mcpPath = join(targetDir, ".mcp.json");
|
|
2344
2445
|
console.log(import_picocolors.default.blue(`
|
|
@@ -2355,6 +2456,11 @@ Configuring MCP integrations...`));
|
|
|
2355
2456
|
...existingConfig,
|
|
2356
2457
|
mcpServers: {
|
|
2357
2458
|
...existingConfig.mcpServers || {},
|
|
2459
|
+
arcanea: {
|
|
2460
|
+
command: "npx",
|
|
2461
|
+
args: ["-y", "@arcanea/mcp-server@latest"],
|
|
2462
|
+
description: "Arcanea creative toolkit - world-building, characters, lore, bestiary"
|
|
2463
|
+
},
|
|
2358
2464
|
"nano-banana": {
|
|
2359
2465
|
command: "npx",
|
|
2360
2466
|
args: ["-y", "@anthropic-ai/nano-banana"],
|
|
@@ -2368,6 +2474,7 @@ Configuring MCP integrations...`));
|
|
|
2368
2474
|
}
|
|
2369
2475
|
};
|
|
2370
2476
|
writeFileSync(mcpPath, JSON.stringify(mcpConfig, null, 2));
|
|
2477
|
+
console.log(import_picocolors.default.green("✓ Configured Arcanea MCP (creative toolkit)"));
|
|
2371
2478
|
console.log(import_picocolors.default.green("✓ Configured Nano Banana MCP (image generation)"));
|
|
2372
2479
|
console.log(import_picocolors.default.green("✓ Configured Context7 MCP (documentation)"));
|
|
2373
2480
|
console.log(import_picocolors.default.dim("ℹ Suno MCP requires manual API key setup"));
|
|
@@ -2401,6 +2508,8 @@ function printSuccessMessage(platforms) {
|
|
|
2401
2508
|
console.log(import_picocolors.default.cyan(" ultraworld") + " - Full parallel world generation");
|
|
2402
2509
|
console.log(import_picocolors.default.cyan(" ultrawrite") + " - Full parallel chapter writing");
|
|
2403
2510
|
console.log(import_picocolors.default.cyan(" ultrabook ") + " - Complete book pipeline");
|
|
2511
|
+
console.log(import_picocolors.default.yellow(" ultracode ") + " - Full parallel coding (architect + coder + reviewer)");
|
|
2512
|
+
console.log(import_picocolors.default.yellow(" ultrawork ") + " - Maximum parallel execution for any task");
|
|
2404
2513
|
console.log();
|
|
2405
2514
|
console.log(import_picocolors.default.bold("Try:"));
|
|
2406
2515
|
console.log(import_picocolors.default.dim(" /luminor Valora courage"));
|
|
@@ -2410,7 +2519,7 @@ function printSuccessMessage(platforms) {
|
|
|
2410
2519
|
}
|
|
2411
2520
|
|
|
2412
2521
|
// src/index.ts
|
|
2413
|
-
var VERSION = "3.
|
|
2522
|
+
var VERSION = "3.3.0";
|
|
2414
2523
|
var NAME = "arcanea";
|
|
2415
2524
|
var ORCHESTRATOR = "Arcanea";
|
|
2416
2525
|
var defaultConfig = {
|
|
@@ -2537,8 +2646,22 @@ var AGENT_TEAMS = {
|
|
|
2537
2646
|
};
|
|
2538
2647
|
|
|
2539
2648
|
// src/cli/index.ts
|
|
2540
|
-
import { existsSync as existsSync2 } from "fs";
|
|
2649
|
+
import { existsSync as existsSync2, readdirSync, readFileSync as readFileSync2, statSync } from "fs";
|
|
2541
2650
|
import { join as join2 } from "path";
|
|
2651
|
+
function countMdFiles(dir) {
|
|
2652
|
+
let count = 0;
|
|
2653
|
+
for (const entry of readdirSync(dir)) {
|
|
2654
|
+
const full = join2(dir, entry);
|
|
2655
|
+
try {
|
|
2656
|
+
if (statSync(full).isDirectory()) {
|
|
2657
|
+
count += countMdFiles(full);
|
|
2658
|
+
} else if (entry.endsWith(".md")) {
|
|
2659
|
+
count++;
|
|
2660
|
+
}
|
|
2661
|
+
} catch {}
|
|
2662
|
+
}
|
|
2663
|
+
return count;
|
|
2664
|
+
}
|
|
2542
2665
|
var program2 = new Command;
|
|
2543
2666
|
program2.name(NAME).description(`${ORCHESTRATOR} - The Creative Intelligence Platform`).version(VERSION);
|
|
2544
2667
|
program2.command("install").description("Initialize Arcanea in current project").option("-f, --force", "Overwrite existing configuration").option("--claude-code", "Install only for Claude Code").option("--opencode", "Install only for OpenCode").option("--codex", "Install only for Codex").option("--gemini", "Install only for Gemini CLI").option("--cursor", "Install only for Cursor").option("--all", "Install for all supported platforms").option("--skip-mcp", "Skip MCP configuration").action(async (options) => {
|
|
@@ -2628,19 +2751,20 @@ program2.command("magic").description("Show magic words and their effects").acti
|
|
|
2628
2751
|
console.log(import_picocolors2.default.cyan(`
|
|
2629
2752
|
Magic Words
|
|
2630
2753
|
`));
|
|
2631
|
-
console.log(import_picocolors2.default.bold(
|
|
2632
|
-
console.log("
|
|
2633
|
-
console.log("
|
|
2754
|
+
console.log(import_picocolors2.default.bold("Creative Magic:"));
|
|
2755
|
+
console.log(import_picocolors2.default.bold(import_picocolors2.default.cyan(" ultraworld")) + " (or ulw) — Fire ALL world-building agents in parallel");
|
|
2756
|
+
console.log(import_picocolors2.default.bold(import_picocolors2.default.green(" ultrawrite")) + " (or ulwr) — Fire ALL writing/editing agents in parallel");
|
|
2757
|
+
console.log(import_picocolors2.default.bold(import_picocolors2.default.magenta(" ultrabook")) + " (or ulb) — Complete book pipeline end-to-end");
|
|
2634
2758
|
console.log();
|
|
2635
|
-
console.log(import_picocolors2.default.bold(
|
|
2636
|
-
console.log("
|
|
2637
|
-
console.log("
|
|
2759
|
+
console.log(import_picocolors2.default.bold("Technical Magic:"));
|
|
2760
|
+
console.log(import_picocolors2.default.bold(import_picocolors2.default.yellow(" ultracode")) + " (or ulc) — Fire ALL coding agents (architect + coder + reviewer)");
|
|
2761
|
+
console.log(import_picocolors2.default.bold(import_picocolors2.default.cyan(" ultrawork")) + " (or ulwk) — Maximum parallel execution for ANY task");
|
|
2638
2762
|
console.log();
|
|
2639
|
-
console.log(import_picocolors2.default.bold(
|
|
2640
|
-
console.log("
|
|
2641
|
-
console.log("
|
|
2763
|
+
console.log(import_picocolors2.default.bold("Prefix Triggers:"));
|
|
2764
|
+
console.log(import_picocolors2.default.dim(" arcanea: [task]") + " — Invoke Arcanea's highest intelligence mode");
|
|
2765
|
+
console.log(import_picocolors2.default.dim(" luminor: [task]") + " — Apply Luminor wisdom to the task");
|
|
2642
2766
|
console.log();
|
|
2643
|
-
console.log(import_picocolors2.default.dim("
|
|
2767
|
+
console.log(import_picocolors2.default.dim("Include any magic word in your prompt to activate!"));
|
|
2644
2768
|
console.log();
|
|
2645
2769
|
});
|
|
2646
2770
|
program2.command("status").description("Check Arcanea installation status").action(() => {
|
|
@@ -2684,4 +2808,98 @@ ${ORCHESTRATOR} Status
|
|
|
2684
2808
|
}
|
|
2685
2809
|
console.log();
|
|
2686
2810
|
});
|
|
2811
|
+
program2.command("doctor").description("Diagnose Arcanea installation health").action(() => {
|
|
2812
|
+
const cwd = process.cwd();
|
|
2813
|
+
let issues = 0;
|
|
2814
|
+
let ok = 0;
|
|
2815
|
+
console.log(import_picocolors2.default.cyan(`
|
|
2816
|
+
${ORCHESTRATOR} Doctor (v${VERSION})
|
|
2817
|
+
`));
|
|
2818
|
+
console.log(import_picocolors2.default.bold(`Checking installation health...
|
|
2819
|
+
`));
|
|
2820
|
+
const claudePaths = [
|
|
2821
|
+
join2(cwd, ".claude", "CLAUDE.md"),
|
|
2822
|
+
join2(cwd, ".opencode", "CLAUDE.md"),
|
|
2823
|
+
join2(cwd, "CLAUDE.md")
|
|
2824
|
+
];
|
|
2825
|
+
const hasClaudeMd = claudePaths.some((p) => existsSync2(p));
|
|
2826
|
+
if (hasClaudeMd) {
|
|
2827
|
+
console.log(import_picocolors2.default.green(" ✓ CLAUDE.md found (Arcanea identity active)"));
|
|
2828
|
+
ok++;
|
|
2829
|
+
} else {
|
|
2830
|
+
console.log(import_picocolors2.default.red(" ✗ No CLAUDE.md found — run 'arcanea install' to fix"));
|
|
2831
|
+
issues++;
|
|
2832
|
+
}
|
|
2833
|
+
const agentPaths = [".claude/agents", ".opencode/agents"];
|
|
2834
|
+
const hasAgents = agentPaths.some((p) => {
|
|
2835
|
+
const full = join2(cwd, p);
|
|
2836
|
+
return existsSync2(full) && readdirSync(full).length > 0;
|
|
2837
|
+
});
|
|
2838
|
+
if (hasAgents) {
|
|
2839
|
+
const agentDir = agentPaths.find((p) => existsSync2(join2(cwd, p)));
|
|
2840
|
+
const count = countMdFiles(join2(cwd, agentDir));
|
|
2841
|
+
console.log(import_picocolors2.default.green(` ✓ ${count} agent definitions installed`));
|
|
2842
|
+
ok++;
|
|
2843
|
+
} else {
|
|
2844
|
+
console.log(import_picocolors2.default.red(" ✗ No agents installed — run 'arcanea install --force'"));
|
|
2845
|
+
issues++;
|
|
2846
|
+
}
|
|
2847
|
+
const skillPaths = [".claude/skills", ".opencode/skills"];
|
|
2848
|
+
const hasSkills = skillPaths.some((p) => {
|
|
2849
|
+
const full = join2(cwd, p);
|
|
2850
|
+
return existsSync2(full) && readdirSync(full).length > 0;
|
|
2851
|
+
});
|
|
2852
|
+
if (hasSkills) {
|
|
2853
|
+
console.log(import_picocolors2.default.green(" ✓ Skills installed"));
|
|
2854
|
+
ok++;
|
|
2855
|
+
} else {
|
|
2856
|
+
console.log(import_picocolors2.default.red(" ✗ No skills installed — run 'arcanea install --force'"));
|
|
2857
|
+
issues++;
|
|
2858
|
+
}
|
|
2859
|
+
const mcpPath = join2(cwd, ".mcp.json");
|
|
2860
|
+
if (existsSync2(mcpPath)) {
|
|
2861
|
+
try {
|
|
2862
|
+
const mcp = JSON.parse(readFileSync2(mcpPath, "utf-8"));
|
|
2863
|
+
const servers = Object.keys(mcp.mcpServers || {});
|
|
2864
|
+
const hasArcanea = servers.includes("arcanea");
|
|
2865
|
+
console.log(import_picocolors2.default.green(` ✓ MCP config: ${servers.length} servers configured`));
|
|
2866
|
+
if (!hasArcanea) {
|
|
2867
|
+
console.log(import_picocolors2.default.yellow(" ⚠ Arcanea MCP server not configured — run 'arcanea install --force'"));
|
|
2868
|
+
}
|
|
2869
|
+
ok++;
|
|
2870
|
+
} catch {
|
|
2871
|
+
console.log(import_picocolors2.default.red(" ✗ .mcp.json is invalid JSON"));
|
|
2872
|
+
issues++;
|
|
2873
|
+
}
|
|
2874
|
+
} else {
|
|
2875
|
+
console.log(import_picocolors2.default.red(" ✗ No .mcp.json — run 'arcanea install'"));
|
|
2876
|
+
issues++;
|
|
2877
|
+
}
|
|
2878
|
+
if (existsSync2(join2(cwd, "arcanea.json"))) {
|
|
2879
|
+
console.log(import_picocolors2.default.green(" ✓ arcanea.json config exists"));
|
|
2880
|
+
ok++;
|
|
2881
|
+
} else {
|
|
2882
|
+
console.log(import_picocolors2.default.yellow(" ○ No arcanea.json (optional)"));
|
|
2883
|
+
}
|
|
2884
|
+
const platformFiles = [
|
|
2885
|
+
{ path: ".cursorrules", name: "Cursor (.cursorrules)" },
|
|
2886
|
+
{ path: "codex.md", name: "Codex CLI (codex.md)" },
|
|
2887
|
+
{ path: "GEMINI.md", name: "Gemini CLI (GEMINI.md)" }
|
|
2888
|
+
];
|
|
2889
|
+
for (const pf of platformFiles) {
|
|
2890
|
+
if (existsSync2(join2(cwd, pf.path))) {
|
|
2891
|
+
console.log(import_picocolors2.default.green(` ✓ ${pf.name} configured`));
|
|
2892
|
+
ok++;
|
|
2893
|
+
}
|
|
2894
|
+
}
|
|
2895
|
+
console.log();
|
|
2896
|
+
if (issues === 0) {
|
|
2897
|
+
console.log(import_picocolors2.default.green(import_picocolors2.default.bold(`Health: ${ok} checks passed, 0 issues`)));
|
|
2898
|
+
console.log(import_picocolors2.default.green("Arcanea is fully operational!"));
|
|
2899
|
+
} else {
|
|
2900
|
+
console.log(import_picocolors2.default.yellow(import_picocolors2.default.bold(`Health: ${ok} passed, ${issues} issues found`)));
|
|
2901
|
+
console.log(import_picocolors2.default.dim("Run 'arcanea install --force' to fix issues."));
|
|
2902
|
+
}
|
|
2903
|
+
console.log();
|
|
2904
|
+
});
|
|
2687
2905
|
program2.parse();
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -197,7 +197,13 @@ async function installForPlatform(targetDir, packageRoot, platform, force) {
|
|
|
197
197
|
}
|
|
198
198
|
if (platform === "claude-code") {
|
|
199
199
|
await installClaudeCodeSettings(platformPath, force);
|
|
200
|
-
} else if (platform === "
|
|
200
|
+
} else if (platform === "cursor") {
|
|
201
|
+
await installCursorRules(targetDir, packageRoot, force);
|
|
202
|
+
} else if (platform === "codex") {
|
|
203
|
+
await installCodexConfig(targetDir, packageRoot, force);
|
|
204
|
+
} else if (platform === "gemini") {
|
|
205
|
+
await installGeminiConfig(targetDir, packageRoot, force);
|
|
206
|
+
}
|
|
201
207
|
}
|
|
202
208
|
async function installClaudeCodeSettings(platformPath, force) {
|
|
203
209
|
const settingsPath = join(platformPath, "settings.json");
|
|
@@ -207,15 +213,38 @@ async function installClaudeCodeSettings(platformPath, force) {
|
|
|
207
213
|
UserPromptSubmit: [
|
|
208
214
|
{
|
|
209
215
|
matcher: "ultraworld|ulw",
|
|
210
|
-
hooks: [{
|
|
216
|
+
hooks: [{
|
|
217
|
+
type: "command",
|
|
218
|
+
command: "echo '[ARCANEA_MODE=ultraworld] Fire ALL world-building agents: arcanea-story-master, arcanea-character-crafter, arcanea-world-expander, arcanea-lore-master, creation-architect. Use Task tool with run_in_background=true for each agent. Respond with parallel results.'"
|
|
219
|
+
}]
|
|
211
220
|
},
|
|
212
221
|
{
|
|
213
222
|
matcher: "ultrawrite|ulwr",
|
|
214
|
-
hooks: [{
|
|
223
|
+
hooks: [{
|
|
224
|
+
type: "command",
|
|
225
|
+
command: "echo '[ARCANEA_MODE=ultrawrite] Fire ALL writing agents: story-architect, prose-weaver, voice-alchemist, line-editor, continuity-guardian. Use Task tool with run_in_background=true for each agent. Respond with parallel results.'"
|
|
226
|
+
}]
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
matcher: "ultracode|ulc",
|
|
230
|
+
hooks: [{
|
|
231
|
+
type: "command",
|
|
232
|
+
command: "echo '[ARCANEA_MODE=ultracode] Fire ALL coding agents: arcanea-architect, arcanea-coder, arcanea-reviewer, arcanea-debugger. Use Task tool with run_in_background=true for each agent. Respond with parallel results.'"
|
|
233
|
+
}]
|
|
215
234
|
},
|
|
216
235
|
{
|
|
217
236
|
matcher: "ultrabook|ulb",
|
|
218
|
-
hooks: [{
|
|
237
|
+
hooks: [{
|
|
238
|
+
type: "command",
|
|
239
|
+
command: "echo '[ARCANEA_MODE=ultrabook] Complete book pipeline: world-building → story structure → chapter drafts → editing → production. Run sequentially, with parallel agents within each phase.'"
|
|
240
|
+
}]
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
matcher: "ultrawork|ulwk",
|
|
244
|
+
hooks: [{
|
|
245
|
+
type: "command",
|
|
246
|
+
command: "echo '[ARCANEA_MODE=ultrawork] Maximum parallel execution. Spawn all relevant agents simultaneously using Task tool with run_in_background=true.'"
|
|
247
|
+
}]
|
|
219
248
|
}
|
|
220
249
|
]
|
|
221
250
|
}
|
|
@@ -224,6 +253,78 @@ async function installClaudeCodeSettings(platformPath, force) {
|
|
|
224
253
|
console.log(import_picocolors.default.green(" ✓ Created Claude Code settings with magic word hooks"));
|
|
225
254
|
}
|
|
226
255
|
}
|
|
256
|
+
async function installCursorRules(targetDir, packageRoot, force) {
|
|
257
|
+
const rulesPath = join(targetDir, ".cursorrules");
|
|
258
|
+
if (!existsSync(rulesPath) || force) {
|
|
259
|
+
const claudeMdSource = join(packageRoot, "CLAUDE.md");
|
|
260
|
+
if (existsSync(claudeMdSource)) {
|
|
261
|
+
const claudeContent = readFileSync(claudeMdSource, "utf-8");
|
|
262
|
+
const cursorRules = `# Cursor Rules — Generated by Arcanea v${VERSION}
|
|
263
|
+
|
|
264
|
+
${claudeContent}`;
|
|
265
|
+
writeFileSync(rulesPath, cursorRules);
|
|
266
|
+
console.log(import_picocolors.default.green(" ✓ Created .cursorrules with Arcanea identity"));
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
async function installCodexConfig(targetDir, packageRoot, force) {
|
|
271
|
+
const codexMdPath = join(targetDir, "codex.md");
|
|
272
|
+
if (!existsSync(codexMdPath) || force) {
|
|
273
|
+
const claudeMdSource = join(packageRoot, "CLAUDE.md");
|
|
274
|
+
if (existsSync(claudeMdSource)) {
|
|
275
|
+
const content = readFileSync(claudeMdSource, "utf-8");
|
|
276
|
+
const codexMd = [
|
|
277
|
+
`# Codex Instructions — Generated by Arcanea v${VERSION}`,
|
|
278
|
+
"",
|
|
279
|
+
"> These instructions transform Codex into Arcanea, the Creative Intelligence Platform.",
|
|
280
|
+
"> Agent definitions: `.codex/agents/` | Skills: `.codex/skills/` | Commands: `.codex/commands/`",
|
|
281
|
+
"",
|
|
282
|
+
content,
|
|
283
|
+
"",
|
|
284
|
+
"## Codex-Specific Notes",
|
|
285
|
+
"",
|
|
286
|
+
"- Read agent definitions from `.codex/agents/` for available specialist agents",
|
|
287
|
+
"- Read skill definitions from `.codex/skills/` for creative and technical skills",
|
|
288
|
+
"- Read command definitions from `.codex/commands/` for slash commands",
|
|
289
|
+
"- MCP servers are configured in `.mcp.json`",
|
|
290
|
+
"- When magic words (ultraworld, ultracode, etc.) are used, read the relevant agent files and apply their instructions",
|
|
291
|
+
""
|
|
292
|
+
].join(`
|
|
293
|
+
`);
|
|
294
|
+
writeFileSync(codexMdPath, codexMd);
|
|
295
|
+
console.log(import_picocolors.default.green(" ✓ Created codex.md (Arcanea instructions for Codex CLI)"));
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
async function installGeminiConfig(targetDir, packageRoot, force) {
|
|
300
|
+
const geminiMdPath = join(targetDir, "GEMINI.md");
|
|
301
|
+
if (!existsSync(geminiMdPath) || force) {
|
|
302
|
+
const claudeMdSource = join(packageRoot, "CLAUDE.md");
|
|
303
|
+
if (existsSync(claudeMdSource)) {
|
|
304
|
+
const content = readFileSync(claudeMdSource, "utf-8");
|
|
305
|
+
const geminiMd = [
|
|
306
|
+
`# Gemini Instructions — Generated by Arcanea v${VERSION}`,
|
|
307
|
+
"",
|
|
308
|
+
"> These instructions transform Gemini into Arcanea, the Creative Intelligence Platform.",
|
|
309
|
+
"> Agent definitions: `.gemini/agents/` | Skills: `.gemini/skills/` | Commands: `.gemini/commands/`",
|
|
310
|
+
"",
|
|
311
|
+
content,
|
|
312
|
+
"",
|
|
313
|
+
"## Gemini-Specific Notes",
|
|
314
|
+
"",
|
|
315
|
+
"- Read agent definitions from `.gemini/agents/` for available specialist agents",
|
|
316
|
+
"- Read skill definitions from `.gemini/skills/` for creative and technical skills",
|
|
317
|
+
"- Read command definitions from `.gemini/commands/` for slash commands",
|
|
318
|
+
"- MCP servers are configured in `.mcp.json`",
|
|
319
|
+
"- When magic words (ultraworld, ultracode, etc.) are used, read the relevant agent files and apply their instructions",
|
|
320
|
+
""
|
|
321
|
+
].join(`
|
|
322
|
+
`);
|
|
323
|
+
writeFileSync(geminiMdPath, geminiMd);
|
|
324
|
+
console.log(import_picocolors.default.green(" ✓ Created GEMINI.md (Arcanea instructions for Gemini CLI)"));
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
}
|
|
227
328
|
async function installMcpConfig(targetDir, force) {
|
|
228
329
|
const mcpPath = join(targetDir, ".mcp.json");
|
|
229
330
|
console.log(import_picocolors.default.blue(`
|
|
@@ -240,6 +341,11 @@ Configuring MCP integrations...`));
|
|
|
240
341
|
...existingConfig,
|
|
241
342
|
mcpServers: {
|
|
242
343
|
...existingConfig.mcpServers || {},
|
|
344
|
+
arcanea: {
|
|
345
|
+
command: "npx",
|
|
346
|
+
args: ["-y", "@arcanea/mcp-server@latest"],
|
|
347
|
+
description: "Arcanea creative toolkit - world-building, characters, lore, bestiary"
|
|
348
|
+
},
|
|
243
349
|
"nano-banana": {
|
|
244
350
|
command: "npx",
|
|
245
351
|
args: ["-y", "@anthropic-ai/nano-banana"],
|
|
@@ -253,6 +359,7 @@ Configuring MCP integrations...`));
|
|
|
253
359
|
}
|
|
254
360
|
};
|
|
255
361
|
writeFileSync(mcpPath, JSON.stringify(mcpConfig, null, 2));
|
|
362
|
+
console.log(import_picocolors.default.green("✓ Configured Arcanea MCP (creative toolkit)"));
|
|
256
363
|
console.log(import_picocolors.default.green("✓ Configured Nano Banana MCP (image generation)"));
|
|
257
364
|
console.log(import_picocolors.default.green("✓ Configured Context7 MCP (documentation)"));
|
|
258
365
|
console.log(import_picocolors.default.dim("ℹ Suno MCP requires manual API key setup"));
|
|
@@ -286,6 +393,8 @@ function printSuccessMessage(platforms) {
|
|
|
286
393
|
console.log(import_picocolors.default.cyan(" ultraworld") + " - Full parallel world generation");
|
|
287
394
|
console.log(import_picocolors.default.cyan(" ultrawrite") + " - Full parallel chapter writing");
|
|
288
395
|
console.log(import_picocolors.default.cyan(" ultrabook ") + " - Complete book pipeline");
|
|
396
|
+
console.log(import_picocolors.default.yellow(" ultracode ") + " - Full parallel coding (architect + coder + reviewer)");
|
|
397
|
+
console.log(import_picocolors.default.yellow(" ultrawork ") + " - Maximum parallel execution for any task");
|
|
289
398
|
console.log();
|
|
290
399
|
console.log(import_picocolors.default.bold("Try:"));
|
|
291
400
|
console.log(import_picocolors.default.dim(" /luminor Valora courage"));
|
|
@@ -295,7 +404,7 @@ function printSuccessMessage(platforms) {
|
|
|
295
404
|
}
|
|
296
405
|
|
|
297
406
|
// src/index.ts
|
|
298
|
-
var VERSION = "3.
|
|
407
|
+
var VERSION = "3.3.0";
|
|
299
408
|
var NAME = "arcanea";
|
|
300
409
|
var ORCHESTRATOR = "Arcanea";
|
|
301
410
|
var defaultConfig = {
|
package/package.json
CHANGED
|
@@ -1,3 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: arcanea-ai-symbiosis
|
|
3
|
+
description: Frameworks for productive human-AI co-creation - the orchestra model, creative partnerships, and symbiotic workflows
|
|
4
|
+
version: 2.0.0
|
|
5
|
+
author: Arcanea
|
|
6
|
+
tags: [ai, collaboration, co-creation, symbiosis, creativity]
|
|
7
|
+
triggers:
|
|
8
|
+
- ai collaboration
|
|
9
|
+
- human ai
|
|
10
|
+
- co-creation
|
|
11
|
+
- ai partner
|
|
12
|
+
---
|
|
13
|
+
|
|
1
14
|
# AI Symbiosis - The Art of Human-AI Co-Creation
|
|
2
15
|
|
|
3
16
|
> *"The AI is not replacing the creator. The AI is expanding what creation can be. The question is not 'human or machine?' but 'what can we become together?'"*
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: arcanea-anti-trope
|
|
3
|
+
description: Anti-trope and naming protocol - banned AI cliches, forbidden words, and better alternatives for authentic Arcanean prose
|
|
4
|
+
version: 2.0.0
|
|
5
|
+
author: Arcanea
|
|
6
|
+
tags: [writing, style, voice, anti-cliche, prose-quality]
|
|
7
|
+
---
|
|
8
|
+
|
|
1
9
|
# Arcanea Anti-Trope & Naming Protocol
|
|
2
10
|
|
|
3
11
|
> *"We do not 'unleash' potential; we cultivate it. We do not weave 'tapestries' of fate; we forge chains of consequence. Speak clearly, or do not speak at all."*
|
|
@@ -1,3 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: arcanea-luminor-council
|
|
3
|
+
description: The Seven Luminors - aspects of creative consciousness providing guidance through archetypical wisdom for any creative challenge
|
|
4
|
+
version: 2.0.0
|
|
5
|
+
author: Arcanea
|
|
6
|
+
tags: [luminors, wisdom, guidance, creative-consciousness, archetypes]
|
|
7
|
+
triggers:
|
|
8
|
+
- luminor
|
|
9
|
+
- council
|
|
10
|
+
- wisdom
|
|
11
|
+
- guidance
|
|
12
|
+
- stuck
|
|
13
|
+
- advice
|
|
14
|
+
---
|
|
15
|
+
|
|
1
16
|
# Luminor Council - The Seven Guides of Creation
|
|
2
17
|
|
|
3
18
|
> *"The Luminors are not characters in a story. They are aspects of creative consciousness itself - archetypes that have guided creators since the first dream became the first work."*
|
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: arcanea-character-alchemist
|
|
3
|
+
description: Character development through psychological depth - wounds, desires, contradictions, and authentic character voices
|
|
4
|
+
version: 2.0.0
|
|
5
|
+
author: Arcanea
|
|
6
|
+
tags: [characters, psychology, writing, development, voice]
|
|
7
|
+
triggers:
|
|
8
|
+
- character
|
|
9
|
+
- character development
|
|
10
|
+
- character voice
|
|
11
|
+
- protagonist
|
|
12
|
+
- antagonist
|
|
13
|
+
---
|
|
14
|
+
|
|
1
15
|
# Character Alchemist - Transmuting Ideas into Living Beings
|
|
2
16
|
|
|
3
17
|
> *"A character is not a collection of traits. A character is a wound that walks, talks, and wants."*
|
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: arcanea-creative-bestiary
|
|
3
|
+
description: Navigate creative blocks using the taxonomy of psychological obstacles - naming rituals and protocols for each creature type
|
|
4
|
+
version: 2.0.0
|
|
5
|
+
author: Arcanea
|
|
6
|
+
tags: [creative-blocks, psychology, productivity, obstacles, mindset]
|
|
7
|
+
triggers:
|
|
8
|
+
- stuck
|
|
9
|
+
- blocked
|
|
10
|
+
- procrastinating
|
|
11
|
+
- afraid
|
|
12
|
+
- burned out
|
|
13
|
+
---
|
|
14
|
+
|
|
1
15
|
# Creative Bestiary - Navigating the Creatures of the Mind
|
|
2
16
|
|
|
3
17
|
> *"The creative life is inhabited by creatures—not physical beings, but psychological presences that every creator encounters. Know them by name, and you can negotiate with them. Ignore them, and they will ambush you."*
|
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: arcanea-story-weaver
|
|
3
|
+
description: Master narrative craft - story structure, scene design, dramatic tension, and meaning-making through storytelling
|
|
4
|
+
version: 2.0.0
|
|
5
|
+
author: Arcanea
|
|
6
|
+
tags: [story, narrative, writing, structure, craft]
|
|
7
|
+
triggers:
|
|
8
|
+
- story
|
|
9
|
+
- narrative
|
|
10
|
+
- plot
|
|
11
|
+
- scene
|
|
12
|
+
- story structure
|
|
13
|
+
---
|
|
14
|
+
|
|
1
15
|
# Story Weaver - The Master Craft of Narrative
|
|
2
16
|
|
|
3
17
|
> *"Story is not what happens. Story is the meaning we make from what happens. Your job is not to tell events - it is to transmit understanding."*
|
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: arcanea-world-architect
|
|
3
|
+
description: Universe creation and world-building - geography, history, belief systems, cultures, and living ecologies of meaning
|
|
4
|
+
version: 2.0.0
|
|
5
|
+
author: Arcanea
|
|
6
|
+
tags: [world-building, fantasy, sci-fi, universe, creation]
|
|
7
|
+
triggers:
|
|
8
|
+
- world
|
|
9
|
+
- world-building
|
|
10
|
+
- universe
|
|
11
|
+
- setting
|
|
12
|
+
- geography
|
|
13
|
+
---
|
|
14
|
+
|
|
1
15
|
# World Architect - The Art of Universe Creation
|
|
2
16
|
|
|
3
17
|
> *"A world is not built. It is grown. You plant seeds - a geography, a history, a belief - and you tend them until they become a living ecology of meaning."*
|