I've been a bit annoyed at how the order of startup events in the current Twine engine is 1) render the Start passage, 2) load the story's custom JavaScript. This ordering means that various custom things like macros can't be used in the Start passage, because they're loaded afterward.
What I'd much rather do is have the game automatically advance past the Start passage into the next passage, once all of the scripts are loaded. So, here's something to do that:
var next = "Start2"
if (state.history[0].passage.title=="Start") {
var n = insertElement(null, 'div');
n.style.display="none";
n.appendChild($("passages").removeChild($("passageStart")));
state.display(next,null);
$("passages").appendChild(n);
}
What this does is conceal the Start passage's div inside a hidden div*, then goes to the page named "Start2". This happens instantaneously, and is imperceptible to the player. (You can change the passage name that the code uses by altering the first line of the script snippet.)
*(Note that I can't just destroy the Start passage div outright, because the passage's fade() interval is still running, and cannot be halted without causing browser console errors (which are technically invisible to the player but are nonetheless untidy coding).)