From aec2cd27af8e920edb3acf33d2c6faba9b911f99 Mon Sep 17 00:00:00 2001 From: Eyejoker Date: Wed, 11 Mar 2026 02:34:20 +0900 Subject: [PATCH] feat: sync global ~/.claude/commands/ into agent sessions --- src/container-runner.ts | 40 +++++++++++++++++++++++++++------------- 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/src/container-runner.ts b/src/container-runner.ts index d11056a..7b665f0 100644 --- a/src/container-runner.ts +++ b/src/container-runner.ts @@ -80,20 +80,34 @@ function prepareGroupEnvironment( ); } - // Sync skills into each group's .claude/skills/ - // Sources: 1) user's global ~/.claude/skills/ 2) container/skills/ (nanoclaw bundled) - const skillsDst = path.join(groupSessionsDir, 'skills'); - const skillSources = [ - path.join(os.homedir(), '.claude', 'skills'), - path.join(projectRoot, 'container', 'skills'), + // Sync skills and commands into each group's .claude/ session dir + // Sources: 1) user's global ~/.claude/ 2) container/skills/ (nanoclaw bundled) + const syncDirs = [ + { + dst: path.join(groupSessionsDir, 'skills'), + sources: [ + path.join(os.homedir(), '.claude', 'skills'), + path.join(projectRoot, 'container', 'skills'), + ], + }, + { + dst: path.join(groupSessionsDir, 'commands'), + sources: [path.join(os.homedir(), '.claude', 'commands')], + }, ]; - for (const skillsSrc of skillSources) { - if (!fs.existsSync(skillsSrc)) continue; - for (const skillDir of fs.readdirSync(skillsSrc)) { - const srcDir = path.join(skillsSrc, skillDir); - if (!fs.statSync(srcDir).isDirectory()) continue; - const dstDir = path.join(skillsDst, skillDir); - fs.cpSync(srcDir, dstDir, { recursive: true }); + for (const { dst, sources } of syncDirs) { + for (const src of sources) { + if (!fs.existsSync(src)) continue; + for (const entry of fs.readdirSync(src)) { + const srcPath = path.join(src, entry); + const dstPath = path.join(dst, entry); + if (fs.statSync(srcPath).isDirectory()) { + fs.cpSync(srcPath, dstPath, { recursive: true }); + } else { + fs.mkdirSync(dst, { recursive: true }); + fs.copyFileSync(srcPath, dstPath); + } + } } }