diff --git a/cli/main.go b/cli/main.go
new file mode 100644
index 0000000..a20fbf4
--- /dev/null
+++ b/cli/main.go
@@ -0,0 +1,63 @@
+/*
+   * Copyright 2018-present Open Networking Foundation
+
+   * Licensed under the Apache License, Version 2.0 (the "License");
+   * you may not use this file except in compliance with the License.
+   * You may obtain a copy of the License at
+
+   * http://www.apache.org/licenses/LICENSE-2.0
+
+   * Unless required by applicable law or agreed to in writing, software
+   * distributed under the License is distributed on an "AS IS" BASIS,
+   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   * See the License for the specific language governing permissions and
+   * limitations under the License.
+*/
+
+package main
+
+import (
+	"flag"
+	"fmt"
+	"log"
+	"os/exec"
+
+	"github.com/opencord/voltha-go/cli/menu/mainmenu"
+	"google.golang.org/grpc"
+)
+
+func main() {
+
+	// disable input buffering
+	exec.Command("stty", "-F", "/dev/tty", "cbreak", "min", "1").Run()
+	// do not display entered characters on the screen
+	exec.Command("stty", "-F", "/dev/tty", "-echo").Run()
+	printHeader()
+
+	volthaAddress := flag.String("voltha_address", "localhost:6161", "IP/Hostname:Port for Voltha Core")
+	h := flag.Bool("h", false, "Print help")
+	help := flag.Bool("help", false, "Print help")
+	flag.Parse()
+	if *h || *help {
+		fmt.Println("cli -h(elp) print this message")
+		fmt.Println("cli -voltha_address=$VOLTHA_ADDRESS:PORT default localhost:6161")
+		return
+	}
+	conn, err := grpc.Dial(*volthaAddress, grpc.WithInsecure())
+	if err != nil {
+		log.Fatalf("did not connect: %s", err)
+	}
+	defer conn.Close()
+	fmt.Println("Connecting to " + *volthaAddress)
+
+	mainmenu.MainLoop(conn)
+}
+func printHeader() {
+	header :=
+		`         _ _   _            ___ _    ___
+__ _____| | |_| |_  __ _   / __| |  |_ _|
+\ V / _ \ |  _| ' \/ _' | | (__| |__ | |
+ \_/\___/_|\__|_||_\__,_|  \___|____|___|
+`
+	fmt.Println(header)
+}
