KosmoKrator

productivity

Caddy Lua API for KosmoKrator Agents

Agent-facing Lua documentation and function reference for the Caddy KosmoKrator integration.

Lua Namespace

Agents call this integration through app.integrations.caddy.*. Use lua_read_doc("integrations.caddy") inside KosmoKrator to discover the same reference at runtime.

Call Lua from the Headless CLI

Use kosmo integrations:lua when a shell script, CI job, cron job, or another coding CLI should run a deterministic Caddy workflow without starting an interactive agent session.

Inline Lua call
kosmo integrations:lua --eval 'dump(app.integrations.caddy.list_sites({page = 1, per_page = 1}))' --json
Read Lua docs headlessly
kosmo integrations:lua --eval 'print(docs.read("caddy"))' --json
kosmo integrations:lua --eval 'print(docs.read("caddy.list_sites"))' --json

Workflow file

Put repeatable logic in a Lua file, then execute it with JSON output for the calling process.

workflow.lua
local caddy = app.integrations.caddy
local result = caddy.list_sites({page = 1, per_page = 1})

dump(result)
Run the workflow
kosmo integrations:lua workflow.lua --json
kosmo integrations:lua workflow.lua --force --json
Namespace note. integrations:lua exposes app.integrations.caddy, app.mcp.*, docs.*, json.*, and regex.*. Use app.integrations.caddy.default.* or app.integrations.caddy.work.* when you configured named credential accounts.

MCP-only Lua

If the script only needs configured MCP servers and does not need Caddy, use the narrower mcp:lua command.

MCP Lua command
# Use mcp:lua for MCP-only scripts; use integrations:lua for this integration namespace.
kosmo mcp:lua --eval 'dump(mcp.servers())' --json

Agent-Facing Lua Docs

This is the rendered version of the full Lua documentation exposed to agents when they inspect the integration namespace.

Caddy — Lua API Reference

list_sites

List all Caddy sites.

Parameters

NameTypeRequiredDescription
pageintegernoPage number for pagination (default: 1)
per_pageintegernoNumber of sites per page (default: 20)

Examples

-- List all sites
local result = app.integrations.caddy.list_sites({})

for _, site in ipairs(result.sites) do
  print(site.name .. " (" .. site.status .. ") - " .. site.id)
end
-- Paginated listing
local result = app.integrations.caddy.list_sites({
  page = 2,
  per_page = 10
})

get_site

Get detailed information about a specific Caddy site.

Parameters

NameTypeRequiredDescription
site_idstringyesThe site identifier

Examples

local result = app.integrations.caddy.get_site({
  site_id = "abc123"
})

print("Site: " .. result.name)
print("Status: " .. result.status)

create_site

Create a new site in Caddy.

Parameters

NameTypeRequiredDescription
namestringyesThe domain name for the site (e.g., “example.com”)
configobjectnoOptional site configuration (Caddy JSON config or key-value pairs)

Examples

-- Create a basic site
local result = app.integrations.caddy.create_site({
  name = "mysite.example.com"
})

print(result.message)
print("Site ID: " .. result.id)
-- Create a site with custom config
local result = app.integrations.caddy.create_site({
  name = "mysite.example.com",
  config = {
    auto_https = "on",
    log_format = "json"
  }
})

delete_site

Delete a site from Caddy. This action is irreversible.

Parameters

NameTypeRequiredDescription
site_idstringyesThe site identifier to delete

Examples

local result = app.integrations.caddy.delete_site({
  site_id = "abc123"
})

print(result.message)

list_certificates

List all TLS certificates managed by Caddy.

Parameters

NameTypeRequiredDescription
pageintegernoPage number for pagination (default: 1)
per_pageintegernoNumber of certificates per page (default: 20)

Examples

-- List all certificates
local result = app.integrations.caddy.list_certificates({})

for _, cert in ipairs(result.certificates) do
  print(cert.domain .. " expires: " .. (cert.expires_at or "N/A"))
end
-- Paginated listing
local result = app.integrations.caddy.list_certificates({
  page = 1,
  per_page = 50
})

get_certificate

Get detailed information about a specific TLS certificate.

Parameters

NameTypeRequiredDescription
certificate_idstringyesThe certificate identifier

Examples

local result = app.integrations.caddy.get_certificate({
  certificate_id = "cert-abc123"
})

print("Domain: " .. result.domain)
print("Issuer: " .. (result.issuer or "N/A"))
print("Valid from: " .. (result.not_before or "N/A"))
print("Expires: " .. (result.not_after or "N/A"))
print("SANs: " .. table.concat(result.sans or {}, ", "))

get_current_user

Get details of the currently authenticated Caddy user.

Parameters

None.

Examples

local result = app.integrations.caddy.get_current_user({})

print("User: " .. result.username .. " (" .. result.email .. ")")

Multi-Account Usage

If you have multiple Caddy accounts configured, use account-specific namespaces:

-- Default account (always works)
app.integrations.caddy.function_name({...})

-- Explicit default (portable across setups)
app.integrations.caddy.default.function_name({...})

-- Named accounts
app.integrations.caddy.production.function_name({...})
app.integrations.caddy.staging.function_name({...})

All functions are identical across accounts — only the credentials differ.

Raw agent markdown
# Caddy — Lua API Reference

## list_sites

List all Caddy sites.

### Parameters

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `page` | integer | no | Page number for pagination (default: 1) |
| `per_page` | integer | no | Number of sites per page (default: 20) |

### Examples

