A bot is an automated program that carries out repetitive tasks that would be tedious to do manually. Most bots are limited in the scope of their operations and concentrate on cleaning up in a specific area. Some bots run on the Tool Labs while others run on their operator's computer.

All bots running on Wikimedia Commons must have advance permission to do so. Permission is needed whether or not the bot requires a bot flag.

Permission will be granted only in respect of the tasks that are listed in the bot request (tasks can be fairly general such as "uploading images" or "making localization changes to the Information template"). Bots must not be used to carry out different tasks for which permission has not been granted. Of course, bot operators are not expected to re-apply every time they want to implement a small alteration, but if the bot's functionality has been changed to carry out some significant new task then a new request should be filed. To request permission to run a bot, please go to Commons:Bots/Requests.

Bots must be run from a separate user account from that used for general editing by the bot operator. In order to identify the account as a bot account, the username should normally include the word "Bot".

The contributions of a bot account remain the responsibility of its operator, who must be prominently identifiable on its user page. Upload bots are expected to supply correct licensing information and categorisation (each file must belong to at least one category that describes its content or function). The bot operator is responsible for the prompt repair of any damage caused by a bot which operates incorrectly. Bot operators must ensure that they make themselves available for dealing with user queries relating to the bot, and that they promptly fix any identified bugs.

Bot accounts should not be used for contributions that do not fall within the scope of the bot's designated tasks. In particular, bot operators should not use a bot account to respond to messages related to the bot. Bot operators may wish to redirect a bot account's discussion page to their own.

Semi-automated tools (eg Javascript tools) are not normally considered to be bots and do not require a separate account, but some users choose to use a separate account for non-bot but high-speed editing.

The bot's user page should identify the bot as such, preferably using the {{bot}} template. The following information should be clearly provided on that page, or on a page linked to it. Please make sure you have listed all this information before requesting bot permission.

Who the creator/operator is and how they can best be contacted

Details of the bot's task or tasks

Whether the bot is manually assisted or runs automatically

When it operates (continuously, intermittently, or at specified intervals)

Bot operators should recognize that a bot making many requests or editing at a high speed has a much greater effect than the average contributor. Bots should therefore be conservative in their editing speed. A bot carrying out non-urgent tasks should not edit more frequently than once every 5 seconds. Bots carrying out urgent tasks, such as reverting vandalism, may edit faster. Unflagged bots should edit more slowly than flagged bots as their edits are visible in watchlists, and high-speed editing will swamp other users' lists.

Some but not all bots may be flagged with the bot flag. The effect of the flag is to hide bot edits from user watchlists, recent changes and new images lists. This prevents these lists from being swamped by bot edits, particularly where the bot makes large numbers of edits and/or uploads over a limited period. The bot flag can be removed as a result of inactivity.

The bot flag is effectively a statement of community trust, and confirms that the bot's edits are not likely to need manual checking.

Any admin may block a bot – without the autoblock option set – that is misbehaving if the operator is not immediately available to deal with the issue. In principle, an unapproved bot may be blocked, though in practice unless the bot is doing harm the operator should normally be asked to submit a retrospective bot request. If it is noticed that a bot is being used for tasks which are significantly different from those specified in the original bot request, the bot operator should be asked to make a fresh bot request which specifies the new tasks.

If you're uploading using your bot or offer your bot to third parties for uploading, by default, you will receive notifications about deletion requests etc. at your bot's talk page, or if you redirected this talk page to your user page, you'll receive them at your user page. If the third party should receive these messages or no messages should be sent to your bot's talk page at all, please list your bot accordingly at MediaWiki:Gadget-libCommons.js or ask someone to do so using {{Edit request}}at the talk page and link back to this paragraph: [[Commons:Bots#Notifications to upload bots]].

Bots can be written in almost any programming language. The choice of a language often depends on the experience of the bot writer, which languages s/he is familiar with, or on the availability of pre-developed libraries to perform the desired task. The following list includes several libraries to assist with bot tasks.