pull down to refresh

How often does it decide to open/close channels and how does it decide when is a good time? I assume it looks at on-chain fees, but what's the decision rule?
That is up to the user to decide, you can run Hydrus daily, once a week, once a month, etc. This is typically configured in the systemd service timer or in a cronjob.
Once executed, the agent gathers information from the local node to decide whether it should open new channels (num_channels < max_channels) or potentially close some (num_channels > min_channels). So in some scenarios it may not do any changes.
Apart from that, there's a configuration called agent.channel_manager.max_sat_vb which is the maximum number of satoshis per virtual byte that you are willing to spend. If transaction fee is estimated to be higher than that value, no changes will be made.
So yeah, the agent can be scheduled to execute at anytime but it may do nothing depending on certain factors.