docker-architectlisted
Install: claude install-skill ice-lfernandes/claude-spring-architect
## Current compose state
!`R="${CLAUDE_PROJECT_DIR:-.}"; if test ! -d "$R"; then echo "(could not look: project root '$R' is not a readable directory — this is not an answer about docker-compose.yml)"; elif test -f "$R/docker-compose.yml"; then grep -E "^\s{2}\S+:$" "$R/docker-compose.yml" || echo "(docker-compose.yml exists but declares no service at two-space indent)"; else echo "(no docker-compose.yml at project root — run project-bootstrap first)"; fi`
## Target
$ARGUMENTS
---
# Docker Architect
Keeps `docker-compose.yml` and `Dockerfile` in sync with what the project actually
needs, **after** they're born. `project-bootstrap` writes the base pair — one `app`
service, nothing else — at project creation. Every service added afterward (Postgres,
MySQL, a broker) goes through this skill, so there's one owner instead of
`persistence-architect` and `test-architect` each editing the same YAML their own way.
**Entry rule: without `docker-compose.yml` at the project root, there's nothing to
extend.** If it's missing, stop and say to run `project-bootstrap` — this skill never
generates the base pair, only grows it.
The `## Current compose state` block above answers one of three things, and only the
second one arms that rule:
| Output | Meaning | What to do |
|---|---|---|
| A list of service names | The file exists | Proceed |
| `(no docker-compose.yml at project root …)` | The project root was readable and the file is not there | Entry rule applies: stop |
| `(could not