@@ -67,21 +67,35 @@ def parse_prompt_args(available_tools: AvailableTools,
6767 group .add_argument ("-p" , help = "The personality to use (mutex with -t)" , required = False )
6868 group .add_argument ("-t" , help = "The taskflow to use (mutex with -p)" , required = False )
6969 group .add_argument ("-l" , help = "List available tool call models and exit" , action = 'store_true' , required = False )
70+ parser .add_argument ("-g" , "--global" , dest = "globals" , action = 'append' , help = "Set global variable (KEY=VALUE). Can be used multiple times." , required = False )
7071 parser .add_argument ('prompt' , nargs = argparse .REMAINDER )
7172 #parser.add_argument('remainder', nargs=argparse.REMAINDER, help="Remaining args")
7273 help_msg = parser .format_help ()
7374 help_msg += "\n Examples:\n \n "
7475 help_msg += "`-p assistant explain modems to me please`\n "
76+ help_msg += "`-t example -g fruit=apples`\n "
77+ help_msg += "`-t example -g fruit=apples -g color=red`\n "
7578 try :
7679 args = parser .parse_known_args (user_prompt .split (' ' ) if user_prompt else None )
7780 except SystemExit as e :
7881 if e .code == 2 :
7982 logging .error (f"User provided incomplete prompt: { user_prompt } " )
80- return None , None , None , help_msg
83+ return None , None , None , None , help_msg
8184 p = args [0 ].p .strip () if args [0 ].p else None
8285 t = args [0 ].t .strip () if args [0 ].t else None
8386 l = args [0 ].l
84- return p , t , l , ' ' .join (args [0 ].prompt ), help_msg
87+
88+ # Parse global variables from command line
89+ cli_globals = {}
90+ if args [0 ].globals :
91+ for g in args [0 ].globals :
92+ if '=' not in g :
93+ logging .error (f"Invalid global variable format: { g } . Expected KEY=VALUE" )
94+ return None , None , None , None , help_msg
95+ key , value = g .split ('=' , 1 )
96+ cli_globals [key .strip ()] = value .strip ()
97+
98+ return p , t , l , cli_globals , ' ' .join (args [0 ].prompt ), help_msg
8599
86100async def deploy_task_agents (available_tools : AvailableTools ,
87101 agents : dict ,
@@ -378,7 +392,7 @@ async def _run_streamed():
378392
379393
380394async def main (available_tools : AvailableTools ,
381- p : str | None , t : str | None , prompt : str | None ):
395+ p : str | None , t : str | None , cli_globals : dict , prompt : str | None ):
382396 last_mcp_tool_results = [] # XXX: memleaky
383397
384398 async def on_tool_end_hook (
@@ -418,7 +432,10 @@ async def on_handoff_hook(
418432 await render_model_output (f"** 🤖💪 Running Task Flow: { t } \n " )
419433
420434 # optional global vars available for the taskflow tasks
435+ # Start with globals from taskflow file, then override with CLI globals
421436 global_variables = taskflow .get ('globals' , {})
437+ if cli_globals :
438+ global_variables .update (cli_globals )
422439 model_config = taskflow .get ('model_config' , {})
423440 model_keys = []
424441 if model_config :
@@ -646,7 +663,7 @@ async def _deploy_task_agents(resolved_agents, prompt):
646663 cwd = pathlib .Path .cwd ()
647664 available_tools = AvailableTools ()
648665
649- p , t , l , user_prompt , help_msg = parse_prompt_args (available_tools )
666+ p , t , l , cli_globals , user_prompt , help_msg = parse_prompt_args (available_tools )
650667
651668 if l :
652669 tool_models = list_tool_call_models (os .getenv ('COPILOT_TOKEN' ))
@@ -658,4 +675,4 @@ async def _deploy_task_agents(resolved_agents, prompt):
658675 print (help_msg )
659676 sys .exit (1 )
660677
661- asyncio .run (main (available_tools , p , t , user_prompt ), debug = True )
678+ asyncio .run (main (available_tools , p , t , cli_globals , user_prompt ), debug = True )
0 commit comments