I am working on a new implementation of tasks that will make creating new UIs much simpler. Basically, there is a new base class, called a TTask which handles all events from the CroquetHarness. Even the default interface in Croquet is implemented this way.
An event is interpreted and redirected by the task object. The default task simply forwards the event to the initially selected object, which is just what happens now.
Ultimately, any portal will be able to reinterpret the events via their own task objects.