Many software products are used by people with a wide variety of demands and useage patterns. Off-the-shelf software cannot be optimal for everyone, so it is usually configured for a hypothetical typical user. With varied users or changing patterns, this may in fact diminish most users' productivity and quality of work.
We propose a novel form of software adaptation through learning: agent-based extensions dynamically adapting the software environment in response to a user's actions and circumstances. A "learning apprentice" learns how to carry out a particular task by observing user interaction with the software. The apprentice can then suggest the action in similar circumstances. Because it learns, the system adjusts to changes in the user's behavior or situation. Machine learning techniques will help automate this task to keep its cost low.