{"record":{"id":"fba8ccb1b4ae0a7b","repo":"crewAIInc/crewAI","slug":"error-trigger-must-be-in-format-app-slug-trigger","errorCode":null,"errorMessage":"Error: Trigger must be in format 'app_slug/trigger_slug'","messagePattern":"Error: Trigger must be in format 'app_slug/trigger_slug'","errorType":"console","errorClass":"SystemExit","httpStatus":null,"severity":"error","filePath":"lib/cli/src/crewai_cli/triggers/main.py","lineNumber":44,"sourceCode":"            console.print(\"[bold blue]Fetching available triggers...[/bold blue]\")\n            response = self.plus_api_client.get_triggers()\n            self._validate_response(response)\n\n            triggers_data = response.json()\n            self._display_triggers(triggers_data)\n\n        except Exception as e:\n            console.print(f\"[bold red]Error fetching triggers: {e}[/bold red]\")\n            raise SystemExit(1) from e\n\n    def execute_with_trigger(self, trigger_path: str) -> None:\n        \"\"\"Execute crew with trigger payload.\"\"\"\n        try:\n            if \"/\" not in trigger_path:\n                console.print(\n                    \"[bold red]Error: Trigger must be in format 'app_slug/trigger_slug'[/bold red]\"\n                )\n                raise SystemExit(1)\n\n            app_slug, trigger_slug = trigger_path.split(\"/\", 1)\n\n            console.print(\n                f\"[bold blue]Fetching trigger payload for {app_slug}/{trigger_slug}...[/bold blue]\"\n            )\n            response = self.plus_api_client.get_trigger_payload(app_slug, trigger_slug)\n\n            if response.status_code == 404:\n                error_data = response.json()\n                console.print(\n                    f\"[bold red]Error: {error_data.get('error', 'Trigger not found')}[/bold red]\"\n                )\n                raise SystemExit(1)\n\n            self._validate_response(response)\n\n            trigger_data = response.json()","sourceCodeStart":26,"sourceCodeEnd":62,"githubUrl":"https://github.com/crewAIInc/crewAI/blob/754d7323beb2fd042e33444a115ea2d5a47193f0/lib/cli/src/crewai_cli/triggers/main.py#L26-L62","documentation":"Printed with SystemExit(1) by TriggerCommand.execute_with_trigger() when the trigger_path argument contains no '/'. Triggers are addressed as 'app_slug/trigger_slug'; the slash is required so the CLI can split the path into the app and trigger identifiers for the Plus API call.","triggerScenarios":"Running `crewai trigger execute mytrigger` (no slash), passing just the app slug, or passing a trigger id/uuid copied from elsewhere instead of the app/trigger slug pair.","commonSituations":"Developer copies only the trigger name from the Plus dashboard; mixes up `crewai trigger execute` argument format with other commands that take bare ids.","solutions":["Use the full path format: `crewai trigger execute my-app/my-trigger`.","List valid triggers first with `crewai trigger list` and copy the exact app_slug/trigger_slug pair shown."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"import sys\npath = sys.argv[1]\nif \"/\" not in path or len(path.split(\"/\", 1)) != 2 or not all(path.split(\"/\", 1)):\n    raise SystemExit(\"Trigger must be 'app_slug/trigger_slug'\")","typeGuard":"def is_trigger_path(path: str) -> bool:\n    parts = path.split(\"/\", 1)\n    return len(parts) == 2 and all(p.strip() for p in parts)","tryCatchPattern":null,"preventionTips":["Copy the exact app_slug/trigger_slug pair from `crewai trigger list`","Treat bare trigger names or UUIDs as invalid input"],"tags":["crewai","cli","triggers","usage","validation"],"backgroundTag":null,"analyzedSha":"754d7323beb2fd042e33444a115ea2d5a47193f0","analyzedAt":"2026-08-15T04:06:56.746Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}