To start with, the file filesHarry.txt tells CS what to compile when you say :build Harry. That file says to compile everything in the top level of the two named directories.
When you talk to CS, you either pass a bot name or the default null bot name. The code in simplecontrol
table: defaultbot (^name)
^createfact(^name defaultbot defaultbot)
tells the system to use harry as the default bot (special fact with specific meaning to CS).
You have an outputmacro in there called “Harry”. When trying to communicate with Harry, that outputmacro now has special meaning- it defines what the bot looks like. Otherwise, it is just an ordinary macro. The macro has assignments that the engine cares about, like
$cs_token = #DO_INTERJECTION_SPLITTING | #DO_SUBSTITUTE_SYSTEM | #DO_NUMBER_MERGE | #DO_DATE_MERGE | #DO_PROPERNAME_MERGE | #DO_SPELLCHECK | #DO_PARSE
$cs_control_main = ~control