diff --git a/cfg_checker/cfg_check.py b/cfg_checker/cfg_check.py
new file mode 100644
index 0000000..9260f30
--- /dev/null
+++ b/cfg_checker/cfg_check.py
@@ -0,0 +1,112 @@
+import argparse
+import os
+import sys
+
+import reporter
+from cfg_checker.common import utils, const
+from cfg_checker.common import config, logger, logger_cli, pkg_dir
+from cfg_checker.clients import salt
+
+from cfg_checker.pkg_check import CloudPackageChecker
+
+pkg_dir = os.path.dirname(__file__)
+pkg_dir = os.path.normpath(pkg_dir)
+
+
+class MyParser(argparse.ArgumentParser):
+    def error(self, message):
+        sys.stderr.write('Error: {0}\n\n'.format(message))
+        self.print_help()
+
+
+
+def help_message():
+    print"""
+    Please, use following examples to generate info reports:\n
+         cfg_checker packages report\n
+         cfg_checker network check\n
+         cfg_checker network report\n
+    """
+    return
+
+def pkg_check(args):
+    # create package versions report
+    _filename = args.file
+    # init connection to salt and collect minion data
+    pChecker = CloudPackageChecker()
+    # collect data on installed packages
+    pChecker.collect_installed_packages()
+    # diff installed and candidates
+    # pChecker.collect_packages()
+    # report it
+    pChecker.create_html_report(_filename)
+
+
+def net_check(args):
+    print("This is net check routine")
+
+    return
+
+
+def net_report(args):
+    print("This is net check routine")
+
+    return
+
+
+def config_check_entrypoint():
+    # Main entrypointр
+    parser = MyParser(prog="Cloud configuration checker")
+    subparsers = parser.add_subparsers(dest='command')
+    # packages
+    pkg_parser = subparsers.add_parser(
+        'packages',
+        help="Package versions check (Candidate vs Installed)"
+    )
+    pkg_subparsers = pkg_parser.add_subparsers(dest='type')
+
+    pkg_report_parser = pkg_subparsers.add_parser(
+        'report',
+        help="Report package versions to HTML file"
+    )
+    pkg_report_parser.add_argument(
+        '-f',
+        '--file',
+        help="HTML filename to save report"
+    )
+
+    # networking
+    net_parser = subparsers.add_parser(
+        'network',
+        help="Network infrastructure checks"
+    )
+    net_subparsers = net_parser.add_subparsers(dest='type')
+
+    net_check_parser = net_subparsers.add_parser(
+        'check',
+        help="Do network check and print the result"
+    )
+    net_check_parser.set_defaults(func=net_check)
+
+    net_report_parser = net_subparsers.add_parser(
+        'report',
+        help="Generate network check report"
+    )
+    net_report_parser.add_argument(
+        '-f',
+        '--file',
+        help="HTML filename to save report"
+    )
+    net_report_parser.set_defaults(func=net_report)
+    
+    #parse arguments
+    args = parser.parse_args()
+
+    # Execute the command
+    result = args.func(args)
+
+    logger.debug(result)
+    return
+
+if __name__ == '__main__':
+    config_check_entrypoint()