```lua
-- List all sites
local result = app.integrations.caddy.list_sites({})

for _, site in ipairs(result.sites) do
  print(site.name .. " (" .. site.status .. ") - " .. site.id)
end
```

```lua
-- Paginated listing
local result = app.integrations.caddy.list_sites({
  page = 2,
  per_page = 10
})
```

---

## get_site

Get detailed information about a specific Caddy site.

### Parameters

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `site_id` | string | yes | The site identifier |

### Examples

```lua
local result = app.integrations.caddy.get_site({
  site_id = "abc123"
})

print("Site: " .. result.name)
print("Status: " .. result.status)
```

---

## create_site

Create a new site in Caddy.

### Parameters

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `name` | string | yes | The domain name for the site (e.g., "example.com") |
| `config` | object | no | Optional site configuration (Caddy JSON config or key-value pairs) |

### Examples

```lua
-- Create a basic site
local result = app.integrations.caddy.create_site({
  name = "mysite.example.com"
})

print(result.message)
print("Site ID: " .. result.id)
```

```lua
-- Create a site with custom config
local result = app.integrations.caddy.create_site({
  name = "mysite.example.com",
  config = {
    auto_https = "on",
    log_format = "json"
  }
})
```

---

## delete_site

Delete a site from Caddy. This action is irreversible.

### Parameters

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `site_id` | string | yes | The site identifier to delete |

### Examples

```lua
local result = app.integrations.caddy.delete_site({
  site_id = "abc123"
})

print(result.message)
```

---

## list_certificates

List all TLS certificates managed by Caddy.

### Parameters

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `page` | integer | no | Page number for pagination (default: 1) |
| `per_page` | integer | no | Number of certificates per page (default: 20) |

### Examples

```lua
-- List all certificates
local result = app.integrations.caddy.list_certificates({})

for _, cert in ipairs(result.certificates) do
  print(cert.domain .. " expires: " .. (cert.expires_at or "N/A"))
end
```

```lua
-- Paginated listing
local result = app.integrations.caddy.list_certificates({
  page = 1,
  per_page = 50
})
```

---

## get_certificate

Get detailed information about a specific TLS certificate.

### Parameters

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `certificate_id` | string | yes | The certificate identifier |

### Examples

```lua
local result = app.integrations.caddy.get_certificate({
  certificate_id = "cert-abc123"
})

print("Domain: " .. result.domain)
print("Issuer: " .. (result.issuer or "N/A"))
print("Valid from: " .. (result.not_before or "N/A"))
print("Expires: " .. (result.not_after or "N/A"))
print("SANs: " .. table.concat(result.sans or {}, ", "))
```

---

## get_current_user

Get details of the currently authenticated Caddy user.

### Parameters

None.

### Examples

```lua
local result = app.integrations.caddy.get_current_user({})

print("User: " .. result.username .. " (" .. result.email .. ")")
```

---

## Multi-Account Usage

If you have multiple Caddy accounts configured, use account-specific namespaces:

```lua
-- Default account (always works)
app.integrations.caddy.function_name({...})

-- Explicit default (portable across setups)
app.integrations.caddy.default.function_name({...})

-- Named accounts
app.integrations.caddy.production.function_name({...})
app.integrations.caddy.staging.function_name({...})
```

All functions are identical across accounts — only the credentials differ.
Metadata-derived Lua example
local result = app.integrations.caddy.list_sites({page = 1, per_page = 1})
print(result)

Functions

list_sites Read

List all Caddy sites. Returns site IDs, domain names, status, and configuration details.

Lua path
app.integrations.caddy.list_sites
Full name
caddy.caddy_list_sites
ParameterTypeRequiredDescription
page integer no Page number for pagination (default: 1).
per_page integer no Number of sites per page (default: 20).
get_site Read

Get detailed information about a specific Caddy site, including its configuration, domain, and status.

Lua path
app.integrations.caddy.get_site
Full name
caddy.caddy_get_site
ParameterTypeRequiredDescription
site_id string yes The site identifier.
create_site Write

Create a new site in Caddy. Specify the domain name and optional configuration parameters.

Lua path
app.integrations.caddy.create_site
Full name
caddy.caddy_create_site
ParameterTypeRequiredDescription
name string yes The domain name for the site (e.g., "example.com").
config object no Optional site configuration (Caddy JSON config or key-value pairs).
delete_site Write

Delete a site from Caddy. This action is irreversible and will remove the site and its configuration.

Lua path
app.integrations.caddy.delete_site
Full name
caddy.caddy_delete_site
ParameterTypeRequiredDescription
site_id string yes The site identifier to delete.
list_certificates Read

List all TLS certificates managed by Caddy. Returns certificate IDs, domains, expiry dates, and status.

Lua path
app.integrations.caddy.list_certificates
Full name
caddy.caddy_list_certificates
ParameterTypeRequiredDescription
page integer no Page number for pagination (default: 1).
per_page integer no Number of certificates per page (default: 20).
get_certificate Read

Get detailed information about a specific TLS certificate, including domain, issuer, validity, and SANs.

Lua path
app.integrations.caddy.get_certificate
Full name
caddy.caddy_get_certificate
ParameterTypeRequiredDescription
certificate_id string yes The certificate identifier.
get_current_user Read

Get details of the currently authenticated Caddy user. Returns user ID, email, username, and account info.

Lua path
app.integrations.caddy.get_current_user
Full name
caddy.caddy_get_current_user
ParameterTypeRequiredDescription
No parameters.