for(j in 1:p){ beta[j] ~ dnorm(0, sd = tau)
}
tau ~ somePrior()
In this case, tau is shared across coefficients and is always part of the model. The question then becomes how tau should be updated relative to the RJ moves. My interpretation here is that tau would be informed only by the coefficients that are in the model. So in this case, I think a user could write their own sampler for tau.
A different situation would be something like
for(j in 1:p){
beta[j] ~ dnorm(0, sd = tau[j])
tau[j] ~ somePrior()
}
where each coefficient has its own local scale parameter. Conceptually, here, inclusion moves could involve jointly proposing both beta[j] and tau[j]. However, I would also be a bit cautious here since each tau[j] would be informed only through a single coefficient, but there might be contexts where a model like this would be reasonable.
Hope this helps!
Sally