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 run_checkpoint;
12pub mod run_loop;
13pub mod search;
14pub mod search_render;
15
16use clap::{Parser, Subcommand};
17use std::path::PathBuf;
18
19#[derive(Parser, Debug)]
24#[command(name = "codetether")]
25#[command(version, about, long_about = None)]
26pub struct Cli {
27 #[arg(global = true, last = true)]
29 pub project: Option<PathBuf>,
30
31 #[arg(long, global = true)]
33 pub print_logs: bool,
34
35 #[arg(long, global = true, value_parser = ["DEBUG", "INFO", "WARN", "ERROR"])]
37 pub log_level: Option<String>,
38
39 #[arg(short, long, env = "CODETETHER_SERVER")]
42 pub server: Option<String>,
43
44 #[arg(short, long, env = "CODETETHER_TOKEN")]
46 pub token: Option<String>,
47
48 #[arg(short, long, env = "CODETETHER_WORKER_NAME")]
50 pub name: Option<String>,
51
52 #[command(subcommand)]
53 pub command: Option<Command>,
54}
55
56#[derive(Subcommand, Debug)]
57pub enum Command {
58 Tui(TuiArgs),
60
61 Serve(ServeArgs),
63
64 Run(RunArgs),
66
67 Pr(PrArgs),
69
70 Auth(AuthArgs),
72
73 Config(ConfigArgs),
75
76 Clipboard(clipboard::ClipboardArgs),
78
79 Context(ContextArgs),
81
82 Worker(A2aArgs),
84
85 #[command(hide = true)]
87 GitCredentialHelper(GitCredentialHelperArgs),
88
89 Spawn(SpawnArgs),
91
92 Swarm(SwarmArgs),
94
95 #[command(hide = true)]
97 SwarmSubagent(SwarmSubagentArgs),
98
99 Rlm(RlmArgs),
101
102 Oracle(OracleArgs),
104
105 Ralph(RalphArgs),
107
108 Mcp(McpArgs),
110
111 Stats(StatsArgs),
113
114 Cleanup(CleanupArgs),
116
117 Models(ModelsArgs),
119
120 Index(IndexArgs),
122
123 Benchmark(BenchmarkArgs),
125
126 Moltbook(MoltbookArgs),
128
129 Okr(OkrArgs),
131
132 Forage(ForageArgs),
134
135 Search(SearchArgs),
137
138 #[command(name = "browserctl", visible_alias = "browser")]
140 Browserctl(browserctl::BrowserCtlArgs),
141}
142
143#[derive(Parser, Debug)]
144pub struct AuthArgs {
145 #[command(subcommand)]
146 pub command: AuthCommand,
147}
148
149#[derive(Subcommand, Debug)]
150pub enum AuthCommand {
151 Copilot(CopilotAuthArgs),
153
154 Codex(CodexAuthArgs),
156
157 Cookies(CookieAuthArgs),
159
160 Register(RegisterAuthArgs),
162
163 Login(LoginAuthArgs),
165}
166
167#[derive(Parser, Debug)]
168pub struct RegisterAuthArgs {
169 #[arg(short, long, env = "CODETETHER_SERVER")]
171 pub server: String,
172
173 #[arg(short, long)]
175 pub email: Option<String>,
176
177 #[arg(long)]
179 pub first_name: Option<String>,
180
181 #[arg(long)]
183 pub last_name: Option<String>,
184
185 #[arg(long)]
187 pub referral_source: Option<String>,
188}
189
190#[derive(Parser, Debug)]
191pub struct LoginAuthArgs {
192 #[arg(short, long, env = "CODETETHER_SERVER")]
194 pub server: String,
195
196 #[arg(short, long)]
198 pub email: Option<String>,
199}
200
201#[derive(Parser, Debug)]
202pub struct CopilotAuthArgs {
203 #[arg(long)]
205 pub enterprise_url: Option<String>,
206
207 #[arg(long, env = "CODETETHER_COPILOT_OAUTH_CLIENT_ID")]
209 pub client_id: Option<String>,
210}
211
212#[derive(Parser, Debug)]
213pub struct CodexAuthArgs {
214 #[arg(long, default_value_t = false)]
216 pub device_code: bool,
217}
218
219#[derive(Parser, Debug)]
220pub struct CookieAuthArgs {
221 #[arg(long, default_value = "nextdoor-web")]
223 pub provider: String,
224
225 #[arg(long)]
227 pub file: PathBuf,
228
229 #[arg(long, default_value_t = false)]
231 pub keep_all: bool,
232}
233
234#[derive(Parser, Debug)]
235pub struct TuiArgs {
236 pub project: Option<PathBuf>,
238
239 #[arg(long)]
241 pub allow_network: bool,
242
243 #[arg(long = "no-a2a", action = clap::ArgAction::SetFalse, default_value_t = true)]
248 pub a2a: bool,
249
250 #[arg(long)]
253 pub a2a_port: Option<u16>,
254
255 #[arg(long, default_value = "0.0.0.0")]
259 pub a2a_hostname: String,
260
261 #[arg(long)]
263 pub a2a_public_url: Option<String>,
264
265 #[arg(long)]
267 pub a2a_name: Option<String>,
268
269 #[arg(long)]
271 pub a2a_description: Option<String>,
272
273 #[arg(long, value_delimiter = ',', env = "CODETETHER_A2A_PEERS")]
276 pub a2a_peer: Vec<String>,
277
278 #[arg(long, default_value = "15")]
281 pub a2a_discovery_interval_secs: u64,
282
283 #[arg(long = "a2a-no-auto-introduce", action = clap::ArgAction::SetFalse, default_value_t = true)]
285 pub a2a_auto_introduce: bool,
286
287 #[arg(long = "a2a-no-mdns", action = clap::ArgAction::SetFalse, default_value_t = true)]
290 pub a2a_mdns: bool,
291}
292
293#[derive(Parser, Debug)]
294pub struct ServeArgs {
295 #[arg(short, long, default_value = "4096")]
297 pub port: u16,
298
299 #[arg(long, default_value = "127.0.0.1")]
301 pub hostname: String,
302
303 #[arg(long)]
305 pub mdns: bool,
306}
307
308#[derive(Parser, Debug)]
309pub struct RunArgs {
310 pub message: String,
312
313 #[arg(short, long)]
315 pub continue_session: bool,
316
317 #[arg(short, long)]
319 pub session: Option<String>,
320
321 #[arg(short, long)]
323 pub model: Option<String>,
324
325 #[arg(long)]
327 pub agent: Option<String>,
328
329 #[arg(long, default_value = "default", value_parser = ["default", "json"])]
331 pub format: String,
332
333 #[arg(short, long)]
335 pub file: Vec<PathBuf>,
336
337 #[arg(long)]
339 pub codex_session: Option<String>,
340
341 #[arg(long)]
343 pub max_steps: Option<usize>,
344
345 #[arg(long)]
347 pub auto_continue_until: Option<usize>,
348
349 #[arg(long, default_value = "1")]
352 pub branches: usize,
353
354 #[arg(long, value_delimiter = ',')]
357 pub strategies: Vec<String>,
358}
359
360#[derive(Parser, Debug)]
361pub struct PrArgs {
362 #[command(subcommand)]
363 pub command: PrCommand,
364}
365
366#[derive(Subcommand, Debug)]
367pub enum PrCommand {
368 Create(CreatePrArgs),
370}
371
372#[derive(Parser, Debug, Clone)]
373pub struct CreatePrArgs {
374 #[arg(long)]
376 pub title: String,
377
378 #[arg(long)]
380 pub body: Option<String>,
381
382 #[arg(long)]
384 pub body_file: Option<PathBuf>,
385
386 #[arg(long, default_value = "main")]
388 pub base: String,
389
390 #[arg(long)]
392 pub head: Option<String>,
393
394 #[arg(long, default_value_t = false)]
396 pub draft: bool,
397
398 #[arg(long, default_value_t = false)]
400 pub json: bool,
401
402 #[arg(long)]
404 pub project: Option<PathBuf>,
405}
406
407#[derive(Parser, Debug, Clone)]
409pub struct WorkerServerArgs {
410 #[arg(long, default_value = "0.0.0.0")]
412 pub hostname: String,
413
414 #[arg(short, long, default_value = "8080")]
416 pub port: u16,
417}
418
419#[derive(Parser, Debug, Clone)]
420pub struct A2aArgs {
421 #[arg(short, long, env = "CODETETHER_SERVER", default_value = crate::a2a::worker::DEFAULT_A2A_SERVER_URL)]
423 pub server: String,
424
425 #[arg(short, long, env = "CODETETHER_TOKEN")]
427 pub token: Option<String>,
428
429 #[arg(short, long, env = "CODETETHER_WORKER_NAME")]
431 pub name: Option<String>,
432
433 #[arg(short, long, visible_alias = "codebases")]
435 pub workspaces: Option<String>,
436
437 #[arg(
439 long,
440 env = "CODETETHER_WORKER_MAX_CONCURRENT_TASKS",
441 default_value_t = 4
442 )]
443 pub max_concurrent_tasks: usize,
444
445 #[arg(long, default_value = "safe", value_parser = ["all", "safe", "none"])]
447 pub auto_approve: String,
448
449 #[arg(short, long)]
451 pub email: Option<String>,
452
453 #[arg(long)]
455 pub push_url: Option<String>,
456
457 #[arg(long, default_value = "0.0.0.0", env = "CODETETHER_WORKER_HOST")]
459 pub hostname: String,
460
461 #[arg(long, default_value = "8080", env = "CODETETHER_WORKER_PORT")]
463 pub port: u16,
464
465 #[arg(long, env = "CODETETHER_WORKER_PUBLIC_URL")]
467 pub public_url: Option<String>,
468
469 #[arg(long, env = "CODETETHER_WORKER_HTTP_DISABLED")]
471 pub no_http_server: bool,
472}
473
474#[derive(Parser, Debug, Clone)]
475pub struct GitCredentialHelperArgs {
476 #[arg(long = "workspace-id", alias = "codebase-id")]
478 pub workspace_id: String,
479
480 #[arg(long, env = "CODETETHER_SERVER")]
482 pub server: Option<String>,
483
484 #[arg(long, env = "CODETETHER_TOKEN")]
486 pub token: Option<String>,
487
488 #[arg(long, env = "CODETETHER_WORKER_ID")]
490 pub worker_id: Option<String>,
491
492 pub operation: Option<String>,
494}
495
496#[derive(Parser, Debug, Clone)]
497pub struct SpawnArgs {
498 #[arg(short, long)]
500 pub name: Option<String>,
501
502 #[arg(long, default_value = "127.0.0.1")]
509 pub hostname: String,
510
511 #[arg(short, long, default_value = "0")]
514 pub port: u16,
515
516 #[arg(long)]
518 pub public_url: Option<String>,
519
520 #[arg(short, long)]
522 pub description: Option<String>,
523
524 #[arg(long, value_delimiter = ',', env = "CODETETHER_A2A_PEERS")]
527 pub peer: Vec<String>,
528
529 #[arg(long, default_value = "15")]
532 pub discovery_interval_secs: u64,
533
534 #[arg(long = "no-auto-introduce", action = clap::ArgAction::SetFalse, default_value_t = true)]
536 pub auto_introduce: bool,
537
538 #[arg(long = "no-mdns", action = clap::ArgAction::SetFalse, default_value_t = true)]
541 pub mdns: bool,
542}
543
544#[derive(Parser, Debug)]
545pub struct ConfigArgs {
546 #[arg(long)]
548 pub show: bool,
549
550 #[arg(long)]
552 pub init: bool,
553
554 #[arg(long)]
556 pub set: Option<String>,
557}
558
559#[derive(Parser, Debug)]
560pub struct ContextArgs {
561 #[command(subcommand)]
562 pub command: ContextCommand,
563}
564
565#[derive(Subcommand, Debug)]
566pub enum ContextCommand {
567 Reset(ContextResetArgs),
569 Browse(ContextBrowseArgs),
571}
572
573#[derive(Parser, Debug)]
574pub struct ContextResetArgs {
575 #[arg(long)]
577 pub summary: Option<String>,
578}
579
580#[derive(Parser, Debug)]
581pub struct ContextBrowseArgs {
582 #[command(subcommand)]
583 pub command: Option<ContextBrowseCommand>,
584}
585
586#[derive(Subcommand, Debug)]
587pub enum ContextBrowseCommand {
588 List,
590 ShowTurn(ContextShowTurnArgs),
592}
593
594#[derive(Parser, Debug)]
595pub struct ContextShowTurnArgs {
596 pub turn: usize,
598}
599
600#[derive(Parser, Debug)]
601pub struct SwarmArgs {
602 pub task: String,
604
605 #[arg(short, long)]
607 pub model: Option<String>,
608
609 #[arg(short = 's', long, default_value = "auto")]
611 pub strategy: String,
612
613 #[arg(long, default_value = "100")]
615 pub max_subagents: usize,
616
617 #[arg(long, default_value = "100")]
619 pub max_steps: usize,
620
621 #[arg(long, default_value = "300")]
623 pub timeout: u64,
624
625 #[arg(long)]
627 pub json: bool,
628
629 #[arg(long, default_value = "local", value_parser = ["local", "k8s", "kubernetes", "kubernetes-pod", "pod"])]
631 pub execution_mode: String,
632
633 #[arg(long, default_value = "8")]
635 pub k8s_pod_budget: usize,
636
637 #[arg(long)]
639 pub k8s_image: Option<String>,
640}
641
642#[derive(Parser, Debug)]
643pub struct SwarmSubagentArgs {
644 #[arg(long)]
646 pub payload_base64: Option<String>,
647
648 #[arg(long, default_value = "CODETETHER_SWARM_SUBTASK_PAYLOAD")]
650 pub payload_env: String,
651}
652
653#[derive(Parser, Debug)]
654pub struct RlmArgs {
655 pub query: String,
657
658 #[arg(short, long)]
660 pub model: Option<String>,
661
662 #[arg(short, long)]
664 pub file: Vec<PathBuf>,
665
666 #[arg(long)]
668 pub content: Option<String>,
669
670 #[arg(long, default_value = "auto")]
672 pub content_type: String,
673
674 #[arg(long, default_value = "4000")]
676 pub max_tokens: usize,
677
678 #[arg(long)]
680 pub json: bool,
681
682 #[arg(short, long)]
684 pub verbose: bool,
685
686 #[arg(long)]
688 pub oracle_verify: bool,
689
690 #[arg(long)]
692 pub no_oracle_verify: bool,
693
694 #[arg(long, default_value = "1")]
696 pub consensus_runs: usize,
697
698 #[arg(long, default_value = "1.0")]
700 pub consensus_threshold: f32,
701
702 #[arg(long)]
704 pub analysis_temperature: Option<f32>,
705
706 #[arg(long)]
708 pub oracle_out_dir: Option<PathBuf>,
709
710 #[arg(long, default_value = "rlm_oracle")]
712 pub oracle_prefix: String,
713}
714
715#[derive(Parser, Debug)]
716pub struct OracleArgs {
717 #[command(subcommand)]
718 pub command: OracleCommand,
719}
720
721#[derive(Subcommand, Debug)]
722pub enum OracleCommand {
723 Validate(OracleValidateArgs),
725 Sync(OracleSyncArgs),
727}
728
729#[derive(Parser, Debug)]
730pub struct OracleValidateArgs {
731 #[arg(long)]
733 pub query: String,
734
735 #[arg(short, long)]
737 pub file: Option<PathBuf>,
738
739 #[arg(long)]
741 pub content: Option<String>,
742
743 #[arg(long)]
745 pub payload: Option<String>,
746
747 #[arg(long)]
749 pub payload_file: Option<PathBuf>,
750
751 #[arg(long)]
753 pub json: bool,
754
755 #[arg(long)]
757 pub persist: bool,
758}
759
760#[derive(Parser, Debug)]
761pub struct OracleSyncArgs {
762 #[arg(long)]
764 pub json: bool,
765}
766
767#[derive(Parser, Debug)]
768pub struct RalphArgs {
769 #[arg(value_parser = ["run", "status", "create-prd"])]
771 pub action: String,
772
773 #[arg(short, long, default_value = "prd.json")]
775 pub prd: PathBuf,
776
777 #[arg(short, long)]
779 pub feature: Option<String>,
780
781 #[arg(long = "project-name")]
783 pub project_name: Option<String>,
784
785 #[arg(long, default_value = "10")]
787 pub max_iterations: usize,
788
789 #[arg(short, long)]
791 pub model: Option<String>,
792
793 #[arg(long)]
795 pub json: bool,
796}
797
798#[derive(Parser, Debug)]
799pub struct McpArgs {
800 #[arg(value_parser = ["serve", "connect", "list-tools", "call"])]
802 pub action: String,
803
804 #[arg(short, long)]
806 pub command: Option<String>,
807
808 #[arg(long)]
810 pub server_name: Option<String>,
811
812 #[arg(long)]
814 pub tool: Option<String>,
815
816 #[arg(long)]
818 pub arguments: Option<String>,
819
820 #[arg(long)]
822 pub json: bool,
823
824 #[arg(long)]
826 pub worker_id: Option<String>,
827
828 #[arg(long)]
830 pub workspace_id: Option<String>,
831
832 #[arg(long)]
837 pub bus_url: Option<String>,
838
839 #[arg(allow_hyphen_values = true)]
842 pub command_args: Vec<String>,
843}
844
845#[derive(Parser, Debug)]
846pub struct StatsArgs {
847 #[arg(short, long)]
849 pub tools: bool,
850
851 #[arg(short, long)]
853 pub files: bool,
854
855 #[arg(long)]
857 pub tokens: bool,
858
859 #[arg(long)]
861 pub tool: Option<String>,
862
863 #[arg(long)]
865 pub file: Option<String>,
866
867 #[arg(short, long, default_value = "20")]
869 pub limit: usize,
870
871 #[arg(long)]
873 pub json: bool,
874
875 #[arg(long)]
877 pub all: bool,
878}
879
880#[derive(Parser, Debug)]
881pub struct CleanupArgs {
882 #[arg(short, long)]
884 pub dry_run: bool,
885
886 #[arg(long)]
888 pub worktrees_only: bool,
889
890 #[arg(long)]
892 pub json: bool,
893}
894
895#[derive(Parser, Debug)]
896pub struct ModelsArgs {
897 #[arg(short, long)]
899 pub provider: Option<String>,
900
901 #[arg(long)]
903 pub json: bool,
904}
905
906#[derive(Parser, Debug)]
907pub struct IndexArgs {
908 #[arg(short, long)]
910 pub path: Option<PathBuf>,
911
912 #[arg(short, long)]
914 pub output: Option<PathBuf>,
915
916 #[arg(long, default_value = "1024")]
918 pub max_file_size_kib: u64,
919
920 #[arg(long, default_value = "hash-v1")]
922 pub embedding_model: String,
923
924 #[arg(long, default_value = "local")]
926 pub embedding_provider: String,
927
928 #[arg(long, default_value = "384")]
930 pub embedding_dimensions: usize,
931
932 #[arg(long, default_value = "32")]
934 pub embedding_batch_size: usize,
935
936 #[arg(long, default_value = "3")]
938 pub embedding_max_retries: u32,
939
940 #[arg(long, default_value = "250")]
942 pub embedding_retry_initial_ms: u64,
943
944 #[arg(long, default_value = "2000")]
946 pub embedding_retry_max_ms: u64,
947
948 #[arg(long, default_value = "8000")]
950 pub embedding_input_chars: usize,
951
952 #[arg(long, default_value_t = false)]
954 pub include_hidden: bool,
955
956 #[arg(long)]
958 pub json: bool,
959}
960
961#[derive(Parser, Debug)]
962pub struct MoltbookArgs {
963 #[command(subcommand)]
964 pub command: MoltbookCommand,
965}
966
967#[derive(Subcommand, Debug)]
968pub enum MoltbookCommand {
969 Register(MoltbookRegisterArgs),
971
972 Status,
974
975 Profile,
977
978 UpdateProfile(MoltbookUpdateProfileArgs),
980
981 Post(MoltbookPostArgs),
983
984 Intro,
986
987 Heartbeat,
989
990 Comment(MoltbookCommentArgs),
992
993 Search(MoltbookSearchArgs),
995}
996
997#[derive(Parser, Debug)]
998pub struct MoltbookRegisterArgs {
999 pub name: String,
1001
1002 #[arg(short, long)]
1004 pub description: Option<String>,
1005}
1006
1007#[derive(Parser, Debug)]
1008pub struct MoltbookUpdateProfileArgs {
1009 #[arg(short, long)]
1011 pub description: Option<String>,
1012}
1013
1014#[derive(Parser, Debug)]
1015pub struct MoltbookPostArgs {
1016 pub title: String,
1018
1019 #[arg(short, long)]
1021 pub content: String,
1022
1023 #[arg(short, long, default_value = "general")]
1025 pub submolt: String,
1026}
1027
1028#[derive(Parser, Debug)]
1029pub struct MoltbookCommentArgs {
1030 pub post_id: String,
1032
1033 pub content: String,
1035}
1036
1037#[derive(Parser, Debug)]
1038pub struct MoltbookSearchArgs {
1039 pub query: String,
1041
1042 #[arg(short, long, default_value = "10")]
1044 pub limit: usize,
1045}
1046
1047#[derive(Parser, Debug)]
1048pub struct BenchmarkArgs {
1049 #[arg(long, default_value = "benchmarks")]
1051 pub prd_dir: String,
1052
1053 #[arg(short, long, value_delimiter = ',')]
1055 pub models: Vec<String>,
1056
1057 #[arg(long)]
1059 pub tier: Option<u8>,
1060
1061 #[arg(long)]
1063 pub parallel: bool,
1064
1065 #[arg(long, default_value = "10")]
1067 pub max_iterations: usize,
1068
1069 #[arg(long, default_value = "300")]
1071 pub story_timeout: u64,
1072
1073 #[arg(short, long, default_value = "benchmark_results.json")]
1075 pub output: String,
1076
1077 #[arg(long, default_value = "50.0")]
1079 pub cost_ceiling: f64,
1080
1081 #[arg(long)]
1083 pub submit_url: Option<String>,
1084
1085 #[arg(long, env = "BENCHMARK_API_KEY")]
1087 pub submit_key: Option<String>,
1088
1089 #[arg(long)]
1091 pub json: bool,
1092}
1093
1094#[derive(Parser, Debug)]
1095pub struct OkrArgs {
1096 #[arg(value_parser = ["list", "status", "create", "runs", "export", "stats", "report"])]
1098 pub action: String,
1099
1100 #[arg(short, long)]
1102 pub id: Option<String>,
1103
1104 #[arg(short, long)]
1106 pub title: Option<String>,
1107
1108 #[arg(short, long)]
1110 pub description: Option<String>,
1111
1112 #[arg(long)]
1114 pub target: Option<f64>,
1115
1116 #[arg(long, default_value = "%")]
1118 pub unit: String,
1119
1120 #[arg(long)]
1122 pub status: Option<String>,
1123
1124 #[arg(long)]
1126 pub owner: Option<String>,
1127
1128 #[arg(long)]
1130 pub json: bool,
1131
1132 #[arg(long)]
1134 pub evidence: bool,
1135}
1136
1137#[derive(Parser, Debug)]
1138#[command(
1139 about = "LLM-routed search across grep/glob/web/memory/RLM backends",
1140 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.",
1141 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\""
1142)]
1143pub struct SearchArgs {
1144 pub query: String,
1146
1147 #[arg(long, default_value = "1")]
1149 pub top_n: usize,
1150
1151 #[arg(long)]
1153 pub router_model: Option<String>,
1154
1155 #[arg(long)]
1157 pub json: bool,
1158}
1159
1160#[derive(Parser, Debug)]
1161#[command(
1162 about = "OKR-governed autonomous opportunity scanner/executor",
1163 long_about = "Scan OKRs/KRs for high-priority opportunities and optionally execute the top selections with the build agent.",
1164 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"
1165)]
1166pub struct ForageArgs {
1167 #[arg(long, default_value = "3")]
1169 pub top: usize,
1170
1171 #[arg(long = "loop")]
1173 pub loop_mode: bool,
1174
1175 #[arg(long, default_value = "120")]
1177 pub interval_secs: u64,
1178
1179 #[arg(long, default_value = "0")]
1181 pub max_cycles: usize,
1182
1183 #[arg(long)]
1185 pub execute: bool,
1186
1187 #[arg(long)]
1189 pub no_s3: bool,
1190
1191 #[arg(long = "moonshot")]
1195 pub moonshots: Vec<String>,
1196
1197 #[arg(long)]
1199 pub moonshot_file: Option<PathBuf>,
1200
1201 #[arg(long)]
1203 pub moonshot_required: bool,
1204
1205 #[arg(long, default_value = "0.10")]
1207 pub moonshot_min_alignment: f64,
1208
1209 #[arg(long, default_value = "run", value_parser = ["run", "swarm", "go"])]
1211 pub execution_engine: String,
1212
1213 #[arg(long, default_value = "900")]
1215 pub run_timeout_secs: u64,
1216
1217 #[arg(long)]
1219 pub fail_fast: bool,
1220
1221 #[arg(long, default_value = "auto", value_parser = ["auto", "domain", "data", "stage", "none"])]
1223 pub swarm_strategy: String,
1224
1225 #[arg(long, default_value = "8")]
1227 pub swarm_max_subagents: usize,
1228
1229 #[arg(long, default_value = "100")]
1231 pub swarm_max_steps: usize,
1232
1233 #[arg(long, default_value = "300")]
1235 pub swarm_subagent_timeout_secs: u64,
1236
1237 #[arg(short, long)]
1239 pub model: Option<String>,
1240
1241 #[arg(long)]
1243 pub json: bool,
1244}