It looks like each agent in the game can have its own BT which it updates every frame. But what if many agents share the same behaviour (so they have their own copy of the same tree)? Isn't it a good option to have only one instance of the tree and each agent passes its pointer to the tree during update? This way decision/behaviour logic will be the same, but it will also depend on current owner state because each node will have access to "owner->blackboard->some_data" etc.
Just to add from a general code point of view, this is called Flyweight-pattern, and makes most sense when there is a huge memory overhead, and sharing the instances helps to reduce this. I don't have much experience with AI, but generally this seems applyable.