Observed since 21 Oct, 10:03 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
aibox-cli
Container-Based Multi-AI Development Environment
╔═══════════════════════════════════════════════════════════════╗
║ ║
║ █████╗ ██╗ ██████╗ █████╗ ██╗ ██╗ ║
║ ██╔══██╗██║ ██╔══██╗██╔══██╗░╚██╗██╔╝ ║
║ ███████║██║ ██████╔╝██║░░██║░░╚███╔╝░ ║
║ ██╔══██║██║ ██╔══██╗██║░░██║░░██╔██╗░ ║
║ ██║░░██║██║ ██████╔╝╚█████╔╝ ██╔╝╚██╗ ║
║ ╚═╝░░╚═╝╚═╝ ╚═════╝░░╚════╝░ ╚═╝░░╚═╝ ║
║ ║
║ Container-Based Multi-AI Development Environment ║
║ ║
╚═══════════════════════════════════════════════════════════════╝
Container-Based Multi-AI Development Environment
Multi-AI development environment with Python-based tooling, comprehensive testing, and beautiful CLI.
Documentation | Configuration | Architecture | Agents Guide
--auto-delete# Install aibox
pip install aibox-cli
# or with uv (recommended)
uv pip install aibox-cli
# Navigate to your project
cd my-project
# Initialize the project (select profiles and versions)
aibox init
# Start AI development environment (interactive slot/provider wizard)
aibox start
New to aibox? See the Getting Started Guide for detailed instructions.
# Recommended: use uv
uv pip install aibox-cli
# Or use pip
pip install aibox-cli
# Verify installation
aibox --version
git clone https://github.com/fogXploit/aibox.git
cd aibox
uv pip install -e ".[dev]"
See Getting Started for detailed installation instructions.
aibox supports shell autocomplete for Bash, Zsh, Fish, and PowerShell. Once enabled, you can press TAB to autocomplete.
# Install completion for your shell
aibox --install-completion
# Restart your terminal
# Then try it out:
aibox profile info <TAB> # Shows: go nodejs python rust python:3.11 ...
aibox start --slot <TAB> # Shows configured slot numbers
Note: If autocomplete doesn't work after installation, ensure you've restarted your terminal or sourced your shell configuration file (e.g., source ~/.bashrc or source ~/.zshrc).
# Initialize project and select profiles
aibox init
# Start AI environment (interactive provider + slot wizard)
aibox start
# Reuse a specific slot (preserves container state)
aibox start --slot 2
# One-off session (stop and remove container on exit)
aibox start --auto-delete
# Slots
aibox slot list
aibox slot add # pick slot + provider by number
aibox slot cleanup # remove stopped slot containers and slot configs
# Profiles
aibox profile list
aibox profile info python
# Config
aibox config show
aibox config validate
aibox config edit
# Status
aibox status
See Getting Started for workflow examples.
--slot to keep
your tools and filesystem state.--auto-delete for a
one-off session (container is removed when the CLI exits).aibox start --slot <n> --resume to launch codex resume (slot must already have a
Codex session); omit --resume to start a fresh Codex session in that slot.Built-in profiles:
python:3.11|3.12|3.13 - Python with uv package managernodejs:20 - Node.js with npm global configuredgo:1.21|1.22|1.23 - Go with modulesrust:stable|beta|nightly|1.75|1.76|1.77 - Rust with cargo/rustfmt/clippysudo:1 - Passwordless sudo for the aibox usergit:latest - Git clientaibox/profiles/definitions/*.yml; customize or add your own as needed.
TODO: More will be added# Clone repository
git clone https://github.com/fogXploit/aibox.git
cd aibox
# Install with dev dependencies
uv pip install -e ".[dev]"
# Install pre-commit hooks
pre-commit install
# All tests
pytest
# Unit tests only
pytest tests/unit
# With coverage
pytest --cov=aibox --cov-report=html
# Lint and format
ruff check aibox/
ruff format aibox/
# Type checking
mypy aibox/
# Run all checks
pre-commit run --all-files
aibox/
├── cli/ # CLI commands (Typer)
├── providers/ # AI provider implementations
├── containers/ # Docker management (Docker SDK)
├── profiles/ # Profile system (YAML-based)
├── config/ # Configuration (Pydantic models)
└── utils/ # Utilities (logging, errors)
See ARCHITECTURE.md for details.
Contributions welcome! See CONTRIBUTING.md for guidelines.
aibox/profiles/definitions/myprofile.ymltests/unit/test_profiles.py# Install Docker Desktop
# https://docs.docker.com/get-docker/
# Gemini uses OAuth. When you add a Gemini slot, aibox runs a short-lived
# host-network container to execute `gemini login` so the random callback port works.
# Follow the printed URL in your browser; the session is stored under the slot's .gemini/ directory.
# OpenAI Codex also uses OAuth. aibox now runs a short-lived host-network container
# to execute `codex login` when a slot needs authentication, so the main container
# doesn't keep a lingering 1455 port binding. The session is stored under the slot's
# .codex/ directory.
# Claude and OpenAI use OAuth - no API keys needed
# If authentication fails:
# 1. Ensure Docker ports are accessible (54545 for Claude, 1455 for Codex)
# 2. Check your browser isn't blocking popups
# 3. Try running the CLI inside the container again - it will re-prompt
# Add user to docker group (Linux)
sudo usermod -aG docker $USER
# Log out and back in
MIT License - see LICENSE for details.
Built with ❤️ for AI-powered development
Download counts and popularity will appear here as the collector receives them.
| Package / target | Requirement | Relationship |
|---|---|---|
dockerEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | docker>=7.0.0 | runtime |
httpxEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | httpx>=0.27.0 | runtime |
pydanticEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | pydantic>=2.6.0 | runtime |
pyyamlEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | pyyaml>=6.0.1 | runtime |
questionaryEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | questionary>=2.0.0 | runtime |
richEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | rich>=13.7.0 | runtime |
typerEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | typer>=0.12.0 | runtime |
mypyEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | mypy>=1.8.0; extra == "dev" | runtime |
pre-commitEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | pre-commit>=3.6.0; extra == "dev" | runtime |
pytest-covEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | pytest-cov>=4.1.0; extra == "dev" | runtime |
pytest-dockerEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | pytest-docker>=3.1.0; extra == "dev" | runtime |
pytest-mockEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | pytest-mock>=3.12.0; extra == "dev" | runtime |
pytestEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | pytest>=8.0.0; extra == "dev" | runtime |
ruffEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | ruff>=0.2.0; extra == "dev" | runtime |
types-pyyamlEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | types-pyyaml>=6.0.0; extra == "dev" | runtime |
bdist_wheel · 70.45 KB · Python py3
sdist · 102.44 KB · Python source
Observed since 21 Oct, 10:03 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package_version:aa5c19cb4991655139337155efaa296ae48d9881d1fb409e8beab62dbb7414ed