Improve crewai run startup UX (#6297)
Some checks failed
CodeQL Advanced / Analyze (actions) (push) Has been cancelled
CodeQL Advanced / Analyze (python) (push) Has been cancelled
Check Documentation Broken Links / Check broken links (push) Has been cancelled
Vulnerability Scan / pip-audit (push) Has been cancelled
Mark stale issues and pull requests / stale (push) Has been cancelled

Remove redundant startup logs from `crewai run` and make the legacy flow
command warning actionable.

- Stop printing `Running the Flow` and `Running the Crew` before project
  execution.
- Stop printing the redundant `Flow started with ID: ...` line while
  preserving flow lifecycle event emission.
- Replace Click's generic `kickoff` deprecation warning with a clearer
  message that tells users to use `crewai run`.
This commit is contained in:
Vinicius Brasil
2026-06-22 22:31:39 -07:00
committed by GitHub
parent 221dfdb08e
commit 2eb4e3a236
7 changed files with 19 additions and 15 deletions

View File

@@ -787,9 +787,13 @@ def flow() -> None:
"""Flow related commands."""
@flow.command(name="kickoff", deprecated=True)
@flow.command(name="kickoff")
def flow_run() -> None:
"""Kickoff the Flow."""
click.secho(
"The command 'crewai flow kickoff' is deprecated. Use 'crewai run' instead.",
fg="yellow",
)
run_crew(trained_agents_file=None, definition=None, inputs=None)

View File

@@ -595,7 +595,6 @@ def _run_flow_project(
if trained_agents_file is not None:
raise click.UsageError("--filename can only be used when running crews")
click.echo("Running the Flow")
from crewai_cli.run_declarative_flow import (
configured_project_declarative_flow,
run_declarative_flow_in_project_env,
@@ -611,7 +610,6 @@ def _run_flow_project(
def _run_classic_crew_project(
pyproject_data: dict[str, Any], trained_agents_file: str | None
) -> None:
click.echo("Running the Crew")
_execute_uv_script(
"run_crew",
entity_type="crew",

View File

@@ -190,7 +190,10 @@ def test_flow_kickoff_is_deprecated_and_uses_run_path(run_crew, runner):
definition=None,
inputs=None,
)
assert "DeprecationWarning" in result.output
assert (
"The command 'crewai flow kickoff' is deprecated. Use 'crewai run' instead."
in result.output
)
@mock.patch("crewai_cli.create_json_crew.create_json_crew")

View File

@@ -31,5 +31,5 @@ def test_create_flow_declarative_project_can_run(
result = CliRunner().invoke(crewai, ["run"], env={"UV_RUN_RECURSION_DEPTH": "1"})
assert result.exit_code == 0
assert "Running the Flow" in result.output
assert "Running the Flow" not in result.output
assert "AI agents" in result.output

View File

@@ -44,8 +44,12 @@ def test_flow_kickoff_runs_configured_declarative_definition(
result = CliRunner().invoke(flow_run)
assert result.exit_code == 0
assert "DeprecationWarning" in result.output
assert "Running the Flow\nAI\n" in result.output
assert (
"The command 'crewai flow kickoff' is deprecated. Use 'crewai run' instead."
in result.output
)
assert "AI\n" in result.output
assert "Running the Flow" not in result.output
def test_plot_flow_runs_configured_declarative_definition(

View File

@@ -622,7 +622,7 @@ def test_run_crew_runs_classic_crew_project(monkeypatch, capsys):
run_crew_module.run_crew(trained_agents_file="trained.pkl")
assert capsys.readouterr().out == "Running the Crew\n"
assert capsys.readouterr().out == ""
assert calls == [
(
"run_crew",
@@ -648,7 +648,7 @@ def test_run_crew_runs_python_flow_project(monkeypatch, capsys):
run_crew_module.run_crew()
assert capsys.readouterr().out == "Running the Flow\n"
assert capsys.readouterr().out == ""
assert calls == [("kickoff", {"entity_type": "flow"})]
@@ -694,5 +694,5 @@ def test_run_crew_runs_configured_declarative_flow_project(monkeypatch, capsys):
run_crew_module.run_crew()
assert capsys.readouterr().out == "Running the Flow\n"
assert capsys.readouterr().out == ""
assert calls == [("flow.yaml", None)]

View File

@@ -2455,11 +2455,6 @@ class Flow(BaseModel, Generic[T], metaclass=FlowMeta):
object.__setattr__(
self, "_deferred_flow_started_event_id", started_event.event_id
)
if not self.suppress_flow_events:
self._log_flow_event(
f"Flow started with ID: {self.flow_id}", color="bold magenta"
)
# After FlowStarted: env events must not pre-empt trace batch init
# with implicit "crew" execution_type.
get_env_context()