We address the problem of dynamic assignment of coordination (control) channels in cognitive radio networks (CRNs) by exploiting time- and space-varying spectrum opportunities. Motivated by the inherent grouping of Cognitive Radio (CR) users according to channel availability, we propose a cluster-based architecture for control-channel assignment in a CRN. CRs are grouped in the same cluster if they roughly sense similar idle channels and are within communication range, either directly or via a clusterhead.We formulate the clustering design as a maximum edge biclique problem. A distributed cluster agreement algorithm called Spectrum-Opportunity Clustering (SOC) is proposed to solve this problem. SOC provides a desirable balance between two competing factors: the set of common idle channels within each cluster and the cluster size. A large set of common idle channels within each cluster allows graceful migration from the current control channel should primary radio (PR) activity appear on that channel. Hence, SOC provides a stable network partition with respect to local coordination, with no need for frequent reclustering. Moreover, when reclustering has to be performed (due to CR mobility or PR activity), CRs agree on new clusters after the broadcast of only three messages, thus incurring low communication overhead.