Mobius runs a coding agent against one objective until the agent reports completion and your project checks pass.
Mobius is a Python command-line tool. It works with Codex, Claude Code, Gemini CLI, and custom local commands. It does not provide an agent or model of its own.
- Python 3.10 or later
- A supported coding-agent CLI installed and authenticated
- A project with one or more useful validation commands
The PyPI distribution is named mobius-agent. The installed command is mobius.
Using pipx:
pipx install mobius-agentUsing uv:
uv tool install mobius-agentUsing pip in an active virtual environment:
python -m pip install mobius-agentThe package must be published to PyPI before these public install commands work. For local development, see Development.
Run these commands from the project that the agent should modify:
mobius init
mobius doctor
mobius run "Fix the failing checkout tests"mobius init creates mobius.config.json and adds .mobius/ to .gitignore. Review the generated validation command before starting a run.
Mobius accepts an iteration as complete only when all of these conditions are true:
- The agent process exits successfully.
- The agent prints the configured completion signal on its own line.
- Every validation command exits with status code 0.
If validation fails, Mobius includes the output in the next agent prompt. A process failure or timeout stops the run. An unfinished run can be resumed later.
| Command | Description |
|---|---|
mobius init |
Create project configuration. |
mobius doctor |
Check Python, agent commands, and validation settings. |
mobius run <objective> |
Start a run. |
mobius resume [run-id] |
Continue the latest run or a selected run. |
mobius status [run-id] |
Show one run and its latest validation result. |
mobius runs |
List recent runs. |
Run mobius --help or mobius <command> --help for all options.
Example mobius.config.json:
{
"$schema": "https://raw.githubusercontent.com/satwiksps/mobius/main/mobius.config.schema.json",
"agent": "codex",
"maxIterations": 8,
"timeoutMinutes": 30,
"completionSignal": "<mobius>DONE</mobius>",
"validation": [
"python -m pytest",
"python -m ruff check ."
],
"agents": {}
}| Setting | Description |
|---|---|
agent |
Built-in or custom adapter name. |
maxIterations |
Total iteration limit, from 1 to 100. |
timeoutMinutes |
Timeout for each agent and validation process. |
completionSignal |
Exact line the agent prints when work is complete. |
validation |
Shell commands that must all pass. |
agents |
Custom command adapters. |
Command-line options override the file for one run:
mobius run "Add request cancellation" \
--agent claude \
--max 5 \
--check "python -m pytest" \
--check "python -m ruff check ."Preview the first prompt without launching an agent or writing run state:
mobius run "Upgrade the API client" --dry-runAdd an entry under agents. Use {prompt} in an argument to place the prompt there. If {prompt} is absent, Mobius sends the prompt through stdin.
{
"agent": "aider",
"agents": {
"aider": {
"command": "aider",
"args": ["--message", "{prompt}"]
},
"internal": {
"command": "company-agent",
"args": ["run", "--stdin"]
}
}
}Built-in adapters use stdin so objectives are not exposed in the operating-system process list.
Run state is stored as JSON under .mobius/runs/. Mobius does not send telemetry or upload this state.
Agent commands run with the current user's permissions. Validation entries are shell commands. Review mobius.config.json before running Mobius in an untrusted repository. Do not include secrets in objectives because prompts and selected output are stored in run history.
See SECURITY.md for the reporting process and security model.
git clone https://github.com/satwiksps/mobius.git
cd mobius
python -m venv .venvActivate the environment, then install and verify the project:
python -m pip install --upgrade pip
python -m pip install -e ".[dev]"
python -m ruff check .
python -m pytest --cov=mobius
python -m build
python -m twine check dist/*Preview the website:
python scripts/serve_site.pyOpen http://127.0.0.1:4173.
The root vercel.json publishes the static site/ directory. No build command or environment variable is required.
- Push the repository to GitHub.
- Open Vercel New Project.
- Import
satwiksps/mobius. - Keep the repository root as the Root Directory.
- Select
Otheras the Framework Preset if prompted. - Deploy the project.
For deployment from a terminal:
npm install --global vercel
vercel
vercel --prodThe Vercel CLI creates .vercel/, which is ignored by this repository.
The release workflow builds a source distribution and wheel, checks both artifacts, and publishes through PyPI Trusted Publishing. Configure the pypi environment and a trusted publisher for:
- PyPI project:
mobius-agent - GitHub owner:
satwiksps - Repository:
mobius - Workflow:
release.yml - Environment:
pypi
Publishing a GitHub release then starts the workflow.
Mobius is licensed under the Apache License 2.0.