vibepod 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. vibepod-0.1.0/PKG-INFO +61 -0
  2. vibepod-0.1.0/PLAN.md +189 -0
  3. vibepod-0.1.0/README.md +43 -0
  4. vibepod-0.1.0/pyproject.toml +52 -0
  5. vibepod-0.1.0/specs/00-INDEX.md +202 -0
  6. vibepod-0.1.0/specs/01-OVERVIEW.md +157 -0
  7. vibepod-0.1.0/specs/02-CLI-COMMANDS.md +646 -0
  8. vibepod-0.1.0/specs/03-PROJECT-STRUCTURE.md +598 -0
  9. vibepod-0.1.0/specs/04-CONFIGURATION.md +602 -0
  10. vibepod-0.1.0/specs/05-DOCKER-INTEGRATION.md +604 -0
  11. vibepod-0.1.0/specs/06-LOGGING-DATASETTE.md +744 -0
  12. vibepod-0.1.0/specs/07-CICD-WORKFLOWS.md +511 -0
  13. vibepod-0.1.0/specs/08-INSTALLATION.md +672 -0
  14. vibepod-0.1.0/specs/09-README.md +230 -0
  15. vibepod-0.1.0/src/vibepod/__init__.py +3 -0
  16. vibepod-0.1.0/src/vibepod/cli.py +79 -0
  17. vibepod-0.1.0/src/vibepod/commands/__init__.py +1 -0
  18. vibepod-0.1.0/src/vibepod/commands/config.py +58 -0
  19. vibepod-0.1.0/src/vibepod/commands/list_cmd.py +67 -0
  20. vibepod-0.1.0/src/vibepod/commands/logs.py +43 -0
  21. vibepod-0.1.0/src/vibepod/commands/run.py +118 -0
  22. vibepod-0.1.0/src/vibepod/commands/stop.py +39 -0
  23. vibepod-0.1.0/src/vibepod/commands/update.py +41 -0
  24. vibepod-0.1.0/src/vibepod/constants.py +68 -0
  25. vibepod-0.1.0/src/vibepod/core/__init__.py +1 -0
  26. vibepod-0.1.0/src/vibepod/core/agents.py +108 -0
  27. vibepod-0.1.0/src/vibepod/core/config.py +149 -0
  28. vibepod-0.1.0/src/vibepod/core/docker.py +221 -0
  29. vibepod-0.1.0/src/vibepod/utils/__init__.py +1 -0
  30. vibepod-0.1.0/src/vibepod/utils/console.py +23 -0
  31. vibepod-0.1.0/tests/test_agents.py +24 -0
  32. vibepod-0.1.0/tests/test_cli.py +21 -0
  33. vibepod-0.1.0/tests/test_config.py +12 -0
