To create a command, make a new object that derives from
bzrlib.commands.Command, and name it cmd_foo, where foo is the name of
your command. If you create a command whose name contains an underscore,
it will appear in the UI with the underscore turned into a hyphen. For
example, cmd_baz_import will appear as baz-import. For examples of how
to write commands, please see builtins.py.

Once you’ve created a command you must register the command with
bzrlib.commands.register_command(cmd_foo). You must register the
command when your file is imported, otherwise bzr will not see it.

Bzr will scan ~/.bazaar/plugins and bzrlib/plugins for plugins
by default. You can override this with BZR_PLUGIN_PATH
(see User Reference for details).

Plugins may be either modules or packages. If your plugin is a single
file, you can structure it as a module. If it has multiple files, or if
you want to distribute it as a bzr branch, you should structure it as a
package, i.e. a directory with an __init__.py file.