add a sky_tools init command to create a new project
diff --git a/packages/flutter_tools/bin/sky_tools.dart b/packages/flutter_tools/bin/sky_tools.dart
new file mode 100644
index 0000000..c077124
--- /dev/null
+++ b/packages/flutter_tools/bin/sky_tools.dart
@@ -0,0 +1,47 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'dart:io';
+
+import 'package:args/args.dart';
+import 'package:sky_tools/src/common.dart';
+import 'package:sky_tools/src/init.dart';
+
+void main(List<String> args) {
+  Map<String, CommandHandler> handlers = {};
+
+  ArgParser parser = new ArgParser();
+  parser.addSeparator('options:');
+  parser.addFlag('help',
+      abbr: 'h', negatable: false, help: 'Display this help message.');
+  parser.addSeparator('commands:');
+
+  CommandHandler handler = new InitCommandHandler();
+  parser.addCommand(handler.name, handler.parser);
+  handlers[handler.name] = handler;
+
+  ArgResults results = parser.parse(args);
+
+  if (results['help']) {
+    _printUsage(parser, handlers);
+  } else if (results.command != null) {
+    handlers[results.command.name].processArgResults(results.command);
+  } else {
+    _printUsage(parser, handlers, 'No command specified.');
+    exit(1);
+  }
+}
+
+void _printUsage(ArgParser parser, Map<String, CommandHandler> handlers,
+    [String message]) {
+  if (message != null) {
+    print('${message}\n');
+  }
+  print('usage: sky_tools <command> [arguments]');
+  print('');
+  print(parser.usage);
+  handlers.forEach((String command, CommandHandler handler) {
+    print('  ${command.padRight(10)} ${handler.description}');
+  });
+}