vibepod-0.1.0/PKG-INFO ADDED
@@ -0,0 +1,61 @@
1
+ Metadata-Version: 2.4
2
+ Name: vibepod
3
+ Version: 0.1.0
4
+ Summary: One CLI for containerized AI coding agents
5
+ Author: VibePod
6
+ License: MIT
7
+ Requires-Python: >=3.10
8
+ Requires-Dist: docker>=7.0.0
9
+ Requires-Dist: platformdirs>=4.0.0
10
+ Requires-Dist: pyyaml>=6.0.0
11
+ Requires-Dist: rich>=13.0.0
12
+ Requires-Dist: typer>=0.12.0
13
+ Provides-Extra: dev
14
+ Requires-Dist: mypy>=1.11.0; extra == 'dev'
15
+ Requires-Dist: pytest>=8.0.0; extra == 'dev'
16
+ Requires-Dist: ruff>=0.6.0; extra == 'dev'
17
+ Description-Content-Type: text/markdown
18
+
19
+ # VibePod
20
+
21
+ VibePod is a unified CLI (`vp`) for running AI coding agents in Docker containers.
22
+
23
+ ## Current Status
24
+
25
+ This repository contains an initial v1 implementation with:
26
+
27
+ - `vp run <agent>`
28
+ - `vp stop <agent|--all>`
29
+ - `vp list`
30
+ - `vp logs ui`
31
+ - `vp config show`
32
+ - `vp config path`
33
+ - `vp version`
34
+
35
+ ## Image Namespace
36
+
37
+ By default, agent images use the `nezhar` namespace (for example `nezhar/claude-container:latest`).
38
+
39
+
40
+ Current defaults are aligned to existing container repos:
41
+
42
+ - `claude` -> `nezhar/claude-container:latest` ([repo](https://github.com/nezhar/claude-container))
43
+ - `gemini` -> `nezhar/gemini-container:latest` ([repo](https://github.com/nezhar/gemini-container))
44
+ - `opencode` -> `nezhar/opencode-cli:latest` ([repo](https://github.com/nezhar/opencode-container))
45
+ - `devstral` -> `nezhar/devstral-cli:latest` ([repo](https://github.com/nezhar/devstral-container))
46
+ - `auggie` -> `nezhar/auggie-cli:latest` ([repo](https://github.com/nezhar/auggie-container))
47
+ - `copilot` -> `nezhar/copilot-cli:latest` ([repo](https://github.com/nezhar/copilot-container))
48
+ - `codex` -> `nezhar/codex-cli:latest` ([repo](https://github.com/nezhar/codex-container))
49
+
50
+ You can override any single image directly:
51
+
52
+ ```bash
53
+ VP_IMAGE_CLAUDE=nezhar/claude-container:latest vp run claude
54
+ VP_IMAGE_GEMINI=nezhar/gemini-container:latest vp run gemini
55
+ VP_IMAGE_OPENCODE=nezhar/opencode-cli:latest vp run opencode
56
+ VP_IMAGE_DEVSTRAL=nezhar/devstral-cli:latest vp run devstral
57
+ VP_IMAGE_AUGGIE=nezhar/auggie-cli:latest vp run auggie
58
+ VP_IMAGE_COPILOT=nezhar/copilot-cli:latest vp run copilot
59
+ VP_IMAGE_CODEX=nezhar/codex-cli:latest vp run codex
60
+ VP_DATASETTE_IMAGE=nezhar/opencode-datasette:latest vp logs ui
61
+ ```
vibepod-0.1.0/PLAN.md ADDED
@@ -0,0 +1,189 @@
1
+ # VibePod Implementation Plan
2
+
3
+ ## Objective
4
+
5
+ Build a practical v1 of `vp` that unifies running agent CLIs in Docker with a consistent interface, while keeping the initial scope small and reliable.
6
+
7
+ ## Guiding Principles
8
+
9
+ - Ship a thin, stable core before broad feature coverage.
10
+ - Keep agent-specific behavior behind adapters.
11
+ - Prefer clear UX and predictable defaults over cleverness.
12
+ - Make all state locations explicit and inspectable.
13
+
14
+ ## v1 Scope
15
+
16
+ ### In Scope
17
+
18
+ - Project scaffold (`pyproject.toml`, `src/`, `tests/`, basic tooling).
19
+ - Core commands:
20
+ - `vp run <agent>`
21
+ - `vp stop <agent|--all>`
22
+ - `vp list`
23
+ - `vp logs ui`
24
+ - `vp config show`
25
+ - `vp config path`
26
+ - `vp version`
27
+ - Supported agents in registry: `claude`, `gemini`, `opencode`, `devstral`, `auggie`.
28
+ - Docker lifecycle management via Docker SDK (no shelling out to docker CLI).
29
+ - Config loading/merging: defaults + global + project + env overrides.
30
+ - Container labels and naming conventions for reliable discovery.
31
+
32
+ ### Out of Scope (Post-v1)
33
+
34
+ - Full `vp auth` flows.
35
+ - Full `vp skills` integration and MCP management.
36
+ - `vp logs query/export/stats`.
37
+ - Auto-update command, installers, and release automation.
38
+
39
+ ## Architecture Decisions
40
+
41
+ ### 1) Agent Adapter Contract
42
+
43
+ Each agent implements a small adapter interface:
44
+
45
+ - `image(config) -> str`
46
+ - `config_mounts(paths) -> list[MountSpec]`
47
+ - `env(config, runtime) -> dict[str, str]`
48
+ - `command(runtime) -> list[str]`
49
+ - `healthcheck(container) -> AdapterStatus`
50
+
51
+ This keeps `run/stop/list` generic and avoids hardcoding agent quirks.
52
+
53
+ ### 2) Container Identity
54
+
55
+ Use both predictable names and labels:
56
+
57
+ - Name: `vibepod-{agent}-{shortid}`
58
+ - Labels:
59
+ - `vibepod.managed=true`
60
+ - `vibepod.agent=<agent>`
61
+ - `vibepod.workspace=<absolute-path>`
62
+ - `vibepod.version=<vp-version>`
63
+
64
+ All operational commands (`list`, `stop`, future logs) discover containers via labels.
65
+
66
+ ### 3) Config Paths
67
+
68
+ - Global config dir: `~/.config/vibepod` (platformdirs-backed)
69
+ - Global file: `~/.config/vibepod/config.yaml`
70
+ - Project file: `.vibepod/config.yaml`
71
+ - Env prefix: `VP_`
72
+
73
+ Precedence: env > project > global > defaults.
74
+
75
+ ## Milestones
76
+
77
+ ## M0 - Repository Bootstrap
78
+
79
+ Deliverables:
80
+
81
+ - `pyproject.toml` with runtime + dev dependencies.
82
+ - Source layout under `src/vibepod`.
83
+ - Test scaffold (`pytest`, basic CLI smoke tests).
84
+ - Lint/format/type config (`ruff`, `mypy`).
85
+
86
+ Acceptance Criteria:
87
+
88
+ - `vp --help` runs locally.
89
+ - `pytest` runs with at least one passing smoke test.
90
+ - `ruff check` and `ruff format --check` pass.
91
+
92
+ ## M1 - Core Domain Layer
93
+
94
+ Deliverables:
95
+
96
+ - `constants.py` for defaults and agent metadata.
97
+ - `core/config.py` with merge logic and env overrides.
98
+ - `core/agents.py` with adapter registry and validation.
99
+ - `core/docker.py` wrapper for Docker SDK interactions.
100
+
101
+ Acceptance Criteria:
102
+
103
+ - Unit tests for config merge precedence.
104
+ - Agent lookup validates known/unknown agents.
105
+ - Docker wrapper can detect daemon availability.
106
+
107
+ ## M2 - Command MVP
108
+
109
+ Deliverables:
110
+
111
+ - `vp run`, `vp stop`, `vp list`, `vp version`.
112
+ - Common output helpers with Rich.
113
+ - Error-to-exit-code mapping.
114
+
115
+ Acceptance Criteria:
116
+
117
+ - `vp run claude` starts a managed container (when Docker daemon available).
118
+ - `vp list` shows running managed containers with agent + workspace.
119
+ - `vp stop claude` stops the correct container.
120
+ - `vp stop --all` stops all managed containers only.
121
+
122
+ ## M3 - Logging UI + Config UX
123
+
124
+ Deliverables:
125
+
126
+ - `vp logs ui` starts/reuses Datasette container.
127
+ - `vp config show` and `vp config path`.
128
+ - Config directory first-run setup.
129
+
130
+ Acceptance Criteria:
131
+
132
+ - `vp logs ui` launches Datasette bound to configured port.
133
+ - `vp config show` displays effective merged config.
134
+ - `vp config path` prints global/project paths consistently across OS.
135
+
136
+ ## M4 - Hardening + Docs
137
+
138
+ Deliverables:
139
+
140
+ - Robust error messages and troubleshooting hints.
141
+ - README aligned with actual v1 capabilities.
142
+ - Basic manual test checklist.
143
+
144
+ Acceptance Criteria:
145
+
146
+ - Clear errors for Docker unavailable, image missing, invalid agent.
147
+ - End-to-end smoke tests documented and reproducible.
148
+
149
+ ## Work Breakdown (File-by-File)
150
+
151
+ 1. `pyproject.toml`
152
+ 2. `src/vibepod/__init__.py`
153
+ 3. `src/vibepod/constants.py`
154
+ 4. `src/vibepod/core/config.py`
155
+ 5. `src/vibepod/core/agents.py`
156
+ 6. `src/vibepod/core/docker.py`
157
+ 7. `src/vibepod/utils/console.py`
158
+ 8. `src/vibepod/commands/run.py`
159
+ 9. `src/vibepod/commands/stop.py`
160
+ 10. `src/vibepod/commands/list.py`
161
+ 11. `src/vibepod/commands/logs.py`
162
+ 12. `src/vibepod/commands/config.py`
163
+ 13. `src/vibepod/commands/update.py` (version command only for v1)
164
+ 14. `src/vibepod/cli.py`
165
+ 15. `tests/test_cli.py`
166
+ 16. `tests/test_config.py`
167
+ 17. `tests/test_agents.py`
168
+
169
+ ## Risks and Mitigations
170
+
171
+ - Docker SDK behavior differences by platform
172
+ - Mitigation: keep a thin wrapper and centralize exception handling.
173
+ - Agent image runtime differences
174
+ - Mitigation: adapter interface + per-agent env/mount defaults.
175
+ - Config drift as features expand
176
+ - Mitigation: keep schema versioning and add migration hooks early.
177
+ - Logs may contain sensitive content
178
+ - Mitigation: default body logging off; document explicitly.
179
+
180
+ ## Definition of Done (v1)
181
+
182
+ - All in-scope commands implemented and documented.
183
+ - Unit tests cover config merge + command routing + agent validation.
184
+ - Manual smoke test passes on Linux/macOS with Docker Desktop/Engine.
185
+ - README reflects only implemented behavior.
186
+
187
+ ## Immediate Next Step
188
+
189
+ Start M0 by scaffolding the package and wiring a minimal Typer app that exposes `vp --help` and `vp version`.
@@ -0,0 +1,43 @@
1
+ # VibePod
2
+
3
+ VibePod is a unified CLI (`vp`) for running AI coding agents in Docker containers.
4
+
5
+ ## Current Status
6
+
7
+ This repository contains an initial v1 implementation with:
8
+
9
+ - `vp run <agent>`
10
+ - `vp stop <agent|--all>`
11
+ - `vp list`
12
+ - `vp logs ui`
13
+ - `vp config show`
14
+ - `vp config path`
15
+ - `vp version`
16
+
17
+ ## Image Namespace
18
+
19
+ By default, agent images use the `nezhar` namespace (for example `nezhar/claude-container:latest`).
20
+
21
+
22
+ Current defaults are aligned to existing container repos:
23
+
24
+ - `claude` -> `nezhar/claude-container:latest` ([repo](https://github.com/nezhar/claude-container))
25
+ - `gemini` -> `nezhar/gemini-container:latest` ([repo](https://github.com/nezhar/gemini-container))
26
+ - `opencode` -> `nezhar/opencode-cli:latest` ([repo](https://github.com/nezhar/opencode-container))
27
+ - `devstral` -> `nezhar/devstral-cli:latest` ([repo](https://github.com/nezhar/devstral-container))
28
+ - `auggie` -> `nezhar/auggie-cli:latest` ([repo](https://github.com/nezhar/auggie-container))
29
+ - `copilot` -> `nezhar/copilot-cli:latest` ([repo](https://github.com/nezhar/copilot-container))
30
+ - `codex` -> `nezhar/codex-cli:latest` ([repo](https://github.com/nezhar/codex-container))
31
+
32
+ You can override any single image directly:
33
+
34
+ ```bash
35
+ VP_IMAGE_CLAUDE=nezhar/claude-container:latest vp run claude
36
+ VP_IMAGE_GEMINI=nezhar/gemini-container:latest vp run gemini
37
+ VP_IMAGE_OPENCODE=nezhar/opencode-cli:latest vp run opencode
38
+ VP_IMAGE_DEVSTRAL=nezhar/devstral-cli:latest vp run devstral
39
+ VP_IMAGE_AUGGIE=nezhar/auggie-cli:latest vp run auggie
40
+ VP_IMAGE_COPILOT=nezhar/copilot-cli:latest vp run copilot
41
+ VP_IMAGE_CODEX=nezhar/codex-cli:latest vp run codex
42
+ VP_DATASETTE_IMAGE=nezhar/opencode-datasette:latest vp logs ui
43
+ ```
@@ -0,0 +1,52 @@
1
+ [project]
2
+ name = "vibepod"
3
+ version = "0.1.0"
4
+ description = "One CLI for containerized AI coding agents"
5
+ readme = "README.md"
6
+ requires-python = ">=3.10"
7
+ license = { text = "MIT" }
8
+ authors = [{ name = "VibePod" }]
9
+ dependencies = [
10
+ "typer>=0.12.0",
11
+ "rich>=13.0.0",
12
+ "docker>=7.0.0",
13
+ "pyyaml>=6.0.0",
14
+ "platformdirs>=4.0.0",
15
+ ]
16
+
17
+ [project.optional-dependencies]
18
+ dev = [
19
+ "pytest>=8.0.0",
20
+ "ruff>=0.6.0",
21
+ "mypy>=1.11.0",
22
+ ]
23
+
24
+ [project.scripts]
25
+ vp = "vibepod.cli:app"
26
+ vibepod = "vibepod.cli:app"
27
+
28
+ [build-system]
29
+ requires = ["hatchling>=1.24.0"]
30
+ build-backend = "hatchling.build"
31
+
32
+ [tool.hatch.build]
33
+ exclude = ["venv", "venv/**"]
34
+
35
+ [tool.hatch.build.targets.wheel]
36
+ packages = ["src/vibepod"]
37
+
38
+ [tool.pytest.ini_options]
39
+ testpaths = ["tests"]
40
+
41
+ [tool.ruff]
42
+ line-length = 100
43
+ target-version = "py310"
44
+
45
+ [tool.ruff.lint]
46
+ select = ["E", "F", "I", "W", "UP", "B"]
47
+
48
+ [tool.mypy]
49
+ python_version = "3.10"
50
+ strict = true
51
+ warn_return_any = true
52
+ warn_unused_ignores = true
@@ -0,0 +1,202 @@
1
+ # VibePod Specification Index
2
+
3
+ **Project:** VibePod
4
+ **Domain:** vibepod.dev
5
+ **CLI:** `vp`
6
+ **Version:** 1.0.0
7
+
8
+ ---
9
+
10
+ ## Document Index
11
+
12
+ | # | Document | Description |
13
+ |---|----------|-------------|
14
+ | 01 | [OVERVIEW.md](01-OVERVIEW.md) | Project overview, goals, architecture |
15
+ | 02 | [CLI-COMMANDS.md](02-CLI-COMMANDS.md) | Complete CLI reference |
16
+ | 03 | [PROJECT-STRUCTURE.md](03-PROJECT-STRUCTURE.md) | Python project structure, pyproject.toml |
17
+ | 04 | [CONFIGURATION.md](04-CONFIGURATION.md) | Config files, schema, management |
18
+ | 05 | [DOCKER-INTEGRATION.md](05-DOCKER-INTEGRATION.md) | Docker SDK, containers, volumes |
19
+ | 06 | [LOGGING-DATASETTE.md](06-LOGGING-DATASETTE.md) | SQLite logging, Datasette UI |
20
+ | 07 | [CICD-WORKFLOWS.md](07-CICD-WORKFLOWS.md) | GitHub Actions, releases |
21
+ | 08 | [INSTALLATION.md](08-INSTALLATION.md) | Install scripts, Homebrew |
22
+ | 09 | [README.md](09-README.md) | Repository README template |
23
+
24
+ ---
25
+
26
+ ## Quick Reference
27
+
28
+ ### Brand Assets
29
+
30
+ | Asset | Value |
31
+ |-------|-------|
32
+ | Domain | vibepod.dev |
33
+ | GitHub Org | github.com/VibePod |
34
+ | Docker Hub | hub.docker.com/u/vibepod |
35
+ | X/Twitter | @vibepod_dev |
36
+ | Discord | (server created) |
37
+
38
+ ### Repositories
39
+
40
+ | Repository | Purpose |
41
+ |------------|---------|
42
+ | `VibePod/vibepod` | Main CLI (Python/Typer) |
43
+ | `VibePod/docs` | Documentation site |
44
+ | `VibePod/skills` | Official skills |
45
+ | `nezhar/claude-container` | → `vibepod/claude` |
46
+ | `nezhar/gemini-container` | → `vibepod/gemini` |
47
+ | `nezhar/opencode-container` | → `vibepod/opencode` |
48
+ | `nezhar/devstral-container` | → `vibepod/devstral` |
49
+ | `nezhar/auggie-container` | → `vibepod/auggie` |
50
+
51
+ ### Tech Stack
52
+
53
+ | Component | Technology |
54
+ |-----------|------------|
55
+ | Language | Python 3.10+ |
56
+ | CLI Framework | Typer |
57
+ | Docker | docker-py SDK |
58
+ | Config | YAML (PyYAML) |
59
+ | Output | Rich |
60
+ | Skills | AGENTS.lock |
61
+ | Logging | SQLite + Datasette |
62
+ | CI/CD | GitHub Actions |
63
+ | Package | PyPI + PyInstaller binaries |
64
+
65
+ ### Docker Images
66
+
67
+ ```
68
+ vibepod/claude
69
+ vibepod/gemini
70
+ vibepod/opencode
71
+ vibepod/devstral
72
+ vibepod/auggie
73
+ vibepod/datasette
74
+ ```
75
+
76
+ ### Core Commands
77
+
78
+ ```bash
79
+ vp run <agent> # Start agent
80
+ vp stop --all # Stop all
81
+ vp list # List agents
82
+ vp logs ui # Datasette
83
+ vp skills sync # AGENTS.lock
84
+ vp config show # Configuration
85
+ ```
86
+
87
+ ### Aliases
88
+
89
+ ```bash
90
+ vp c # → vp run claude
91
+ vp g # → vp run gemini
92
+ vp o # → vp run opencode
93
+ vp d # → vp run devstral
94
+ vp a # → vp run auggie
95
+ vp ui # → vp logs ui
96
+ ```
97
+
98
+ ---
99
+
100
+ ## Implementation Checklist
101
+
102
+ ### Phase 1: Core CLI
103
+
104
+ - [ ] Project setup (pyproject.toml, structure)
105
+ - [ ] Basic CLI with Typer
106
+ - [ ] `vp run` command
107
+ - [ ] `vp stop` command
108
+ - [ ] `vp list` command
109
+ - [ ] Docker integration
110
+ - [ ] Configuration loading
111
+ - [ ] Aliases support
112
+
113
+ ### Phase 2: Skills & Logging
114
+
115
+ - [ ] AGENTS.lock integration (`vp skills`)
116
+ - [ ] SQLite logging
117
+ - [ ] Datasette container (`vp logs ui`)
118
+ - [ ] `vp logs stats` command
119
+
120
+ ### Phase 3: Polish
121
+
122
+ - [ ] `vp auth` commands
123
+ - [ ] Shell completions
124
+ - [ ] Error handling
125
+ - [ ] Tests
126
+ - [ ] Documentation
127
+
128
+ ### Phase 4: Release
129
+
130
+ - [ ] GitHub Actions workflows
131
+ - [ ] PyPI publishing
132
+ - [ ] Binary builds
133
+ - [ ] Install scripts
134
+ - [ ] Homebrew formula
135
+ - [ ] vibepod.dev website
136
+
137
+ ---
138
+
139
+ ## Development Commands
140
+
141
+ ```bash
142
+ # Setup
143
+ git clone https://github.com/VibePod/vibepod
144
+ cd vibepod
145
+ pip install -e ".[dev]"
146
+
147
+ # Development
148
+ pytest # Run tests
149
+ ruff check src tests # Lint
150
+ ruff format src tests # Format
151
+ mypy src # Type check
152
+
153
+ # Build
154
+ python -m build # Build package
155
+ pyinstaller ... # Build binary
156
+
157
+ # Release
158
+ git tag v1.0.0
159
+ git push --tags # Triggers CI release
160
+ ```
161
+
162
+ ---
163
+
164
+ ## External Dependencies
165
+
166
+ | Package | Version | Purpose |
167
+ |---------|---------|---------|
168
+ | typer | >=0.12.0 | CLI framework |
169
+ | docker | >=7.0.0 | Docker SDK |
170
+ | pyyaml | >=6.0 | Config parsing |
171
+ | rich | >=13.0 | Terminal output |
172
+ | platformdirs | >=4.0 | Cross-platform paths |
173
+ | agentslock | >=0.1.0 | AGENTS.lock integration |
174
+ | httpx | >=0.27.0 | HTTP client |
175
+
176
+ ---
177
+
178
+ ## Notes for Claude Code
179
+
180
+ When building VibePod:
181
+
182
+ 1. **Start with project structure** - Create pyproject.toml and directory layout first
183
+ 2. **Build incrementally** - Get `vp run claude` working before adding other features
184
+ 3. **Test Docker early** - Ensure Docker SDK works before building commands
185
+ 4. **Use the specs** - Reference these documents for implementation details
186
+ 5. **Keep it simple** - Python readability over performance
187
+
188
+ The specs are designed to be self-contained. Each document has enough detail to implement that component.
189
+
190
+ ---
191
+
192
+ ## Questions?
193
+
194
+ If anything is unclear in these specs, the intent is:
195
+
196
+ - **Simple over complex** - Choose the straightforward solution
197
+ - **Python conventions** - Follow standard Python patterns
198
+ - **Docker SDK** - Use docker-py, not subprocess
199
+ - **Typer patterns** - Follow Typer's recommended CLI structure
200
+ - **YAML config** - Simple, readable configuration
201
+
202
+ Good luck building VibePod! 🎵
@@ -0,0 +1,157 @@
1
+ # VibePod Specification
2
+
3
+ **Version:** 1.0.0
4
+ **Date:** February 2026
5
+ **Language:** Python 3.10+
6
+ **CLI Framework:** Typer
7
+
8
+ ---
9
+
10
+ ## Project Overview
11
+
12
+ VibePod is a unified CLI tool for running AI coding agents in isolated Docker containers.
13
+
14
+ ### Goals
15
+
16
+ 1. **Unified interface** - One CLI (`vp`) for all agents
17
+ 2. **Container isolation** - Each agent runs in Docker
18
+ 3. **Skills management** - Via AGENTS.lock integration
19
+ 4. **API logging** - Datasette-powered analytics
20
+ 5. **Cross-platform** - macOS, Linux, Windows
21
+
22
+ ### Non-Goals
23
+
24
+ - Building the container images (handled by nezhar/*-container repos)
25
+ - Replacing AGENTS.lock (we integrate, not reimplement)
26
+ - Performance optimization (readability over speed)
27
+
28
+ ---
29
+
30
+ ## Brand Assets
31
+
32
+ | Platform | Namespace | Status |
33
+ |----------|-----------|--------|
34
+ | Domain | vibepod.dev | ✅ |
35
+ | GitHub | github.com/VibePod | ✅ |
36
+ | Docker Hub | hub.docker.com/u/vibepod | ✅ |
37
+ | X/Twitter | @vibepod_dev | ✅ |
38
+ | Discord | VibePod server | ✅ |
39
+ | Bluesky | @vibepod.dev (via DNS) | 🔒 |
40
+
41
+ ---
42
+
43
+ ## Architecture
44
+
45
+ ```
46
+ ┌─────────────────────────────────────────────────────────────────┐
47
+ │ User │
48
+ │ │ │
49
+ │ ▼ │
50
+ │ ┌───────────┐ │
51
+ │ │ vp CLI │ (Python/Typer) │
52
+ │ └─────┬─────┘ │
53
+ │ │ │
54
+ │ ┌───────────────┼───────────────┐ │
55
+ │ ▼ ▼ ▼ │
56
+ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
57
+ │ │ Docker │ │ AGENTS. │ │ Datasette │ │
58
+ │ │ SDK │ │ lock │ │ (logging) │ │
59
+ │ │ (Python) │ │ (Python) │ │ (Python) │ │
60
+ │ └──────┬──────┘ └─────────────┘ └─────────────┘ │
61
+ │ │ │
62
+ │ ▼ │
63
+ │ ┌─────────────────────────────────────────────┐ │
64
+ │ │ Docker Hub: vibepod/* │ │
65
+ │ │ │ │
66
+ │ │ vibepod/claude vibepod/gemini │ │
67
+ │ │ vibepod/opencode vibepod/devstral │ │
68
+ │ │ vibepod/auggie vibepod/datasette │ │
69
+ │ └─────────────────────────────────────────────┘ │
70
+ └─────────────────────────────────────────────────────────────────┘
71
+ ```
72
+
73
+ ---
74
+
75
+ ## Repository Structure
76
+
77
+ ### VibePod Organization
78
+
79
+ | Repository | Purpose |
80
+ |------------|---------|
81
+ | `VibePod/vibepod` | Main CLI tool (this spec) |
82
+ | `VibePod/docs` | Documentation site (vibepod.dev) |
83
+ | `VibePod/skills` | Official skills collection |
84
+
85
+ ### Container Repositories
86
+
87
+ | Repository | Docker Image |
88
+ |------------|--------------|
89
+ | `nezhar/claude-container` | `vibepod/claude` |
90
+ | `nezhar/gemini-container` | `vibepod/gemini` |
91
+ | `nezhar/opencode-container` | `vibepod/opencode` |
92
+ | `nezhar/devstral-container` | `vibepod/devstral` |
93
+ | `nezhar/auggie-container` | `vibepod/auggie` |
94
+
95
+ ### External Dependencies
96
+
97
+ | Package | Purpose |
98
+ |---------|---------|
99
+ | `luml-ai/AGENTS.lock` | Skills & config sync |
100
+
101
+ ---
102
+
103
+ ## Supported Agents
104
+
105
+ | Agent | Provider | Image | Config Dir |
106
+ |-------|----------|-------|------------|
107
+ | claude | Anthropic | `vibepod/claude` | `~/.config/vibepod/agents/claude` |
108
+ | gemini | Google | `vibepod/gemini` | `~/.config/vibepod/agents/gemini` |
109
+ | opencode | OpenAI | `vibepod/opencode` | `~/.config/vibepod/agents/opencode` |
110
+ | devstral | Mistral | `vibepod/devstral` | `~/.config/vibepod/agents/devstral` |
111
+ | auggie | Augment | `vibepod/auggie` | `~/.config/vibepod/agents/auggie` |
112
+
113
+ ---
114
+
115
+ ## Installation Methods
116
+
117
+ ### Primary: pipx
118
+
119
+ ```bash
120
+ pipx install vibepod
121
+ ```
122
+
123
+ ### Secondary: pip
124
+
125
+ ```bash
126
+ pip install vibepod
127
+ ```
128
+
129
+ ### Tertiary: Binary (via PyInstaller)
130
+
131
+ ```bash
132
+ # macOS/Linux
133
+ curl -fsSL https://vibepod.dev/install.sh | bash
134
+
135
+ # Windows
136
+ irm https://vibepod.dev/install.ps1 | iex
137
+ ```
138
+
139
+ ### Development
140
+
141
+ ```bash
142
+ git clone https://github.com/VibePod/vibepod
143
+ cd vibepod
144
+ pip install -e ".[dev]"
145
+ ```
146
+
147
+ ---
148
+
149
+ ## Links
150
+
151
+ | Resource | URL |
152
+ |----------|-----|
153
+ | Website | https://vibepod.dev |
154
+ | GitHub | https://github.com/VibePod/vibepod |
155
+ | Docker Hub | https://hub.docker.com/u/vibepod |
156
+ | PyPI | https://pypi.org/project/vibepod |
157
+ | AGENTS.lock | https://github.com/luml-ai/AGENTS.lock |