Software agents are intended to autonomously perform certain tasks on behalf of their users. In many cases, however, the agent’s competence might not be sufficient to produce the desired outcome. Instead of simply giving up and leaving the whole task to the user, a much better alternative is to precisely identify what the cause of the current problem is, communicate it to another agent who can be expected to be able (and willing) to help, and use the results to carry on with achieving the original goal. An ideal candidate for the role of such a supporting agent is the user of a system who can certainly be expected to have some interest in obtaining a useful response, even at the cost of having to intervene from time to time. As a consequence it seems rational to ask her for help whenever the system gets into trouble. The paradigmof programming by demonstration (pbd) provides a feasible framework for the particular kind of dialog required in such situations in which both user and agent use their individual capabilities not only to complement each other in order to overcome the current problem; instead the objective is to extend the agent’s skills, thus enabling him to successfully deal with a whole class of problems and avoiding similar difficulties-- and thus, additional training effort--for the future.