Launch AI coding tools and local LLMs in Docker containers
Project description
augint-shell
Launch AI coding tools (Claude Code, Codex, opencode, aider) and local LLMs (Ollama, Open WebUI, Kokoro TTS, Speaches STT) in per-project Docker containers.
Pipeline Artifacts
Reports are published to GitHub Pages on every push to
main.
| Report | Link |
|---|---|
| API docs | svange.github.io/augint-shell/ai_shell.html |
| Test coverage | svange.github.io/augint-shell/coverage/htmlcov/ |
| Test results | svange.github.io/augint-shell/coverage/test-report.html |
| Security scans | svange.github.io/augint-shell/security/ |
| License compliance | svange.github.io/augint-shell/compliance/ |
| PyPI package | pypi.org/project/augint-shell/ |
What This Does
ai-shell is a Python CLI that stands up:
- Per-project dev containers (
augint-shell-{project}-dev) -- one per repo, runs Claude Code, Codex, opencode, or aider with your project mounted, SSH keys, AWS creds, and tool configs wired in. - Host-level LLM stack (shared singletons) -- Ollama, Open WebUI, Kokoro TTS, Speaches STT, a Pipecat voice agent, and n8n on a common Docker network. GPU auto-detected.
One command replaces the old Makefile + docker-compose.yml workflow.
Getting Started
This project uses AI-assisted development. You do not need to memorize git commands or CI configuration -- your AI agent handles that.
Prerequisites
- Docker
- Python >= 3.12
- (Optional) NVIDIA GPU + drivers for local LLM acceleration
First-time setup
pip install augint-shell
# or: uv add --dev augint-shell
Running locally
# Launch Claude Code in the current project
ai-shell claude
# Launch with extra args
ai-shell claude -- --debug
# Set up local LLM stack (first time)
ai-shell llm setup
# Launch opencode with local LLM
ai-shell opencode
How to Contribute
Contributions are made through AI agents (Claude Code, Copilot, etc.). You describe what you want changed in plain language; the agent handles branching, coding, testing, and submitting a pull request.
- Open Claude Code (or your AI agent) in this repo.
- Describe the change you want -- a bug fix, a new feature, a doc update.
- The agent will:
- Create a feature branch
- Make the changes
- Run pre-commit checks and tests
- Open a pull request
- Review the PR when the agent is done. CI runs automatically.
- Merge once CI is green.
If you need to work manually, see the full contributor guide (if available).
Commands
AI Tools
| Command | Description |
|---|---|
ai-shell claude |
Launch Claude Code |
ai-shell claude-x |
Claude Code with skip-permissions |
ai-shell codex |
Launch Codex |
ai-shell opencode |
Launch opencode |
ai-shell aider |
Launch aider with local LLM |
ai-shell shell [bash|zsh|fish] |
Interactive shell in dev container |
LLM Stack
| Command | Description |
|---|---|
ai-shell llm up |
Start Ollama (add --webui, --whisper, --voice-agent, --n8n, --image-gen, or --all) |
ai-shell llm down |
Stop LLM stack |
ai-shell llm pull |
Pull configured models |
ai-shell llm models |
Browse curated model catalog |
ai-shell llm unload [MODEL] |
Unload models from VRAM |
ai-shell llm setup |
First-time setup (up + pull + configure) |
ai-shell llm status |
Show status and available models |
ai-shell llm logs |
Tail LLM stack logs |
ai-shell llm shell |
Shell into Ollama container |
Container Management
| Command | Description |
|---|---|
ai-shell manage status |
Show dev container status |
ai-shell manage stop |
Stop dev container |
ai-shell manage clean |
Remove container and volumes |
ai-shell manage logs |
Tail dev container logs |
ai-shell manage pull |
Pull latest Docker image |
ai-shell manage env [--aws] |
Show resolved environment variables |
Configuration
Optional .ai-shell.yaml in your project root (YAML default, TOML also accepted). Run ai-shell init for the full template.
container:
image: svange/augint-shell
image_tag: latest
extra_env:
MY_VAR: value
dev_ports: [3000, 4200, 5000, 5173, 5678, 8000, 8080, 8888]
extra_ports: []
openai:
profile: work # resolves OPENAI_API_KEY_WORK from .env
llm:
primary_chat_model: qwen3.5:27b
secondary_chat_model: huihui_ai/qwen3.5-abliterated:27b
primary_coding_model: qwen3-coder:30b-a3b-q4_K_M
secondary_coding_model: huihui_ai/qwen3-coder-abliterated:30b-a3b-instruct-q4_K_M
context_size: 32768
ollama_port: 11434
webui_port: 3000
comfyui_port: 8188
extra_models: []
Global config at ~/.ai-shell.yaml or ~/.config/ai-shell/config.yaml also supported.
Local LLM stack
Four role-specific model slots, each sized for an RTX 4090 (24 GiB VRAM). All four defaults together total ~74 GB on disk.
| Slot | Default | Size | Role | Routed to |
|---|---|---|---|---|
primary_chat_model |
qwen3.5:27b |
17 GB | Best chat model that fits a 4090 | Open WebUI default |
secondary_chat_model |
huihui_ai/qwen3.5-abliterated:27b |
17 GB | Best uncensored chat (abliterated Qwen3.5) | Open WebUI (selectable) |
primary_coding_model |
qwen3-coder:30b-a3b-q4_K_M |
19 GB | Best agentic coder with explicit Ollama tools badge | opencode / aider default |
secondary_coding_model |
huihui_ai/qwen3-coder-abliterated:30b-a3b-instruct-q4_K_M |
19 GB | Best uncensored coder | opencode (selectable) |
Optional stacks (not auto-started; opt-in with ai-shell llm up --<flag> or --all):
| Flag | Service | Port | Notes |
|---|---|---|---|
--webui |
Open WebUI | 3000 | Implies --voice so Kokoro is wired as "read aloud" backend. Use --no-voice to skip. |
--voice |
Kokoro TTS | 8880 | OpenAI-compatible /v1/audio/speech |
--whisper |
Speaches STT | 8001 | OpenAI-compatible /v1/audio/transcriptions. GPU image auto-used when NVIDIA is detected |
--voice-agent |
Pipecat voice agent | 8010 | Push-to-talk PWA (Speaches -> Ollama -> Kokoro). See VOICE_AGENT_PLAN.md |
--image-gen |
ComfyUI | 8188 | GPU image generation. Wires into WebUI when combined with --webui |
--n8n |
n8n | 5678 | Workflow automation |
OpenAI multi-account switching (--openai-profile)
Codex and opencode support switching between multiple OpenAI accounts via named profiles in .env:
# .env
OPENAI_API_KEY_WORK=sk-proj-...
OPENAI_ORG_ID_WORK=org-...
OPENAI_API_KEY_PERSONAL=sk-proj-...
ai-shell codex --openai-profile work
ai-shell opencode --openai-profile personal
Set a default in config (openai.profile: work) or via AI_SHELL_OPENAI_PROFILE=work.
Attaching to Windows Chrome (--local-chrome)
ai-shell claude --local-chrome bridges Claude inside the container to your real Chrome on Windows via the Chrome DevTools Protocol (using chrome-devtools-mcp). Unblocks OAuth popups, CAPTCHA pages, and "click around in a logged-in site" tasks.
- Claude drives Chrome tabs on your Windows desktop in real time.
- Separate Chrome profile per project -- your normal browsing untouched, each repo keeps its own logged-in state.
- All traffic stays on
localhost.
Set [claude] local_chrome = true in ai-shell.toml (or AI_SHELL_LOCAL_CHROME=1) to persist.
Requirements
- Docker
- Python >= 3.12
- (Optional) NVIDIA GPU for local LLM acceleration
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file augint_shell-0.94.0.tar.gz.
File metadata
- Download URL: augint_shell-0.94.0.tar.gz
- Upload date:
- Size: 75.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
34dad39db17ea23cb828bee0e9434ee1aea34f17264c127b05143730bc14a392
|
|
| MD5 |
25d814a2a5e2ae0c532a93443b647fa1
|
|
| BLAKE2b-256 |
910a280fdfce1a94f1ba8412b293ea6fcaa18fd6adda642d24b4a501f13d0d27
|
Provenance
The following attestation bundles were made for augint_shell-0.94.0.tar.gz:
Publisher:
publish.yaml on svange/augint-shell
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
augint_shell-0.94.0.tar.gz -
Subject digest:
34dad39db17ea23cb828bee0e9434ee1aea34f17264c127b05143730bc14a392 - Sigstore transparency entry: 1397944565
- Sigstore integration time:
-
Permalink:
svange/augint-shell@40d2e2774ab644b8e24c80d550640ea8b7f38c75 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/svange
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yaml@40d2e2774ab644b8e24c80d550640ea8b7f38c75 -
Trigger Event:
push
-
Statement type:
File details
Details for the file augint_shell-0.94.0-py3-none-any.whl.
File metadata
- Download URL: augint_shell-0.94.0-py3-none-any.whl
- Upload date:
- Size: 88.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
adab6453b6c9326bd825cb2e0eab1104d7be3f803025827a4bab98e494b7b5dd
|
|
| MD5 |
0e3b51e4cc678930f10ad113a8887b1c
|
|
| BLAKE2b-256 |
9634ba7e17e0c8276fb4302b3f7a7dcb00672986c682bab1e7f05db9ba959171
|
Provenance
The following attestation bundles were made for augint_shell-0.94.0-py3-none-any.whl:
Publisher:
publish.yaml on svange/augint-shell
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
augint_shell-0.94.0-py3-none-any.whl -
Subject digest:
adab6453b6c9326bd825cb2e0eab1104d7be3f803025827a4bab98e494b7b5dd - Sigstore transparency entry: 1397944571
- Sigstore integration time:
-
Permalink:
svange/augint-shell@40d2e2774ab644b8e24c80d550640ea8b7f38c75 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/svange
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yaml@40d2e2774ab644b8e24c80d550640ea8b7f38c75 -
Trigger Event:
push
-
Statement type: