DevContainer Management Tool - Manage multiple named devcontainers for any project
Project description
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
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 devs_cli-2.0.1.tar.gz.
File metadata
- Download URL: devs_cli-2.0.1.tar.gz
- Upload date:
- Size: 32.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
193bf888d7dffad037eb222a520eccfa5cbc9069a9a2d3e792de089a985fe9d5
|
|
| MD5 |
ce9b6374259f3e53fac88a4c39ab7e4b
|
|
| BLAKE2b-256 |
9936f171275aa73a9d11b41ea986cad80907c1c4b98b3c31d7694d5a3defc35f
|
Provenance
The following attestation bundles were made for devs_cli-2.0.1.tar.gz:
Publisher:
bump-and-publish.yml on ideonate/devs
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
devs_cli-2.0.1.tar.gz -
Subject digest:
193bf888d7dffad037eb222a520eccfa5cbc9069a9a2d3e792de089a985fe9d5 - Sigstore transparency entry: 1017322053
- Sigstore integration time:
-
Permalink:
ideonate/devs@c9fcd290fb4f50cbca8f3f29060d57224a047893 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/ideonate
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
bump-and-publish.yml@c9fcd290fb4f50cbca8f3f29060d57224a047893 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file devs_cli-2.0.1-py3-none-any.whl.
File metadata
- Download URL: devs_cli-2.0.1-py3-none-any.whl
- Upload date:
- Size: 16.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
db6c1a3ecf48db3d12432028fa1be4bc91c0c73483a0e7a921c3de1c50ffd02f
|
|
| MD5 |
2a8ba488f4380996ec6afe452a9d5f6e
|
|
| BLAKE2b-256 |
3f59e2a4d5cf9de8125f159b3e44d7f56a2573d8b7894a547be704d24976f7a7
|
Provenance
The following attestation bundles were made for devs_cli-2.0.1-py3-none-any.whl:
Publisher:
bump-and-publish.yml on ideonate/devs
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
devs_cli-2.0.1-py3-none-any.whl -
Subject digest:
db6c1a3ecf48db3d12432028fa1be4bc91c0c73483a0e7a921c3de1c50ffd02f - Sigstore transparency entry: 1017322140
- Sigstore integration time:
-
Permalink:
ideonate/devs@c9fcd290fb4f50cbca8f3f29060d57224a047893 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/ideonate
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
bump-and-publish.yml@c9fcd290fb4f50cbca8f3f29060d57224a047893 -
Trigger Event:
workflow_dispatch
-
Statement type: