ddev-ops
Use when a project has a .ddev/ folder or needs one: DDEV setup on a new machine, version pinning, config.local.yaml and .ddev/.env files, database import…
Skill by claude-mods
Chalk Labs
Need help deploying ddev-ops?
Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/0xdarkmatter-ddev-ops
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: backend, data
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md and code. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Python package
Network hosts it talks to 4
api.github.com· found in codecodeload.github.com· found in install commandendoflife.date· found in coderaw.githubusercontent.com· found in code
Files it touches
~/.claude/skills/ddev-ops
Tools it pre-approves 6
From allowed-tools in SKILL.md: the agent may use these without asking you each time.
ReadEditWriteBashGlobGrep
What's inside
- Skill name
ddev-ops- Description
- Use when a project has a .ddev/ folder or needs one: DDEV setup on a new machine, version pinning, config.local.yaml and .ddev/.env files, database import, snapshots, ddev pull and sanitised data, slow Mutagen or WSL2 sites, add-ons (Redis, Solr, cron), commands and hooks, Vite ports, Xdebug, ddev share, port conflicts, several git worktrees at once, scripting DDEV (describe -j), disk cleanup, upgrades and troubleshooting. Audits .ddev/ for team-breaking mistakes.
- License
- MIT
- Allowed tools
- Read, Edit, Write, Bash, Glob, Grep
- Metadata
- author: claude-mods · related-skills: craftcms-ops, security-ops, frontend-upgrade-ops, docker-ops, web-perf-ops, package-manager-ops
- Instructions
- 203 lines in SKILL.md · view on GitHub
Before installing
- Ships executable scripts
- Pre-approves any shell command
Agent Skills spec issues
- files: referenced but missing: references/craft-vite-twig.md, references/ddev.md, references/ddev-config-drift.md
Files (40)
- SKILL.md
- ddev-facts.json · assets/
- sanitized-pull.yaml.example · assets/
- automation-and-worktrees.md · references/
- config-and-env.md · references/
- database.md · references/
- debugging-sharing.md · references/
- extending.md · references/
- frontend-node.md · references/
- performance.md · references/
- troubleshooting.md · references/
- audit-ddev-config.py · scripts/
- check-ddev-facts.py · scripts/
- run-python.sh · scripts/
- addon-dashboard · tests/fixtures/clean/.ddev/commands/host/
- db-sanitize · tests/fixtures/clean/.ddev/commands/web/
- config.local.yaml · tests/fixtures/clean/.ddev/
- config.yaml · tests/fixtures/clean/.ddev/
- docker-compose.cache.yaml · tests/fixtures/clean/.ddev/
- api-proxy.conf · tests/fixtures/clean/.ddev/nginx/
- staging.yaml · tests/fixtures/clean/.ddev/providers/
- .gitkeep · tests/fixtures/clean/storage/
- .gitkeep · tests/fixtures/clean/web/
- commands-db.json · tests/fixtures/live/
- commands-host.json · tests/fixtures/live/
- commands-web.json · tests/fixtures/live/
- config.md · tests/fixtures/live/
- eol-nodejs.json · tests/fixtures/live/
- eol-php.json · tests/fixtures/live/
- releases.json · tests/fixtures/live/
- schema.json · tests/fixtures/live/
- open-admin · tests/fixtures/minefield/.ddev/commands/host/
- craft · tests/fixtures/minefield/.ddev/commands/web/
- config.yaml · tests/fixtures/minefield/.ddev/
- docker-compose.agent.yaml · tests/fixtures/minefield/.ddev/
- docker-compose.tools.yaml · tests/fixtures/minefield/.ddev/
- production.yaml · tests/fixtures/minefield/.ddev/providers/
- .gitkeep · tests/fixtures/minefield/storage/
- .gitkeep · tests/fixtures/minefield/web/
- run.sh · tests/
SKILL.md (first lines)
# DDEV Operations
**Why:** DDEV is the local stack behind most PHP agency sites, and it fails quietly: a
default that moved under an unpinned project, a key it silently ignores, one developer's
setting committed for the whole team.
> Versions verified 2026-10-05 against DDEV v1.25.4. Fast-moving facts (defaults, PHP and
> Node.js end-of-life floors, built-in command names) live once in
> `assets/ddev-facts.json`; `scripts/check-ddev-facts.py --offline` fails if this skill's
> prose and that file disagree, and `--live` (weekly) fails when DDEV moves.
## Start here
1. **Read the project before changing it:** `.ddev/config.yaml`, any `config.*.yaml`,
`ls -a .ddev/`, then `ddev describe` (URLs, ports, services) and `ddev version`.
2. **Audit it** from any directory, `<skill-dir>` being this skill's folder (the launcher
finds a working Python 3.8+, which matters on Windows where `python3` is often a
Store stub):
```bash
bash "<skill-dir>/scripts/run-python.sh" "<skill-dir>/scripts/audit-ddev-config.py" /path/to/project
bash "<skill-dir>/scripts/run-python.sh" "<skill-dir>/scripts/audit-ddev-config.py" /path/to/project --json | jq '.data[]'
```
Exit 10 means findings, sorted high to low (severity, check, `file:line`, detail); 0
means clean. `--ignore <check>` documents a deliberate exception.
3. **Run everything through DDEV** - `ddev composer`, `ddev php`, `ddev npm`,
`ddev exec` - so commands use the container's PHP and Node, not the host's.
4. **Snapshot before anything risky**, with a unique name:
`ddev snapshot --name=before-<task>-$(date +%Y%m%d%H%M%S)`. A reused name saves
nothing and still exits 0.
5. **Ask before destroying data** (Hard rule 11).
## Hard rules
Rules 2, 3, 4, 6, 8 and 12 were each seen in a 2026-10-05 read of 36 DDEV-based agency
repositories; the rest are quiet failures DDEV's own docs and source describe.
1. **Pin `php_version` and `database` to production.** Unpinned projects follow DDEV's
defaults, which move: v1.25.0 switched PHP 8.3 to 8.4 and MariaDB 10.11 to 11.8.
Also pin `nodejs_version` and `composer_version: "2"`.
2. **Per-developer settings never go in `config.yaml`.**
- That means `performance_mode`, `router_http_port`/`router_https_port`,
`xdebug_enabled: true`, `bind_all_interfaces` and `host_db_port`.
- They belong in `.ddev/config.local.yaml` or `ddev config global`.
- Project values beat global ones, so a committed value pins every teammate.
- Git ignores the `.local` files only after DDEV has run in that checkout, because
its `.ddev/.gitignore` isn't committed. Add `.ddev/config*.local.y*ml` and
`.ddev/.env*.local` to the project root's `.gitignore`.
3. **Retired keys do nothing.** DDEV loads config non-strictly:
`mutagen_enabled: false` and `nfs_mount_enabled` are ignored, not obeyed.
4. **`upload_dirs` resolve from the docroot.** With `docroot: web`, `storage` means
`web/storage`; folders beside the docroot are `../storage` and `../node_modules`.
Setting the list replaces the type's defaults; override files append to it.
5. **No secrets in committed `.ddev/.env*` files.** Use the `.local` twin
(`.ddev/.env.web.local`, v1.25.4+), kept out of git as rule 2 says. Commit a
`.example` with `git add -f`, since DDEV's `.gitignore` hides `*.example`.
6. **Never hand containers your machine's credentials.** Every process in them -
Composer and npm scripts included - can use what they reach.
- No host SSH-agent forwarding: load one scoped key with `ddev auth ssh -f <key>`.
- No compose mount of the Docker socket (full control of the host) or of your home
directory.
- No agent logins or keys under `.ddev/`: the project, `.ddev/` included, is mounted
into `web`.
7. **Pull sanitised data; never push to production.**
- Anonymise where the data lives and pull the result. No raw production personal data
on laptops.
- Delete `db_push_command`/`files_push_command` from your own recipes that can reach
production.
- A `files_pull_command` that fetches nothing makes `ddev pull` empty the upload
directory, and the pull still exits 0. Omit the stanza instead.
8. **Don't keep project copies of DDEV's built-in commands** (`craft`, `npm`,
`artisan`, `wp`...). A project command shadows the built-in and freezes an old
version. Command files must have LF endings: DDEV skips CRLF ones with only a warning.
9. **Review an add-on before installing it.** Its Bash install actions run on your
machine. Prefer official `ddev/` add-ons and pin `--version`.
10. **On Windows, keep projects inside the WSL2 filesystem**, never under `/mnt/c`.
11. **Confirm with the user before destroying data.** These destroy data:
- `ddev delete`, `ddev stop --remove-data`, `ddev start --reset-database`;
- `ddev snapshot --cleanup`, `ddev clean`, `ddev push`;
- `ddev import-db` and `ddev import-files`, which empty their target first;
- `docker volume prune -a`, which deletes stopped projects' databases.
`ddev poweroff` stops everyone's projects.
12. **Several checkouts need distinct project names.** A committed `name:` makes every git
worktree claim the same project. Omit it, or override it in `config.local.yaml`.
## Driving DDEV from a script or agent
- **`ddev` is not a sandbox.** Project host commands and `exec-host` hook tasks run on
your machine with your rights; a `pre-start` one runs on the first `ddev start`. In a
repository you didn't write, audit first and show the user any `host-hook` or
`host-command` finding before starting the project.
- **Never run bare `ddev`** (it opens a dashboard) **or flagless `ddev config`** (it asks
questions). Pass `--file`/`--source` to imports and `-y` to anything that prompts.
- **Name the container directory.** `ddev exec` ignores the host folder you run it from;
pass `--dir /var/www/html/<path>`, or a plugin's suite runs against the project's
config and development database.
- **Keep dumps out of your context:** ask the database (`ddev mysql -e '...'`), never
read a dump or snapshot ([database.md](references/database.md#keep-dumps-out-of-an-agents-context)).
- **Read state as JSON:** `ddev describe -j | jq -r '.raw.primary_url'` (also
`.raw.status`, `.raw.dbinfo.published_port`); `ddev list -j`;
`ddev launch --print-url`.
- **Single-quote `ddev exec` commands** that contain `$`, pipes or redirects, so they
expand inside the container.
- **Exit 0 isn't always success:** a duplicate `ddev snapshot` name and
`ddev add-on remove` leaving files behind both exit 0.
Details, the destroys-data table and worktree setup:
[automation-and-worktrees.md](references/automation-and-worktrees.md).
## Route by task
| Task | Read |
|---|---|
| Existing repo on a new machine, new project, version pinning, CI parity, Composer, what to commit, env files, upgrading DDEV | [config-and-env.md](references/config-and-env.md) |
| Scripting DDEV, JSON output, commands that destroy data, several git worktrees (OAuth callbacks, webhooks), renaming or moving a project, AI agents inside DDEV | [automation-and-worktrees.md](references/automation-and-worktrees.md) |
| Import/export, snapshots, seed and reset, changing engine, `ddev pull` recipes, sanitised data, uploads from production, dumps and agents | [database.md](references/database.md) |
| Slow project, Mutagen, `upload_dirs`, WSL2, choosing a Docker provider | [performance.md](references/performance.md) |From 0xDarkMatter/claude-mods, MIT.
More from 0xDarkMatter/claude-mods
- 0.654score
claude-api-ops
claude-mods
Building applications ON Claude - the Anthropic API and Claude Agent SDK.
SkillAFreshness: A★ 75Claude Code - 0.654score
git-ops
claude-mods
Git + worktree orchestrator: status survey, per-worktree triage, commits, PRs, branches, releases, rebases — reads inline, writes to a background agent.
SkillAFreshness: A★ 75Claude Code +9 - 0.654score
bash-ops
claude-mods
Defensive Bash scripting for production automation, CI scripts, and agent-facing tools.
SkillAFreshness: A★ 75Claude Code +9 - 0.654score
loop-ops
claude-mods
Design and safely run OUTER loops - scheduled discover-triage-implement-verify-escalate agent loops.
SkillAFreshness: A★ 75Claude Code +9 - 0.654score
a11y-ops
claude-mods
Web accessibility end to end: WCAG 2.2 AA, EAA and ADA Title II obligations, audits (axe, pa11y, keyboard, screen reader), the common failures, accessibility…
SkillAFreshness: A★ 75Claude Code +9 - 0.654score
adr-ops
claude-mods
Author, index, and lint Architecture Decision Records — append-only memory that recovers the WHY behind a system's shape.
SkillAFreshness: A★ 75Claude Code +9 - 0.654score
fleet-ops
claude-mods
Landing discipline for parallel work: sequential test-gated landing queue, pre-land scrub, auto-rebase of in-flight lanes, fleet status, one-shot revert…
SkillAFreshness: A★ 75Claude Code +9 - 0.654score
auto-skill
claude-mods
Evaluate current session for skill-worthy workflows and create reusable skills.
SkillAFreshness: A★ 75Claude Code +9 - 0.654score
asus-router-ops
claude-mods
ASUS router config and hardening: Asuswrt-Merlin, security hardening, encrypted DNS (DoT/DoH), VPN (WireGuard/OpenVPN), guest networks, VLAN/IoT isolation…
SkillAFreshness: A★ 75Claude Code +9 - 0.654score
atomise
claude-mods
Atom of Thoughts (AoT) reasoning - decompose complex problems into atomic units with confidence tracking and backtracking.
SkillAFreshness: A★ 75Claude Code +9 - 0.654score
auth-ops
claude-mods
Authentication and authorization patterns - JWT, OAuth2, sessions, RBAC, ABAC, passkeys, MFA, identity-aware proxies, and Better Auth.
SkillAFreshness: A★ 75Claude Code +9 - 0.654score
claude-code-ops
claude-mods
Claude Code internals - hooks, skill frontmatter, headless mode, and extension debugging, current as of June 2026.
SkillAFreshness: A★ 75Claude Code +9
Signals
- Stars
- 75
- Forks
- 8
- Open issues
- 0
- Last commit (this folder)
- Oct 14, 2026 (22 days ago)
- Last release
- Oct 14, 2026 (21 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/0xDarkMatter/claude-mods
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from claude-mods
- 0.685score
file-search
claude-mods
Modern file and content search using fd, ripgrep (rg), and fzf.
SkillCFreshness: C★ 443Claude Code +9 - 0.685score
code-stats
claude-mods
Analyze codebase with tokei (fast line counts by language) and difft (semantic AST-aware diffs).
SkillCFreshness: C★ 443Claude Code +9 - 0.685score
sqlite-ops
claude-mods
Patterns for SQLite databases in Python projects - state management, caching, and async operations.
SkillCFreshness: C★ 443Claude Code +9 - 0.685score
project-planner
claude-mods
Detects stale project plans and suggests session commands.
SkillCFreshness: C★ 443Claude Code +9 - 0.685score
python-env
claude-mods
Fast Python environment management with uv (10-100x faster than pip).
SkillCFreshness: C★ 443Claude Code +9 - 0.685score
container-orchestration
claude-mods
Docker, Kubernetes, and AWS ECS/Fargate patterns.
SkillCFreshness: C★ 443Claude Code +9
Done for you
Rather not set it up yourself?
Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.
See how we build AI agents →Read the case studies
Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.
- launches shipped
- 50+
- launches shipped
- media placements
- 500+
- media placements
- founders on every account
- 2
- founders on every account
Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block
Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.
Get ddev-ops running in your business
Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.
Cite this page
ddev-ops skill. Agent Mart. https://agentmart.dev/skills/0xdarkmatter-ddev-ops (last updated 2026-10-24)