Personal Claude Code agents you summon by name. A small /plugin marketplace —
callable in the chat, hostable on GitHub, installable in one line.
A pragmatic infrastructure & platform strategist for small, self-hosted fleets. It optimizes for quality-per-dollar, reproducibility, and security, follows a strict complexity-escalation ladder (systemd + rootless containers on one node is home; Kubernetes is almost never the answer), is strong at GitOps, and researches the current best-in-class (GitHub / HN / X / skills.sh) before recommending a tool or provider — instead of answering from stale memory.
It carries zero personal specifics. It reads them at runtime from:
~/.claude/infra-context.md— your cross-provider inventory (providers, nodes, tailnet, DNS zones, budget, Vault paths — as references, never secret values).- the current repo's
CLAUDE.md/docs/server-facts.md— the concrete server.
That separation is why this repo is safe to make public.
A hands-on DevOps engineer for day-to-day delivery: GitHub Actions pipelines,
Containerfiles, systemd units/timers, nginx configs, deploy scripts, log-driven
incident debugging, backups and alert plumbing. Verifies every change with real
runs instead of declaring success; escalates strategy questions (providers,
scaling, architecture) to infra-strategist / architect instead of deciding
them by reflex.
A software & system architect who owns architecture decisions: module and service boundaries, API and data contracts, schema design and migration strategy, integration patterns, tech-debt triage. Produces decisions with explicit trade-offs recorded as one-page ADRs; monolith-first, splits only on evidence; does not write feature code.
A database engineer who owns everything stateful: schema design, versioned migrations (expand-and-contract over renames when consumers exist), EXPLAIN-driven query optimization, index strategy, and backups that are only considered real when restores are tested. Treats every schema as a public contract — dashboards and digests reading your tables count as consumers too.
From a local checkout (this machine):
/plugin marketplace add ~/pet-projects/role-call
/plugin install infra-strategist@role-call
/plugin install devops@role-call
/plugin install architect@role-call
/plugin install dba@role-call
From GitHub (you, or anyone you share it with):
/plugin marketplace add Smolevich/role-call
/plugin install infra-strategist@role-call
Then invoke it in chat as @infra-strategist (or let Claude dispatch it by task).
The doctrine is tool-neutral, so it ships as ready-to-copy adapters — generated from the one canonical agent file, no drift:
| Harness | Drop this into your project | Notes |
|---|---|---|
| Codex | AGENTS.md → your repo root |
AGENTS.md is the cross-tool standard; Codex reads it automatically. |
| Cursor | AGENTS.md → root, or .cursor/rules/infra-strategist.mdc → .cursor/rules/ |
The .mdc is a proper Cursor rule (auto-attached by description). |
| Gemini CLI | GEMINI.md → your repo root |
Read automatically at the project root. |
These files are generated from plugins/infra-strategist/agents/infra-strategist.md
by ./sync.sh. Edit the canonical agent, then run sync.sh to regenerate them — never
hand-edit the adapters (each carries a "do not edit by hand" header).
Note: Cursor/Codex have no personal-inventory convention, so the agent's startup step
that reads ~/.claude/infra-context.md simply no-ops there unless you create that file.
Plugin version is intentionally unset, so every git commit is treated as a new
version and /plugin update picks up changes on each push. Set a version in
plugins/infra-strategist/.claude-plugin/plugin.json once you want pinned releases.
role-call/
├── .claude-plugin/marketplace.json # marketplace catalog
├── plugins/
│ └── infra-strategist/
│ ├── .claude-plugin/plugin.json # plugin manifest
│ └── agents/infra-strategist.md # ★ canonical agent (doctrine)
├── sync.sh # regenerates the adapters below
├── AGENTS.md # generated — Codex / Cursor / cross-tool
├── GEMINI.md # generated — Gemini CLI
└── .cursor/rules/infra-strategist.mdc # generated — Cursor rule