{"id":19096659,"url":"https://github.com/stavarengo/mob-tool","last_synced_at":"2026-03-04T00:37:56.662Z","repository":{"id":65939251,"uuid":"593618836","full_name":"stavarengo/mob-tool","owner":"stavarengo","description":"Mob-Tool (mobt) is a command-line tool for remote teams to manage mob programming sessions. It simplifies Git commands, controls the timer, and switches driver roles. The tool logs all Git commands and rolls them back if errors occur.","archived":false,"fork":false,"pushed_at":"2025-05-23T14:45:59.000Z","size":340,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-12T18:55:35.674Z","etag":null,"topics":["cli-tool","mob","mob-programming","mob-programming-timer","remote-mob-programming","remote-mobs","timer"],"latest_commit_sha":null,"homepage":"https://pypi.org/project/mob-tool/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/stavarengo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-01-26T13:12:27.000Z","updated_at":"2025-05-23T14:46:03.000Z","dependencies_parsed_at":"2024-11-09T03:37:28.559Z","dependency_job_id":"34970ca1-994a-4692-8f96-60ae4cfc15a4","html_url":"https://github.com/stavarengo/mob-tool","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/stavarengo/mob-tool","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stavarengo%2Fmob-tool","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stavarengo%2Fmob-tool/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stavarengo%2Fmob-tool/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stavarengo%2Fmob-tool/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stavarengo","download_url":"https://codeload.github.com/stavarengo/mob-tool/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stavarengo%2Fmob-tool/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30067732,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-03T18:21:05.932Z","status":"ssl_error","status_checked_at":"2026-03-03T18:20:59.341Z","response_time":61,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli-tool","mob","mob-programming","mob-programming-timer","remote-mob-programming","remote-mobs","timer"],"created_at":"2024-11-09T03:37:25.420Z","updated_at":"2026-03-04T00:37:56.648Z","avatar_url":"https://github.com/stavarengo.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Mob-Tool: `mobt`\n\nMob-Tool is a command-line tool designed to facilitate mob programming sessions for remote teams. The tool provides\nseveral features to help teams manage their sessions, including controlling the timer, switching the driver\nrole among team members, and simplifying the necessary Git commands to hand over the work to the next team member.\n\n\u003e Mob programming is a software development approach where a team of developers works together on the same task at the\n\u003e same time.\n\n## What changes does the tool make to the repository?\n\n- **No changes are made in the `main` branch:** All changes are made in a new feature branch, and you can choose the\n  name of the branch when you start the mob session.\n- **All Git commands executed by the tool are logged in the output:** This way, the team can easily see what changes are\n  being made to their repository.\n- **All commands are rolled back if any error occurs:** The commands to rollback are also logged in the output.\n\n## Installation\n\n```shell\npip install mob-tool\n```\n\n**Important!**\n\u003e Please note that some operating systems might be equipped with the `python3` and `pip3` commands instead of `python`\n\u003e and `pip` (but they should be equivalent). If you don’t have `pip` or `pip3` available in your system, please check\n\u003e out [pip installation docs](https://pip.pypa.io/en/latest/installation/).\n\n## Usage\n\n### Starting a new session\n\nTo start a new session, use the following command:\n\n```shell\nmobt start \u003cbranch-name\u003e\n```\n\nHere's an example of the output of the `start` command:\n\n![Example of mobt start output](https://raw.githubusercontent.com/stavarengo/mob-tool/main/docs/start-output.png)\n\n### Handing over to the next driver\n\nWhen your time is up, pass the driver role to the next team member with the following command:\n\n```shell\nmobt next\n```\n\nHere's an example of the output of the `next` command:\n\n![Example of mobt next output](https://raw.githubusercontent.com/stavarengo/mob-tool/main/docs/next-output.png)\n\nNote that you must call `mob next` even if you didn't make any changes in the code, so the Mob-Tool can manage whose\nturn is next.\n\nThe next driver (in this example, Erik) can start working by running the same `mobt start \u003cbranch-name\u003e` command.\n\n### Finishing the session when the feature is done\n\nWhen your feature is ready, you can end the current mob session using the `mobt done` command. This command finalizes the work by squashing all commits into a single one, pushing the changes to the remote repository, and removing the mob session file to clean up the session.\n\n```shell\nmobt done [branch_name] [--message | -m \u003c\"commit message\"\u003e] [--do-not-try-to-rebase]\n```\n\n- `branch_name` (optional): The name of the branch to process. If not provided, the command defaults to the current mob session branch.\n- `--message` / `-m \u003c\"commit message\"\u003e` (optional): Allows you to specify a custom message for the squashed commit. If omitted, a default commit message will be generated.\n- `--do-not-try-to-rebase` (optional): Use this option to prevent the command from attempting to rebase changes onto the main branch before squashing.\n\nAll Git hooks are executed for this final commit, ensuring that your codebase integrity is maintained. Note that Git hooks are always ignored during the `start` and `next` commands.\n\nHere's an example of the output of the `done` command:\n\n![Example of mobt done output](https://raw.githubusercontent.com/stavarengo/mob-tool/main/docs/done-output.png)\n\n### Squashing commits with `mobt squash`\n\nThe `mobt squash` command squashes all commits in the current mob session branch or a specified branch. This is useful when you want to combine all the work done during a mob session into a single, clean commit.\n\n```shell\nmobt squash [branch_name] [--push | -p] [--message | -m \u003c\"commit message\"\u003e] [--do-not-try-to-rebase]\n```\n\n- `branch_name` (optional): The name of the branch to squash. If not provided, the current mob session branch will be used.\n- `--push` / `-p` (optional): Force push the squashed commit to the remote repository.\n- `--message` / `-m \u003c\"commit message\"\u003e` (optional): Provides a custom message for the squashed commit. If not provided, a default message will be generated.\n- `--do-not-try-to-rebase` (optional): Disables the default behavior of attempting to rebase changes on top of the main branch before squashing.\n\nGit hooks are executed for the final squashed commit.\n\n### Saving changes with `mobt wip_commit`\n\nThe `mobt wip_commit` command creates a \"Work In Progress\" (WIP) commit with all your current local changes and pushes it to the remote repository. This is particularly useful for saving your work without formally passing the driver role or when you need to share your changes with the team quickly.\n\n```shell\nmobt wip_commit\n```\n\nThis command helps ensure that no work is lost and that all changes are versioned, even if they are not yet ready to be merged.\n\n## Development Setup\n\nTo set up the development environment, follow these steps:\n- Clone the repository\n- Create a virtual environment with `python -m venv venv`.\n- Install the app from the local repository with `pip install -e .`\n\ne.g.:\n```\nrm -rfv venv\npython -m venv venv\nsource ./venv/bin/activate\npip install -e .\n```\n\n## FAQ\n\n### What happens if one of the Git commands fails?\n\nIf one of the Git commands fails, all changes made to the repository are rolled back. Here's an example of the output\nwith a rollback in action:\n\n![Example of output with rollback](https://raw.githubusercontent.com/stavarengo/mob-tool/main/docs/rollback-example.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstavarengo%2Fmob-tool","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstavarengo%2Fmob-tool","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstavarengo%2Fmob-tool/lists"}