My agentic slop goes here. Not intended for anyone else!
1open Claude
2open Eio.Std
3
4let () = Logs.set_reporter (Logs_fmt.reporter ())
5let () = Logs.set_level (Some Logs.Info)
6
7let run env =
8 Switch.run @@ fun sw ->
9 let process_mgr = Eio.Stdenv.process_mgr env in
10
11 (* Create client with default options *)
12 let options = Options.default in
13 let client = Client.create ~options ~sw ~process_mgr () in
14
15 traceln "=== Dynamic Control Demo ===\n";
16
17 (* First query with default model *)
18 traceln "1. Initial query with default model";
19 Client.query client "What model are you?";
20
21 (* Consume initial messages *)
22 let messages = Client.receive_all client in
23 List.iter (function
24 | Message.Assistant msg ->
25 List.iter (function
26 | Content_block.Text t ->
27 traceln "Assistant: %s" (Content_block.Text.text t)
28 | _ -> ()
29 ) (Message.Assistant.content msg)
30 | _ -> ()
31 ) messages;
32
33 traceln "\n2. Getting server info...";
34 (try
35 let info = Client.get_server_info client in
36 traceln "Server version: %s" (Sdk_control.Server_info.version info);
37 traceln "Capabilities: [%s]"
38 (String.concat ", " (Sdk_control.Server_info.capabilities info));
39 traceln "Commands: [%s]"
40 (String.concat ", " (Sdk_control.Server_info.commands info));
41 traceln "Output styles: [%s]"
42 (String.concat ", " (Sdk_control.Server_info.output_styles info));
43 with
44 | Failure msg -> traceln "Failed to get server info: %s" msg
45 | exn -> traceln "Error getting server info: %s" (Printexc.to_string exn));
46
47 traceln "\n3. Switching to a different model (if available)...";
48 (try
49 Client.set_model_string client "claude-sonnet-4";
50 traceln "Model switched successfully";
51
52 (* Query with new model *)
53 Client.query client "Confirm your model again please.";
54 let messages = Client.receive_all client in
55 List.iter (function
56 | Message.Assistant msg ->
57 List.iter (function
58 | Content_block.Text t ->
59 traceln "Assistant (new model): %s" (Content_block.Text.text t)
60 | _ -> ()
61 ) (Message.Assistant.content msg)
62 | _ -> ()
63 ) messages;
64 with
65 | Failure msg -> traceln "Failed to switch model: %s" msg
66 | exn -> traceln "Error switching model: %s" (Printexc.to_string exn));
67
68 traceln "\n4. Changing permission mode...";
69 (try
70 Client.set_permission_mode client Permissions.Mode.Accept_edits;
71 traceln "Permission mode changed to Accept_edits";
72 with
73 | Failure msg -> traceln "Failed to change permission mode: %s" msg
74 | exn -> traceln "Error changing permission mode: %s" (Printexc.to_string exn));
75
76 traceln "\n=== Demo Complete ===";
77 ()
78
79let () =
80 Eio_main.run @@ fun env ->
81 try
82 run env
83 with
84 | Transport.CLI_not_found msg ->
85 traceln "Error: %s" msg;
86 traceln "Make sure the 'claude' CLI is installed and authenticated.";
87 exit 1
88 | exn ->
89 traceln "Unexpected error: %s" (Printexc.to_string exn);
90 Printexc.print_backtrace stderr;
91 exit 1