1pub mod auth;
4pub mod browserctl;
5pub mod clipboard;
6pub mod config;
7pub mod context;
8pub mod go_ralph;
9pub mod oracle;
10pub mod run;
11pub mod search;
12pub mod search_render;
13
14use clap::{Parser, Subcommand};
15use std::path::PathBuf;
16
17#[derive(Parser, Debug)]
22#[command(name = "codetether")]
23#[command(version, about, long_about = None)]
24pub struct Cli {
25 #[arg(global = true, last = true)]
27 pub project: Option<PathBuf>,
28
29 #[arg(long, global = true)]
31 pub print_logs: bool,
32
33 #[arg(long, global = true, value_parser = ["DEBUG", "INFO", "WARN", "ERROR"])]
35 pub log_level: Option<String>,
36
37 #[arg(short, long, env = "CODETETHER_SERVER")]
40 pub server: Option<String>,
41
42 #[arg(short, long, env = "CODETETHER_TOKEN")]
44 pub token: Option<String>,
45
46 #[arg(short, long, env = "CODETETHER_WORKER_NAME")]
48 pub name: Option<String>,
49
50 #[command(subcommand)]
51 pub command: Option<Command>,
52}
53
54#[derive(Subcommand, Debug)]
55pub enum Command {
56 Tui(TuiArgs),
58
59 Serve(ServeArgs),
61
62 Run(RunArgs),
64
65 Pr(PrArgs),
67
68 Auth(AuthArgs),
70
71 Config(ConfigArgs),
73
74 Clipboard(clipboard::ClipboardArgs),
76
77 Context(ContextArgs),
79
80 Worker(A2aArgs),
82
83 #[command(hide = true)]
85 GitCredentialHelper(GitCredentialHelperArgs),
86
87 Spawn(SpawnArgs),
89
90 Swarm(SwarmArgs),
92
93 #[command(hide = true)]
95 SwarmSubagent(SwarmSubagentArgs),
96
97 Rlm(RlmArgs),
99
100 Oracle(OracleArgs),
102
103 Ralph(RalphArgs),
105
106 Mcp(McpArgs),
108
109 Stats(StatsArgs),
111
112 Cleanup(CleanupArgs),
114
115 Models(ModelsArgs),
117
118 Index(IndexArgs),
120
121 Benchmark(BenchmarkArgs),
123
124 Moltbook(MoltbookArgs),
126
127 Okr(OkrArgs),
129
130 Forage(ForageArgs),
132
133 Search(SearchArgs),
135
136 #[command(name = "browserctl", visible_alias = "browser")]
138 Browserctl(browserctl::BrowserCtlArgs),
139}
140
141#[derive(Parser, Debug)]
142pub struct AuthArgs {
143 #[command(subcommand)]
144 pub command: AuthCommand,
145}
146
147#[derive(Subcommand, Debug)]
148pub enum AuthCommand {
149 Copilot(CopilotAuthArgs),
151
152 Codex(CodexAuthArgs),
154
155 Cookies(CookieAuthArgs),
157
158 Register(RegisterAuthArgs),
160
161 Login(LoginAuthArgs),
163}
164
165#[derive(Parser, Debug)]
166pub struct RegisterAuthArgs {
167 #[arg(short, long, env = "CODETETHER_SERVER")]
169 pub server: String,
170
171 #[arg(short, long)]
173 pub email: Option<String>,
174
175 #[arg(long)]
177 pub first_name: Option<String>,
178
179 #[arg(long)]
181 pub last_name: Option<String>,
182
183 #[arg(long)]
185 pub referral_source: Option<String>,
186}
187
188#[derive(Parser, Debug)]
189pub struct LoginAuthArgs {
190 #[arg(short, long, env = "CODETETHER_SERVER")]
192 pub server: String,
193
194 #[arg(short, long)]
196 pub email: Option<String>,
197}
198
199#[derive(Parser, Debug)]
200pub struct CopilotAuthArgs {
201 #[arg(long)]
203 pub enterprise_url: Option<String>,
204
205 #[arg(long, env = "CODETETHER_COPILOT_OAUTH_CLIENT_ID")]
207 pub client_id: Option<String>,
208}
209
210#[derive(Parser, Debug)]
211pub struct CodexAuthArgs {
212 #[arg(long, default_value_t = false)]
214 pub device_code: bool,
215}
216
217#[derive(Parser, Debug)]
218pub struct CookieAuthArgs {
219 #[arg(long, default_value = "nextdoor-web")]
221 pub provider: String,
222
223 #[arg(long)]
225 pub file: PathBuf,
226
227 #[arg(long, default_value_t = false)]
229 pub keep_all: bool,
230}
231
232#[derive(Parser, Debug)]
233pub struct TuiArgs {
234 pub project: Option<PathBuf>,
236
237 #[arg(long)]
239 pub allow_network: bool,
240
241 #[arg(long = "no-a2a", action = clap::ArgAction::SetFalse, default_value_t = true)]
246 pub a2a: bool,
247
248 #[arg(long)]
251 pub a2a_port: Option<u16>,
252
253 #[arg(long, default_value = "0.0.0.0")]
257 pub a2a_hostname: String,
258
259 #[arg(long)]
261 pub a2a_public_url: Option<String>,
262
263 #[arg(long)]
265 pub a2a_name: Option<String>,
266
267 #[arg(long)]
269 pub a2a_description: Option<String>,
270
271 #[arg(long, value_delimiter = ',', env = "CODETETHER_A2A_PEERS")]
274 pub a2a_peer: Vec<String>,
275
276 #[arg(long, default_value = "15")]
279 pub a2a_discovery_interval_secs: u64,
280
281 #[arg(long = "a2a-no-auto-introduce", action = clap::ArgAction::SetFalse, default_value_t = true)]
283 pub a2a_auto_introduce: bool,
284
285 #[arg(long = "a2a-no-mdns", action = clap::ArgAction::SetFalse, default_value_t = true)]
288 pub a2a_mdns: bool,
289}
290
291#[derive(Parser, Debug)]
292pub struct ServeArgs {
293 #[arg(short, long, default_value = "4096")]
295 pub port: u16,
296
297 #[arg(long, default_value = "127.0.0.1")]
299 pub hostname: String,
300
301 #[arg(long)]
303 pub mdns: bool,
304}
305
306#[derive(Parser, Debug)]
307pub struct RunArgs {
308 pub message: String,
310
311 #[arg(short, long)]
313 pub continue_session: bool,
314
315 #[arg(short, long)]
317 pub session: Option<String>,
318
319 #[arg(short, long)]
321 pub model: Option<String>,
322
323 #[arg(long)]
325 pub agent: Option<String>,
326
327 #[arg(long, default_value = "default", value_parser = ["default", "json"])]
329 pub format: String,
330
331 #[arg(short, long)]
333 pub file: Vec<PathBuf>,
334
335 #[arg(long)]
337 pub codex_session: Option<String>,
338
339 #[arg(long)]
341 pub max_steps: Option<usize>,
342
343 #[arg(long, default_value = "1")]
346 pub branches: usize,
347
348 #[arg(long, value_delimiter = ',')]
351 pub strategies: Vec<String>,
352}
353
354#[derive(Parser, Debug)]
355pub struct PrArgs {
356 #[command(subcommand)]
357 pub command: PrCommand,
358}
359
360#[derive(Subcommand, Debug)]
361pub enum PrCommand {
362 Create(CreatePrArgs),
364}
365
366#[derive(Parser, Debug, Clone)]
367pub struct CreatePrArgs {
368 #[arg(long)]
370 pub title: String,
371
372 #[arg(long)]
374 pub body: Option<String>,
375
376 #[arg(long)]
378 pub body_file: Option<PathBuf>,
379
380 #[arg(long, default_value = "main")]
382 pub base: String,
383
384 #[arg(long)]
386 pub head: Option<String>,
387
388 #[arg(long, default_value_t = false)]
390 pub draft: bool,
391
392 #[arg(long, default_value_t = false)]
394 pub json: bool,
395
396 #[arg(long)]
398 pub project: Option<PathBuf>,
399}
400
401#[derive(Parser, Debug, Clone)]
403pub struct WorkerServerArgs {
404 #[arg(long, default_value = "0.0.0.0")]
406 pub hostname: String,
407
408 #[arg(short, long, default_value = "8080")]
410 pub port: u16,
411}
412
413#[derive(Parser, Debug, Clone)]
414pub struct A2aArgs {
415 #[arg(short, long, env = "CODETETHER_SERVER", default_value = crate::a2a::worker::DEFAULT_A2A_SERVER_URL)]
417 pub server: String,
418
419 #[arg(short, long, env = "CODETETHER_TOKEN")]
421 pub token: Option<String>,
422
423 #[arg(short, long, env = "CODETETHER_WORKER_NAME")]
425 pub name: Option<String>,
426
427 #[arg(short, long, visible_alias = "codebases")]
429 pub workspaces: Option<String>,
430
431 #[arg(
433 long,
434 env = "CODETETHER_WORKER_MAX_CONCURRENT_TASKS",
435 default_value_t = 4
436 )]
437 pub max_concurrent_tasks: usize,
438
439 #[arg(long, default_value = "safe", value_parser = ["all", "safe", "none"])]
441 pub auto_approve: String,
442
443 #[arg(short, long)]
445 pub email: Option<String>,
446
447 #[arg(long)]
449 pub push_url: Option<String>,
450
451 #[arg(long, default_value = "0.0.0.0", env = "CODETETHER_WORKER_HOST")]
453 pub hostname: String,
454
455 #[arg(long, default_value = "8080", env = "CODETETHER_WORKER_PORT")]
457 pub port: u16,
458
459 #[arg(long, env = "CODETETHER_WORKER_PUBLIC_URL")]
461 pub public_url: Option<String>,
462
463 #[arg(long, env = "CODETETHER_WORKER_HTTP_DISABLED")]
465 pub no_http_server: bool,
466}
467
468#[derive(Parser, Debug, Clone)]
469pub struct GitCredentialHelperArgs {
470 #[arg(long = "workspace-id", alias = "codebase-id")]
472 pub workspace_id: String,
473
474 #[arg(long, env = "CODETETHER_SERVER")]
476 pub server: Option<String>,
477
478 #[arg(long, env = "CODETETHER_TOKEN")]
480 pub token: Option<String>,
481
482 #[arg(long, env = "CODETETHER_WORKER_ID")]
484 pub worker_id: Option<String>,
485
486 pub operation: Option<String>,
488}
489
490#[derive(Parser, Debug, Clone)]
491pub struct SpawnArgs {
492 #[arg(short, long)]
494 pub name: Option<String>,
495
496 #[arg(long, default_value = "127.0.0.1")]
503 pub hostname: String,
504
505 #[arg(short, long, default_value = "0")]
508 pub port: u16,
509
510 #[arg(long)]
512 pub public_url: Option<String>,
513
514 #[arg(short, long)]
516 pub description: Option<String>,
517
518 #[arg(long, value_delimiter = ',', env = "CODETETHER_A2A_PEERS")]
521 pub peer: Vec<String>,
522
523 #[arg(long, default_value = "15")]
526 pub discovery_interval_secs: u64,
527
528 #[arg(long = "no-auto-introduce", action = clap::ArgAction::SetFalse, default_value_t = true)]
530 pub auto_introduce: bool,
531
532 #[arg(long = "no-mdns", action = clap::ArgAction::SetFalse, default_value_t = true)]
535 pub mdns: bool,
536}
537
538#[derive(Parser, Debug)]
539pub struct ConfigArgs {
540 #[arg(long)]
542 pub show: bool,
543
544 #[arg(long)]
546 pub init: bool,
547
548 #[arg(long)]
550 pub set: Option<String>,
551}
552
553#[derive(Parser, Debug)]
554pub struct ContextArgs {
555 #[command(subcommand)]
556 pub command: ContextCommand,
557}
558
559#[derive(Subcommand, Debug)]
560pub enum ContextCommand {
561 Reset(ContextResetArgs),
563 Browse(ContextBrowseArgs),
565}
566
567#[derive(Parser, Debug)]
568pub struct ContextResetArgs {
569 #[arg(long)]
571 pub summary: Option<String>,
572}
573
574#[derive(Parser, Debug)]
575pub struct ContextBrowseArgs {
576 #[command(subcommand)]
577 pub command: Option<ContextBrowseCommand>,
578}
579
580#[derive(Subcommand, Debug)]
581pub enum ContextBrowseCommand {
582 List,
584 ShowTurn(ContextShowTurnArgs),
586}
587
588#[derive(Parser, Debug)]
589pub struct ContextShowTurnArgs {
590 pub turn: usize,
592}
593
594#[derive(Parser, Debug)]
595pub struct SwarmArgs {
596 pub task: String,
598
599 #[arg(short, long)]
601 pub model: Option<String>,
602
603 #[arg(short = 's', long, default_value = "auto")]
605 pub strategy: String,
606
607 #[arg(long, default_value = "100")]
609 pub max_subagents: usize,
610
611 #[arg(long, default_value = "100")]
613 pub max_steps: usize,
614
615 #[arg(long, default_value = "300")]
617 pub timeout: u64,
618
619 #[arg(long)]
621 pub json: bool,
622
623 #[arg(long, default_value = "local", value_parser = ["local", "k8s", "kubernetes", "kubernetes-pod", "pod"])]
625 pub execution_mode: String,
626
627 #[arg(long, default_value = "8")]
629 pub k8s_pod_budget: usize,
630
631 #[arg(long)]
633 pub k8s_image: Option<String>,
634}
635
636#[derive(Parser, Debug)]
637pub struct SwarmSubagentArgs {
638 #[arg(long)]
640 pub payload_base64: Option<String>,
641
642 #[arg(long, default_value = "CODETETHER_SWARM_SUBTASK_PAYLOAD")]
644 pub payload_env: String,
645}
646
647#[derive(Parser, Debug)]
648pub struct RlmArgs {
649 pub query: String,
651
652 #[arg(short, long)]
654 pub model: Option<String>,
655
656 #[arg(short, long)]
658 pub file: Vec<PathBuf>,
659
660 #[arg(long)]
662 pub content: Option<String>,
663
664 #[arg(long, default_value = "auto")]
666 pub content_type: String,
667
668 #[arg(long, default_value = "4000")]
670 pub max_tokens: usize,
671
672 #[arg(long)]
674 pub json: bool,
675
676 #[arg(short, long)]
678 pub verbose: bool,
679
680 #[arg(long)]
682 pub oracle_verify: bool,
683
684 #[arg(long)]
686 pub no_oracle_verify: bool,
687
688 #[arg(long, default_value = "1")]
690 pub consensus_runs: usize,
691
692 #[arg(long, default_value = "1.0")]
694 pub consensus_threshold: f32,
695
696 #[arg(long)]
698 pub analysis_temperature: Option<f32>,
699
700 #[arg(long)]
702 pub oracle_out_dir: Option<PathBuf>,
703
704 #[arg(long, default_value = "rlm_oracle")]
706 pub oracle_prefix: String,
707}
708
709#[derive(Parser, Debug)]
710pub struct OracleArgs {
711 #[command(subcommand)]
712 pub command: OracleCommand,
713}
714
715#[derive(Subcommand, Debug)]
716pub enum OracleCommand {
717 Validate(OracleValidateArgs),
719 Sync(OracleSyncArgs),
721}
722
723#[derive(Parser, Debug)]
724pub struct OracleValidateArgs {
725 #[arg(long)]
727 pub query: String,
728
729 #[arg(short, long)]
731 pub file: Option<PathBuf>,
732
733 #[arg(long)]
735 pub content: Option<String>,
736
737 #[arg(long)]
739 pub payload: Option<String>,
740
741 #[arg(long)]
743 pub payload_file: Option<PathBuf>,
744
745 #[arg(long)]
747 pub json: bool,
748
749 #[arg(long)]
751 pub persist: bool,
752}
753
754#[derive(Parser, Debug)]
755pub struct OracleSyncArgs {
756 #[arg(long)]
758 pub json: bool,
759}
760
761#[derive(Parser, Debug)]
762pub struct RalphArgs {
763 #[arg(value_parser = ["run", "status", "create-prd"])]
765 pub action: String,
766
767 #[arg(short, long, default_value = "prd.json")]
769 pub prd: PathBuf,
770
771 #[arg(short, long)]
773 pub feature: Option<String>,
774
775 #[arg(long = "project-name")]
777 pub project_name: Option<String>,
778
779 #[arg(long, default_value = "10")]
781 pub max_iterations: usize,
782
783 #[arg(short, long)]
785 pub model: Option<String>,
786
787 #[arg(long)]
789 pub json: bool,
790}
791
792#[derive(Parser, Debug)]
793pub struct McpArgs {
794 #[arg(value_parser = ["serve", "connect", "list-tools", "call"])]
796 pub action: String,
797
798 #[arg(short, long)]
800 pub command: Option<String>,
801
802 #[arg(long)]
804 pub server_name: Option<String>,
805
806 #[arg(long)]
808 pub tool: Option<String>,
809
810 #[arg(long)]
812 pub arguments: Option<String>,
813
814 #[arg(long)]
816 pub json: bool,
817
818 #[arg(long)]
820 pub worker_id: Option<String>,
821
822 #[arg(long)]
824 pub workspace_id: Option<String>,
825
826 #[arg(long)]
831 pub bus_url: Option<String>,
832
833 #[arg(allow_hyphen_values = true)]
836 pub command_args: Vec<String>,
837}
838
839#[derive(Parser, Debug)]
840pub struct StatsArgs {
841 #[arg(short, long)]
843 pub tools: bool,
844
845 #[arg(short, long)]
847 pub files: bool,
848
849 #[arg(long)]
851 pub tokens: bool,
852
853 #[arg(long)]
855 pub tool: Option<String>,
856
857 #[arg(long)]
859 pub file: Option<String>,
860
861 #[arg(short, long, default_value = "20")]
863 pub limit: usize,
864
865 #[arg(long)]
867 pub json: bool,
868
869 #[arg(long)]
871 pub all: bool,
872}
873
874#[derive(Parser, Debug)]
875pub struct CleanupArgs {
876 #[arg(short, long)]
878 pub dry_run: bool,
879
880 #[arg(long)]
882 pub worktrees_only: bool,
883
884 #[arg(long)]
886 pub json: bool,
887}
888
889#[derive(Parser, Debug)]
890pub struct ModelsArgs {
891 #[arg(short, long)]
893 pub provider: Option<String>,
894
895 #[arg(long)]
897 pub json: bool,
898}
899
900#[derive(Parser, Debug)]
901pub struct IndexArgs {
902 #[arg(short, long)]
904 pub path: Option<PathBuf>,
905
906 #[arg(short, long)]
908 pub output: Option<PathBuf>,
909
910 #[arg(long, default_value = "1024")]
912 pub max_file_size_kib: u64,
913
914 #[arg(long, default_value = "hash-v1")]
916 pub embedding_model: String,
917
918 #[arg(long, default_value = "local")]
920 pub embedding_provider: String,
921
922 #[arg(long, default_value = "384")]
924 pub embedding_dimensions: usize,
925
926 #[arg(long, default_value = "32")]
928 pub embedding_batch_size: usize,
929
930 #[arg(long, default_value = "3")]
932 pub embedding_max_retries: u32,
933
934 #[arg(long, default_value = "250")]
936 pub embedding_retry_initial_ms: u64,
937
938 #[arg(long, default_value = "2000")]
940 pub embedding_retry_max_ms: u64,
941
942 #[arg(long, default_value = "8000")]
944 pub embedding_input_chars: usize,
945
946 #[arg(long, default_value_t = false)]
948 pub include_hidden: bool,
949
950 #[arg(long)]
952 pub json: bool,
953}
954
955#[derive(Parser, Debug)]
956pub struct MoltbookArgs {
957 #[command(subcommand)]
958 pub command: MoltbookCommand,
959}
960
961#[derive(Subcommand, Debug)]
962pub enum MoltbookCommand {
963 Register(MoltbookRegisterArgs),
965
966 Status,
968
969 Profile,
971
972 UpdateProfile(MoltbookUpdateProfileArgs),
974
975 Post(MoltbookPostArgs),
977
978 Intro,
980
981 Heartbeat,
983
984 Comment(MoltbookCommentArgs),
986
987 Search(MoltbookSearchArgs),
989}
990
991#[derive(Parser, Debug)]
992pub struct MoltbookRegisterArgs {
993 pub name: String,
995
996 #[arg(short, long)]
998 pub description: Option<String>,
999}
1000
1001#[derive(Parser, Debug)]
1002pub struct MoltbookUpdateProfileArgs {
1003 #[arg(short, long)]
1005 pub description: Option<String>,
1006}
1007
1008#[derive(Parser, Debug)]
1009pub struct MoltbookPostArgs {
1010 pub title: String,
1012
1013 #[arg(short, long)]
1015 pub content: String,
1016
1017 #[arg(short, long, default_value = "general")]
1019 pub submolt: String,
1020}
1021
1022#[derive(Parser, Debug)]
1023pub struct MoltbookCommentArgs {
1024 pub post_id: String,
1026
1027 pub content: String,
1029}
1030
1031#[derive(Parser, Debug)]
1032pub struct MoltbookSearchArgs {
1033 pub query: String,
1035
1036 #[arg(short, long, default_value = "10")]
1038 pub limit: usize,
1039}
1040
1041#[derive(Parser, Debug)]
1042pub struct BenchmarkArgs {
1043 #[arg(long, default_value = "benchmarks")]
1045 pub prd_dir: String,
1046
1047 #[arg(short, long, value_delimiter = ',')]
1049 pub models: Vec<String>,
1050
1051 #[arg(long)]
1053 pub tier: Option<u8>,
1054
1055 #[arg(long)]
1057 pub parallel: bool,
1058
1059 #[arg(long, default_value = "10")]
1061 pub max_iterations: usize,
1062
1063 #[arg(long, default_value = "300")]
1065 pub story_timeout: u64,
1066
1067 #[arg(short, long, default_value = "benchmark_results.json")]
1069 pub output: String,
1070
1071 #[arg(long, default_value = "50.0")]
1073 pub cost_ceiling: f64,
1074
1075 #[arg(long)]
1077 pub submit_url: Option<String>,
1078
1079 #[arg(long, env = "BENCHMARK_API_KEY")]
1081 pub submit_key: Option<String>,
1082
1083 #[arg(long)]
1085 pub json: bool,
1086}
1087
1088#[derive(Parser, Debug)]
1089pub struct OkrArgs {
1090 #[arg(value_parser = ["list", "status", "create", "runs", "export", "stats", "report"])]
1092 pub action: String,
1093
1094 #[arg(short, long)]
1096 pub id: Option<String>,
1097
1098 #[arg(short, long)]
1100 pub title: Option<String>,
1101
1102 #[arg(short, long)]
1104 pub description: Option<String>,
1105
1106 #[arg(long)]
1108 pub target: Option<f64>,
1109
1110 #[arg(long, default_value = "%")]
1112 pub unit: String,
1113
1114 #[arg(long)]
1116 pub status: Option<String>,
1117
1118 #[arg(long)]
1120 pub owner: Option<String>,
1121
1122 #[arg(long)]
1124 pub json: bool,
1125
1126 #[arg(long)]
1128 pub evidence: bool,
1129}
1130
1131#[derive(Parser, Debug)]
1132#[command(
1133 about = "LLM-routed search across grep/glob/web/memory/RLM backends",
1134 long_about = "Uses the configured LLM router (default zai/glm-5.1) to pick the best search backend for your query, runs it, and returns normalized results.",
1135 after_long_help = "Examples:\n codetether search \"where is fn main\"\n codetether search --json \"how to center a div\"\n codetether search --top-n 3 --router-model zai/glm-5.1 \"latest rust async trait docs\""
1136)]
1137pub struct SearchArgs {
1138 pub query: String,
1140
1141 #[arg(long, default_value = "1")]
1143 pub top_n: usize,
1144
1145 #[arg(long)]
1147 pub router_model: Option<String>,
1148
1149 #[arg(long)]
1151 pub json: bool,
1152}
1153
1154#[derive(Parser, Debug)]
1155#[command(
1156 about = "OKR-governed autonomous opportunity scanner/executor",
1157 long_about = "Scan OKRs/KRs for high-priority opportunities and optionally execute the top selections with the build agent.",
1158 after_long_help = "Examples:\n codetether forage --top 5\n codetether forage --loop --interval-secs 600\n codetether forage --loop --execute --top 1 --interval-secs 600 --max-cycles 48 --run-timeout-secs 900 --model minimax/MiniMax-M2.5\n codetether forage --loop --execute --execution-engine swarm --swarm-max-subagents 8 --swarm-strategy auto --model zai/glm-5"
1159)]
1160pub struct ForageArgs {
1161 #[arg(long, default_value = "3")]
1163 pub top: usize,
1164
1165 #[arg(long = "loop")]
1167 pub loop_mode: bool,
1168
1169 #[arg(long, default_value = "120")]
1171 pub interval_secs: u64,
1172
1173 #[arg(long, default_value = "0")]
1175 pub max_cycles: usize,
1176
1177 #[arg(long)]
1179 pub execute: bool,
1180
1181 #[arg(long)]
1183 pub no_s3: bool,
1184
1185 #[arg(long = "moonshot")]
1189 pub moonshots: Vec<String>,
1190
1191 #[arg(long)]
1193 pub moonshot_file: Option<PathBuf>,
1194
1195 #[arg(long)]
1197 pub moonshot_required: bool,
1198
1199 #[arg(long, default_value = "0.10")]
1201 pub moonshot_min_alignment: f64,
1202
1203 #[arg(long, default_value = "run", value_parser = ["run", "swarm", "go"])]
1205 pub execution_engine: String,
1206
1207 #[arg(long, default_value = "900")]
1209 pub run_timeout_secs: u64,
1210
1211 #[arg(long)]
1213 pub fail_fast: bool,
1214
1215 #[arg(long, default_value = "auto", value_parser = ["auto", "domain", "data", "stage", "none"])]
1217 pub swarm_strategy: String,
1218
1219 #[arg(long, default_value = "8")]
1221 pub swarm_max_subagents: usize,
1222
1223 #[arg(long, default_value = "100")]
1225 pub swarm_max_steps: usize,
1226
1227 #[arg(long, default_value = "300")]
1229 pub swarm_subagent_timeout_secs: u64,
1230
1231 #[arg(short, long)]
1233 pub model: Option<String>,
1234
1235 #[arg(long)]
1237 pub json: bool,
1238}