···234234 const loop $ Fmt_cli.style_renderer () $ Logs_cli.level ()
235235 $ requests_verbose_arg $ config_file $ bot_name $ interval)
236236237237+let loop_cmd =
238238+ let open Cmdliner in
239239+ let config_file =
240240+ Arg.(
241241+ value
242242+ & opt (some string) None
243243+ & info [ "c"; "config" ] ~docv:"FILE"
244244+ ~doc:"Path to poe.toml configuration file.")
245245+ in
246246+ let bot_name =
247247+ Arg.(
248248+ value
249249+ & opt string "poe"
250250+ & info [ "n"; "name" ] ~docv:"NAME"
251251+ ~doc:"Bot name for Zulip configuration lookup.")
252252+ in
253253+ let interval =
254254+ Arg.(
255255+ value
256256+ & opt int 3600
257257+ & info [ "i"; "interval" ] ~docv:"SECONDS"
258258+ ~doc:"Interval in seconds between change checks (default: 3600).")
259259+ in
260260+ let loop style_renderer level config_file bot_name interval =
261261+ setup_logging style_renderer level;
262262+ Eio_main.run @@ fun env ->
263263+ Eio.Switch.run @@ fun sw ->
264264+ let fs = Eio.Stdenv.fs env in
265265+266266+ (* Load poe config: explicit path > XDG > current dir > defaults *)
267267+ let poe_config =
268268+ match config_file with
269269+ | Some path -> Poe.Config.load ~fs path
270270+ | None -> (
271271+ match Poe.Config.load_xdg_opt ~fs with
272272+ | Some c -> c
273273+ | None -> (
274274+ match Poe.Config.load_opt ~fs "poe.toml" with
275275+ | Some c -> c
276276+ | None -> Poe.Config.default))
277277+ in
278278+279279+ let zulip_config = Zulip_bot.Config.load_or_env ~xdg_app:"poe" ~fs bot_name in
280280+ Logs.info (fun m ->
281281+ m "Starting loop, broadcasting to %s/%s every %d seconds"
282282+ poe_config.channel poe_config.topic interval);
283283+ Poe.Loop.run ~sw ~env ~config:poe_config ~zulip_config ~interval
284284+ in
285285+ let doc = "Run polling loop to check for and broadcast changes" in
286286+ let info = Cmd.info "loop" ~doc in
287287+ Cmd.v info
288288+ Term.(
289289+ const loop $ Fmt_cli.style_renderer () $ Logs_cli.level ()
290290+ $ config_file $ bot_name $ interval)
291291+237292let main_cmd =
238293 let open Cmdliner in
239294 let doc = "Poe - Zulip bot for monorepo changes with Claude integration" in