public function locatorAction()
    {
        $arg = $this->request->get('args');

        // task execute.
        if (($task = $this->request->get('tasks')) || ($task = $this->request->get('option.T'))) {
            return [self::FORWARD_ACTION, 'task.list'];
        } elseif ($this->isTask($arg)) {
            return [self::FORWARD_ACTION, 'task.execute'];
        }
        
        // start server.
        if ($arg === 's') {
            return [self::FORWARD_ACTION, 'utility.server'];
        }
        
        // show version.
        if ($arg === null && ($this->request->get('option.v') || $this->request->get('version'))) {
            return [self::FORWARD_ACTION, 'utility.version'];
        }
        
        // show usage.
        if ($arg === null) {
            return [self::FORWARD_ACTION, 'utility.usage'];
        }

        // action execute.
        // exclude first argument, because this is command name.
        $args = $this->request->getAsArray('args');
        array_shift($args);
        $this->request->set('args', $args);
        return [self::FORWARD_ACTION, $this->completionActionArg($arg)];
    }