diff --git a/apps/workflow/app/src/main/java/org/onosproject/workflow/cli/WorkFlowCommand.java b/apps/workflow/app/src/main/java/org/onosproject/workflow/cli/WorkFlowCommand.java
new file mode 100644
index 0000000..94b099b
--- /dev/null
+++ b/apps/workflow/app/src/main/java/org/onosproject/workflow/cli/WorkFlowCommand.java
@@ -0,0 +1,86 @@
+/*
+ * 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 org.onosproject.workflow.cli;
+
+import com.fasterxml.jackson.databind.node.JsonNodeFactory;
+import org.apache.karaf.shell.commands.Argument;
+import org.apache.karaf.shell.commands.Command;
+import org.onosproject.cli.AbstractShellCommand;
+import org.onosproject.workflow.api.DefaultWorkflowDescription;
+import org.onosproject.workflow.api.WorkflowService;
+import org.onosproject.workflow.api.WorkflowException;
+
+import java.util.Arrays;
+import java.util.Objects;
+
+@Command(scope = "onos", name = "workflow", description = "workflow cli")
+public class WorkFlowCommand extends AbstractShellCommand {
+
+    @Argument (index = 0, name = "cmd", description = "command(invoke)", required = true)
+    private String cmd = null;
+
+    @Argument (index = 1, name = "id", description = "workflow id(URI)", required = true)
+    private String id = null;
+
+    @Argument (index = 2, name = "name", description = "workplace name", required = true)
+    private String name = null;
+
+    @Override
+    protected void execute() {
+        if (Objects.isNull(cmd)) {
+            error("invalid cmd parameter");
+            return;
+        }
+
+        switch (cmd) {
+            case "invoke":
+                if (Objects.isNull(id)) {
+                    error("invalid workflow id parameter");
+                    return;
+                }
+
+                if (Objects.isNull(name)) {
+                    error("invalid workplace name parameter");
+                    return;
+                }
+
+                invoke(id, name);
+                break;
+            default:
+                print("Unsupported cmd: " + cmd);
+        }
+    }
+
+    /**
+     * Invokes workflow.
+     * @param workflowId workflow id
+     * @param workplaceName workplace name
+     */
+    private void invoke(String workflowId, String workplaceName) {
+
+        WorkflowService service = get(WorkflowService.class);
+        DefaultWorkflowDescription wfDesc = DefaultWorkflowDescription.builder()
+                .workplaceName(workplaceName)
+                .id(workflowId)
+                .data(JsonNodeFactory.instance.objectNode())
+                .build();
+        try {
+            service.invokeWorkflow(wfDesc);
+        } catch (WorkflowException e) {
+            error(e.getMessage() + ", trace: " + Arrays.asList(e.getStackTrace()));
+        }
+    }
+}
