I installed claudeflow, then ran claudeflow setup, and in the output it told me claudekit wasn't installed, so then I had to install claudekit manually to then run setup again successfully
Ah, that clarifies it! This is a design issue in your claudeflow code, not an npm installation problem.
Here's what's happening:
When you npm install -g @33strategies/claudeflow, npm does install claudekit — but as a nested dependency inside:
/
$(npm root -g)/@33strategies/claudeflow/node_modules/claudekit/
However, npm does not globally link the claudekit binary. Only the binaries defined in @33strategies/claudeflow's bin field get linked (i.e., just claudeflow).
Your claudeflow setup command is probably checking if claudekit exists as a global command (e.g., which claudekit or trying to spawn it), which fails because it's not globally linked.
The fix is in your claudeflow code. Instead of expecting claudekit to be a separate global install, you should:
Option A: Use the bundled dependency directly
// Instead of spawning 'claudekit' as a global commandimport { something } from 'claudekit';// orconst claudekitPath = require.resolve('claudekit/bin/claudekit');
Option B: If you need to spawn it as a CLI
import { fileURLToPath } from 'url';import { dirname, join } from 'path';const __dirname = dirname(fileURLToPath(import.meta.url));const claudekitBin = join(__dirname, '../node_modules/claudekit/bin/claudekit');// or use require.resolve('claudekit/bin/claudekit')
Option C: Add claudekit as a peer dependency and document that users must install both:
"peerDependencies": { "claudekit": "^0.9.0"}
Option A or B is the better user experience — your package should "just work" with its bundled dependency rather than requiring users to install two separate packages.
I installed claudeflow, then ran claudeflow setup, and in the output it told me claudekit wasn't installed, so then I had to install claudekit manually to then run setup again successfully
Ah, that clarifies it! This is a design issue in your claudeflow code, not an npm installation problem.
Here's what's happening:
When you npm install -g @33strategies/claudeflow, npm does install claudekit — but as a nested dependency inside:
/
$(npm root -g)/@33strategies/claudeflow/node_modules/claudekit/
However, npm does not globally link the claudekit binary. Only the binaries defined in @33strategies/claudeflow's bin field get linked (i.e., just claudeflow).
Your claudeflow setup command is probably checking if claudekit exists as a global command (e.g., which claudekit or trying to spawn it), which fails because it's not globally linked.
The fix is in your claudeflow code. Instead of expecting claudekit to be a separate global install, you should:
Option A: Use the bundled dependency directly
// Instead of spawning 'claudekit' as a global commandimport { something } from 'claudekit';// orconst claudekitPath = require.resolve('claudekit/bin/claudekit');
Option B: If you need to spawn it as a CLI
import { fileURLToPath } from 'url';import { dirname, join } from 'path';const __dirname = dirname(fileURLToPath(import.meta.url));const claudekitBin = join(__dirname, '../node_modules/claudekit/bin/claudekit');// or use require.resolve('claudekit/bin/claudekit')
Option C: Add claudekit as a peer dependency and document that users must install both:
"peerDependencies": { "claudekit": "^0.9.0"}
Option A or B is the better user experience — your package should "just work" with its bundled dependency rather than requiring users to install two separate packages.