The development of software architectures that ensure both a high-level of autonomy in the mission, and the robustness to possible failures, is a challenging task. In this paper, we propose to structure the software architecture around a skill management layer, based on formal skill models. This skill management layer helps to structure and test the underlying functional layer, while it provides a simple abstraction to the decision layer. This architecture has been used to support the implementation of resilient behaviours, using Behaviour Trees, in autonomous UAV missions, when facing sensor failures or communication losses.