devs - DevContainer Management Tool
A Python command-line tool that simplifies managing multiple named devcontainers for any project.
Features
- Multiple Named Containers: Start multiple devcontainers with custom names (e.g., "sally", "bob", "charlie")
- VS Code Integration: Open containers in separate VS Code windows with clear titles
- Project Isolation: Containers are prefixed with git repository names (org-repo format)
- Environment Variable Management: Layered DEVS.yml configuration with user-specific overrides
- Shared Authentication: Claude credentials are shared between containers for the same project
- Cross-Platform: Works on any project with devcontainer configuration
Installation
pip install devs
Usage
# Start development environments
devs start frontend backend
# Open both in VS Code (separate windows)
devs vscode frontend backend
# Work in a specific container
devs shell frontend
# Run Claude in a container
devs claude frontend "Summarize this codebase"
# Run tests in a container
devs runtests frontend
# Environment variables support
devs start frontend --env DEBUG=true --env API_URL=http://localhost:3000
devs claude frontend "Fix the tests" --env NODE_ENV=test
# Set up Claude authentication (once per host)
devs claude --auth
# Or with API key
devs claude --auth --api-key <YOUR_API_KEY>
# Clean up when done
devs stop frontend backend
# List active containers
devs list
Configuration
Environment Variables
devs supports layered environment variable configuration through DEVS.yml files:
Priority order (highest to lowest):
- CLI
--envflags ~/.devs/envs/{org-repo}/DEVS.yml(user-specific project overrides)~/.devs/envs/default/DEVS.yml(user defaults){project-root}/DEVS.yml(repository configuration)
Example DEVS.yml in your project:
env_vars:
default:
NODE_ENV: development
API_URL: https://api.example.com
DEBUG: "false"
frontend: # Container-specific overrides
DEBUG: "true"
FRONTEND_PORT: "3000"
backend:
NODE_ENV: production
API_URL: https://prod-api.example.com
User-specific configuration:
# Global user defaults
mkdir -p ~/.devs/envs/default
echo 'env_vars:
default:
GLOBAL_SETTING: "user_preference"
MY_SECRET: "user_secret"' > ~/.devs/envs/default/DEVS.yml
# Project-specific overrides (org-repo format)
mkdir -p ~/.devs/envs/myorg-myproject
echo 'env_vars:
frontend:
DEBUG: "true"
LOCAL_SECRET: "dev_secret"' > ~/.devs/envs/myorg-myproject/DEVS.yml
📖 See ../../example-usage.md for detailed examples and scenarios
Requirements
- Docker: Container runtime
- VS Code: With
codecommand in PATH - DevContainer CLI:
npm install -g @devcontainers/cli - Project Requirements:
.devcontainer/devcontainer.jsonin target projects
Architecture
Container Naming
Containers follow the pattern: dev-<org>-<repo>-<dev-name>
Example: dev-ideonate-devs-sally, dev-ideonate-devs-bob
VS Code Window Management
Each container gets unique workspace paths to ensure VS Code treats them as separate sessions.
Claude Authentication Sharing
The tool creates symlinks so all containers for the same project share Claude authentication.
Development
# Clone repository
git clone https://github.com/ideonate/devs.git
cd devs/python-devs
# Install in development mode
pip install -e ".[dev]"
# Run tests
pytest
# Format code
black devs tests
# Type checking
mypy devs
License
MIT License
Metadata
Release files for devs-cli 5.0.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| devs_cli-5.0.2.tar.gz | 39.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| devs_cli-5.0.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 59.6 kB
Release files / devs_cli-5.0.2.tar.gz
| Download URL | devs_cli-5.0.2.tar.gz |
|---|---|
| Size | 39.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
175fc84f2cdd3d3997818e7a84dfe04cf276aeede01ac911dd85ba7042cbc74a
|
|
BLAKE2b-256 checksum How to use checksums |
9bbfb07748149e2c30ccbb2e723baeb426babebea53043bdd26c383156310248
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 27, 2026.
Transparency logRelease files / devs_cli-5.0.2-py3-none-any.whl
| Download URL | devs_cli-5.0.2-py3-none-any.whl |
|---|---|
| Size | 20.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8c82b7b47e1dc8c806c514db7ed9122d7769a763d386e488195c2a14edcd3f8c
|
|
BLAKE2b-256 checksum How to use checksums |
51da6ddaaedaf2461638ac1a2e9e5e24a1c193b7270f34f1d43f288f27d686c9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 27, 2026.
Transparency log