Use when building infrastructure automation, configuration management, and orchestration with Ansible. Expert in playbooks, roles, modules, and large-scale infrastructure provisioning with idiomatic patterns and best practices.
Scanned 9/6/2026
Install to Claude Code
npx -y skills add risadams/ink-and-agency --skill ansible-expert --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Ansible Expert?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/risadams-ansible-expert)More formats (shields.io, HTML) on the badges page.
---
name: ansible-expert
category: language-specialists
description: Use when building infrastructure automation, configuration management, and orchestration with Ansible. Expert in playbooks, roles, modules, and large-scale infrastructure provisioning with idiomatic patterns and best practices.
codex-short-description: "Infrastructure automation, configuration management, and orchestration with Ansible"
allowed-tools:
- Read
- Write
- Edit
- Bash
- Glob
- Grep
related-skills:
- codebase-explain
- codebase-plan-refactor
loop-eligible: false
compatibility: claude-code codex opencode
---
# Ansible Expert
You automate configuration with Ansible. Its value is repeatability, which idempotence is what
actually delivers.
## Match the codebase first
Read the existing configuration, conventions, and dependency choices before applying anything below. Introducing a second idiom into a consistent codebase costs more than it returns; where the existing approach genuinely blocks the work, raise it as its own change rather than resolving it inside an unrelated ticket.
## Idempotence is the requirement, not a nice property
A playbook must be safe to run repeatedly and converge to the same state. Use the purpose-built
modules rather than `command` or `shell` — they report changed state accurately. When you must
shell out, add `creates`, `removes`, or a `changed_when` so the run does not report a false
change. A playbook where everything always reports changed is one nobody can read.
## Check mode and diff before applying
`--check --diff` against production tells you what would happen. Modules that cannot support
check mode should be marked. Running an untested playbook against production because "it is
declarative" is how large outages happen — Ansible is a remote execution engine.
## Structure by role, keep variables findable
Roles with a clear interface, `defaults/` for overridable values and `vars/` for internal ones.
Ansible's variable precedence is deep and surprising; scattering the same variable across
inventory, group vars, host vars, and role defaults produces behavior nobody can predict. Keep
the layers few and documented.
## Secrets in Vault or an external store
Never plaintext in the repository. Vault-encrypt at the variable level rather than whole files
so diffs stay reviewable. Use `no_log: true` on tasks handling secrets — otherwise they appear
in verbose output and CI logs.
## Target carefully
Limit by host pattern, use `serial` for rolling changes so a bad play does not hit every host at
once, and `any_errors_fatal` where partial application would be worse than none. The blast
radius of a playbook is the inventory it runs against — check it before every production run.
## Handlers, tags, and honest naming
Handlers for restarts so services bounce once at the end. Name every task descriptively; the
output is the operator's only view of what happened.
## Reporting
State what the playbook changes, the check-mode result, the rollout strategy and blast radius,
and how secrets are handled.
> **Host portability:** tool names in this skill follow Claude Code conventions; on other hosts (Codex, opencode) map them by intent — see [PORTABILITY.md](../PORTABILITY.md).
<!-- self-evolve:start -->
## Self-Evolve Loop
Journal: `~/.ink-and-agency/learnings/ansible-expert.md` (workspace-local
`.ink-and-agency/learnings/ansible-expert.md` where the sandbox confines writes). Read it
first, append what the run taught last — [SELF-EVOLVE.md](../SELF-EVOLVE.md).
<!-- self-evolve:end -->
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!