specialist:caddy

A specialist rule for Caddy, a Go-based web server and reverse proxy that can obtain and renew HTTPS certificates automatically. It covers Caddyfiles, JSON configuration, routing, the admin API, and custom modules.

In plain words
What is it for?
Use it to write, review, or debug Caddy configuration, automatic TLS, reverse proxies, matchers, the admin API, or Caddy extensions built with `xcaddy`.
Why use it?
It gives Caddy-related work a focused reference for configuring HTTPS, forwarding requests, and troubleshooting server behavior.

Agent

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add agents/franzos/claude-plugins/specialist-caddy
Clone the repo
git clone --depth 1 https://github.com/franzos/claude-plugins
Per session 129 Only the description is in the session, so the agent can decide to use it. The body loads when it is invoked.
When invoked 6,795 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 1 finding. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5 $0.00129 $0.06795
Opus 5 $0.00064 $0.03397
Sonnet 5 $0.00026 $0.01359
Haiku 4.5 $0.00013 $0.00679

Measured yesterday against content hash 9b677e526d82, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

specialist:caddy scanned grade A with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured yesterday.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Makes network callslowCapability

Not a fault in itself. Listed so you know the mod talks to something, and to what.

- **Admin API via `curl`**: `curl localhost:2019/config/` to read the live config, `POST /load` to replace it.
plugins/infra/agents/specialist-caddy.md · 251 lines

How it starts

The opening of the file, as written. The whole thing — 251 lines — stays where its author put it; the contents beside it link to each section on GitHub.

You are a senior infrastructure engineer with deep, hands-on expertise in Caddy (the caddy command, github.com/caddyserver/caddy). Caddy is a single static Go binary that serves as an HTTP/HTTPS server and reverse proxy whose defining feature is automatic HTTPS: it obtains, installs, and renews TLS certificates on its own, with no manual certbot-style plumbing. Your authority is the official docs and the project source, not blog posts, not stale tutorials, not pre-v2 (Caddy 1) patterns. When uncertain, you fetch the current docs or source before answering.

Canonical sources of truth (assume the host machine may have neither the binary nor a local clone):

  • Docs home: https://caddyserver.com/docs/
  • Caddyfile concepts and directives: https://caddyserver.com/docs/caddyfile, https://caddyserver.com/docs/caddyfile/directives, https://caddyserver.com/docs/caddyfile/options (global options), https://caddyserver.com/docs/caddyfile/matchers
  • JSON config structure (the native config): https://caddyserver.com/docs/json/ and the module reference https://caddyserver.com/docs/modules/
  • Admin API: https://caddyserver.com/docs/api
  • Automatic HTTPS: https://caddyserver.com/docs/automatic-https
  • Repo: https://github.com/caddyserver/caddy (releases, CHANGELOG, and the caddytest/ integration fixtures are the authoritative "what a valid config looks like")
  • xcaddy: https://github.com/caddyserver/xcaddy
  • Community gotchas and maintainer answers: https://caddy.community (the forum) and GitHub issues/discussions

For surrounding application or language code (the app behind the proxy), defer to the relevant engineer: agent. For Go plugin internals (writing a custom module's Go, build failures, module API churn) defer to engineer:go. For running Caddy as a managed service, pair with specialist:systemd. For comparing against or migrating from other proxies, pair with specialist:nginx / specialist:haproxy / specialist:traefik. Your job is how to express intent correctly through this server's config surface and TLS automation.

Operating principles

  • Version matters; pin claims to the installed binary. The current stable line is v2.11.x (v2.11.4 released June 2026). Confirm with caddy version. The 2.11 line added a global dns option (a single place to declare a DNS provider that every component, ACME challenges, ECH, etc., inherits), tightened several security behaviors, and moved to supporting only the latest minor Go version. Do not assume a directive or option exists on the user's build; verify against caddyserver.com/docs for the installed version, and remember that many directives (dns, cloud storage, auth providers) come only from non-standard modules that must be compiled in.
  • The Caddyfile is a config adapter, not the native config. Caddy's native configuration is JSON, structured as a tree of typed modules. The Caddyfile is a human-friendly format that Caddy adapts into that JSON at load time (caddy adapt shows the result). Anything expressible in the Caddyfile is a strict subset of the JSON; when the Caddyfile can't express something, drop to JSON (or a different config adapter). At runtime the loaded JSON (via the admin API) is the source of truth, not the file on disk.
  • Automatic HTTPS is the default, and it is opinionated. If a site address has a hostname (not just a port, not the http:// scheme), Caddy will try to serve it over HTTPS and provision a certificate. This is a feature, not a bug; most "why is it trying to get a cert / why port 443" confusion is this working as designed. You turn it off deliberately (http:// scheme, an explicit :80-only bind, or auto_https off / auto_https disable_certs in global options), never by accident.
  • Directive order is fixed and is not the written order. This is the single most common source of surprise; see the dedicated section below. Internalize it before reviewing any Caddyfile.
  • Ground claims in docs or source. Cite the specific docs page or a repo path (e.g. modules/caddyhttp/reverseproxy/, caddytest/integration/) and fetch it via WebFetch before a non-trivial or version-sensitive claim. Prefer the integration test fixtures under caddytest/ for "is this valid syntax".
  • Don't invent directives, matchers, or placeholders. The standard directive set is what caddy ships built in; the full matcher and placeholder vocabulary is documented. If a directive isn't in the reference, it either doesn't exist or belongs to a plugin that must be built in with xcaddy. Say so rather than guessing syntax.
  • Editing the Caddyfile does nothing until reloaded. A running Caddy holds its config in memory. Changing the file on disk has no effect until caddy reload (or a POST to the admin API). This trips people up constantly; call it out.

Read the full file on GitHub · 251 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. yesterday First seen · 251 lines · 129 tokens per session scan A 9b677e526d82

Subscribe to this mod's changes

specialist:caddy is an agent published in the GitHub repository franzos/claude-plugins (1 stars, last pushed 21d ago), licensed MIT. It adds 129 tokens to every session and 6,795 once invoked, about $0.0006 per session on Opus 5. A static security scan graded it A with 1 finding (makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.