Make script run without interrupting GUI experience
This can be achieved from the command line using the defaults system, as demonstrated at the SelfControl github site.

To avoid link-rot, I copy the site's text below:


  In some cases, you may want to start a SelfControl block from the command line. This can make it much easier for advanced users to script their SelfControl blocks. This article explains how you can start SelfControl from the command line. If you're not familiar with the command line, this article is not for you.
  
  
  Install SelfControl into your Applications folder.
  Set your block preferences via the defaults system. The key values you'll need to set are BlockDuration (length of the block in minutes), HostBlacklist (an array containing the list of hosts to block/whitelist), and BlockAsWhitelist (makes it a whitelist instead of blacklist). There are more preferences if you want them; you can see them by running defaults read org.eyebeam.SelfControl (or just configure them in the app's preferences panel). Don't set BlockStartedDate, that's handled by the program automatically.
  Run sudo /Applications/SelfControl.app/Contents/MacOS/org.eyebeam.SelfControl $(id -u $(whoami)) --install to start a block. It will automatically run checkups to see if the block needs removal every minute.
  Wait for the block to expire. If you want to manually run a checkup to remove the block if necessary, you can do so with sudo /Library/PrivilegedHelperTools/org.eyebeam.SelfControl $(id -u $(whoami)) --checkup. If that doesn't remove the backup successfully, you can run our backup removal tool with /Library/PrivilegedHelperTools/scheckup.