runSkill function

void runSkill(
  1. List<String> args
)

Handles river_cli skill — installs the bundled Claude Code skill into a project's (or the user's) .claude/skills/ directory so AI assistants pick up the river_cli workflow automatically.

Implementation

void runSkill(List<String> args) {
  final help = args.contains('--help') || args.contains('-h');
  final global = args.contains('--global') || args.contains('-g');
  final force = args.contains('--force') || args.contains('-f');
  final printOnly = args.contains('--print') || args.contains('-p');

  if (help) {
    _printHelp();
    return;
  }

  if (printOnly) {
    stdout.write(kRiverSkillContent.startsWith('\n')
        ? kRiverSkillContent.substring(1)
        : kRiverSkillContent);
    return;
  }

  final base = global ? _globalClaudeDir() : '.claude';
  if (base == null) {
    print('Error: could not resolve the home directory for --global install.');
    exit(1);
  }

  final skillDir = '$base/skills/river-cli-flutter';
  final target = File('$skillDir/$kSkillFileName');

  final existed = target.existsSync();
  if (existed && !force) {
    print('Skill already installed at ${target.path}.');
    print('Use "river_cli skill --force" to overwrite it.');
    return;
  }

  Directory(skillDir).createSync(recursive: true);
  final content = kRiverSkillContent.startsWith('\n')
      ? kRiverSkillContent.substring(1)
      : kRiverSkillContent;
  target.writeAsStringSync(content);

  print('${existed ? 'Updated' : 'Installed'} Claude Code skill:');
  print('  ${target.path}');
  print('\nThe "river-cli-flutter" skill is now available to Claude Code'
      '${global ? ' across all your projects.' : ' in this project.'}');
}