I'm getting seriously bad .NET Remoting flashbacks. Someone tell me how this is different and won't hide important transactional boundaries.
References to grains are represented by interfaces and if the machine you're communicating with fails, the grain will be re-activated on a surviving host the next time you need to call it. In other words, they are location transparent and the application won't get stuck in some failure state when a machine crashes.